chore: Update discovery artifacts (#1208)

## Discovery Artifact Change Summary:
admindirectory_v1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/3fc3b7614d5df2917e6285a1d4834cbcffd7c665)
adminreports_v1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/3fc3b7614d5df2917e6285a1d4834cbcffd7c665)
admobv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/a2400d9c226a479be6532e1e2822efecc72b87c5)
admobv1beta[ [More details]](https://github.com/googleapis/google-api-python-client/commit/a2400d9c226a479be6532e1e2822efecc72b87c5)
analyticsv3[ [More details]](https://github.com/googleapis/google-api-python-client/commit/61136a15f60ec8deedca3f31a575865c3a28e49b)
analyticsreportingv4[ [More details]](https://github.com/googleapis/google-api-python-client/commit/03ee301449791d11cb7653d9a6431418304e5fbe)
androidenterprisev1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/09a9ddc212d0062fcac494136a4fc21015cfa527)
assuredworkloadsv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/a7b9f4cadc1168ec764f0839027d17a9a474a9ed)
bigquerydatatransferv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/52de288372258c6c926f646e8b77ced31245f705)
classroomv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/ec6203468fc483eec6a65c9464443f2d1a0b79c0)
cloudassetv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/0e739c196ee75a225348798e2eb29b1ba599841a)
cloudassetv1beta1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/0e739c196ee75a225348798e2eb29b1ba599841a)
cloudassetv1p1beta1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/0e739c196ee75a225348798e2eb29b1ba599841a)
cloudassetv1p4beta1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/0e739c196ee75a225348798e2eb29b1ba599841a)
cloudassetv1p5beta1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/0e739c196ee75a225348798e2eb29b1ba599841a)
cloudassetv1p7beta1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/0e739c196ee75a225348798e2eb29b1ba599841a)
clouderrorreportingv1beta1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/aee2d1da567892798889b6231852bfb48a749de1)
cloudiotv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/c1635fdcd108c85ca6be0901ecb9f7f7468b7e3d)
cloudsearchv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/3ee9ab15d37a6c933d8b48eda9fec8125309040a)
cloudshellv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/e10759569feb88aa1a02472719a21f7beaa8a349)
containerv1beta1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/47958636b0fa68d9c23bacd765b90954293c7551)
datalabelingv1beta1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/ad487d5fd8455823ed044dd6567d1e1a85729755)
dfareportingv3.3[ [More details]](https://github.com/googleapis/google-api-python-client/commit/fc38ed0d8aabe80a003866059d59f03b67c9de9f)
dfareportingv3.4[ [More details]](https://github.com/googleapis/google-api-python-client/commit/fc38ed0d8aabe80a003866059d59f03b67c9de9f)
docsv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/c6dcde43ee5c4bf53fcbbdbc52a88b73b9c45e2d)
domainsv1alpha2[ [More details]](https://github.com/googleapis/google-api-python-client/commit/92b5958ee1e954019be6582e7ce80703ff91f17d)
domainsv1beta1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/92b5958ee1e954019be6582e7ce80703ff91f17d)
doubleclickbidmanagerv1.1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/2cf24fd0a733a07b55ad481165e9635b4e7bf9a3)
drivev2[ [More details]](https://github.com/googleapis/google-api-python-client/commit/a060399fea6a34ed6982db0186345eac27eedadd)
drivev3[ [More details]](https://github.com/googleapis/google-api-python-client/commit/a060399fea6a34ed6982db0186345eac27eedadd)
fcmv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/348a8bc10b44abe8e994b1619bee5e2333074411)
firebasehostingv1beta1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/15eb02bb44876ab6873539c206c064bd08e6684c)
fitnessv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/b40a9bb9c0f0c18c4839f58ecbe5f85c84053259)
gmailv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/6a77c586893584132d964293e1be34356d5fbfcb)
groupssettingsv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/bbbcfde0767f9dff176b9dce7432b4d7f2bc739e)
homegraphv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/a867202c70cd9e7ee711ae13e43b8c5ce3f4cdbf)
indexnan[ [More details]](https://github.com/googleapis/google-api-python-client/commit/a867202c70cd9e7ee711ae13e43b8c5ce3f4cdbf)
loggingv2[ [More details]](https://github.com/googleapis/google-api-python-client/commit/8fcbde03c7790ced3dbcba11e05bea7a8f451ac4)
peoplev1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/6e4c87a393b295e72ec11a5b1e752e2c139685df)
recommendationenginev1beta1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/e6ace9e4dfbe429016788fd3a4a32de8f359a2d1)
recommenderv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/c340d3f0d43cb250159fda91a0f884c06aa19346)
recommenderv1beta1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/c340d3f0d43cb250159fda91a0f884c06aa19346)
redisv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/f0d31fe127c3bcac9285457ff6510a6d9b4d7025)
redisv1beta1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/f0d31fe127c3bcac9285457ff6510a6d9b4d7025)
scriptv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/d235c949a32d1ce099cc6f1f161dc4930949bd80)
servicedirectoryv1beta1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/b8e06d2e15229e868b698cb4a296f3202f84bf24)
servicemanagementv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/eb37d585a103ca332e3af48a0f46c1408e805863)
smartdevicemanagementv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/67bfa0e50eb1a761222f3d424e662043b0a29171)
streetviewpublishv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/5825e78ab4c5b3a0bbfc85fa332e4962096fdb55)
tasksv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/dcd228af6573a3163da3cfaca9c0cb6cd679d282)
texttospeechv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/43220b5cd401440812e76821e6cbd5c3099659cd)
texttospeechv1beta1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/43220b5cd401440812e76821e6cbd5c3099659cd)
trafficdirectorv2[ [More details]](https://github.com/googleapis/google-api-python-client/commit/4141254d0c9f8627a35a5be19f23f673fc619164)
translatev3[ [More details]](https://github.com/googleapis/google-api-python-client/commit/b0bec6c2662ed00b6e80c5fd361fadf396f4e00c)
translatev3beta1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/b0bec6c2662ed00b6e80c5fd361fadf396f4e00c)
vaultv1[ [More details]](https://github.com/googleapis/google-api-python-client/commit/f946ac2b3cfa3f8566ceea85110b919a7d974352)
workflowsv1beta[ [More details]](https://github.com/googleapis/google-api-python-client/commit/a4ff4fcf07923786768354ab7f5cdef28ba3e29f)
diff --git a/docs/dyn/admin_directory_v1.users.html b/docs/dyn/admin_directory_v1.users.html
index c7ea303..d362968 100644
--- a/docs/dyn/admin_directory_v1.users.html
+++ b/docs/dyn/admin_directory_v1.users.html
@@ -97,7 +97,7 @@
   <code><a href="#insert">insert(body=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Creates a user.</p>
 <p class="toc_element">
-  <code><a href="#list">list(customFieldMask=None, customer=None, domain=None, maxResults=None, orderBy=None, pageToken=None, projection=None, query=None, showDeleted=None, sortOrder=None, viewType=None, x__xgafv=None)</a></code></p>
+  <code><a href="#list">list(customFieldMask=None, customer=None, domain=None, event=None, maxResults=None, orderBy=None, pageToken=None, projection=None, query=None, showDeleted=None, sortOrder=None, viewType=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Retrieves a paginated list of either deleted users or all users in a domain.</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
@@ -367,13 +367,21 @@
 </div>
 
 <div class="method">
-    <code class="details" id="list">list(customFieldMask=None, customer=None, domain=None, maxResults=None, orderBy=None, pageToken=None, projection=None, query=None, showDeleted=None, sortOrder=None, viewType=None, x__xgafv=None)</code>
+    <code class="details" id="list">list(customFieldMask=None, customer=None, domain=None, event=None, maxResults=None, orderBy=None, pageToken=None, projection=None, query=None, showDeleted=None, sortOrder=None, viewType=None, x__xgafv=None)</code>
   <pre>Retrieves a paginated list of either deleted users or all users in a domain.
 
 Args:
   customFieldMask: string, A comma-separated list of schema names. All fields from these schemas are fetched. This should only be set when `projection=custom`.
   customer: string, The unique ID for the customer&#x27;s Google Workspace account. In case of a multi-domain account, to fetch all groups for a customer, fill this field instead of domain. You can also use the `my_customer` alias to represent your account&#x27;s `customerId`. The `customerId` is also returned as part of the [Users resource](/admin-sdk/directory/v1/reference/users). Either the `customer` or the `domain` parameter must be provided.
   domain: string, The domain name. Use this field to get fields from only one domain. To return all domains for a customer account, use the `customer` query parameter instead. Either the `customer` or the `domain` parameter must be provided.
+  event: string, Event on which subscription is intended (if subscribing)
+    Allowed values
+      eventUndefined - 
+      add - User Created Event
+      delete - User Deleted Event
+      makeAdmin - User Admin Status Change Event
+      undelete - User Undeleted Event
+      update - User Updated Event
   maxResults: integer, Maximum number of results to return.
   orderBy: string, Property to use for sorting results.
     Allowed values
diff --git a/docs/dyn/admin_reports_v1.activities.html b/docs/dyn/admin_reports_v1.activities.html
index f840e84..f386342 100644
--- a/docs/dyn/admin_reports_v1.activities.html
+++ b/docs/dyn/admin_reports_v1.activities.html
@@ -97,15 +97,15 @@
   <pre>Retrieves a list of activities for a specific customer&#x27;s account and application such as the Admin console application or the Google Drive application. For more information, see the guides for administrator and Google Drive activity reports. For more information about the activity report&#x27;s parameters, see the activity parameters reference guides. 
 
 Args:
-  userKey: string, Represents the profile ID or the user email for which the data should be filtered. Can be `all` for all information, or `userKey` for a user&#x27;s unique G Suite profile ID or their primary email address. (required)
+  userKey: string, Represents the profile ID or the user email for which the data should be filtered. Can be `all` for all information, or `userKey` for a user&#x27;s unique Google Workspace profile ID or their primary email address. (required)
   applicationName: string, Application name for which the events are to be retrieved. (required)
     Allowed values
       application_name_undefined - 
-      access_transparency - The G Suite Access Transparency activity reports return information about different types of Access Transparency activity events.
+      access_transparency - The Google Workspace Access Transparency activity reports return information about different types of Access Transparency activity events.
       admin - The Admin console application&#x27;s activity reports return account information about different types of administrator activity events.
-      calendar - The G Suite Calendar application&#x27;s activity reports return information about various Calendar activity events.
+      calendar - The Google Calendar application&#x27;s activity reports return information about various Calendar activity events.
       chat - The Chat activity reports return information about various Chat activity events.
-      drive - The Google Drive application&#x27;s activity reports return information about various Google Drive activity events. The Drive activity report is only available for G Suite Business customers.
+      drive - The Google Drive application&#x27;s activity reports return information about various Google Drive activity events. The Drive activity report is only available for Google Workspace Business and Enterprise customers.
       gcp - The Google Cloud Platform application&#x27;s activity reports return information about various GCP activity events.
       gplus - The Google+ application&#x27;s activity reports return information about various Google+ activity events.
       groups - The Google Groups application&#x27;s activity reports return information about various Groups activity events.
@@ -124,7 +124,7 @@
   actorIpAddress: string, The Internet Protocol (IP) Address of host where the event was performed. This is an additional way to filter a report&#x27;s summary using the IP address of the user whose activity is being reported. This IP address may or may not reflect the user&#x27;s physical location. For example, the IP address can be the user&#x27;s proxy server&#x27;s address or a virtual private network (VPN) address. This parameter supports both IPv4 and IPv6 address versions.
   customerId: string, The unique ID of the customer to retrieve data for.
   endTime: string, Sets the end of the range of time shown in the report. The date is in the RFC 3339 format, for example 2010-10-28T10:26:35.000Z. The default value is the approximate time of the API request. An API report has three basic time concepts: - *Date of the API&#x27;s request for a report*: When the API created and retrieved the report. - *Report&#x27;s start time*: The beginning of the timespan shown in the report. The `startTime` must be before the `endTime` (if specified) and the current time when the request is made, or the API returns an error. - *Report&#x27;s end time*: The end of the timespan shown in the report. For example, the timespan of events summarized in a report can start in April and end in May. The report itself can be requested in August. If the `endTime` is not specified, the report returns all activities from the `startTime` until the current time or the most recent 180 days if the `startTime` is more than 180 days in the past.
-  eventName: string, The name of the event being queried by the API. Each `eventName` is related to a specific G Suite service or feature which the API organizes into types of events. An example is the Google Calendar events in the Admin console application&#x27;s reports. The Calendar Settings `type` structure has all of the Calendar `eventName` activities reported by the API. When an administrator changes a Calendar setting, the API reports this activity in the Calendar Settings `type` and `eventName` parameters. For more information about `eventName` query strings and parameters, see the list of event names for various applications above in `applicationName`.
+  eventName: string, The name of the event being queried by the API. Each `eventName` is related to a specific Google Workspace service or feature which the API organizes into types of events. An example is the Google Calendar events in the Admin console application&#x27;s reports. The Calendar Settings `type` structure has all of the Calendar `eventName` activities reported by the API. When an administrator changes a Calendar setting, the API reports this activity in the Calendar Settings `type` and `eventName` parameters. For more information about `eventName` query strings and parameters, see the list of event names for various applications above in `applicationName`.
   filters: string, The `filters` query string is a comma-separated list. The list is composed of event parameters that are manipulated by relational operators. Event parameters are in the form `parameter1 name[parameter1 value],parameter2 name[parameter2 value],...` These event parameters are associated with a specific `eventName`. An empty report is returned if the filtered request&#x27;s parameter does not belong to the `eventName`. For more information about `eventName` parameters, see the list of event names for various applications above in `applicationName`. In the following Admin Activity example, the &lt;&gt; operator is URL-encoded in the request&#x27;s query string (%3C%3E): GET...&amp;eventName=CHANGE_CALENDAR_SETTING &amp;filters=NEW_VALUE%3C%3EREAD_ONLY_ACCESS In the following Drive example, the list can be a view or edit event&#x27;s `doc_id` parameter with a value that is manipulated by an &#x27;equal to&#x27; (==) or &#x27;not equal to&#x27; (&lt;&gt;) relational operator. In the first example, the report returns each edited document&#x27;s `doc_id`. In the second example, the report returns each viewed document&#x27;s `doc_id` that equals the value 12345 and does not return any viewed document&#x27;s which have a `doc_id` value of 98765. The &lt;&gt; operator is URL-encoded in the request&#x27;s query string (%3C%3E): GET...&amp;eventName=edit&amp;filters=doc_id GET...&amp;eventName=view&amp;filters=doc_id==12345,doc_id%3C%3E98765 The relational operators include: - `==` - &#x27;equal to&#x27;. - `&lt;&gt;` - &#x27;not equal to&#x27;. It is URL-encoded (%3C%3E). - `&lt;` - &#x27;less than&#x27;. It is URL-encoded (%3C). - `&lt;=` - &#x27;less than or equal to&#x27;. It is URL-encoded (%3C=). - `&gt;` - &#x27;greater than&#x27;. It is URL-encoded (%3E). - `&gt;=` - &#x27;greater than or equal to&#x27;. It is URL-encoded (%3E=). *Note:* The API doesn&#x27;t accept multiple values of a parameter. If a particular parameter is supplied more than once in the API request, the API only accepts the last value of that request parameter. In addition, if an invalid request parameter is supplied in the API request, the API ignores that request parameter and returns the response corresponding to the remaining valid request parameters. If no parameters are requested, all parameters are returned. 
   groupIdFilter: string, Comma separated group ids (obfuscated) on which user activities are filtered, i.e, the response will contain activities for only those users that are a part of at least one of the group ids mentioned here. Format: &quot;id:abc123,id:xyz456&quot;
   maxResults: integer, Determines how many activity records are shown on each response page. For example, if the request sets `maxResults=1` and the report has two activities, the report has two pages. The response&#x27;s `nextPageToken` property has the token to the second page. The `maxResults` query string is optional in the request. The default value is 1000.
@@ -147,12 +147,12 @@
         &quot;callerType&quot;: &quot;A String&quot;, # The type of actor.
         &quot;email&quot;: &quot;A String&quot;, # The primary email address of the actor. May be absent if there is no email address associated with the actor.
         &quot;key&quot;: &quot;A String&quot;, # Only present when `callerType` is `KEY`. Can be the `consumer_key` of the requestor for OAuth 2LO API requests or an identifier for robot accounts.
-        &quot;profileId&quot;: &quot;A String&quot;, # The unique G Suite profile ID of the actor. May be absent if the actor is not a G Suite user.
+        &quot;profileId&quot;: &quot;A String&quot;, # The unique Google Workspace profile ID of the actor. May be absent if the actor is not a Google Workspace user.
       },
       &quot;etag&quot;: &quot;A String&quot;, # ETag of the entry.
       &quot;events&quot;: [ # Activity events in the report.
         {
-          &quot;name&quot;: &quot;A String&quot;, # Name of the event. This is the specific name of the activity reported by the API. And each `eventName` is related to a specific G Suite service or feature which the API organizes into types of events. For `eventName` request parameters in general: - If no `eventName` is given, the report returns all possible instances of an `eventName`. - When you request an `eventName`, the API&#x27;s response returns all activities which contain that `eventName`. It is possible that the returned activities will have other `eventName` properties in addition to the one requested. For more information about `eventName` properties, see the list of event names for various applications above in `applicationName`.
+          &quot;name&quot;: &quot;A String&quot;, # Name of the event. This is the specific name of the activity reported by the API. And each `eventName` is related to a specific Google Workspace service or feature which the API organizes into types of events. For `eventName` request parameters in general: - If no `eventName` is given, the report returns all possible instances of an `eventName`. - When you request an `eventName`, the API&#x27;s response returns all activities which contain that `eventName`. It is possible that the returned activities will have other `eventName` properties in addition to the one requested. For more information about `eventName` properties, see the list of event names for various applications above in `applicationName`.
           &quot;parameters&quot;: [ # Parameter value pairs for various applications. For more information about `eventName` parameters, see the list of event names for various applications above in `applicationName`.
             {
               &quot;boolValue&quot;: True or False, # Boolean value of the parameter.
@@ -207,16 +207,16 @@
               &quot;value&quot;: &quot;A String&quot;, # String value of the parameter.
             },
           ],
-          &quot;type&quot;: &quot;A String&quot;, # Type of event. The G Suite service or feature that an administrator changes is identified in the `type` property which identifies an event using the `eventName` property. For a full list of the API&#x27;s `type` categories, see the list of event names for various applications above in `applicationName`.
+          &quot;type&quot;: &quot;A String&quot;, # Type of event. The Google Workspace service or feature that an administrator changes is identified in the `type` property which identifies an event using the `eventName` property. For a full list of the API&#x27;s `type` categories, see the list of event names for various applications above in `applicationName`.
         },
       ],
       &quot;id&quot;: { # Unique identifier for each activity record.
         &quot;applicationName&quot;: &quot;A String&quot;, # Application name to which the event belongs. For possible values see the list of applications above in `applicationName`.
-        &quot;customerId&quot;: &quot;A String&quot;, # The unique identifier for a G suite account.
+        &quot;customerId&quot;: &quot;A String&quot;, # The unique identifier for a Google Workspace account.
         &quot;time&quot;: &quot;A String&quot;, # Time of occurrence of the activity. This is in UNIX epoch time in seconds.
         &quot;uniqueQualifier&quot;: &quot;A String&quot;, # Unique qualifier if multiple events have the same time.
       },
-      &quot;ipAddress&quot;: &quot;A String&quot;, # IP address of the user doing the action. This is the Internet Protocol (IP) address of the user when logging into G Suite which may or may not reflect the user&#x27;s physical location. For example, the IP address can be the user&#x27;s proxy server&#x27;s address or a virtual private network (VPN) address. The API supports IPv4 and IPv6.
+      &quot;ipAddress&quot;: &quot;A String&quot;, # IP address of the user doing the action. This is the Internet Protocol (IP) address of the user when logging into Google Workspace, which may or may not reflect the user&#x27;s physical location. For example, the IP address can be the user&#x27;s proxy server&#x27;s address or a virtual private network (VPN) address. The API supports IPv4 and IPv6.
       &quot;kind&quot;: &quot;admin#reports#activity&quot;, # The type of API resource. For an activity report, the value is `audit#activity`.
       &quot;ownerDomain&quot;: &quot;A String&quot;, # This is the domain that is affected by the report&#x27;s event. For example domain of Admin console or the Drive application&#x27;s document owner.
     },
@@ -245,15 +245,15 @@
   <pre>Start receiving notifications for account activities. For more information, see Receiving Push Notifications.
 
 Args:
-  userKey: string, Represents the profile ID or the user email for which the data should be filtered. Can be `all` for all information, or `userKey` for a user&#x27;s unique G Suite profile ID or their primary email address. (required)
+  userKey: string, Represents the profile ID or the user email for which the data should be filtered. Can be `all` for all information, or `userKey` for a user&#x27;s unique Google Workspace profile ID or their primary email address. (required)
   applicationName: string, Application name for which the events are to be retrieved. (required)
     Allowed values
       application_name_unspecified - 
-      access_transparency - The G Suite Access Transparency activity reports return information about different types of Access Transparency activity events.
+      access_transparency - The Google Workspace Access Transparency activity reports return information about different types of Access Transparency activity events.
       admin - The Admin console application&#x27;s activity reports return account information about different types of administrator activity events.
-      calendar - The G Suite Calendar application&#x27;s activity reports return information about various Calendar activity events.
+      calendar - The Google Calendar application&#x27;s activity reports return information about various Calendar activity events.
       chat - The Chat activity reports return information about various Chat activity events.
-      drive - The Google Drive application&#x27;s activity reports return information about various Google Drive activity events. The Drive activity report is only available for G Suite Business customers.
+      drive - The Google Drive application&#x27;s activity reports return information about various Google Drive activity events. The Drive activity report is only available for Google Workspace Business and Google Workspace Enterprise customers.
       gcp - The Google Cloud Platform application&#x27;s activity reports return information about various GCP activity events.
       gplus - The Google+ application&#x27;s activity reports return information about various Google+ activity events.
       groups - The Google Groups application&#x27;s activity reports return information about various Groups activity events.
@@ -290,7 +290,7 @@
   actorIpAddress: string, The Internet Protocol (IP) Address of host where the event was performed. This is an additional way to filter a report&#x27;s summary using the IP address of the user whose activity is being reported. This IP address may or may not reflect the user&#x27;s physical location. For example, the IP address can be the user&#x27;s proxy server&#x27;s address or a virtual private network (VPN) address. This parameter supports both IPv4 and IPv6 address versions.
   customerId: string, The unique ID of the customer to retrieve data for.
   endTime: string, Sets the end of the range of time shown in the report. The date is in the RFC 3339 format, for example 2010-10-28T10:26:35.000Z. The default value is the approximate time of the API request. An API report has three basic time concepts: - *Date of the API&#x27;s request for a report*: When the API created and retrieved the report. - *Report&#x27;s start time*: The beginning of the timespan shown in the report. The `startTime` must be before the `endTime` (if specified) and the current time when the request is made, or the API returns an error. - *Report&#x27;s end time*: The end of the timespan shown in the report. For example, the timespan of events summarized in a report can start in April and end in May. The report itself can be requested in August. If the `endTime` is not specified, the report returns all activities from the `startTime` until the current time or the most recent 180 days if the `startTime` is more than 180 days in the past.
-  eventName: string, The name of the event being queried by the API. Each `eventName` is related to a specific G Suite service or feature which the API organizes into types of events. An example is the Google Calendar events in the Admin console application&#x27;s reports. The Calendar Settings `type` structure has all of the Calendar `eventName` activities reported by the API. When an administrator changes a Calendar setting, the API reports this activity in the Calendar Settings `type` and `eventName` parameters. For more information about `eventName` query strings and parameters, see the list of event names for various applications above in `applicationName`.
+  eventName: string, The name of the event being queried by the API. Each `eventName` is related to a specific Google Workspace service or feature which the API organizes into types of events. An example is the Google Calendar events in the Admin console application&#x27;s reports. The Calendar Settings `type` structure has all of the Calendar `eventName` activities reported by the API. When an administrator changes a Calendar setting, the API reports this activity in the Calendar Settings `type` and `eventName` parameters. For more information about `eventName` query strings and parameters, see the list of event names for various applications above in `applicationName`.
   filters: string, The `filters` query string is a comma-separated list. The list is composed of event parameters that are manipulated by relational operators. Event parameters are in the form `parameter1 name[parameter1 value],parameter2 name[parameter2 value],...` These event parameters are associated with a specific `eventName`. An empty report is returned if the filtered request&#x27;s parameter does not belong to the `eventName`. For more information about `eventName` parameters, see the list of event names for various applications above in `applicationName`. In the following Admin Activity example, the &lt;&gt; operator is URL-encoded in the request&#x27;s query string (%3C%3E): GET...&amp;eventName=CHANGE_CALENDAR_SETTING &amp;filters=NEW_VALUE%3C%3EREAD_ONLY_ACCESS In the following Drive example, the list can be a view or edit event&#x27;s `doc_id` parameter with a value that is manipulated by an &#x27;equal to&#x27; (==) or &#x27;not equal to&#x27; (&lt;&gt;) relational operator. In the first example, the report returns each edited document&#x27;s `doc_id`. In the second example, the report returns each viewed document&#x27;s `doc_id` that equals the value 12345 and does not return any viewed document&#x27;s which have a `doc_id` value of 98765. The &lt;&gt; operator is URL-encoded in the request&#x27;s query string (%3C%3E): GET...&amp;eventName=edit&amp;filters=doc_id GET...&amp;eventName=view&amp;filters=doc_id==12345,doc_id%3C%3E98765 The relational operators include: - `==` - &#x27;equal to&#x27;. - `&lt;&gt;` - &#x27;not equal to&#x27;. It is URL-encoded (%3C%3E). - `&lt;` - &#x27;less than&#x27;. It is URL-encoded (%3C). - `&lt;=` - &#x27;less than or equal to&#x27;. It is URL-encoded (%3C=). - `&gt;` - &#x27;greater than&#x27;. It is URL-encoded (%3E). - `&gt;=` - &#x27;greater than or equal to&#x27;. It is URL-encoded (%3E=). *Note:* The API doesn&#x27;t accept multiple values of a parameter. If a particular parameter is supplied more than once in the API request, the API only accepts the last value of that request parameter. In addition, if an invalid request parameter is supplied in the API request, the API ignores that request parameter and returns the response corresponding to the remaining valid request parameters. If no parameters are requested, all parameters are returned. 
   groupIdFilter: string, Comma separated group ids (obfuscated) on which user activities are filtered, i.e, the response will contain activities for only those users that are a part of at least one of the group ids mentioned here. Format: &quot;id:abc123,id:xyz456&quot;
   maxResults: integer, Determines how many activity records are shown on each response page. For example, if the request sets `maxResults=1` and the report has two activities, the report has two pages. The response&#x27;s `nextPageToken` property has the token to the second page. The `maxResults` query string is optional in the request. The default value is 1000.
diff --git a/docs/dyn/admin_reports_v1.customerUsageReports.html b/docs/dyn/admin_reports_v1.customerUsageReports.html
index aaf900e..afa61cd 100644
--- a/docs/dyn/admin_reports_v1.customerUsageReports.html
+++ b/docs/dyn/admin_reports_v1.customerUsageReports.html
@@ -116,7 +116,7 @@
       &quot;entity&quot;: { # Output only. Information about the type of the item.
         &quot;customerId&quot;: &quot;A String&quot;, # Output only. The unique identifier of the customer&#x27;s account.
         &quot;entityId&quot;: &quot;A String&quot;, # Output only. Object key. Only relevant if entity.type = &quot;OBJECT&quot; Note: external-facing name of report is &quot;Entities&quot; rather than &quot;Objects&quot;.
-        &quot;profileId&quot;: &quot;A String&quot;, # Output only. The user&#x27;s immutable G Suite profile identifier.
+        &quot;profileId&quot;: &quot;A String&quot;, # Output only. The user&#x27;s immutable Google Workspace profile identifier.
         &quot;type&quot;: &quot;A String&quot;, # Output only. The type of item. The value is `user`.
         &quot;userEmail&quot;: &quot;A String&quot;, # Output only. The user&#x27;s email address. Only relevant if entity.type = &quot;USER&quot;
       },
diff --git a/docs/dyn/admin_reports_v1.entityUsageReports.html b/docs/dyn/admin_reports_v1.entityUsageReports.html
index 864ad02..7a8e6ed 100644
--- a/docs/dyn/admin_reports_v1.entityUsageReports.html
+++ b/docs/dyn/admin_reports_v1.entityUsageReports.html
@@ -127,7 +127,7 @@
       &quot;entity&quot;: { # Output only. Information about the type of the item.
         &quot;customerId&quot;: &quot;A String&quot;, # Output only. The unique identifier of the customer&#x27;s account.
         &quot;entityId&quot;: &quot;A String&quot;, # Output only. Object key. Only relevant if entity.type = &quot;OBJECT&quot; Note: external-facing name of report is &quot;Entities&quot; rather than &quot;Objects&quot;.
-        &quot;profileId&quot;: &quot;A String&quot;, # Output only. The user&#x27;s immutable G Suite profile identifier.
+        &quot;profileId&quot;: &quot;A String&quot;, # Output only. The user&#x27;s immutable Google Workspace profile identifier.
         &quot;type&quot;: &quot;A String&quot;, # Output only. The type of item. The value is `user`.
         &quot;userEmail&quot;: &quot;A String&quot;, # Output only. The user&#x27;s email address. Only relevant if entity.type = &quot;USER&quot;
       },
diff --git a/docs/dyn/admin_reports_v1.userUsageReport.html b/docs/dyn/admin_reports_v1.userUsageReport.html
index 12b6463..4d5339c 100644
--- a/docs/dyn/admin_reports_v1.userUsageReport.html
+++ b/docs/dyn/admin_reports_v1.userUsageReport.html
@@ -94,7 +94,7 @@
   <pre>Retrieves a report which is a collection of properties and statistics for a set of users with the account. For more information, see the User Usage Report guide. For more information about the user report&#x27;s parameters, see the Users Usage parameters reference guides.
 
 Args:
-  userKey: string, Represents the profile ID or the user email for which the data should be filtered. Can be `all` for all information, or `userKey` for a user&#x27;s unique G Suite profile ID or their primary email address. (required)
+  userKey: string, Represents the profile ID or the user email for which the data should be filtered. Can be `all` for all information, or `userKey` for a user&#x27;s unique Google Workspace profile ID or their primary email address. (required)
   date: string, Represents the date the usage occurred. The timestamp is in the ISO 8601 format, yyyy-mm-dd. We recommend you use your account&#x27;s time zone for this. (required)
   customerId: string, The unique ID of the customer to retrieve data for.
   filters: string, The `filters` query string is a comma-separated list of an application&#x27;s event parameters where the parameter&#x27;s value is manipulated by a relational operator. The `filters` query string includes the name of the application whose usage is returned in the report. The application values for the Users Usage Report include `accounts`, `docs`, and `gmail`. Filters are in the form `[application name]:parameter name[parameter value],...`. In this example, the `&lt;&gt;` &#x27;not equal to&#x27; operator is URL-encoded in the request&#x27;s query string (%3C%3E): GET https://www.googleapis.com/admin/reports/v1/usage/users/all/dates/2013-03-03 ?parameters=accounts:last_login_time &amp;filters=accounts:last_login_time%3C%3E2010-10-28T10:26:35.000Z The relational operators include: - `==` - &#x27;equal to&#x27;. - `&lt;&gt;` - &#x27;not equal to&#x27;. It is URL-encoded (%3C%3E). - `&lt;` - &#x27;less than&#x27;. It is URL-encoded (%3C). - `&lt;=` - &#x27;less than or equal to&#x27;. It is URL-encoded (%3C=). - `&gt;` - &#x27;greater than&#x27;. It is URL-encoded (%3E). - `&gt;=` - &#x27;greater than or equal to&#x27;. It is URL-encoded (%3E=). 
@@ -121,7 +121,7 @@
       &quot;entity&quot;: { # Output only. Information about the type of the item.
         &quot;customerId&quot;: &quot;A String&quot;, # Output only. The unique identifier of the customer&#x27;s account.
         &quot;entityId&quot;: &quot;A String&quot;, # Output only. Object key. Only relevant if entity.type = &quot;OBJECT&quot; Note: external-facing name of report is &quot;Entities&quot; rather than &quot;Objects&quot;.
-        &quot;profileId&quot;: &quot;A String&quot;, # Output only. The user&#x27;s immutable G Suite profile identifier.
+        &quot;profileId&quot;: &quot;A String&quot;, # Output only. The user&#x27;s immutable Google Workspace profile identifier.
         &quot;type&quot;: &quot;A String&quot;, # Output only. The type of item. The value is `user`.
         &quot;userEmail&quot;: &quot;A String&quot;, # Output only. The user&#x27;s email address. Only relevant if entity.type = &quot;USER&quot;
       },
diff --git a/docs/dyn/admob_v1.accounts.html b/docs/dyn/admob_v1.accounts.html
index c2c941f..15a7a1c 100644
--- a/docs/dyn/admob_v1.accounts.html
+++ b/docs/dyn/admob_v1.accounts.html
@@ -92,7 +92,7 @@
 <p class="firstline">Gets information about the specified AdMob publisher account.</p>
 <p class="toc_element">
   <code><a href="#list">list(pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Lists the AdMob publisher account accessible with the client credential. Currently, all credentials have access to at most one AdMob account.</p>
+<p class="firstline">Lists the AdMob publisher account that was most recently signed in to from the AdMob UI. For more information, see https://support.google.com/admob/answer/10243672.</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
 <p class="firstline">Retrieves the next page of results.</p>
@@ -126,7 +126,7 @@
 
 <div class="method">
     <code class="details" id="list">list(pageSize=None, pageToken=None, x__xgafv=None)</code>
-  <pre>Lists the AdMob publisher account accessible with the client credential. Currently, all credentials have access to at most one AdMob account.
+  <pre>Lists the AdMob publisher account that was most recently signed in to from the AdMob UI. For more information, see https://support.google.com/admob/answer/10243672.
 
 Args:
   pageSize: integer, Maximum number of accounts to return.
diff --git a/docs/dyn/admob_v1beta.accounts.adUnits.html b/docs/dyn/admob_v1beta.accounts.adUnits.html
index 354a93e..3758fbf 100644
--- a/docs/dyn/admob_v1beta.accounts.adUnits.html
+++ b/docs/dyn/admob_v1beta.accounts.adUnits.html
@@ -95,7 +95,7 @@
 
 Args:
   parent: string, Required. Resource name of the account to list ad units for. Example: accounts/pub-9876543210987654 (required)
-  pageSize: integer, The maximum number of ad units to return.
+  pageSize: integer, The maximum number of ad units to return. If unspecified or 0, at most 1000 ad units will be returned. The maximum value is 10,000; values above 10,000 will be coerced to 10,000.
   pageToken: string, The value returned by the last `ListAdUnitsResponse`; indicates that this is a continuation of a prior `ListAdUnits` call, and that the system should return the next page of data.
   x__xgafv: string, V1 error format.
     Allowed values
diff --git a/docs/dyn/admob_v1beta.accounts.html b/docs/dyn/admob_v1beta.accounts.html
index b4e8a53..8425ede 100644
--- a/docs/dyn/admob_v1beta.accounts.html
+++ b/docs/dyn/admob_v1beta.accounts.html
@@ -102,7 +102,7 @@
 <p class="firstline">Gets information about the specified AdMob publisher account.</p>
 <p class="toc_element">
   <code><a href="#list">list(pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Lists the AdMob publisher account accessible with the client credential. Currently, all credentials have access to at most one AdMob account.</p>
+<p class="firstline">Lists the AdMob publisher account that was most recently signed in to from the AdMob UI. For more information, see https://support.google.com/admob/answer/10243672.</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
 <p class="firstline">Retrieves the next page of results.</p>
@@ -136,7 +136,7 @@
 
 <div class="method">
     <code class="details" id="list">list(pageSize=None, pageToken=None, x__xgafv=None)</code>
-  <pre>Lists the AdMob publisher account accessible with the client credential. Currently, all credentials have access to at most one AdMob account.
+  <pre>Lists the AdMob publisher account that was most recently signed in to from the AdMob UI. For more information, see https://support.google.com/admob/answer/10243672.
 
 Args:
   pageSize: integer, Maximum number of accounts to return.
diff --git a/docs/dyn/androidenterprise_v1.devices.html b/docs/dyn/androidenterprise_v1.devices.html
index 8c44dc7..4228073 100644
--- a/docs/dyn/androidenterprise_v1.devices.html
+++ b/docs/dyn/androidenterprise_v1.devices.html
@@ -94,7 +94,7 @@
 <p class="firstline">Sets whether a device's access to Google services is enabled or disabled. The device state takes effect only if enforcing EMM policies on Android devices is enabled in the Google Admin Console. Otherwise, the device state is ignored and all devices are allowed access to Google services. This is only supported for Google-managed users.</p>
 <p class="toc_element">
   <code><a href="#update">update(enterpriseId, userId, deviceId, body=None, updateMask=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Updates the device policy</p>
+<p class="firstline">Updates the device policy. To ensure the policy is properly enforced, you need to prevent unmanaged accounts from accessing Google Play by setting the allowed_accounts in the managed configuration for the Google Play package. See restrict accounts in Google Play.</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="close">close()</code>
@@ -386,7 +386,7 @@
 
 <div class="method">
     <code class="details" id="update">update(enterpriseId, userId, deviceId, body=None, updateMask=None, x__xgafv=None)</code>
-  <pre>Updates the device policy
+  <pre>Updates the device policy. To ensure the policy is properly enforced, you need to prevent unmanaged accounts from accessing Google Play by setting the allowed_accounts in the managed configuration for the Google Play package. See restrict accounts in Google Play.
 
 Args:
   enterpriseId: string, The ID of the enterprise. (required)
diff --git a/docs/dyn/bigquerydatatransfer_v1.projects.locations.transferConfigs.html b/docs/dyn/bigquerydatatransfer_v1.projects.locations.transferConfigs.html
index 0221a91..de5c380 100644
--- a/docs/dyn/bigquerydatatransfer_v1.projects.locations.transferConfigs.html
+++ b/docs/dyn/bigquerydatatransfer_v1.projects.locations.transferConfigs.html
@@ -131,7 +131,7 @@
   &quot;emailPreferences&quot;: { # Represents preferences for sending email notifications for transfer run events. # Email notifications will be sent according to these preferences to the email address of the user who owns this transfer config.
     &quot;enableFailureEmail&quot;: True or False, # If true, email notifications will be sent on transfer run failures.
   },
-  &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form of `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. The name is automatically generated based on the config_id specified in CreateTransferConfigRequest along with project_id and region. If config_id is not provided, usually a uuid, even though it is not guaranteed or required, will be generated for config_id.
+  &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. Where `config_id` is usually a uuid, even though it is not guaranteed or required. The name is ignored when creating a transfer config.
   &quot;nextRunTime&quot;: &quot;A String&quot;, # Output only. Next time when data transfer will run.
   &quot;notificationPubsubTopic&quot;: &quot;A String&quot;, # Pub/Sub topic where notifications will be sent after transfer runs associated with this transfer config finish.
   &quot;params&quot;: { # Data transfer specific parameters.
@@ -169,7 +169,7 @@
   &quot;emailPreferences&quot;: { # Represents preferences for sending email notifications for transfer run events. # Email notifications will be sent according to these preferences to the email address of the user who owns this transfer config.
     &quot;enableFailureEmail&quot;: True or False, # If true, email notifications will be sent on transfer run failures.
   },
-  &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form of `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. The name is automatically generated based on the config_id specified in CreateTransferConfigRequest along with project_id and region. If config_id is not provided, usually a uuid, even though it is not guaranteed or required, will be generated for config_id.
+  &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. Where `config_id` is usually a uuid, even though it is not guaranteed or required. The name is ignored when creating a transfer config.
   &quot;nextRunTime&quot;: &quot;A String&quot;, # Output only. Next time when data transfer will run.
   &quot;notificationPubsubTopic&quot;: &quot;A String&quot;, # Pub/Sub topic where notifications will be sent after transfer runs associated with this transfer config finish.
   &quot;params&quot;: { # Data transfer specific parameters.
@@ -229,7 +229,7 @@
   &quot;emailPreferences&quot;: { # Represents preferences for sending email notifications for transfer run events. # Email notifications will be sent according to these preferences to the email address of the user who owns this transfer config.
     &quot;enableFailureEmail&quot;: True or False, # If true, email notifications will be sent on transfer run failures.
   },
-  &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form of `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. The name is automatically generated based on the config_id specified in CreateTransferConfigRequest along with project_id and region. If config_id is not provided, usually a uuid, even though it is not guaranteed or required, will be generated for config_id.
+  &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. Where `config_id` is usually a uuid, even though it is not guaranteed or required. The name is ignored when creating a transfer config.
   &quot;nextRunTime&quot;: &quot;A String&quot;, # Output only. Next time when data transfer will run.
   &quot;notificationPubsubTopic&quot;: &quot;A String&quot;, # Pub/Sub topic where notifications will be sent after transfer runs associated with this transfer config finish.
   &quot;params&quot;: { # Data transfer specific parameters.
@@ -277,7 +277,7 @@
       &quot;emailPreferences&quot;: { # Represents preferences for sending email notifications for transfer run events. # Email notifications will be sent according to these preferences to the email address of the user who owns this transfer config.
         &quot;enableFailureEmail&quot;: True or False, # If true, email notifications will be sent on transfer run failures.
       },
-      &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form of `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. The name is automatically generated based on the config_id specified in CreateTransferConfigRequest along with project_id and region. If config_id is not provided, usually a uuid, even though it is not guaranteed or required, will be generated for config_id.
+      &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. Where `config_id` is usually a uuid, even though it is not guaranteed or required. The name is ignored when creating a transfer config.
       &quot;nextRunTime&quot;: &quot;A String&quot;, # Output only. Next time when data transfer will run.
       &quot;notificationPubsubTopic&quot;: &quot;A String&quot;, # Pub/Sub topic where notifications will be sent after transfer runs associated with this transfer config finish.
       &quot;params&quot;: { # Data transfer specific parameters.
@@ -316,7 +316,7 @@
   <pre>Updates a data transfer configuration. All fields must be set, even if they are not updated.
 
 Args:
-  name: string, The resource name of the transfer config. Transfer config names have the form of `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. The name is automatically generated based on the config_id specified in CreateTransferConfigRequest along with project_id and region. If config_id is not provided, usually a uuid, even though it is not guaranteed or required, will be generated for config_id. (required)
+  name: string, The resource name of the transfer config. Transfer config names have the form `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. Where `config_id` is usually a uuid, even though it is not guaranteed or required. The name is ignored when creating a transfer config. (required)
   body: object, The request body.
     The object takes the form of:
 
@@ -330,7 +330,7 @@
   &quot;emailPreferences&quot;: { # Represents preferences for sending email notifications for transfer run events. # Email notifications will be sent according to these preferences to the email address of the user who owns this transfer config.
     &quot;enableFailureEmail&quot;: True or False, # If true, email notifications will be sent on transfer run failures.
   },
-  &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form of `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. The name is automatically generated based on the config_id specified in CreateTransferConfigRequest along with project_id and region. If config_id is not provided, usually a uuid, even though it is not guaranteed or required, will be generated for config_id.
+  &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. Where `config_id` is usually a uuid, even though it is not guaranteed or required. The name is ignored when creating a transfer config.
   &quot;nextRunTime&quot;: &quot;A String&quot;, # Output only. Next time when data transfer will run.
   &quot;notificationPubsubTopic&quot;: &quot;A String&quot;, # Pub/Sub topic where notifications will be sent after transfer runs associated with this transfer config finish.
   &quot;params&quot;: { # Data transfer specific parameters.
@@ -369,7 +369,7 @@
   &quot;emailPreferences&quot;: { # Represents preferences for sending email notifications for transfer run events. # Email notifications will be sent according to these preferences to the email address of the user who owns this transfer config.
     &quot;enableFailureEmail&quot;: True or False, # If true, email notifications will be sent on transfer run failures.
   },
-  &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form of `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. The name is automatically generated based on the config_id specified in CreateTransferConfigRequest along with project_id and region. If config_id is not provided, usually a uuid, even though it is not guaranteed or required, will be generated for config_id.
+  &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. Where `config_id` is usually a uuid, even though it is not guaranteed or required. The name is ignored when creating a transfer config.
   &quot;nextRunTime&quot;: &quot;A String&quot;, # Output only. Next time when data transfer will run.
   &quot;notificationPubsubTopic&quot;: &quot;A String&quot;, # Pub/Sub topic where notifications will be sent after transfer runs associated with this transfer config finish.
   &quot;params&quot;: { # Data transfer specific parameters.
diff --git a/docs/dyn/bigquerydatatransfer_v1.projects.locations.transferConfigs.runs.html b/docs/dyn/bigquerydatatransfer_v1.projects.locations.transferConfigs.runs.html
index 634a875..4f34a00 100644
--- a/docs/dyn/bigquerydatatransfer_v1.projects.locations.transferConfigs.runs.html
+++ b/docs/dyn/bigquerydatatransfer_v1.projects.locations.transferConfigs.runs.html
@@ -177,12 +177,12 @@
       LATEST - Only latest run per day should be returned.
   states: string, When specified, only transfer runs with requested states are returned. (repeated)
     Allowed values
-      TRANSFER_STATE_UNSPECIFIED - State placeholder.
-      PENDING - Data transfer is scheduled and is waiting to be picked up by data transfer backend.
-      RUNNING - Data transfer is in progress.
-      SUCCEEDED - Data transfer completed successfully.
-      FAILED - Data transfer failed.
-      CANCELLED - Data transfer is cancelled.
+      TRANSFER_STATE_UNSPECIFIED - State placeholder (0).
+      PENDING - Data transfer is scheduled and is waiting to be picked up by data transfer backend (2).
+      RUNNING - Data transfer is in progress (3).
+      SUCCEEDED - Data transfer completed successfully (4).
+      FAILED - Data transfer failed (5).
+      CANCELLED - Data transfer is cancelled (6).
   x__xgafv: string, V1 error format.
     Allowed values
       1 - v1 error format
diff --git a/docs/dyn/bigquerydatatransfer_v1.projects.transferConfigs.html b/docs/dyn/bigquerydatatransfer_v1.projects.transferConfigs.html
index a6760c7..cd913b6 100644
--- a/docs/dyn/bigquerydatatransfer_v1.projects.transferConfigs.html
+++ b/docs/dyn/bigquerydatatransfer_v1.projects.transferConfigs.html
@@ -131,7 +131,7 @@
   &quot;emailPreferences&quot;: { # Represents preferences for sending email notifications for transfer run events. # Email notifications will be sent according to these preferences to the email address of the user who owns this transfer config.
     &quot;enableFailureEmail&quot;: True or False, # If true, email notifications will be sent on transfer run failures.
   },
-  &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form of `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. The name is automatically generated based on the config_id specified in CreateTransferConfigRequest along with project_id and region. If config_id is not provided, usually a uuid, even though it is not guaranteed or required, will be generated for config_id.
+  &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. Where `config_id` is usually a uuid, even though it is not guaranteed or required. The name is ignored when creating a transfer config.
   &quot;nextRunTime&quot;: &quot;A String&quot;, # Output only. Next time when data transfer will run.
   &quot;notificationPubsubTopic&quot;: &quot;A String&quot;, # Pub/Sub topic where notifications will be sent after transfer runs associated with this transfer config finish.
   &quot;params&quot;: { # Data transfer specific parameters.
@@ -169,7 +169,7 @@
   &quot;emailPreferences&quot;: { # Represents preferences for sending email notifications for transfer run events. # Email notifications will be sent according to these preferences to the email address of the user who owns this transfer config.
     &quot;enableFailureEmail&quot;: True or False, # If true, email notifications will be sent on transfer run failures.
   },
-  &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form of `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. The name is automatically generated based on the config_id specified in CreateTransferConfigRequest along with project_id and region. If config_id is not provided, usually a uuid, even though it is not guaranteed or required, will be generated for config_id.
+  &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. Where `config_id` is usually a uuid, even though it is not guaranteed or required. The name is ignored when creating a transfer config.
   &quot;nextRunTime&quot;: &quot;A String&quot;, # Output only. Next time when data transfer will run.
   &quot;notificationPubsubTopic&quot;: &quot;A String&quot;, # Pub/Sub topic where notifications will be sent after transfer runs associated with this transfer config finish.
   &quot;params&quot;: { # Data transfer specific parameters.
@@ -229,7 +229,7 @@
   &quot;emailPreferences&quot;: { # Represents preferences for sending email notifications for transfer run events. # Email notifications will be sent according to these preferences to the email address of the user who owns this transfer config.
     &quot;enableFailureEmail&quot;: True or False, # If true, email notifications will be sent on transfer run failures.
   },
-  &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form of `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. The name is automatically generated based on the config_id specified in CreateTransferConfigRequest along with project_id and region. If config_id is not provided, usually a uuid, even though it is not guaranteed or required, will be generated for config_id.
+  &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. Where `config_id` is usually a uuid, even though it is not guaranteed or required. The name is ignored when creating a transfer config.
   &quot;nextRunTime&quot;: &quot;A String&quot;, # Output only. Next time when data transfer will run.
   &quot;notificationPubsubTopic&quot;: &quot;A String&quot;, # Pub/Sub topic where notifications will be sent after transfer runs associated with this transfer config finish.
   &quot;params&quot;: { # Data transfer specific parameters.
@@ -277,7 +277,7 @@
       &quot;emailPreferences&quot;: { # Represents preferences for sending email notifications for transfer run events. # Email notifications will be sent according to these preferences to the email address of the user who owns this transfer config.
         &quot;enableFailureEmail&quot;: True or False, # If true, email notifications will be sent on transfer run failures.
       },
-      &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form of `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. The name is automatically generated based on the config_id specified in CreateTransferConfigRequest along with project_id and region. If config_id is not provided, usually a uuid, even though it is not guaranteed or required, will be generated for config_id.
+      &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. Where `config_id` is usually a uuid, even though it is not guaranteed or required. The name is ignored when creating a transfer config.
       &quot;nextRunTime&quot;: &quot;A String&quot;, # Output only. Next time when data transfer will run.
       &quot;notificationPubsubTopic&quot;: &quot;A String&quot;, # Pub/Sub topic where notifications will be sent after transfer runs associated with this transfer config finish.
       &quot;params&quot;: { # Data transfer specific parameters.
@@ -316,7 +316,7 @@
   <pre>Updates a data transfer configuration. All fields must be set, even if they are not updated.
 
 Args:
-  name: string, The resource name of the transfer config. Transfer config names have the form of `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. The name is automatically generated based on the config_id specified in CreateTransferConfigRequest along with project_id and region. If config_id is not provided, usually a uuid, even though it is not guaranteed or required, will be generated for config_id. (required)
+  name: string, The resource name of the transfer config. Transfer config names have the form `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. Where `config_id` is usually a uuid, even though it is not guaranteed or required. The name is ignored when creating a transfer config. (required)
   body: object, The request body.
     The object takes the form of:
 
@@ -330,7 +330,7 @@
   &quot;emailPreferences&quot;: { # Represents preferences for sending email notifications for transfer run events. # Email notifications will be sent according to these preferences to the email address of the user who owns this transfer config.
     &quot;enableFailureEmail&quot;: True or False, # If true, email notifications will be sent on transfer run failures.
   },
-  &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form of `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. The name is automatically generated based on the config_id specified in CreateTransferConfigRequest along with project_id and region. If config_id is not provided, usually a uuid, even though it is not guaranteed or required, will be generated for config_id.
+  &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. Where `config_id` is usually a uuid, even though it is not guaranteed or required. The name is ignored when creating a transfer config.
   &quot;nextRunTime&quot;: &quot;A String&quot;, # Output only. Next time when data transfer will run.
   &quot;notificationPubsubTopic&quot;: &quot;A String&quot;, # Pub/Sub topic where notifications will be sent after transfer runs associated with this transfer config finish.
   &quot;params&quot;: { # Data transfer specific parameters.
@@ -369,7 +369,7 @@
   &quot;emailPreferences&quot;: { # Represents preferences for sending email notifications for transfer run events. # Email notifications will be sent according to these preferences to the email address of the user who owns this transfer config.
     &quot;enableFailureEmail&quot;: True or False, # If true, email notifications will be sent on transfer run failures.
   },
-  &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form of `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. The name is automatically generated based on the config_id specified in CreateTransferConfigRequest along with project_id and region. If config_id is not provided, usually a uuid, even though it is not guaranteed or required, will be generated for config_id.
+  &quot;name&quot;: &quot;A String&quot;, # The resource name of the transfer config. Transfer config names have the form `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. Where `config_id` is usually a uuid, even though it is not guaranteed or required. The name is ignored when creating a transfer config.
   &quot;nextRunTime&quot;: &quot;A String&quot;, # Output only. Next time when data transfer will run.
   &quot;notificationPubsubTopic&quot;: &quot;A String&quot;, # Pub/Sub topic where notifications will be sent after transfer runs associated with this transfer config finish.
   &quot;params&quot;: { # Data transfer specific parameters.
diff --git a/docs/dyn/bigquerydatatransfer_v1.projects.transferConfigs.runs.html b/docs/dyn/bigquerydatatransfer_v1.projects.transferConfigs.runs.html
index 2fb95a7..2c7a472 100644
--- a/docs/dyn/bigquerydatatransfer_v1.projects.transferConfigs.runs.html
+++ b/docs/dyn/bigquerydatatransfer_v1.projects.transferConfigs.runs.html
@@ -177,12 +177,12 @@
       LATEST - Only latest run per day should be returned.
   states: string, When specified, only transfer runs with requested states are returned. (repeated)
     Allowed values
-      TRANSFER_STATE_UNSPECIFIED - State placeholder.
-      PENDING - Data transfer is scheduled and is waiting to be picked up by data transfer backend.
-      RUNNING - Data transfer is in progress.
-      SUCCEEDED - Data transfer completed successfully.
-      FAILED - Data transfer failed.
-      CANCELLED - Data transfer is cancelled.
+      TRANSFER_STATE_UNSPECIFIED - State placeholder (0).
+      PENDING - Data transfer is scheduled and is waiting to be picked up by data transfer backend (2).
+      RUNNING - Data transfer is in progress (3).
+      SUCCEEDED - Data transfer completed successfully (4).
+      FAILED - Data transfer failed (5).
+      CANCELLED - Data transfer is cancelled (6).
   x__xgafv: string, V1 error format.
     Allowed values
       1 - v1 error format
diff --git a/docs/dyn/cloudasset_v1.v1.html b/docs/dyn/cloudasset_v1.v1.html
index 71783e5..9d03a37 100644
--- a/docs/dyn/cloudasset_v1.v1.html
+++ b/docs/dyn/cloudasset_v1.v1.html
@@ -373,7 +373,7 @@
       &quot;writeDisposition&quot;: &quot;A String&quot;, # Optional. Specifies the action that occurs if the destination table or partition already exists. The following values are supported: * WRITE_TRUNCATE: If the table or partition already exists, BigQuery overwrites the entire table or all the partitions data. * WRITE_APPEND: If the table or partition already exists, BigQuery appends the data to the table or the latest partition. * WRITE_EMPTY: If the table already exists and contains data, an error is returned. The default value is WRITE_APPEND. Each action is atomic and only occurs if BigQuery is able to complete the job successfully. Details are at https://cloud.google.com/bigquery/docs/loading-data-local#appending_to_or_overwriting_a_table_using_a_local_file.
     },
     &quot;gcsDestination&quot;: { # A Cloud Storage location. # Destination on Cloud Storage.
-      &quot;uri&quot;: &quot;A String&quot;, # Required. The uri of the Cloud Storage object. It&#x27;s the same uri that is used by gsutil. For example: &quot;gs://bucket_name/object_name&quot;. See [Quickstart: Using the gsutil tool] (https://cloud.google.com/storage/docs/quickstart-gsutil) for examples.
+      &quot;uri&quot;: &quot;A String&quot;, # Required. The uri of the Cloud Storage object. It&#x27;s the same uri that is used by gsutil. Example: &quot;gs://bucket_name/object_name&quot;. See [Viewing and Editing Object Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata) for more information. If the specified Cloud Storage object already exists and there is no [hold](https://cloud.google.com/storage/docs/object-holds), it will be overwritten with the analysis result.
     },
   },
 }
@@ -1330,7 +1330,7 @@
       &quot;table&quot;: &quot;A String&quot;, # Required. The BigQuery table to which the snapshot result should be written. If this table does not exist, a new table with the given name will be created.
     },
     &quot;gcsDestination&quot;: { # A Cloud Storage location. # Destination on Cloud Storage.
-      &quot;uri&quot;: &quot;A String&quot;, # The uri of the Cloud Storage object. It&#x27;s the same uri that is used by gsutil. Example: &quot;gs://bucket_name/object_name&quot;. See [Viewing and Editing Object Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata) for more information.
+      &quot;uri&quot;: &quot;A String&quot;, # The uri of the Cloud Storage object. It&#x27;s the same uri that is used by gsutil. Example: &quot;gs://bucket_name/object_name&quot;. See [Viewing and Editing Object Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata) for more information. If the specified Cloud Storage object already exists and there is no [hold](https://cloud.google.com/storage/docs/object-holds), it will be overwritten with the exported result.
       &quot;uriPrefix&quot;: &quot;A String&quot;, # The uri prefix of all generated Cloud Storage objects. Example: &quot;gs://bucket_name/object_name_prefix&quot;. Each object uri is in format: &quot;gs://bucket_name/object_name_prefix// and only contains assets for that type. starts from 0. Example: &quot;gs://bucket_name/object_name_prefix/compute.googleapis.com/Disk/0&quot; is the first shard of output objects containing all compute.googleapis.com/Disk assets. An INVALID_ARGUMENT error will be returned if file with the same name &quot;gs://bucket_name/object_name_prefix&quot; already exists.
     },
   },
diff --git a/docs/dyn/clouderrorreporting_v1beta1.projects.events.html b/docs/dyn/clouderrorreporting_v1beta1.projects.events.html
index 6495b23..7771c2a 100644
--- a/docs/dyn/clouderrorreporting_v1beta1.projects.events.html
+++ b/docs/dyn/clouderrorreporting_v1beta1.projects.events.html
@@ -85,7 +85,7 @@
 <p class="firstline">Retrieves the next page of results.</p>
 <p class="toc_element">
   <code><a href="#report">report(projectName, body=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Report an individual error event. This endpoint accepts **either** an OAuth token, **or** an [API key](https://support.google.com/cloud/answer/6158862) for authentication. To use an API key, append it to the URL as the value of a `key` parameter. For example: `POST https://clouderrorreporting.googleapis.com/v1beta1/{projectName}/events:report?key=123ABC456`</p>
+<p class="firstline">Report an individual error event and record the event to a log. This endpoint accepts **either** an OAuth token, **or** an [API key](https://support.google.com/cloud/answer/6158862) for authentication. To use an API key, append it to the URL as the value of a `key` parameter. For example: `POST https://clouderrorreporting.googleapis.com/v1beta1/{projectName}/events:report?key=123ABC456` **Note:** [Error Reporting](/error-reporting) is a global service built on Cloud Logging and doesn't analyze logs stored in regional log buckets or logs routed to other Google Cloud projects. For more information, see [Using Error Reporting with regionalized logs](/error-reporting/docs/regionalization).</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="close">close()</code>
@@ -175,7 +175,7 @@
 
 <div class="method">
     <code class="details" id="report">report(projectName, body=None, x__xgafv=None)</code>
-  <pre>Report an individual error event. This endpoint accepts **either** an OAuth token, **or** an [API key](https://support.google.com/cloud/answer/6158862) for authentication. To use an API key, append it to the URL as the value of a `key` parameter. For example: `POST https://clouderrorreporting.googleapis.com/v1beta1/{projectName}/events:report?key=123ABC456`
+  <pre>Report an individual error event and record the event to a log. This endpoint accepts **either** an OAuth token, **or** an [API key](https://support.google.com/cloud/answer/6158862) for authentication. To use an API key, append it to the URL as the value of a `key` parameter. For example: `POST https://clouderrorreporting.googleapis.com/v1beta1/{projectName}/events:report?key=123ABC456` **Note:** [Error Reporting](/error-reporting) is a global service built on Cloud Logging and doesn&#x27;t analyze logs stored in regional log buckets or logs routed to other Google Cloud projects. For more information, see [Using Error Reporting with regionalized logs](/error-reporting/docs/regionalization).
 
 Args:
   projectName: string, Required. The resource name of the Google Cloud Platform project. Written as `projects/{projectId}`, where `{projectId}` is the [Google Cloud Platform project ID](https://support.google.com/cloud/answer/6158840). Example: // `projects/my-project-123`. (required)
diff --git a/docs/dyn/clouderrorreporting_v1beta1.projects.groupStats.html b/docs/dyn/clouderrorreporting_v1beta1.projects.groupStats.html
index 715ed19..e7a9bc7 100644
--- a/docs/dyn/clouderrorreporting_v1beta1.projects.groupStats.html
+++ b/docs/dyn/clouderrorreporting_v1beta1.projects.groupStats.html
@@ -94,7 +94,7 @@
   <pre>Lists the specified groups.
 
 Args:
-  projectName: string, Required. The resource name of the Google Cloud Platform project. Written as `projects/{projectID}`, where `{projectID}` is the [Google Cloud Platform project ID](https://support.google.com/cloud/answer/6158840). Example: `projects/my-project-123`. (required)
+  projectName: string, Required. The resource name of the Google Cloud Platform project. Written as `projects/{projectID}` or `projects/{projectNumber}`, where `{projectID}` and `{projectNumber}` can be found in the [Google Cloud Console](https://support.google.com/cloud/answer/6158840). Examples: `projects/my-project-123`, `projects/5551234`. (required)
   alignment: string, Optional. The alignment of the timed counts to be returned. Default is `ALIGNMENT_EQUAL_AT_END`.
     Allowed values
       ERROR_COUNT_ALIGNMENT_UNSPECIFIED - No alignment specified.
diff --git a/docs/dyn/cloudiot_v1.projects.locations.registries.devices.html b/docs/dyn/cloudiot_v1.projects.locations.registries.devices.html
index b011cef..fc3d017 100644
--- a/docs/dyn/cloudiot_v1.projects.locations.registries.devices.html
+++ b/docs/dyn/cloudiot_v1.projects.locations.registries.devices.html
@@ -261,7 +261,7 @@
 
 Args:
   name: string, Required. The name of the device. For example, `projects/p0/locations/us-central1/registries/registry0/devices/device0` or `projects/p0/locations/us-central1/registries/registry0/devices/{num_id}`. (required)
-  fieldMask: string, The fields of the `Device` resource to be returned in the response. If the field mask is unset or empty, all fields are returned.
+  fieldMask: string, The fields of the `Device` resource to be returned in the response. If the field mask is unset or empty, all fields are returned. Fields have to be provided in snake_case format, for example: `last_heartbeat_time`.
   x__xgafv: string, V1 error format.
     Allowed values
       1 - v1 error format
@@ -330,7 +330,7 @@
   parent: string, Required. The device registry path. Required. For example, `projects/my-project/locations/us-central1/registries/my-registry`. (required)
   deviceIds: string, A list of device string IDs. For example, `[&#x27;device0&#x27;, &#x27;device12&#x27;]`. If empty, this field is ignored. Maximum IDs: 10,000 (repeated)
   deviceNumIds: string, A list of device numeric IDs. If empty, this field is ignored. Maximum IDs: 10,000. (repeated)
-  fieldMask: string, The fields of the `Device` resource to be returned in the response. The fields `id` and `num_id` are always returned, along with any other fields specified.
+  fieldMask: string, The fields of the `Device` resource to be returned in the response. The fields `id` and `num_id` are always returned, along with any other fields specified in snake_case format, for example: `last_heartbeat_time`.
   gatewayListOptions_associationsDeviceId: string, If set, returns only the gateways with which the specified device is associated. The device ID can be numeric (`num_id`) or the user-defined string (`id`). For example, if `456` is specified, returns only the gateways to which the device with `num_id` 456 is bound.
   gatewayListOptions_associationsGatewayId: string, If set, only devices associated with the specified gateway are returned. The gateway ID can be numeric (`num_id`) or the user-defined string (`id`). For example, if `123` is specified, only devices bound to the gateway with `num_id` 123 are returned.
   gatewayListOptions_gatewayType: string, If `GATEWAY` is specified, only gateways are returned. If `NON_GATEWAY` is specified, only non-gateway devices are returned. If `GATEWAY_TYPE_UNSPECIFIED` is specified, all devices are returned.
diff --git a/docs/dyn/cloudiot_v1.projects.locations.registries.groups.devices.html b/docs/dyn/cloudiot_v1.projects.locations.registries.groups.devices.html
index cbd04c2..9970d7f 100644
--- a/docs/dyn/cloudiot_v1.projects.locations.registries.groups.devices.html
+++ b/docs/dyn/cloudiot_v1.projects.locations.registries.groups.devices.html
@@ -97,7 +97,7 @@
   parent: string, Required. The device registry path. Required. For example, `projects/my-project/locations/us-central1/registries/my-registry`. (required)
   deviceIds: string, A list of device string IDs. For example, `[&#x27;device0&#x27;, &#x27;device12&#x27;]`. If empty, this field is ignored. Maximum IDs: 10,000 (repeated)
   deviceNumIds: string, A list of device numeric IDs. If empty, this field is ignored. Maximum IDs: 10,000. (repeated)
-  fieldMask: string, The fields of the `Device` resource to be returned in the response. The fields `id` and `num_id` are always returned, along with any other fields specified.
+  fieldMask: string, The fields of the `Device` resource to be returned in the response. The fields `id` and `num_id` are always returned, along with any other fields specified in snake_case format, for example: `last_heartbeat_time`.
   gatewayListOptions_associationsDeviceId: string, If set, returns only the gateways with which the specified device is associated. The device ID can be numeric (`num_id`) or the user-defined string (`id`). For example, if `456` is specified, returns only the gateways to which the device with `num_id` 456 is bound.
   gatewayListOptions_associationsGatewayId: string, If set, only devices associated with the specified gateway are returned. The gateway ID can be numeric (`num_id`) or the user-defined string (`id`). For example, if `123` is specified, only devices bound to the gateway with `num_id` 123 are returned.
   gatewayListOptions_gatewayType: string, If `GATEWAY` is specified, only gateways are returned. If `NON_GATEWAY` is specified, only non-gateway devices are returned. If `GATEWAY_TYPE_UNSPECIFIED` is specified, all devices are returned.
diff --git a/docs/dyn/cloudsearch_v1.query.html b/docs/dyn/cloudsearch_v1.query.html
index 64d075d..a089fde 100644
--- a/docs/dyn/cloudsearch_v1.query.html
+++ b/docs/dyn/cloudsearch_v1.query.html
@@ -438,7 +438,7 @@
     The object takes the form of:
 
 { # Request of suggest API.
-  &quot;dataSourceRestrictions&quot;: [ # The sources to use for suggestions. If not specified, the data sources are taken from the current search application. NOTE: Suggestions are supported only for third party data sources and people (i.e. PredefinedSource.PERSON).
+  &quot;dataSourceRestrictions&quot;: [ # The sources to use for suggestions. If not specified, the data sources are taken from the current search application. NOTE: Suggestions are only supported for the following sources: * Third-party data sources * PredefinedSource.PERSON * PredefinedSource.GOOGLE_DRIVE
     { # Restriction on Datasource.
       &quot;filterOptions&quot;: [ # Filter options restricting the results. If multiple filters are present, they are grouped by object type before joining. Filters with the same object type are joined conjunctively, then the resulting expressions are joined disjunctively. The maximum number of elements is 20. NOTE: Suggest API supports only few filters at the moment: &quot;objecttype&quot;, &quot;type&quot; and &quot;mimetype&quot;. For now, schema specific filters cannot be used to filter suggestions.
         { # Filter options to be applied on query.
diff --git a/docs/dyn/cloudshell_v1.users.environments.html b/docs/dyn/cloudshell_v1.users.environments.html
index 2148fa6..748629c 100644
--- a/docs/dyn/cloudshell_v1.users.environments.html
+++ b/docs/dyn/cloudshell_v1.users.environments.html
@@ -103,7 +103,7 @@
     The object takes the form of:
 
 { # Request message for AddPublicKey.
-  &quot;key&quot;: &quot;A String&quot;, # Key that should be added to the environment. Supported formats are `ssh-dss` (see RFC4253), `ssh-rsa` (see RFC4253), `ecdsa-sha2-nistp256` (see RFC5656), `ecdsa-sha2-nistp384` (see RFC5656) and `ecdsa-sha2-nistp521` (see RFC5656). It should be structured as , where part is encoded with Base64.
+  &quot;key&quot;: &quot;A String&quot;, # Key that should be added to the environment. Supported formats are `ssh-dss` (see RFC4253), `ssh-rsa` (see RFC4253), `ecdsa-sha2-nistp256` (see RFC5656), `ecdsa-sha2-nistp384` (see RFC5656) and `ecdsa-sha2-nistp521` (see RFC5656). It should be structured as &lt;format&gt; &lt;content&gt;, where &lt;content&gt; part is encoded with Base64.
 }
 
   x__xgafv: string, V1 error format.
diff --git a/docs/dyn/container_v1beta1.projects.locations.clusters.html b/docs/dyn/container_v1beta1.projects.locations.clusters.html
index de1bccc..19b8af5 100644
--- a/docs/dyn/container_v1beta1.projects.locations.clusters.html
+++ b/docs/dyn/container_v1beta1.projects.locations.clusters.html
@@ -613,6 +613,11 @@
           &quot;maxPodsPerNode&quot;: &quot;A String&quot;, # Constraint enforced on the max num of pods per node.
         },
         &quot;name&quot;: &quot;A String&quot;, # The name of the node pool.
+        &quot;networkConfig&quot;: { # Parameters for node pool-level network config. Only applicable if `ip_allocation_policy.use_ip_aliases` is true. # Networking configuration for this NodePool. If specified, it overrides the cluster-level defaults.
+          &quot;createPodRange&quot;: True or False, # Input only. [Input only] Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. If neither `create_pod_range` or `pod_range` are specified, the cluster-level default (`ip_allocation_policy.cluster_ipv4_cidr_block`) is used.
+          &quot;podIpv4CidrBlock&quot;: &quot;A String&quot;, # The IP address range for pod IPs in this node pool. Only applicable if `create_pod_range` is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. `/14`) to have a range chosen with a specific netmask. Set to a [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `10.96.0.0/14`) to pick a specific range to use.
+          &quot;podRange&quot;: &quot;A String&quot;, # The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range.
+        },
         &quot;podIpv4CidrSize&quot;: 42, # [Output only] The pod CIDR block size per node in this node pool.
         &quot;selfLink&quot;: &quot;A String&quot;, # [Output only] Server-defined URL for the resource.
         &quot;status&quot;: &quot;A String&quot;, # [Output only] The status of the nodes in this pool instance.
@@ -1216,6 +1221,11 @@
         &quot;maxPodsPerNode&quot;: &quot;A String&quot;, # Constraint enforced on the max num of pods per node.
       },
       &quot;name&quot;: &quot;A String&quot;, # The name of the node pool.
+      &quot;networkConfig&quot;: { # Parameters for node pool-level network config. Only applicable if `ip_allocation_policy.use_ip_aliases` is true. # Networking configuration for this NodePool. If specified, it overrides the cluster-level defaults.
+        &quot;createPodRange&quot;: True or False, # Input only. [Input only] Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. If neither `create_pod_range` or `pod_range` are specified, the cluster-level default (`ip_allocation_policy.cluster_ipv4_cidr_block`) is used.
+        &quot;podIpv4CidrBlock&quot;: &quot;A String&quot;, # The IP address range for pod IPs in this node pool. Only applicable if `create_pod_range` is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. `/14`) to have a range chosen with a specific netmask. Set to a [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `10.96.0.0/14`) to pick a specific range to use.
+        &quot;podRange&quot;: &quot;A String&quot;, # The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range.
+      },
       &quot;podIpv4CidrSize&quot;: 42, # [Output only] The pod CIDR block size per node in this node pool.
       &quot;selfLink&quot;: &quot;A String&quot;, # [Output only] Server-defined URL for the resource.
       &quot;status&quot;: &quot;A String&quot;, # [Output only] The status of the nodes in this pool instance.
@@ -1722,6 +1732,11 @@
             &quot;maxPodsPerNode&quot;: &quot;A String&quot;, # Constraint enforced on the max num of pods per node.
           },
           &quot;name&quot;: &quot;A String&quot;, # The name of the node pool.
+          &quot;networkConfig&quot;: { # Parameters for node pool-level network config. Only applicable if `ip_allocation_policy.use_ip_aliases` is true. # Networking configuration for this NodePool. If specified, it overrides the cluster-level defaults.
+            &quot;createPodRange&quot;: True or False, # Input only. [Input only] Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. If neither `create_pod_range` or `pod_range` are specified, the cluster-level default (`ip_allocation_policy.cluster_ipv4_cidr_block`) is used.
+            &quot;podIpv4CidrBlock&quot;: &quot;A String&quot;, # The IP address range for pod IPs in this node pool. Only applicable if `create_pod_range` is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. `/14`) to have a range chosen with a specific netmask. Set to a [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `10.96.0.0/14`) to pick a specific range to use.
+            &quot;podRange&quot;: &quot;A String&quot;, # The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range.
+          },
           &quot;podIpv4CidrSize&quot;: 42, # [Output only] The pod CIDR block size per node in this node pool.
           &quot;selfLink&quot;: &quot;A String&quot;, # [Output only] Server-defined URL for the resource.
           &quot;status&quot;: &quot;A String&quot;, # [Output only] The status of the nodes in this pool instance.
diff --git a/docs/dyn/container_v1beta1.projects.locations.clusters.nodePools.html b/docs/dyn/container_v1beta1.projects.locations.clusters.nodePools.html
index 0381560..93b0b73 100644
--- a/docs/dyn/container_v1beta1.projects.locations.clusters.nodePools.html
+++ b/docs/dyn/container_v1beta1.projects.locations.clusters.nodePools.html
@@ -223,6 +223,11 @@
       &quot;maxPodsPerNode&quot;: &quot;A String&quot;, # Constraint enforced on the max num of pods per node.
     },
     &quot;name&quot;: &quot;A String&quot;, # The name of the node pool.
+    &quot;networkConfig&quot;: { # Parameters for node pool-level network config. Only applicable if `ip_allocation_policy.use_ip_aliases` is true. # Networking configuration for this NodePool. If specified, it overrides the cluster-level defaults.
+      &quot;createPodRange&quot;: True or False, # Input only. [Input only] Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. If neither `create_pod_range` or `pod_range` are specified, the cluster-level default (`ip_allocation_policy.cluster_ipv4_cidr_block`) is used.
+      &quot;podIpv4CidrBlock&quot;: &quot;A String&quot;, # The IP address range for pod IPs in this node pool. Only applicable if `create_pod_range` is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. `/14`) to have a range chosen with a specific netmask. Set to a [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `10.96.0.0/14`) to pick a specific range to use.
+      &quot;podRange&quot;: &quot;A String&quot;, # The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range.
+    },
     &quot;podIpv4CidrSize&quot;: 42, # [Output only] The pod CIDR block size per node in this node pool.
     &quot;selfLink&quot;: &quot;A String&quot;, # [Output only] Server-defined URL for the resource.
     &quot;status&quot;: &quot;A String&quot;, # [Output only] The status of the nodes in this pool instance.
@@ -490,6 +495,11 @@
     &quot;maxPodsPerNode&quot;: &quot;A String&quot;, # Constraint enforced on the max num of pods per node.
   },
   &quot;name&quot;: &quot;A String&quot;, # The name of the node pool.
+  &quot;networkConfig&quot;: { # Parameters for node pool-level network config. Only applicable if `ip_allocation_policy.use_ip_aliases` is true. # Networking configuration for this NodePool. If specified, it overrides the cluster-level defaults.
+    &quot;createPodRange&quot;: True or False, # Input only. [Input only] Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. If neither `create_pod_range` or `pod_range` are specified, the cluster-level default (`ip_allocation_policy.cluster_ipv4_cidr_block`) is used.
+    &quot;podIpv4CidrBlock&quot;: &quot;A String&quot;, # The IP address range for pod IPs in this node pool. Only applicable if `create_pod_range` is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. `/14`) to have a range chosen with a specific netmask. Set to a [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `10.96.0.0/14`) to pick a specific range to use.
+    &quot;podRange&quot;: &quot;A String&quot;, # The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range.
+  },
   &quot;podIpv4CidrSize&quot;: 42, # [Output only] The pod CIDR block size per node in this node pool.
   &quot;selfLink&quot;: &quot;A String&quot;, # [Output only] Server-defined URL for the resource.
   &quot;status&quot;: &quot;A String&quot;, # [Output only] The status of the nodes in this pool instance.
@@ -623,6 +633,11 @@
         &quot;maxPodsPerNode&quot;: &quot;A String&quot;, # Constraint enforced on the max num of pods per node.
       },
       &quot;name&quot;: &quot;A String&quot;, # The name of the node pool.
+      &quot;networkConfig&quot;: { # Parameters for node pool-level network config. Only applicable if `ip_allocation_policy.use_ip_aliases` is true. # Networking configuration for this NodePool. If specified, it overrides the cluster-level defaults.
+        &quot;createPodRange&quot;: True or False, # Input only. [Input only] Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. If neither `create_pod_range` or `pod_range` are specified, the cluster-level default (`ip_allocation_policy.cluster_ipv4_cidr_block`) is used.
+        &quot;podIpv4CidrBlock&quot;: &quot;A String&quot;, # The IP address range for pod IPs in this node pool. Only applicable if `create_pod_range` is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. `/14`) to have a range chosen with a specific netmask. Set to a [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `10.96.0.0/14`) to pick a specific range to use.
+        &quot;podRange&quot;: &quot;A String&quot;, # The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range.
+      },
       &quot;podIpv4CidrSize&quot;: 42, # [Output only] The pod CIDR block size per node in this node pool.
       &quot;selfLink&quot;: &quot;A String&quot;, # [Output only] Server-defined URL for the resource.
       &quot;status&quot;: &quot;A String&quot;, # [Output only] The status of the nodes in this pool instance.
diff --git a/docs/dyn/container_v1beta1.projects.zones.clusters.html b/docs/dyn/container_v1beta1.projects.zones.clusters.html
index d185ac6..9cd15e4 100644
--- a/docs/dyn/container_v1beta1.projects.zones.clusters.html
+++ b/docs/dyn/container_v1beta1.projects.zones.clusters.html
@@ -721,6 +721,11 @@
           &quot;maxPodsPerNode&quot;: &quot;A String&quot;, # Constraint enforced on the max num of pods per node.
         },
         &quot;name&quot;: &quot;A String&quot;, # The name of the node pool.
+        &quot;networkConfig&quot;: { # Parameters for node pool-level network config. Only applicable if `ip_allocation_policy.use_ip_aliases` is true. # Networking configuration for this NodePool. If specified, it overrides the cluster-level defaults.
+          &quot;createPodRange&quot;: True or False, # Input only. [Input only] Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. If neither `create_pod_range` or `pod_range` are specified, the cluster-level default (`ip_allocation_policy.cluster_ipv4_cidr_block`) is used.
+          &quot;podIpv4CidrBlock&quot;: &quot;A String&quot;, # The IP address range for pod IPs in this node pool. Only applicable if `create_pod_range` is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. `/14`) to have a range chosen with a specific netmask. Set to a [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `10.96.0.0/14`) to pick a specific range to use.
+          &quot;podRange&quot;: &quot;A String&quot;, # The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range.
+        },
         &quot;podIpv4CidrSize&quot;: 42, # [Output only] The pod CIDR block size per node in this node pool.
         &quot;selfLink&quot;: &quot;A String&quot;, # [Output only] Server-defined URL for the resource.
         &quot;status&quot;: &quot;A String&quot;, # [Output only] The status of the nodes in this pool instance.
@@ -1324,6 +1329,11 @@
         &quot;maxPodsPerNode&quot;: &quot;A String&quot;, # Constraint enforced on the max num of pods per node.
       },
       &quot;name&quot;: &quot;A String&quot;, # The name of the node pool.
+      &quot;networkConfig&quot;: { # Parameters for node pool-level network config. Only applicable if `ip_allocation_policy.use_ip_aliases` is true. # Networking configuration for this NodePool. If specified, it overrides the cluster-level defaults.
+        &quot;createPodRange&quot;: True or False, # Input only. [Input only] Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. If neither `create_pod_range` or `pod_range` are specified, the cluster-level default (`ip_allocation_policy.cluster_ipv4_cidr_block`) is used.
+        &quot;podIpv4CidrBlock&quot;: &quot;A String&quot;, # The IP address range for pod IPs in this node pool. Only applicable if `create_pod_range` is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. `/14`) to have a range chosen with a specific netmask. Set to a [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `10.96.0.0/14`) to pick a specific range to use.
+        &quot;podRange&quot;: &quot;A String&quot;, # The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range.
+      },
       &quot;podIpv4CidrSize&quot;: 42, # [Output only] The pod CIDR block size per node in this node pool.
       &quot;selfLink&quot;: &quot;A String&quot;, # [Output only] Server-defined URL for the resource.
       &quot;status&quot;: &quot;A String&quot;, # [Output only] The status of the nodes in this pool instance.
@@ -1874,6 +1884,11 @@
             &quot;maxPodsPerNode&quot;: &quot;A String&quot;, # Constraint enforced on the max num of pods per node.
           },
           &quot;name&quot;: &quot;A String&quot;, # The name of the node pool.
+          &quot;networkConfig&quot;: { # Parameters for node pool-level network config. Only applicable if `ip_allocation_policy.use_ip_aliases` is true. # Networking configuration for this NodePool. If specified, it overrides the cluster-level defaults.
+            &quot;createPodRange&quot;: True or False, # Input only. [Input only] Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. If neither `create_pod_range` or `pod_range` are specified, the cluster-level default (`ip_allocation_policy.cluster_ipv4_cidr_block`) is used.
+            &quot;podIpv4CidrBlock&quot;: &quot;A String&quot;, # The IP address range for pod IPs in this node pool. Only applicable if `create_pod_range` is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. `/14`) to have a range chosen with a specific netmask. Set to a [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `10.96.0.0/14`) to pick a specific range to use.
+            &quot;podRange&quot;: &quot;A String&quot;, # The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range.
+          },
           &quot;podIpv4CidrSize&quot;: 42, # [Output only] The pod CIDR block size per node in this node pool.
           &quot;selfLink&quot;: &quot;A String&quot;, # [Output only] Server-defined URL for the resource.
           &quot;status&quot;: &quot;A String&quot;, # [Output only] The status of the nodes in this pool instance.
diff --git a/docs/dyn/container_v1beta1.projects.zones.clusters.nodePools.html b/docs/dyn/container_v1beta1.projects.zones.clusters.nodePools.html
index f179183..1d6e660 100644
--- a/docs/dyn/container_v1beta1.projects.zones.clusters.nodePools.html
+++ b/docs/dyn/container_v1beta1.projects.zones.clusters.nodePools.html
@@ -312,6 +312,11 @@
       &quot;maxPodsPerNode&quot;: &quot;A String&quot;, # Constraint enforced on the max num of pods per node.
     },
     &quot;name&quot;: &quot;A String&quot;, # The name of the node pool.
+    &quot;networkConfig&quot;: { # Parameters for node pool-level network config. Only applicable if `ip_allocation_policy.use_ip_aliases` is true. # Networking configuration for this NodePool. If specified, it overrides the cluster-level defaults.
+      &quot;createPodRange&quot;: True or False, # Input only. [Input only] Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. If neither `create_pod_range` or `pod_range` are specified, the cluster-level default (`ip_allocation_policy.cluster_ipv4_cidr_block`) is used.
+      &quot;podIpv4CidrBlock&quot;: &quot;A String&quot;, # The IP address range for pod IPs in this node pool. Only applicable if `create_pod_range` is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. `/14`) to have a range chosen with a specific netmask. Set to a [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `10.96.0.0/14`) to pick a specific range to use.
+      &quot;podRange&quot;: &quot;A String&quot;, # The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range.
+    },
     &quot;podIpv4CidrSize&quot;: 42, # [Output only] The pod CIDR block size per node in this node pool.
     &quot;selfLink&quot;: &quot;A String&quot;, # [Output only] Server-defined URL for the resource.
     &quot;status&quot;: &quot;A String&quot;, # [Output only] The status of the nodes in this pool instance.
@@ -579,6 +584,11 @@
     &quot;maxPodsPerNode&quot;: &quot;A String&quot;, # Constraint enforced on the max num of pods per node.
   },
   &quot;name&quot;: &quot;A String&quot;, # The name of the node pool.
+  &quot;networkConfig&quot;: { # Parameters for node pool-level network config. Only applicable if `ip_allocation_policy.use_ip_aliases` is true. # Networking configuration for this NodePool. If specified, it overrides the cluster-level defaults.
+    &quot;createPodRange&quot;: True or False, # Input only. [Input only] Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. If neither `create_pod_range` or `pod_range` are specified, the cluster-level default (`ip_allocation_policy.cluster_ipv4_cidr_block`) is used.
+    &quot;podIpv4CidrBlock&quot;: &quot;A String&quot;, # The IP address range for pod IPs in this node pool. Only applicable if `create_pod_range` is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. `/14`) to have a range chosen with a specific netmask. Set to a [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `10.96.0.0/14`) to pick a specific range to use.
+    &quot;podRange&quot;: &quot;A String&quot;, # The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range.
+  },
   &quot;podIpv4CidrSize&quot;: 42, # [Output only] The pod CIDR block size per node in this node pool.
   &quot;selfLink&quot;: &quot;A String&quot;, # [Output only] Server-defined URL for the resource.
   &quot;status&quot;: &quot;A String&quot;, # [Output only] The status of the nodes in this pool instance.
@@ -712,6 +722,11 @@
         &quot;maxPodsPerNode&quot;: &quot;A String&quot;, # Constraint enforced on the max num of pods per node.
       },
       &quot;name&quot;: &quot;A String&quot;, # The name of the node pool.
+      &quot;networkConfig&quot;: { # Parameters for node pool-level network config. Only applicable if `ip_allocation_policy.use_ip_aliases` is true. # Networking configuration for this NodePool. If specified, it overrides the cluster-level defaults.
+        &quot;createPodRange&quot;: True or False, # Input only. [Input only] Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. If neither `create_pod_range` or `pod_range` are specified, the cluster-level default (`ip_allocation_policy.cluster_ipv4_cidr_block`) is used.
+        &quot;podIpv4CidrBlock&quot;: &quot;A String&quot;, # The IP address range for pod IPs in this node pool. Only applicable if `create_pod_range` is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. `/14`) to have a range chosen with a specific netmask. Set to a [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `10.96.0.0/14`) to pick a specific range to use.
+        &quot;podRange&quot;: &quot;A String&quot;, # The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range.
+      },
       &quot;podIpv4CidrSize&quot;: 42, # [Output only] The pod CIDR block size per node in this node pool.
       &quot;selfLink&quot;: &quot;A String&quot;, # [Output only] Server-defined URL for the resource.
       &quot;status&quot;: &quot;A String&quot;, # [Output only] The status of the nodes in this pool instance.
diff --git a/docs/dyn/datalabeling_v1beta1.projects.datasets.annotatedDatasets.html b/docs/dyn/datalabeling_v1beta1.projects.datasets.annotatedDatasets.html
index 7f9d095..1ad8e42 100644
--- a/docs/dyn/datalabeling_v1beta1.projects.datasets.annotatedDatasets.html
+++ b/docs/dyn/datalabeling_v1beta1.projects.datasets.annotatedDatasets.html
@@ -208,7 +208,7 @@
     &quot;textClassificationConfig&quot;: { # Config for text classification human labeling task. # Configuration for text classification task.
       &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one text segment.
       &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
-      &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection.
+      &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection. We deprecate sentiment analysis in data labeling side as it is incompatible with uCAIP.
         &quot;enableLabelSentimentSelection&quot;: True or False, # If set to true, contributors will have the option to select sentiment of the label they selected, to mark it as negative or positive label. Default is false.
       },
     },
@@ -314,7 +314,7 @@
         &quot;textClassificationConfig&quot;: { # Config for text classification human labeling task. # Configuration for text classification task.
           &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one text segment.
           &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
-          &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection.
+          &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection. We deprecate sentiment analysis in data labeling side as it is incompatible with uCAIP.
             &quot;enableLabelSentimentSelection&quot;: True or False, # If set to true, contributors will have the option to select sentiment of the label they selected, to mark it as negative or positive label. Default is false.
           },
         },
diff --git a/docs/dyn/datalabeling_v1beta1.projects.datasets.text.html b/docs/dyn/datalabeling_v1beta1.projects.datasets.text.html
index 55da8da..f51d8ca 100644
--- a/docs/dyn/datalabeling_v1beta1.projects.datasets.text.html
+++ b/docs/dyn/datalabeling_v1beta1.projects.datasets.text.html
@@ -113,7 +113,7 @@
   &quot;textClassificationConfig&quot;: { # Config for text classification human labeling task. # Configuration for text classification task. One of text_classification_config and text_entity_extraction_config is required.
     &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one text segment.
     &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
-    &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection.
+    &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection. We deprecate sentiment analysis in data labeling side as it is incompatible with uCAIP.
       &quot;enableLabelSentimentSelection&quot;: True or False, # If set to true, contributors will have the option to select sentiment of the label they selected, to mark it as negative or positive label. Default is false.
     },
   },
diff --git a/docs/dyn/datalabeling_v1beta1.projects.evaluationJobs.html b/docs/dyn/datalabeling_v1beta1.projects.evaluationJobs.html
index 2f6625d..e689d01 100644
--- a/docs/dyn/datalabeling_v1beta1.projects.evaluationJobs.html
+++ b/docs/dyn/datalabeling_v1beta1.projects.evaluationJobs.html
@@ -194,7 +194,7 @@
       &quot;textClassificationConfig&quot;: { # Config for text classification human labeling task. # Specify this field if your model version performs text classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config.
         &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one text segment.
         &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
-        &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection.
+        &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection. We deprecate sentiment analysis in data labeling side as it is incompatible with uCAIP.
           &quot;enableLabelSentimentSelection&quot;: True or False, # If set to true, contributors will have the option to select sentiment of the label they selected, to mark it as negative or positive label. Default is false.
         },
       },
@@ -292,7 +292,7 @@
     &quot;textClassificationConfig&quot;: { # Config for text classification human labeling task. # Specify this field if your model version performs text classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config.
       &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one text segment.
       &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
-      &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection.
+      &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection. We deprecate sentiment analysis in data labeling side as it is incompatible with uCAIP.
         &quot;enableLabelSentimentSelection&quot;: True or False, # If set to true, contributors will have the option to select sentiment of the label they selected, to mark it as negative or positive label. Default is false.
       },
     },
@@ -414,7 +414,7 @@
     &quot;textClassificationConfig&quot;: { # Config for text classification human labeling task. # Specify this field if your model version performs text classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config.
       &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one text segment.
       &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
-      &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection.
+      &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection. We deprecate sentiment analysis in data labeling side as it is incompatible with uCAIP.
         &quot;enableLabelSentimentSelection&quot;: True or False, # If set to true, contributors will have the option to select sentiment of the label they selected, to mark it as negative or positive label. Default is false.
       },
     },
@@ -523,7 +523,7 @@
         &quot;textClassificationConfig&quot;: { # Config for text classification human labeling task. # Specify this field if your model version performs text classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config.
           &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one text segment.
           &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
-          &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection.
+          &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection. We deprecate sentiment analysis in data labeling side as it is incompatible with uCAIP.
             &quot;enableLabelSentimentSelection&quot;: True or False, # If set to true, contributors will have the option to select sentiment of the label they selected, to mark it as negative or positive label. Default is false.
           },
         },
@@ -639,7 +639,7 @@
     &quot;textClassificationConfig&quot;: { # Config for text classification human labeling task. # Specify this field if your model version performs text classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config.
       &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one text segment.
       &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
-      &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection.
+      &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection. We deprecate sentiment analysis in data labeling side as it is incompatible with uCAIP.
         &quot;enableLabelSentimentSelection&quot;: True or False, # If set to true, contributors will have the option to select sentiment of the label they selected, to mark it as negative or positive label. Default is false.
       },
     },
@@ -737,7 +737,7 @@
     &quot;textClassificationConfig&quot;: { # Config for text classification human labeling task. # Specify this field if your model version performs text classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config.
       &quot;allowMultiLabel&quot;: True or False, # Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one text segment.
       &quot;annotationSpecSet&quot;: &quot;A String&quot;, # Required. Annotation spec set resource name.
-      &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection.
+      &quot;sentimentConfig&quot;: { # Config for setting up sentiments. # Optional. Configs for sentiment selection. We deprecate sentiment analysis in data labeling side as it is incompatible with uCAIP.
         &quot;enableLabelSentimentSelection&quot;: True or False, # If set to true, contributors will have the option to select sentiment of the label they selected, to mark it as negative or positive label. Default is false.
       },
     },
diff --git a/docs/dyn/dfareporting_v3_3.conversions.html b/docs/dyn/dfareporting_v3_3.conversions.html
index 2fdccc0..6eb22b5 100644
--- a/docs/dyn/dfareporting_v3_3.conversions.html
+++ b/docs/dyn/dfareporting_v3_3.conversions.html
@@ -101,7 +101,7 @@
         { # A custom floodlight variable.
           &quot;kind&quot;: &quot;A String&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;dfareporting#customFloodlightVariable&quot;.
           &quot;type&quot;: &quot;A String&quot;, # The type of custom floodlight variable to supply a value for. These map to the &quot;u[1-20]=&quot; in the tags.
-          &quot;value&quot;: &quot;A String&quot;, # The value of the custom floodlight variable. The length of string must not exceed 50 characters.
+          &quot;value&quot;: &quot;A String&quot;, # The value of the custom floodlight variable. The length of string must not exceed 100 characters.
         },
       ],
       &quot;encryptedUserId&quot;: &quot;A String&quot;, # The alphanumeric encrypted user ID. When set, encryptionInfo should also be specified. This field is mutually exclusive with encryptedUserIdCandidates[], matchId, mobileDeviceId and gclid. This or encryptedUserIdCandidates[] or matchId or mobileDeviceId or gclid is a required field.
@@ -151,7 +151,7 @@
           { # A custom floodlight variable.
             &quot;kind&quot;: &quot;A String&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;dfareporting#customFloodlightVariable&quot;.
             &quot;type&quot;: &quot;A String&quot;, # The type of custom floodlight variable to supply a value for. These map to the &quot;u[1-20]=&quot; in the tags.
-            &quot;value&quot;: &quot;A String&quot;, # The value of the custom floodlight variable. The length of string must not exceed 50 characters.
+            &quot;value&quot;: &quot;A String&quot;, # The value of the custom floodlight variable. The length of string must not exceed 100 characters.
           },
         ],
         &quot;encryptedUserId&quot;: &quot;A String&quot;, # The alphanumeric encrypted user ID. When set, encryptionInfo should also be specified. This field is mutually exclusive with encryptedUserIdCandidates[], matchId, mobileDeviceId and gclid. This or encryptedUserIdCandidates[] or matchId or mobileDeviceId or gclid is a required field.
@@ -202,7 +202,7 @@
         { # A custom floodlight variable.
           &quot;kind&quot;: &quot;A String&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;dfareporting#customFloodlightVariable&quot;.
           &quot;type&quot;: &quot;A String&quot;, # The type of custom floodlight variable to supply a value for. These map to the &quot;u[1-20]=&quot; in the tags.
-          &quot;value&quot;: &quot;A String&quot;, # The value of the custom floodlight variable. The length of string must not exceed 50 characters.
+          &quot;value&quot;: &quot;A String&quot;, # The value of the custom floodlight variable. The length of string must not exceed 100 characters.
         },
       ],
       &quot;encryptedUserId&quot;: &quot;A String&quot;, # The alphanumeric encrypted user ID. When set, encryptionInfo should also be specified. This field is mutually exclusive with encryptedUserIdCandidates[], matchId, mobileDeviceId and gclid. This or encryptedUserIdCandidates[] or matchId or mobileDeviceId or gclid is a required field.
@@ -252,7 +252,7 @@
           { # A custom floodlight variable.
             &quot;kind&quot;: &quot;A String&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;dfareporting#customFloodlightVariable&quot;.
             &quot;type&quot;: &quot;A String&quot;, # The type of custom floodlight variable to supply a value for. These map to the &quot;u[1-20]=&quot; in the tags.
-            &quot;value&quot;: &quot;A String&quot;, # The value of the custom floodlight variable. The length of string must not exceed 50 characters.
+            &quot;value&quot;: &quot;A String&quot;, # The value of the custom floodlight variable. The length of string must not exceed 100 characters.
           },
         ],
         &quot;encryptedUserId&quot;: &quot;A String&quot;, # The alphanumeric encrypted user ID. When set, encryptionInfo should also be specified. This field is mutually exclusive with encryptedUserIdCandidates[], matchId, mobileDeviceId and gclid. This or encryptedUserIdCandidates[] or matchId or mobileDeviceId or gclid is a required field.
diff --git a/docs/dyn/dfareporting_v3_3.reports.compatibleFields.html b/docs/dyn/dfareporting_v3_3.reports.compatibleFields.html
index c1ed05c..33f5d5d 100644
--- a/docs/dyn/dfareporting_v3_3.reports.compatibleFields.html
+++ b/docs/dyn/dfareporting_v3_3.reports.compatibleFields.html
@@ -318,8 +318,8 @@
       },
     ],
     &quot;reportProperties&quot;: { # The properties of the report.
-      &quot;clicksLookbackWindow&quot;: 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
-      &quot;impressionsLookbackWindow&quot;: 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;clicksLookbackWindow&quot;: 42, # CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;impressionsLookbackWindow&quot;: 42, # CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
       &quot;includeAttributedIPConversions&quot;: True or False, # Deprecated: has no effect.
       &quot;includeUnattributedCookieConversions&quot;: True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
       &quot;includeUnattributedIPConversions&quot;: True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
diff --git a/docs/dyn/dfareporting_v3_3.reports.html b/docs/dyn/dfareporting_v3_3.reports.html
index 88d3065..8d2b6e6 100644
--- a/docs/dyn/dfareporting_v3_3.reports.html
+++ b/docs/dyn/dfareporting_v3_3.reports.html
@@ -369,8 +369,8 @@
       },
     ],
     &quot;reportProperties&quot;: { # The properties of the report.
-      &quot;clicksLookbackWindow&quot;: 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
-      &quot;impressionsLookbackWindow&quot;: 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;clicksLookbackWindow&quot;: 42, # CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;impressionsLookbackWindow&quot;: 42, # CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
       &quot;includeAttributedIPConversions&quot;: True or False, # Deprecated: has no effect.
       &quot;includeUnattributedCookieConversions&quot;: True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
       &quot;includeUnattributedIPConversions&quot;: True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
@@ -689,8 +689,8 @@
       },
     ],
     &quot;reportProperties&quot;: { # The properties of the report.
-      &quot;clicksLookbackWindow&quot;: 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
-      &quot;impressionsLookbackWindow&quot;: 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;clicksLookbackWindow&quot;: 42, # CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;impressionsLookbackWindow&quot;: 42, # CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
       &quot;includeAttributedIPConversions&quot;: True or False, # Deprecated: has no effect.
       &quot;includeUnattributedCookieConversions&quot;: True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
       &quot;includeUnattributedIPConversions&quot;: True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
@@ -1007,8 +1007,8 @@
       },
     ],
     &quot;reportProperties&quot;: { # The properties of the report.
-      &quot;clicksLookbackWindow&quot;: 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
-      &quot;impressionsLookbackWindow&quot;: 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;clicksLookbackWindow&quot;: 42, # CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;impressionsLookbackWindow&quot;: 42, # CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
       &quot;includeAttributedIPConversions&quot;: True or False, # Deprecated: has no effect.
       &quot;includeUnattributedCookieConversions&quot;: True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
       &quot;includeUnattributedIPConversions&quot;: True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
@@ -1350,8 +1350,8 @@
           },
         ],
         &quot;reportProperties&quot;: { # The properties of the report.
-          &quot;clicksLookbackWindow&quot;: 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
-          &quot;impressionsLookbackWindow&quot;: 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+          &quot;clicksLookbackWindow&quot;: 42, # CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+          &quot;impressionsLookbackWindow&quot;: 42, # CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
           &quot;includeAttributedIPConversions&quot;: True or False, # Deprecated: has no effect.
           &quot;includeUnattributedCookieConversions&quot;: True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
           &quot;includeUnattributedIPConversions&quot;: True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
@@ -1689,8 +1689,8 @@
       },
     ],
     &quot;reportProperties&quot;: { # The properties of the report.
-      &quot;clicksLookbackWindow&quot;: 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
-      &quot;impressionsLookbackWindow&quot;: 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;clicksLookbackWindow&quot;: 42, # CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;impressionsLookbackWindow&quot;: 42, # CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
       &quot;includeAttributedIPConversions&quot;: True or False, # Deprecated: has no effect.
       &quot;includeUnattributedCookieConversions&quot;: True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
       &quot;includeUnattributedIPConversions&quot;: True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
@@ -2007,8 +2007,8 @@
       },
     ],
     &quot;reportProperties&quot;: { # The properties of the report.
-      &quot;clicksLookbackWindow&quot;: 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
-      &quot;impressionsLookbackWindow&quot;: 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;clicksLookbackWindow&quot;: 42, # CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;impressionsLookbackWindow&quot;: 42, # CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
       &quot;includeAttributedIPConversions&quot;: True or False, # Deprecated: has no effect.
       &quot;includeUnattributedCookieConversions&quot;: True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
       &quot;includeUnattributedIPConversions&quot;: True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
@@ -2366,8 +2366,8 @@
       },
     ],
     &quot;reportProperties&quot;: { # The properties of the report.
-      &quot;clicksLookbackWindow&quot;: 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
-      &quot;impressionsLookbackWindow&quot;: 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;clicksLookbackWindow&quot;: 42, # CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;impressionsLookbackWindow&quot;: 42, # CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
       &quot;includeAttributedIPConversions&quot;: True or False, # Deprecated: has no effect.
       &quot;includeUnattributedCookieConversions&quot;: True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
       &quot;includeUnattributedIPConversions&quot;: True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
@@ -2684,8 +2684,8 @@
       },
     ],
     &quot;reportProperties&quot;: { # The properties of the report.
-      &quot;clicksLookbackWindow&quot;: 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
-      &quot;impressionsLookbackWindow&quot;: 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;clicksLookbackWindow&quot;: 42, # CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;impressionsLookbackWindow&quot;: 42, # CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
       &quot;includeAttributedIPConversions&quot;: True or False, # Deprecated: has no effect.
       &quot;includeUnattributedCookieConversions&quot;: True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
       &quot;includeUnattributedIPConversions&quot;: True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
diff --git a/docs/dyn/dfareporting_v3_4.conversions.html b/docs/dyn/dfareporting_v3_4.conversions.html
index 2055bd7..87c8a6c 100644
--- a/docs/dyn/dfareporting_v3_4.conversions.html
+++ b/docs/dyn/dfareporting_v3_4.conversions.html
@@ -101,7 +101,7 @@
         { # A custom floodlight variable.
           &quot;kind&quot;: &quot;A String&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;dfareporting#customFloodlightVariable&quot;.
           &quot;type&quot;: &quot;A String&quot;, # The type of custom floodlight variable to supply a value for. These map to the &quot;u[1-20]=&quot; in the tags.
-          &quot;value&quot;: &quot;A String&quot;, # The value of the custom floodlight variable. The length of string must not exceed 50 characters.
+          &quot;value&quot;: &quot;A String&quot;, # The value of the custom floodlight variable. The length of string must not exceed 100 characters.
         },
       ],
       &quot;dclid&quot;: &quot;A String&quot;, # The display click ID. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[], matchId, mobileDeviceId and gclid. This or encryptedUserId or encryptedUserIdCandidates[] or matchId or mobileDeviceId or gclid is a required field.
@@ -152,7 +152,7 @@
           { # A custom floodlight variable.
             &quot;kind&quot;: &quot;A String&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;dfareporting#customFloodlightVariable&quot;.
             &quot;type&quot;: &quot;A String&quot;, # The type of custom floodlight variable to supply a value for. These map to the &quot;u[1-20]=&quot; in the tags.
-            &quot;value&quot;: &quot;A String&quot;, # The value of the custom floodlight variable. The length of string must not exceed 50 characters.
+            &quot;value&quot;: &quot;A String&quot;, # The value of the custom floodlight variable. The length of string must not exceed 100 characters.
           },
         ],
         &quot;dclid&quot;: &quot;A String&quot;, # The display click ID. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[], matchId, mobileDeviceId and gclid. This or encryptedUserId or encryptedUserIdCandidates[] or matchId or mobileDeviceId or gclid is a required field.
@@ -204,7 +204,7 @@
         { # A custom floodlight variable.
           &quot;kind&quot;: &quot;A String&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;dfareporting#customFloodlightVariable&quot;.
           &quot;type&quot;: &quot;A String&quot;, # The type of custom floodlight variable to supply a value for. These map to the &quot;u[1-20]=&quot; in the tags.
-          &quot;value&quot;: &quot;A String&quot;, # The value of the custom floodlight variable. The length of string must not exceed 50 characters.
+          &quot;value&quot;: &quot;A String&quot;, # The value of the custom floodlight variable. The length of string must not exceed 100 characters.
         },
       ],
       &quot;dclid&quot;: &quot;A String&quot;, # The display click ID. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[], matchId, mobileDeviceId and gclid. This or encryptedUserId or encryptedUserIdCandidates[] or matchId or mobileDeviceId or gclid is a required field.
@@ -255,7 +255,7 @@
           { # A custom floodlight variable.
             &quot;kind&quot;: &quot;A String&quot;, # Identifies what kind of resource this is. Value: the fixed string &quot;dfareporting#customFloodlightVariable&quot;.
             &quot;type&quot;: &quot;A String&quot;, # The type of custom floodlight variable to supply a value for. These map to the &quot;u[1-20]=&quot; in the tags.
-            &quot;value&quot;: &quot;A String&quot;, # The value of the custom floodlight variable. The length of string must not exceed 50 characters.
+            &quot;value&quot;: &quot;A String&quot;, # The value of the custom floodlight variable. The length of string must not exceed 100 characters.
           },
         ],
         &quot;dclid&quot;: &quot;A String&quot;, # The display click ID. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[], matchId, mobileDeviceId and gclid. This or encryptedUserId or encryptedUserIdCandidates[] or matchId or mobileDeviceId or gclid is a required field.
diff --git a/docs/dyn/dfareporting_v3_4.reports.compatibleFields.html b/docs/dyn/dfareporting_v3_4.reports.compatibleFields.html
index 879614b..c5d1601 100644
--- a/docs/dyn/dfareporting_v3_4.reports.compatibleFields.html
+++ b/docs/dyn/dfareporting_v3_4.reports.compatibleFields.html
@@ -498,8 +498,8 @@
       },
     ],
     &quot;reportProperties&quot;: { # The properties of the report.
-      &quot;clicksLookbackWindow&quot;: 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
-      &quot;impressionsLookbackWindow&quot;: 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;clicksLookbackWindow&quot;: 42, # CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;impressionsLookbackWindow&quot;: 42, # CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
       &quot;includeAttributedIPConversions&quot;: True or False, # Deprecated: has no effect.
       &quot;includeUnattributedCookieConversions&quot;: True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
       &quot;includeUnattributedIPConversions&quot;: True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
diff --git a/docs/dyn/dfareporting_v3_4.reports.html b/docs/dyn/dfareporting_v3_4.reports.html
index 3d17a9d..1739aab 100644
--- a/docs/dyn/dfareporting_v3_4.reports.html
+++ b/docs/dyn/dfareporting_v3_4.reports.html
@@ -549,8 +549,8 @@
       },
     ],
     &quot;reportProperties&quot;: { # The properties of the report.
-      &quot;clicksLookbackWindow&quot;: 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
-      &quot;impressionsLookbackWindow&quot;: 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;clicksLookbackWindow&quot;: 42, # CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;impressionsLookbackWindow&quot;: 42, # CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
       &quot;includeAttributedIPConversions&quot;: True or False, # Deprecated: has no effect.
       &quot;includeUnattributedCookieConversions&quot;: True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
       &quot;includeUnattributedIPConversions&quot;: True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
@@ -1049,8 +1049,8 @@
       },
     ],
     &quot;reportProperties&quot;: { # The properties of the report.
-      &quot;clicksLookbackWindow&quot;: 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
-      &quot;impressionsLookbackWindow&quot;: 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;clicksLookbackWindow&quot;: 42, # CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;impressionsLookbackWindow&quot;: 42, # CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
       &quot;includeAttributedIPConversions&quot;: True or False, # Deprecated: has no effect.
       &quot;includeUnattributedCookieConversions&quot;: True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
       &quot;includeUnattributedIPConversions&quot;: True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
@@ -1547,8 +1547,8 @@
       },
     ],
     &quot;reportProperties&quot;: { # The properties of the report.
-      &quot;clicksLookbackWindow&quot;: 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
-      &quot;impressionsLookbackWindow&quot;: 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;clicksLookbackWindow&quot;: 42, # CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;impressionsLookbackWindow&quot;: 42, # CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
       &quot;includeAttributedIPConversions&quot;: True or False, # Deprecated: has no effect.
       &quot;includeUnattributedCookieConversions&quot;: True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
       &quot;includeUnattributedIPConversions&quot;: True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
@@ -2070,8 +2070,8 @@
           },
         ],
         &quot;reportProperties&quot;: { # The properties of the report.
-          &quot;clicksLookbackWindow&quot;: 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
-          &quot;impressionsLookbackWindow&quot;: 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+          &quot;clicksLookbackWindow&quot;: 42, # CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+          &quot;impressionsLookbackWindow&quot;: 42, # CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
           &quot;includeAttributedIPConversions&quot;: True or False, # Deprecated: has no effect.
           &quot;includeUnattributedCookieConversions&quot;: True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
           &quot;includeUnattributedIPConversions&quot;: True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
@@ -2589,8 +2589,8 @@
       },
     ],
     &quot;reportProperties&quot;: { # The properties of the report.
-      &quot;clicksLookbackWindow&quot;: 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
-      &quot;impressionsLookbackWindow&quot;: 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;clicksLookbackWindow&quot;: 42, # CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;impressionsLookbackWindow&quot;: 42, # CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
       &quot;includeAttributedIPConversions&quot;: True or False, # Deprecated: has no effect.
       &quot;includeUnattributedCookieConversions&quot;: True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
       &quot;includeUnattributedIPConversions&quot;: True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
@@ -3087,8 +3087,8 @@
       },
     ],
     &quot;reportProperties&quot;: { # The properties of the report.
-      &quot;clicksLookbackWindow&quot;: 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
-      &quot;impressionsLookbackWindow&quot;: 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;clicksLookbackWindow&quot;: 42, # CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;impressionsLookbackWindow&quot;: 42, # CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
       &quot;includeAttributedIPConversions&quot;: True or False, # Deprecated: has no effect.
       &quot;includeUnattributedCookieConversions&quot;: True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
       &quot;includeUnattributedIPConversions&quot;: True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
@@ -3626,8 +3626,8 @@
       },
     ],
     &quot;reportProperties&quot;: { # The properties of the report.
-      &quot;clicksLookbackWindow&quot;: 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
-      &quot;impressionsLookbackWindow&quot;: 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;clicksLookbackWindow&quot;: 42, # CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;impressionsLookbackWindow&quot;: 42, # CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
       &quot;includeAttributedIPConversions&quot;: True or False, # Deprecated: has no effect.
       &quot;includeUnattributedCookieConversions&quot;: True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
       &quot;includeUnattributedIPConversions&quot;: True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
@@ -4124,8 +4124,8 @@
       },
     ],
     &quot;reportProperties&quot;: { # The properties of the report.
-      &quot;clicksLookbackWindow&quot;: 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
-      &quot;impressionsLookbackWindow&quot;: 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;clicksLookbackWindow&quot;: 42, # CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+      &quot;impressionsLookbackWindow&quot;: 42, # CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
       &quot;includeAttributedIPConversions&quot;: True or False, # Deprecated: has no effect.
       &quot;includeUnattributedCookieConversions&quot;: True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
       &quot;includeUnattributedIPConversions&quot;: True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
diff --git a/docs/dyn/domains_v1alpha2.projects.locations.registrations.html b/docs/dyn/domains_v1alpha2.projects.locations.registrations.html
index 9944993..f0db51f 100644
--- a/docs/dyn/domains_v1alpha2.projects.locations.registrations.html
+++ b/docs/dyn/domains_v1alpha2.projects.locations.registrations.html
@@ -144,7 +144,7 @@
     The object takes the form of:
 
 { # Request for the `ConfigureContactSettings` method.
-  &quot;contactNotices&quot;: [ # The list of contact notices that the caller acknowledges. The notices required here depend on the values specified in `contact_settings`.
+  &quot;contactNotices&quot;: [ # The list of contact notices that the caller acknowledges. The notices needed here depend on the values specified in `contact_settings`.
     &quot;A String&quot;,
   ],
   &quot;contactSettings&quot;: { # Defines the contact information associated with a `Registration`. [ICANN](https://icann.org/) requires all domain names to have associated contact information. The `registrant_contact` is considered the domain&#x27;s legal owner, and often the other contacts are identical. # Fields of the `ContactSettings` to update.
@@ -1200,7 +1200,7 @@
     The object takes the form of:
 
 { # Request for the `RegisterDomain` method.
-  &quot;contactNotices&quot;: [ # The list of contact notices that the caller acknowledges. The notices required here depend on the values specified in `registration.contact_settings`.
+  &quot;contactNotices&quot;: [ # The list of contact notices that the caller acknowledges. The notices needed here depend on the values specified in `registration.contact_settings`.
     &quot;A String&quot;,
   ],
   &quot;domainNotices&quot;: [ # The list of domain notices that you acknowledge. Call `RetrieveRegisterParameters` to see the notices that need acknowledgement.
diff --git a/docs/dyn/domains_v1beta1.projects.locations.registrations.html b/docs/dyn/domains_v1beta1.projects.locations.registrations.html
index 25dc2ce..f0d3ba2 100644
--- a/docs/dyn/domains_v1beta1.projects.locations.registrations.html
+++ b/docs/dyn/domains_v1beta1.projects.locations.registrations.html
@@ -144,7 +144,7 @@
     The object takes the form of:
 
 { # Request for the `ConfigureContactSettings` method.
-  &quot;contactNotices&quot;: [ # The list of contact notices that the caller acknowledges. The notices required here depend on the values specified in `contact_settings`.
+  &quot;contactNotices&quot;: [ # The list of contact notices that the caller acknowledges. The notices needed here depend on the values specified in `contact_settings`.
     &quot;A String&quot;,
   ],
   &quot;contactSettings&quot;: { # Defines the contact information associated with a `Registration`. [ICANN](https://icann.org/) requires all domain names to have associated contact information. The `registrant_contact` is considered the domain&#x27;s legal owner, and often the other contacts are identical. # Fields of the `ContactSettings` to update.
@@ -1200,7 +1200,7 @@
     The object takes the form of:
 
 { # Request for the `RegisterDomain` method.
-  &quot;contactNotices&quot;: [ # The list of contact notices that the caller acknowledges. The notices required here depend on the values specified in `registration.contact_settings`.
+  &quot;contactNotices&quot;: [ # The list of contact notices that the caller acknowledges. The notices needed here depend on the values specified in `registration.contact_settings`.
     &quot;A String&quot;,
   ],
   &quot;domainNotices&quot;: [ # The list of domain notices that you acknowledge. Call `RetrieveRegisterParameters` to see the notices that need acknowledgement.
diff --git a/docs/dyn/drive_v2.changes.html b/docs/dyn/drive_v2.changes.html
index 96fcd7e..2efea4f 100644
--- a/docs/dyn/drive_v2.changes.html
+++ b/docs/dyn/drive_v2.changes.html
@@ -407,7 +407,7 @@
         &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
         &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
         &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-        &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+        &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
       },
     ],
     &quot;quotaBytesUsed&quot;: &quot;A String&quot;, # The number of quota bytes used by this file.
@@ -916,7 +916,7 @@
             &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
             &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
             &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-            &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+            &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
           },
         ],
         &quot;quotaBytesUsed&quot;: &quot;A String&quot;, # The number of quota bytes used by this file.
diff --git a/docs/dyn/drive_v2.files.html b/docs/dyn/drive_v2.files.html
index 35b244c..175a252 100644
--- a/docs/dyn/drive_v2.files.html
+++ b/docs/dyn/drive_v2.files.html
@@ -395,7 +395,7 @@
       &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
       &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
       &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
     },
   ],
   &quot;quotaBytesUsed&quot;: &quot;A String&quot;, # The number of quota bytes used by this file.
@@ -780,7 +780,7 @@
       &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
       &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
       &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
     },
   ],
   &quot;quotaBytesUsed&quot;: &quot;A String&quot;, # The number of quota bytes used by this file.
@@ -1229,7 +1229,7 @@
       &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
       &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
       &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
     },
   ],
   &quot;quotaBytesUsed&quot;: &quot;A String&quot;, # The number of quota bytes used by this file.
@@ -1628,7 +1628,7 @@
       &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
       &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
       &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
     },
   ],
   &quot;quotaBytesUsed&quot;: &quot;A String&quot;, # The number of quota bytes used by this file.
@@ -2016,7 +2016,7 @@
       &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
       &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
       &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
     },
   ],
   &quot;quotaBytesUsed&quot;: &quot;A String&quot;, # The number of quota bytes used by this file.
@@ -2418,7 +2418,7 @@
           &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
           &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
           &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-          &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+          &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
         },
       ],
       &quot;quotaBytesUsed&quot;: &quot;A String&quot;, # The number of quota bytes used by this file.
@@ -2815,7 +2815,7 @@
       &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
       &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
       &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
     },
   ],
   &quot;quotaBytesUsed&quot;: &quot;A String&quot;, # The number of quota bytes used by this file.
@@ -3210,7 +3210,7 @@
       &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
       &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
       &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
     },
   ],
   &quot;quotaBytesUsed&quot;: &quot;A String&quot;, # The number of quota bytes used by this file.
@@ -3591,7 +3591,7 @@
       &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
       &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
       &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
     },
   ],
   &quot;quotaBytesUsed&quot;: &quot;A String&quot;, # The number of quota bytes used by this file.
@@ -3972,7 +3972,7 @@
       &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
       &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
       &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
     },
   ],
   &quot;quotaBytesUsed&quot;: &quot;A String&quot;, # The number of quota bytes used by this file.
@@ -4353,7 +4353,7 @@
       &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
       &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
       &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
     },
   ],
   &quot;quotaBytesUsed&quot;: &quot;A String&quot;, # The number of quota bytes used by this file.
@@ -4730,7 +4730,7 @@
       &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
       &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
       &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
     },
   ],
   &quot;quotaBytesUsed&quot;: &quot;A String&quot;, # The number of quota bytes used by this file.
@@ -5127,7 +5127,7 @@
       &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
       &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
       &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
     },
   ],
   &quot;quotaBytesUsed&quot;: &quot;A String&quot;, # The number of quota bytes used by this file.
diff --git a/docs/dyn/drive_v2.properties.html b/docs/dyn/drive_v2.properties.html
index 1951801..6943550 100644
--- a/docs/dyn/drive_v2.properties.html
+++ b/docs/dyn/drive_v2.properties.html
@@ -135,7 +135,7 @@
   &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
   &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
   &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-  &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+  &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
 }</pre>
 </div>
 
@@ -159,7 +159,7 @@
   &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
   &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
   &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-  &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+  &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
 }
 
 
@@ -177,7 +177,7 @@
   &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
   &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
   &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-  &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+  &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
 }</pre>
 </div>
 
@@ -205,7 +205,7 @@
       &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
       &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
       &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+      &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
     },
   ],
   &quot;kind&quot;: &quot;drive#propertyList&quot;, # This is always drive#propertyList.
@@ -234,7 +234,7 @@
   &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
   &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
   &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-  &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+  &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
 }
 
   visibility: string, The visibility of the property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
@@ -253,7 +253,7 @@
   &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
   &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
   &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-  &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+  &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
 }</pre>
 </div>
 
@@ -278,7 +278,7 @@
   &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
   &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
   &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-  &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+  &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
 }
 
   visibility: string, The visibility of the property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
@@ -297,7 +297,7 @@
   &quot;kind&quot;: &quot;drive#property&quot;, # This is always drive#property.
   &quot;selfLink&quot;: &quot;A String&quot;, # The link back to this property.
   &quot;value&quot;: &quot;A String&quot;, # The value of this property.
-  &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)
+  &quot;visibility&quot;: &quot;A String&quot;, # The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
 }</pre>
 </div>
 
diff --git a/docs/dyn/drive_v3.changes.html b/docs/dyn/drive_v3.changes.html
index 0743805..4861b8a 100644
--- a/docs/dyn/drive_v3.changes.html
+++ b/docs/dyn/drive_v3.changes.html
@@ -185,7 +185,7 @@
       &quot;driveId&quot;: &quot;A String&quot;, # The ID of the shared drive associated with this change.
       &quot;file&quot;: { # The metadata for a file. # The updated state of the file. Present if the type is file and the file has not been removed from this list of changes.
         &quot;appProperties&quot;: { # A collection of arbitrary key-value pairs which are private to the requesting app.
-            # Entries with null values are cleared in update and copy requests.
+            # Entries with null values are cleared in update and copy requests. These properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
           &quot;a_key&quot;: &quot;A String&quot;,
         },
         &quot;capabilities&quot;: { # Capabilities the current user has on this file. Each capability corresponds to a fine-grained action that a user may take.
diff --git a/docs/dyn/drive_v3.files.html b/docs/dyn/drive_v3.files.html
index a225fdf..73caf79 100644
--- a/docs/dyn/drive_v3.files.html
+++ b/docs/dyn/drive_v3.files.html
@@ -136,7 +136,7 @@
 
 { # The metadata for a file.
   &quot;appProperties&quot;: { # A collection of arbitrary key-value pairs which are private to the requesting app.
-      # Entries with null values are cleared in update and copy requests.
+      # Entries with null values are cleared in update and copy requests. These properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
   &quot;capabilities&quot;: { # Capabilities the current user has on this file. Each capability corresponds to a fine-grained action that a user may take.
@@ -401,7 +401,7 @@
 
     { # The metadata for a file.
   &quot;appProperties&quot;: { # A collection of arbitrary key-value pairs which are private to the requesting app.
-      # Entries with null values are cleared in update and copy requests.
+      # Entries with null values are cleared in update and copy requests. These properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
   &quot;capabilities&quot;: { # Capabilities the current user has on this file. Each capability corresponds to a fine-grained action that a user may take.
@@ -664,7 +664,7 @@
 
 { # The metadata for a file.
   &quot;appProperties&quot;: { # A collection of arbitrary key-value pairs which are private to the requesting app.
-      # Entries with null values are cleared in update and copy requests.
+      # Entries with null values are cleared in update and copy requests. These properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
   &quot;capabilities&quot;: { # Capabilities the current user has on this file. Each capability corresponds to a fine-grained action that a user may take.
@@ -932,7 +932,7 @@
 
     { # The metadata for a file.
   &quot;appProperties&quot;: { # A collection of arbitrary key-value pairs which are private to the requesting app.
-      # Entries with null values are cleared in update and copy requests.
+      # Entries with null values are cleared in update and copy requests. These properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
   &quot;capabilities&quot;: { # Capabilities the current user has on this file. Each capability corresponds to a fine-grained action that a user may take.
@@ -1262,7 +1262,7 @@
 
     { # The metadata for a file.
   &quot;appProperties&quot;: { # A collection of arbitrary key-value pairs which are private to the requesting app.
-      # Entries with null values are cleared in update and copy requests.
+      # Entries with null values are cleared in update and copy requests. These properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
   &quot;capabilities&quot;: { # Capabilities the current user has on this file. Each capability corresponds to a fine-grained action that a user may take.
@@ -1562,7 +1562,7 @@
   &quot;files&quot;: [ # The list of files. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.
     { # The metadata for a file.
       &quot;appProperties&quot;: { # A collection of arbitrary key-value pairs which are private to the requesting app.
-          # Entries with null values are cleared in update and copy requests.
+          # Entries with null values are cleared in update and copy requests. These properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
       &quot;capabilities&quot;: { # Capabilities the current user has on this file. Each capability corresponds to a fine-grained action that a user may take.
@@ -1845,7 +1845,7 @@
 
 { # The metadata for a file.
   &quot;appProperties&quot;: { # A collection of arbitrary key-value pairs which are private to the requesting app.
-      # Entries with null values are cleared in update and copy requests.
+      # Entries with null values are cleared in update and copy requests. These properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
   &quot;capabilities&quot;: { # Capabilities the current user has on this file. Each capability corresponds to a fine-grained action that a user may take.
@@ -2114,7 +2114,7 @@
 
     { # The metadata for a file.
   &quot;appProperties&quot;: { # A collection of arbitrary key-value pairs which are private to the requesting app.
-      # Entries with null values are cleared in update and copy requests.
+      # Entries with null values are cleared in update and copy requests. These properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
   &quot;capabilities&quot;: { # Capabilities the current user has on this file. Each capability corresponds to a fine-grained action that a user may take.
diff --git a/docs/dyn/firebasehosting_v1beta1.projects.sites.channels.html b/docs/dyn/firebasehosting_v1beta1.projects.sites.channels.html
index 8d43161..9079a8c 100644
--- a/docs/dyn/firebasehosting_v1beta1.projects.sites.channels.html
+++ b/docs/dyn/firebasehosting_v1beta1.projects.sites.channels.html
@@ -124,20 +124,20 @@
   &quot;name&quot;: &quot;A String&quot;, # The fully-qualified identifier of the Channel.
   &quot;release&quot;: { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time. # Output only. The current release for the channel, if any.
     &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
     &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
     &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
       &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
       &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
     },
     &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-    &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+    &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
         &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
         &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
         &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-          { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;headers&quot;: { # Required. The additional headers to add to the response.
               &quot;a_key&quot;: &quot;A String&quot;,
             },
@@ -148,18 +148,18 @@
           &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
         },
         &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-          { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
           },
         ],
         &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-          { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+          { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
             &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
             &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -189,12 +189,12 @@
       &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
       &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
         &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
         &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
       },
-      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
       &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
     },
   },
@@ -222,20 +222,20 @@
   &quot;name&quot;: &quot;A String&quot;, # The fully-qualified identifier of the Channel.
   &quot;release&quot;: { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time. # Output only. The current release for the channel, if any.
     &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
     &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
     &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
       &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
       &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
     },
     &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-    &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+    &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
         &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
         &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
         &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-          { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;headers&quot;: { # Required. The additional headers to add to the response.
               &quot;a_key&quot;: &quot;A String&quot;,
             },
@@ -246,18 +246,18 @@
           &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
         },
         &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-          { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
           },
         ],
         &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-          { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+          { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
             &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
             &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -287,12 +287,12 @@
       &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
       &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
         &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
         &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
       },
-      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
       &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
     },
   },
@@ -344,20 +344,20 @@
   &quot;name&quot;: &quot;A String&quot;, # The fully-qualified identifier of the Channel.
   &quot;release&quot;: { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time. # Output only. The current release for the channel, if any.
     &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
     &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
     &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
       &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
       &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
     },
     &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-    &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+    &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
         &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
         &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
         &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-          { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;headers&quot;: { # Required. The additional headers to add to the response.
               &quot;a_key&quot;: &quot;A String&quot;,
             },
@@ -368,18 +368,18 @@
           &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
         },
         &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-          { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
           },
         ],
         &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-          { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+          { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
             &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
             &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -409,12 +409,12 @@
       &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
       &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
         &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
         &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
       },
-      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
       &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
     },
   },
@@ -452,20 +452,20 @@
       &quot;name&quot;: &quot;A String&quot;, # The fully-qualified identifier of the Channel.
       &quot;release&quot;: { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time. # Output only. The current release for the channel, if any.
         &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-        &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+        &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
         &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
         &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
           &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
           &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
         },
         &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-        &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-          &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+        &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+          &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
             &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
             &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
             &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-              { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-                &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+              { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+                &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
                 &quot;headers&quot;: { # Required. The additional headers to add to the response.
                   &quot;a_key&quot;: &quot;A String&quot;,
                 },
@@ -476,18 +476,18 @@
               &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
             },
             &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-              { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-                &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+              { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+                &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
                 &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
                 &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
                 &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
               },
             ],
             &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-              { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+              { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
                 &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
                 &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-                &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+                &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
                 &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
                 &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
                 &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -517,12 +517,12 @@
           &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
             &quot;a_key&quot;: &quot;A String&quot;,
           },
-          &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+          &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
           &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
             &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
             &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
           },
-          &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+          &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
           &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
         },
       },
@@ -568,20 +568,20 @@
   &quot;name&quot;: &quot;A String&quot;, # The fully-qualified identifier of the Channel.
   &quot;release&quot;: { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time. # Output only. The current release for the channel, if any.
     &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
     &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
     &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
       &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
       &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
     },
     &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-    &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+    &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
         &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
         &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
         &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-          { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;headers&quot;: { # Required. The additional headers to add to the response.
               &quot;a_key&quot;: &quot;A String&quot;,
             },
@@ -592,18 +592,18 @@
           &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
         },
         &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-          { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
           },
         ],
         &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-          { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+          { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
             &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
             &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -633,12 +633,12 @@
       &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
       &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
         &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
         &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
       },
-      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
       &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
     },
   },
@@ -666,20 +666,20 @@
   &quot;name&quot;: &quot;A String&quot;, # The fully-qualified identifier of the Channel.
   &quot;release&quot;: { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time. # Output only. The current release for the channel, if any.
     &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
     &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
     &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
       &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
       &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
     },
     &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-    &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+    &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
         &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
         &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
         &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-          { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;headers&quot;: { # Required. The additional headers to add to the response.
               &quot;a_key&quot;: &quot;A String&quot;,
             },
@@ -690,18 +690,18 @@
           &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
         },
         &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-          { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
           },
         ],
         &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-          { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+          { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
             &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
             &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -731,12 +731,12 @@
       &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
       &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
         &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
         &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
       },
-      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
       &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
     },
   },
diff --git a/docs/dyn/firebasehosting_v1beta1.projects.sites.channels.releases.html b/docs/dyn/firebasehosting_v1beta1.projects.sites.channels.releases.html
index 15afd5f..6fc9012 100644
--- a/docs/dyn/firebasehosting_v1beta1.projects.sites.channels.releases.html
+++ b/docs/dyn/firebasehosting_v1beta1.projects.sites.channels.releases.html
@@ -79,7 +79,7 @@
 <p class="firstline">Close httplib2 connections.</p>
 <p class="toc_element">
   <code><a href="#create">create(parent, body=None, versionName=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Creates a new release which makes the content of the specified version actively display on the appropriate URL(s).</p>
+<p class="firstline">Creates a new release, which makes the content of the specified version actively display on the appropriate URL(s).</p>
 <p class="toc_element">
   <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Lists the releases that have been created on the specified site.</p>
@@ -94,29 +94,29 @@
 
 <div class="method">
     <code class="details" id="create">create(parent, body=None, versionName=None, x__xgafv=None)</code>
-  <pre>Creates a new release which makes the content of the specified version actively display on the appropriate URL(s).
+  <pre>Creates a new release, which makes the content of the specified version actively display on the appropriate URL(s).
 
 Args:
-  parent: string, Required. The site that the release belongs to, in the format: sites/ site-name (required)
+  parent: string, Required. The site to which the release belongs, in the format: sites/ SITE_NAME (required)
   body: object, The request body.
     The object takes the form of:
 
 { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time.
   &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
   &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
   &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
     &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
     &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
   },
   &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-  &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-    &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+  &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+    &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
       &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
       &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
       &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-        { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;headers&quot;: { # Required. The additional headers to add to the response.
             &quot;a_key&quot;: &quot;A String&quot;,
           },
@@ -127,18 +127,18 @@
         &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
       },
       &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-        { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
           &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
           &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
         },
       ],
       &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-        { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+        { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
           &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
           &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
           &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
           &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -168,17 +168,17 @@
     &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
       &quot;a_key&quot;: &quot;A String&quot;,
     },
-    &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+    &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
     &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
       &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
       &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
     },
-    &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+    &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
     &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
   },
 }
 
-  versionName: string, The unique identifier for a version, in the format: /sites/site-name /versions/versionID The site-name in this version identifier must match the site-name in the `parent` parameter. This query parameter must be empty if the `type` field in the request body is `SITE_DISABLE`.
+  versionName: string,  The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID The SITE_NAME in this version identifier must match the SITE_NAME in the `parent` parameter. This query parameter must be empty if the `type` field in the request body is `SITE_DISABLE`.
   x__xgafv: string, V1 error format.
     Allowed values
       1 - v1 error format
@@ -189,20 +189,20 @@
 
     { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time.
   &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
   &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
   &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
     &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
     &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
   },
   &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-  &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-    &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+  &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+    &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
       &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
       &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
       &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-        { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;headers&quot;: { # Required. The additional headers to add to the response.
             &quot;a_key&quot;: &quot;A String&quot;,
           },
@@ -213,18 +213,18 @@
         &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
       },
       &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-        { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
           &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
           &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
         },
       ],
       &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-        { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+        { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
           &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
           &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
           &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
           &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -254,12 +254,12 @@
     &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
       &quot;a_key&quot;: &quot;A String&quot;,
     },
-    &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+    &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
     &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
       &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
       &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
     },
-    &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+    &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
     &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
   },
 }</pre>
@@ -270,9 +270,9 @@
   <pre>Lists the releases that have been created on the specified site.
 
 Args:
-  parent: string, Required. The parent for which to list files, in the format: sites/site-name (required)
-  pageSize: integer, The page size to return. Defaults to 100.
-  pageToken: string, The next_page_token from a previous request, if provided.
+  parent: string, Required. The site for which to list releases, in the format: sites/ SITE_NAME (required)
+  pageSize: integer, The maximum number of releases to return. The service may return a lower number if fewer releases exist than this maximum number. If unspecified, defaults to 100.
+  pageToken: string, A token from a previous call to `ListReleases` that tells the server where to resume listing.
   x__xgafv: string, V1 error format.
     Allowed values
       1 - v1 error format
@@ -282,24 +282,24 @@
   An object of the form:
 
     {
-  &quot;nextPageToken&quot;: &quot;A String&quot;, # If there are additional releases remaining beyond the ones in this response, then supply this token in the next [`list`](../sites.versions.files/list) call to continue with the next set of releases.
+  &quot;nextPageToken&quot;: &quot;A String&quot;, # The pagination token, if more results exist beyond the ones in this response. Include this token in your next call to `ListReleases`. Page tokens are short-lived and should not be stored.
   &quot;releases&quot;: [ # The list of hashes of files that still need to be uploaded, if any exist.
     { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time.
       &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-      &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+      &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
       &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
       &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
         &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
         &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
       },
       &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-      &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-        &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+      &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+        &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
           &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
           &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
           &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-            { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+            { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
               &quot;headers&quot;: { # Required. The additional headers to add to the response.
                 &quot;a_key&quot;: &quot;A String&quot;,
               },
@@ -310,18 +310,18 @@
             &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
           },
           &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-            { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+            { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
               &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
               &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
               &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
             },
           ],
           &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-            { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+            { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
               &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
               &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
               &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
               &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
               &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -351,12 +351,12 @@
         &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
           &quot;a_key&quot;: &quot;A String&quot;,
         },
-        &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+        &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
         &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
           &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
           &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
         },
-        &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+        &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
         &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
       },
     },
diff --git a/docs/dyn/firebasehosting_v1beta1.projects.sites.releases.html b/docs/dyn/firebasehosting_v1beta1.projects.sites.releases.html
index 3da2949..cdbb97c 100644
--- a/docs/dyn/firebasehosting_v1beta1.projects.sites.releases.html
+++ b/docs/dyn/firebasehosting_v1beta1.projects.sites.releases.html
@@ -79,7 +79,7 @@
 <p class="firstline">Close httplib2 connections.</p>
 <p class="toc_element">
   <code><a href="#create">create(parent, body=None, versionName=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Creates a new release which makes the content of the specified version actively display on the appropriate URL(s).</p>
+<p class="firstline">Creates a new release, which makes the content of the specified version actively display on the appropriate URL(s).</p>
 <p class="toc_element">
   <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Lists the releases that have been created on the specified site.</p>
@@ -94,29 +94,29 @@
 
 <div class="method">
     <code class="details" id="create">create(parent, body=None, versionName=None, x__xgafv=None)</code>
-  <pre>Creates a new release which makes the content of the specified version actively display on the appropriate URL(s).
+  <pre>Creates a new release, which makes the content of the specified version actively display on the appropriate URL(s).
 
 Args:
-  parent: string, Required. The site that the release belongs to, in the format: sites/ site-name (required)
+  parent: string, Required. The site to which the release belongs, in the format: sites/ SITE_NAME (required)
   body: object, The request body.
     The object takes the form of:
 
 { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time.
   &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
   &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
   &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
     &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
     &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
   },
   &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-  &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-    &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+  &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+    &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
       &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
       &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
       &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-        { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;headers&quot;: { # Required. The additional headers to add to the response.
             &quot;a_key&quot;: &quot;A String&quot;,
           },
@@ -127,18 +127,18 @@
         &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
       },
       &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-        { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
           &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
           &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
         },
       ],
       &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-        { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+        { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
           &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
           &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
           &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
           &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -168,17 +168,17 @@
     &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
       &quot;a_key&quot;: &quot;A String&quot;,
     },
-    &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+    &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
     &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
       &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
       &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
     },
-    &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+    &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
     &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
   },
 }
 
-  versionName: string, The unique identifier for a version, in the format: /sites/site-name /versions/versionID The site-name in this version identifier must match the site-name in the `parent` parameter. This query parameter must be empty if the `type` field in the request body is `SITE_DISABLE`.
+  versionName: string,  The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID The SITE_NAME in this version identifier must match the SITE_NAME in the `parent` parameter. This query parameter must be empty if the `type` field in the request body is `SITE_DISABLE`.
   x__xgafv: string, V1 error format.
     Allowed values
       1 - v1 error format
@@ -189,20 +189,20 @@
 
     { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time.
   &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
   &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
   &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
     &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
     &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
   },
   &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-  &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-    &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+  &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+    &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
       &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
       &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
       &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-        { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;headers&quot;: { # Required. The additional headers to add to the response.
             &quot;a_key&quot;: &quot;A String&quot;,
           },
@@ -213,18 +213,18 @@
         &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
       },
       &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-        { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
           &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
           &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
         },
       ],
       &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-        { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+        { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
           &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
           &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
           &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
           &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -254,12 +254,12 @@
     &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
       &quot;a_key&quot;: &quot;A String&quot;,
     },
-    &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+    &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
     &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
       &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
       &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
     },
-    &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+    &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
     &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
   },
 }</pre>
@@ -270,9 +270,9 @@
   <pre>Lists the releases that have been created on the specified site.
 
 Args:
-  parent: string, Required. The parent for which to list files, in the format: sites/site-name (required)
-  pageSize: integer, The page size to return. Defaults to 100.
-  pageToken: string, The next_page_token from a previous request, if provided.
+  parent: string, Required. The site for which to list releases, in the format: sites/ SITE_NAME (required)
+  pageSize: integer, The maximum number of releases to return. The service may return a lower number if fewer releases exist than this maximum number. If unspecified, defaults to 100.
+  pageToken: string, A token from a previous call to `ListReleases` that tells the server where to resume listing.
   x__xgafv: string, V1 error format.
     Allowed values
       1 - v1 error format
@@ -282,24 +282,24 @@
   An object of the form:
 
     {
-  &quot;nextPageToken&quot;: &quot;A String&quot;, # If there are additional releases remaining beyond the ones in this response, then supply this token in the next [`list`](../sites.versions.files/list) call to continue with the next set of releases.
+  &quot;nextPageToken&quot;: &quot;A String&quot;, # The pagination token, if more results exist beyond the ones in this response. Include this token in your next call to `ListReleases`. Page tokens are short-lived and should not be stored.
   &quot;releases&quot;: [ # The list of hashes of files that still need to be uploaded, if any exist.
     { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time.
       &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-      &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+      &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
       &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
       &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
         &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
         &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
       },
       &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-      &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-        &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+      &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+        &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
           &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
           &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
           &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-            { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+            { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
               &quot;headers&quot;: { # Required. The additional headers to add to the response.
                 &quot;a_key&quot;: &quot;A String&quot;,
               },
@@ -310,18 +310,18 @@
             &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
           },
           &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-            { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+            { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
               &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
               &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
               &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
             },
           ],
           &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-            { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+            { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
               &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
               &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
               &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
               &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
               &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -351,12 +351,12 @@
         &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
           &quot;a_key&quot;: &quot;A String&quot;,
         },
-        &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+        &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
         &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
           &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
           &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
         },
-        &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+        &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
         &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
       },
     },
diff --git a/docs/dyn/firebasehosting_v1beta1.projects.sites.versions.files.html b/docs/dyn/firebasehosting_v1beta1.projects.sites.versions.files.html
index 25966cc..d1830a3 100644
--- a/docs/dyn/firebasehosting_v1beta1.projects.sites.versions.files.html
+++ b/docs/dyn/firebasehosting_v1beta1.projects.sites.versions.files.html
@@ -94,10 +94,10 @@
   <pre>Lists the remaining files to be uploaded for the specified version.
 
 Args:
-  parent: string, Required. The parent to list files for, in the format: sites/site-name /versions/versionID (required)
-  pageSize: integer, The page size to return. Defaults to 1000.
-  pageToken: string, The next_page_token from a previous request, if provided. This will be the encoded version of a firebase.hosting.proto.metadata.ListFilesPageToken.
-  status: string, The type of files in the version that should be listed.
+  parent: string, Required. The version for which to list files, in the format: sites/ SITE_NAME/versions/VERSION_ID (required)
+  pageSize: integer, The maximum number of version files to return. The service may return a lower number if fewer version files exist than this maximum number. If unspecified, defaults to 1000.
+  pageToken: string, A token from a previous call to `ListVersionFiles` that tells the server where to resume listing.
+  status: string,  The type of files that should be listed for the specified version.
     Allowed values
       STATUS_UNSPECIFIED - The default status; should not be intentionally used.
       EXPECTED - The file has been included in the version and is expected to be uploaded in the near future.
@@ -111,14 +111,14 @@
   An object of the form:
 
     {
-  &quot;files&quot;: [ # The list path/hashes in the specified version.
+  &quot;files&quot;: [ #  The list of paths to the hashes of the files in the specified version.
     { # A static content file that is part of a version.
       &quot;hash&quot;: &quot;A String&quot;, # The SHA256 content hash of the file.
       &quot;path&quot;: &quot;A String&quot;, # The URI at which the file&#x27;s content should display.
       &quot;status&quot;: &quot;A String&quot;, # Output only. The current status of a particular file in the specified version. The value will be either `pending upload` or `uploaded`.
     },
   ],
-  &quot;nextPageToken&quot;: &quot;A String&quot;, # The pagination token, if more results exist.
+  &quot;nextPageToken&quot;: &quot;A String&quot;, # The pagination token, if more results exist beyond the ones in this response. Include this token in your next call to `ListVersionFiles`. Page tokens are short-lived and should not be stored.
 }</pre>
 </div>
 
diff --git a/docs/dyn/firebasehosting_v1beta1.projects.sites.versions.html b/docs/dyn/firebasehosting_v1beta1.projects.sites.versions.html
index 88e3f2a..85706c8 100644
--- a/docs/dyn/firebasehosting_v1beta1.projects.sites.versions.html
+++ b/docs/dyn/firebasehosting_v1beta1.projects.sites.versions.html
@@ -87,7 +87,7 @@
 <p class="firstline">Close httplib2 connections.</p>
 <p class="toc_element">
   <code><a href="#create">create(parent, body=None, sizeBytes=None, versionId=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Creates a new version for a site.</p>
+<p class="firstline">Creates a new version for the specified site.</p>
 <p class="toc_element">
   <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
 <p class="firstline">Deletes the specified version.</p>
@@ -99,10 +99,10 @@
 <p class="firstline">Retrieves the next page of results.</p>
 <p class="toc_element">
   <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Updates the specified metadata for a version. Note that this method will fail with `FAILED_PRECONDITION` in the event of an invalid state transition. The only valid transition for a version is currently from a `CREATED` status to a `FINALIZED` status. Use [`DeleteVersion`](../sites.versions/delete) to set the status of a version to `DELETED`.</p>
+<p class="firstline">Updates the specified metadata for the specified version. This method will fail with `FAILED_PRECONDITION` in the event of an invalid state transition. The only valid transition for a version is currently from a `CREATED` status to a `FINALIZED` status. Use [`DeleteVersion`](delete) to set the status of a version to `DELETED`.</p>
 <p class="toc_element">
   <code><a href="#populateFiles">populateFiles(parent, body=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Adds content files to a version. Each file must be under 2 GB.</p>
+<p class="firstline"> Adds content files to the specified version. Each file must be under 2 GB.</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="clone">clone(parent, body=None, x__xgafv=None)</code>
@@ -164,20 +164,20 @@
 
 <div class="method">
     <code class="details" id="create">create(parent, body=None, sizeBytes=None, versionId=None, x__xgafv=None)</code>
-  <pre>Creates a new version for a site.
+  <pre>Creates a new version for the specified site.
 
 Args:
-  parent: string, Required. The parent to create the version for, in the format: sites/ site-name (required)
+  parent: string, Required. The site in which to create the version, in the format: sites/ SITE_NAME (required)
   body: object, The request body.
     The object takes the form of:
 
-{ # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed.
-  &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+{ # A `Version` is a configuration and a collection of static files which determine how a site is displayed.
+  &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
     &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
     &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
     &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-      { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+      { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;headers&quot;: { # Required. The additional headers to add to the response.
           &quot;a_key&quot;: &quot;A String&quot;,
         },
@@ -188,18 +188,18 @@
       &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
     },
     &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-      { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+      { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
         &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
         &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
       },
     ],
     &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-      { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+      { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
         &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
         &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
         &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
         &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -229,12 +229,12 @@
   &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+  &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
   &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
     &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
     &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
   },
-  &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+  &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
   &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
 }
 
@@ -248,13 +248,13 @@
 Returns:
   An object of the form:
 
-    { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed.
-  &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+    { # A `Version` is a configuration and a collection of static files which determine how a site is displayed.
+  &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
     &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
     &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
     &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-      { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+      { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;headers&quot;: { # Required. The additional headers to add to the response.
           &quot;a_key&quot;: &quot;A String&quot;,
         },
@@ -265,18 +265,18 @@
       &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
     },
     &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-      { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+      { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
         &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
         &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
       },
     ],
     &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-      { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+      { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
         &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
         &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
         &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
         &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -306,12 +306,12 @@
   &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+  &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
   &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
     &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
     &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
   },
-  &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+  &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
   &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
 }</pre>
 </div>
@@ -321,7 +321,7 @@
   <pre>Deletes the specified version.
 
 Args:
-  name: string, Required. The name of the version to be deleted, in the format: sites/ site-name/versions/versionID (required)
+  name: string, Required. The name of the version to be deleted, in the format: sites/ SITE_NAME/versions/VERSION_ID (required)
   x__xgafv: string, V1 error format.
     Allowed values
       1 - v1 error format
@@ -354,13 +354,13 @@
     {
   &quot;nextPageToken&quot;: &quot;A String&quot;, # The pagination token, if more results exist
   &quot;versions&quot;: [ # The list of versions, if any exist.
-    { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed.
-      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+    { # A `Version` is a configuration and a collection of static files which determine how a site is displayed.
+      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
         &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
         &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
         &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-          { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;headers&quot;: { # Required. The additional headers to add to the response.
               &quot;a_key&quot;: &quot;A String&quot;,
             },
@@ -371,18 +371,18 @@
           &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
         },
         &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-          { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
           },
         ],
         &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-          { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+          { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
             &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
             &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -412,12 +412,12 @@
       &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
       &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
         &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
         &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
       },
-      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
       &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
     },
   ],
@@ -440,20 +440,20 @@
 
 <div class="method">
     <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
-  <pre>Updates the specified metadata for a version. Note that this method will fail with `FAILED_PRECONDITION` in the event of an invalid state transition. The only valid transition for a version is currently from a `CREATED` status to a `FINALIZED` status. Use [`DeleteVersion`](../sites.versions/delete) to set the status of a version to `DELETED`.
+  <pre>Updates the specified metadata for the specified version. This method will fail with `FAILED_PRECONDITION` in the event of an invalid state transition. The only valid transition for a version is currently from a `CREATED` status to a `FINALIZED` status. Use [`DeleteVersion`](delete) to set the status of a version to `DELETED`.
 
 Args:
-  name: string, The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint. (required)
+  name: string, The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create). (required)
   body: object, The request body.
     The object takes the form of:
 
-{ # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed.
-  &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+{ # A `Version` is a configuration and a collection of static files which determine how a site is displayed.
+  &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
     &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
     &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
     &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-      { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+      { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;headers&quot;: { # Required. The additional headers to add to the response.
           &quot;a_key&quot;: &quot;A String&quot;,
         },
@@ -464,18 +464,18 @@
       &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
     },
     &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-      { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+      { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
         &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
         &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
       },
     ],
     &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-      { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+      { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
         &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
         &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
         &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
         &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -505,12 +505,12 @@
   &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+  &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
   &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
     &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
     &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
   },
-  &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+  &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
   &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
 }
 
@@ -523,13 +523,13 @@
 Returns:
   An object of the form:
 
-    { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed.
-  &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+    { # A `Version` is a configuration and a collection of static files which determine how a site is displayed.
+  &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
     &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
     &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
     &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-      { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+      { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;headers&quot;: { # Required. The additional headers to add to the response.
           &quot;a_key&quot;: &quot;A String&quot;,
         },
@@ -540,18 +540,18 @@
       &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
     },
     &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-      { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+      { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
         &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
         &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
       },
     ],
     &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-      { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+      { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
         &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
         &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
         &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
         &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -581,27 +581,27 @@
   &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+  &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
   &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
     &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
     &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
   },
-  &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+  &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
   &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
 }</pre>
 </div>
 
 <div class="method">
     <code class="details" id="populateFiles">populateFiles(parent, body=None, x__xgafv=None)</code>
-  <pre>Adds content files to a version. Each file must be under 2 GB.
+  <pre> Adds content files to the specified version. Each file must be under 2 GB.
 
 Args:
-  parent: string, Required. The version to add files to, in the format: sites/site-name /versions/versionID (required)
+  parent: string, Required. The version to which to add files, in the format: sites/SITE_NAME /versions/VERSION_ID (required)
   body: object, The request body.
     The object takes the form of:
 
-{ # The request to populate a Version&#x27;s Files.
-  &quot;files&quot;: { # A set of file paths to the hashes corresponding to assets that should be added to the version. Note that a file path to an empty hash will remove the path from the version. Calculate a hash by Gzipping the file then taking the SHA256 hash of the newly compressed file.
+{
+  &quot;files&quot;: { # A set of file paths to the hashes corresponding to assets that should be added to the version. A file path to an empty hash will remove the path from the version. Calculate a hash by Gzipping the file then taking the SHA256 hash of the newly compressed file.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
 }
@@ -615,10 +615,10 @@
   An object of the form:
 
     {
-  &quot;uploadRequiredHashes&quot;: [ # The content hashes of the specified files that need to be uploaded to the specified endpoint.
+  &quot;uploadRequiredHashes&quot;: [ # The content hashes of the specified files that need to be uploaded to the specified URL.
     &quot;A String&quot;,
   ],
-  &quot;uploadUrl&quot;: &quot;A String&quot;, # The URL to which the files should be uploaded, in the format: &quot;https://upload-firebasehosting.googleapis.com/upload/sites/site-name /versions/versionID/files&quot;. Perform a multipart `POST` of the Gzipped file contents to the URL using a forward slash and the hash of the file appended to the end.
+  &quot;uploadUrl&quot;: &quot;A String&quot;, # The URL to which the files should be uploaded, in the format: &quot;https://upload-firebasehosting.googleapis.com/upload/sites/SITE_NAME /versions/VERSION_ID/files&quot; Perform a multipart `POST` of the Gzipped file contents to the URL using a forward slash and the hash of the file appended to the end.
 }</pre>
 </div>
 
diff --git a/docs/dyn/firebasehosting_v1beta1.sites.channels.html b/docs/dyn/firebasehosting_v1beta1.sites.channels.html
index 9c1c200..7ee2ee8 100644
--- a/docs/dyn/firebasehosting_v1beta1.sites.channels.html
+++ b/docs/dyn/firebasehosting_v1beta1.sites.channels.html
@@ -124,20 +124,20 @@
   &quot;name&quot;: &quot;A String&quot;, # The fully-qualified identifier of the Channel.
   &quot;release&quot;: { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time. # Output only. The current release for the channel, if any.
     &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
     &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
     &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
       &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
       &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
     },
     &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-    &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+    &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
         &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
         &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
         &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-          { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;headers&quot;: { # Required. The additional headers to add to the response.
               &quot;a_key&quot;: &quot;A String&quot;,
             },
@@ -148,18 +148,18 @@
           &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
         },
         &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-          { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
           },
         ],
         &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-          { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+          { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
             &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
             &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -189,12 +189,12 @@
       &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
       &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
         &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
         &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
       },
-      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
       &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
     },
   },
@@ -222,20 +222,20 @@
   &quot;name&quot;: &quot;A String&quot;, # The fully-qualified identifier of the Channel.
   &quot;release&quot;: { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time. # Output only. The current release for the channel, if any.
     &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
     &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
     &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
       &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
       &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
     },
     &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-    &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+    &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
         &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
         &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
         &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-          { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;headers&quot;: { # Required. The additional headers to add to the response.
               &quot;a_key&quot;: &quot;A String&quot;,
             },
@@ -246,18 +246,18 @@
           &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
         },
         &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-          { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
           },
         ],
         &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-          { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+          { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
             &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
             &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -287,12 +287,12 @@
       &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
       &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
         &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
         &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
       },
-      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
       &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
     },
   },
@@ -344,20 +344,20 @@
   &quot;name&quot;: &quot;A String&quot;, # The fully-qualified identifier of the Channel.
   &quot;release&quot;: { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time. # Output only. The current release for the channel, if any.
     &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
     &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
     &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
       &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
       &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
     },
     &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-    &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+    &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
         &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
         &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
         &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-          { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;headers&quot;: { # Required. The additional headers to add to the response.
               &quot;a_key&quot;: &quot;A String&quot;,
             },
@@ -368,18 +368,18 @@
           &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
         },
         &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-          { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
           },
         ],
         &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-          { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+          { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
             &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
             &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -409,12 +409,12 @@
       &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
       &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
         &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
         &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
       },
-      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
       &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
     },
   },
@@ -452,20 +452,20 @@
       &quot;name&quot;: &quot;A String&quot;, # The fully-qualified identifier of the Channel.
       &quot;release&quot;: { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time. # Output only. The current release for the channel, if any.
         &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-        &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+        &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
         &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
         &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
           &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
           &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
         },
         &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-        &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-          &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+        &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+          &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
             &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
             &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
             &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-              { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-                &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+              { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+                &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
                 &quot;headers&quot;: { # Required. The additional headers to add to the response.
                   &quot;a_key&quot;: &quot;A String&quot;,
                 },
@@ -476,18 +476,18 @@
               &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
             },
             &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-              { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-                &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+              { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+                &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
                 &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
                 &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
                 &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
               },
             ],
             &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-              { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+              { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
                 &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
                 &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-                &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+                &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
                 &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
                 &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
                 &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -517,12 +517,12 @@
           &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
             &quot;a_key&quot;: &quot;A String&quot;,
           },
-          &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+          &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
           &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
             &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
             &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
           },
-          &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+          &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
           &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
         },
       },
@@ -568,20 +568,20 @@
   &quot;name&quot;: &quot;A String&quot;, # The fully-qualified identifier of the Channel.
   &quot;release&quot;: { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time. # Output only. The current release for the channel, if any.
     &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
     &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
     &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
       &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
       &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
     },
     &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-    &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+    &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
         &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
         &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
         &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-          { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;headers&quot;: { # Required. The additional headers to add to the response.
               &quot;a_key&quot;: &quot;A String&quot;,
             },
@@ -592,18 +592,18 @@
           &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
         },
         &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-          { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
           },
         ],
         &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-          { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+          { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
             &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
             &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -633,12 +633,12 @@
       &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
       &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
         &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
         &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
       },
-      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
       &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
     },
   },
@@ -666,20 +666,20 @@
   &quot;name&quot;: &quot;A String&quot;, # The fully-qualified identifier of the Channel.
   &quot;release&quot;: { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time. # Output only. The current release for the channel, if any.
     &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
     &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
     &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
       &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
       &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
     },
     &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-    &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+    &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
         &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
         &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
         &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-          { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;headers&quot;: { # Required. The additional headers to add to the response.
               &quot;a_key&quot;: &quot;A String&quot;,
             },
@@ -690,18 +690,18 @@
           &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
         },
         &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-          { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
           },
         ],
         &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-          { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+          { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
             &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
             &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -731,12 +731,12 @@
       &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
       &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
         &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
         &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
       },
-      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
       &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
     },
   },
diff --git a/docs/dyn/firebasehosting_v1beta1.sites.channels.releases.html b/docs/dyn/firebasehosting_v1beta1.sites.channels.releases.html
index 095fbef..27fd853 100644
--- a/docs/dyn/firebasehosting_v1beta1.sites.channels.releases.html
+++ b/docs/dyn/firebasehosting_v1beta1.sites.channels.releases.html
@@ -79,7 +79,7 @@
 <p class="firstline">Close httplib2 connections.</p>
 <p class="toc_element">
   <code><a href="#create">create(parent, body=None, versionName=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Creates a new release which makes the content of the specified version actively display on the appropriate URL(s).</p>
+<p class="firstline">Creates a new release, which makes the content of the specified version actively display on the appropriate URL(s).</p>
 <p class="toc_element">
   <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Lists the releases that have been created on the specified site.</p>
@@ -94,29 +94,29 @@
 
 <div class="method">
     <code class="details" id="create">create(parent, body=None, versionName=None, x__xgafv=None)</code>
-  <pre>Creates a new release which makes the content of the specified version actively display on the appropriate URL(s).
+  <pre>Creates a new release, which makes the content of the specified version actively display on the appropriate URL(s).
 
 Args:
-  parent: string, Required. The site that the release belongs to, in the format: sites/ site-name (required)
+  parent: string, Required. The site to which the release belongs, in the format: sites/ SITE_NAME (required)
   body: object, The request body.
     The object takes the form of:
 
 { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time.
   &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
   &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
   &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
     &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
     &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
   },
   &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-  &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-    &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+  &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+    &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
       &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
       &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
       &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-        { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;headers&quot;: { # Required. The additional headers to add to the response.
             &quot;a_key&quot;: &quot;A String&quot;,
           },
@@ -127,18 +127,18 @@
         &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
       },
       &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-        { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
           &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
           &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
         },
       ],
       &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-        { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+        { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
           &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
           &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
           &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
           &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -168,17 +168,17 @@
     &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
       &quot;a_key&quot;: &quot;A String&quot;,
     },
-    &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+    &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
     &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
       &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
       &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
     },
-    &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+    &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
     &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
   },
 }
 
-  versionName: string, The unique identifier for a version, in the format: /sites/site-name /versions/versionID The site-name in this version identifier must match the site-name in the `parent` parameter. This query parameter must be empty if the `type` field in the request body is `SITE_DISABLE`.
+  versionName: string,  The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID The SITE_NAME in this version identifier must match the SITE_NAME in the `parent` parameter. This query parameter must be empty if the `type` field in the request body is `SITE_DISABLE`.
   x__xgafv: string, V1 error format.
     Allowed values
       1 - v1 error format
@@ -189,20 +189,20 @@
 
     { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time.
   &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
   &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
   &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
     &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
     &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
   },
   &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-  &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-    &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+  &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+    &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
       &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
       &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
       &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-        { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;headers&quot;: { # Required. The additional headers to add to the response.
             &quot;a_key&quot;: &quot;A String&quot;,
           },
@@ -213,18 +213,18 @@
         &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
       },
       &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-        { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
           &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
           &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
         },
       ],
       &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-        { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+        { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
           &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
           &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
           &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
           &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -254,12 +254,12 @@
     &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
       &quot;a_key&quot;: &quot;A String&quot;,
     },
-    &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+    &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
     &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
       &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
       &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
     },
-    &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+    &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
     &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
   },
 }</pre>
@@ -270,9 +270,9 @@
   <pre>Lists the releases that have been created on the specified site.
 
 Args:
-  parent: string, Required. The parent for which to list files, in the format: sites/site-name (required)
-  pageSize: integer, The page size to return. Defaults to 100.
-  pageToken: string, The next_page_token from a previous request, if provided.
+  parent: string, Required. The site for which to list releases, in the format: sites/ SITE_NAME (required)
+  pageSize: integer, The maximum number of releases to return. The service may return a lower number if fewer releases exist than this maximum number. If unspecified, defaults to 100.
+  pageToken: string, A token from a previous call to `ListReleases` that tells the server where to resume listing.
   x__xgafv: string, V1 error format.
     Allowed values
       1 - v1 error format
@@ -282,24 +282,24 @@
   An object of the form:
 
     {
-  &quot;nextPageToken&quot;: &quot;A String&quot;, # If there are additional releases remaining beyond the ones in this response, then supply this token in the next [`list`](../sites.versions.files/list) call to continue with the next set of releases.
+  &quot;nextPageToken&quot;: &quot;A String&quot;, # The pagination token, if more results exist beyond the ones in this response. Include this token in your next call to `ListReleases`. Page tokens are short-lived and should not be stored.
   &quot;releases&quot;: [ # The list of hashes of files that still need to be uploaded, if any exist.
     { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time.
       &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-      &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+      &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
       &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
       &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
         &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
         &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
       },
       &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-      &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-        &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+      &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+        &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
           &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
           &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
           &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-            { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+            { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
               &quot;headers&quot;: { # Required. The additional headers to add to the response.
                 &quot;a_key&quot;: &quot;A String&quot;,
               },
@@ -310,18 +310,18 @@
             &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
           },
           &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-            { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+            { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
               &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
               &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
               &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
             },
           ],
           &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-            { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+            { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
               &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
               &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
               &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
               &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
               &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -351,12 +351,12 @@
         &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
           &quot;a_key&quot;: &quot;A String&quot;,
         },
-        &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+        &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
         &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
           &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
           &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
         },
-        &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+        &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
         &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
       },
     },
diff --git a/docs/dyn/firebasehosting_v1beta1.sites.releases.html b/docs/dyn/firebasehosting_v1beta1.sites.releases.html
index 71e159a..f05fc4d 100644
--- a/docs/dyn/firebasehosting_v1beta1.sites.releases.html
+++ b/docs/dyn/firebasehosting_v1beta1.sites.releases.html
@@ -79,7 +79,7 @@
 <p class="firstline">Close httplib2 connections.</p>
 <p class="toc_element">
   <code><a href="#create">create(parent, body=None, versionName=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Creates a new release which makes the content of the specified version actively display on the appropriate URL(s).</p>
+<p class="firstline">Creates a new release, which makes the content of the specified version actively display on the appropriate URL(s).</p>
 <p class="toc_element">
   <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Lists the releases that have been created on the specified site.</p>
@@ -94,29 +94,29 @@
 
 <div class="method">
     <code class="details" id="create">create(parent, body=None, versionName=None, x__xgafv=None)</code>
-  <pre>Creates a new release which makes the content of the specified version actively display on the appropriate URL(s).
+  <pre>Creates a new release, which makes the content of the specified version actively display on the appropriate URL(s).
 
 Args:
-  parent: string, Required. The site that the release belongs to, in the format: sites/ site-name (required)
+  parent: string, Required. The site to which the release belongs, in the format: sites/ SITE_NAME (required)
   body: object, The request body.
     The object takes the form of:
 
 { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time.
   &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
   &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
   &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
     &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
     &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
   },
   &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-  &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-    &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+  &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+    &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
       &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
       &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
       &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-        { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;headers&quot;: { # Required. The additional headers to add to the response.
             &quot;a_key&quot;: &quot;A String&quot;,
           },
@@ -127,18 +127,18 @@
         &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
       },
       &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-        { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
           &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
           &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
         },
       ],
       &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-        { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+        { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
           &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
           &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
           &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
           &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -168,17 +168,17 @@
     &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
       &quot;a_key&quot;: &quot;A String&quot;,
     },
-    &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+    &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
     &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
       &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
       &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
     },
-    &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+    &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
     &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
   },
 }
 
-  versionName: string, The unique identifier for a version, in the format: /sites/site-name /versions/versionID The site-name in this version identifier must match the site-name in the `parent` parameter. This query parameter must be empty if the `type` field in the request body is `SITE_DISABLE`.
+  versionName: string,  The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID The SITE_NAME in this version identifier must match the SITE_NAME in the `parent` parameter. This query parameter must be empty if the `type` field in the request body is `SITE_DISABLE`.
   x__xgafv: string, V1 error format.
     Allowed values
       1 - v1 error format
@@ -189,20 +189,20 @@
 
     { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time.
   &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
   &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
   &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
     &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
     &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
   },
   &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-  &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-    &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+  &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+    &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
       &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
       &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
       &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-        { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;headers&quot;: { # Required. The additional headers to add to the response.
             &quot;a_key&quot;: &quot;A String&quot;,
           },
@@ -213,18 +213,18 @@
         &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
       },
       &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-        { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
           &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
           &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
         },
       ],
       &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-        { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+        { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
           &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
           &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
           &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
           &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
           &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -254,12 +254,12 @@
     &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
       &quot;a_key&quot;: &quot;A String&quot;,
     },
-    &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+    &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
     &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
       &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
       &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
     },
-    &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+    &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
     &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
   },
 }</pre>
@@ -270,9 +270,9 @@
   <pre>Lists the releases that have been created on the specified site.
 
 Args:
-  parent: string, Required. The parent for which to list files, in the format: sites/site-name (required)
-  pageSize: integer, The page size to return. Defaults to 100.
-  pageToken: string, The next_page_token from a previous request, if provided.
+  parent: string, Required. The site for which to list releases, in the format: sites/ SITE_NAME (required)
+  pageSize: integer, The maximum number of releases to return. The service may return a lower number if fewer releases exist than this maximum number. If unspecified, defaults to 100.
+  pageToken: string, A token from a previous call to `ListReleases` that tells the server where to resume listing.
   x__xgafv: string, V1 error format.
     Allowed values
       1 - v1 error format
@@ -282,24 +282,24 @@
   An object of the form:
 
     {
-  &quot;nextPageToken&quot;: &quot;A String&quot;, # If there are additional releases remaining beyond the ones in this response, then supply this token in the next [`list`](../sites.versions.files/list) call to continue with the next set of releases.
+  &quot;nextPageToken&quot;: &quot;A String&quot;, # The pagination token, if more results exist beyond the ones in this response. Include this token in your next call to `ListReleases`. Page tokens are short-lived and should not be stored.
   &quot;releases&quot;: [ # The list of hashes of files that still need to be uploaded, if any exist.
     { # A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time.
       &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to 512 characters.
-      &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint.
+      &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).
       &quot;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
       &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the release.
         &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
         &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
       },
       &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.
-      &quot;version&quot;: { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed. # Output only. The configuration and content that was released.
-        &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+      &quot;version&quot;: { # A `Version` is a configuration and a collection of static files which determine how a site is displayed. # Output only. The configuration and content that was released.
+        &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
           &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
           &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
           &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-            { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+            { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
               &quot;headers&quot;: { # Required. The additional headers to add to the response.
                 &quot;a_key&quot;: &quot;A String&quot;,
               },
@@ -310,18 +310,18 @@
             &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
           },
           &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-            { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+            { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
               &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
               &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
               &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
             },
           ],
           &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-            { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+            { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
               &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
               &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+              &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
               &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
               &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
               &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -351,12 +351,12 @@
         &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
           &quot;a_key&quot;: &quot;A String&quot;,
         },
-        &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+        &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
         &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
           &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
           &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
         },
-        &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+        &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
         &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
       },
     },
diff --git a/docs/dyn/firebasehosting_v1beta1.sites.versions.files.html b/docs/dyn/firebasehosting_v1beta1.sites.versions.files.html
index 808c3d7..29bd5bb 100644
--- a/docs/dyn/firebasehosting_v1beta1.sites.versions.files.html
+++ b/docs/dyn/firebasehosting_v1beta1.sites.versions.files.html
@@ -94,10 +94,10 @@
   <pre>Lists the remaining files to be uploaded for the specified version.
 
 Args:
-  parent: string, Required. The parent to list files for, in the format: sites/site-name /versions/versionID (required)
-  pageSize: integer, The page size to return. Defaults to 1000.
-  pageToken: string, The next_page_token from a previous request, if provided. This will be the encoded version of a firebase.hosting.proto.metadata.ListFilesPageToken.
-  status: string, The type of files in the version that should be listed.
+  parent: string, Required. The version for which to list files, in the format: sites/ SITE_NAME/versions/VERSION_ID (required)
+  pageSize: integer, The maximum number of version files to return. The service may return a lower number if fewer version files exist than this maximum number. If unspecified, defaults to 1000.
+  pageToken: string, A token from a previous call to `ListVersionFiles` that tells the server where to resume listing.
+  status: string,  The type of files that should be listed for the specified version.
     Allowed values
       STATUS_UNSPECIFIED - The default status; should not be intentionally used.
       EXPECTED - The file has been included in the version and is expected to be uploaded in the near future.
@@ -111,14 +111,14 @@
   An object of the form:
 
     {
-  &quot;files&quot;: [ # The list path/hashes in the specified version.
+  &quot;files&quot;: [ #  The list of paths to the hashes of the files in the specified version.
     { # A static content file that is part of a version.
       &quot;hash&quot;: &quot;A String&quot;, # The SHA256 content hash of the file.
       &quot;path&quot;: &quot;A String&quot;, # The URI at which the file&#x27;s content should display.
       &quot;status&quot;: &quot;A String&quot;, # Output only. The current status of a particular file in the specified version. The value will be either `pending upload` or `uploaded`.
     },
   ],
-  &quot;nextPageToken&quot;: &quot;A String&quot;, # The pagination token, if more results exist.
+  &quot;nextPageToken&quot;: &quot;A String&quot;, # The pagination token, if more results exist beyond the ones in this response. Include this token in your next call to `ListVersionFiles`. Page tokens are short-lived and should not be stored.
 }</pre>
 </div>
 
diff --git a/docs/dyn/firebasehosting_v1beta1.sites.versions.html b/docs/dyn/firebasehosting_v1beta1.sites.versions.html
index de316bd..a280ba0 100644
--- a/docs/dyn/firebasehosting_v1beta1.sites.versions.html
+++ b/docs/dyn/firebasehosting_v1beta1.sites.versions.html
@@ -87,7 +87,7 @@
 <p class="firstline">Close httplib2 connections.</p>
 <p class="toc_element">
   <code><a href="#create">create(parent, body=None, sizeBytes=None, versionId=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Creates a new version for a site.</p>
+<p class="firstline">Creates a new version for the specified site.</p>
 <p class="toc_element">
   <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
 <p class="firstline">Deletes the specified version.</p>
@@ -99,10 +99,10 @@
 <p class="firstline">Retrieves the next page of results.</p>
 <p class="toc_element">
   <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Updates the specified metadata for a version. Note that this method will fail with `FAILED_PRECONDITION` in the event of an invalid state transition. The only valid transition for a version is currently from a `CREATED` status to a `FINALIZED` status. Use [`DeleteVersion`](../sites.versions/delete) to set the status of a version to `DELETED`.</p>
+<p class="firstline">Updates the specified metadata for the specified version. This method will fail with `FAILED_PRECONDITION` in the event of an invalid state transition. The only valid transition for a version is currently from a `CREATED` status to a `FINALIZED` status. Use [`DeleteVersion`](delete) to set the status of a version to `DELETED`.</p>
 <p class="toc_element">
   <code><a href="#populateFiles">populateFiles(parent, body=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Adds content files to a version. Each file must be under 2 GB.</p>
+<p class="firstline"> Adds content files to the specified version. Each file must be under 2 GB.</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="clone">clone(parent, body=None, x__xgafv=None)</code>
@@ -164,20 +164,20 @@
 
 <div class="method">
     <code class="details" id="create">create(parent, body=None, sizeBytes=None, versionId=None, x__xgafv=None)</code>
-  <pre>Creates a new version for a site.
+  <pre>Creates a new version for the specified site.
 
 Args:
-  parent: string, Required. The parent to create the version for, in the format: sites/ site-name (required)
+  parent: string, Required. The site in which to create the version, in the format: sites/ SITE_NAME (required)
   body: object, The request body.
     The object takes the form of:
 
-{ # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed.
-  &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+{ # A `Version` is a configuration and a collection of static files which determine how a site is displayed.
+  &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
     &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
     &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
     &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-      { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+      { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;headers&quot;: { # Required. The additional headers to add to the response.
           &quot;a_key&quot;: &quot;A String&quot;,
         },
@@ -188,18 +188,18 @@
       &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
     },
     &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-      { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+      { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
         &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
         &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
       },
     ],
     &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-      { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+      { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
         &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
         &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
         &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
         &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -229,12 +229,12 @@
   &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+  &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
   &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
     &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
     &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
   },
-  &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+  &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
   &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
 }
 
@@ -248,13 +248,13 @@
 Returns:
   An object of the form:
 
-    { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed.
-  &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+    { # A `Version` is a configuration and a collection of static files which determine how a site is displayed.
+  &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
     &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
     &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
     &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-      { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+      { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;headers&quot;: { # Required. The additional headers to add to the response.
           &quot;a_key&quot;: &quot;A String&quot;,
         },
@@ -265,18 +265,18 @@
       &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
     },
     &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-      { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+      { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
         &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
         &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
       },
     ],
     &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-      { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+      { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
         &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
         &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
         &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
         &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -306,12 +306,12 @@
   &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+  &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
   &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
     &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
     &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
   },
-  &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+  &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
   &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
 }</pre>
 </div>
@@ -321,7 +321,7 @@
   <pre>Deletes the specified version.
 
 Args:
-  name: string, Required. The name of the version to be deleted, in the format: sites/ site-name/versions/versionID (required)
+  name: string, Required. The name of the version to be deleted, in the format: sites/ SITE_NAME/versions/VERSION_ID (required)
   x__xgafv: string, V1 error format.
     Allowed values
       1 - v1 error format
@@ -354,13 +354,13 @@
     {
   &quot;nextPageToken&quot;: &quot;A String&quot;, # The pagination token, if more results exist
   &quot;versions&quot;: [ # The list of versions, if any exist.
-    { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed.
-      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+    { # A `Version` is a configuration and a collection of static files which determine how a site is displayed.
+      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
         &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
         &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
         &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-          { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;headers&quot;: { # Required. The additional headers to add to the response.
               &quot;a_key&quot;: &quot;A String&quot;,
             },
@@ -371,18 +371,18 @@
           &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
         },
         &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-          { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+          { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
           },
         ],
         &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-          { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+          { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
             &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
             &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
             &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
             &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
             &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -412,12 +412,12 @@
       &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
       &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
         &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
         &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
       },
-      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+      &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
       &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
     },
   ],
@@ -440,20 +440,20 @@
 
 <div class="method">
     <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
-  <pre>Updates the specified metadata for a version. Note that this method will fail with `FAILED_PRECONDITION` in the event of an invalid state transition. The only valid transition for a version is currently from a `CREATED` status to a `FINALIZED` status. Use [`DeleteVersion`](../sites.versions/delete) to set the status of a version to `DELETED`.
+  <pre>Updates the specified metadata for the specified version. This method will fail with `FAILED_PRECONDITION` in the event of an invalid state transition. The only valid transition for a version is currently from a `CREATED` status to a `FINALIZED` status. Use [`DeleteVersion`](delete) to set the status of a version to `DELETED`.
 
 Args:
-  name: string, The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint. (required)
+  name: string, The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create). (required)
   body: object, The request body.
     The object takes the form of:
 
-{ # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed.
-  &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+{ # A `Version` is a configuration and a collection of static files which determine how a site is displayed.
+  &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
     &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
     &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
     &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-      { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+      { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;headers&quot;: { # Required. The additional headers to add to the response.
           &quot;a_key&quot;: &quot;A String&quot;,
         },
@@ -464,18 +464,18 @@
       &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
     },
     &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-      { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+      { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
         &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
         &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
       },
     ],
     &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-      { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+      { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
         &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
         &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
         &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
         &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -505,12 +505,12 @@
   &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+  &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
   &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
     &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
     &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
   },
-  &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+  &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
   &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
 }
 
@@ -523,13 +523,13 @@
 Returns:
   An object of the form:
 
-    { # A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed.
-  &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
+    { # A `Version` is a configuration and a collection of static files which determine how a site is displayed.
+  &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
     &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
     &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
     &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-      { # A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+      { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;headers&quot;: { # Required. The additional headers to add to the response.
           &quot;a_key&quot;: &quot;A String&quot;,
         },
@@ -540,18 +540,18 @@
       &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
     },
     &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-      { # A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+      { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
         &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
         &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
       },
     ],
     &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
-      { # A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
+      { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
         &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
         &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
-        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
+        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
         &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
         &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
         &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
@@ -581,27 +581,27 @@
   &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
+  &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
   &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
     &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
     &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
   },
-  &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.
+  &quot;status&quot;: &quot;A String&quot;, # The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
   &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
 }</pre>
 </div>
 
 <div class="method">
     <code class="details" id="populateFiles">populateFiles(parent, body=None, x__xgafv=None)</code>
-  <pre>Adds content files to a version. Each file must be under 2 GB.
+  <pre> Adds content files to the specified version. Each file must be under 2 GB.
 
 Args:
-  parent: string, Required. The version to add files to, in the format: sites/site-name /versions/versionID (required)
+  parent: string, Required. The version to which to add files, in the format: sites/SITE_NAME /versions/VERSION_ID (required)
   body: object, The request body.
     The object takes the form of:
 
-{ # The request to populate a Version&#x27;s Files.
-  &quot;files&quot;: { # A set of file paths to the hashes corresponding to assets that should be added to the version. Note that a file path to an empty hash will remove the path from the version. Calculate a hash by Gzipping the file then taking the SHA256 hash of the newly compressed file.
+{
+  &quot;files&quot;: { # A set of file paths to the hashes corresponding to assets that should be added to the version. A file path to an empty hash will remove the path from the version. Calculate a hash by Gzipping the file then taking the SHA256 hash of the newly compressed file.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
 }
@@ -615,10 +615,10 @@
   An object of the form:
 
     {
-  &quot;uploadRequiredHashes&quot;: [ # The content hashes of the specified files that need to be uploaded to the specified endpoint.
+  &quot;uploadRequiredHashes&quot;: [ # The content hashes of the specified files that need to be uploaded to the specified URL.
     &quot;A String&quot;,
   ],
-  &quot;uploadUrl&quot;: &quot;A String&quot;, # The URL to which the files should be uploaded, in the format: &quot;https://upload-firebasehosting.googleapis.com/upload/sites/site-name /versions/versionID/files&quot;. Perform a multipart `POST` of the Gzipped file contents to the URL using a forward slash and the hash of the file appended to the end.
+  &quot;uploadUrl&quot;: &quot;A String&quot;, # The URL to which the files should be uploaded, in the format: &quot;https://upload-firebasehosting.googleapis.com/upload/sites/SITE_NAME /versions/VERSION_ID/files&quot; Perform a multipart `POST` of the Gzipped file contents to the URL using a forward slash and the hash of the file appended to the end.
 }</pre>
 </div>
 
diff --git a/docs/dyn/fitness_v1.users.dataSources.datasets.html b/docs/dyn/fitness_v1.users.dataSources.datasets.html
index d4ed75a..f5e9b4f 100644
--- a/docs/dyn/fitness_v1.users.dataSources.datasets.html
+++ b/docs/dyn/fitness_v1.users.dataSources.datasets.html
@@ -88,7 +88,7 @@
 <p class="firstline">Retrieves the next page of results.</p>
 <p class="toc_element">
   <code><a href="#patch">patch(userId, dataSourceId, datasetId, body=None, currentTimeMillis=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Adds data points to a dataset. The dataset need not be previously created. All points within the given dataset will be returned with subsquent calls to retrieve this dataset. Data points can belong to more than one dataset. This method does not use patch semantics.</p>
+<p class="firstline">Adds data points to a dataset. The dataset need not be previously created. All points within the given dataset will be returned with subsquent calls to retrieve this dataset. Data points can belong to more than one dataset. This method does not use patch semantics: the data points provided are merely inserted, with no existing data replaced.</p>
 <p class="toc_element">
   <code><a href="#patch_next">patch_next(previous_request, previous_response)</a></code></p>
 <p class="firstline">Retrieves the next page of results.</p>
@@ -183,12 +183,12 @@
 
 <div class="method">
     <code class="details" id="patch">patch(userId, dataSourceId, datasetId, body=None, currentTimeMillis=None, x__xgafv=None)</code>
-  <pre>Adds data points to a dataset. The dataset need not be previously created. All points within the given dataset will be returned with subsquent calls to retrieve this dataset. Data points can belong to more than one dataset. This method does not use patch semantics.
+  <pre>Adds data points to a dataset. The dataset need not be previously created. All points within the given dataset will be returned with subsquent calls to retrieve this dataset. Data points can belong to more than one dataset. This method does not use patch semantics: the data points provided are merely inserted, with no existing data replaced.
 
 Args:
   userId: string, Patch a dataset for the person identified. Use me to indicate the authenticated user. Only me is supported at this time. (required)
   dataSourceId: string, The data stream ID of the data source that created the dataset. (required)
-  datasetId: string, Dataset identifier that is a composite of the minimum data point start time and maximum data point end time represented as nanoseconds from the epoch. The ID is formatted like: &quot;startTime-endTime&quot; where startTime and endTime are 64 bit integers. (required)
+  datasetId: string, This field is not used, and can be safely omitted. (required)
   body: object, The request body.
     The object takes the form of:
 
diff --git a/docs/dyn/gmail_v1.users.messages.html b/docs/dyn/gmail_v1.users.messages.html
index 06de04d..0c60657 100644
--- a/docs/dyn/gmail_v1.users.messages.html
+++ b/docs/dyn/gmail_v1.users.messages.html
@@ -194,7 +194,7 @@
 
 Args:
   userId: string, The user&#x27;s email address. The special value `me` can be used to indicate the authenticated user. (required)
-  id: string, The ID of the message to retrieve. (required)
+  id: string, The ID of the message to retrieve. This ID is usually retrieved using `messages.list`. The ID is also contained in the result when a message is inserted (`messages.insert`) or imported (`messages.import`). (required)
   format: string, The format to return the message in.
     Allowed values
       minimal - Returns only email message ID and labels; does not return the email headers, body, or payload.
diff --git a/docs/dyn/gmail_v1.users.settings.sendAs.html b/docs/dyn/gmail_v1.users.settings.sendAs.html
index 662cac2..9deaea2 100644
--- a/docs/dyn/gmail_v1.users.settings.sendAs.html
+++ b/docs/dyn/gmail_v1.users.settings.sendAs.html
@@ -124,7 +124,7 @@
   &quot;isPrimary&quot;: True or False, # Whether this address is the primary address used to login to the account. Every Gmail account has exactly one primary address, and it cannot be deleted from the collection of send-as aliases. This field is read-only.
   &quot;replyToAddress&quot;: &quot;A String&quot;, # An optional email address that is included in a &quot;Reply-To:&quot; header for mail sent using this alias. If this is empty, Gmail will not generate a &quot;Reply-To:&quot; header.
   &quot;sendAsEmail&quot;: &quot;A String&quot;, # The email address that appears in the &quot;From:&quot; header for mail sent using this alias. This is read-only for all operations except create.
-  &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI.
+  &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI. This signature is added to new emails only.
   &quot;smtpMsa&quot;: { # Configuration for communication with an SMTP service. # An optional SMTP service that will be used as an outbound relay for mail sent using this alias. If this is empty, outbound mail will be sent directly from Gmail&#x27;s servers to the destination SMTP service. This setting only applies to custom &quot;from&quot; aliases.
     &quot;host&quot;: &quot;A String&quot;, # The hostname of the SMTP service. Required.
     &quot;password&quot;: &quot;A String&quot;, # The password that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
@@ -150,7 +150,7 @@
   &quot;isPrimary&quot;: True or False, # Whether this address is the primary address used to login to the account. Every Gmail account has exactly one primary address, and it cannot be deleted from the collection of send-as aliases. This field is read-only.
   &quot;replyToAddress&quot;: &quot;A String&quot;, # An optional email address that is included in a &quot;Reply-To:&quot; header for mail sent using this alias. If this is empty, Gmail will not generate a &quot;Reply-To:&quot; header.
   &quot;sendAsEmail&quot;: &quot;A String&quot;, # The email address that appears in the &quot;From:&quot; header for mail sent using this alias. This is read-only for all operations except create.
-  &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI.
+  &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI. This signature is added to new emails only.
   &quot;smtpMsa&quot;: { # Configuration for communication with an SMTP service. # An optional SMTP service that will be used as an outbound relay for mail sent using this alias. If this is empty, outbound mail will be sent directly from Gmail&#x27;s servers to the destination SMTP service. This setting only applies to custom &quot;from&quot; aliases.
     &quot;host&quot;: &quot;A String&quot;, # The hostname of the SMTP service. Required.
     &quot;password&quot;: &quot;A String&quot;, # The password that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
@@ -198,7 +198,7 @@
   &quot;isPrimary&quot;: True or False, # Whether this address is the primary address used to login to the account. Every Gmail account has exactly one primary address, and it cannot be deleted from the collection of send-as aliases. This field is read-only.
   &quot;replyToAddress&quot;: &quot;A String&quot;, # An optional email address that is included in a &quot;Reply-To:&quot; header for mail sent using this alias. If this is empty, Gmail will not generate a &quot;Reply-To:&quot; header.
   &quot;sendAsEmail&quot;: &quot;A String&quot;, # The email address that appears in the &quot;From:&quot; header for mail sent using this alias. This is read-only for all operations except create.
-  &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI.
+  &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI. This signature is added to new emails only.
   &quot;smtpMsa&quot;: { # Configuration for communication with an SMTP service. # An optional SMTP service that will be used as an outbound relay for mail sent using this alias. If this is empty, outbound mail will be sent directly from Gmail&#x27;s servers to the destination SMTP service. This setting only applies to custom &quot;from&quot; aliases.
     &quot;host&quot;: &quot;A String&quot;, # The hostname of the SMTP service. Required.
     &quot;password&quot;: &quot;A String&quot;, # The password that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
@@ -233,7 +233,7 @@
       &quot;isPrimary&quot;: True or False, # Whether this address is the primary address used to login to the account. Every Gmail account has exactly one primary address, and it cannot be deleted from the collection of send-as aliases. This field is read-only.
       &quot;replyToAddress&quot;: &quot;A String&quot;, # An optional email address that is included in a &quot;Reply-To:&quot; header for mail sent using this alias. If this is empty, Gmail will not generate a &quot;Reply-To:&quot; header.
       &quot;sendAsEmail&quot;: &quot;A String&quot;, # The email address that appears in the &quot;From:&quot; header for mail sent using this alias. This is read-only for all operations except create.
-      &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI.
+      &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI. This signature is added to new emails only.
       &quot;smtpMsa&quot;: { # Configuration for communication with an SMTP service. # An optional SMTP service that will be used as an outbound relay for mail sent using this alias. If this is empty, outbound mail will be sent directly from Gmail&#x27;s servers to the destination SMTP service. This setting only applies to custom &quot;from&quot; aliases.
         &quot;host&quot;: &quot;A String&quot;, # The hostname of the SMTP service. Required.
         &quot;password&quot;: &quot;A String&quot;, # The password that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
@@ -264,7 +264,7 @@
   &quot;isPrimary&quot;: True or False, # Whether this address is the primary address used to login to the account. Every Gmail account has exactly one primary address, and it cannot be deleted from the collection of send-as aliases. This field is read-only.
   &quot;replyToAddress&quot;: &quot;A String&quot;, # An optional email address that is included in a &quot;Reply-To:&quot; header for mail sent using this alias. If this is empty, Gmail will not generate a &quot;Reply-To:&quot; header.
   &quot;sendAsEmail&quot;: &quot;A String&quot;, # The email address that appears in the &quot;From:&quot; header for mail sent using this alias. This is read-only for all operations except create.
-  &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI.
+  &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI. This signature is added to new emails only.
   &quot;smtpMsa&quot;: { # Configuration for communication with an SMTP service. # An optional SMTP service that will be used as an outbound relay for mail sent using this alias. If this is empty, outbound mail will be sent directly from Gmail&#x27;s servers to the destination SMTP service. This setting only applies to custom &quot;from&quot; aliases.
     &quot;host&quot;: &quot;A String&quot;, # The hostname of the SMTP service. Required.
     &quot;password&quot;: &quot;A String&quot;, # The password that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
@@ -290,7 +290,7 @@
   &quot;isPrimary&quot;: True or False, # Whether this address is the primary address used to login to the account. Every Gmail account has exactly one primary address, and it cannot be deleted from the collection of send-as aliases. This field is read-only.
   &quot;replyToAddress&quot;: &quot;A String&quot;, # An optional email address that is included in a &quot;Reply-To:&quot; header for mail sent using this alias. If this is empty, Gmail will not generate a &quot;Reply-To:&quot; header.
   &quot;sendAsEmail&quot;: &quot;A String&quot;, # The email address that appears in the &quot;From:&quot; header for mail sent using this alias. This is read-only for all operations except create.
-  &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI.
+  &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI. This signature is added to new emails only.
   &quot;smtpMsa&quot;: { # Configuration for communication with an SMTP service. # An optional SMTP service that will be used as an outbound relay for mail sent using this alias. If this is empty, outbound mail will be sent directly from Gmail&#x27;s servers to the destination SMTP service. This setting only applies to custom &quot;from&quot; aliases.
     &quot;host&quot;: &quot;A String&quot;, # The hostname of the SMTP service. Required.
     &quot;password&quot;: &quot;A String&quot;, # The password that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
@@ -319,7 +319,7 @@
   &quot;isPrimary&quot;: True or False, # Whether this address is the primary address used to login to the account. Every Gmail account has exactly one primary address, and it cannot be deleted from the collection of send-as aliases. This field is read-only.
   &quot;replyToAddress&quot;: &quot;A String&quot;, # An optional email address that is included in a &quot;Reply-To:&quot; header for mail sent using this alias. If this is empty, Gmail will not generate a &quot;Reply-To:&quot; header.
   &quot;sendAsEmail&quot;: &quot;A String&quot;, # The email address that appears in the &quot;From:&quot; header for mail sent using this alias. This is read-only for all operations except create.
-  &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI.
+  &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI. This signature is added to new emails only.
   &quot;smtpMsa&quot;: { # Configuration for communication with an SMTP service. # An optional SMTP service that will be used as an outbound relay for mail sent using this alias. If this is empty, outbound mail will be sent directly from Gmail&#x27;s servers to the destination SMTP service. This setting only applies to custom &quot;from&quot; aliases.
     &quot;host&quot;: &quot;A String&quot;, # The hostname of the SMTP service. Required.
     &quot;password&quot;: &quot;A String&quot;, # The password that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
@@ -345,7 +345,7 @@
   &quot;isPrimary&quot;: True or False, # Whether this address is the primary address used to login to the account. Every Gmail account has exactly one primary address, and it cannot be deleted from the collection of send-as aliases. This field is read-only.
   &quot;replyToAddress&quot;: &quot;A String&quot;, # An optional email address that is included in a &quot;Reply-To:&quot; header for mail sent using this alias. If this is empty, Gmail will not generate a &quot;Reply-To:&quot; header.
   &quot;sendAsEmail&quot;: &quot;A String&quot;, # The email address that appears in the &quot;From:&quot; header for mail sent using this alias. This is read-only for all operations except create.
-  &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI.
+  &quot;signature&quot;: &quot;A String&quot;, # An optional HTML signature that is included in messages composed with this alias in the Gmail web UI. This signature is added to new emails only.
   &quot;smtpMsa&quot;: { # Configuration for communication with an SMTP service. # An optional SMTP service that will be used as an outbound relay for mail sent using this alias. If this is empty, outbound mail will be sent directly from Gmail&#x27;s servers to the destination SMTP service. This setting only applies to custom &quot;from&quot; aliases.
     &quot;host&quot;: &quot;A String&quot;, # The hostname of the SMTP service. Required.
     &quot;password&quot;: &quot;A String&quot;, # The password that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.
diff --git a/docs/dyn/groupssettings_v1.groups.html b/docs/dyn/groupssettings_v1.groups.html
index a9d2e74..7dd16d1 100644
--- a/docs/dyn/groupssettings_v1.groups.html
+++ b/docs/dyn/groupssettings_v1.groups.html
@@ -218,6 +218,7 @@
       # - ALL_MANAGERS_CAN_CONTACT
       # - ALL_MEMBERS_CAN_CONTACT
       # - ANYONE_CAN_CONTACT
+      # - ALL_OWNERS_CAN_CONTACT
   &quot;whoCanDeleteAnyPost&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can delete replies to topics. (Authors can always delete their own posts). Possible values are:
       # - ALL_MEMBERS
       # - OWNERS_AND_MANAGERS
@@ -493,6 +494,7 @@
       # - ALL_MANAGERS_CAN_CONTACT
       # - ALL_MEMBERS_CAN_CONTACT
       # - ANYONE_CAN_CONTACT
+      # - ALL_OWNERS_CAN_CONTACT
   &quot;whoCanDeleteAnyPost&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can delete replies to topics. (Authors can always delete their own posts). Possible values are:
       # - ALL_MEMBERS
       # - OWNERS_AND_MANAGERS
@@ -762,6 +764,7 @@
       # - ALL_MANAGERS_CAN_CONTACT
       # - ALL_MEMBERS_CAN_CONTACT
       # - ANYONE_CAN_CONTACT
+      # - ALL_OWNERS_CAN_CONTACT
   &quot;whoCanDeleteAnyPost&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can delete replies to topics. (Authors can always delete their own posts). Possible values are:
       # - ALL_MEMBERS
       # - OWNERS_AND_MANAGERS
@@ -1037,6 +1040,7 @@
       # - ALL_MANAGERS_CAN_CONTACT
       # - ALL_MEMBERS_CAN_CONTACT
       # - ANYONE_CAN_CONTACT
+      # - ALL_OWNERS_CAN_CONTACT
   &quot;whoCanDeleteAnyPost&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can delete replies to topics. (Authors can always delete their own posts). Possible values are:
       # - ALL_MEMBERS
       # - OWNERS_AND_MANAGERS
@@ -1306,6 +1310,7 @@
       # - ALL_MANAGERS_CAN_CONTACT
       # - ALL_MEMBERS_CAN_CONTACT
       # - ANYONE_CAN_CONTACT
+      # - ALL_OWNERS_CAN_CONTACT
   &quot;whoCanDeleteAnyPost&quot;: &quot;A String&quot;, # Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can delete replies to topics. (Authors can always delete their own posts). Possible values are:
       # - ALL_MEMBERS
       # - OWNERS_AND_MANAGERS
diff --git a/docs/dyn/homegraph_v1.devices.html b/docs/dyn/homegraph_v1.devices.html
index b10715b..15bbbcd 100644
--- a/docs/dyn/homegraph_v1.devices.html
+++ b/docs/dyn/homegraph_v1.devices.html
@@ -84,6 +84,9 @@
   <code><a href="#reportStateAndNotification">reportStateAndNotification(body=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Reports device state and optionally sends device notifications. Called by your smart home Action when the state of a third-party device changes or you need to send a notification about the device. See [Implement Report State](https://developers.google.com/assistant/smarthome/develop/report-state) for more information. This method updates the device state according to its declared [traits](https://developers.google.com/assistant/smarthome/concepts/devices-traits). Publishing a new state value outside of these traits will result in an `INVALID_ARGUMENT` error response. The third-party user's identity is passed in via the `agent_user_id` (see ReportStateAndNotificationRequest). This request must be authorized using service account credentials from your Actions console project.</p>
 <p class="toc_element">
+  <code><a href="#requestLink">requestLink(body=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Sends an account linking suggestion to users associated with any potential Cast devices detected by third-party devices. This request must be authorized using service account credentials from your Actions console project.</p>
+<p class="toc_element">
   <code><a href="#requestSync">requestSync(body=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Requests Google to send an `action.devices.SYNC` [intent](https://developers.google.com/assistant/smarthome/reference/intent/sync) to your smart home Action to update device metadata for the given user. The third-party user's identity is passed via the `agent_user_id` (see RequestSyncDevicesRequest). This request must be authorized using service account credentials from your Actions console project.</p>
 <p class="toc_element">
@@ -178,6 +181,36 @@
 </div>
 
 <div class="method">
+    <code class="details" id="requestLink">requestLink(body=None, x__xgafv=None)</code>
+  <pre>Sends an account linking suggestion to users associated with any potential Cast devices detected by third-party devices. This request must be authorized using service account credentials from your Actions console project.
+
+Args:
+  body: object, The request body.
+    The object takes the form of:
+
+{ # Request type for the [`RequestLink`](#google.home.graph.v1.HomeGraphApiService.RequestLink) call.
+  &quot;payload&quot;: { # Payload containing potential devices detected and when they were detected. # Required. ID(s) and detection time of potential Cast devices.
+    &quot;detectionTime&quot;: &quot;A String&quot;, # Required. Time at which devices represented in `potential_cast_device_ids` were detected.
+    &quot;potentialCastDeviceIds&quot;: [ # Required. List of device IDs detected that may potentially be for Cast devices.
+      &quot;A String&quot;,
+    ],
+  },
+  &quot;requestId&quot;: &quot;A String&quot;, # Required. Request ID used for debugging.
+}
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
+}</pre>
+</div>
+
+<div class="method">
     <code class="details" id="requestSync">requestSync(body=None, x__xgafv=None)</code>
   <pre>Requests Google to send an `action.devices.SYNC` [intent](https://developers.google.com/assistant/smarthome/reference/intent/sync) to your smart home Action to update device metadata for the given user. The third-party user&#x27;s identity is passed via the `agent_user_id` (see RequestSyncDevicesRequest). This request must be authorized using service account credentials from your Actions console project.
 
diff --git a/docs/dyn/logging_v2.billingAccounts.buckets.html b/docs/dyn/logging_v2.billingAccounts.buckets.html
index e92fd3d..e567d7e 100644
--- a/docs/dyn/logging_v2.billingAccounts.buckets.html
+++ b/docs/dyn/logging_v2.billingAccounts.buckets.html
@@ -110,7 +110,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }</pre>
diff --git a/docs/dyn/logging_v2.billingAccounts.locations.buckets.html b/docs/dyn/logging_v2.billingAccounts.locations.buckets.html
index 8832bb7..1586972 100644
--- a/docs/dyn/logging_v2.billingAccounts.locations.buckets.html
+++ b/docs/dyn/logging_v2.billingAccounts.locations.buckets.html
@@ -120,7 +120,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }
@@ -139,7 +139,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }</pre>
@@ -186,7 +186,7 @@
       &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
       &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
       &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
       &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
       &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
     },
@@ -223,7 +223,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }
@@ -242,7 +242,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }</pre>
diff --git a/docs/dyn/logging_v2.billingAccounts.logs.html b/docs/dyn/logging_v2.billingAccounts.logs.html
index 900f3d5..7e1dea5 100644
--- a/docs/dyn/logging_v2.billingAccounts.logs.html
+++ b/docs/dyn/logging_v2.billingAccounts.logs.html
@@ -79,7 +79,7 @@
 <p class="firstline">Close httplib2 connections.</p>
 <p class="toc_element">
   <code><a href="#delete">delete(logName, x__xgafv=None)</a></code></p>
-<p class="firstline">Deletes all the log entries in a log. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.</p>
+<p class="firstline">Deletes all the log entries in a log for the _Default Log Bucket. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.</p>
 <p class="toc_element">
   <code><a href="#list">list(parent, pageSize=None, pageToken=None, resourceNames=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.</p>
@@ -94,7 +94,7 @@
 
 <div class="method">
     <code class="details" id="delete">delete(logName, x__xgafv=None)</code>
-  <pre>Deletes all the log entries in a log. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.
+  <pre>Deletes all the log entries in a log for the _Default Log Bucket. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.
 
 Args:
   logName: string, Required. The resource name of the log to delete: &quot;projects/[PROJECT_ID]/logs/[LOG_ID]&quot; &quot;organizations/[ORGANIZATION_ID]/logs/[LOG_ID]&quot; &quot;billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]&quot; &quot;folders/[FOLDER_ID]/logs/[LOG_ID]&quot; [LOG_ID] must be URL-encoded. For example, &quot;projects/my-project-id/logs/syslog&quot;, &quot;organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity&quot;. For more information about log names, see LogEntry. (required)
diff --git a/docs/dyn/logging_v2.billingAccounts.sinks.html b/docs/dyn/logging_v2.billingAccounts.sinks.html
index 1c84e4f..3897a68 100644
--- a/docs/dyn/logging_v2.billingAccounts.sinks.html
+++ b/docs/dyn/logging_v2.billingAccounts.sinks.html
@@ -113,7 +113,7 @@
   body: object, The request body.
     The object takes the form of:
 
-{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -149,7 +149,7 @@
 Returns:
   An object of the form:
 
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -209,7 +209,7 @@
 Returns:
   An object of the form:
 
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -256,7 +256,7 @@
     { # Result returned from ListSinks.
   &quot;nextPageToken&quot;: &quot;A String&quot;, # If there might be more results than appear in this response, then nextPageToken is included. To get the next set of results, call the same method again using the value of nextPageToken as pageToken.
   &quot;sinks&quot;: [ # A list of sinks.
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
       &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
         &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
         &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -309,7 +309,7 @@
   body: object, The request body.
     The object takes the form of:
 
-{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -346,7 +346,7 @@
 Returns:
   An object of the form:
 
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -383,7 +383,7 @@
   body: object, The request body.
     The object takes the form of:
 
-{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -420,7 +420,7 @@
 Returns:
   An object of the form:
 
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
diff --git a/docs/dyn/logging_v2.entries.html b/docs/dyn/logging_v2.entries.html
index 0f27523..2f24773 100644
--- a/docs/dyn/logging_v2.entries.html
+++ b/docs/dyn/logging_v2.entries.html
@@ -148,11 +148,11 @@
       &quot;jsonPayload&quot;: { # The log entry payload, represented as a structure that is expressed as a JSON object.
         &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
       },
-      &quot;labels&quot;: { # Optional. A set of user-defined (key, value) data that provides additional information about the log entry.
+      &quot;labels&quot;: { # Optional. A set of user-defined (key, value) data that provides additional information about the log entry.Cloud Logging truncates label keys that exceed 512 B and label values that exceed 64 KB upon their associated log entry being written. The truncation is indicated by an ellipsis at the end of the character string.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
       &quot;logName&quot;: &quot;A String&quot;, # Required. The resource name of the log to which this log entry belongs: &quot;projects/[PROJECT_ID]/logs/[LOG_ID]&quot; &quot;organizations/[ORGANIZATION_ID]/logs/[LOG_ID]&quot; &quot;billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]&quot; &quot;folders/[FOLDER_ID]/logs/[LOG_ID]&quot; A project number may be used in place of PROJECT_ID. The project number is translated to its corresponding PROJECT_ID internally and the log_name field will contain PROJECT_ID in queries and exports.[LOG_ID] must be URL-encoded within log_name. Example: &quot;organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity&quot;. [LOG_ID] must be less than 512 characters long and can only include the following characters: upper and lower case alphanumeric characters, forward-slash, underscore, hyphen, and period.For backward compatibility, if log_name begins with a forward-slash, such as /projects/..., then the log entry is ingested as usual but the forward-slash is removed. Listing the log entry will not show the leading slash and filtering for a log name with a leading slash will never return any results.
-      &quot;metadata&quot;: { # Auxiliary metadata for a MonitoredResource object. MonitoredResource objects contain the minimum set of information to uniquely identify a monitored resource instance. There is some other useful auxiliary metadata. Monitoring and Logging use an ingestion pipeline to extract metadata for cloud resources of all types, and store the metadata in this message. # Output only. Deprecated. Additional metadata about the monitored resource.Only k8s_container, k8s_pod, and k8s_node MonitoredResources have this field populated for GKE versions older than 1.12.6. For GKE versions 1.12.6 and above, the metadata field has been deprecated. The Kubernetes pod labels that used to be in metadata.userLabels will now be present in the labels field with a key prefix of k8s-pod/. The system labels that were present in the metadata.systemLabels field will no longer be available in the LogEntry.
+      &quot;metadata&quot;: { # Auxiliary metadata for a MonitoredResource object. MonitoredResource objects contain the minimum set of information to uniquely identify a monitored resource instance. There is some other useful auxiliary metadata. Monitoring and Logging use an ingestion pipeline to extract metadata for cloud resources of all types, and store the metadata in this message. # Output only. Deprecated. Additional metadata about the monitored resource.Only k8s_container, k8s_pod, and k8s_node MonitoredResources have this field populated for GKE versions older than 1.12.6. For GKE versions 1.12.6 and above, the metadata field has been deprecated. The Kubernetes pod labels that used to be in metadata.userLabels will now be present in the labels field with a key prefix of k8s-pod/. The system labels that were present in the metadata.systemLabels field will no longer be available in the log entry.
         &quot;systemLabels&quot;: { # Output only. Values for predefined system metadata labels. System labels are a kind of metadata extracted by Google, including &quot;machine_image&quot;, &quot;vpc&quot;, &quot;subnet_id&quot;, &quot;security_group&quot;, &quot;name&quot;, etc. System label values can be only strings, Boolean values, or a list of strings. For example: { &quot;name&quot;: &quot;my-test-instance&quot;, &quot;security_group&quot;: [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;], &quot;spot_instance&quot;: false }
           &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
         },
@@ -255,11 +255,11 @@
       &quot;jsonPayload&quot;: { # The log entry payload, represented as a structure that is expressed as a JSON object.
         &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
       },
-      &quot;labels&quot;: { # Optional. A set of user-defined (key, value) data that provides additional information about the log entry.
+      &quot;labels&quot;: { # Optional. A set of user-defined (key, value) data that provides additional information about the log entry.Cloud Logging truncates label keys that exceed 512 B and label values that exceed 64 KB upon their associated log entry being written. The truncation is indicated by an ellipsis at the end of the character string.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
       &quot;logName&quot;: &quot;A String&quot;, # Required. The resource name of the log to which this log entry belongs: &quot;projects/[PROJECT_ID]/logs/[LOG_ID]&quot; &quot;organizations/[ORGANIZATION_ID]/logs/[LOG_ID]&quot; &quot;billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]&quot; &quot;folders/[FOLDER_ID]/logs/[LOG_ID]&quot; A project number may be used in place of PROJECT_ID. The project number is translated to its corresponding PROJECT_ID internally and the log_name field will contain PROJECT_ID in queries and exports.[LOG_ID] must be URL-encoded within log_name. Example: &quot;organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity&quot;. [LOG_ID] must be less than 512 characters long and can only include the following characters: upper and lower case alphanumeric characters, forward-slash, underscore, hyphen, and period.For backward compatibility, if log_name begins with a forward-slash, such as /projects/..., then the log entry is ingested as usual but the forward-slash is removed. Listing the log entry will not show the leading slash and filtering for a log name with a leading slash will never return any results.
-      &quot;metadata&quot;: { # Auxiliary metadata for a MonitoredResource object. MonitoredResource objects contain the minimum set of information to uniquely identify a monitored resource instance. There is some other useful auxiliary metadata. Monitoring and Logging use an ingestion pipeline to extract metadata for cloud resources of all types, and store the metadata in this message. # Output only. Deprecated. Additional metadata about the monitored resource.Only k8s_container, k8s_pod, and k8s_node MonitoredResources have this field populated for GKE versions older than 1.12.6. For GKE versions 1.12.6 and above, the metadata field has been deprecated. The Kubernetes pod labels that used to be in metadata.userLabels will now be present in the labels field with a key prefix of k8s-pod/. The system labels that were present in the metadata.systemLabels field will no longer be available in the LogEntry.
+      &quot;metadata&quot;: { # Auxiliary metadata for a MonitoredResource object. MonitoredResource objects contain the minimum set of information to uniquely identify a monitored resource instance. There is some other useful auxiliary metadata. Monitoring and Logging use an ingestion pipeline to extract metadata for cloud resources of all types, and store the metadata in this message. # Output only. Deprecated. Additional metadata about the monitored resource.Only k8s_container, k8s_pod, and k8s_node MonitoredResources have this field populated for GKE versions older than 1.12.6. For GKE versions 1.12.6 and above, the metadata field has been deprecated. The Kubernetes pod labels that used to be in metadata.userLabels will now be present in the labels field with a key prefix of k8s-pod/. The system labels that were present in the metadata.systemLabels field will no longer be available in the log entry.
         &quot;systemLabels&quot;: { # Output only. Values for predefined system metadata labels. System labels are a kind of metadata extracted by Google, including &quot;machine_image&quot;, &quot;vpc&quot;, &quot;subnet_id&quot;, &quot;security_group&quot;, &quot;name&quot;, etc. System label values can be only strings, Boolean values, or a list of strings. For example: { &quot;name&quot;: &quot;my-test-instance&quot;, &quot;security_group&quot;: [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;], &quot;spot_instance&quot;: false }
           &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
         },
@@ -338,11 +338,11 @@
       &quot;jsonPayload&quot;: { # The log entry payload, represented as a structure that is expressed as a JSON object.
         &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
       },
-      &quot;labels&quot;: { # Optional. A set of user-defined (key, value) data that provides additional information about the log entry.
+      &quot;labels&quot;: { # Optional. A set of user-defined (key, value) data that provides additional information about the log entry.Cloud Logging truncates label keys that exceed 512 B and label values that exceed 64 KB upon their associated log entry being written. The truncation is indicated by an ellipsis at the end of the character string.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
       &quot;logName&quot;: &quot;A String&quot;, # Required. The resource name of the log to which this log entry belongs: &quot;projects/[PROJECT_ID]/logs/[LOG_ID]&quot; &quot;organizations/[ORGANIZATION_ID]/logs/[LOG_ID]&quot; &quot;billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]&quot; &quot;folders/[FOLDER_ID]/logs/[LOG_ID]&quot; A project number may be used in place of PROJECT_ID. The project number is translated to its corresponding PROJECT_ID internally and the log_name field will contain PROJECT_ID in queries and exports.[LOG_ID] must be URL-encoded within log_name. Example: &quot;organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity&quot;. [LOG_ID] must be less than 512 characters long and can only include the following characters: upper and lower case alphanumeric characters, forward-slash, underscore, hyphen, and period.For backward compatibility, if log_name begins with a forward-slash, such as /projects/..., then the log entry is ingested as usual but the forward-slash is removed. Listing the log entry will not show the leading slash and filtering for a log name with a leading slash will never return any results.
-      &quot;metadata&quot;: { # Auxiliary metadata for a MonitoredResource object. MonitoredResource objects contain the minimum set of information to uniquely identify a monitored resource instance. There is some other useful auxiliary metadata. Monitoring and Logging use an ingestion pipeline to extract metadata for cloud resources of all types, and store the metadata in this message. # Output only. Deprecated. Additional metadata about the monitored resource.Only k8s_container, k8s_pod, and k8s_node MonitoredResources have this field populated for GKE versions older than 1.12.6. For GKE versions 1.12.6 and above, the metadata field has been deprecated. The Kubernetes pod labels that used to be in metadata.userLabels will now be present in the labels field with a key prefix of k8s-pod/. The system labels that were present in the metadata.systemLabels field will no longer be available in the LogEntry.
+      &quot;metadata&quot;: { # Auxiliary metadata for a MonitoredResource object. MonitoredResource objects contain the minimum set of information to uniquely identify a monitored resource instance. There is some other useful auxiliary metadata. Monitoring and Logging use an ingestion pipeline to extract metadata for cloud resources of all types, and store the metadata in this message. # Output only. Deprecated. Additional metadata about the monitored resource.Only k8s_container, k8s_pod, and k8s_node MonitoredResources have this field populated for GKE versions older than 1.12.6. For GKE versions 1.12.6 and above, the metadata field has been deprecated. The Kubernetes pod labels that used to be in metadata.userLabels will now be present in the labels field with a key prefix of k8s-pod/. The system labels that were present in the metadata.systemLabels field will no longer be available in the log entry.
         &quot;systemLabels&quot;: { # Output only. Values for predefined system metadata labels. System labels are a kind of metadata extracted by Google, including &quot;machine_image&quot;, &quot;vpc&quot;, &quot;subnet_id&quot;, &quot;security_group&quot;, &quot;name&quot;, etc. System label values can be only strings, Boolean values, or a list of strings. For example: { &quot;name&quot;: &quot;my-test-instance&quot;, &quot;security_group&quot;: [&quot;a&quot;, &quot;b&quot;, &quot;c&quot;], &quot;spot_instance&quot;: false }
           &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
         },
diff --git a/docs/dyn/logging_v2.folders.locations.buckets.html b/docs/dyn/logging_v2.folders.locations.buckets.html
index 953a284..f9cfe57 100644
--- a/docs/dyn/logging_v2.folders.locations.buckets.html
+++ b/docs/dyn/logging_v2.folders.locations.buckets.html
@@ -123,7 +123,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }
@@ -142,7 +142,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }</pre>
@@ -185,7 +185,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }</pre>
@@ -214,7 +214,7 @@
       &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
       &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
       &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
       &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
       &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
     },
@@ -251,7 +251,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }
@@ -270,7 +270,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }</pre>
diff --git a/docs/dyn/logging_v2.folders.logs.html b/docs/dyn/logging_v2.folders.logs.html
index 870a383..fc6357f 100644
--- a/docs/dyn/logging_v2.folders.logs.html
+++ b/docs/dyn/logging_v2.folders.logs.html
@@ -79,7 +79,7 @@
 <p class="firstline">Close httplib2 connections.</p>
 <p class="toc_element">
   <code><a href="#delete">delete(logName, x__xgafv=None)</a></code></p>
-<p class="firstline">Deletes all the log entries in a log. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.</p>
+<p class="firstline">Deletes all the log entries in a log for the _Default Log Bucket. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.</p>
 <p class="toc_element">
   <code><a href="#list">list(parent, pageSize=None, pageToken=None, resourceNames=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.</p>
@@ -94,7 +94,7 @@
 
 <div class="method">
     <code class="details" id="delete">delete(logName, x__xgafv=None)</code>
-  <pre>Deletes all the log entries in a log. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.
+  <pre>Deletes all the log entries in a log for the _Default Log Bucket. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.
 
 Args:
   logName: string, Required. The resource name of the log to delete: &quot;projects/[PROJECT_ID]/logs/[LOG_ID]&quot; &quot;organizations/[ORGANIZATION_ID]/logs/[LOG_ID]&quot; &quot;billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]&quot; &quot;folders/[FOLDER_ID]/logs/[LOG_ID]&quot; [LOG_ID] must be URL-encoded. For example, &quot;projects/my-project-id/logs/syslog&quot;, &quot;organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity&quot;. For more information about log names, see LogEntry. (required)
diff --git a/docs/dyn/logging_v2.folders.sinks.html b/docs/dyn/logging_v2.folders.sinks.html
index 8f8923c..2de3204 100644
--- a/docs/dyn/logging_v2.folders.sinks.html
+++ b/docs/dyn/logging_v2.folders.sinks.html
@@ -113,7 +113,7 @@
   body: object, The request body.
     The object takes the form of:
 
-{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -149,7 +149,7 @@
 Returns:
   An object of the form:
 
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -209,7 +209,7 @@
 Returns:
   An object of the form:
 
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -256,7 +256,7 @@
     { # Result returned from ListSinks.
   &quot;nextPageToken&quot;: &quot;A String&quot;, # If there might be more results than appear in this response, then nextPageToken is included. To get the next set of results, call the same method again using the value of nextPageToken as pageToken.
   &quot;sinks&quot;: [ # A list of sinks.
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
       &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
         &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
         &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -309,7 +309,7 @@
   body: object, The request body.
     The object takes the form of:
 
-{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -346,7 +346,7 @@
 Returns:
   An object of the form:
 
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -383,7 +383,7 @@
   body: object, The request body.
     The object takes the form of:
 
-{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -420,7 +420,7 @@
 Returns:
   An object of the form:
 
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
diff --git a/docs/dyn/logging_v2.locations.buckets.html b/docs/dyn/logging_v2.locations.buckets.html
index 0c0d592..99d3134 100644
--- a/docs/dyn/logging_v2.locations.buckets.html
+++ b/docs/dyn/logging_v2.locations.buckets.html
@@ -123,7 +123,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }
@@ -142,7 +142,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }</pre>
@@ -185,7 +185,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }</pre>
@@ -214,7 +214,7 @@
       &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
       &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
       &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
       &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
       &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
     },
@@ -251,7 +251,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }
@@ -270,7 +270,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }</pre>
diff --git a/docs/dyn/logging_v2.logs.html b/docs/dyn/logging_v2.logs.html
index b399655..12b10dc 100644
--- a/docs/dyn/logging_v2.logs.html
+++ b/docs/dyn/logging_v2.logs.html
@@ -79,7 +79,7 @@
 <p class="firstline">Close httplib2 connections.</p>
 <p class="toc_element">
   <code><a href="#delete">delete(logName, x__xgafv=None)</a></code></p>
-<p class="firstline">Deletes all the log entries in a log. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.</p>
+<p class="firstline">Deletes all the log entries in a log for the _Default Log Bucket. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.</p>
 <p class="toc_element">
   <code><a href="#list">list(parent, pageSize=None, pageToken=None, resourceNames=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.</p>
@@ -94,7 +94,7 @@
 
 <div class="method">
     <code class="details" id="delete">delete(logName, x__xgafv=None)</code>
-  <pre>Deletes all the log entries in a log. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.
+  <pre>Deletes all the log entries in a log for the _Default Log Bucket. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.
 
 Args:
   logName: string, Required. The resource name of the log to delete: &quot;projects/[PROJECT_ID]/logs/[LOG_ID]&quot; &quot;organizations/[ORGANIZATION_ID]/logs/[LOG_ID]&quot; &quot;billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]&quot; &quot;folders/[FOLDER_ID]/logs/[LOG_ID]&quot; [LOG_ID] must be URL-encoded. For example, &quot;projects/my-project-id/logs/syslog&quot;, &quot;organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity&quot;. For more information about log names, see LogEntry. (required)
diff --git a/docs/dyn/logging_v2.organizations.locations.buckets.html b/docs/dyn/logging_v2.organizations.locations.buckets.html
index e0bc4db..a46e18c 100644
--- a/docs/dyn/logging_v2.organizations.locations.buckets.html
+++ b/docs/dyn/logging_v2.organizations.locations.buckets.html
@@ -123,7 +123,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }
@@ -142,7 +142,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }</pre>
@@ -185,7 +185,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }</pre>
@@ -214,7 +214,7 @@
       &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
       &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
       &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
       &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
       &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
     },
@@ -251,7 +251,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }
@@ -270,7 +270,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }</pre>
diff --git a/docs/dyn/logging_v2.organizations.logs.html b/docs/dyn/logging_v2.organizations.logs.html
index b91be76..a74cd73 100644
--- a/docs/dyn/logging_v2.organizations.logs.html
+++ b/docs/dyn/logging_v2.organizations.logs.html
@@ -79,7 +79,7 @@
 <p class="firstline">Close httplib2 connections.</p>
 <p class="toc_element">
   <code><a href="#delete">delete(logName, x__xgafv=None)</a></code></p>
-<p class="firstline">Deletes all the log entries in a log. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.</p>
+<p class="firstline">Deletes all the log entries in a log for the _Default Log Bucket. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.</p>
 <p class="toc_element">
   <code><a href="#list">list(parent, pageSize=None, pageToken=None, resourceNames=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.</p>
@@ -94,7 +94,7 @@
 
 <div class="method">
     <code class="details" id="delete">delete(logName, x__xgafv=None)</code>
-  <pre>Deletes all the log entries in a log. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.
+  <pre>Deletes all the log entries in a log for the _Default Log Bucket. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.
 
 Args:
   logName: string, Required. The resource name of the log to delete: &quot;projects/[PROJECT_ID]/logs/[LOG_ID]&quot; &quot;organizations/[ORGANIZATION_ID]/logs/[LOG_ID]&quot; &quot;billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]&quot; &quot;folders/[FOLDER_ID]/logs/[LOG_ID]&quot; [LOG_ID] must be URL-encoded. For example, &quot;projects/my-project-id/logs/syslog&quot;, &quot;organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity&quot;. For more information about log names, see LogEntry. (required)
diff --git a/docs/dyn/logging_v2.organizations.sinks.html b/docs/dyn/logging_v2.organizations.sinks.html
index b87e0a3..d232742 100644
--- a/docs/dyn/logging_v2.organizations.sinks.html
+++ b/docs/dyn/logging_v2.organizations.sinks.html
@@ -113,7 +113,7 @@
   body: object, The request body.
     The object takes the form of:
 
-{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -149,7 +149,7 @@
 Returns:
   An object of the form:
 
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -209,7 +209,7 @@
 Returns:
   An object of the form:
 
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -256,7 +256,7 @@
     { # Result returned from ListSinks.
   &quot;nextPageToken&quot;: &quot;A String&quot;, # If there might be more results than appear in this response, then nextPageToken is included. To get the next set of results, call the same method again using the value of nextPageToken as pageToken.
   &quot;sinks&quot;: [ # A list of sinks.
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
       &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
         &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
         &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -309,7 +309,7 @@
   body: object, The request body.
     The object takes the form of:
 
-{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -346,7 +346,7 @@
 Returns:
   An object of the form:
 
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -383,7 +383,7 @@
   body: object, The request body.
     The object takes the form of:
 
-{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -420,7 +420,7 @@
 Returns:
   An object of the form:
 
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
diff --git a/docs/dyn/logging_v2.projects.locations.buckets.html b/docs/dyn/logging_v2.projects.locations.buckets.html
index 5e7ea0e..88b4758 100644
--- a/docs/dyn/logging_v2.projects.locations.buckets.html
+++ b/docs/dyn/logging_v2.projects.locations.buckets.html
@@ -123,7 +123,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }
@@ -142,7 +142,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }</pre>
@@ -185,7 +185,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }</pre>
@@ -214,7 +214,7 @@
       &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
       &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
       &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
       &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
       &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
     },
@@ -251,7 +251,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }
@@ -270,7 +270,7 @@
   &quot;description&quot;: &quot;A String&quot;, # Describes this bucket.
   &quot;lifecycleState&quot;: &quot;A String&quot;, # Output only. The bucket lifecycle state.
   &quot;locked&quot;: True or False, # Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.
-  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: &quot;global&quot;For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
+  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the bucket. For example: &quot;projects/my-project-id/locations/my-location/buckets/my-bucket-id&quot; The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.
   &quot;retentionDays&quot;: 42, # Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.
   &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the bucket.
 }</pre>
diff --git a/docs/dyn/logging_v2.projects.logs.html b/docs/dyn/logging_v2.projects.logs.html
index f76704e..e67ddac 100644
--- a/docs/dyn/logging_v2.projects.logs.html
+++ b/docs/dyn/logging_v2.projects.logs.html
@@ -79,7 +79,7 @@
 <p class="firstline">Close httplib2 connections.</p>
 <p class="toc_element">
   <code><a href="#delete">delete(logName, x__xgafv=None)</a></code></p>
-<p class="firstline">Deletes all the log entries in a log. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.</p>
+<p class="firstline">Deletes all the log entries in a log for the _Default Log Bucket. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.</p>
 <p class="toc_element">
   <code><a href="#list">list(parent, pageSize=None, pageToken=None, resourceNames=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.</p>
@@ -94,7 +94,7 @@
 
 <div class="method">
     <code class="details" id="delete">delete(logName, x__xgafv=None)</code>
-  <pre>Deletes all the log entries in a log. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.
+  <pre>Deletes all the log entries in a log for the _Default Log Bucket. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.
 
 Args:
   logName: string, Required. The resource name of the log to delete: &quot;projects/[PROJECT_ID]/logs/[LOG_ID]&quot; &quot;organizations/[ORGANIZATION_ID]/logs/[LOG_ID]&quot; &quot;billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]&quot; &quot;folders/[FOLDER_ID]/logs/[LOG_ID]&quot; [LOG_ID] must be URL-encoded. For example, &quot;projects/my-project-id/logs/syslog&quot;, &quot;organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity&quot;. For more information about log names, see LogEntry. (required)
diff --git a/docs/dyn/logging_v2.projects.metrics.html b/docs/dyn/logging_v2.projects.metrics.html
index f93f14c..d8e7c08 100644
--- a/docs/dyn/logging_v2.projects.metrics.html
+++ b/docs/dyn/logging_v2.projects.metrics.html
@@ -156,7 +156,7 @@
     ],
     &quot;name&quot;: &quot;A String&quot;, # The resource name of the metric descriptor.
     &quot;type&quot;: &quot;A String&quot;, # The metric type, including its DNS name prefix. The type is not URL-encoded. All user-defined metric types have the DNS name custom.googleapis.com or external.googleapis.com. Metric types should use a natural hierarchical grouping. For example: &quot;custom.googleapis.com/invoice/paid/amount&quot; &quot;external.googleapis.com/prometheus/up&quot; &quot;appengine.googleapis.com/http/server/response_latencies&quot;
-    &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the value_type is INT64, DOUBLE, or DISTRIBUTION. The unit defines the representation of the stored metric values.Different systems may scale the values to be more easily displayed (so a value of 0.02KBy might be displayed as 20By, and a value of 3523KBy might be displayed as 3.5MBy). However, if the unit is KBy, then the value of the metric is always in thousands of bytes, no matter how it may be displayed..If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an INT64 CUMULATIVE metric whose unit is s{CPU} (or equivalently 1s{CPU} or just s). If the job uses 12,005 CPU-seconds, then the value is written as 12005.Alternatively, if you want a custom metric to record data in a more granular way, you can create a DOUBLE CUMULATIVE metric whose unit is ks{CPU}, and then write the value 12.005 (which is 12005/1000), or use Kis{CPU} and write 11.723 (which is 12005/1024).The supported units are a subset of The Unified Code for Units of Measure (http://unitsofmeasure.org/ucum.html) standard:Basic units (UNIT) bit bit By byte s second min minute h hour d day 1 dimensionlessPrefixes (PREFIX) k kilo (10^3) M mega (10^6) G giga (10^9) T tera (10^12) P peta (10^15) E exa (10^18) Z zetta (10^21) Y yotta (10^24) m milli (10^-3) u micro (10^-6) n nano (10^-9) p pico (10^-12) f femto (10^-15) a atto (10^-18) z zepto (10^-21) y yocto (10^-24) Ki kibi (2^10) Mi mebi (2^20) Gi gibi (2^30) Ti tebi (2^40) Pi pebi (2^50)GrammarThe grammar also includes these connectors: / division or ratio (as an infix operator). For examples, kBy/{email} or MiBy/10ms (although you should almost never have /s in a metric unit; rates should always be computed at query time from the underlying cumulative or delta value). . multiplication or composition (as an infix operator). For examples, GBy.d or k{watt}.h.The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: Annotation is just a comment if it follows a UNIT. If the annotation is used alone, then the unit is equivalent to 1. For examples, {request}/s == 1/s, By{transmitted}/s == By/s. NAME is a sequence of non-blank printable ASCII characters not containing { or }. 1 represents a unitary dimensionless unit (https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in 1/s. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as 1/d or {new-users}/d (and a metric value 5 would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as 1000/d or k1/d or k{page_views}/d (and a metric value of 5.3 would mean &quot;5300 page views per day&quot;). % represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value 3 means &quot;3 percent&quot;). 10^2.% indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value 0.03 means &quot;3 percent&quot;).
+    &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the value_type is INT64, DOUBLE, or DISTRIBUTION. The unit defines the representation of the stored metric values.Different systems might scale the values to be more easily displayed (so a value of 0.02kBy might be displayed as 20By, and a value of 3523kBy might be displayed as 3.5MBy). However, if the unit is kBy, then the value of the metric is always in thousands of bytes, no matter how it might be displayed.If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an INT64 CUMULATIVE metric whose unit is s{CPU} (or equivalently 1s{CPU} or just s). If the job uses 12,005 CPU-seconds, then the value is written as 12005.Alternatively, if you want a custom metric to record data in a more granular way, you can create a DOUBLE CUMULATIVE metric whose unit is ks{CPU}, and then write the value 12.005 (which is 12005/1000), or use Kis{CPU} and write 11.723 (which is 12005/1024).The supported units are a subset of The Unified Code for Units of Measure (https://unitsofmeasure.org/ucum.html) standard:Basic units (UNIT) bit bit By byte s second min minute h hour d day 1 dimensionlessPrefixes (PREFIX) k kilo (10^3) M mega (10^6) G giga (10^9) T tera (10^12) P peta (10^15) E exa (10^18) Z zetta (10^21) Y yotta (10^24) m milli (10^-3) u micro (10^-6) n nano (10^-9) p pico (10^-12) f femto (10^-15) a atto (10^-18) z zepto (10^-21) y yocto (10^-24) Ki kibi (2^10) Mi mebi (2^20) Gi gibi (2^30) Ti tebi (2^40) Pi pebi (2^50)GrammarThe grammar also includes these connectors: / division or ratio (as an infix operator). For examples, kBy/{email} or MiBy/10ms (although you should almost never have /s in a metric unit; rates should always be computed at query time from the underlying cumulative or delta value). . multiplication or composition (as an infix operator). For examples, GBy.d or k{watt}.h.The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: Annotation is just a comment if it follows a UNIT. If the annotation is used alone, then the unit is equivalent to 1. For examples, {request}/s == 1/s, By{transmitted}/s == By/s. NAME is a sequence of non-blank printable ASCII characters not containing { or }. 1 represents a unitary dimensionless unit (https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in 1/s. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as 1/d or {new-users}/d (and a metric value 5 would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as 1000/d or k1/d or k{page_views}/d (and a metric value of 5.3 would mean &quot;5300 page views per day&quot;). % represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value 3 means &quot;3 percent&quot;). 10^2.% indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value 0.03 means &quot;3 percent&quot;).
     &quot;valueType&quot;: &quot;A String&quot;, # Whether the measurement is an integer, a floating-point number, etc. Some combinations of metric_kind and value_type might not be supported.
   },
   &quot;name&quot;: &quot;A String&quot;, # Required. The client-assigned metric identifier. Examples: &quot;error_count&quot;, &quot;nginx/requests&quot;.Metric identifiers are limited to 100 characters and can include only the following characters: A-Z, a-z, 0-9, and the special characters _-.,+!*&#x27;,()%/. The forward-slash character (/) denotes a hierarchy of name pieces, and it cannot be the first character of the name.The metric identifier in this field must not be URL-encoded (https://en.wikipedia.org/wiki/Percent-encoding). However, when the metric identifier appears as the [METRIC_ID] part of a metric_name API parameter, then the metric identifier must be URL-encoded. Example: &quot;projects/my-project/metrics/nginx%2Frequests&quot;.
@@ -219,7 +219,7 @@
     ],
     &quot;name&quot;: &quot;A String&quot;, # The resource name of the metric descriptor.
     &quot;type&quot;: &quot;A String&quot;, # The metric type, including its DNS name prefix. The type is not URL-encoded. All user-defined metric types have the DNS name custom.googleapis.com or external.googleapis.com. Metric types should use a natural hierarchical grouping. For example: &quot;custom.googleapis.com/invoice/paid/amount&quot; &quot;external.googleapis.com/prometheus/up&quot; &quot;appengine.googleapis.com/http/server/response_latencies&quot;
-    &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the value_type is INT64, DOUBLE, or DISTRIBUTION. The unit defines the representation of the stored metric values.Different systems may scale the values to be more easily displayed (so a value of 0.02KBy might be displayed as 20By, and a value of 3523KBy might be displayed as 3.5MBy). However, if the unit is KBy, then the value of the metric is always in thousands of bytes, no matter how it may be displayed..If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an INT64 CUMULATIVE metric whose unit is s{CPU} (or equivalently 1s{CPU} or just s). If the job uses 12,005 CPU-seconds, then the value is written as 12005.Alternatively, if you want a custom metric to record data in a more granular way, you can create a DOUBLE CUMULATIVE metric whose unit is ks{CPU}, and then write the value 12.005 (which is 12005/1000), or use Kis{CPU} and write 11.723 (which is 12005/1024).The supported units are a subset of The Unified Code for Units of Measure (http://unitsofmeasure.org/ucum.html) standard:Basic units (UNIT) bit bit By byte s second min minute h hour d day 1 dimensionlessPrefixes (PREFIX) k kilo (10^3) M mega (10^6) G giga (10^9) T tera (10^12) P peta (10^15) E exa (10^18) Z zetta (10^21) Y yotta (10^24) m milli (10^-3) u micro (10^-6) n nano (10^-9) p pico (10^-12) f femto (10^-15) a atto (10^-18) z zepto (10^-21) y yocto (10^-24) Ki kibi (2^10) Mi mebi (2^20) Gi gibi (2^30) Ti tebi (2^40) Pi pebi (2^50)GrammarThe grammar also includes these connectors: / division or ratio (as an infix operator). For examples, kBy/{email} or MiBy/10ms (although you should almost never have /s in a metric unit; rates should always be computed at query time from the underlying cumulative or delta value). . multiplication or composition (as an infix operator). For examples, GBy.d or k{watt}.h.The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: Annotation is just a comment if it follows a UNIT. If the annotation is used alone, then the unit is equivalent to 1. For examples, {request}/s == 1/s, By{transmitted}/s == By/s. NAME is a sequence of non-blank printable ASCII characters not containing { or }. 1 represents a unitary dimensionless unit (https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in 1/s. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as 1/d or {new-users}/d (and a metric value 5 would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as 1000/d or k1/d or k{page_views}/d (and a metric value of 5.3 would mean &quot;5300 page views per day&quot;). % represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value 3 means &quot;3 percent&quot;). 10^2.% indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value 0.03 means &quot;3 percent&quot;).
+    &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the value_type is INT64, DOUBLE, or DISTRIBUTION. The unit defines the representation of the stored metric values.Different systems might scale the values to be more easily displayed (so a value of 0.02kBy might be displayed as 20By, and a value of 3523kBy might be displayed as 3.5MBy). However, if the unit is kBy, then the value of the metric is always in thousands of bytes, no matter how it might be displayed.If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an INT64 CUMULATIVE metric whose unit is s{CPU} (or equivalently 1s{CPU} or just s). If the job uses 12,005 CPU-seconds, then the value is written as 12005.Alternatively, if you want a custom metric to record data in a more granular way, you can create a DOUBLE CUMULATIVE metric whose unit is ks{CPU}, and then write the value 12.005 (which is 12005/1000), or use Kis{CPU} and write 11.723 (which is 12005/1024).The supported units are a subset of The Unified Code for Units of Measure (https://unitsofmeasure.org/ucum.html) standard:Basic units (UNIT) bit bit By byte s second min minute h hour d day 1 dimensionlessPrefixes (PREFIX) k kilo (10^3) M mega (10^6) G giga (10^9) T tera (10^12) P peta (10^15) E exa (10^18) Z zetta (10^21) Y yotta (10^24) m milli (10^-3) u micro (10^-6) n nano (10^-9) p pico (10^-12) f femto (10^-15) a atto (10^-18) z zepto (10^-21) y yocto (10^-24) Ki kibi (2^10) Mi mebi (2^20) Gi gibi (2^30) Ti tebi (2^40) Pi pebi (2^50)GrammarThe grammar also includes these connectors: / division or ratio (as an infix operator). For examples, kBy/{email} or MiBy/10ms (although you should almost never have /s in a metric unit; rates should always be computed at query time from the underlying cumulative or delta value). . multiplication or composition (as an infix operator). For examples, GBy.d or k{watt}.h.The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: Annotation is just a comment if it follows a UNIT. If the annotation is used alone, then the unit is equivalent to 1. For examples, {request}/s == 1/s, By{transmitted}/s == By/s. NAME is a sequence of non-blank printable ASCII characters not containing { or }. 1 represents a unitary dimensionless unit (https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in 1/s. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as 1/d or {new-users}/d (and a metric value 5 would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as 1000/d or k1/d or k{page_views}/d (and a metric value of 5.3 would mean &quot;5300 page views per day&quot;). % represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value 3 means &quot;3 percent&quot;). 10^2.% indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value 0.03 means &quot;3 percent&quot;).
     &quot;valueType&quot;: &quot;A String&quot;, # Whether the measurement is an integer, a floating-point number, etc. Some combinations of metric_kind and value_type might not be supported.
   },
   &quot;name&quot;: &quot;A String&quot;, # Required. The client-assigned metric identifier. Examples: &quot;error_count&quot;, &quot;nginx/requests&quot;.Metric identifiers are limited to 100 characters and can include only the following characters: A-Z, a-z, 0-9, and the special characters _-.,+!*&#x27;,()%/. The forward-slash character (/) denotes a hierarchy of name pieces, and it cannot be the first character of the name.The metric identifier in this field must not be URL-encoded (https://en.wikipedia.org/wiki/Percent-encoding). However, when the metric identifier appears as the [METRIC_ID] part of a metric_name API parameter, then the metric identifier must be URL-encoded. Example: &quot;projects/my-project/metrics/nginx%2Frequests&quot;.
@@ -307,7 +307,7 @@
     ],
     &quot;name&quot;: &quot;A String&quot;, # The resource name of the metric descriptor.
     &quot;type&quot;: &quot;A String&quot;, # The metric type, including its DNS name prefix. The type is not URL-encoded. All user-defined metric types have the DNS name custom.googleapis.com or external.googleapis.com. Metric types should use a natural hierarchical grouping. For example: &quot;custom.googleapis.com/invoice/paid/amount&quot; &quot;external.googleapis.com/prometheus/up&quot; &quot;appengine.googleapis.com/http/server/response_latencies&quot;
-    &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the value_type is INT64, DOUBLE, or DISTRIBUTION. The unit defines the representation of the stored metric values.Different systems may scale the values to be more easily displayed (so a value of 0.02KBy might be displayed as 20By, and a value of 3523KBy might be displayed as 3.5MBy). However, if the unit is KBy, then the value of the metric is always in thousands of bytes, no matter how it may be displayed..If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an INT64 CUMULATIVE metric whose unit is s{CPU} (or equivalently 1s{CPU} or just s). If the job uses 12,005 CPU-seconds, then the value is written as 12005.Alternatively, if you want a custom metric to record data in a more granular way, you can create a DOUBLE CUMULATIVE metric whose unit is ks{CPU}, and then write the value 12.005 (which is 12005/1000), or use Kis{CPU} and write 11.723 (which is 12005/1024).The supported units are a subset of The Unified Code for Units of Measure (http://unitsofmeasure.org/ucum.html) standard:Basic units (UNIT) bit bit By byte s second min minute h hour d day 1 dimensionlessPrefixes (PREFIX) k kilo (10^3) M mega (10^6) G giga (10^9) T tera (10^12) P peta (10^15) E exa (10^18) Z zetta (10^21) Y yotta (10^24) m milli (10^-3) u micro (10^-6) n nano (10^-9) p pico (10^-12) f femto (10^-15) a atto (10^-18) z zepto (10^-21) y yocto (10^-24) Ki kibi (2^10) Mi mebi (2^20) Gi gibi (2^30) Ti tebi (2^40) Pi pebi (2^50)GrammarThe grammar also includes these connectors: / division or ratio (as an infix operator). For examples, kBy/{email} or MiBy/10ms (although you should almost never have /s in a metric unit; rates should always be computed at query time from the underlying cumulative or delta value). . multiplication or composition (as an infix operator). For examples, GBy.d or k{watt}.h.The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: Annotation is just a comment if it follows a UNIT. If the annotation is used alone, then the unit is equivalent to 1. For examples, {request}/s == 1/s, By{transmitted}/s == By/s. NAME is a sequence of non-blank printable ASCII characters not containing { or }. 1 represents a unitary dimensionless unit (https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in 1/s. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as 1/d or {new-users}/d (and a metric value 5 would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as 1000/d or k1/d or k{page_views}/d (and a metric value of 5.3 would mean &quot;5300 page views per day&quot;). % represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value 3 means &quot;3 percent&quot;). 10^2.% indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value 0.03 means &quot;3 percent&quot;).
+    &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the value_type is INT64, DOUBLE, or DISTRIBUTION. The unit defines the representation of the stored metric values.Different systems might scale the values to be more easily displayed (so a value of 0.02kBy might be displayed as 20By, and a value of 3523kBy might be displayed as 3.5MBy). However, if the unit is kBy, then the value of the metric is always in thousands of bytes, no matter how it might be displayed.If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an INT64 CUMULATIVE metric whose unit is s{CPU} (or equivalently 1s{CPU} or just s). If the job uses 12,005 CPU-seconds, then the value is written as 12005.Alternatively, if you want a custom metric to record data in a more granular way, you can create a DOUBLE CUMULATIVE metric whose unit is ks{CPU}, and then write the value 12.005 (which is 12005/1000), or use Kis{CPU} and write 11.723 (which is 12005/1024).The supported units are a subset of The Unified Code for Units of Measure (https://unitsofmeasure.org/ucum.html) standard:Basic units (UNIT) bit bit By byte s second min minute h hour d day 1 dimensionlessPrefixes (PREFIX) k kilo (10^3) M mega (10^6) G giga (10^9) T tera (10^12) P peta (10^15) E exa (10^18) Z zetta (10^21) Y yotta (10^24) m milli (10^-3) u micro (10^-6) n nano (10^-9) p pico (10^-12) f femto (10^-15) a atto (10^-18) z zepto (10^-21) y yocto (10^-24) Ki kibi (2^10) Mi mebi (2^20) Gi gibi (2^30) Ti tebi (2^40) Pi pebi (2^50)GrammarThe grammar also includes these connectors: / division or ratio (as an infix operator). For examples, kBy/{email} or MiBy/10ms (although you should almost never have /s in a metric unit; rates should always be computed at query time from the underlying cumulative or delta value). . multiplication or composition (as an infix operator). For examples, GBy.d or k{watt}.h.The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: Annotation is just a comment if it follows a UNIT. If the annotation is used alone, then the unit is equivalent to 1. For examples, {request}/s == 1/s, By{transmitted}/s == By/s. NAME is a sequence of non-blank printable ASCII characters not containing { or }. 1 represents a unitary dimensionless unit (https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in 1/s. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as 1/d or {new-users}/d (and a metric value 5 would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as 1000/d or k1/d or k{page_views}/d (and a metric value of 5.3 would mean &quot;5300 page views per day&quot;). % represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value 3 means &quot;3 percent&quot;). 10^2.% indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value 0.03 means &quot;3 percent&quot;).
     &quot;valueType&quot;: &quot;A String&quot;, # Whether the measurement is an integer, a floating-point number, etc. Some combinations of metric_kind and value_type might not be supported.
   },
   &quot;name&quot;: &quot;A String&quot;, # Required. The client-assigned metric identifier. Examples: &quot;error_count&quot;, &quot;nginx/requests&quot;.Metric identifiers are limited to 100 characters and can include only the following characters: A-Z, a-z, 0-9, and the special characters _-.,+!*&#x27;,()%/. The forward-slash character (/) denotes a hierarchy of name pieces, and it cannot be the first character of the name.The metric identifier in this field must not be URL-encoded (https://en.wikipedia.org/wiki/Percent-encoding). However, when the metric identifier appears as the [METRIC_ID] part of a metric_name API parameter, then the metric identifier must be URL-encoded. Example: &quot;projects/my-project/metrics/nginx%2Frequests&quot;.
@@ -381,7 +381,7 @@
         ],
         &quot;name&quot;: &quot;A String&quot;, # The resource name of the metric descriptor.
         &quot;type&quot;: &quot;A String&quot;, # The metric type, including its DNS name prefix. The type is not URL-encoded. All user-defined metric types have the DNS name custom.googleapis.com or external.googleapis.com. Metric types should use a natural hierarchical grouping. For example: &quot;custom.googleapis.com/invoice/paid/amount&quot; &quot;external.googleapis.com/prometheus/up&quot; &quot;appengine.googleapis.com/http/server/response_latencies&quot;
-        &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the value_type is INT64, DOUBLE, or DISTRIBUTION. The unit defines the representation of the stored metric values.Different systems may scale the values to be more easily displayed (so a value of 0.02KBy might be displayed as 20By, and a value of 3523KBy might be displayed as 3.5MBy). However, if the unit is KBy, then the value of the metric is always in thousands of bytes, no matter how it may be displayed..If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an INT64 CUMULATIVE metric whose unit is s{CPU} (or equivalently 1s{CPU} or just s). If the job uses 12,005 CPU-seconds, then the value is written as 12005.Alternatively, if you want a custom metric to record data in a more granular way, you can create a DOUBLE CUMULATIVE metric whose unit is ks{CPU}, and then write the value 12.005 (which is 12005/1000), or use Kis{CPU} and write 11.723 (which is 12005/1024).The supported units are a subset of The Unified Code for Units of Measure (http://unitsofmeasure.org/ucum.html) standard:Basic units (UNIT) bit bit By byte s second min minute h hour d day 1 dimensionlessPrefixes (PREFIX) k kilo (10^3) M mega (10^6) G giga (10^9) T tera (10^12) P peta (10^15) E exa (10^18) Z zetta (10^21) Y yotta (10^24) m milli (10^-3) u micro (10^-6) n nano (10^-9) p pico (10^-12) f femto (10^-15) a atto (10^-18) z zepto (10^-21) y yocto (10^-24) Ki kibi (2^10) Mi mebi (2^20) Gi gibi (2^30) Ti tebi (2^40) Pi pebi (2^50)GrammarThe grammar also includes these connectors: / division or ratio (as an infix operator). For examples, kBy/{email} or MiBy/10ms (although you should almost never have /s in a metric unit; rates should always be computed at query time from the underlying cumulative or delta value). . multiplication or composition (as an infix operator). For examples, GBy.d or k{watt}.h.The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: Annotation is just a comment if it follows a UNIT. If the annotation is used alone, then the unit is equivalent to 1. For examples, {request}/s == 1/s, By{transmitted}/s == By/s. NAME is a sequence of non-blank printable ASCII characters not containing { or }. 1 represents a unitary dimensionless unit (https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in 1/s. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as 1/d or {new-users}/d (and a metric value 5 would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as 1000/d or k1/d or k{page_views}/d (and a metric value of 5.3 would mean &quot;5300 page views per day&quot;). % represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value 3 means &quot;3 percent&quot;). 10^2.% indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value 0.03 means &quot;3 percent&quot;).
+        &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the value_type is INT64, DOUBLE, or DISTRIBUTION. The unit defines the representation of the stored metric values.Different systems might scale the values to be more easily displayed (so a value of 0.02kBy might be displayed as 20By, and a value of 3523kBy might be displayed as 3.5MBy). However, if the unit is kBy, then the value of the metric is always in thousands of bytes, no matter how it might be displayed.If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an INT64 CUMULATIVE metric whose unit is s{CPU} (or equivalently 1s{CPU} or just s). If the job uses 12,005 CPU-seconds, then the value is written as 12005.Alternatively, if you want a custom metric to record data in a more granular way, you can create a DOUBLE CUMULATIVE metric whose unit is ks{CPU}, and then write the value 12.005 (which is 12005/1000), or use Kis{CPU} and write 11.723 (which is 12005/1024).The supported units are a subset of The Unified Code for Units of Measure (https://unitsofmeasure.org/ucum.html) standard:Basic units (UNIT) bit bit By byte s second min minute h hour d day 1 dimensionlessPrefixes (PREFIX) k kilo (10^3) M mega (10^6) G giga (10^9) T tera (10^12) P peta (10^15) E exa (10^18) Z zetta (10^21) Y yotta (10^24) m milli (10^-3) u micro (10^-6) n nano (10^-9) p pico (10^-12) f femto (10^-15) a atto (10^-18) z zepto (10^-21) y yocto (10^-24) Ki kibi (2^10) Mi mebi (2^20) Gi gibi (2^30) Ti tebi (2^40) Pi pebi (2^50)GrammarThe grammar also includes these connectors: / division or ratio (as an infix operator). For examples, kBy/{email} or MiBy/10ms (although you should almost never have /s in a metric unit; rates should always be computed at query time from the underlying cumulative or delta value). . multiplication or composition (as an infix operator). For examples, GBy.d or k{watt}.h.The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: Annotation is just a comment if it follows a UNIT. If the annotation is used alone, then the unit is equivalent to 1. For examples, {request}/s == 1/s, By{transmitted}/s == By/s. NAME is a sequence of non-blank printable ASCII characters not containing { or }. 1 represents a unitary dimensionless unit (https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in 1/s. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as 1/d or {new-users}/d (and a metric value 5 would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as 1000/d or k1/d or k{page_views}/d (and a metric value of 5.3 would mean &quot;5300 page views per day&quot;). % represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value 3 means &quot;3 percent&quot;). 10^2.% indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value 0.03 means &quot;3 percent&quot;).
         &quot;valueType&quot;: &quot;A String&quot;, # Whether the measurement is an integer, a floating-point number, etc. Some combinations of metric_kind and value_type might not be supported.
       },
       &quot;name&quot;: &quot;A String&quot;, # Required. The client-assigned metric identifier. Examples: &quot;error_count&quot;, &quot;nginx/requests&quot;.Metric identifiers are limited to 100 characters and can include only the following characters: A-Z, a-z, 0-9, and the special characters _-.,+!*&#x27;,()%/. The forward-slash character (/) denotes a hierarchy of name pieces, and it cannot be the first character of the name.The metric identifier in this field must not be URL-encoded (https://en.wikipedia.org/wiki/Percent-encoding). However, when the metric identifier appears as the [METRIC_ID] part of a metric_name API parameter, then the metric identifier must be URL-encoded. Example: &quot;projects/my-project/metrics/nginx%2Frequests&quot;.
@@ -463,7 +463,7 @@
     ],
     &quot;name&quot;: &quot;A String&quot;, # The resource name of the metric descriptor.
     &quot;type&quot;: &quot;A String&quot;, # The metric type, including its DNS name prefix. The type is not URL-encoded. All user-defined metric types have the DNS name custom.googleapis.com or external.googleapis.com. Metric types should use a natural hierarchical grouping. For example: &quot;custom.googleapis.com/invoice/paid/amount&quot; &quot;external.googleapis.com/prometheus/up&quot; &quot;appengine.googleapis.com/http/server/response_latencies&quot;
-    &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the value_type is INT64, DOUBLE, or DISTRIBUTION. The unit defines the representation of the stored metric values.Different systems may scale the values to be more easily displayed (so a value of 0.02KBy might be displayed as 20By, and a value of 3523KBy might be displayed as 3.5MBy). However, if the unit is KBy, then the value of the metric is always in thousands of bytes, no matter how it may be displayed..If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an INT64 CUMULATIVE metric whose unit is s{CPU} (or equivalently 1s{CPU} or just s). If the job uses 12,005 CPU-seconds, then the value is written as 12005.Alternatively, if you want a custom metric to record data in a more granular way, you can create a DOUBLE CUMULATIVE metric whose unit is ks{CPU}, and then write the value 12.005 (which is 12005/1000), or use Kis{CPU} and write 11.723 (which is 12005/1024).The supported units are a subset of The Unified Code for Units of Measure (http://unitsofmeasure.org/ucum.html) standard:Basic units (UNIT) bit bit By byte s second min minute h hour d day 1 dimensionlessPrefixes (PREFIX) k kilo (10^3) M mega (10^6) G giga (10^9) T tera (10^12) P peta (10^15) E exa (10^18) Z zetta (10^21) Y yotta (10^24) m milli (10^-3) u micro (10^-6) n nano (10^-9) p pico (10^-12) f femto (10^-15) a atto (10^-18) z zepto (10^-21) y yocto (10^-24) Ki kibi (2^10) Mi mebi (2^20) Gi gibi (2^30) Ti tebi (2^40) Pi pebi (2^50)GrammarThe grammar also includes these connectors: / division or ratio (as an infix operator). For examples, kBy/{email} or MiBy/10ms (although you should almost never have /s in a metric unit; rates should always be computed at query time from the underlying cumulative or delta value). . multiplication or composition (as an infix operator). For examples, GBy.d or k{watt}.h.The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: Annotation is just a comment if it follows a UNIT. If the annotation is used alone, then the unit is equivalent to 1. For examples, {request}/s == 1/s, By{transmitted}/s == By/s. NAME is a sequence of non-blank printable ASCII characters not containing { or }. 1 represents a unitary dimensionless unit (https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in 1/s. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as 1/d or {new-users}/d (and a metric value 5 would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as 1000/d or k1/d or k{page_views}/d (and a metric value of 5.3 would mean &quot;5300 page views per day&quot;). % represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value 3 means &quot;3 percent&quot;). 10^2.% indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value 0.03 means &quot;3 percent&quot;).
+    &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the value_type is INT64, DOUBLE, or DISTRIBUTION. The unit defines the representation of the stored metric values.Different systems might scale the values to be more easily displayed (so a value of 0.02kBy might be displayed as 20By, and a value of 3523kBy might be displayed as 3.5MBy). However, if the unit is kBy, then the value of the metric is always in thousands of bytes, no matter how it might be displayed.If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an INT64 CUMULATIVE metric whose unit is s{CPU} (or equivalently 1s{CPU} or just s). If the job uses 12,005 CPU-seconds, then the value is written as 12005.Alternatively, if you want a custom metric to record data in a more granular way, you can create a DOUBLE CUMULATIVE metric whose unit is ks{CPU}, and then write the value 12.005 (which is 12005/1000), or use Kis{CPU} and write 11.723 (which is 12005/1024).The supported units are a subset of The Unified Code for Units of Measure (https://unitsofmeasure.org/ucum.html) standard:Basic units (UNIT) bit bit By byte s second min minute h hour d day 1 dimensionlessPrefixes (PREFIX) k kilo (10^3) M mega (10^6) G giga (10^9) T tera (10^12) P peta (10^15) E exa (10^18) Z zetta (10^21) Y yotta (10^24) m milli (10^-3) u micro (10^-6) n nano (10^-9) p pico (10^-12) f femto (10^-15) a atto (10^-18) z zepto (10^-21) y yocto (10^-24) Ki kibi (2^10) Mi mebi (2^20) Gi gibi (2^30) Ti tebi (2^40) Pi pebi (2^50)GrammarThe grammar also includes these connectors: / division or ratio (as an infix operator). For examples, kBy/{email} or MiBy/10ms (although you should almost never have /s in a metric unit; rates should always be computed at query time from the underlying cumulative or delta value). . multiplication or composition (as an infix operator). For examples, GBy.d or k{watt}.h.The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: Annotation is just a comment if it follows a UNIT. If the annotation is used alone, then the unit is equivalent to 1. For examples, {request}/s == 1/s, By{transmitted}/s == By/s. NAME is a sequence of non-blank printable ASCII characters not containing { or }. 1 represents a unitary dimensionless unit (https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in 1/s. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as 1/d or {new-users}/d (and a metric value 5 would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as 1000/d or k1/d or k{page_views}/d (and a metric value of 5.3 would mean &quot;5300 page views per day&quot;). % represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value 3 means &quot;3 percent&quot;). 10^2.% indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value 0.03 means &quot;3 percent&quot;).
     &quot;valueType&quot;: &quot;A String&quot;, # Whether the measurement is an integer, a floating-point number, etc. Some combinations of metric_kind and value_type might not be supported.
   },
   &quot;name&quot;: &quot;A String&quot;, # Required. The client-assigned metric identifier. Examples: &quot;error_count&quot;, &quot;nginx/requests&quot;.Metric identifiers are limited to 100 characters and can include only the following characters: A-Z, a-z, 0-9, and the special characters _-.,+!*&#x27;,()%/. The forward-slash character (/) denotes a hierarchy of name pieces, and it cannot be the first character of the name.The metric identifier in this field must not be URL-encoded (https://en.wikipedia.org/wiki/Percent-encoding). However, when the metric identifier appears as the [METRIC_ID] part of a metric_name API parameter, then the metric identifier must be URL-encoded. Example: &quot;projects/my-project/metrics/nginx%2Frequests&quot;.
@@ -526,7 +526,7 @@
     ],
     &quot;name&quot;: &quot;A String&quot;, # The resource name of the metric descriptor.
     &quot;type&quot;: &quot;A String&quot;, # The metric type, including its DNS name prefix. The type is not URL-encoded. All user-defined metric types have the DNS name custom.googleapis.com or external.googleapis.com. Metric types should use a natural hierarchical grouping. For example: &quot;custom.googleapis.com/invoice/paid/amount&quot; &quot;external.googleapis.com/prometheus/up&quot; &quot;appengine.googleapis.com/http/server/response_latencies&quot;
-    &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the value_type is INT64, DOUBLE, or DISTRIBUTION. The unit defines the representation of the stored metric values.Different systems may scale the values to be more easily displayed (so a value of 0.02KBy might be displayed as 20By, and a value of 3523KBy might be displayed as 3.5MBy). However, if the unit is KBy, then the value of the metric is always in thousands of bytes, no matter how it may be displayed..If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an INT64 CUMULATIVE metric whose unit is s{CPU} (or equivalently 1s{CPU} or just s). If the job uses 12,005 CPU-seconds, then the value is written as 12005.Alternatively, if you want a custom metric to record data in a more granular way, you can create a DOUBLE CUMULATIVE metric whose unit is ks{CPU}, and then write the value 12.005 (which is 12005/1000), or use Kis{CPU} and write 11.723 (which is 12005/1024).The supported units are a subset of The Unified Code for Units of Measure (http://unitsofmeasure.org/ucum.html) standard:Basic units (UNIT) bit bit By byte s second min minute h hour d day 1 dimensionlessPrefixes (PREFIX) k kilo (10^3) M mega (10^6) G giga (10^9) T tera (10^12) P peta (10^15) E exa (10^18) Z zetta (10^21) Y yotta (10^24) m milli (10^-3) u micro (10^-6) n nano (10^-9) p pico (10^-12) f femto (10^-15) a atto (10^-18) z zepto (10^-21) y yocto (10^-24) Ki kibi (2^10) Mi mebi (2^20) Gi gibi (2^30) Ti tebi (2^40) Pi pebi (2^50)GrammarThe grammar also includes these connectors: / division or ratio (as an infix operator). For examples, kBy/{email} or MiBy/10ms (although you should almost never have /s in a metric unit; rates should always be computed at query time from the underlying cumulative or delta value). . multiplication or composition (as an infix operator). For examples, GBy.d or k{watt}.h.The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: Annotation is just a comment if it follows a UNIT. If the annotation is used alone, then the unit is equivalent to 1. For examples, {request}/s == 1/s, By{transmitted}/s == By/s. NAME is a sequence of non-blank printable ASCII characters not containing { or }. 1 represents a unitary dimensionless unit (https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in 1/s. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as 1/d or {new-users}/d (and a metric value 5 would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as 1000/d or k1/d or k{page_views}/d (and a metric value of 5.3 would mean &quot;5300 page views per day&quot;). % represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value 3 means &quot;3 percent&quot;). 10^2.% indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value 0.03 means &quot;3 percent&quot;).
+    &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the value_type is INT64, DOUBLE, or DISTRIBUTION. The unit defines the representation of the stored metric values.Different systems might scale the values to be more easily displayed (so a value of 0.02kBy might be displayed as 20By, and a value of 3523kBy might be displayed as 3.5MBy). However, if the unit is kBy, then the value of the metric is always in thousands of bytes, no matter how it might be displayed.If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an INT64 CUMULATIVE metric whose unit is s{CPU} (or equivalently 1s{CPU} or just s). If the job uses 12,005 CPU-seconds, then the value is written as 12005.Alternatively, if you want a custom metric to record data in a more granular way, you can create a DOUBLE CUMULATIVE metric whose unit is ks{CPU}, and then write the value 12.005 (which is 12005/1000), or use Kis{CPU} and write 11.723 (which is 12005/1024).The supported units are a subset of The Unified Code for Units of Measure (https://unitsofmeasure.org/ucum.html) standard:Basic units (UNIT) bit bit By byte s second min minute h hour d day 1 dimensionlessPrefixes (PREFIX) k kilo (10^3) M mega (10^6) G giga (10^9) T tera (10^12) P peta (10^15) E exa (10^18) Z zetta (10^21) Y yotta (10^24) m milli (10^-3) u micro (10^-6) n nano (10^-9) p pico (10^-12) f femto (10^-15) a atto (10^-18) z zepto (10^-21) y yocto (10^-24) Ki kibi (2^10) Mi mebi (2^20) Gi gibi (2^30) Ti tebi (2^40) Pi pebi (2^50)GrammarThe grammar also includes these connectors: / division or ratio (as an infix operator). For examples, kBy/{email} or MiBy/10ms (although you should almost never have /s in a metric unit; rates should always be computed at query time from the underlying cumulative or delta value). . multiplication or composition (as an infix operator). For examples, GBy.d or k{watt}.h.The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: Annotation is just a comment if it follows a UNIT. If the annotation is used alone, then the unit is equivalent to 1. For examples, {request}/s == 1/s, By{transmitted}/s == By/s. NAME is a sequence of non-blank printable ASCII characters not containing { or }. 1 represents a unitary dimensionless unit (https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in 1/s. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as 1/d or {new-users}/d (and a metric value 5 would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as 1000/d or k1/d or k{page_views}/d (and a metric value of 5.3 would mean &quot;5300 page views per day&quot;). % represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value 3 means &quot;3 percent&quot;). 10^2.% indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value 0.03 means &quot;3 percent&quot;).
     &quot;valueType&quot;: &quot;A String&quot;, # Whether the measurement is an integer, a floating-point number, etc. Some combinations of metric_kind and value_type might not be supported.
   },
   &quot;name&quot;: &quot;A String&quot;, # Required. The client-assigned metric identifier. Examples: &quot;error_count&quot;, &quot;nginx/requests&quot;.Metric identifiers are limited to 100 characters and can include only the following characters: A-Z, a-z, 0-9, and the special characters _-.,+!*&#x27;,()%/. The forward-slash character (/) denotes a hierarchy of name pieces, and it cannot be the first character of the name.The metric identifier in this field must not be URL-encoded (https://en.wikipedia.org/wiki/Percent-encoding). However, when the metric identifier appears as the [METRIC_ID] part of a metric_name API parameter, then the metric identifier must be URL-encoded. Example: &quot;projects/my-project/metrics/nginx%2Frequests&quot;.
diff --git a/docs/dyn/logging_v2.projects.sinks.html b/docs/dyn/logging_v2.projects.sinks.html
index 6ce9c07..e26e212 100644
--- a/docs/dyn/logging_v2.projects.sinks.html
+++ b/docs/dyn/logging_v2.projects.sinks.html
@@ -113,7 +113,7 @@
   body: object, The request body.
     The object takes the form of:
 
-{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -149,7 +149,7 @@
 Returns:
   An object of the form:
 
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -209,7 +209,7 @@
 Returns:
   An object of the form:
 
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -256,7 +256,7 @@
     { # Result returned from ListSinks.
   &quot;nextPageToken&quot;: &quot;A String&quot;, # If there might be more results than appear in this response, then nextPageToken is included. To get the next set of results, call the same method again using the value of nextPageToken as pageToken.
   &quot;sinks&quot;: [ # A list of sinks.
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
       &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
         &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
         &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -309,7 +309,7 @@
   body: object, The request body.
     The object takes the form of:
 
-{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -346,7 +346,7 @@
 Returns:
   An object of the form:
 
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -383,7 +383,7 @@
   body: object, The request body.
     The object takes the form of:
 
-{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -420,7 +420,7 @@
 Returns:
   An object of the form:
 
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
diff --git a/docs/dyn/logging_v2.sinks.html b/docs/dyn/logging_v2.sinks.html
index 613be7b..cc15f37 100644
--- a/docs/dyn/logging_v2.sinks.html
+++ b/docs/dyn/logging_v2.sinks.html
@@ -110,7 +110,7 @@
   body: object, The request body.
     The object takes the form of:
 
-{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -146,7 +146,7 @@
 Returns:
   An object of the form:
 
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -206,7 +206,7 @@
 Returns:
   An object of the form:
 
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -253,7 +253,7 @@
     { # Result returned from ListSinks.
   &quot;nextPageToken&quot;: &quot;A String&quot;, # If there might be more results than appear in this response, then nextPageToken is included. To get the next set of results, call the same method again using the value of nextPageToken as pageToken.
   &quot;sinks&quot;: [ # A list of sinks.
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
       &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
         &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
         &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -306,7 +306,7 @@
   body: object, The request body.
     The object takes the form of:
 
-{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+{ # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
@@ -343,7 +343,7 @@
 Returns:
   An object of the form:
 
-    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
+    { # Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.
   &quot;bigqueryOptions&quot;: { # Options that change functionality of a sink exporting data to BigQuery. # Optional. Options that affect sinks exporting data to BigQuery.
     &quot;usePartitionedTables&quot;: True or False, # Optional. Whether to use BigQuery&#x27;s partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries&#x27; timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.
     &quot;usesTimestampColumnPartitioning&quot;: True or False, # Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.
diff --git a/docs/dyn/people_v1.contactGroups.html b/docs/dyn/people_v1.contactGroups.html
index e5e3a12..04ac990 100644
--- a/docs/dyn/people_v1.contactGroups.html
+++ b/docs/dyn/people_v1.contactGroups.html
@@ -125,7 +125,7 @@
     { # The response for a specific contact group.
       &quot;contactGroup&quot;: { # A contact group. # The contact group.
         &quot;clientData&quot;: [ # The group&#x27;s client data.
-          { # Arbitrary client data that is populated by clients. Duplicate keys and values are allowed. LINT.IfChange(GroupClientData)
+          { # Arbitrary client data that is populated by clients. Duplicate keys and values are allowed.
             &quot;key&quot;: &quot;A String&quot;, # The client specified key of the client data.
             &quot;value&quot;: &quot;A String&quot;, # The client specified value of the client data.
           },
@@ -175,7 +175,7 @@
 { # A request to create a new contact group.
   &quot;contactGroup&quot;: { # A contact group. # Required. The contact group to create.
     &quot;clientData&quot;: [ # The group&#x27;s client data.
-      { # Arbitrary client data that is populated by clients. Duplicate keys and values are allowed. LINT.IfChange(GroupClientData)
+      { # Arbitrary client data that is populated by clients. Duplicate keys and values are allowed.
         &quot;key&quot;: &quot;A String&quot;, # The client specified key of the client data.
         &quot;value&quot;: &quot;A String&quot;, # The client specified value of the client data.
       },
@@ -207,7 +207,7 @@
 
     { # A contact group.
   &quot;clientData&quot;: [ # The group&#x27;s client data.
-    { # Arbitrary client data that is populated by clients. Duplicate keys and values are allowed. LINT.IfChange(GroupClientData)
+    { # Arbitrary client data that is populated by clients. Duplicate keys and values are allowed.
       &quot;key&quot;: &quot;A String&quot;, # The client specified key of the client data.
       &quot;value&quot;: &quot;A String&quot;, # The client specified value of the client data.
     },
@@ -265,7 +265,7 @@
 
     { # A contact group.
   &quot;clientData&quot;: [ # The group&#x27;s client data.
-    { # Arbitrary client data that is populated by clients. Duplicate keys and values are allowed. LINT.IfChange(GroupClientData)
+    { # Arbitrary client data that is populated by clients. Duplicate keys and values are allowed.
       &quot;key&quot;: &quot;A String&quot;, # The client specified key of the client data.
       &quot;value&quot;: &quot;A String&quot;, # The client specified value of the client data.
     },
@@ -307,7 +307,7 @@
   &quot;contactGroups&quot;: [ # The list of contact groups. Members of the contact groups are not populated.
     { # A contact group.
       &quot;clientData&quot;: [ # The group&#x27;s client data.
-        { # Arbitrary client data that is populated by clients. Duplicate keys and values are allowed. LINT.IfChange(GroupClientData)
+        { # Arbitrary client data that is populated by clients. Duplicate keys and values are allowed.
           &quot;key&quot;: &quot;A String&quot;, # The client specified key of the client data.
           &quot;value&quot;: &quot;A String&quot;, # The client specified value of the client data.
         },
@@ -359,7 +359,7 @@
 { # A request to update an existing user contact group. All updated fields will be replaced.
   &quot;contactGroup&quot;: { # A contact group. # Required. The contact group to update.
     &quot;clientData&quot;: [ # The group&#x27;s client data.
-      { # Arbitrary client data that is populated by clients. Duplicate keys and values are allowed. LINT.IfChange(GroupClientData)
+      { # Arbitrary client data that is populated by clients. Duplicate keys and values are allowed.
         &quot;key&quot;: &quot;A String&quot;, # The client specified key of the client data.
         &quot;value&quot;: &quot;A String&quot;, # The client specified value of the client data.
       },
@@ -392,7 +392,7 @@
 
     { # A contact group.
   &quot;clientData&quot;: [ # The group&#x27;s client data.
-    { # Arbitrary client data that is populated by clients. Duplicate keys and values are allowed. LINT.IfChange(GroupClientData)
+    { # Arbitrary client data that is populated by clients. Duplicate keys and values are allowed.
       &quot;key&quot;: &quot;A String&quot;, # The client specified key of the client data.
       &quot;value&quot;: &quot;A String&quot;, # The client specified value of the client data.
     },
diff --git a/docs/dyn/recommendationengine_v1beta1.html b/docs/dyn/recommendationengine_v1beta1.html
index 3e0b16d..2200054 100644
--- a/docs/dyn/recommendationengine_v1beta1.html
+++ b/docs/dyn/recommendationengine_v1beta1.html
@@ -72,7 +72,7 @@
 
 </style>
 
-<h1><a href="recommendationengine_v1beta1.html">Recommendations AI</a></h1>
+<h1><a href="recommendationengine_v1beta1.html">Recommendations AI (Beta)</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="recommendationengine_v1beta1.projects.html">projects()</a></code>
diff --git a/docs/dyn/recommendationengine_v1beta1.projects.html b/docs/dyn/recommendationengine_v1beta1.projects.html
index 4d42f38..975c4d1 100644
--- a/docs/dyn/recommendationengine_v1beta1.projects.html
+++ b/docs/dyn/recommendationengine_v1beta1.projects.html
@@ -72,7 +72,7 @@
 
 </style>
 
-<h1><a href="recommendationengine_v1beta1.html">Recommendations AI</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a></h1>
+<h1><a href="recommendationengine_v1beta1.html">Recommendations AI (Beta)</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="recommendationengine_v1beta1.projects.locations.html">locations()</a></code>
diff --git a/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.catalogItems.html b/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.catalogItems.html
index 888432b..9574127 100644
--- a/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.catalogItems.html
+++ b/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.catalogItems.html
@@ -72,7 +72,7 @@
 
 </style>
 
-<h1><a href="recommendationengine_v1beta1.html">Recommendations AI</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a> . <a href="recommendationengine_v1beta1.projects.locations.html">locations</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.html">catalogs</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.catalogItems.html">catalogItems</a></h1>
+<h1><a href="recommendationengine_v1beta1.html">Recommendations AI (Beta)</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a> . <a href="recommendationengine_v1beta1.projects.locations.html">locations</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.html">catalogs</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.catalogItems.html">catalogItems</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="#close">close()</a></code></p>
@@ -451,7 +451,7 @@
           &quot;productEventDetail&quot;: { # ProductEventDetail captures user event information specific to retail products. # Optional. Retail product specific user event metadata. This field is required for the following event types: * `add-to-cart` * `add-to-list` * `category-page-view` * `checkout-start` * `detail-page-view` * `purchase-complete` * `refund` * `remove-from-cart` * `remove-from-list` * `search` This field is optional for the following event types: * `page-visit` * `shopping-cart-page-view` - note that &#x27;product_event_detail&#x27; should be set for this unless the shopping cart is empty. This field is not allowed for the following event types: * `home-page-view`
             &quot;cartId&quot;: &quot;A String&quot;, # Optional. The id or name of the associated shopping cart. This id is used to associate multiple items added or present in the cart before purchase. This can only be set for `add-to-cart`, `remove-from-cart`, `checkout-start`, `purchase-complete`, or `shopping-cart-page-view` events.
             &quot;listId&quot;: &quot;A String&quot;, # Required for `add-to-list` and `remove-from-list` events. The id or name of the list that the item is being added to or removed from. Other event types should not set this field.
-            &quot;pageCategories&quot;: [ # Required for `category-page-view` events. Other event types should not set this field. The categories associated with a category page. Category pages include special pages such as sales or promotions. For instance, a special sale page may have the category hierarchy: categories : [&quot;Sales&quot;, &quot;2017 Black Friday Deals&quot;].
+            &quot;pageCategories&quot;: [ # Required for `category-page-view` events. At least one of search_query or page_categories is required for `search` events. Other event types should not set this field. The categories associated with a category page. Category pages include special pages such as sales or promotions. For instance, a special sale page may have the category hierarchy: categories : [&quot;Sales&quot;, &quot;2017 Black Friday Deals&quot;].
               { # Category represents catalog item category hierarchy.
                 &quot;categories&quot;: [ # Required. Catalog item categories. Each category should be a UTF-8 encoded string with a length limit of 2 KiB. Note that the order in the list denotes the specificity (from least to most specific).
                   &quot;A String&quot;,
@@ -496,7 +496,7 @@
                 &quot;a_key&quot;: 3.14,
               },
             },
-            &quot;searchQuery&quot;: &quot;A String&quot;, # Required for `search` events. Other event types should not set this field. The user&#x27;s search query as UTF-8 encoded text with a length limit of 5 KiB.
+            &quot;searchQuery&quot;: &quot;A String&quot;, # At least one of search_query or page_categories is required for `search` events. Other event types should not set this field. The user&#x27;s search query as UTF-8 encoded text with a length limit of 5 KiB.
           },
           &quot;userInfo&quot;: { # Information of end users. # Required. User information.
             &quot;directUserRequest&quot;: True or False, # Optional. Indicates if the request is made directly from the end user in which case the user_agent and ip_address fields can be populated from the HTTP request. This should *not* be set when using the javascript pixel. This flag should be set only if the API request is made directly from the end user such as a mobile app (and not if a gateway or a server is processing and pushing the user events).
diff --git a/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.eventStores.html b/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.eventStores.html
index 721431e..47b0f97 100644
--- a/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.eventStores.html
+++ b/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.eventStores.html
@@ -72,7 +72,7 @@
 
 </style>
 
-<h1><a href="recommendationengine_v1beta1.html">Recommendations AI</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a> . <a href="recommendationengine_v1beta1.projects.locations.html">locations</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.html">catalogs</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.html">eventStores</a></h1>
+<h1><a href="recommendationengine_v1beta1.html">Recommendations AI (Beta)</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a> . <a href="recommendationengine_v1beta1.projects.locations.html">locations</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.html">catalogs</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.html">eventStores</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.operations.html">operations()</a></code>
diff --git a/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.eventStores.operations.html b/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.eventStores.operations.html
index 6470d5d..251cb6e 100644
--- a/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.eventStores.operations.html
+++ b/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.eventStores.operations.html
@@ -72,7 +72,7 @@
 
 </style>
 
-<h1><a href="recommendationengine_v1beta1.html">Recommendations AI</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a> . <a href="recommendationengine_v1beta1.projects.locations.html">locations</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.html">catalogs</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.html">eventStores</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.operations.html">operations</a></h1>
+<h1><a href="recommendationengine_v1beta1.html">Recommendations AI (Beta)</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a> . <a href="recommendationengine_v1beta1.projects.locations.html">locations</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.html">catalogs</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.html">eventStores</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.operations.html">operations</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="#close">close()</a></code></p>
diff --git a/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.eventStores.placements.html b/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.eventStores.placements.html
index 86e559c..b3fe461 100644
--- a/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.eventStores.placements.html
+++ b/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.eventStores.placements.html
@@ -72,14 +72,14 @@
 
 </style>
 
-<h1><a href="recommendationengine_v1beta1.html">Recommendations AI</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a> . <a href="recommendationengine_v1beta1.projects.locations.html">locations</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.html">catalogs</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.html">eventStores</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.placements.html">placements</a></h1>
+<h1><a href="recommendationengine_v1beta1.html">Recommendations AI (Beta)</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a> . <a href="recommendationengine_v1beta1.projects.locations.html">locations</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.html">catalogs</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.html">eventStores</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.placements.html">placements</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="#close">close()</a></code></p>
 <p class="firstline">Close httplib2 connections.</p>
 <p class="toc_element">
   <code><a href="#predict">predict(name, body=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Makes a recommendation prediction. If using API Key based authentication, the API Key must be registered using the PredictionApiKeyRegistry service. [Learn more](/recommendations-ai/docs/setting-up#register-key).</p>
+<p class="firstline">Makes a recommendation prediction. If using API Key based authentication, the API Key must be registered using the PredictionApiKeyRegistry service. [Learn more](https://cloud.google.com/recommendations-ai/docs/setting-up#register-key).</p>
 <p class="toc_element">
   <code><a href="#predict_next">predict_next(previous_request, previous_response)</a></code></p>
 <p class="firstline">Retrieves the next page of results.</p>
@@ -91,7 +91,7 @@
 
 <div class="method">
     <code class="details" id="predict">predict(name, body=None, x__xgafv=None)</code>
-  <pre>Makes a recommendation prediction. If using API Key based authentication, the API Key must be registered using the PredictionApiKeyRegistry service. [Learn more](/recommendations-ai/docs/setting-up#register-key).
+  <pre>Makes a recommendation prediction. If using API Key based authentication, the API Key must be registered using the PredictionApiKeyRegistry service. [Learn more](https://cloud.google.com/recommendations-ai/docs/setting-up#register-key).
 
 Args:
   name: string, Required. Full resource name of the format: {name=projects/*/locations/global/catalogs/default_catalog/eventStores/default_event_store/placements/*} The id of the recommendation engine placement. This id is used to identify the set of models that will be used to make the prediction. We currently support three placements with the following IDs by default: * `shopping_cart`: Predicts items frequently bought together with one or more catalog items in the same shopping session. Commonly displayed after `add-to-cart` events, on product detail pages, or on the shopping cart page. * `home_page`: Predicts the next product that a user will most likely engage with or purchase based on the shopping or viewing history of the specified `userId` or `visitorId`. For example - Recommendations for you. * `product_detail`: Predicts the next product that a user will most likely engage with or purchase. The prediction is based on the shopping or viewing history of the specified `userId` or `visitorId` and its relevance to a specified `CatalogItem`. Typically used on product detail pages. For example - More items like this. * `recently_viewed_default`: Returns up to 75 items recently viewed by the specified `userId` or `visitorId`, most recent ones first. Returns nothing if neither of them has viewed any items yet. For example - Recently viewed. The full list of available placements can be seen at https://console.cloud.google.com/recommendation/datafeeds/default_catalog/dashboard (required)
@@ -141,7 +141,7 @@
     &quot;productEventDetail&quot;: { # ProductEventDetail captures user event information specific to retail products. # Optional. Retail product specific user event metadata. This field is required for the following event types: * `add-to-cart` * `add-to-list` * `category-page-view` * `checkout-start` * `detail-page-view` * `purchase-complete` * `refund` * `remove-from-cart` * `remove-from-list` * `search` This field is optional for the following event types: * `page-visit` * `shopping-cart-page-view` - note that &#x27;product_event_detail&#x27; should be set for this unless the shopping cart is empty. This field is not allowed for the following event types: * `home-page-view`
       &quot;cartId&quot;: &quot;A String&quot;, # Optional. The id or name of the associated shopping cart. This id is used to associate multiple items added or present in the cart before purchase. This can only be set for `add-to-cart`, `remove-from-cart`, `checkout-start`, `purchase-complete`, or `shopping-cart-page-view` events.
       &quot;listId&quot;: &quot;A String&quot;, # Required for `add-to-list` and `remove-from-list` events. The id or name of the list that the item is being added to or removed from. Other event types should not set this field.
-      &quot;pageCategories&quot;: [ # Required for `category-page-view` events. Other event types should not set this field. The categories associated with a category page. Category pages include special pages such as sales or promotions. For instance, a special sale page may have the category hierarchy: categories : [&quot;Sales&quot;, &quot;2017 Black Friday Deals&quot;].
+      &quot;pageCategories&quot;: [ # Required for `category-page-view` events. At least one of search_query or page_categories is required for `search` events. Other event types should not set this field. The categories associated with a category page. Category pages include special pages such as sales or promotions. For instance, a special sale page may have the category hierarchy: categories : [&quot;Sales&quot;, &quot;2017 Black Friday Deals&quot;].
         { # Category represents catalog item category hierarchy.
           &quot;categories&quot;: [ # Required. Catalog item categories. Each category should be a UTF-8 encoded string with a length limit of 2 KiB. Note that the order in the list denotes the specificity (from least to most specific).
             &quot;A String&quot;,
@@ -186,7 +186,7 @@
           &quot;a_key&quot;: 3.14,
         },
       },
-      &quot;searchQuery&quot;: &quot;A String&quot;, # Required for `search` events. Other event types should not set this field. The user&#x27;s search query as UTF-8 encoded text with a length limit of 5 KiB.
+      &quot;searchQuery&quot;: &quot;A String&quot;, # At least one of search_query or page_categories is required for `search` events. Other event types should not set this field. The user&#x27;s search query as UTF-8 encoded text with a length limit of 5 KiB.
     },
     &quot;userInfo&quot;: { # Information of end users. # Required. User information.
       &quot;directUserRequest&quot;: True or False, # Optional. Indicates if the request is made directly from the end user in which case the user_agent and ip_address fields can be populated from the HTTP request. This should *not* be set when using the javascript pixel. This flag should be set only if the API request is made directly from the end user such as a mobile app (and not if a gateway or a server is processing and pushing the user events).
diff --git a/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.eventStores.predictionApiKeyRegistrations.html b/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.eventStores.predictionApiKeyRegistrations.html
index eb60fec..9812564 100644
--- a/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.eventStores.predictionApiKeyRegistrations.html
+++ b/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.eventStores.predictionApiKeyRegistrations.html
@@ -72,7 +72,7 @@
 
 </style>
 
-<h1><a href="recommendationengine_v1beta1.html">Recommendations AI</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a> . <a href="recommendationengine_v1beta1.projects.locations.html">locations</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.html">catalogs</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.html">eventStores</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.predictionApiKeyRegistrations.html">predictionApiKeyRegistrations</a></h1>
+<h1><a href="recommendationengine_v1beta1.html">Recommendations AI (Beta)</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a> . <a href="recommendationengine_v1beta1.projects.locations.html">locations</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.html">catalogs</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.html">eventStores</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.predictionApiKeyRegistrations.html">predictionApiKeyRegistrations</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="#close">close()</a></code></p>
diff --git a/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.eventStores.userEvents.html b/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.eventStores.userEvents.html
index 3f015ad..f337eca 100644
--- a/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.eventStores.userEvents.html
+++ b/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.eventStores.userEvents.html
@@ -72,7 +72,7 @@
 
 </style>
 
-<h1><a href="recommendationengine_v1beta1.html">Recommendations AI</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a> . <a href="recommendationengine_v1beta1.projects.locations.html">locations</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.html">catalogs</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.html">eventStores</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.userEvents.html">userEvents</a></h1>
+<h1><a href="recommendationengine_v1beta1.html">Recommendations AI (Beta)</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a> . <a href="recommendationengine_v1beta1.projects.locations.html">locations</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.html">catalogs</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.html">eventStores</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.eventStores.userEvents.html">userEvents</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="#close">close()</a></code></p>
@@ -254,7 +254,7 @@
           &quot;productEventDetail&quot;: { # ProductEventDetail captures user event information specific to retail products. # Optional. Retail product specific user event metadata. This field is required for the following event types: * `add-to-cart` * `add-to-list` * `category-page-view` * `checkout-start` * `detail-page-view` * `purchase-complete` * `refund` * `remove-from-cart` * `remove-from-list` * `search` This field is optional for the following event types: * `page-visit` * `shopping-cart-page-view` - note that &#x27;product_event_detail&#x27; should be set for this unless the shopping cart is empty. This field is not allowed for the following event types: * `home-page-view`
             &quot;cartId&quot;: &quot;A String&quot;, # Optional. The id or name of the associated shopping cart. This id is used to associate multiple items added or present in the cart before purchase. This can only be set for `add-to-cart`, `remove-from-cart`, `checkout-start`, `purchase-complete`, or `shopping-cart-page-view` events.
             &quot;listId&quot;: &quot;A String&quot;, # Required for `add-to-list` and `remove-from-list` events. The id or name of the list that the item is being added to or removed from. Other event types should not set this field.
-            &quot;pageCategories&quot;: [ # Required for `category-page-view` events. Other event types should not set this field. The categories associated with a category page. Category pages include special pages such as sales or promotions. For instance, a special sale page may have the category hierarchy: categories : [&quot;Sales&quot;, &quot;2017 Black Friday Deals&quot;].
+            &quot;pageCategories&quot;: [ # Required for `category-page-view` events. At least one of search_query or page_categories is required for `search` events. Other event types should not set this field. The categories associated with a category page. Category pages include special pages such as sales or promotions. For instance, a special sale page may have the category hierarchy: categories : [&quot;Sales&quot;, &quot;2017 Black Friday Deals&quot;].
               { # Category represents catalog item category hierarchy.
                 &quot;categories&quot;: [ # Required. Catalog item categories. Each category should be a UTF-8 encoded string with a length limit of 2 KiB. Note that the order in the list denotes the specificity (from least to most specific).
                   &quot;A String&quot;,
@@ -299,7 +299,7 @@
                 &quot;a_key&quot;: 3.14,
               },
             },
-            &quot;searchQuery&quot;: &quot;A String&quot;, # Required for `search` events. Other event types should not set this field. The user&#x27;s search query as UTF-8 encoded text with a length limit of 5 KiB.
+            &quot;searchQuery&quot;: &quot;A String&quot;, # At least one of search_query or page_categories is required for `search` events. Other event types should not set this field. The user&#x27;s search query as UTF-8 encoded text with a length limit of 5 KiB.
           },
           &quot;userInfo&quot;: { # Information of end users. # Required. User information.
             &quot;directUserRequest&quot;: True or False, # Optional. Indicates if the request is made directly from the end user in which case the user_agent and ip_address fields can be populated from the HTTP request. This should *not* be set when using the javascript pixel. This flag should be set only if the API request is made directly from the end user such as a mobile app (and not if a gateway or a server is processing and pushing the user events).
@@ -396,7 +396,7 @@
       &quot;productEventDetail&quot;: { # ProductEventDetail captures user event information specific to retail products. # Optional. Retail product specific user event metadata. This field is required for the following event types: * `add-to-cart` * `add-to-list` * `category-page-view` * `checkout-start` * `detail-page-view` * `purchase-complete` * `refund` * `remove-from-cart` * `remove-from-list` * `search` This field is optional for the following event types: * `page-visit` * `shopping-cart-page-view` - note that &#x27;product_event_detail&#x27; should be set for this unless the shopping cart is empty. This field is not allowed for the following event types: * `home-page-view`
         &quot;cartId&quot;: &quot;A String&quot;, # Optional. The id or name of the associated shopping cart. This id is used to associate multiple items added or present in the cart before purchase. This can only be set for `add-to-cart`, `remove-from-cart`, `checkout-start`, `purchase-complete`, or `shopping-cart-page-view` events.
         &quot;listId&quot;: &quot;A String&quot;, # Required for `add-to-list` and `remove-from-list` events. The id or name of the list that the item is being added to or removed from. Other event types should not set this field.
-        &quot;pageCategories&quot;: [ # Required for `category-page-view` events. Other event types should not set this field. The categories associated with a category page. Category pages include special pages such as sales or promotions. For instance, a special sale page may have the category hierarchy: categories : [&quot;Sales&quot;, &quot;2017 Black Friday Deals&quot;].
+        &quot;pageCategories&quot;: [ # Required for `category-page-view` events. At least one of search_query or page_categories is required for `search` events. Other event types should not set this field. The categories associated with a category page. Category pages include special pages such as sales or promotions. For instance, a special sale page may have the category hierarchy: categories : [&quot;Sales&quot;, &quot;2017 Black Friday Deals&quot;].
           { # Category represents catalog item category hierarchy.
             &quot;categories&quot;: [ # Required. Catalog item categories. Each category should be a UTF-8 encoded string with a length limit of 2 KiB. Note that the order in the list denotes the specificity (from least to most specific).
               &quot;A String&quot;,
@@ -441,7 +441,7 @@
             &quot;a_key&quot;: 3.14,
           },
         },
-        &quot;searchQuery&quot;: &quot;A String&quot;, # Required for `search` events. Other event types should not set this field. The user&#x27;s search query as UTF-8 encoded text with a length limit of 5 KiB.
+        &quot;searchQuery&quot;: &quot;A String&quot;, # At least one of search_query or page_categories is required for `search` events. Other event types should not set this field. The user&#x27;s search query as UTF-8 encoded text with a length limit of 5 KiB.
       },
       &quot;userInfo&quot;: { # Information of end users. # Required. User information.
         &quot;directUserRequest&quot;: True or False, # Optional. Indicates if the request is made directly from the end user in which case the user_agent and ip_address fields can be populated from the HTTP request. This should *not* be set when using the javascript pixel. This flag should be set only if the API request is made directly from the end user such as a mobile app (and not if a gateway or a server is processing and pushing the user events).
@@ -595,7 +595,7 @@
   &quot;productEventDetail&quot;: { # ProductEventDetail captures user event information specific to retail products. # Optional. Retail product specific user event metadata. This field is required for the following event types: * `add-to-cart` * `add-to-list` * `category-page-view` * `checkout-start` * `detail-page-view` * `purchase-complete` * `refund` * `remove-from-cart` * `remove-from-list` * `search` This field is optional for the following event types: * `page-visit` * `shopping-cart-page-view` - note that &#x27;product_event_detail&#x27; should be set for this unless the shopping cart is empty. This field is not allowed for the following event types: * `home-page-view`
     &quot;cartId&quot;: &quot;A String&quot;, # Optional. The id or name of the associated shopping cart. This id is used to associate multiple items added or present in the cart before purchase. This can only be set for `add-to-cart`, `remove-from-cart`, `checkout-start`, `purchase-complete`, or `shopping-cart-page-view` events.
     &quot;listId&quot;: &quot;A String&quot;, # Required for `add-to-list` and `remove-from-list` events. The id or name of the list that the item is being added to or removed from. Other event types should not set this field.
-    &quot;pageCategories&quot;: [ # Required for `category-page-view` events. Other event types should not set this field. The categories associated with a category page. Category pages include special pages such as sales or promotions. For instance, a special sale page may have the category hierarchy: categories : [&quot;Sales&quot;, &quot;2017 Black Friday Deals&quot;].
+    &quot;pageCategories&quot;: [ # Required for `category-page-view` events. At least one of search_query or page_categories is required for `search` events. Other event types should not set this field. The categories associated with a category page. Category pages include special pages such as sales or promotions. For instance, a special sale page may have the category hierarchy: categories : [&quot;Sales&quot;, &quot;2017 Black Friday Deals&quot;].
       { # Category represents catalog item category hierarchy.
         &quot;categories&quot;: [ # Required. Catalog item categories. Each category should be a UTF-8 encoded string with a length limit of 2 KiB. Note that the order in the list denotes the specificity (from least to most specific).
           &quot;A String&quot;,
@@ -640,7 +640,7 @@
         &quot;a_key&quot;: 3.14,
       },
     },
-    &quot;searchQuery&quot;: &quot;A String&quot;, # Required for `search` events. Other event types should not set this field. The user&#x27;s search query as UTF-8 encoded text with a length limit of 5 KiB.
+    &quot;searchQuery&quot;: &quot;A String&quot;, # At least one of search_query or page_categories is required for `search` events. Other event types should not set this field. The user&#x27;s search query as UTF-8 encoded text with a length limit of 5 KiB.
   },
   &quot;userInfo&quot;: { # Information of end users. # Required. User information.
     &quot;directUserRequest&quot;: True or False, # Optional. Indicates if the request is made directly from the end user in which case the user_agent and ip_address fields can be populated from the HTTP request. This should *not* be set when using the javascript pixel. This flag should be set only if the API request is made directly from the end user such as a mobile app (and not if a gateway or a server is processing and pushing the user events).
@@ -691,7 +691,7 @@
   &quot;productEventDetail&quot;: { # ProductEventDetail captures user event information specific to retail products. # Optional. Retail product specific user event metadata. This field is required for the following event types: * `add-to-cart` * `add-to-list` * `category-page-view` * `checkout-start` * `detail-page-view` * `purchase-complete` * `refund` * `remove-from-cart` * `remove-from-list` * `search` This field is optional for the following event types: * `page-visit` * `shopping-cart-page-view` - note that &#x27;product_event_detail&#x27; should be set for this unless the shopping cart is empty. This field is not allowed for the following event types: * `home-page-view`
     &quot;cartId&quot;: &quot;A String&quot;, # Optional. The id or name of the associated shopping cart. This id is used to associate multiple items added or present in the cart before purchase. This can only be set for `add-to-cart`, `remove-from-cart`, `checkout-start`, `purchase-complete`, or `shopping-cart-page-view` events.
     &quot;listId&quot;: &quot;A String&quot;, # Required for `add-to-list` and `remove-from-list` events. The id or name of the list that the item is being added to or removed from. Other event types should not set this field.
-    &quot;pageCategories&quot;: [ # Required for `category-page-view` events. Other event types should not set this field. The categories associated with a category page. Category pages include special pages such as sales or promotions. For instance, a special sale page may have the category hierarchy: categories : [&quot;Sales&quot;, &quot;2017 Black Friday Deals&quot;].
+    &quot;pageCategories&quot;: [ # Required for `category-page-view` events. At least one of search_query or page_categories is required for `search` events. Other event types should not set this field. The categories associated with a category page. Category pages include special pages such as sales or promotions. For instance, a special sale page may have the category hierarchy: categories : [&quot;Sales&quot;, &quot;2017 Black Friday Deals&quot;].
       { # Category represents catalog item category hierarchy.
         &quot;categories&quot;: [ # Required. Catalog item categories. Each category should be a UTF-8 encoded string with a length limit of 2 KiB. Note that the order in the list denotes the specificity (from least to most specific).
           &quot;A String&quot;,
@@ -736,7 +736,7 @@
         &quot;a_key&quot;: 3.14,
       },
     },
-    &quot;searchQuery&quot;: &quot;A String&quot;, # Required for `search` events. Other event types should not set this field. The user&#x27;s search query as UTF-8 encoded text with a length limit of 5 KiB.
+    &quot;searchQuery&quot;: &quot;A String&quot;, # At least one of search_query or page_categories is required for `search` events. Other event types should not set this field. The user&#x27;s search query as UTF-8 encoded text with a length limit of 5 KiB.
   },
   &quot;userInfo&quot;: { # Information of end users. # Required. User information.
     &quot;directUserRequest&quot;: True or False, # Optional. Indicates if the request is made directly from the end user in which case the user_agent and ip_address fields can be populated from the HTTP request. This should *not* be set when using the javascript pixel. This flag should be set only if the API request is made directly from the end user such as a mobile app (and not if a gateway or a server is processing and pushing the user events).
diff --git a/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.html b/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.html
index 882f9f4..85e3aa4 100644
--- a/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.html
+++ b/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.html
@@ -72,7 +72,7 @@
 
 </style>
 
-<h1><a href="recommendationengine_v1beta1.html">Recommendations AI</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a> . <a href="recommendationengine_v1beta1.projects.locations.html">locations</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.html">catalogs</a></h1>
+<h1><a href="recommendationengine_v1beta1.html">Recommendations AI (Beta)</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a> . <a href="recommendationengine_v1beta1.projects.locations.html">locations</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.html">catalogs</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="recommendationengine_v1beta1.projects.locations.catalogs.catalogItems.html">catalogItems()</a></code>
diff --git a/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.operations.html b/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.operations.html
index d345de6..eb91e79 100644
--- a/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.operations.html
+++ b/docs/dyn/recommendationengine_v1beta1.projects.locations.catalogs.operations.html
@@ -72,7 +72,7 @@
 
 </style>
 
-<h1><a href="recommendationengine_v1beta1.html">Recommendations AI</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a> . <a href="recommendationengine_v1beta1.projects.locations.html">locations</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.html">catalogs</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.operations.html">operations</a></h1>
+<h1><a href="recommendationengine_v1beta1.html">Recommendations AI (Beta)</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a> . <a href="recommendationengine_v1beta1.projects.locations.html">locations</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.html">catalogs</a> . <a href="recommendationengine_v1beta1.projects.locations.catalogs.operations.html">operations</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="#close">close()</a></code></p>
diff --git a/docs/dyn/recommendationengine_v1beta1.projects.locations.html b/docs/dyn/recommendationengine_v1beta1.projects.locations.html
index 5ae0cc0..3a760e2 100644
--- a/docs/dyn/recommendationengine_v1beta1.projects.locations.html
+++ b/docs/dyn/recommendationengine_v1beta1.projects.locations.html
@@ -72,7 +72,7 @@
 
 </style>
 
-<h1><a href="recommendationengine_v1beta1.html">Recommendations AI</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a> . <a href="recommendationengine_v1beta1.projects.locations.html">locations</a></h1>
+<h1><a href="recommendationengine_v1beta1.html">Recommendations AI (Beta)</a> . <a href="recommendationengine_v1beta1.projects.html">projects</a> . <a href="recommendationengine_v1beta1.projects.locations.html">locations</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="recommendationengine_v1beta1.projects.locations.catalogs.html">catalogs()</a></code>
diff --git a/docs/dyn/recommender_v1.billingAccounts.locations.recommenders.recommendations.html b/docs/dyn/recommender_v1.billingAccounts.locations.recommenders.recommendations.html
index bdbdc52..3e106fb 100644
--- a/docs/dyn/recommender_v1.billingAccounts.locations.recommenders.recommendations.html
+++ b/docs/dyn/recommender_v1.billingAccounts.locations.recommenders.recommendations.html
@@ -144,7 +144,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -236,7 +236,7 @@
                 &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
                   &quot;a_key&quot;: &quot;&quot;,
                 },
-                &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+                &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
                   &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                     &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
                   },
@@ -348,7 +348,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -444,7 +444,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -540,7 +540,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
diff --git a/docs/dyn/recommender_v1.folders.locations.recommenders.recommendations.html b/docs/dyn/recommender_v1.folders.locations.recommenders.recommendations.html
index ac6762e..68471ec 100644
--- a/docs/dyn/recommender_v1.folders.locations.recommenders.recommendations.html
+++ b/docs/dyn/recommender_v1.folders.locations.recommenders.recommendations.html
@@ -144,7 +144,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -236,7 +236,7 @@
                 &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
                   &quot;a_key&quot;: &quot;&quot;,
                 },
-                &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+                &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
                   &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                     &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
                   },
@@ -348,7 +348,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -444,7 +444,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -540,7 +540,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
diff --git a/docs/dyn/recommender_v1.organizations.locations.recommenders.recommendations.html b/docs/dyn/recommender_v1.organizations.locations.recommenders.recommendations.html
index 40bb2b8..0959136 100644
--- a/docs/dyn/recommender_v1.organizations.locations.recommenders.recommendations.html
+++ b/docs/dyn/recommender_v1.organizations.locations.recommenders.recommendations.html
@@ -144,7 +144,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -236,7 +236,7 @@
                 &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
                   &quot;a_key&quot;: &quot;&quot;,
                 },
-                &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+                &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
                   &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                     &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
                   },
@@ -348,7 +348,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -444,7 +444,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -540,7 +540,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
diff --git a/docs/dyn/recommender_v1.projects.locations.recommenders.recommendations.html b/docs/dyn/recommender_v1.projects.locations.recommenders.recommendations.html
index d9cb7a9..d66b26b 100644
--- a/docs/dyn/recommender_v1.projects.locations.recommenders.recommendations.html
+++ b/docs/dyn/recommender_v1.projects.locations.recommenders.recommendations.html
@@ -144,7 +144,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -236,7 +236,7 @@
                 &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
                   &quot;a_key&quot;: &quot;&quot;,
                 },
-                &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+                &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
                   &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                     &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
                   },
@@ -348,7 +348,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -444,7 +444,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -540,7 +540,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
diff --git a/docs/dyn/recommender_v1beta1.billingAccounts.locations.recommenders.recommendations.html b/docs/dyn/recommender_v1beta1.billingAccounts.locations.recommenders.recommendations.html
index 188e32e..0e0a5f7 100644
--- a/docs/dyn/recommender_v1beta1.billingAccounts.locations.recommenders.recommendations.html
+++ b/docs/dyn/recommender_v1beta1.billingAccounts.locations.recommenders.recommendations.html
@@ -144,7 +144,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -236,7 +236,7 @@
                 &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
                   &quot;a_key&quot;: &quot;&quot;,
                 },
-                &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+                &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
                   &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                     &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
                   },
@@ -348,7 +348,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -444,7 +444,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -540,7 +540,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
diff --git a/docs/dyn/recommender_v1beta1.folders.locations.recommenders.recommendations.html b/docs/dyn/recommender_v1beta1.folders.locations.recommenders.recommendations.html
index a2a7760..6c762ba 100644
--- a/docs/dyn/recommender_v1beta1.folders.locations.recommenders.recommendations.html
+++ b/docs/dyn/recommender_v1beta1.folders.locations.recommenders.recommendations.html
@@ -144,7 +144,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -236,7 +236,7 @@
                 &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
                   &quot;a_key&quot;: &quot;&quot;,
                 },
-                &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+                &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
                   &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                     &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
                   },
@@ -348,7 +348,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -444,7 +444,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -540,7 +540,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
diff --git a/docs/dyn/recommender_v1beta1.organizations.locations.recommenders.recommendations.html b/docs/dyn/recommender_v1beta1.organizations.locations.recommenders.recommendations.html
index c3990c1..29db5e8 100644
--- a/docs/dyn/recommender_v1beta1.organizations.locations.recommenders.recommendations.html
+++ b/docs/dyn/recommender_v1beta1.organizations.locations.recommenders.recommendations.html
@@ -144,7 +144,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -236,7 +236,7 @@
                 &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
                   &quot;a_key&quot;: &quot;&quot;,
                 },
-                &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+                &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
                   &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                     &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
                   },
@@ -348,7 +348,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -444,7 +444,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -540,7 +540,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
diff --git a/docs/dyn/recommender_v1beta1.projects.locations.recommenders.recommendations.html b/docs/dyn/recommender_v1beta1.projects.locations.recommenders.recommendations.html
index 94cfee1..23c4f72 100644
--- a/docs/dyn/recommender_v1beta1.projects.locations.recommenders.recommendations.html
+++ b/docs/dyn/recommender_v1beta1.projects.locations.recommenders.recommendations.html
@@ -144,7 +144,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -236,7 +236,7 @@
                 &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
                   &quot;a_key&quot;: &quot;&quot;,
                 },
-                &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+                &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
                   &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                     &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
                   },
@@ -348,7 +348,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -444,7 +444,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
@@ -540,7 +540,7 @@
             &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array elements in order to narrow down to a single unique element that is being tested/modified. This is intended to be an exact match per filter. To perform advanced matching, use path_value_matchers. * Example: { &quot;/versions/*/name&quot; : &quot;it-123&quot; &quot;/versions/*/targetSize/percent&quot;: 20 } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/condition&quot; : null } * Example: { &quot;/bindings/*/role&quot;: &quot;roles/owner&quot; &quot;/bindings/*/members/*&quot; : [&quot;x@example.com&quot;, &quot;y@example.com&quot;] } When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: &quot;&quot;,
             },
-            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
+            &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.
               &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                 &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be used with RE2::FullMatch
               },
diff --git a/docs/dyn/redis_v1.projects.locations.instances.html b/docs/dyn/redis_v1.projects.locations.instances.html
index 0ee0092..19ca7f2 100644
--- a/docs/dyn/redis_v1.projects.locations.instances.html
+++ b/docs/dyn/redis_v1.projects.locations.instances.html
@@ -145,7 +145,7 @@
   &quot;redisConfigs&quot;: { # Optional. Redis configuration parameters, according to http://redis.io/topics/config. Currently, the only supported parameters are: Redis version 3.2 and newer: * maxmemory-policy * notify-keyspace-events Redis version 4.0 and newer: * activedefrag * lfu-decay-time * lfu-log-factor * maxmemory-gb Redis version 5.0 and newer: * stream-node-max-bytes * stream-node-max-entries
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;redisVersion&quot;: &quot;A String&quot;, # Optional. The version of Redis software. If not provided, latest supported version will be used. Currently, the supported values are: * `REDIS_3_2` for Redis 3.2 compatibility * `REDIS_4_0` for Redis 4.0 compatibility (default) * `REDIS_5_0` for Redis 5.0 compatibility
+  &quot;redisVersion&quot;: &quot;A String&quot;, # Optional. The version of Redis software. If not provided, latest supported version will be used. Currently, the supported values are: * `REDIS_3_2` for Redis 3.2 compatibility * `REDIS_4_0` for Redis 4.0 compatibility (default) * `REDIS_5_0` for Redis 5.0 compatibility * `REDIS_6_0` for Redis 6.0 compatibility
   &quot;reservedIpRange&quot;: &quot;A String&quot;, # Optional. The CIDR range of internal addresses that are reserved for this instance. If not provided, the service will choose an unused /29 block, for example, 10.0.0.0/29 or 192.168.0.0/29. Ranges must be unique and non-overlapping with existing subnets in an authorized network.
   &quot;serverCaCerts&quot;: [ # Output only. List of server CA certificates for the instance.
     { # TlsCertificate Resource
@@ -159,7 +159,7 @@
   &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of this instance.
   &quot;statusMessage&quot;: &quot;A String&quot;, # Output only. Additional information about the current status of this instance, if available.
   &quot;tier&quot;: &quot;A String&quot;, # Required. The service tier of the instance.
-  &quot;transitEncryptionMode&quot;: &quot;A String&quot;, # Optional. The In-transit encryption mode of Redis instance. If not provided, in-transit encryption is disabled for instance.
+  &quot;transitEncryptionMode&quot;: &quot;A String&quot;, # Optional. The TLS mode of the Redis instance. If not provided, TLS is disabled for the instance.
 }
 
   instanceId: string, Required. The logical name of the Redis instance in the customer project with the following restrictions: * Must contain only lowercase letters, numbers, and hyphens. * Must start with a letter. * Must be between 1-40 characters. * Must end with a number or a letter. * Must be unique within the customer project / location
@@ -349,7 +349,7 @@
   &quot;redisConfigs&quot;: { # Optional. Redis configuration parameters, according to http://redis.io/topics/config. Currently, the only supported parameters are: Redis version 3.2 and newer: * maxmemory-policy * notify-keyspace-events Redis version 4.0 and newer: * activedefrag * lfu-decay-time * lfu-log-factor * maxmemory-gb Redis version 5.0 and newer: * stream-node-max-bytes * stream-node-max-entries
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;redisVersion&quot;: &quot;A String&quot;, # Optional. The version of Redis software. If not provided, latest supported version will be used. Currently, the supported values are: * `REDIS_3_2` for Redis 3.2 compatibility * `REDIS_4_0` for Redis 4.0 compatibility (default) * `REDIS_5_0` for Redis 5.0 compatibility
+  &quot;redisVersion&quot;: &quot;A String&quot;, # Optional. The version of Redis software. If not provided, latest supported version will be used. Currently, the supported values are: * `REDIS_3_2` for Redis 3.2 compatibility * `REDIS_4_0` for Redis 4.0 compatibility (default) * `REDIS_5_0` for Redis 5.0 compatibility * `REDIS_6_0` for Redis 6.0 compatibility
   &quot;reservedIpRange&quot;: &quot;A String&quot;, # Optional. The CIDR range of internal addresses that are reserved for this instance. If not provided, the service will choose an unused /29 block, for example, 10.0.0.0/29 or 192.168.0.0/29. Ranges must be unique and non-overlapping with existing subnets in an authorized network.
   &quot;serverCaCerts&quot;: [ # Output only. List of server CA certificates for the instance.
     { # TlsCertificate Resource
@@ -363,7 +363,7 @@
   &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of this instance.
   &quot;statusMessage&quot;: &quot;A String&quot;, # Output only. Additional information about the current status of this instance, if available.
   &quot;tier&quot;: &quot;A String&quot;, # Required. The service tier of the instance.
-  &quot;transitEncryptionMode&quot;: &quot;A String&quot;, # Optional. The In-transit encryption mode of Redis instance. If not provided, in-transit encryption is disabled for instance.
+  &quot;transitEncryptionMode&quot;: &quot;A String&quot;, # Optional. The TLS mode of the Redis instance. If not provided, TLS is disabled for the instance.
 }</pre>
 </div>
 
@@ -470,7 +470,7 @@
       &quot;redisConfigs&quot;: { # Optional. Redis configuration parameters, according to http://redis.io/topics/config. Currently, the only supported parameters are: Redis version 3.2 and newer: * maxmemory-policy * notify-keyspace-events Redis version 4.0 and newer: * activedefrag * lfu-decay-time * lfu-log-factor * maxmemory-gb Redis version 5.0 and newer: * stream-node-max-bytes * stream-node-max-entries
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;redisVersion&quot;: &quot;A String&quot;, # Optional. The version of Redis software. If not provided, latest supported version will be used. Currently, the supported values are: * `REDIS_3_2` for Redis 3.2 compatibility * `REDIS_4_0` for Redis 4.0 compatibility (default) * `REDIS_5_0` for Redis 5.0 compatibility
+      &quot;redisVersion&quot;: &quot;A String&quot;, # Optional. The version of Redis software. If not provided, latest supported version will be used. Currently, the supported values are: * `REDIS_3_2` for Redis 3.2 compatibility * `REDIS_4_0` for Redis 4.0 compatibility (default) * `REDIS_5_0` for Redis 5.0 compatibility * `REDIS_6_0` for Redis 6.0 compatibility
       &quot;reservedIpRange&quot;: &quot;A String&quot;, # Optional. The CIDR range of internal addresses that are reserved for this instance. If not provided, the service will choose an unused /29 block, for example, 10.0.0.0/29 or 192.168.0.0/29. Ranges must be unique and non-overlapping with existing subnets in an authorized network.
       &quot;serverCaCerts&quot;: [ # Output only. List of server CA certificates for the instance.
         { # TlsCertificate Resource
@@ -484,7 +484,7 @@
       &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of this instance.
       &quot;statusMessage&quot;: &quot;A String&quot;, # Output only. Additional information about the current status of this instance, if available.
       &quot;tier&quot;: &quot;A String&quot;, # Required. The service tier of the instance.
-      &quot;transitEncryptionMode&quot;: &quot;A String&quot;, # Optional. The In-transit encryption mode of Redis instance. If not provided, in-transit encryption is disabled for instance.
+      &quot;transitEncryptionMode&quot;: &quot;A String&quot;, # Optional. The TLS mode of the Redis instance. If not provided, TLS is disabled for the instance.
     },
   ],
   &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more results in the list.
@@ -537,7 +537,7 @@
   &quot;redisConfigs&quot;: { # Optional. Redis configuration parameters, according to http://redis.io/topics/config. Currently, the only supported parameters are: Redis version 3.2 and newer: * maxmemory-policy * notify-keyspace-events Redis version 4.0 and newer: * activedefrag * lfu-decay-time * lfu-log-factor * maxmemory-gb Redis version 5.0 and newer: * stream-node-max-bytes * stream-node-max-entries
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;redisVersion&quot;: &quot;A String&quot;, # Optional. The version of Redis software. If not provided, latest supported version will be used. Currently, the supported values are: * `REDIS_3_2` for Redis 3.2 compatibility * `REDIS_4_0` for Redis 4.0 compatibility (default) * `REDIS_5_0` for Redis 5.0 compatibility
+  &quot;redisVersion&quot;: &quot;A String&quot;, # Optional. The version of Redis software. If not provided, latest supported version will be used. Currently, the supported values are: * `REDIS_3_2` for Redis 3.2 compatibility * `REDIS_4_0` for Redis 4.0 compatibility (default) * `REDIS_5_0` for Redis 5.0 compatibility * `REDIS_6_0` for Redis 6.0 compatibility
   &quot;reservedIpRange&quot;: &quot;A String&quot;, # Optional. The CIDR range of internal addresses that are reserved for this instance. If not provided, the service will choose an unused /29 block, for example, 10.0.0.0/29 or 192.168.0.0/29. Ranges must be unique and non-overlapping with existing subnets in an authorized network.
   &quot;serverCaCerts&quot;: [ # Output only. List of server CA certificates for the instance.
     { # TlsCertificate Resource
@@ -551,7 +551,7 @@
   &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of this instance.
   &quot;statusMessage&quot;: &quot;A String&quot;, # Output only. Additional information about the current status of this instance, if available.
   &quot;tier&quot;: &quot;A String&quot;, # Required. The service tier of the instance.
-  &quot;transitEncryptionMode&quot;: &quot;A String&quot;, # Optional. The In-transit encryption mode of Redis instance. If not provided, in-transit encryption is disabled for instance.
+  &quot;transitEncryptionMode&quot;: &quot;A String&quot;, # Optional. The TLS mode of the Redis instance. If not provided, TLS is disabled for the instance.
 }
 
   updateMask: string, Required. Mask of fields to update. At least one path must be supplied in this field. The elements of the repeated paths field may only include these fields from Instance: * `displayName` * `labels` * `memorySizeGb` * `redisConfig`
diff --git a/docs/dyn/redis_v1beta1.projects.locations.instances.html b/docs/dyn/redis_v1beta1.projects.locations.instances.html
index 31c20bc..b8ca57f 100644
--- a/docs/dyn/redis_v1beta1.projects.locations.instances.html
+++ b/docs/dyn/redis_v1beta1.projects.locations.instances.html
@@ -159,7 +159,7 @@
   &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of this instance.
   &quot;statusMessage&quot;: &quot;A String&quot;, # Output only. Additional information about the current status of this instance, if available.
   &quot;tier&quot;: &quot;A String&quot;, # Required. The service tier of the instance.
-  &quot;transitEncryptionMode&quot;: &quot;A String&quot;, # Optional. The In-transit encryption mode of Redis instance. If not provided, in-transit encryption is disabled for instance.
+  &quot;transitEncryptionMode&quot;: &quot;A String&quot;, # Optional. The TLS mode of the Redis instance. If not provided, TLS is disabled for the instance.
 }
 
   instanceId: string, Required. The logical name of the Redis instance in the customer project with the following restrictions: * Must contain only lowercase letters, numbers, and hyphens. * Must start with a letter. * Must be between 1-40 characters. * Must end with a number or a letter. * Must be unique within the customer project / location
@@ -363,7 +363,7 @@
   &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of this instance.
   &quot;statusMessage&quot;: &quot;A String&quot;, # Output only. Additional information about the current status of this instance, if available.
   &quot;tier&quot;: &quot;A String&quot;, # Required. The service tier of the instance.
-  &quot;transitEncryptionMode&quot;: &quot;A String&quot;, # Optional. The In-transit encryption mode of Redis instance. If not provided, in-transit encryption is disabled for instance.
+  &quot;transitEncryptionMode&quot;: &quot;A String&quot;, # Optional. The TLS mode of the Redis instance. If not provided, TLS is disabled for the instance.
 }</pre>
 </div>
 
@@ -484,7 +484,7 @@
       &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of this instance.
       &quot;statusMessage&quot;: &quot;A String&quot;, # Output only. Additional information about the current status of this instance, if available.
       &quot;tier&quot;: &quot;A String&quot;, # Required. The service tier of the instance.
-      &quot;transitEncryptionMode&quot;: &quot;A String&quot;, # Optional. The In-transit encryption mode of Redis instance. If not provided, in-transit encryption is disabled for instance.
+      &quot;transitEncryptionMode&quot;: &quot;A String&quot;, # Optional. The TLS mode of the Redis instance. If not provided, TLS is disabled for the instance.
     },
   ],
   &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more results in the list.
@@ -551,7 +551,7 @@
   &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of this instance.
   &quot;statusMessage&quot;: &quot;A String&quot;, # Output only. Additional information about the current status of this instance, if available.
   &quot;tier&quot;: &quot;A String&quot;, # Required. The service tier of the instance.
-  &quot;transitEncryptionMode&quot;: &quot;A String&quot;, # Optional. The In-transit encryption mode of Redis instance. If not provided, in-transit encryption is disabled for instance.
+  &quot;transitEncryptionMode&quot;: &quot;A String&quot;, # Optional. The TLS mode of the Redis instance. If not provided, TLS is disabled for the instance.
 }
 
   updateMask: string, Required. Mask of fields to update. At least one path must be supplied in this field. The elements of the repeated paths field may only include these fields from Instance: * `displayName` * `labels` * `memorySizeGb` * `redisConfig`
diff --git a/docs/dyn/script_v1.scripts.html b/docs/dyn/script_v1.scripts.html
index a02bdb5..7bbf090 100644
--- a/docs/dyn/script_v1.scripts.html
+++ b/docs/dyn/script_v1.scripts.html
@@ -79,7 +79,7 @@
 <p class="firstline">Close httplib2 connections.</p>
 <p class="toc_element">
   <code><a href="#run">run(scriptId, body=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Runs a function in an Apps Script project. The script project must be deployed for use with the Apps Script API and the calling application must share the same Cloud Platform project. This method requires authorization with an OAuth 2.0 token that includes at least one of the scopes listed in the [Authorization](#authorization-scopes) section; script projects that do not require authorization cannot be executed through this API. To find the correct scopes to include in the authentication token, open the project in the script editor, then select **File > Project properties** and click the **Scopes** tab. The error `403, PERMISSION_DENIED: The caller does not have permission` indicates that the Cloud Platform project used to authorize the request is not the same as the one used by the script.</p>
+<p class="firstline">Runs a function in an Apps Script project. The script project must be deployed for use with the Apps Script API and the calling application must share the same Cloud Platform project. This method requires authorization with an OAuth 2.0 token that includes at least one of the scopes listed in the [Authorization](#authorization-scopes) section; script projects that do not require authorization cannot be executed through this API. To find the correct scopes to include in the authentication token, open the script project **Overview** page and scroll down to "Project OAuth Scopes." The error `403, PERMISSION_DENIED: The caller does not have permission` indicates that the Cloud Platform project used to authorize the request is not the same as the one used by the script.</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="close">close()</code>
@@ -88,10 +88,10 @@
 
 <div class="method">
     <code class="details" id="run">run(scriptId, body=None, x__xgafv=None)</code>
-  <pre>Runs a function in an Apps Script project. The script project must be deployed for use with the Apps Script API and the calling application must share the same Cloud Platform project. This method requires authorization with an OAuth 2.0 token that includes at least one of the scopes listed in the [Authorization](#authorization-scopes) section; script projects that do not require authorization cannot be executed through this API. To find the correct scopes to include in the authentication token, open the project in the script editor, then select **File &gt; Project properties** and click the **Scopes** tab. The error `403, PERMISSION_DENIED: The caller does not have permission` indicates that the Cloud Platform project used to authorize the request is not the same as the one used by the script.
+  <pre>Runs a function in an Apps Script project. The script project must be deployed for use with the Apps Script API and the calling application must share the same Cloud Platform project. This method requires authorization with an OAuth 2.0 token that includes at least one of the scopes listed in the [Authorization](#authorization-scopes) section; script projects that do not require authorization cannot be executed through this API. To find the correct scopes to include in the authentication token, open the script project **Overview** page and scroll down to &quot;Project OAuth Scopes.&quot; The error `403, PERMISSION_DENIED: The caller does not have permission` indicates that the Cloud Platform project used to authorize the request is not the same as the one used by the script.
 
 Args:
-  scriptId: string, The script ID of the script to be executed. To find the script ID, open the project in the script editor and select **File &gt; Project properties**. (required)
+  scriptId: string, The script ID of the script to be executed. Find the script ID on the **Project settings** page under &quot;IDs.&quot; (required)
   body: object, The request body.
     The object takes the form of:
 
diff --git a/docs/dyn/servicedirectory_v1.html b/docs/dyn/servicedirectory_v1.html
new file mode 100644
index 0000000..4a1cef1
--- /dev/null
+++ b/docs/dyn/servicedirectory_v1.html
@@ -0,0 +1,111 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="servicedirectory_v1.html">Service Directory API</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="servicedirectory_v1.projects.html">projects()</a></code>
+</p>
+<p class="firstline">Returns the projects Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#close">close()</a></code></p>
+<p class="firstline">Close httplib2 connections.</p>
+<p class="toc_element">
+  <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
+<p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="close">close()</code>
+  <pre>Close httplib2 connections.</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="new_batch_http_request">new_batch_http_request()</code>
+  <pre>Create a BatchHttpRequest object based on the discovery document.
+
+        Args:
+          callback: callable, A callback to be called for each response, of the
+            form callback(id, response, exception). The first parameter is the
+            request id, and the second is the deserialized response object. The
+            third is an apiclient.errors.HttpError exception object if an HTTP
+            error occurred while processing the request, or None if no error
+            occurred.
+
+        Returns:
+          A BatchHttpRequest object based on the discovery document.
+        </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/servicedirectory_v1.projects.html b/docs/dyn/servicedirectory_v1.projects.html
new file mode 100644
index 0000000..1320135
--- /dev/null
+++ b/docs/dyn/servicedirectory_v1.projects.html
@@ -0,0 +1,91 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="servicedirectory_v1.html">Service Directory API</a> . <a href="servicedirectory_v1.projects.html">projects</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="servicedirectory_v1.projects.locations.html">locations()</a></code>
+</p>
+<p class="firstline">Returns the locations Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#close">close()</a></code></p>
+<p class="firstline">Close httplib2 connections.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="close">close()</code>
+  <pre>Close httplib2 connections.</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/servicedirectory_v1.projects.locations.html b/docs/dyn/servicedirectory_v1.projects.locations.html
new file mode 100644
index 0000000..ef3818e
--- /dev/null
+++ b/docs/dyn/servicedirectory_v1.projects.locations.html
@@ -0,0 +1,176 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="servicedirectory_v1.html">Service Directory API</a> . <a href="servicedirectory_v1.projects.html">projects</a> . <a href="servicedirectory_v1.projects.locations.html">locations</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="servicedirectory_v1.projects.locations.namespaces.html">namespaces()</a></code>
+</p>
+<p class="firstline">Returns the namespaces Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#close">close()</a></code></p>
+<p class="firstline">Close httplib2 connections.</p>
+<p class="toc_element">
+  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets information about a location.</p>
+<p class="toc_element">
+  <code><a href="#list">list(name, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Lists information about the supported locations for this service.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="close">close()</code>
+  <pre>Close httplib2 connections.</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(name, x__xgafv=None)</code>
+  <pre>Gets information about a location.
+
+Args:
+  name: string, Resource name for the location. (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A resource that represents Google Cloud Platform location.
+  &quot;displayName&quot;: &quot;A String&quot;, # The friendly name for this location, typically a nearby city name. For example, &quot;Tokyo&quot;.
+  &quot;labels&quot;: { # Cross-service attributes for the location. For example {&quot;cloud.googleapis.com/region&quot;: &quot;us-east1&quot;}
+    &quot;a_key&quot;: &quot;A String&quot;,
+  },
+  &quot;locationId&quot;: &quot;A String&quot;, # The canonical id for this location. For example: `&quot;us-east1&quot;`.
+  &quot;metadata&quot;: { # Service-specific metadata. For example the available capacity at the given location.
+    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
+  },
+  &quot;name&quot;: &quot;A String&quot;, # Resource name for the location, which may vary between implementations. For example: `&quot;projects/example-project/locations/us-east1&quot;`
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(name, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
+  <pre>Lists information about the supported locations for this service.
+
+Args:
+  name: string, The resource that owns the locations collection, if applicable. (required)
+  filter: string, The standard list filter.
+  pageSize: integer, The standard list page size.
+  pageToken: string, The standard list page token.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response message for Locations.ListLocations.
+  &quot;locations&quot;: [ # A list of locations that matches the specified filter in the request.
+    { # A resource that represents Google Cloud Platform location.
+      &quot;displayName&quot;: &quot;A String&quot;, # The friendly name for this location, typically a nearby city name. For example, &quot;Tokyo&quot;.
+      &quot;labels&quot;: { # Cross-service attributes for the location. For example {&quot;cloud.googleapis.com/region&quot;: &quot;us-east1&quot;}
+        &quot;a_key&quot;: &quot;A String&quot;,
+      },
+      &quot;locationId&quot;: &quot;A String&quot;, # The canonical id for this location. For example: `&quot;us-east1&quot;`.
+      &quot;metadata&quot;: { # Service-specific metadata. For example the available capacity at the given location.
+        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
+      },
+      &quot;name&quot;: &quot;A String&quot;, # Resource name for the location, which may vary between implementations. For example: `&quot;projects/example-project/locations/us-east1&quot;`
+    },
+  ],
+  &quot;nextPageToken&quot;: &quot;A String&quot;, # The standard List next-page token.
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call &#x27;execute()&#x27; on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/servicedirectory_v1.projects.locations.namespaces.html b/docs/dyn/servicedirectory_v1.projects.locations.namespaces.html
new file mode 100644
index 0000000..140ae93
--- /dev/null
+++ b/docs/dyn/servicedirectory_v1.projects.locations.namespaces.html
@@ -0,0 +1,400 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="servicedirectory_v1.html">Service Directory API</a> . <a href="servicedirectory_v1.projects.html">projects</a> . <a href="servicedirectory_v1.projects.locations.html">locations</a> . <a href="servicedirectory_v1.projects.locations.namespaces.html">namespaces</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="servicedirectory_v1.projects.locations.namespaces.services.html">services()</a></code>
+</p>
+<p class="firstline">Returns the services Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#close">close()</a></code></p>
+<p class="firstline">Close httplib2 connections.</p>
+<p class="toc_element">
+  <code><a href="#create">create(parent, body=None, namespaceId=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates a namespace, and returns the new namespace.</p>
+<p class="toc_element">
+  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Deletes a namespace. This also deletes all services and endpoints in the namespace.</p>
+<p class="toc_element">
+  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets a namespace.</p>
+<p class="toc_element">
+  <code><a href="#getIamPolicy">getIamPolicy(resource, body=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets the IAM Policy for a resource (namespace or service only).</p>
+<p class="toc_element">
+  <code><a href="#list">list(parent, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Lists all namespaces.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Updates a namespace.</p>
+<p class="toc_element">
+  <code><a href="#setIamPolicy">setIamPolicy(resource, body=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Sets the IAM Policy for a resource (namespace or service only).</p>
+<p class="toc_element">
+  <code><a href="#testIamPermissions">testIamPermissions(resource, body=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Tests IAM permissions for a resource (namespace or service only).</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="close">close()</code>
+  <pre>Close httplib2 connections.</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="create">create(parent, body=None, namespaceId=None, x__xgafv=None)</code>
+  <pre>Creates a namespace, and returns the new namespace.
+
+Args:
+  parent: string, Required. The resource name of the project and location the namespace will be created in. (required)
+  body: object, The request body.
+    The object takes the form of:
+
+{ # A container for services. Namespaces allow administrators to group services together and define permissions for a collection of services.
+  &quot;labels&quot;: { # Optional. Resource labels associated with this namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.
+    &quot;a_key&quot;: &quot;A String&quot;,
+  },
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the namespace in the format `projects/*/locations/*/namespaces/*`.
+}
+
+  namespaceId: string, Required. The Resource ID must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A container for services. Namespaces allow administrators to group services together and define permissions for a collection of services.
+  &quot;labels&quot;: { # Optional. Resource labels associated with this namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.
+    &quot;a_key&quot;: &quot;A String&quot;,
+  },
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the namespace in the format `projects/*/locations/*/namespaces/*`.
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
+  <pre>Deletes a namespace. This also deletes all services and endpoints in the namespace.
+
+Args:
+  name: string, Required. The name of the namespace to delete. (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(name, x__xgafv=None)</code>
+  <pre>Gets a namespace.
+
+Args:
+  name: string, Required. The name of the namespace to retrieve. (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A container for services. Namespaces allow administrators to group services together and define permissions for a collection of services.
+  &quot;labels&quot;: { # Optional. Resource labels associated with this namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.
+    &quot;a_key&quot;: &quot;A String&quot;,
+  },
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the namespace in the format `projects/*/locations/*/namespaces/*`.
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="getIamPolicy">getIamPolicy(resource, body=None, x__xgafv=None)</code>
+  <pre>Gets the IAM Policy for a resource (namespace or service only).
+
+Args:
+  resource: string, REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field. (required)
+  body: object, The request body.
+    The object takes the form of:
+
+{ # Request message for `GetIamPolicy` method.
+  &quot;options&quot;: { # Encapsulates settings provided to GetIamPolicy. # OPTIONAL: A `GetPolicyOptions` object for specifying options to `GetIamPolicy`.
+    &quot;requestedPolicyVersion&quot;: 42, # Optional. The policy format version to be returned. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional bindings must specify version 3. Policies without any conditional bindings may specify any valid value or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
+  },
+}
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { &quot;bindings&quot;: [ { &quot;role&quot;: &quot;roles/resourcemanager.organizationAdmin&quot;, &quot;members&quot;: [ &quot;user:mike@example.com&quot;, &quot;group:admins@example.com&quot;, &quot;domain:google.com&quot;, &quot;serviceAccount:my-project-id@appspot.gserviceaccount.com&quot; ] }, { &quot;role&quot;: &quot;roles/resourcemanager.organizationViewer&quot;, &quot;members&quot;: [ &quot;user:eve@example.com&quot; ], &quot;condition&quot;: { &quot;title&quot;: &quot;expirable access&quot;, &quot;description&quot;: &quot;Does not grant access after Sep 2020&quot;, &quot;expression&quot;: &quot;request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;)&quot;, } } ], &quot;etag&quot;: &quot;BwWWja0YfJA=&quot;, &quot;version&quot;: 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;) - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).
+  &quot;bindings&quot;: [ # Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.
+    { # Associates `members` with a `role`.
+      &quot;condition&quot;: { # Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: &quot;Summary size limit&quot; description: &quot;Determines if a summary is less than 100 chars&quot; expression: &quot;document.summary.size() &lt; 100&quot; Example (Equality): title: &quot;Requestor is owner&quot; description: &quot;Determines if requestor is the document owner&quot; expression: &quot;document.owner == request.auth.claims.email&quot; Example (Logic): title: &quot;Public documents&quot; description: &quot;Determine whether the document should be publicly visible&quot; expression: &quot;document.type != &#x27;private&#x27; &amp;&amp; document.type != &#x27;internal&#x27;&quot; Example (Data Manipulation): title: &quot;Notification string&quot; description: &quot;Create a notification string with a timestamp.&quot; expression: &quot;&#x27;New message received at &#x27; + string(document.create_time)&quot; The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information. # The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
+        &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.
+        &quot;expression&quot;: &quot;A String&quot;, # Textual representation of an expression in Common Expression Language syntax.
+        &quot;location&quot;: &quot;A String&quot;, # Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.
+        &quot;title&quot;: &quot;A String&quot;, # Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.
+      },
+      &quot;members&quot;: [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`.
+        &quot;A String&quot;,
+      ],
+      &quot;role&quot;: &quot;A String&quot;, # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
+    },
+  ],
+  &quot;etag&quot;: &quot;A String&quot;, # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.
+  &quot;version&quot;: 42, # Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(parent, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
+  <pre>Lists all namespaces.
+
+Args:
+  parent: string, Required. The resource name of the project and location whose namespaces you&#x27;d like to list. (required)
+  filter: string, Optional. The filter to list results by. General `filter` string syntax: ` ()` * `` can be `name` or `labels.` for map field * `` can be `&lt;`, `&gt;`, `&lt;=`, `&gt;=`, `!=`, `=`, `:`. Of which `:` means `HAS`, and is roughly the same as `=` * `` must be the same data type as field * `` can be `AND`, `OR`, `NOT` Examples of valid filters: * `labels.owner` returns namespaces that have a label with the key `owner`, this is the same as `labels:owner` * `labels.owner=sd` returns namespaces that have key/value `owner=sd` * `name&gt;projects/my-project/locations/us-east1/namespaces/namespace-c` returns namespaces that have name that is alphabetically later than the string, so &quot;namespace-e&quot; is returned but &quot;namespace-a&quot; is not * `labels.owner!=sd AND labels.foo=bar` returns namespaces that have `owner` in label key but value is not `sd` AND have key/value `foo=bar` * `doesnotexist.foo=bar` returns an empty list. Note that namespace doesn&#x27;t have a field called &quot;doesnotexist&quot;. Since the filter does not match any namespaces, it returns no results For more information about filtering, see [API Filtering](https://aip.dev/160).
+  orderBy: string, Optional. The order to list results by. General `order_by` string syntax: ` () (,)` * `` allows value: `name` * `` ascending or descending order by ``. If this is left blank, `asc` is used Note that an empty `order_by` string results in default order, which is order by `name` in ascending order.
+  pageSize: integer, Optional. The maximum number of items to return.
+  pageToken: string, Optional. The next_page_token value returned from a previous List request, if any.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response message for RegistrationService.ListNamespaces.
+  &quot;namespaces&quot;: [ # The list of namespaces.
+    { # A container for services. Namespaces allow administrators to group services together and define permissions for a collection of services.
+      &quot;labels&quot;: { # Optional. Resource labels associated with this namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.
+        &quot;a_key&quot;: &quot;A String&quot;,
+      },
+      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the namespace in the format `projects/*/locations/*/namespaces/*`.
+    },
+  ],
+  &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more results in the list.
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call &#x27;execute()&#x27; on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
+  <pre>Updates a namespace.
+
+Args:
+  name: string, Immutable. The resource name for the namespace in the format `projects/*/locations/*/namespaces/*`. (required)
+  body: object, The request body.
+    The object takes the form of:
+
+{ # A container for services. Namespaces allow administrators to group services together and define permissions for a collection of services.
+  &quot;labels&quot;: { # Optional. Resource labels associated with this namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.
+    &quot;a_key&quot;: &quot;A String&quot;,
+  },
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the namespace in the format `projects/*/locations/*/namespaces/*`.
+}
+
+  updateMask: string, Required. List of fields to be updated in this request.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A container for services. Namespaces allow administrators to group services together and define permissions for a collection of services.
+  &quot;labels&quot;: { # Optional. Resource labels associated with this namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.
+    &quot;a_key&quot;: &quot;A String&quot;,
+  },
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the namespace in the format `projects/*/locations/*/namespaces/*`.
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="setIamPolicy">setIamPolicy(resource, body=None, x__xgafv=None)</code>
+  <pre>Sets the IAM Policy for a resource (namespace or service only).
+
+Args:
+  resource: string, REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field. (required)
+  body: object, The request body.
+    The object takes the form of:
+
+{ # Request message for `SetIamPolicy` method.
+  &quot;policy&quot;: { # An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { &quot;bindings&quot;: [ { &quot;role&quot;: &quot;roles/resourcemanager.organizationAdmin&quot;, &quot;members&quot;: [ &quot;user:mike@example.com&quot;, &quot;group:admins@example.com&quot;, &quot;domain:google.com&quot;, &quot;serviceAccount:my-project-id@appspot.gserviceaccount.com&quot; ] }, { &quot;role&quot;: &quot;roles/resourcemanager.organizationViewer&quot;, &quot;members&quot;: [ &quot;user:eve@example.com&quot; ], &quot;condition&quot;: { &quot;title&quot;: &quot;expirable access&quot;, &quot;description&quot;: &quot;Does not grant access after Sep 2020&quot;, &quot;expression&quot;: &quot;request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;)&quot;, } } ], &quot;etag&quot;: &quot;BwWWja0YfJA=&quot;, &quot;version&quot;: 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;) - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/). # REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them.
+    &quot;bindings&quot;: [ # Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.
+      { # Associates `members` with a `role`.
+        &quot;condition&quot;: { # Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: &quot;Summary size limit&quot; description: &quot;Determines if a summary is less than 100 chars&quot; expression: &quot;document.summary.size() &lt; 100&quot; Example (Equality): title: &quot;Requestor is owner&quot; description: &quot;Determines if requestor is the document owner&quot; expression: &quot;document.owner == request.auth.claims.email&quot; Example (Logic): title: &quot;Public documents&quot; description: &quot;Determine whether the document should be publicly visible&quot; expression: &quot;document.type != &#x27;private&#x27; &amp;&amp; document.type != &#x27;internal&#x27;&quot; Example (Data Manipulation): title: &quot;Notification string&quot; description: &quot;Create a notification string with a timestamp.&quot; expression: &quot;&#x27;New message received at &#x27; + string(document.create_time)&quot; The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information. # The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
+          &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.
+          &quot;expression&quot;: &quot;A String&quot;, # Textual representation of an expression in Common Expression Language syntax.
+          &quot;location&quot;: &quot;A String&quot;, # Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.
+          &quot;title&quot;: &quot;A String&quot;, # Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.
+        },
+        &quot;members&quot;: [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`.
+          &quot;A String&quot;,
+        ],
+        &quot;role&quot;: &quot;A String&quot;, # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
+      },
+    ],
+    &quot;etag&quot;: &quot;A String&quot;, # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.
+    &quot;version&quot;: 42, # Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
+  },
+}
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { &quot;bindings&quot;: [ { &quot;role&quot;: &quot;roles/resourcemanager.organizationAdmin&quot;, &quot;members&quot;: [ &quot;user:mike@example.com&quot;, &quot;group:admins@example.com&quot;, &quot;domain:google.com&quot;, &quot;serviceAccount:my-project-id@appspot.gserviceaccount.com&quot; ] }, { &quot;role&quot;: &quot;roles/resourcemanager.organizationViewer&quot;, &quot;members&quot;: [ &quot;user:eve@example.com&quot; ], &quot;condition&quot;: { &quot;title&quot;: &quot;expirable access&quot;, &quot;description&quot;: &quot;Does not grant access after Sep 2020&quot;, &quot;expression&quot;: &quot;request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;)&quot;, } } ], &quot;etag&quot;: &quot;BwWWja0YfJA=&quot;, &quot;version&quot;: 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;) - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).
+  &quot;bindings&quot;: [ # Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.
+    { # Associates `members` with a `role`.
+      &quot;condition&quot;: { # Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: &quot;Summary size limit&quot; description: &quot;Determines if a summary is less than 100 chars&quot; expression: &quot;document.summary.size() &lt; 100&quot; Example (Equality): title: &quot;Requestor is owner&quot; description: &quot;Determines if requestor is the document owner&quot; expression: &quot;document.owner == request.auth.claims.email&quot; Example (Logic): title: &quot;Public documents&quot; description: &quot;Determine whether the document should be publicly visible&quot; expression: &quot;document.type != &#x27;private&#x27; &amp;&amp; document.type != &#x27;internal&#x27;&quot; Example (Data Manipulation): title: &quot;Notification string&quot; description: &quot;Create a notification string with a timestamp.&quot; expression: &quot;&#x27;New message received at &#x27; + string(document.create_time)&quot; The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information. # The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
+        &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.
+        &quot;expression&quot;: &quot;A String&quot;, # Textual representation of an expression in Common Expression Language syntax.
+        &quot;location&quot;: &quot;A String&quot;, # Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.
+        &quot;title&quot;: &quot;A String&quot;, # Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.
+      },
+      &quot;members&quot;: [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`.
+        &quot;A String&quot;,
+      ],
+      &quot;role&quot;: &quot;A String&quot;, # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
+    },
+  ],
+  &quot;etag&quot;: &quot;A String&quot;, # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.
+  &quot;version&quot;: 42, # Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="testIamPermissions">testIamPermissions(resource, body=None, x__xgafv=None)</code>
+  <pre>Tests IAM permissions for a resource (namespace or service only).
+
+Args:
+  resource: string, REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field. (required)
+  body: object, The request body.
+    The object takes the form of:
+
+{ # Request message for `TestIamPermissions` method.
+  &quot;permissions&quot;: [ # The set of permissions to check for the `resource`. Permissions with wildcards (such as &#x27;*&#x27; or &#x27;storage.*&#x27;) are not allowed. For more information see [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).
+    &quot;A String&quot;,
+  ],
+}
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Response message for `TestIamPermissions` method.
+  &quot;permissions&quot;: [ # A subset of `TestPermissionsRequest.permissions` that the caller is allowed.
+    &quot;A String&quot;,
+  ],
+}</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/servicedirectory_v1.projects.locations.namespaces.services.endpoints.html b/docs/dyn/servicedirectory_v1.projects.locations.namespaces.services.endpoints.html
new file mode 100644
index 0000000..0d663c2
--- /dev/null
+++ b/docs/dyn/servicedirectory_v1.projects.locations.namespaces.services.endpoints.html
@@ -0,0 +1,267 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="servicedirectory_v1.html">Service Directory API</a> . <a href="servicedirectory_v1.projects.html">projects</a> . <a href="servicedirectory_v1.projects.locations.html">locations</a> . <a href="servicedirectory_v1.projects.locations.namespaces.html">namespaces</a> . <a href="servicedirectory_v1.projects.locations.namespaces.services.html">services</a> . <a href="servicedirectory_v1.projects.locations.namespaces.services.endpoints.html">endpoints</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#close">close()</a></code></p>
+<p class="firstline">Close httplib2 connections.</p>
+<p class="toc_element">
+  <code><a href="#create">create(parent, body=None, endpointId=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates an endpoint, and returns the new endpoint.</p>
+<p class="toc_element">
+  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Deletes an endpoint.</p>
+<p class="toc_element">
+  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets an endpoint.</p>
+<p class="toc_element">
+  <code><a href="#list">list(parent, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Lists all endpoints.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Updates an endpoint.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="close">close()</code>
+  <pre>Close httplib2 connections.</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="create">create(parent, body=None, endpointId=None, x__xgafv=None)</code>
+  <pre>Creates an endpoint, and returns the new endpoint.
+
+Args:
+  parent: string, Required. The resource name of the service that this endpoint provides. (required)
+  body: object, The request body.
+    The object takes the form of:
+
+{ # An individual endpoint that provides a service. The service must already exist to create an endpoint.
+  &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+  &quot;annotations&quot;: { # Optional. Annotations for the endpoint. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/) Annotations that fails to meet these requirements are rejected. * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.
+    &quot;a_key&quot;: &quot;A String&quot;,
+  },
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+  &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
+}
+
+  endpointId: string, Required. The Resource ID must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
+  &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+  &quot;annotations&quot;: { # Optional. Annotations for the endpoint. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/) Annotations that fails to meet these requirements are rejected. * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.
+    &quot;a_key&quot;: &quot;A String&quot;,
+  },
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+  &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
+  <pre>Deletes an endpoint.
+
+Args:
+  name: string, Required. The name of the endpoint to delete. (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(name, x__xgafv=None)</code>
+  <pre>Gets an endpoint.
+
+Args:
+  name: string, Required. The name of the endpoint to get. (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
+  &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+  &quot;annotations&quot;: { # Optional. Annotations for the endpoint. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/) Annotations that fails to meet these requirements are rejected. * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.
+    &quot;a_key&quot;: &quot;A String&quot;,
+  },
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+  &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(parent, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
+  <pre>Lists all endpoints.
+
+Args:
+  parent: string, Required. The resource name of the service whose endpoints you&#x27;d like to list. (required)
+  filter: string, Optional. The filter to list results by. General `filter` string syntax: ` ()` * `` can be `name`, `address`, `port`, or `annotations.` for map field * `` can be `&lt;`, `&gt;`, `&lt;=`, `&gt;=`, `!=`, `=`, `:`. Of which `:` means `HAS`, and is roughly the same as `=` * `` must be the same data type as field * `` can be `AND`, `OR`, `NOT` Examples of valid filters: * `annotations.owner` returns endpoints that have a annotation with the key `owner`, this is the same as `annotations:owner` * `annotations.protocol=gRPC` returns endpoints that have key/value `protocol=gRPC` * `address=192.108.1.105` returns endpoints that have this address * `port&gt;8080` returns endpoints that have port number larger than 8080 * `name&gt;projects/my-project/locations/us-east1/namespaces/my-namespace/services/my-service/endpoints/endpoint-c` returns endpoints that have name that is alphabetically later than the string, so &quot;endpoint-e&quot; is returned but &quot;endpoint-a&quot; is not * `annotations.owner!=sd AND annotations.foo=bar` returns endpoints that have `owner` in annotation key but value is not `sd` AND have key/value `foo=bar` * `doesnotexist.foo=bar` returns an empty list. Note that endpoint doesn&#x27;t have a field called &quot;doesnotexist&quot;. Since the filter does not match any endpoints, it returns no results For more information about filtering, see [API Filtering](https://aip.dev/160).
+  orderBy: string, Optional. The order to list results by. General `order_by` string syntax: ` () (,)` * `` allows values: `name`, `address`, `port` * `` ascending or descending order by ``. If this is left blank, `asc` is used Note that an empty `order_by` string results in default order, which is order by `name` in ascending order.
+  pageSize: integer, Optional. The maximum number of items to return.
+  pageToken: string, Optional. The next_page_token value returned from a previous List request, if any.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response message for RegistrationService.ListEndpoints.
+  &quot;endpoints&quot;: [ # The list of endpoints.
+    { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
+      &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+      &quot;annotations&quot;: { # Optional. Annotations for the endpoint. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/) Annotations that fails to meet these requirements are rejected. * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.
+        &quot;a_key&quot;: &quot;A String&quot;,
+      },
+      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+      &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
+    },
+  ],
+  &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more results in the list.
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call &#x27;execute()&#x27; on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
+  <pre>Updates an endpoint.
+
+Args:
+  name: string, Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`. (required)
+  body: object, The request body.
+    The object takes the form of:
+
+{ # An individual endpoint that provides a service. The service must already exist to create an endpoint.
+  &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+  &quot;annotations&quot;: { # Optional. Annotations for the endpoint. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/) Annotations that fails to meet these requirements are rejected. * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.
+    &quot;a_key&quot;: &quot;A String&quot;,
+  },
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+  &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
+}
+
+  updateMask: string, Required. List of fields to be updated in this request.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
+  &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+  &quot;annotations&quot;: { # Optional. Annotations for the endpoint. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/) Annotations that fails to meet these requirements are rejected. * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.
+    &quot;a_key&quot;: &quot;A String&quot;,
+  },
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+  &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
+}</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/servicedirectory_v1.projects.locations.namespaces.services.html b/docs/dyn/servicedirectory_v1.projects.locations.namespaces.services.html
new file mode 100644
index 0000000..ff6012f
--- /dev/null
+++ b/docs/dyn/servicedirectory_v1.projects.locations.namespaces.services.html
@@ -0,0 +1,505 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="servicedirectory_v1.html">Service Directory API</a> . <a href="servicedirectory_v1.projects.html">projects</a> . <a href="servicedirectory_v1.projects.locations.html">locations</a> . <a href="servicedirectory_v1.projects.locations.namespaces.html">namespaces</a> . <a href="servicedirectory_v1.projects.locations.namespaces.services.html">services</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="servicedirectory_v1.projects.locations.namespaces.services.endpoints.html">endpoints()</a></code>
+</p>
+<p class="firstline">Returns the endpoints Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#close">close()</a></code></p>
+<p class="firstline">Close httplib2 connections.</p>
+<p class="toc_element">
+  <code><a href="#create">create(parent, body=None, serviceId=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates a service, and returns the new service.</p>
+<p class="toc_element">
+  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Deletes a service. This also deletes all endpoints associated with the service.</p>
+<p class="toc_element">
+  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets a service.</p>
+<p class="toc_element">
+  <code><a href="#getIamPolicy">getIamPolicy(resource, body=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets the IAM Policy for a resource (namespace or service only).</p>
+<p class="toc_element">
+  <code><a href="#list">list(parent, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Lists all services belonging to a namespace.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Updates a service.</p>
+<p class="toc_element">
+  <code><a href="#resolve">resolve(name, body=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Returns a service and its associated endpoints. Resolving a service is not considered an active developer method.</p>
+<p class="toc_element">
+  <code><a href="#setIamPolicy">setIamPolicy(resource, body=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Sets the IAM Policy for a resource (namespace or service only).</p>
+<p class="toc_element">
+  <code><a href="#testIamPermissions">testIamPermissions(resource, body=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Tests IAM permissions for a resource (namespace or service only).</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="close">close()</code>
+  <pre>Close httplib2 connections.</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="create">create(parent, body=None, serviceId=None, x__xgafv=None)</code>
+  <pre>Creates a service, and returns the new service.
+
+Args:
+  parent: string, Required. The resource name of the namespace this service will belong to. (required)
+  body: object, The request body.
+    The object takes the form of:
+
+{ # An individual service. A service contains a name and optional metadata. A service must exist before endpoints can be added to it.
+  &quot;annotations&quot;: { # Optional. Annotations for the service. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Annotations that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.
+    &quot;a_key&quot;: &quot;A String&quot;,
+  },
+  &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.ResolveService. Control plane clients should use RegistrationService.ListEndpoints.
+    { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
+      &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+      &quot;annotations&quot;: { # Optional. Annotations for the endpoint. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/) Annotations that fails to meet these requirements are rejected. * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.
+        &quot;a_key&quot;: &quot;A String&quot;,
+      },
+      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+      &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
+    },
+  ],
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format `projects/*/locations/*/namespaces/*/services/*`.
+}
+
+  serviceId: string, Required. The Resource ID must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # An individual service. A service contains a name and optional metadata. A service must exist before endpoints can be added to it.
+  &quot;annotations&quot;: { # Optional. Annotations for the service. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Annotations that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.
+    &quot;a_key&quot;: &quot;A String&quot;,
+  },
+  &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.ResolveService. Control plane clients should use RegistrationService.ListEndpoints.
+    { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
+      &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+      &quot;annotations&quot;: { # Optional. Annotations for the endpoint. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/) Annotations that fails to meet these requirements are rejected. * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.
+        &quot;a_key&quot;: &quot;A String&quot;,
+      },
+      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+      &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
+    },
+  ],
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format `projects/*/locations/*/namespaces/*/services/*`.
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
+  <pre>Deletes a service. This also deletes all endpoints associated with the service.
+
+Args:
+  name: string, Required. The name of the service to delete. (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(name, x__xgafv=None)</code>
+  <pre>Gets a service.
+
+Args:
+  name: string, Required. The name of the service to get. (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # An individual service. A service contains a name and optional metadata. A service must exist before endpoints can be added to it.
+  &quot;annotations&quot;: { # Optional. Annotations for the service. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Annotations that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.
+    &quot;a_key&quot;: &quot;A String&quot;,
+  },
+  &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.ResolveService. Control plane clients should use RegistrationService.ListEndpoints.
+    { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
+      &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+      &quot;annotations&quot;: { # Optional. Annotations for the endpoint. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/) Annotations that fails to meet these requirements are rejected. * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.
+        &quot;a_key&quot;: &quot;A String&quot;,
+      },
+      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+      &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
+    },
+  ],
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format `projects/*/locations/*/namespaces/*/services/*`.
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="getIamPolicy">getIamPolicy(resource, body=None, x__xgafv=None)</code>
+  <pre>Gets the IAM Policy for a resource (namespace or service only).
+
+Args:
+  resource: string, REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field. (required)
+  body: object, The request body.
+    The object takes the form of:
+
+{ # Request message for `GetIamPolicy` method.
+  &quot;options&quot;: { # Encapsulates settings provided to GetIamPolicy. # OPTIONAL: A `GetPolicyOptions` object for specifying options to `GetIamPolicy`.
+    &quot;requestedPolicyVersion&quot;: 42, # Optional. The policy format version to be returned. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional bindings must specify version 3. Policies without any conditional bindings may specify any valid value or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
+  },
+}
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { &quot;bindings&quot;: [ { &quot;role&quot;: &quot;roles/resourcemanager.organizationAdmin&quot;, &quot;members&quot;: [ &quot;user:mike@example.com&quot;, &quot;group:admins@example.com&quot;, &quot;domain:google.com&quot;, &quot;serviceAccount:my-project-id@appspot.gserviceaccount.com&quot; ] }, { &quot;role&quot;: &quot;roles/resourcemanager.organizationViewer&quot;, &quot;members&quot;: [ &quot;user:eve@example.com&quot; ], &quot;condition&quot;: { &quot;title&quot;: &quot;expirable access&quot;, &quot;description&quot;: &quot;Does not grant access after Sep 2020&quot;, &quot;expression&quot;: &quot;request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;)&quot;, } } ], &quot;etag&quot;: &quot;BwWWja0YfJA=&quot;, &quot;version&quot;: 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;) - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).
+  &quot;bindings&quot;: [ # Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.
+    { # Associates `members` with a `role`.
+      &quot;condition&quot;: { # Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: &quot;Summary size limit&quot; description: &quot;Determines if a summary is less than 100 chars&quot; expression: &quot;document.summary.size() &lt; 100&quot; Example (Equality): title: &quot;Requestor is owner&quot; description: &quot;Determines if requestor is the document owner&quot; expression: &quot;document.owner == request.auth.claims.email&quot; Example (Logic): title: &quot;Public documents&quot; description: &quot;Determine whether the document should be publicly visible&quot; expression: &quot;document.type != &#x27;private&#x27; &amp;&amp; document.type != &#x27;internal&#x27;&quot; Example (Data Manipulation): title: &quot;Notification string&quot; description: &quot;Create a notification string with a timestamp.&quot; expression: &quot;&#x27;New message received at &#x27; + string(document.create_time)&quot; The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information. # The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
+        &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.
+        &quot;expression&quot;: &quot;A String&quot;, # Textual representation of an expression in Common Expression Language syntax.
+        &quot;location&quot;: &quot;A String&quot;, # Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.
+        &quot;title&quot;: &quot;A String&quot;, # Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.
+      },
+      &quot;members&quot;: [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`.
+        &quot;A String&quot;,
+      ],
+      &quot;role&quot;: &quot;A String&quot;, # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
+    },
+  ],
+  &quot;etag&quot;: &quot;A String&quot;, # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.
+  &quot;version&quot;: 42, # Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(parent, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
+  <pre>Lists all services belonging to a namespace.
+
+Args:
+  parent: string, Required. The resource name of the namespace whose services you&#x27;d like to list. (required)
+  filter: string, Optional. The filter to list results by. General `filter` string syntax: ` ()` * `` can be `name` or `annotations.` for map field * `` can be `&lt;`, `&gt;`, `&lt;=`, `&gt;=`, `!=`, `=`, `:`. Of which `:` means `HAS`, and is roughly the same as `=` * `` must be the same data type as field * `` can be `AND`, `OR`, `NOT` Examples of valid filters: * `annotations.owner` returns services that have a annotation with the key `owner`, this is the same as `annotations:owner` * `annotations.protocol=gRPC` returns services that have key/value `protocol=gRPC` * `name&gt;projects/my-project/locations/us-east1/namespaces/my-namespace/services/service-c` returns services that have name that is alphabetically later than the string, so &quot;service-e&quot; is returned but &quot;service-a&quot; is not * `annotations.owner!=sd AND annotations.foo=bar` returns services that have `owner` in annotation key but value is not `sd` AND have key/value `foo=bar` * `doesnotexist.foo=bar` returns an empty list. Note that service doesn&#x27;t have a field called &quot;doesnotexist&quot;. Since the filter does not match any services, it returns no results For more information about filtering, see [API Filtering](https://aip.dev/160).
+  orderBy: string, Optional. The order to list results by. General `order_by` string syntax: ` () (,)` * `` allows value: `name` * `` ascending or descending order by ``. If this is left blank, `asc` is used Note that an empty `order_by` string results in default order, which is order by `name` in ascending order.
+  pageSize: integer, Optional. The maximum number of items to return.
+  pageToken: string, Optional. The next_page_token value returned from a previous List request, if any.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response message for RegistrationService.ListServices.
+  &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more results in the list.
+  &quot;services&quot;: [ # The list of services.
+    { # An individual service. A service contains a name and optional metadata. A service must exist before endpoints can be added to it.
+      &quot;annotations&quot;: { # Optional. Annotations for the service. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Annotations that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.
+        &quot;a_key&quot;: &quot;A String&quot;,
+      },
+      &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.ResolveService. Control plane clients should use RegistrationService.ListEndpoints.
+        { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
+          &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+          &quot;annotations&quot;: { # Optional. Annotations for the endpoint. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/) Annotations that fails to meet these requirements are rejected. * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.
+            &quot;a_key&quot;: &quot;A String&quot;,
+          },
+          &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+          &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
+        },
+      ],
+      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format `projects/*/locations/*/namespaces/*/services/*`.
+    },
+  ],
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call &#x27;execute()&#x27; on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
+  <pre>Updates a service.
+
+Args:
+  name: string, Immutable. The resource name for the service in the format `projects/*/locations/*/namespaces/*/services/*`. (required)
+  body: object, The request body.
+    The object takes the form of:
+
+{ # An individual service. A service contains a name and optional metadata. A service must exist before endpoints can be added to it.
+  &quot;annotations&quot;: { # Optional. Annotations for the service. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Annotations that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.
+    &quot;a_key&quot;: &quot;A String&quot;,
+  },
+  &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.ResolveService. Control plane clients should use RegistrationService.ListEndpoints.
+    { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
+      &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+      &quot;annotations&quot;: { # Optional. Annotations for the endpoint. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/) Annotations that fails to meet these requirements are rejected. * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.
+        &quot;a_key&quot;: &quot;A String&quot;,
+      },
+      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+      &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
+    },
+  ],
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format `projects/*/locations/*/namespaces/*/services/*`.
+}
+
+  updateMask: string, Required. List of fields to be updated in this request.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # An individual service. A service contains a name and optional metadata. A service must exist before endpoints can be added to it.
+  &quot;annotations&quot;: { # Optional. Annotations for the service. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Annotations that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.
+    &quot;a_key&quot;: &quot;A String&quot;,
+  },
+  &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.ResolveService. Control plane clients should use RegistrationService.ListEndpoints.
+    { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
+      &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+      &quot;annotations&quot;: { # Optional. Annotations for the endpoint. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/) Annotations that fails to meet these requirements are rejected. * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.
+        &quot;a_key&quot;: &quot;A String&quot;,
+      },
+      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+      &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
+    },
+  ],
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format `projects/*/locations/*/namespaces/*/services/*`.
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="resolve">resolve(name, body=None, x__xgafv=None)</code>
+  <pre>Returns a service and its associated endpoints. Resolving a service is not considered an active developer method.
+
+Args:
+  name: string, Required. The name of the service to resolve. (required)
+  body: object, The request body.
+    The object takes the form of:
+
+{ # The request message for LookupService.ResolveService. Looks up a service by its name, returns the service and its endpoints.
+  &quot;endpointFilter&quot;: &quot;A String&quot;, # Optional. The filter applied to the endpoints of the resolved service. General `filter` string syntax: ` ()` * `` can be `name`, `address`, `port`, or `annotations.` for map field * `` can be `&lt;`, `&gt;`, `&lt;=`, `&gt;=`, `!=`, `=`, `:`. Of which `:` means `HAS`, and is roughly the same as `=` * `` must be the same data type as field * `` can be `AND`, `OR`, `NOT` Examples of valid filters: * `annotations.owner` returns endpoints that have a annotation with the key `owner`, this is the same as `annotations:owner` * `annotations.protocol=gRPC` returns endpoints that have key/value `protocol=gRPC` * `address=192.108.1.105` returns endpoints that have this address * `port&gt;8080` returns endpoints that have port number larger than 8080 * `name&gt;projects/my-project/locations/us-east1/namespaces/my-namespace/services/my-service/endpoints/endpoint-c` returns endpoints that have name that is alphabetically later than the string, so &quot;endpoint-e&quot; is returned but &quot;endpoint-a&quot; is not * `annotations.owner!=sd AND annotations.foo=bar` returns endpoints that have `owner` in annotation key but value is not `sd` AND have key/value `foo=bar` * `doesnotexist.foo=bar` returns an empty list. Note that endpoint doesn&#x27;t have a field called &quot;doesnotexist&quot;. Since the filter does not match any endpoint, it returns no results For more information about filtering, see [API Filtering](https://aip.dev/160).
+  &quot;maxEndpoints&quot;: 42, # Optional. The maximum number of endpoints to return. Defaults to 25. Maximum is 100. If a value less than one is specified, the Default is used. If a value greater than the Maximum is specified, the Maximum is used.
+}
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response message for LookupService.ResolveService.
+  &quot;service&quot;: { # An individual service. A service contains a name and optional metadata. A service must exist before endpoints can be added to it.
+    &quot;annotations&quot;: { # Optional. Annotations for the service. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Annotations that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.
+      &quot;a_key&quot;: &quot;A String&quot;,
+    },
+    &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.ResolveService. Control plane clients should use RegistrationService.ListEndpoints.
+      { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
+        &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+        &quot;annotations&quot;: { # Optional. Annotations for the endpoint. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/) Annotations that fails to meet these requirements are rejected. * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.
+          &quot;a_key&quot;: &quot;A String&quot;,
+        },
+        &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+        &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
+      },
+    ],
+    &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format `projects/*/locations/*/namespaces/*/services/*`.
+  },
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="setIamPolicy">setIamPolicy(resource, body=None, x__xgafv=None)</code>
+  <pre>Sets the IAM Policy for a resource (namespace or service only).
+
+Args:
+  resource: string, REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field. (required)
+  body: object, The request body.
+    The object takes the form of:
+
+{ # Request message for `SetIamPolicy` method.
+  &quot;policy&quot;: { # An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { &quot;bindings&quot;: [ { &quot;role&quot;: &quot;roles/resourcemanager.organizationAdmin&quot;, &quot;members&quot;: [ &quot;user:mike@example.com&quot;, &quot;group:admins@example.com&quot;, &quot;domain:google.com&quot;, &quot;serviceAccount:my-project-id@appspot.gserviceaccount.com&quot; ] }, { &quot;role&quot;: &quot;roles/resourcemanager.organizationViewer&quot;, &quot;members&quot;: [ &quot;user:eve@example.com&quot; ], &quot;condition&quot;: { &quot;title&quot;: &quot;expirable access&quot;, &quot;description&quot;: &quot;Does not grant access after Sep 2020&quot;, &quot;expression&quot;: &quot;request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;)&quot;, } } ], &quot;etag&quot;: &quot;BwWWja0YfJA=&quot;, &quot;version&quot;: 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;) - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/). # REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them.
+    &quot;bindings&quot;: [ # Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.
+      { # Associates `members` with a `role`.
+        &quot;condition&quot;: { # Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: &quot;Summary size limit&quot; description: &quot;Determines if a summary is less than 100 chars&quot; expression: &quot;document.summary.size() &lt; 100&quot; Example (Equality): title: &quot;Requestor is owner&quot; description: &quot;Determines if requestor is the document owner&quot; expression: &quot;document.owner == request.auth.claims.email&quot; Example (Logic): title: &quot;Public documents&quot; description: &quot;Determine whether the document should be publicly visible&quot; expression: &quot;document.type != &#x27;private&#x27; &amp;&amp; document.type != &#x27;internal&#x27;&quot; Example (Data Manipulation): title: &quot;Notification string&quot; description: &quot;Create a notification string with a timestamp.&quot; expression: &quot;&#x27;New message received at &#x27; + string(document.create_time)&quot; The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information. # The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
+          &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.
+          &quot;expression&quot;: &quot;A String&quot;, # Textual representation of an expression in Common Expression Language syntax.
+          &quot;location&quot;: &quot;A String&quot;, # Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.
+          &quot;title&quot;: &quot;A String&quot;, # Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.
+        },
+        &quot;members&quot;: [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`.
+          &quot;A String&quot;,
+        ],
+        &quot;role&quot;: &quot;A String&quot;, # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
+      },
+    ],
+    &quot;etag&quot;: &quot;A String&quot;, # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.
+    &quot;version&quot;: 42, # Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
+  },
+}
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { &quot;bindings&quot;: [ { &quot;role&quot;: &quot;roles/resourcemanager.organizationAdmin&quot;, &quot;members&quot;: [ &quot;user:mike@example.com&quot;, &quot;group:admins@example.com&quot;, &quot;domain:google.com&quot;, &quot;serviceAccount:my-project-id@appspot.gserviceaccount.com&quot; ] }, { &quot;role&quot;: &quot;roles/resourcemanager.organizationViewer&quot;, &quot;members&quot;: [ &quot;user:eve@example.com&quot; ], &quot;condition&quot;: { &quot;title&quot;: &quot;expirable access&quot;, &quot;description&quot;: &quot;Does not grant access after Sep 2020&quot;, &quot;expression&quot;: &quot;request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;)&quot;, } } ], &quot;etag&quot;: &quot;BwWWja0YfJA=&quot;, &quot;version&quot;: 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time &lt; timestamp(&#x27;2020-10-01T00:00:00.000Z&#x27;) - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).
+  &quot;bindings&quot;: [ # Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.
+    { # Associates `members` with a `role`.
+      &quot;condition&quot;: { # Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: &quot;Summary size limit&quot; description: &quot;Determines if a summary is less than 100 chars&quot; expression: &quot;document.summary.size() &lt; 100&quot; Example (Equality): title: &quot;Requestor is owner&quot; description: &quot;Determines if requestor is the document owner&quot; expression: &quot;document.owner == request.auth.claims.email&quot; Example (Logic): title: &quot;Public documents&quot; description: &quot;Determine whether the document should be publicly visible&quot; expression: &quot;document.type != &#x27;private&#x27; &amp;&amp; document.type != &#x27;internal&#x27;&quot; Example (Data Manipulation): title: &quot;Notification string&quot; description: &quot;Create a notification string with a timestamp.&quot; expression: &quot;&#x27;New message received at &#x27; + string(document.create_time)&quot; The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information. # The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
+        &quot;description&quot;: &quot;A String&quot;, # Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.
+        &quot;expression&quot;: &quot;A String&quot;, # Textual representation of an expression in Common Expression Language syntax.
+        &quot;location&quot;: &quot;A String&quot;, # Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.
+        &quot;title&quot;: &quot;A String&quot;, # Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.
+      },
+      &quot;members&quot;: [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`.
+        &quot;A String&quot;,
+      ],
+      &quot;role&quot;: &quot;A String&quot;, # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
+    },
+  ],
+  &quot;etag&quot;: &quot;A String&quot;, # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.
+  &quot;version&quot;: 42, # Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="testIamPermissions">testIamPermissions(resource, body=None, x__xgafv=None)</code>
+  <pre>Tests IAM permissions for a resource (namespace or service only).
+
+Args:
+  resource: string, REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field. (required)
+  body: object, The request body.
+    The object takes the form of:
+
+{ # Request message for `TestIamPermissions` method.
+  &quot;permissions&quot;: [ # The set of permissions to check for the `resource`. Permissions with wildcards (such as &#x27;*&#x27; or &#x27;storage.*&#x27;) are not allowed. For more information see [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).
+    &quot;A String&quot;,
+  ],
+}
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Response message for `TestIamPermissions` method.
+  &quot;permissions&quot;: [ # A subset of `TestPermissionsRequest.permissions` that the caller is allowed.
+    &quot;A String&quot;,
+  ],
+}</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/servicedirectory_v1beta1.projects.locations.namespaces.html b/docs/dyn/servicedirectory_v1beta1.projects.locations.namespaces.html
index 92cc361..3b57c1f 100644
--- a/docs/dyn/servicedirectory_v1beta1.projects.locations.namespaces.html
+++ b/docs/dyn/servicedirectory_v1beta1.projects.locations.namespaces.html
@@ -84,7 +84,7 @@
 <p class="firstline">Close httplib2 connections.</p>
 <p class="toc_element">
   <code><a href="#create">create(parent, body=None, namespaceId=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Creates a namespace, and returns the new Namespace.</p>
+<p class="firstline">Creates a namespace, and returns the new namespace.</p>
 <p class="toc_element">
   <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
 <p class="firstline">Deletes a namespace. This also deletes all services and endpoints in the namespace.</p>
@@ -117,7 +117,7 @@
 
 <div class="method">
     <code class="details" id="create">create(parent, body=None, namespaceId=None, x__xgafv=None)</code>
-  <pre>Creates a namespace, and returns the new Namespace.
+  <pre>Creates a namespace, and returns the new namespace.
 
 Args:
   parent: string, Required. The resource name of the project and location the namespace will be created in. (required)
@@ -125,10 +125,10 @@
     The object takes the form of:
 
 { # A container for services. Namespaces allow administrators to group services together and define permissions for a collection of services.
-  &quot;labels&quot;: { # Optional. Resource labels associated with this Namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.
+  &quot;labels&quot;: { # Optional. Resource labels associated with this namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the namespace in the format &#x27;projects/*/locations/*/namespaces/*&#x27;.
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the namespace in the format `projects/*/locations/*/namespaces/*`.
 }
 
   namespaceId: string, Required. The Resource ID must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
@@ -141,10 +141,10 @@
   An object of the form:
 
     { # A container for services. Namespaces allow administrators to group services together and define permissions for a collection of services.
-  &quot;labels&quot;: { # Optional. Resource labels associated with this Namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.
+  &quot;labels&quot;: { # Optional. Resource labels associated with this namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the namespace in the format &#x27;projects/*/locations/*/namespaces/*&#x27;.
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the namespace in the format `projects/*/locations/*/namespaces/*`.
 }</pre>
 </div>
 
@@ -181,10 +181,10 @@
   An object of the form:
 
     { # A container for services. Namespaces allow administrators to group services together and define permissions for a collection of services.
-  &quot;labels&quot;: { # Optional. Resource labels associated with this Namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.
+  &quot;labels&quot;: { # Optional. Resource labels associated with this namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the namespace in the format &#x27;projects/*/locations/*/namespaces/*&#x27;.
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the namespace in the format `projects/*/locations/*/namespaces/*`.
 }</pre>
 </div>
 
@@ -236,9 +236,9 @@
   <pre>Lists all namespaces.
 
 Args:
-  parent: string, Required. The resource name of the project and location whose namespaces we&#x27;d like to list. (required)
-  filter: string, Optional. The filter to list result by. General filter string syntax: () can be &quot;name&quot;, or &quot;labels.&quot; for map field. can be &quot;&lt;, &gt;, &lt;=, &gt;=, !=, =, :&quot;. Of which &quot;:&quot; means HAS, and is roughly the same as &quot;=&quot;. must be the same data type as field. can be &quot;AND, OR, NOT&quot;. Examples of valid filters: * &quot;labels.owner&quot; returns Namespaces that have a label with the key &quot;owner&quot; this is the same as &quot;labels:owner&quot;. * &quot;labels.protocol=gRPC&quot; returns Namespaces that have key/value &quot;protocol=gRPC&quot;. * &quot;name&gt;projects/my-project/locations/us-east/namespaces/namespace-c&quot; returns Namespaces that have name that is alphabetically later than the string, so &quot;namespace-e&quot; will be returned but &quot;namespace-a&quot; will not be. * &quot;labels.owner!=sd AND labels.foo=bar&quot; returns Namespaces that have &quot;owner&quot; in label key but value is not &quot;sd&quot; AND have key/value foo=bar. * &quot;doesnotexist.foo=bar&quot; returns an empty list. Note that Namespace doesn&#x27;t have a field called &quot;doesnotexist&quot;. Since the filter does not match any Namespaces, it returns no results.
-  orderBy: string, Optional. The order to list result by. General order by string syntax: () (,) allows values {&quot;name&quot;} ascending or descending order by . If this is left blank, &quot;asc&quot; is used. Note that an empty order_by string result in default order, which is order by name in ascending order.
+  parent: string, Required. The resource name of the project and location whose namespaces you&#x27;d like to list. (required)
+  filter: string, Optional. The filter to list results by. General `filter` string syntax: ` ()` * `` can be `name` or `labels.` for map field * `` can be `&lt;`, `&gt;`, `&lt;=`, `&gt;=`, `!=`, `=`, `:`. Of which `:` means `HAS`, and is roughly the same as `=` * `` must be the same data type as field * `` can be `AND`, `OR`, `NOT` Examples of valid filters: * `labels.owner` returns namespaces that have a label with the key `owner`, this is the same as `labels:owner` * `labels.owner=sd` returns namespaces that have key/value `owner=sd` * `name&gt;projects/my-project/locations/us-east1/namespaces/namespace-c` returns namespaces that have name that is alphabetically later than the string, so &quot;namespace-e&quot; is returned but &quot;namespace-a&quot; is not * `labels.owner!=sd AND labels.foo=bar` returns namespaces that have `owner` in label key but value is not `sd` AND have key/value `foo=bar` * `doesnotexist.foo=bar` returns an empty list. Note that namespace doesn&#x27;t have a field called &quot;doesnotexist&quot;. Since the filter does not match any namespaces, it returns no results For more information about filtering, see [API Filtering](https://aip.dev/160).
+  orderBy: string, Optional. The order to list results by. General `order_by` string syntax: ` () (,)` * `` allows value: `name` * `` ascending or descending order by ``. If this is left blank, `asc` is used Note that an empty `order_by` string results in default order, which is order by `name` in ascending order.
   pageSize: integer, Optional. The maximum number of items to return.
   pageToken: string, Optional. The next_page_token value returned from a previous List request, if any.
   x__xgafv: string, V1 error format.
@@ -252,10 +252,10 @@
     { # The response message for RegistrationService.ListNamespaces.
   &quot;namespaces&quot;: [ # The list of namespaces.
     { # A container for services. Namespaces allow administrators to group services together and define permissions for a collection of services.
-      &quot;labels&quot;: { # Optional. Resource labels associated with this Namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.
+      &quot;labels&quot;: { # Optional. Resource labels associated with this namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the namespace in the format &#x27;projects/*/locations/*/namespaces/*&#x27;.
+      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the namespace in the format `projects/*/locations/*/namespaces/*`.
     },
   ],
   &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more results in the list.
@@ -281,15 +281,15 @@
   <pre>Updates a namespace.
 
 Args:
-  name: string, Immutable. The resource name for the namespace in the format &#x27;projects/*/locations/*/namespaces/*&#x27;. (required)
+  name: string, Immutable. The resource name for the namespace in the format `projects/*/locations/*/namespaces/*`. (required)
   body: object, The request body.
     The object takes the form of:
 
 { # A container for services. Namespaces allow administrators to group services together and define permissions for a collection of services.
-  &quot;labels&quot;: { # Optional. Resource labels associated with this Namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.
+  &quot;labels&quot;: { # Optional. Resource labels associated with this namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the namespace in the format &#x27;projects/*/locations/*/namespaces/*&#x27;.
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the namespace in the format `projects/*/locations/*/namespaces/*`.
 }
 
   updateMask: string, Required. List of fields to be updated in this request.
@@ -302,10 +302,10 @@
   An object of the form:
 
     { # A container for services. Namespaces allow administrators to group services together and define permissions for a collection of services.
-  &quot;labels&quot;: { # Optional. Resource labels associated with this Namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.
+  &quot;labels&quot;: { # Optional. Resource labels associated with this namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the namespace in the format &#x27;projects/*/locations/*/namespaces/*&#x27;.
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the namespace in the format `projects/*/locations/*/namespaces/*`.
 }</pre>
 </div>
 
diff --git a/docs/dyn/servicedirectory_v1beta1.projects.locations.namespaces.services.endpoints.html b/docs/dyn/servicedirectory_v1beta1.projects.locations.namespaces.services.endpoints.html
index fec7536..aca4a6c 100644
--- a/docs/dyn/servicedirectory_v1beta1.projects.locations.namespaces.services.endpoints.html
+++ b/docs/dyn/servicedirectory_v1beta1.projects.locations.namespaces.services.endpoints.html
@@ -79,13 +79,13 @@
 <p class="firstline">Close httplib2 connections.</p>
 <p class="toc_element">
   <code><a href="#create">create(parent, body=None, endpointId=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Creates a endpoint, and returns the new Endpoint.</p>
+<p class="firstline">Creates an endpoint, and returns the new endpoint.</p>
 <p class="toc_element">
   <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
-<p class="firstline">Deletes a endpoint.</p>
+<p class="firstline">Deletes an endpoint.</p>
 <p class="toc_element">
   <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
-<p class="firstline">Gets a endpoint.</p>
+<p class="firstline">Gets an endpoint.</p>
 <p class="toc_element">
   <code><a href="#list">list(parent, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Lists all endpoints.</p>
@@ -94,7 +94,7 @@
 <p class="firstline">Retrieves the next page of results.</p>
 <p class="toc_element">
   <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Updates a endpoint.</p>
+<p class="firstline">Updates an endpoint.</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="close">close()</code>
@@ -103,7 +103,7 @@
 
 <div class="method">
     <code class="details" id="create">create(parent, body=None, endpointId=None, x__xgafv=None)</code>
-  <pre>Creates a endpoint, and returns the new Endpoint.
+  <pre>Creates an endpoint, and returns the new endpoint.
 
 Args:
   parent: string, Required. The resource name of the service that this endpoint provides. (required)
@@ -111,12 +111,12 @@
     The object takes the form of:
 
 { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
-  &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory will reject bad addresses like: &quot;8.8.8&quot; &quot;8.8.8.8:53&quot; &quot;test:bad:address&quot; &quot;[::1]&quot; &quot;[::1]:8080&quot; Limited to 45 characters.
-  &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The &#x27;(*.)google.com/&#x27; and &#x27;(*.)googleapis.com/&#x27; prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.
+  &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+  &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format &#x27;projects/*/locations/*/namespaces/*/services/*/endpoints/*&#x27;.
-  &quot;port&quot;: 42, # Optional. Service Directory will reject values outside of [0, 65535].
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+  &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
 }
 
   endpointId: string, Required. The Resource ID must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
@@ -129,18 +129,18 @@
   An object of the form:
 
     { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
-  &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory will reject bad addresses like: &quot;8.8.8&quot; &quot;8.8.8.8:53&quot; &quot;test:bad:address&quot; &quot;[::1]&quot; &quot;[::1]:8080&quot; Limited to 45 characters.
-  &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The &#x27;(*.)google.com/&#x27; and &#x27;(*.)googleapis.com/&#x27; prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.
+  &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+  &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format &#x27;projects/*/locations/*/namespaces/*/services/*/endpoints/*&#x27;.
-  &quot;port&quot;: 42, # Optional. Service Directory will reject values outside of [0, 65535].
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+  &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
 }</pre>
 </div>
 
 <div class="method">
     <code class="details" id="delete">delete(name, x__xgafv=None)</code>
-  <pre>Deletes a endpoint.
+  <pre>Deletes an endpoint.
 
 Args:
   name: string, Required. The name of the endpoint to delete. (required)
@@ -158,7 +158,7 @@
 
 <div class="method">
     <code class="details" id="get">get(name, x__xgafv=None)</code>
-  <pre>Gets a endpoint.
+  <pre>Gets an endpoint.
 
 Args:
   name: string, Required. The name of the endpoint to get. (required)
@@ -171,12 +171,12 @@
   An object of the form:
 
     { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
-  &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory will reject bad addresses like: &quot;8.8.8&quot; &quot;8.8.8.8:53&quot; &quot;test:bad:address&quot; &quot;[::1]&quot; &quot;[::1]:8080&quot; Limited to 45 characters.
-  &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The &#x27;(*.)google.com/&#x27; and &#x27;(*.)googleapis.com/&#x27; prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.
+  &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+  &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format &#x27;projects/*/locations/*/namespaces/*/services/*/endpoints/*&#x27;.
-  &quot;port&quot;: 42, # Optional. Service Directory will reject values outside of [0, 65535].
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+  &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
 }</pre>
 </div>
 
@@ -185,9 +185,9 @@
   <pre>Lists all endpoints.
 
 Args:
-  parent: string, Required. The resource name of the service whose endpoints we&#x27;d like to list. (required)
-  filter: string, Optional. The filter to list result by. General filter string syntax: () can be &quot;name&quot;, &quot;address&quot;, &quot;port&quot; or &quot;metadata.&quot; for map field. can be &quot;&lt;, &gt;, &lt;=, &gt;=, !=, =, :&quot;. Of which &quot;:&quot; means HAS, and is roughly the same as &quot;=&quot;. must be the same data type as field. can be &quot;AND, OR, NOT&quot;. Examples of valid filters: * &quot;metadata.owner&quot; returns Endpoints that have a label with the key &quot;owner&quot; this is the same as &quot;metadata:owner&quot;. * &quot;metadata.protocol=gRPC&quot; returns Endpoints that have key/value &quot;protocol=gRPC&quot;. * &quot;address=192.108.1.105&quot; returns Endpoints that have this address. * &quot;port&gt;8080&quot; returns Endpoints that have port number larger than 8080. * &quot;name&gt;projects/my-project/locations/us-east/namespaces/my-namespace/services/my-service/endpoints/endpoint-c&quot; returns Endpoints that have name that is alphabetically later than the string, so &quot;endpoint-e&quot; will be returned but &quot;endpoint-a&quot; will not be. * &quot;metadata.owner!=sd AND metadata.foo=bar&quot; returns Endpoints that have &quot;owner&quot; in label key but value is not &quot;sd&quot; AND have key/value foo=bar. * &quot;doesnotexist.foo=bar&quot; returns an empty list. Note that Endpoint doesn&#x27;t have a field called &quot;doesnotexist&quot;. Since the filter does not match any Endpoints, it returns no results.
-  orderBy: string, Optional. The order to list result by.
+  parent: string, Required. The resource name of the service whose endpoints you&#x27;d like to list. (required)
+  filter: string, Optional. The filter to list results by. General `filter` string syntax: ` ()` * `` can be `name`, `address`, `port`, or `metadata.` for map field * `` can be `&lt;`, `&gt;`, `&lt;=`, `&gt;=`, `!=`, `=`, `:`. Of which `:` means `HAS`, and is roughly the same as `=` * `` must be the same data type as field * `` can be `AND`, `OR`, `NOT` Examples of valid filters: * `metadata.owner` returns endpoints that have a metadata with the key `owner`, this is the same as `metadata:owner` * `metadata.protocol=gRPC` returns endpoints that have key/value `protocol=gRPC` * `address=192.108.1.105` returns endpoints that have this address * `port&gt;8080` returns endpoints that have port number larger than 8080 * `name&gt;projects/my-project/locations/us-east1/namespaces/my-namespace/services/my-service/endpoints/endpoint-c` returns endpoints that have name that is alphabetically later than the string, so &quot;endpoint-e&quot; is returned but &quot;endpoint-a&quot; is not * `metadata.owner!=sd AND metadata.foo=bar` returns endpoints that have `owner` in metadata key but value is not `sd` AND have key/value `foo=bar` * `doesnotexist.foo=bar` returns an empty list. Note that endpoint doesn&#x27;t have a field called &quot;doesnotexist&quot;. Since the filter does not match any endpoints, it returns no results For more information about filtering, see [API Filtering](https://aip.dev/160).
+  orderBy: string, Optional. The order to list results by. General `order_by` string syntax: ` () (,)` * `` allows values: `name`, `address`, `port` * `` ascending or descending order by ``. If this is left blank, `asc` is used Note that an empty `order_by` string results in default order, which is order by `name` in ascending order.
   pageSize: integer, Optional. The maximum number of items to return.
   pageToken: string, Optional. The next_page_token value returned from a previous List request, if any.
   x__xgafv: string, V1 error format.
@@ -201,12 +201,12 @@
     { # The response message for RegistrationService.ListEndpoints.
   &quot;endpoints&quot;: [ # The list of endpoints.
     { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
-      &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory will reject bad addresses like: &quot;8.8.8&quot; &quot;8.8.8.8:53&quot; &quot;test:bad:address&quot; &quot;[::1]&quot; &quot;[::1]:8080&quot; Limited to 45 characters.
-      &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The &#x27;(*.)google.com/&#x27; and &#x27;(*.)googleapis.com/&#x27; prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.
+      &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+      &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format &#x27;projects/*/locations/*/namespaces/*/services/*/endpoints/*&#x27;.
-      &quot;port&quot;: 42, # Optional. Service Directory will reject values outside of [0, 65535].
+      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+      &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
     },
   ],
   &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more results in the list.
@@ -229,20 +229,20 @@
 
 <div class="method">
     <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
-  <pre>Updates a endpoint.
+  <pre>Updates an endpoint.
 
 Args:
-  name: string, Immutable. The resource name for the endpoint in the format &#x27;projects/*/locations/*/namespaces/*/services/*/endpoints/*&#x27;. (required)
+  name: string, Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`. (required)
   body: object, The request body.
     The object takes the form of:
 
 { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
-  &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory will reject bad addresses like: &quot;8.8.8&quot; &quot;8.8.8.8:53&quot; &quot;test:bad:address&quot; &quot;[::1]&quot; &quot;[::1]:8080&quot; Limited to 45 characters.
-  &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The &#x27;(*.)google.com/&#x27; and &#x27;(*.)googleapis.com/&#x27; prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.
+  &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+  &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format &#x27;projects/*/locations/*/namespaces/*/services/*/endpoints/*&#x27;.
-  &quot;port&quot;: 42, # Optional. Service Directory will reject values outside of [0, 65535].
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+  &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
 }
 
   updateMask: string, Required. List of fields to be updated in this request.
@@ -255,12 +255,12 @@
   An object of the form:
 
     { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
-  &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory will reject bad addresses like: &quot;8.8.8&quot; &quot;8.8.8.8:53&quot; &quot;test:bad:address&quot; &quot;[::1]&quot; &quot;[::1]:8080&quot; Limited to 45 characters.
-  &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The &#x27;(*.)google.com/&#x27; and &#x27;(*.)googleapis.com/&#x27; prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.
+  &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+  &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format &#x27;projects/*/locations/*/namespaces/*/services/*/endpoints/*&#x27;.
-  &quot;port&quot;: 42, # Optional. Service Directory will reject values outside of [0, 65535].
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+  &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
 }</pre>
 </div>
 
diff --git a/docs/dyn/servicedirectory_v1beta1.projects.locations.namespaces.services.html b/docs/dyn/servicedirectory_v1beta1.projects.locations.namespaces.services.html
index 3858f4c..88e87e2 100644
--- a/docs/dyn/servicedirectory_v1beta1.projects.locations.namespaces.services.html
+++ b/docs/dyn/servicedirectory_v1beta1.projects.locations.namespaces.services.html
@@ -84,7 +84,7 @@
 <p class="firstline">Close httplib2 connections.</p>
 <p class="toc_element">
   <code><a href="#create">create(parent, body=None, serviceId=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Creates a service, and returns the new Service.</p>
+<p class="firstline">Creates a service, and returns the new service.</p>
 <p class="toc_element">
   <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
 <p class="firstline">Deletes a service. This also deletes all endpoints associated with the service.</p>
@@ -120,7 +120,7 @@
 
 <div class="method">
     <code class="details" id="create">create(parent, body=None, serviceId=None, x__xgafv=None)</code>
-  <pre>Creates a service, and returns the new Service.
+  <pre>Creates a service, and returns the new service.
 
 Args:
   parent: string, Required. The resource name of the namespace this service will belong to. (required)
@@ -128,20 +128,20 @@
     The object takes the form of:
 
 { # An individual service. A service contains a name and optional metadata. A service must exist before endpoints can be added to it.
-  &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.Resolve. Control plane clients should use RegistrationService.ListEndpoints.
+  &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.ResolveService. Control plane clients should use RegistrationService.ListEndpoints.
     { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
-      &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory will reject bad addresses like: &quot;8.8.8&quot; &quot;8.8.8.8:53&quot; &quot;test:bad:address&quot; &quot;[::1]&quot; &quot;[::1]:8080&quot; Limited to 45 characters.
-      &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The &#x27;(*.)google.com/&#x27; and &#x27;(*.)googleapis.com/&#x27; prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.
+      &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+      &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format &#x27;projects/*/locations/*/namespaces/*/services/*/endpoints/*&#x27;.
-      &quot;port&quot;: 42, # Optional. Service Directory will reject values outside of [0, 65535].
+      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+      &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
     },
   ],
-  &quot;metadata&quot;: { # Optional. Metadata for the service. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 2000 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The &#x27;(*.)google.com/&#x27; and &#x27;(*.)googleapis.com/&#x27; prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.
+  &quot;metadata&quot;: { # Optional. Metadata for the service. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format &#x27;projects/*/locations/*/namespaces/*/services/*&#x27;.
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format `projects/*/locations/*/namespaces/*/services/*`.
 }
 
   serviceId: string, Required. The Resource ID must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
@@ -154,20 +154,20 @@
   An object of the form:
 
     { # An individual service. A service contains a name and optional metadata. A service must exist before endpoints can be added to it.
-  &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.Resolve. Control plane clients should use RegistrationService.ListEndpoints.
+  &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.ResolveService. Control plane clients should use RegistrationService.ListEndpoints.
     { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
-      &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory will reject bad addresses like: &quot;8.8.8&quot; &quot;8.8.8.8:53&quot; &quot;test:bad:address&quot; &quot;[::1]&quot; &quot;[::1]:8080&quot; Limited to 45 characters.
-      &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The &#x27;(*.)google.com/&#x27; and &#x27;(*.)googleapis.com/&#x27; prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.
+      &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+      &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format &#x27;projects/*/locations/*/namespaces/*/services/*/endpoints/*&#x27;.
-      &quot;port&quot;: 42, # Optional. Service Directory will reject values outside of [0, 65535].
+      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+      &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
     },
   ],
-  &quot;metadata&quot;: { # Optional. Metadata for the service. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 2000 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The &#x27;(*.)google.com/&#x27; and &#x27;(*.)googleapis.com/&#x27; prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.
+  &quot;metadata&quot;: { # Optional. Metadata for the service. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format &#x27;projects/*/locations/*/namespaces/*/services/*&#x27;.
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format `projects/*/locations/*/namespaces/*/services/*`.
 }</pre>
 </div>
 
@@ -204,20 +204,20 @@
   An object of the form:
 
     { # An individual service. A service contains a name and optional metadata. A service must exist before endpoints can be added to it.
-  &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.Resolve. Control plane clients should use RegistrationService.ListEndpoints.
+  &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.ResolveService. Control plane clients should use RegistrationService.ListEndpoints.
     { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
-      &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory will reject bad addresses like: &quot;8.8.8&quot; &quot;8.8.8.8:53&quot; &quot;test:bad:address&quot; &quot;[::1]&quot; &quot;[::1]:8080&quot; Limited to 45 characters.
-      &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The &#x27;(*.)google.com/&#x27; and &#x27;(*.)googleapis.com/&#x27; prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.
+      &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+      &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format &#x27;projects/*/locations/*/namespaces/*/services/*/endpoints/*&#x27;.
-      &quot;port&quot;: 42, # Optional. Service Directory will reject values outside of [0, 65535].
+      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+      &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
     },
   ],
-  &quot;metadata&quot;: { # Optional. Metadata for the service. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 2000 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The &#x27;(*.)google.com/&#x27; and &#x27;(*.)googleapis.com/&#x27; prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.
+  &quot;metadata&quot;: { # Optional. Metadata for the service. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format &#x27;projects/*/locations/*/namespaces/*/services/*&#x27;.
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format `projects/*/locations/*/namespaces/*/services/*`.
 }</pre>
 </div>
 
@@ -269,9 +269,9 @@
   <pre>Lists all services belonging to a namespace.
 
 Args:
-  parent: string, Required. The resource name of the namespace whose services we&#x27;d like to list. (required)
-  filter: string, Optional. The filter to list result by. General filter string syntax: () can be &quot;name&quot;, or &quot;metadata.&quot; for map field. can be &quot;&lt;, &gt;, &lt;=, &gt;=, !=, =, :&quot;. Of which &quot;:&quot; means HAS, and is roughly the same as &quot;=&quot;. must be the same data type as field. can be &quot;AND, OR, NOT&quot;. Examples of valid filters: * &quot;metadata.owner&quot; returns Services that have a label with the key &quot;owner&quot; this is the same as &quot;metadata:owner&quot;. * &quot;metadata.protocol=gRPC&quot; returns Services that have key/value &quot;protocol=gRPC&quot;. * &quot;name&gt;projects/my-project/locations/us-east/namespaces/my-namespace/services/service-c&quot; returns Services that have name that is alphabetically later than the string, so &quot;service-e&quot; will be returned but &quot;service-a&quot; will not be. * &quot;metadata.owner!=sd AND metadata.foo=bar&quot; returns Services that have &quot;owner&quot; in label key but value is not &quot;sd&quot; AND have key/value foo=bar. * &quot;doesnotexist.foo=bar&quot; returns an empty list. Note that Service doesn&#x27;t have a field called &quot;doesnotexist&quot;. Since the filter does not match any Services, it returns no results.
-  orderBy: string, Optional. The order to list result by.
+  parent: string, Required. The resource name of the namespace whose services you&#x27;d like to list. (required)
+  filter: string, Optional. The filter to list results by. General `filter` string syntax: ` ()` * `` can be `name` or `metadata.` for map field * `` can be `&lt;`, `&gt;`, `&lt;=`, `&gt;=`, `!=`, `=`, `:`. Of which `:` means `HAS`, and is roughly the same as `=` * `` must be the same data type as field * `` can be `AND`, `OR`, `NOT` Examples of valid filters: * `metadata.owner` returns services that have a metadata with the key `owner`, this is the same as `metadata:owner` * `metadata.protocol=gRPC` returns services that have key/value `protocol=gRPC` * `name&gt;projects/my-project/locations/us-east1/namespaces/my-namespace/services/service-c` returns services that have name that is alphabetically later than the string, so &quot;service-e&quot; is returned but &quot;service-a&quot; is not * `metadata.owner!=sd AND metadata.foo=bar` returns services that have `owner` in metadata key but value is not `sd` AND have key/value `foo=bar` * `doesnotexist.foo=bar` returns an empty list. Note that service doesn&#x27;t have a field called &quot;doesnotexist&quot;. Since the filter does not match any services, it returns no results For more information about filtering, see [API Filtering](https://aip.dev/160).
+  orderBy: string, Optional. The order to list results by. General `order_by` string syntax: ` () (,)` * `` allows value: `name` * `` ascending or descending order by ``. If this is left blank, `asc` is used Note that an empty `order_by` string results in default order, which is order by `name` in ascending order.
   pageSize: integer, Optional. The maximum number of items to return.
   pageToken: string, Optional. The next_page_token value returned from a previous List request, if any.
   x__xgafv: string, V1 error format.
@@ -286,20 +286,20 @@
   &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more results in the list.
   &quot;services&quot;: [ # The list of services.
     { # An individual service. A service contains a name and optional metadata. A service must exist before endpoints can be added to it.
-      &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.Resolve. Control plane clients should use RegistrationService.ListEndpoints.
+      &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.ResolveService. Control plane clients should use RegistrationService.ListEndpoints.
         { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
-          &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory will reject bad addresses like: &quot;8.8.8&quot; &quot;8.8.8.8:53&quot; &quot;test:bad:address&quot; &quot;[::1]&quot; &quot;[::1]:8080&quot; Limited to 45 characters.
-          &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The &#x27;(*.)google.com/&#x27; and &#x27;(*.)googleapis.com/&#x27; prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.
+          &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+          &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.
             &quot;a_key&quot;: &quot;A String&quot;,
           },
-          &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format &#x27;projects/*/locations/*/namespaces/*/services/*/endpoints/*&#x27;.
-          &quot;port&quot;: 42, # Optional. Service Directory will reject values outside of [0, 65535].
+          &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+          &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
         },
       ],
-      &quot;metadata&quot;: { # Optional. Metadata for the service. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 2000 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The &#x27;(*.)google.com/&#x27; and &#x27;(*.)googleapis.com/&#x27; prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.
+      &quot;metadata&quot;: { # Optional. Metadata for the service. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format &#x27;projects/*/locations/*/namespaces/*/services/*&#x27;.
+      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format `projects/*/locations/*/namespaces/*/services/*`.
     },
   ],
 }</pre>
@@ -324,25 +324,25 @@
   <pre>Updates a service.
 
 Args:
-  name: string, Immutable. The resource name for the service in the format &#x27;projects/*/locations/*/namespaces/*/services/*&#x27;. (required)
+  name: string, Immutable. The resource name for the service in the format `projects/*/locations/*/namespaces/*/services/*`. (required)
   body: object, The request body.
     The object takes the form of:
 
 { # An individual service. A service contains a name and optional metadata. A service must exist before endpoints can be added to it.
-  &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.Resolve. Control plane clients should use RegistrationService.ListEndpoints.
+  &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.ResolveService. Control plane clients should use RegistrationService.ListEndpoints.
     { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
-      &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory will reject bad addresses like: &quot;8.8.8&quot; &quot;8.8.8.8:53&quot; &quot;test:bad:address&quot; &quot;[::1]&quot; &quot;[::1]:8080&quot; Limited to 45 characters.
-      &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The &#x27;(*.)google.com/&#x27; and &#x27;(*.)googleapis.com/&#x27; prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.
+      &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+      &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format &#x27;projects/*/locations/*/namespaces/*/services/*/endpoints/*&#x27;.
-      &quot;port&quot;: 42, # Optional. Service Directory will reject values outside of [0, 65535].
+      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+      &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
     },
   ],
-  &quot;metadata&quot;: { # Optional. Metadata for the service. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 2000 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The &#x27;(*.)google.com/&#x27; and &#x27;(*.)googleapis.com/&#x27; prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.
+  &quot;metadata&quot;: { # Optional. Metadata for the service. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format &#x27;projects/*/locations/*/namespaces/*/services/*&#x27;.
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format `projects/*/locations/*/namespaces/*/services/*`.
 }
 
   updateMask: string, Required. List of fields to be updated in this request.
@@ -355,20 +355,20 @@
   An object of the form:
 
     { # An individual service. A service contains a name and optional metadata. A service must exist before endpoints can be added to it.
-  &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.Resolve. Control plane clients should use RegistrationService.ListEndpoints.
+  &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.ResolveService. Control plane clients should use RegistrationService.ListEndpoints.
     { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
-      &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory will reject bad addresses like: &quot;8.8.8&quot; &quot;8.8.8.8:53&quot; &quot;test:bad:address&quot; &quot;[::1]&quot; &quot;[::1]:8080&quot; Limited to 45 characters.
-      &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The &#x27;(*.)google.com/&#x27; and &#x27;(*.)googleapis.com/&#x27; prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.
+      &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+      &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.
         &quot;a_key&quot;: &quot;A String&quot;,
       },
-      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format &#x27;projects/*/locations/*/namespaces/*/services/*/endpoints/*&#x27;.
-      &quot;port&quot;: 42, # Optional. Service Directory will reject values outside of [0, 65535].
+      &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+      &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
     },
   ],
-  &quot;metadata&quot;: { # Optional. Metadata for the service. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 2000 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The &#x27;(*.)google.com/&#x27; and &#x27;(*.)googleapis.com/&#x27; prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.
+  &quot;metadata&quot;: { # Optional. Metadata for the service. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.
     &quot;a_key&quot;: &quot;A String&quot;,
   },
-  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format &#x27;projects/*/locations/*/namespaces/*/services/*&#x27;.
+  &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format `projects/*/locations/*/namespaces/*/services/*`.
 }</pre>
 </div>
 
@@ -382,7 +382,7 @@
     The object takes the form of:
 
 { # The request message for LookupService.ResolveService. Looks up a service by its name, returns the service and its endpoints.
-  &quot;endpointFilter&quot;: &quot;A String&quot;, # Optional. The filter applied to the endpoints of the resolved service. General filter string syntax: () can be &quot;name&quot; or &quot;metadata.&quot; for map field. can be &quot;&lt;, &gt;, &lt;=, &gt;=, !=, =, :&quot;. Of which &quot;:&quot; means HAS and is roughly the same as &quot;=&quot;. must be the same data type as the field. can be &quot;AND, OR, NOT&quot;. Examples of valid filters: * &quot;metadata.owner&quot; returns Endpoints that have a label with the key &quot;owner&quot;, this is the same as &quot;metadata:owner&quot; * &quot;metadata.protocol=gRPC&quot; returns Endpoints that have key/value &quot;protocol=gRPC&quot; * &quot;metadata.owner!=sd AND metadata.foo=bar&quot; returns Endpoints that have &quot;owner&quot; field in metadata with a value that is not &quot;sd&quot; AND have the key/value foo=bar.
+  &quot;endpointFilter&quot;: &quot;A String&quot;, # Optional. The filter applied to the endpoints of the resolved service. General `filter` string syntax: ` ()` * `` can be `name`, `address`, `port`, or `metadata.` for map field * `` can be `&lt;`, `&gt;`, `&lt;=`, `&gt;=`, `!=`, `=`, `:`. Of which `:` means `HAS`, and is roughly the same as `=` * `` must be the same data type as field * `` can be `AND`, `OR`, `NOT` Examples of valid filters: * `metadata.owner` returns endpoints that have a annotation with the key `owner`, this is the same as `metadata:owner` * `metadata.protocol=gRPC` returns endpoints that have key/value `protocol=gRPC` * `address=192.108.1.105` returns endpoints that have this address * `port&gt;8080` returns endpoints that have port number larger than 8080 * `name&gt;projects/my-project/locations/us-east1/namespaces/my-namespace/services/my-service/endpoints/endpoint-c` returns endpoints that have name that is alphabetically later than the string, so &quot;endpoint-e&quot; is returned but &quot;endpoint-a&quot; is not * `metadata.owner!=sd AND metadata.foo=bar` returns endpoints that have `owner` in annotation key but value is not `sd` AND have key/value `foo=bar` * `doesnotexist.foo=bar` returns an empty list. Note that endpoint doesn&#x27;t have a field called &quot;doesnotexist&quot;. Since the filter does not match any endpoint, it returns no results For more information about filtering, see [API Filtering](https://aip.dev/160).
   &quot;maxEndpoints&quot;: 42, # Optional. The maximum number of endpoints to return. Defaults to 25. Maximum is 100. If a value less than one is specified, the Default is used. If a value greater than the Maximum is specified, the Maximum is used.
 }
 
@@ -396,20 +396,20 @@
 
     { # The response message for LookupService.ResolveService.
   &quot;service&quot;: { # An individual service. A service contains a name and optional metadata. A service must exist before endpoints can be added to it.
-    &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.Resolve. Control plane clients should use RegistrationService.ListEndpoints.
+    &quot;endpoints&quot;: [ # Output only. Endpoints associated with this service. Returned on LookupService.ResolveService. Control plane clients should use RegistrationService.ListEndpoints.
       { # An individual endpoint that provides a service. The service must already exist to create an endpoint.
-        &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory will reject bad addresses like: &quot;8.8.8&quot; &quot;8.8.8.8:53&quot; &quot;test:bad:address&quot; &quot;[::1]&quot; &quot;[::1]:8080&quot; Limited to 45 characters.
-        &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The &#x27;(*.)google.com/&#x27; and &#x27;(*.)googleapis.com/&#x27; prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.
+        &quot;address&quot;: &quot;A String&quot;, # Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.
+        &quot;metadata&quot;: { # Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.
           &quot;a_key&quot;: &quot;A String&quot;,
         },
-        &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format &#x27;projects/*/locations/*/namespaces/*/services/*/endpoints/*&#x27;.
-        &quot;port&quot;: 42, # Optional. Service Directory will reject values outside of [0, 65535].
+        &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.
+        &quot;port&quot;: 42, # Optional. Service Directory rejects values outside of `[0, 65535]`.
       },
     ],
-    &quot;metadata&quot;: { # Optional. Metadata for the service. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 2000 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The &#x27;(*.)google.com/&#x27; and &#x27;(*.)googleapis.com/&#x27; prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.
+    &quot;metadata&quot;: { # Optional. Metadata for the service. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.
       &quot;a_key&quot;: &quot;A String&quot;,
     },
-    &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format &#x27;projects/*/locations/*/namespaces/*/services/*&#x27;.
+    &quot;name&quot;: &quot;A String&quot;, # Immutable. The resource name for the service in the format `projects/*/locations/*/namespaces/*/services/*`.
   },
 }</pre>
 </div>
diff --git a/docs/dyn/servicemanagement_v1.services.configs.html b/docs/dyn/servicemanagement_v1.services.configs.html
index c2434fa..35f7a09 100644
--- a/docs/dyn/servicemanagement_v1.services.configs.html
+++ b/docs/dyn/servicemanagement_v1.services.configs.html
@@ -107,7 +107,7 @@
   body: object, The request body.
     The object takes the form of:
 
-{ # `Service` is the root object of Google service configuration schema. It describes basic information about a service, such as the name and the title, and delegates other aspects to sub-sections. Each sub-section is either a proto message or a repeated proto message that configures a specific aspect, such as auth. See each proto message definition for details. Example: type: google.api.Service config_version: 3 name: calendar.googleapis.com title: Google Calendar API apis: - name: google.calendar.v3.Calendar authentication: providers: - id: google_calendar_auth jwks_uri: https://www.googleapis.com/oauth2/v1/certs issuer: https://securetoken.google.com rules: - selector: &quot;*&quot; requirements: provider_id: google_calendar_auth
+{ # `Service` is the root object of Google service configuration schema. It describes basic information about a service, such as the name and the title, and delegates other aspects to sub-sections. Each sub-section is either a proto message or a repeated proto message that configures a specific aspect, such as auth. See each proto message definition for details. Example: type: google.api.Service name: calendar.googleapis.com title: Google Calendar API apis: - name: google.calendar.v3.Calendar authentication: providers: - id: google_calendar_auth jwks_uri: https://www.googleapis.com/oauth2/v1/certs issuer: https://securetoken.google.com rules: - selector: &quot;*&quot; requirements: provider_id: google_calendar_auth
   &quot;apis&quot;: [ # A list of API interfaces exported by this service. Only the `name` field of the google.protobuf.Api needs to be provided by the configuration author, as the remaining fields will be derived from the IDL during the normalization process. It is an error to specify an API interface here which cannot be resolved against the associated IDL files.
     { # Api is a light-weight descriptor for an API Interface. Interfaces are also described as &quot;protocol buffer services&quot; in some contexts, such as by the &quot;service&quot; keyword in a .proto file, but they are different from API Services, which represent a concrete implementation of an interface as opposed to simply a description of methods and bindings. They are also sometimes simply referred to as &quot;APIs&quot; in other contexts, such as the name of this message itself. See https://cloud.google.com/apis/design/glossary for detailed terminology.
       &quot;methods&quot;: [ # The methods of this interface, in unspecified order.
@@ -208,7 +208,7 @@
       },
     ],
   },
-  &quot;configVersion&quot;: 42, # This field is obsolete. Its value must be set to `3`.
+  &quot;configVersion&quot;: 42, # Deprecated. The service config compiler always sets this field to `3`.
   &quot;context&quot;: { # `Context` defines which contexts an API requests. Example: context: rules: - selector: &quot;*&quot; requested: - google.rpc.context.ProjectContext - google.rpc.context.OriginContext The above specifies that all methods in the API request `google.rpc.context.ProjectContext` and `google.rpc.context.OriginContext`. Available context types are defined in package `google.rpc.context`. This also provides mechanism to allowlist any protobuf message extension that can be sent in grpc metadata using “x-goog-ext--bin” and “x-goog-ext--jspb” format. For example, list any service specific protobuf types that can appear in grpc metadata as follows in your yaml file: Example: context: rules: - selector: &quot;google.example.library.v1.LibraryService.CreateBook&quot; allowed_request_extensions: - google.foo.v1.NewExtension allowed_response_extensions: - google.foo.v1.NewExtension You can also specify extension ID instead of fully qualified extension name here. # Context configuration.
     &quot;rules&quot;: [ # A list of RPC context rules that apply to individual API methods. **NOTE:** All service configuration rules follow &quot;last one wins&quot; order.
       { # A context rule provides information about the context for an individual API element.
@@ -265,7 +265,7 @@
     &quot;summary&quot;: &quot;A String&quot;, # A short summary of what the service does. Can only be provided by plain text.
   },
   &quot;endpoints&quot;: [ # Configuration for network endpoints. If this is empty, then an endpoint with the same name as the service is automatically generated to service all defined APIs.
-    { # `Endpoint` describes a network endpoint that serves a set of APIs. A service may expose any number of endpoints, and all endpoints share the same service configuration, such as quota configuration and monitoring configuration. Example service configuration: name: library-example.googleapis.com endpoints: # Below entry makes &#x27;google.example.library.v1.Library&#x27; # API be served from endpoint address library-example.googleapis.com. # It also allows HTTP OPTIONS calls to be passed to the backend, for # it to decide whether the subsequent cross-origin request is # allowed to proceed. - name: library-example.googleapis.com allow_cors: true
+    { # `Endpoint` describes a network endpoint of a service that serves a set of APIs. It is commonly known as a service endpoint. A service may expose any number of service endpoints, and all service endpoints share the same service definition, such as quota limits and monitoring metrics. Example service configuration: name: library-example.googleapis.com endpoints: # Below entry makes &#x27;google.example.library.v1.Library&#x27; # API be served from endpoint address library-example.googleapis.com. # It also allows HTTP OPTIONS calls to be passed to the backend, for # it to decide whether the subsequent cross-origin request is # allowed to proceed. - name: library-example.googleapis.com allow_cors: true
       &quot;aliases&quot;: [ # DEPRECATED: This field is no longer supported. Instead of using aliases, please specify multiple google.api.Endpoint for each of the intended aliases. Additional names that this endpoint will be hosted on.
         &quot;A String&quot;,
       ],
@@ -383,7 +383,7 @@
       ],
       &quot;name&quot;: &quot;A String&quot;, # The resource name of the metric descriptor.
       &quot;type&quot;: &quot;A String&quot;, # The metric type, including its DNS name prefix. The type is not URL-encoded. All user-defined metric types have the DNS name `custom.googleapis.com` or `external.googleapis.com`. Metric types should use a natural hierarchical grouping. For example: &quot;custom.googleapis.com/invoice/paid/amount&quot; &quot;external.googleapis.com/prometheus/up&quot; &quot;appengine.googleapis.com/http/server/response_latencies&quot;
-      &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The `unit` defines the representation of the stored metric values. Different systems may scale the values to be more easily displayed (so a value of `0.02KBy` _might_ be displayed as `20By`, and a value of `3523KBy` _might_ be displayed as `3.5MBy`). However, if the `unit` is `KBy`, then the value of the metric is always in thousands of bytes, no matter how it may be displayed.. If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an `INT64 CUMULATIVE` metric whose `unit` is `s{CPU}` (or equivalently `1s{CPU}` or just `s`). If the job uses 12,005 CPU-seconds, then the value is written as `12005`. Alternatively, if you want a custom metric to record data in a more granular way, you can create a `DOUBLE CUMULATIVE` metric whose `unit` is `ks{CPU}`, and then write the value `12.005` (which is `12005/1000`), or use `Kis{CPU}` and write `11.723` (which is `12005/1024`). The supported units are a subset of [The Unified Code for Units of Measure](http://unitsofmeasure.org/ucum.html) standard: **Basic units (UNIT)** * `bit` bit * `By` byte * `s` second * `min` minute * `h` hour * `d` day * `1` dimensionless **Prefixes (PREFIX)** * `k` kilo (10^3) * `M` mega (10^6) * `G` giga (10^9) * `T` tera (10^12) * `P` peta (10^15) * `E` exa (10^18) * `Z` zetta (10^21) * `Y` yotta (10^24) * `m` milli (10^-3) * `u` micro (10^-6) * `n` nano (10^-9) * `p` pico (10^-12) * `f` femto (10^-15) * `a` atto (10^-18) * `z` zepto (10^-21) * `y` yocto (10^-24) * `Ki` kibi (2^10) * `Mi` mebi (2^20) * `Gi` gibi (2^30) * `Ti` tebi (2^40) * `Pi` pebi (2^50) **Grammar** The grammar also includes these connectors: * `/` division or ratio (as an infix operator). For examples, `kBy/{email}` or `MiBy/10ms` (although you should almost never have `/s` in a metric `unit`; rates should always be computed at query time from the underlying cumulative or delta value). * `.` multiplication or composition (as an infix operator). For examples, `GBy.d` or `k{watt}.h`. The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: * `Annotation` is just a comment if it follows a `UNIT`. If the annotation is used alone, then the unit is equivalent to `1`. For examples, `{request}/s == 1/s`, `By{transmitted}/s == By/s`. * `NAME` is a sequence of non-blank printable ASCII characters not containing `{` or `}`. * `1` represents a unitary [dimensionless unit](https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in `1/s`. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as `1/d` or `{new-users}/d` (and a metric value `5` would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as `1000/d` or `k1/d` or `k{page_views}/d` (and a metric value of `5.3` would mean &quot;5300 page views per day&quot;). * `%` represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value `3` means &quot;3 percent&quot;). * `10^2.%` indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value `0.03` means &quot;3 percent&quot;).
+      &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The `unit` defines the representation of the stored metric values. Different systems might scale the values to be more easily displayed (so a value of `0.02kBy` _might_ be displayed as `20By`, and a value of `3523kBy` _might_ be displayed as `3.5MBy`). However, if the `unit` is `kBy`, then the value of the metric is always in thousands of bytes, no matter how it might be displayed. If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an `INT64 CUMULATIVE` metric whose `unit` is `s{CPU}` (or equivalently `1s{CPU}` or just `s`). If the job uses 12,005 CPU-seconds, then the value is written as `12005`. Alternatively, if you want a custom metric to record data in a more granular way, you can create a `DOUBLE CUMULATIVE` metric whose `unit` is `ks{CPU}`, and then write the value `12.005` (which is `12005/1000`), or use `Kis{CPU}` and write `11.723` (which is `12005/1024`). The supported units are a subset of [The Unified Code for Units of Measure](https://unitsofmeasure.org/ucum.html) standard: **Basic units (UNIT)** * `bit` bit * `By` byte * `s` second * `min` minute * `h` hour * `d` day * `1` dimensionless **Prefixes (PREFIX)** * `k` kilo (10^3) * `M` mega (10^6) * `G` giga (10^9) * `T` tera (10^12) * `P` peta (10^15) * `E` exa (10^18) * `Z` zetta (10^21) * `Y` yotta (10^24) * `m` milli (10^-3) * `u` micro (10^-6) * `n` nano (10^-9) * `p` pico (10^-12) * `f` femto (10^-15) * `a` atto (10^-18) * `z` zepto (10^-21) * `y` yocto (10^-24) * `Ki` kibi (2^10) * `Mi` mebi (2^20) * `Gi` gibi (2^30) * `Ti` tebi (2^40) * `Pi` pebi (2^50) **Grammar** The grammar also includes these connectors: * `/` division or ratio (as an infix operator). For examples, `kBy/{email}` or `MiBy/10ms` (although you should almost never have `/s` in a metric `unit`; rates should always be computed at query time from the underlying cumulative or delta value). * `.` multiplication or composition (as an infix operator). For examples, `GBy.d` or `k{watt}.h`. The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: * `Annotation` is just a comment if it follows a `UNIT`. If the annotation is used alone, then the unit is equivalent to `1`. For examples, `{request}/s == 1/s`, `By{transmitted}/s == By/s`. * `NAME` is a sequence of non-blank printable ASCII characters not containing `{` or `}`. * `1` represents a unitary [dimensionless unit](https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in `1/s`. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as `1/d` or `{new-users}/d` (and a metric value `5` would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as `1000/d` or `k1/d` or `k{page_views}/d` (and a metric value of `5.3` would mean &quot;5300 page views per day&quot;). * `%` represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value `3` means &quot;3 percent&quot;). * `10^2.%` indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value `0.03` means &quot;3 percent&quot;).
       &quot;valueType&quot;: &quot;A String&quot;, # Whether the measurement is an integer, a floating-point number, etc. Some combinations of `metric_kind` and `value_type` might not be supported.
     },
   ],
@@ -555,7 +555,7 @@
   ],
   &quot;usage&quot;: { # Configuration controlling usage of a service. # Configuration controlling usage of this service.
     &quot;producerNotificationChannel&quot;: &quot;A String&quot;, # The full resource name of a channel used for sending notifications to the service producer. Google Service Management currently only supports [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification channel. To use Google Cloud Pub/Sub as the channel, this must be the name of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format documented in https://cloud.google.com/pubsub/docs/overview.
-    &quot;requirements&quot;: [ # Requirements that must be satisfied before a consumer project can use the service. Each requirement is of the form /; for example &#x27;serviceusage.googleapis.com/billing-enabled&#x27;.
+    &quot;requirements&quot;: [ # Requirements that must be satisfied before a consumer project can use the service. Each requirement is of the form /; for example &#x27;serviceusage.googleapis.com/billing-enabled&#x27;. For Google APIs, a Terms of Service requirement must be included here. Google Cloud APIs must include &quot;serviceusage.googleapis.com/tos/cloud&quot;. Other Google APIs should include &quot;serviceusage.googleapis.com/tos/universal&quot;. Additional ToS can be included based on the business needs.
       &quot;A String&quot;,
     ],
     &quot;rules&quot;: [ # A list of usage rules that apply to individual API methods. **NOTE:** All service configuration rules follow &quot;last one wins&quot; order.
@@ -576,7 +576,7 @@
 Returns:
   An object of the form:
 
-    { # `Service` is the root object of Google service configuration schema. It describes basic information about a service, such as the name and the title, and delegates other aspects to sub-sections. Each sub-section is either a proto message or a repeated proto message that configures a specific aspect, such as auth. See each proto message definition for details. Example: type: google.api.Service config_version: 3 name: calendar.googleapis.com title: Google Calendar API apis: - name: google.calendar.v3.Calendar authentication: providers: - id: google_calendar_auth jwks_uri: https://www.googleapis.com/oauth2/v1/certs issuer: https://securetoken.google.com rules: - selector: &quot;*&quot; requirements: provider_id: google_calendar_auth
+    { # `Service` is the root object of Google service configuration schema. It describes basic information about a service, such as the name and the title, and delegates other aspects to sub-sections. Each sub-section is either a proto message or a repeated proto message that configures a specific aspect, such as auth. See each proto message definition for details. Example: type: google.api.Service name: calendar.googleapis.com title: Google Calendar API apis: - name: google.calendar.v3.Calendar authentication: providers: - id: google_calendar_auth jwks_uri: https://www.googleapis.com/oauth2/v1/certs issuer: https://securetoken.google.com rules: - selector: &quot;*&quot; requirements: provider_id: google_calendar_auth
   &quot;apis&quot;: [ # A list of API interfaces exported by this service. Only the `name` field of the google.protobuf.Api needs to be provided by the configuration author, as the remaining fields will be derived from the IDL during the normalization process. It is an error to specify an API interface here which cannot be resolved against the associated IDL files.
     { # Api is a light-weight descriptor for an API Interface. Interfaces are also described as &quot;protocol buffer services&quot; in some contexts, such as by the &quot;service&quot; keyword in a .proto file, but they are different from API Services, which represent a concrete implementation of an interface as opposed to simply a description of methods and bindings. They are also sometimes simply referred to as &quot;APIs&quot; in other contexts, such as the name of this message itself. See https://cloud.google.com/apis/design/glossary for detailed terminology.
       &quot;methods&quot;: [ # The methods of this interface, in unspecified order.
@@ -677,7 +677,7 @@
       },
     ],
   },
-  &quot;configVersion&quot;: 42, # This field is obsolete. Its value must be set to `3`.
+  &quot;configVersion&quot;: 42, # Deprecated. The service config compiler always sets this field to `3`.
   &quot;context&quot;: { # `Context` defines which contexts an API requests. Example: context: rules: - selector: &quot;*&quot; requested: - google.rpc.context.ProjectContext - google.rpc.context.OriginContext The above specifies that all methods in the API request `google.rpc.context.ProjectContext` and `google.rpc.context.OriginContext`. Available context types are defined in package `google.rpc.context`. This also provides mechanism to allowlist any protobuf message extension that can be sent in grpc metadata using “x-goog-ext--bin” and “x-goog-ext--jspb” format. For example, list any service specific protobuf types that can appear in grpc metadata as follows in your yaml file: Example: context: rules: - selector: &quot;google.example.library.v1.LibraryService.CreateBook&quot; allowed_request_extensions: - google.foo.v1.NewExtension allowed_response_extensions: - google.foo.v1.NewExtension You can also specify extension ID instead of fully qualified extension name here. # Context configuration.
     &quot;rules&quot;: [ # A list of RPC context rules that apply to individual API methods. **NOTE:** All service configuration rules follow &quot;last one wins&quot; order.
       { # A context rule provides information about the context for an individual API element.
@@ -734,7 +734,7 @@
     &quot;summary&quot;: &quot;A String&quot;, # A short summary of what the service does. Can only be provided by plain text.
   },
   &quot;endpoints&quot;: [ # Configuration for network endpoints. If this is empty, then an endpoint with the same name as the service is automatically generated to service all defined APIs.
-    { # `Endpoint` describes a network endpoint that serves a set of APIs. A service may expose any number of endpoints, and all endpoints share the same service configuration, such as quota configuration and monitoring configuration. Example service configuration: name: library-example.googleapis.com endpoints: # Below entry makes &#x27;google.example.library.v1.Library&#x27; # API be served from endpoint address library-example.googleapis.com. # It also allows HTTP OPTIONS calls to be passed to the backend, for # it to decide whether the subsequent cross-origin request is # allowed to proceed. - name: library-example.googleapis.com allow_cors: true
+    { # `Endpoint` describes a network endpoint of a service that serves a set of APIs. It is commonly known as a service endpoint. A service may expose any number of service endpoints, and all service endpoints share the same service definition, such as quota limits and monitoring metrics. Example service configuration: name: library-example.googleapis.com endpoints: # Below entry makes &#x27;google.example.library.v1.Library&#x27; # API be served from endpoint address library-example.googleapis.com. # It also allows HTTP OPTIONS calls to be passed to the backend, for # it to decide whether the subsequent cross-origin request is # allowed to proceed. - name: library-example.googleapis.com allow_cors: true
       &quot;aliases&quot;: [ # DEPRECATED: This field is no longer supported. Instead of using aliases, please specify multiple google.api.Endpoint for each of the intended aliases. Additional names that this endpoint will be hosted on.
         &quot;A String&quot;,
       ],
@@ -852,7 +852,7 @@
       ],
       &quot;name&quot;: &quot;A String&quot;, # The resource name of the metric descriptor.
       &quot;type&quot;: &quot;A String&quot;, # The metric type, including its DNS name prefix. The type is not URL-encoded. All user-defined metric types have the DNS name `custom.googleapis.com` or `external.googleapis.com`. Metric types should use a natural hierarchical grouping. For example: &quot;custom.googleapis.com/invoice/paid/amount&quot; &quot;external.googleapis.com/prometheus/up&quot; &quot;appengine.googleapis.com/http/server/response_latencies&quot;
-      &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The `unit` defines the representation of the stored metric values. Different systems may scale the values to be more easily displayed (so a value of `0.02KBy` _might_ be displayed as `20By`, and a value of `3523KBy` _might_ be displayed as `3.5MBy`). However, if the `unit` is `KBy`, then the value of the metric is always in thousands of bytes, no matter how it may be displayed.. If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an `INT64 CUMULATIVE` metric whose `unit` is `s{CPU}` (or equivalently `1s{CPU}` or just `s`). If the job uses 12,005 CPU-seconds, then the value is written as `12005`. Alternatively, if you want a custom metric to record data in a more granular way, you can create a `DOUBLE CUMULATIVE` metric whose `unit` is `ks{CPU}`, and then write the value `12.005` (which is `12005/1000`), or use `Kis{CPU}` and write `11.723` (which is `12005/1024`). The supported units are a subset of [The Unified Code for Units of Measure](http://unitsofmeasure.org/ucum.html) standard: **Basic units (UNIT)** * `bit` bit * `By` byte * `s` second * `min` minute * `h` hour * `d` day * `1` dimensionless **Prefixes (PREFIX)** * `k` kilo (10^3) * `M` mega (10^6) * `G` giga (10^9) * `T` tera (10^12) * `P` peta (10^15) * `E` exa (10^18) * `Z` zetta (10^21) * `Y` yotta (10^24) * `m` milli (10^-3) * `u` micro (10^-6) * `n` nano (10^-9) * `p` pico (10^-12) * `f` femto (10^-15) * `a` atto (10^-18) * `z` zepto (10^-21) * `y` yocto (10^-24) * `Ki` kibi (2^10) * `Mi` mebi (2^20) * `Gi` gibi (2^30) * `Ti` tebi (2^40) * `Pi` pebi (2^50) **Grammar** The grammar also includes these connectors: * `/` division or ratio (as an infix operator). For examples, `kBy/{email}` or `MiBy/10ms` (although you should almost never have `/s` in a metric `unit`; rates should always be computed at query time from the underlying cumulative or delta value). * `.` multiplication or composition (as an infix operator). For examples, `GBy.d` or `k{watt}.h`. The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: * `Annotation` is just a comment if it follows a `UNIT`. If the annotation is used alone, then the unit is equivalent to `1`. For examples, `{request}/s == 1/s`, `By{transmitted}/s == By/s`. * `NAME` is a sequence of non-blank printable ASCII characters not containing `{` or `}`. * `1` represents a unitary [dimensionless unit](https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in `1/s`. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as `1/d` or `{new-users}/d` (and a metric value `5` would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as `1000/d` or `k1/d` or `k{page_views}/d` (and a metric value of `5.3` would mean &quot;5300 page views per day&quot;). * `%` represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value `3` means &quot;3 percent&quot;). * `10^2.%` indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value `0.03` means &quot;3 percent&quot;).
+      &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The `unit` defines the representation of the stored metric values. Different systems might scale the values to be more easily displayed (so a value of `0.02kBy` _might_ be displayed as `20By`, and a value of `3523kBy` _might_ be displayed as `3.5MBy`). However, if the `unit` is `kBy`, then the value of the metric is always in thousands of bytes, no matter how it might be displayed. If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an `INT64 CUMULATIVE` metric whose `unit` is `s{CPU}` (or equivalently `1s{CPU}` or just `s`). If the job uses 12,005 CPU-seconds, then the value is written as `12005`. Alternatively, if you want a custom metric to record data in a more granular way, you can create a `DOUBLE CUMULATIVE` metric whose `unit` is `ks{CPU}`, and then write the value `12.005` (which is `12005/1000`), or use `Kis{CPU}` and write `11.723` (which is `12005/1024`). The supported units are a subset of [The Unified Code for Units of Measure](https://unitsofmeasure.org/ucum.html) standard: **Basic units (UNIT)** * `bit` bit * `By` byte * `s` second * `min` minute * `h` hour * `d` day * `1` dimensionless **Prefixes (PREFIX)** * `k` kilo (10^3) * `M` mega (10^6) * `G` giga (10^9) * `T` tera (10^12) * `P` peta (10^15) * `E` exa (10^18) * `Z` zetta (10^21) * `Y` yotta (10^24) * `m` milli (10^-3) * `u` micro (10^-6) * `n` nano (10^-9) * `p` pico (10^-12) * `f` femto (10^-15) * `a` atto (10^-18) * `z` zepto (10^-21) * `y` yocto (10^-24) * `Ki` kibi (2^10) * `Mi` mebi (2^20) * `Gi` gibi (2^30) * `Ti` tebi (2^40) * `Pi` pebi (2^50) **Grammar** The grammar also includes these connectors: * `/` division or ratio (as an infix operator). For examples, `kBy/{email}` or `MiBy/10ms` (although you should almost never have `/s` in a metric `unit`; rates should always be computed at query time from the underlying cumulative or delta value). * `.` multiplication or composition (as an infix operator). For examples, `GBy.d` or `k{watt}.h`. The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: * `Annotation` is just a comment if it follows a `UNIT`. If the annotation is used alone, then the unit is equivalent to `1`. For examples, `{request}/s == 1/s`, `By{transmitted}/s == By/s`. * `NAME` is a sequence of non-blank printable ASCII characters not containing `{` or `}`. * `1` represents a unitary [dimensionless unit](https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in `1/s`. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as `1/d` or `{new-users}/d` (and a metric value `5` would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as `1000/d` or `k1/d` or `k{page_views}/d` (and a metric value of `5.3` would mean &quot;5300 page views per day&quot;). * `%` represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value `3` means &quot;3 percent&quot;). * `10^2.%` indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value `0.03` means &quot;3 percent&quot;).
       &quot;valueType&quot;: &quot;A String&quot;, # Whether the measurement is an integer, a floating-point number, etc. Some combinations of `metric_kind` and `value_type` might not be supported.
     },
   ],
@@ -1024,7 +1024,7 @@
   ],
   &quot;usage&quot;: { # Configuration controlling usage of a service. # Configuration controlling usage of this service.
     &quot;producerNotificationChannel&quot;: &quot;A String&quot;, # The full resource name of a channel used for sending notifications to the service producer. Google Service Management currently only supports [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification channel. To use Google Cloud Pub/Sub as the channel, this must be the name of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format documented in https://cloud.google.com/pubsub/docs/overview.
-    &quot;requirements&quot;: [ # Requirements that must be satisfied before a consumer project can use the service. Each requirement is of the form /; for example &#x27;serviceusage.googleapis.com/billing-enabled&#x27;.
+    &quot;requirements&quot;: [ # Requirements that must be satisfied before a consumer project can use the service. Each requirement is of the form /; for example &#x27;serviceusage.googleapis.com/billing-enabled&#x27;. For Google APIs, a Terms of Service requirement must be included here. Google Cloud APIs must include &quot;serviceusage.googleapis.com/tos/cloud&quot;. Other Google APIs should include &quot;serviceusage.googleapis.com/tos/universal&quot;. Additional ToS can be included based on the business needs.
       &quot;A String&quot;,
     ],
     &quot;rules&quot;: [ # A list of usage rules that apply to individual API methods. **NOTE:** All service configuration rules follow &quot;last one wins&quot; order.
@@ -1057,7 +1057,7 @@
 Returns:
   An object of the form:
 
-    { # `Service` is the root object of Google service configuration schema. It describes basic information about a service, such as the name and the title, and delegates other aspects to sub-sections. Each sub-section is either a proto message or a repeated proto message that configures a specific aspect, such as auth. See each proto message definition for details. Example: type: google.api.Service config_version: 3 name: calendar.googleapis.com title: Google Calendar API apis: - name: google.calendar.v3.Calendar authentication: providers: - id: google_calendar_auth jwks_uri: https://www.googleapis.com/oauth2/v1/certs issuer: https://securetoken.google.com rules: - selector: &quot;*&quot; requirements: provider_id: google_calendar_auth
+    { # `Service` is the root object of Google service configuration schema. It describes basic information about a service, such as the name and the title, and delegates other aspects to sub-sections. Each sub-section is either a proto message or a repeated proto message that configures a specific aspect, such as auth. See each proto message definition for details. Example: type: google.api.Service name: calendar.googleapis.com title: Google Calendar API apis: - name: google.calendar.v3.Calendar authentication: providers: - id: google_calendar_auth jwks_uri: https://www.googleapis.com/oauth2/v1/certs issuer: https://securetoken.google.com rules: - selector: &quot;*&quot; requirements: provider_id: google_calendar_auth
   &quot;apis&quot;: [ # A list of API interfaces exported by this service. Only the `name` field of the google.protobuf.Api needs to be provided by the configuration author, as the remaining fields will be derived from the IDL during the normalization process. It is an error to specify an API interface here which cannot be resolved against the associated IDL files.
     { # Api is a light-weight descriptor for an API Interface. Interfaces are also described as &quot;protocol buffer services&quot; in some contexts, such as by the &quot;service&quot; keyword in a .proto file, but they are different from API Services, which represent a concrete implementation of an interface as opposed to simply a description of methods and bindings. They are also sometimes simply referred to as &quot;APIs&quot; in other contexts, such as the name of this message itself. See https://cloud.google.com/apis/design/glossary for detailed terminology.
       &quot;methods&quot;: [ # The methods of this interface, in unspecified order.
@@ -1158,7 +1158,7 @@
       },
     ],
   },
-  &quot;configVersion&quot;: 42, # This field is obsolete. Its value must be set to `3`.
+  &quot;configVersion&quot;: 42, # Deprecated. The service config compiler always sets this field to `3`.
   &quot;context&quot;: { # `Context` defines which contexts an API requests. Example: context: rules: - selector: &quot;*&quot; requested: - google.rpc.context.ProjectContext - google.rpc.context.OriginContext The above specifies that all methods in the API request `google.rpc.context.ProjectContext` and `google.rpc.context.OriginContext`. Available context types are defined in package `google.rpc.context`. This also provides mechanism to allowlist any protobuf message extension that can be sent in grpc metadata using “x-goog-ext--bin” and “x-goog-ext--jspb” format. For example, list any service specific protobuf types that can appear in grpc metadata as follows in your yaml file: Example: context: rules: - selector: &quot;google.example.library.v1.LibraryService.CreateBook&quot; allowed_request_extensions: - google.foo.v1.NewExtension allowed_response_extensions: - google.foo.v1.NewExtension You can also specify extension ID instead of fully qualified extension name here. # Context configuration.
     &quot;rules&quot;: [ # A list of RPC context rules that apply to individual API methods. **NOTE:** All service configuration rules follow &quot;last one wins&quot; order.
       { # A context rule provides information about the context for an individual API element.
@@ -1215,7 +1215,7 @@
     &quot;summary&quot;: &quot;A String&quot;, # A short summary of what the service does. Can only be provided by plain text.
   },
   &quot;endpoints&quot;: [ # Configuration for network endpoints. If this is empty, then an endpoint with the same name as the service is automatically generated to service all defined APIs.
-    { # `Endpoint` describes a network endpoint that serves a set of APIs. A service may expose any number of endpoints, and all endpoints share the same service configuration, such as quota configuration and monitoring configuration. Example service configuration: name: library-example.googleapis.com endpoints: # Below entry makes &#x27;google.example.library.v1.Library&#x27; # API be served from endpoint address library-example.googleapis.com. # It also allows HTTP OPTIONS calls to be passed to the backend, for # it to decide whether the subsequent cross-origin request is # allowed to proceed. - name: library-example.googleapis.com allow_cors: true
+    { # `Endpoint` describes a network endpoint of a service that serves a set of APIs. It is commonly known as a service endpoint. A service may expose any number of service endpoints, and all service endpoints share the same service definition, such as quota limits and monitoring metrics. Example service configuration: name: library-example.googleapis.com endpoints: # Below entry makes &#x27;google.example.library.v1.Library&#x27; # API be served from endpoint address library-example.googleapis.com. # It also allows HTTP OPTIONS calls to be passed to the backend, for # it to decide whether the subsequent cross-origin request is # allowed to proceed. - name: library-example.googleapis.com allow_cors: true
       &quot;aliases&quot;: [ # DEPRECATED: This field is no longer supported. Instead of using aliases, please specify multiple google.api.Endpoint for each of the intended aliases. Additional names that this endpoint will be hosted on.
         &quot;A String&quot;,
       ],
@@ -1333,7 +1333,7 @@
       ],
       &quot;name&quot;: &quot;A String&quot;, # The resource name of the metric descriptor.
       &quot;type&quot;: &quot;A String&quot;, # The metric type, including its DNS name prefix. The type is not URL-encoded. All user-defined metric types have the DNS name `custom.googleapis.com` or `external.googleapis.com`. Metric types should use a natural hierarchical grouping. For example: &quot;custom.googleapis.com/invoice/paid/amount&quot; &quot;external.googleapis.com/prometheus/up&quot; &quot;appengine.googleapis.com/http/server/response_latencies&quot;
-      &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The `unit` defines the representation of the stored metric values. Different systems may scale the values to be more easily displayed (so a value of `0.02KBy` _might_ be displayed as `20By`, and a value of `3523KBy` _might_ be displayed as `3.5MBy`). However, if the `unit` is `KBy`, then the value of the metric is always in thousands of bytes, no matter how it may be displayed.. If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an `INT64 CUMULATIVE` metric whose `unit` is `s{CPU}` (or equivalently `1s{CPU}` or just `s`). If the job uses 12,005 CPU-seconds, then the value is written as `12005`. Alternatively, if you want a custom metric to record data in a more granular way, you can create a `DOUBLE CUMULATIVE` metric whose `unit` is `ks{CPU}`, and then write the value `12.005` (which is `12005/1000`), or use `Kis{CPU}` and write `11.723` (which is `12005/1024`). The supported units are a subset of [The Unified Code for Units of Measure](http://unitsofmeasure.org/ucum.html) standard: **Basic units (UNIT)** * `bit` bit * `By` byte * `s` second * `min` minute * `h` hour * `d` day * `1` dimensionless **Prefixes (PREFIX)** * `k` kilo (10^3) * `M` mega (10^6) * `G` giga (10^9) * `T` tera (10^12) * `P` peta (10^15) * `E` exa (10^18) * `Z` zetta (10^21) * `Y` yotta (10^24) * `m` milli (10^-3) * `u` micro (10^-6) * `n` nano (10^-9) * `p` pico (10^-12) * `f` femto (10^-15) * `a` atto (10^-18) * `z` zepto (10^-21) * `y` yocto (10^-24) * `Ki` kibi (2^10) * `Mi` mebi (2^20) * `Gi` gibi (2^30) * `Ti` tebi (2^40) * `Pi` pebi (2^50) **Grammar** The grammar also includes these connectors: * `/` division or ratio (as an infix operator). For examples, `kBy/{email}` or `MiBy/10ms` (although you should almost never have `/s` in a metric `unit`; rates should always be computed at query time from the underlying cumulative or delta value). * `.` multiplication or composition (as an infix operator). For examples, `GBy.d` or `k{watt}.h`. The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: * `Annotation` is just a comment if it follows a `UNIT`. If the annotation is used alone, then the unit is equivalent to `1`. For examples, `{request}/s == 1/s`, `By{transmitted}/s == By/s`. * `NAME` is a sequence of non-blank printable ASCII characters not containing `{` or `}`. * `1` represents a unitary [dimensionless unit](https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in `1/s`. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as `1/d` or `{new-users}/d` (and a metric value `5` would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as `1000/d` or `k1/d` or `k{page_views}/d` (and a metric value of `5.3` would mean &quot;5300 page views per day&quot;). * `%` represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value `3` means &quot;3 percent&quot;). * `10^2.%` indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value `0.03` means &quot;3 percent&quot;).
+      &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The `unit` defines the representation of the stored metric values. Different systems might scale the values to be more easily displayed (so a value of `0.02kBy` _might_ be displayed as `20By`, and a value of `3523kBy` _might_ be displayed as `3.5MBy`). However, if the `unit` is `kBy`, then the value of the metric is always in thousands of bytes, no matter how it might be displayed. If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an `INT64 CUMULATIVE` metric whose `unit` is `s{CPU}` (or equivalently `1s{CPU}` or just `s`). If the job uses 12,005 CPU-seconds, then the value is written as `12005`. Alternatively, if you want a custom metric to record data in a more granular way, you can create a `DOUBLE CUMULATIVE` metric whose `unit` is `ks{CPU}`, and then write the value `12.005` (which is `12005/1000`), or use `Kis{CPU}` and write `11.723` (which is `12005/1024`). The supported units are a subset of [The Unified Code for Units of Measure](https://unitsofmeasure.org/ucum.html) standard: **Basic units (UNIT)** * `bit` bit * `By` byte * `s` second * `min` minute * `h` hour * `d` day * `1` dimensionless **Prefixes (PREFIX)** * `k` kilo (10^3) * `M` mega (10^6) * `G` giga (10^9) * `T` tera (10^12) * `P` peta (10^15) * `E` exa (10^18) * `Z` zetta (10^21) * `Y` yotta (10^24) * `m` milli (10^-3) * `u` micro (10^-6) * `n` nano (10^-9) * `p` pico (10^-12) * `f` femto (10^-15) * `a` atto (10^-18) * `z` zepto (10^-21) * `y` yocto (10^-24) * `Ki` kibi (2^10) * `Mi` mebi (2^20) * `Gi` gibi (2^30) * `Ti` tebi (2^40) * `Pi` pebi (2^50) **Grammar** The grammar also includes these connectors: * `/` division or ratio (as an infix operator). For examples, `kBy/{email}` or `MiBy/10ms` (although you should almost never have `/s` in a metric `unit`; rates should always be computed at query time from the underlying cumulative or delta value). * `.` multiplication or composition (as an infix operator). For examples, `GBy.d` or `k{watt}.h`. The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: * `Annotation` is just a comment if it follows a `UNIT`. If the annotation is used alone, then the unit is equivalent to `1`. For examples, `{request}/s == 1/s`, `By{transmitted}/s == By/s`. * `NAME` is a sequence of non-blank printable ASCII characters not containing `{` or `}`. * `1` represents a unitary [dimensionless unit](https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in `1/s`. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as `1/d` or `{new-users}/d` (and a metric value `5` would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as `1000/d` or `k1/d` or `k{page_views}/d` (and a metric value of `5.3` would mean &quot;5300 page views per day&quot;). * `%` represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value `3` means &quot;3 percent&quot;). * `10^2.%` indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value `0.03` means &quot;3 percent&quot;).
       &quot;valueType&quot;: &quot;A String&quot;, # Whether the measurement is an integer, a floating-point number, etc. Some combinations of `metric_kind` and `value_type` might not be supported.
     },
   ],
@@ -1505,7 +1505,7 @@
   ],
   &quot;usage&quot;: { # Configuration controlling usage of a service. # Configuration controlling usage of this service.
     &quot;producerNotificationChannel&quot;: &quot;A String&quot;, # The full resource name of a channel used for sending notifications to the service producer. Google Service Management currently only supports [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification channel. To use Google Cloud Pub/Sub as the channel, this must be the name of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format documented in https://cloud.google.com/pubsub/docs/overview.
-    &quot;requirements&quot;: [ # Requirements that must be satisfied before a consumer project can use the service. Each requirement is of the form /; for example &#x27;serviceusage.googleapis.com/billing-enabled&#x27;.
+    &quot;requirements&quot;: [ # Requirements that must be satisfied before a consumer project can use the service. Each requirement is of the form /; for example &#x27;serviceusage.googleapis.com/billing-enabled&#x27;. For Google APIs, a Terms of Service requirement must be included here. Google Cloud APIs must include &quot;serviceusage.googleapis.com/tos/cloud&quot;. Other Google APIs should include &quot;serviceusage.googleapis.com/tos/universal&quot;. Additional ToS can be included based on the business needs.
       &quot;A String&quot;,
     ],
     &quot;rules&quot;: [ # A list of usage rules that apply to individual API methods. **NOTE:** All service configuration rules follow &quot;last one wins&quot; order.
@@ -1538,7 +1538,7 @@
     { # Response message for ListServiceConfigs method.
   &quot;nextPageToken&quot;: &quot;A String&quot;, # The token of the next page of results.
   &quot;serviceConfigs&quot;: [ # The list of service configuration resources.
-    { # `Service` is the root object of Google service configuration schema. It describes basic information about a service, such as the name and the title, and delegates other aspects to sub-sections. Each sub-section is either a proto message or a repeated proto message that configures a specific aspect, such as auth. See each proto message definition for details. Example: type: google.api.Service config_version: 3 name: calendar.googleapis.com title: Google Calendar API apis: - name: google.calendar.v3.Calendar authentication: providers: - id: google_calendar_auth jwks_uri: https://www.googleapis.com/oauth2/v1/certs issuer: https://securetoken.google.com rules: - selector: &quot;*&quot; requirements: provider_id: google_calendar_auth
+    { # `Service` is the root object of Google service configuration schema. It describes basic information about a service, such as the name and the title, and delegates other aspects to sub-sections. Each sub-section is either a proto message or a repeated proto message that configures a specific aspect, such as auth. See each proto message definition for details. Example: type: google.api.Service name: calendar.googleapis.com title: Google Calendar API apis: - name: google.calendar.v3.Calendar authentication: providers: - id: google_calendar_auth jwks_uri: https://www.googleapis.com/oauth2/v1/certs issuer: https://securetoken.google.com rules: - selector: &quot;*&quot; requirements: provider_id: google_calendar_auth
       &quot;apis&quot;: [ # A list of API interfaces exported by this service. Only the `name` field of the google.protobuf.Api needs to be provided by the configuration author, as the remaining fields will be derived from the IDL during the normalization process. It is an error to specify an API interface here which cannot be resolved against the associated IDL files.
         { # Api is a light-weight descriptor for an API Interface. Interfaces are also described as &quot;protocol buffer services&quot; in some contexts, such as by the &quot;service&quot; keyword in a .proto file, but they are different from API Services, which represent a concrete implementation of an interface as opposed to simply a description of methods and bindings. They are also sometimes simply referred to as &quot;APIs&quot; in other contexts, such as the name of this message itself. See https://cloud.google.com/apis/design/glossary for detailed terminology.
           &quot;methods&quot;: [ # The methods of this interface, in unspecified order.
@@ -1639,7 +1639,7 @@
           },
         ],
       },
-      &quot;configVersion&quot;: 42, # This field is obsolete. Its value must be set to `3`.
+      &quot;configVersion&quot;: 42, # Deprecated. The service config compiler always sets this field to `3`.
       &quot;context&quot;: { # `Context` defines which contexts an API requests. Example: context: rules: - selector: &quot;*&quot; requested: - google.rpc.context.ProjectContext - google.rpc.context.OriginContext The above specifies that all methods in the API request `google.rpc.context.ProjectContext` and `google.rpc.context.OriginContext`. Available context types are defined in package `google.rpc.context`. This also provides mechanism to allowlist any protobuf message extension that can be sent in grpc metadata using “x-goog-ext--bin” and “x-goog-ext--jspb” format. For example, list any service specific protobuf types that can appear in grpc metadata as follows in your yaml file: Example: context: rules: - selector: &quot;google.example.library.v1.LibraryService.CreateBook&quot; allowed_request_extensions: - google.foo.v1.NewExtension allowed_response_extensions: - google.foo.v1.NewExtension You can also specify extension ID instead of fully qualified extension name here. # Context configuration.
         &quot;rules&quot;: [ # A list of RPC context rules that apply to individual API methods. **NOTE:** All service configuration rules follow &quot;last one wins&quot; order.
           { # A context rule provides information about the context for an individual API element.
@@ -1696,7 +1696,7 @@
         &quot;summary&quot;: &quot;A String&quot;, # A short summary of what the service does. Can only be provided by plain text.
       },
       &quot;endpoints&quot;: [ # Configuration for network endpoints. If this is empty, then an endpoint with the same name as the service is automatically generated to service all defined APIs.
-        { # `Endpoint` describes a network endpoint that serves a set of APIs. A service may expose any number of endpoints, and all endpoints share the same service configuration, such as quota configuration and monitoring configuration. Example service configuration: name: library-example.googleapis.com endpoints: # Below entry makes &#x27;google.example.library.v1.Library&#x27; # API be served from endpoint address library-example.googleapis.com. # It also allows HTTP OPTIONS calls to be passed to the backend, for # it to decide whether the subsequent cross-origin request is # allowed to proceed. - name: library-example.googleapis.com allow_cors: true
+        { # `Endpoint` describes a network endpoint of a service that serves a set of APIs. It is commonly known as a service endpoint. A service may expose any number of service endpoints, and all service endpoints share the same service definition, such as quota limits and monitoring metrics. Example service configuration: name: library-example.googleapis.com endpoints: # Below entry makes &#x27;google.example.library.v1.Library&#x27; # API be served from endpoint address library-example.googleapis.com. # It also allows HTTP OPTIONS calls to be passed to the backend, for # it to decide whether the subsequent cross-origin request is # allowed to proceed. - name: library-example.googleapis.com allow_cors: true
           &quot;aliases&quot;: [ # DEPRECATED: This field is no longer supported. Instead of using aliases, please specify multiple google.api.Endpoint for each of the intended aliases. Additional names that this endpoint will be hosted on.
             &quot;A String&quot;,
           ],
@@ -1814,7 +1814,7 @@
           ],
           &quot;name&quot;: &quot;A String&quot;, # The resource name of the metric descriptor.
           &quot;type&quot;: &quot;A String&quot;, # The metric type, including its DNS name prefix. The type is not URL-encoded. All user-defined metric types have the DNS name `custom.googleapis.com` or `external.googleapis.com`. Metric types should use a natural hierarchical grouping. For example: &quot;custom.googleapis.com/invoice/paid/amount&quot; &quot;external.googleapis.com/prometheus/up&quot; &quot;appengine.googleapis.com/http/server/response_latencies&quot;
-          &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The `unit` defines the representation of the stored metric values. Different systems may scale the values to be more easily displayed (so a value of `0.02KBy` _might_ be displayed as `20By`, and a value of `3523KBy` _might_ be displayed as `3.5MBy`). However, if the `unit` is `KBy`, then the value of the metric is always in thousands of bytes, no matter how it may be displayed.. If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an `INT64 CUMULATIVE` metric whose `unit` is `s{CPU}` (or equivalently `1s{CPU}` or just `s`). If the job uses 12,005 CPU-seconds, then the value is written as `12005`. Alternatively, if you want a custom metric to record data in a more granular way, you can create a `DOUBLE CUMULATIVE` metric whose `unit` is `ks{CPU}`, and then write the value `12.005` (which is `12005/1000`), or use `Kis{CPU}` and write `11.723` (which is `12005/1024`). The supported units are a subset of [The Unified Code for Units of Measure](http://unitsofmeasure.org/ucum.html) standard: **Basic units (UNIT)** * `bit` bit * `By` byte * `s` second * `min` minute * `h` hour * `d` day * `1` dimensionless **Prefixes (PREFIX)** * `k` kilo (10^3) * `M` mega (10^6) * `G` giga (10^9) * `T` tera (10^12) * `P` peta (10^15) * `E` exa (10^18) * `Z` zetta (10^21) * `Y` yotta (10^24) * `m` milli (10^-3) * `u` micro (10^-6) * `n` nano (10^-9) * `p` pico (10^-12) * `f` femto (10^-15) * `a` atto (10^-18) * `z` zepto (10^-21) * `y` yocto (10^-24) * `Ki` kibi (2^10) * `Mi` mebi (2^20) * `Gi` gibi (2^30) * `Ti` tebi (2^40) * `Pi` pebi (2^50) **Grammar** The grammar also includes these connectors: * `/` division or ratio (as an infix operator). For examples, `kBy/{email}` or `MiBy/10ms` (although you should almost never have `/s` in a metric `unit`; rates should always be computed at query time from the underlying cumulative or delta value). * `.` multiplication or composition (as an infix operator). For examples, `GBy.d` or `k{watt}.h`. The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: * `Annotation` is just a comment if it follows a `UNIT`. If the annotation is used alone, then the unit is equivalent to `1`. For examples, `{request}/s == 1/s`, `By{transmitted}/s == By/s`. * `NAME` is a sequence of non-blank printable ASCII characters not containing `{` or `}`. * `1` represents a unitary [dimensionless unit](https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in `1/s`. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as `1/d` or `{new-users}/d` (and a metric value `5` would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as `1000/d` or `k1/d` or `k{page_views}/d` (and a metric value of `5.3` would mean &quot;5300 page views per day&quot;). * `%` represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value `3` means &quot;3 percent&quot;). * `10^2.%` indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value `0.03` means &quot;3 percent&quot;).
+          &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The `unit` defines the representation of the stored metric values. Different systems might scale the values to be more easily displayed (so a value of `0.02kBy` _might_ be displayed as `20By`, and a value of `3523kBy` _might_ be displayed as `3.5MBy`). However, if the `unit` is `kBy`, then the value of the metric is always in thousands of bytes, no matter how it might be displayed. If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an `INT64 CUMULATIVE` metric whose `unit` is `s{CPU}` (or equivalently `1s{CPU}` or just `s`). If the job uses 12,005 CPU-seconds, then the value is written as `12005`. Alternatively, if you want a custom metric to record data in a more granular way, you can create a `DOUBLE CUMULATIVE` metric whose `unit` is `ks{CPU}`, and then write the value `12.005` (which is `12005/1000`), or use `Kis{CPU}` and write `11.723` (which is `12005/1024`). The supported units are a subset of [The Unified Code for Units of Measure](https://unitsofmeasure.org/ucum.html) standard: **Basic units (UNIT)** * `bit` bit * `By` byte * `s` second * `min` minute * `h` hour * `d` day * `1` dimensionless **Prefixes (PREFIX)** * `k` kilo (10^3) * `M` mega (10^6) * `G` giga (10^9) * `T` tera (10^12) * `P` peta (10^15) * `E` exa (10^18) * `Z` zetta (10^21) * `Y` yotta (10^24) * `m` milli (10^-3) * `u` micro (10^-6) * `n` nano (10^-9) * `p` pico (10^-12) * `f` femto (10^-15) * `a` atto (10^-18) * `z` zepto (10^-21) * `y` yocto (10^-24) * `Ki` kibi (2^10) * `Mi` mebi (2^20) * `Gi` gibi (2^30) * `Ti` tebi (2^40) * `Pi` pebi (2^50) **Grammar** The grammar also includes these connectors: * `/` division or ratio (as an infix operator). For examples, `kBy/{email}` or `MiBy/10ms` (although you should almost never have `/s` in a metric `unit`; rates should always be computed at query time from the underlying cumulative or delta value). * `.` multiplication or composition (as an infix operator). For examples, `GBy.d` or `k{watt}.h`. The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: * `Annotation` is just a comment if it follows a `UNIT`. If the annotation is used alone, then the unit is equivalent to `1`. For examples, `{request}/s == 1/s`, `By{transmitted}/s == By/s`. * `NAME` is a sequence of non-blank printable ASCII characters not containing `{` or `}`. * `1` represents a unitary [dimensionless unit](https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in `1/s`. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as `1/d` or `{new-users}/d` (and a metric value `5` would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as `1000/d` or `k1/d` or `k{page_views}/d` (and a metric value of `5.3` would mean &quot;5300 page views per day&quot;). * `%` represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value `3` means &quot;3 percent&quot;). * `10^2.%` indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value `0.03` means &quot;3 percent&quot;).
           &quot;valueType&quot;: &quot;A String&quot;, # Whether the measurement is an integer, a floating-point number, etc. Some combinations of `metric_kind` and `value_type` might not be supported.
         },
       ],
@@ -1986,7 +1986,7 @@
       ],
       &quot;usage&quot;: { # Configuration controlling usage of a service. # Configuration controlling usage of this service.
         &quot;producerNotificationChannel&quot;: &quot;A String&quot;, # The full resource name of a channel used for sending notifications to the service producer. Google Service Management currently only supports [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification channel. To use Google Cloud Pub/Sub as the channel, this must be the name of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format documented in https://cloud.google.com/pubsub/docs/overview.
-        &quot;requirements&quot;: [ # Requirements that must be satisfied before a consumer project can use the service. Each requirement is of the form /; for example &#x27;serviceusage.googleapis.com/billing-enabled&#x27;.
+        &quot;requirements&quot;: [ # Requirements that must be satisfied before a consumer project can use the service. Each requirement is of the form /; for example &#x27;serviceusage.googleapis.com/billing-enabled&#x27;. For Google APIs, a Terms of Service requirement must be included here. Google Cloud APIs must include &quot;serviceusage.googleapis.com/tos/cloud&quot;. Other Google APIs should include &quot;serviceusage.googleapis.com/tos/universal&quot;. Additional ToS can be included based on the business needs.
           &quot;A String&quot;,
         ],
         &quot;rules&quot;: [ # A list of usage rules that apply to individual API methods. **NOTE:** All service configuration rules follow &quot;last one wins&quot; order.
diff --git a/docs/dyn/servicemanagement_v1.services.html b/docs/dyn/servicemanagement_v1.services.html
index 48226a2..73b777f 100644
--- a/docs/dyn/servicemanagement_v1.services.html
+++ b/docs/dyn/servicemanagement_v1.services.html
@@ -347,7 +347,7 @@
 Returns:
   An object of the form:
 
-    { # `Service` is the root object of Google service configuration schema. It describes basic information about a service, such as the name and the title, and delegates other aspects to sub-sections. Each sub-section is either a proto message or a repeated proto message that configures a specific aspect, such as auth. See each proto message definition for details. Example: type: google.api.Service config_version: 3 name: calendar.googleapis.com title: Google Calendar API apis: - name: google.calendar.v3.Calendar authentication: providers: - id: google_calendar_auth jwks_uri: https://www.googleapis.com/oauth2/v1/certs issuer: https://securetoken.google.com rules: - selector: &quot;*&quot; requirements: provider_id: google_calendar_auth
+    { # `Service` is the root object of Google service configuration schema. It describes basic information about a service, such as the name and the title, and delegates other aspects to sub-sections. Each sub-section is either a proto message or a repeated proto message that configures a specific aspect, such as auth. See each proto message definition for details. Example: type: google.api.Service name: calendar.googleapis.com title: Google Calendar API apis: - name: google.calendar.v3.Calendar authentication: providers: - id: google_calendar_auth jwks_uri: https://www.googleapis.com/oauth2/v1/certs issuer: https://securetoken.google.com rules: - selector: &quot;*&quot; requirements: provider_id: google_calendar_auth
   &quot;apis&quot;: [ # A list of API interfaces exported by this service. Only the `name` field of the google.protobuf.Api needs to be provided by the configuration author, as the remaining fields will be derived from the IDL during the normalization process. It is an error to specify an API interface here which cannot be resolved against the associated IDL files.
     { # Api is a light-weight descriptor for an API Interface. Interfaces are also described as &quot;protocol buffer services&quot; in some contexts, such as by the &quot;service&quot; keyword in a .proto file, but they are different from API Services, which represent a concrete implementation of an interface as opposed to simply a description of methods and bindings. They are also sometimes simply referred to as &quot;APIs&quot; in other contexts, such as the name of this message itself. See https://cloud.google.com/apis/design/glossary for detailed terminology.
       &quot;methods&quot;: [ # The methods of this interface, in unspecified order.
@@ -448,7 +448,7 @@
       },
     ],
   },
-  &quot;configVersion&quot;: 42, # This field is obsolete. Its value must be set to `3`.
+  &quot;configVersion&quot;: 42, # Deprecated. The service config compiler always sets this field to `3`.
   &quot;context&quot;: { # `Context` defines which contexts an API requests. Example: context: rules: - selector: &quot;*&quot; requested: - google.rpc.context.ProjectContext - google.rpc.context.OriginContext The above specifies that all methods in the API request `google.rpc.context.ProjectContext` and `google.rpc.context.OriginContext`. Available context types are defined in package `google.rpc.context`. This also provides mechanism to allowlist any protobuf message extension that can be sent in grpc metadata using “x-goog-ext--bin” and “x-goog-ext--jspb” format. For example, list any service specific protobuf types that can appear in grpc metadata as follows in your yaml file: Example: context: rules: - selector: &quot;google.example.library.v1.LibraryService.CreateBook&quot; allowed_request_extensions: - google.foo.v1.NewExtension allowed_response_extensions: - google.foo.v1.NewExtension You can also specify extension ID instead of fully qualified extension name here. # Context configuration.
     &quot;rules&quot;: [ # A list of RPC context rules that apply to individual API methods. **NOTE:** All service configuration rules follow &quot;last one wins&quot; order.
       { # A context rule provides information about the context for an individual API element.
@@ -505,7 +505,7 @@
     &quot;summary&quot;: &quot;A String&quot;, # A short summary of what the service does. Can only be provided by plain text.
   },
   &quot;endpoints&quot;: [ # Configuration for network endpoints. If this is empty, then an endpoint with the same name as the service is automatically generated to service all defined APIs.
-    { # `Endpoint` describes a network endpoint that serves a set of APIs. A service may expose any number of endpoints, and all endpoints share the same service configuration, such as quota configuration and monitoring configuration. Example service configuration: name: library-example.googleapis.com endpoints: # Below entry makes &#x27;google.example.library.v1.Library&#x27; # API be served from endpoint address library-example.googleapis.com. # It also allows HTTP OPTIONS calls to be passed to the backend, for # it to decide whether the subsequent cross-origin request is # allowed to proceed. - name: library-example.googleapis.com allow_cors: true
+    { # `Endpoint` describes a network endpoint of a service that serves a set of APIs. It is commonly known as a service endpoint. A service may expose any number of service endpoints, and all service endpoints share the same service definition, such as quota limits and monitoring metrics. Example service configuration: name: library-example.googleapis.com endpoints: # Below entry makes &#x27;google.example.library.v1.Library&#x27; # API be served from endpoint address library-example.googleapis.com. # It also allows HTTP OPTIONS calls to be passed to the backend, for # it to decide whether the subsequent cross-origin request is # allowed to proceed. - name: library-example.googleapis.com allow_cors: true
       &quot;aliases&quot;: [ # DEPRECATED: This field is no longer supported. Instead of using aliases, please specify multiple google.api.Endpoint for each of the intended aliases. Additional names that this endpoint will be hosted on.
         &quot;A String&quot;,
       ],
@@ -623,7 +623,7 @@
       ],
       &quot;name&quot;: &quot;A String&quot;, # The resource name of the metric descriptor.
       &quot;type&quot;: &quot;A String&quot;, # The metric type, including its DNS name prefix. The type is not URL-encoded. All user-defined metric types have the DNS name `custom.googleapis.com` or `external.googleapis.com`. Metric types should use a natural hierarchical grouping. For example: &quot;custom.googleapis.com/invoice/paid/amount&quot; &quot;external.googleapis.com/prometheus/up&quot; &quot;appengine.googleapis.com/http/server/response_latencies&quot;
-      &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The `unit` defines the representation of the stored metric values. Different systems may scale the values to be more easily displayed (so a value of `0.02KBy` _might_ be displayed as `20By`, and a value of `3523KBy` _might_ be displayed as `3.5MBy`). However, if the `unit` is `KBy`, then the value of the metric is always in thousands of bytes, no matter how it may be displayed.. If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an `INT64 CUMULATIVE` metric whose `unit` is `s{CPU}` (or equivalently `1s{CPU}` or just `s`). If the job uses 12,005 CPU-seconds, then the value is written as `12005`. Alternatively, if you want a custom metric to record data in a more granular way, you can create a `DOUBLE CUMULATIVE` metric whose `unit` is `ks{CPU}`, and then write the value `12.005` (which is `12005/1000`), or use `Kis{CPU}` and write `11.723` (which is `12005/1024`). The supported units are a subset of [The Unified Code for Units of Measure](http://unitsofmeasure.org/ucum.html) standard: **Basic units (UNIT)** * `bit` bit * `By` byte * `s` second * `min` minute * `h` hour * `d` day * `1` dimensionless **Prefixes (PREFIX)** * `k` kilo (10^3) * `M` mega (10^6) * `G` giga (10^9) * `T` tera (10^12) * `P` peta (10^15) * `E` exa (10^18) * `Z` zetta (10^21) * `Y` yotta (10^24) * `m` milli (10^-3) * `u` micro (10^-6) * `n` nano (10^-9) * `p` pico (10^-12) * `f` femto (10^-15) * `a` atto (10^-18) * `z` zepto (10^-21) * `y` yocto (10^-24) * `Ki` kibi (2^10) * `Mi` mebi (2^20) * `Gi` gibi (2^30) * `Ti` tebi (2^40) * `Pi` pebi (2^50) **Grammar** The grammar also includes these connectors: * `/` division or ratio (as an infix operator). For examples, `kBy/{email}` or `MiBy/10ms` (although you should almost never have `/s` in a metric `unit`; rates should always be computed at query time from the underlying cumulative or delta value). * `.` multiplication or composition (as an infix operator). For examples, `GBy.d` or `k{watt}.h`. The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: * `Annotation` is just a comment if it follows a `UNIT`. If the annotation is used alone, then the unit is equivalent to `1`. For examples, `{request}/s == 1/s`, `By{transmitted}/s == By/s`. * `NAME` is a sequence of non-blank printable ASCII characters not containing `{` or `}`. * `1` represents a unitary [dimensionless unit](https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in `1/s`. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as `1/d` or `{new-users}/d` (and a metric value `5` would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as `1000/d` or `k1/d` or `k{page_views}/d` (and a metric value of `5.3` would mean &quot;5300 page views per day&quot;). * `%` represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value `3` means &quot;3 percent&quot;). * `10^2.%` indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value `0.03` means &quot;3 percent&quot;).
+      &quot;unit&quot;: &quot;A String&quot;, # The units in which the metric value is reported. It is only applicable if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The `unit` defines the representation of the stored metric values. Different systems might scale the values to be more easily displayed (so a value of `0.02kBy` _might_ be displayed as `20By`, and a value of `3523kBy` _might_ be displayed as `3.5MBy`). However, if the `unit` is `kBy`, then the value of the metric is always in thousands of bytes, no matter how it might be displayed. If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an `INT64 CUMULATIVE` metric whose `unit` is `s{CPU}` (or equivalently `1s{CPU}` or just `s`). If the job uses 12,005 CPU-seconds, then the value is written as `12005`. Alternatively, if you want a custom metric to record data in a more granular way, you can create a `DOUBLE CUMULATIVE` metric whose `unit` is `ks{CPU}`, and then write the value `12.005` (which is `12005/1000`), or use `Kis{CPU}` and write `11.723` (which is `12005/1024`). The supported units are a subset of [The Unified Code for Units of Measure](https://unitsofmeasure.org/ucum.html) standard: **Basic units (UNIT)** * `bit` bit * `By` byte * `s` second * `min` minute * `h` hour * `d` day * `1` dimensionless **Prefixes (PREFIX)** * `k` kilo (10^3) * `M` mega (10^6) * `G` giga (10^9) * `T` tera (10^12) * `P` peta (10^15) * `E` exa (10^18) * `Z` zetta (10^21) * `Y` yotta (10^24) * `m` milli (10^-3) * `u` micro (10^-6) * `n` nano (10^-9) * `p` pico (10^-12) * `f` femto (10^-15) * `a` atto (10^-18) * `z` zepto (10^-21) * `y` yocto (10^-24) * `Ki` kibi (2^10) * `Mi` mebi (2^20) * `Gi` gibi (2^30) * `Ti` tebi (2^40) * `Pi` pebi (2^50) **Grammar** The grammar also includes these connectors: * `/` division or ratio (as an infix operator). For examples, `kBy/{email}` or `MiBy/10ms` (although you should almost never have `/s` in a metric `unit`; rates should always be computed at query time from the underlying cumulative or delta value). * `.` multiplication or composition (as an infix operator). For examples, `GBy.d` or `k{watt}.h`. The grammar for a unit is as follows: Expression = Component { &quot;.&quot; Component } { &quot;/&quot; Component } ; Component = ( [ PREFIX ] UNIT | &quot;%&quot; ) [ Annotation ] | Annotation | &quot;1&quot; ; Annotation = &quot;{&quot; NAME &quot;}&quot; ; Notes: * `Annotation` is just a comment if it follows a `UNIT`. If the annotation is used alone, then the unit is equivalent to `1`. For examples, `{request}/s == 1/s`, `By{transmitted}/s == By/s`. * `NAME` is a sequence of non-blank printable ASCII characters not containing `{` or `}`. * `1` represents a unitary [dimensionless unit](https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in `1/s`. It is typically used when none of the basic units are appropriate. For example, &quot;new users per day&quot; can be represented as `1/d` or `{new-users}/d` (and a metric value `5` would mean &quot;5 new users). Alternatively, &quot;thousands of page views per day&quot; would be represented as `1000/d` or `k1/d` or `k{page_views}/d` (and a metric value of `5.3` would mean &quot;5300 page views per day&quot;). * `%` represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value `3` means &quot;3 percent&quot;). * `10^2.%` indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value `0.03` means &quot;3 percent&quot;).
       &quot;valueType&quot;: &quot;A String&quot;, # Whether the measurement is an integer, a floating-point number, etc. Some combinations of `metric_kind` and `value_type` might not be supported.
     },
   ],
@@ -795,7 +795,7 @@
   ],
   &quot;usage&quot;: { # Configuration controlling usage of a service. # Configuration controlling usage of this service.
     &quot;producerNotificationChannel&quot;: &quot;A String&quot;, # The full resource name of a channel used for sending notifications to the service producer. Google Service Management currently only supports [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification channel. To use Google Cloud Pub/Sub as the channel, this must be the name of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format documented in https://cloud.google.com/pubsub/docs/overview.
-    &quot;requirements&quot;: [ # Requirements that must be satisfied before a consumer project can use the service. Each requirement is of the form /; for example &#x27;serviceusage.googleapis.com/billing-enabled&#x27;.
+    &quot;requirements&quot;: [ # Requirements that must be satisfied before a consumer project can use the service. Each requirement is of the form /; for example &#x27;serviceusage.googleapis.com/billing-enabled&#x27;. For Google APIs, a Terms of Service requirement must be included here. Google Cloud APIs must include &quot;serviceusage.googleapis.com/tos/cloud&quot;. Other Google APIs should include &quot;serviceusage.googleapis.com/tos/universal&quot;. Additional ToS can be included based on the business needs.
       &quot;A String&quot;,
     ],
     &quot;rules&quot;: [ # A list of usage rules that apply to individual API methods. **NOTE:** All service configuration rules follow &quot;last one wins&quot; order.
diff --git a/docs/dyn/smartdevicemanagement_v1.enterprises.devices.html b/docs/dyn/smartdevicemanagement_v1.enterprises.devices.html
index 084f31f..997108c 100644
--- a/docs/dyn/smartdevicemanagement_v1.enterprises.devices.html
+++ b/docs/dyn/smartdevicemanagement_v1.enterprises.devices.html
@@ -143,7 +143,7 @@
     { # Device resource represents an instance of enterprise managed device in the property.
   &quot;name&quot;: &quot;A String&quot;, # Required. The resource name of the device. For example: &quot;enterprises/XYZ/devices/123&quot;.
   &quot;parentRelations&quot;: [ # Assignee details of the device.
-    { # Represents device relationships, for instance, structure/room to which the device is assigned to. For now this is only filled in the enterprise flow.
+    { # Represents device relationships, for instance, structure/room to which the device is assigned to.
       &quot;displayName&quot;: &quot;A String&quot;, # Output only. The custom name of the relation -- e.g., structure/room where the device is assigned to.
       &quot;parent&quot;: &quot;A String&quot;, # Output only. The name of the relation -- e.g., structure/room where the device is assigned to. For example: &quot;enterprises/XYZ/structures/ABC&quot; or &quot;enterprises/XYZ/structures/ABC/rooms/123&quot;
     },
@@ -177,7 +177,7 @@
     { # Device resource represents an instance of enterprise managed device in the property.
       &quot;name&quot;: &quot;A String&quot;, # Required. The resource name of the device. For example: &quot;enterprises/XYZ/devices/123&quot;.
       &quot;parentRelations&quot;: [ # Assignee details of the device.
-        { # Represents device relationships, for instance, structure/room to which the device is assigned to. For now this is only filled in the enterprise flow.
+        { # Represents device relationships, for instance, structure/room to which the device is assigned to.
           &quot;displayName&quot;: &quot;A String&quot;, # Output only. The custom name of the relation -- e.g., structure/room where the device is assigned to.
           &quot;parent&quot;: &quot;A String&quot;, # Output only. The name of the relation -- e.g., structure/room where the device is assigned to. For example: &quot;enterprises/XYZ/structures/ABC&quot; or &quot;enterprises/XYZ/structures/ABC/rooms/123&quot;
         },
diff --git a/docs/dyn/streetviewpublish_v1.photo.html b/docs/dyn/streetviewpublish_v1.photo.html
index 5d64df8..9cc72ae 100644
--- a/docs/dyn/streetviewpublish_v1.photo.html
+++ b/docs/dyn/streetviewpublish_v1.photo.html
@@ -88,7 +88,7 @@
 <p class="firstline">Gets the metadata of the specified Photo. This method returns the following error codes: * google.rpc.Code.PERMISSION_DENIED if the requesting user did not create the requested Photo. * google.rpc.Code.NOT_FOUND if the requested Photo does not exist. * google.rpc.Code.UNAVAILABLE if the requested Photo is still being indexed.</p>
 <p class="toc_element">
   <code><a href="#startUpload">startUpload(body=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Creates an upload session to start uploading photo bytes. The method uses the upload URL of the returned UploadRef to upload the bytes for the Photo. In addition to the photo requirements shown in https://support.google.com/maps/answer/7012050?hl=en&ref_topic=6275604, the photo must meet the following requirements: * Photo Sphere XMP metadata must be included in the photo metadata. See https://developers.google.com/streetview/spherical-metadata for the required fields. * The pixel size of the photo must meet the size requirements listed in https://support.google.com/maps/answer/7012050?hl=en&ref_topic=6275604, and the photo must be a full 360 horizontally. After the upload completes, the method uses UploadRef with CreatePhoto to create the Photo object entry.</p>
+<p class="firstline">Creates an upload session to start uploading photo bytes. The method uses the upload URL of the returned UploadRef to upload the bytes for the Photo. In addition to the photo requirements shown in https://support.google.com/maps/answer/7012050?ref_topic=6275604, the photo must meet the following requirements: * Photo Sphere XMP metadata must be included in the photo metadata. See https://developers.google.com/streetview/spherical-metadata for the required fields. * The pixel size of the photo must meet the size requirements listed in https://support.google.com/maps/answer/7012050?ref_topic=6275604, and the photo must be a full 360 horizontally. After the upload completes, the method uses UploadRef with CreatePhoto to create the Photo object entry.</p>
 <p class="toc_element">
   <code><a href="#update">update(id, body=None, updateMask=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Updates the metadata of a Photo, such as pose, place association, connections, etc. Changing the pixels of a photo is not supported. Only the fields specified in the updateMask field are used. If `updateMask` is not present, the update applies to all fields. This method returns the following error codes: * google.rpc.Code.PERMISSION_DENIED if the requesting user did not create the requested photo. * google.rpc.Code.INVALID_ARGUMENT if the request is malformed. * google.rpc.Code.NOT_FOUND if the requested photo does not exist. * google.rpc.Code.UNAVAILABLE if the requested Photo is still being indexed.</p>
@@ -146,7 +146,7 @@
   &quot;thumbnailUrl&quot;: &quot;A String&quot;, # Output only. The thumbnail URL for showing a preview of the given photo.
   &quot;transferStatus&quot;: &quot;A String&quot;, # Output only. Status of rights transfer on this photo.
   &quot;uploadReference&quot;: { # Upload reference for media files. # Required when creating a photo. Input only. The resource URL where the photo bytes are uploaded to.
-    &quot;uploadUrl&quot;: &quot;A String&quot;, # Required. An upload reference should be unique for each user. It follows the form: &quot;https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}&quot;
+    &quot;uploadUrl&quot;: &quot;A String&quot;, # An upload reference should be unique for each user. It follows the form: &quot;https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}&quot;
   },
   &quot;viewCount&quot;: &quot;A String&quot;, # Output only. View count of the photo.
 }
@@ -199,7 +199,7 @@
   &quot;thumbnailUrl&quot;: &quot;A String&quot;, # Output only. The thumbnail URL for showing a preview of the given photo.
   &quot;transferStatus&quot;: &quot;A String&quot;, # Output only. Status of rights transfer on this photo.
   &quot;uploadReference&quot;: { # Upload reference for media files. # Required when creating a photo. Input only. The resource URL where the photo bytes are uploaded to.
-    &quot;uploadUrl&quot;: &quot;A String&quot;, # Required. An upload reference should be unique for each user. It follows the form: &quot;https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}&quot;
+    &quot;uploadUrl&quot;: &quot;A String&quot;, # An upload reference should be unique for each user. It follows the form: &quot;https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}&quot;
   },
   &quot;viewCount&quot;: &quot;A String&quot;, # Output only. View count of the photo.
 }</pre>
@@ -282,7 +282,7 @@
   &quot;thumbnailUrl&quot;: &quot;A String&quot;, # Output only. The thumbnail URL for showing a preview of the given photo.
   &quot;transferStatus&quot;: &quot;A String&quot;, # Output only. Status of rights transfer on this photo.
   &quot;uploadReference&quot;: { # Upload reference for media files. # Required when creating a photo. Input only. The resource URL where the photo bytes are uploaded to.
-    &quot;uploadUrl&quot;: &quot;A String&quot;, # Required. An upload reference should be unique for each user. It follows the form: &quot;https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}&quot;
+    &quot;uploadUrl&quot;: &quot;A String&quot;, # An upload reference should be unique for each user. It follows the form: &quot;https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}&quot;
   },
   &quot;viewCount&quot;: &quot;A String&quot;, # Output only. View count of the photo.
 }</pre>
@@ -290,7 +290,7 @@
 
 <div class="method">
     <code class="details" id="startUpload">startUpload(body=None, x__xgafv=None)</code>
-  <pre>Creates an upload session to start uploading photo bytes. The method uses the upload URL of the returned UploadRef to upload the bytes for the Photo. In addition to the photo requirements shown in https://support.google.com/maps/answer/7012050?hl=en&amp;ref_topic=6275604, the photo must meet the following requirements: * Photo Sphere XMP metadata must be included in the photo metadata. See https://developers.google.com/streetview/spherical-metadata for the required fields. * The pixel size of the photo must meet the size requirements listed in https://support.google.com/maps/answer/7012050?hl=en&amp;ref_topic=6275604, and the photo must be a full 360 horizontally. After the upload completes, the method uses UploadRef with CreatePhoto to create the Photo object entry.
+  <pre>Creates an upload session to start uploading photo bytes. The method uses the upload URL of the returned UploadRef to upload the bytes for the Photo. In addition to the photo requirements shown in https://support.google.com/maps/answer/7012050?ref_topic=6275604, the photo must meet the following requirements: * Photo Sphere XMP metadata must be included in the photo metadata. See https://developers.google.com/streetview/spherical-metadata for the required fields. * The pixel size of the photo must meet the size requirements listed in https://support.google.com/maps/answer/7012050?ref_topic=6275604, and the photo must be a full 360 horizontally. After the upload completes, the method uses UploadRef with CreatePhoto to create the Photo object entry.
 
 Args:
   body: object, The request body.
@@ -308,7 +308,7 @@
   An object of the form:
 
     { # Upload reference for media files.
-  &quot;uploadUrl&quot;: &quot;A String&quot;, # Required. An upload reference should be unique for each user. It follows the form: &quot;https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}&quot;
+  &quot;uploadUrl&quot;: &quot;A String&quot;, # An upload reference should be unique for each user. It follows the form: &quot;https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}&quot;
 }</pre>
 </div>
 
@@ -361,7 +361,7 @@
   &quot;thumbnailUrl&quot;: &quot;A String&quot;, # Output only. The thumbnail URL for showing a preview of the given photo.
   &quot;transferStatus&quot;: &quot;A String&quot;, # Output only. Status of rights transfer on this photo.
   &quot;uploadReference&quot;: { # Upload reference for media files. # Required when creating a photo. Input only. The resource URL where the photo bytes are uploaded to.
-    &quot;uploadUrl&quot;: &quot;A String&quot;, # Required. An upload reference should be unique for each user. It follows the form: &quot;https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}&quot;
+    &quot;uploadUrl&quot;: &quot;A String&quot;, # An upload reference should be unique for each user. It follows the form: &quot;https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}&quot;
   },
   &quot;viewCount&quot;: &quot;A String&quot;, # Output only. View count of the photo.
 }
@@ -415,7 +415,7 @@
   &quot;thumbnailUrl&quot;: &quot;A String&quot;, # Output only. The thumbnail URL for showing a preview of the given photo.
   &quot;transferStatus&quot;: &quot;A String&quot;, # Output only. Status of rights transfer on this photo.
   &quot;uploadReference&quot;: { # Upload reference for media files. # Required when creating a photo. Input only. The resource URL where the photo bytes are uploaded to.
-    &quot;uploadUrl&quot;: &quot;A String&quot;, # Required. An upload reference should be unique for each user. It follows the form: &quot;https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}&quot;
+    &quot;uploadUrl&quot;: &quot;A String&quot;, # An upload reference should be unique for each user. It follows the form: &quot;https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}&quot;
   },
   &quot;viewCount&quot;: &quot;A String&quot;, # Output only. View count of the photo.
 }</pre>
diff --git a/docs/dyn/streetviewpublish_v1.photos.html b/docs/dyn/streetviewpublish_v1.photos.html
index 8b25b89..3ef8b07 100644
--- a/docs/dyn/streetviewpublish_v1.photos.html
+++ b/docs/dyn/streetviewpublish_v1.photos.html
@@ -192,7 +192,7 @@
         &quot;thumbnailUrl&quot;: &quot;A String&quot;, # Output only. The thumbnail URL for showing a preview of the given photo.
         &quot;transferStatus&quot;: &quot;A String&quot;, # Output only. Status of rights transfer on this photo.
         &quot;uploadReference&quot;: { # Upload reference for media files. # Required when creating a photo. Input only. The resource URL where the photo bytes are uploaded to.
-          &quot;uploadUrl&quot;: &quot;A String&quot;, # Required. An upload reference should be unique for each user. It follows the form: &quot;https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}&quot;
+          &quot;uploadUrl&quot;: &quot;A String&quot;, # An upload reference should be unique for each user. It follows the form: &quot;https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}&quot;
         },
         &quot;viewCount&quot;: &quot;A String&quot;, # Output only. View count of the photo.
       },
@@ -261,7 +261,7 @@
         &quot;thumbnailUrl&quot;: &quot;A String&quot;, # Output only. The thumbnail URL for showing a preview of the given photo.
         &quot;transferStatus&quot;: &quot;A String&quot;, # Output only. Status of rights transfer on this photo.
         &quot;uploadReference&quot;: { # Upload reference for media files. # Required when creating a photo. Input only. The resource URL where the photo bytes are uploaded to.
-          &quot;uploadUrl&quot;: &quot;A String&quot;, # Required. An upload reference should be unique for each user. It follows the form: &quot;https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}&quot;
+          &quot;uploadUrl&quot;: &quot;A String&quot;, # An upload reference should be unique for each user. It follows the form: &quot;https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}&quot;
         },
         &quot;viewCount&quot;: &quot;A String&quot;, # Output only. View count of the photo.
       },
@@ -321,7 +321,7 @@
         &quot;thumbnailUrl&quot;: &quot;A String&quot;, # Output only. The thumbnail URL for showing a preview of the given photo.
         &quot;transferStatus&quot;: &quot;A String&quot;, # Output only. Status of rights transfer on this photo.
         &quot;uploadReference&quot;: { # Upload reference for media files. # Required when creating a photo. Input only. The resource URL where the photo bytes are uploaded to.
-          &quot;uploadUrl&quot;: &quot;A String&quot;, # Required. An upload reference should be unique for each user. It follows the form: &quot;https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}&quot;
+          &quot;uploadUrl&quot;: &quot;A String&quot;, # An upload reference should be unique for each user. It follows the form: &quot;https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}&quot;
         },
         &quot;viewCount&quot;: &quot;A String&quot;, # Output only. View count of the photo.
       },
@@ -408,7 +408,7 @@
       &quot;thumbnailUrl&quot;: &quot;A String&quot;, # Output only. The thumbnail URL for showing a preview of the given photo.
       &quot;transferStatus&quot;: &quot;A String&quot;, # Output only. Status of rights transfer on this photo.
       &quot;uploadReference&quot;: { # Upload reference for media files. # Required when creating a photo. Input only. The resource URL where the photo bytes are uploaded to.
-        &quot;uploadUrl&quot;: &quot;A String&quot;, # Required. An upload reference should be unique for each user. It follows the form: &quot;https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}&quot;
+        &quot;uploadUrl&quot;: &quot;A String&quot;, # An upload reference should be unique for each user. It follows the form: &quot;https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}&quot;
       },
       &quot;viewCount&quot;: &quot;A String&quot;, # Output only. View count of the photo.
     },
diff --git a/docs/dyn/tasks_v1.tasks.html b/docs/dyn/tasks_v1.tasks.html
index 18530ae..3fc3ea4 100644
--- a/docs/dyn/tasks_v1.tasks.html
+++ b/docs/dyn/tasks_v1.tasks.html
@@ -152,7 +152,7 @@
 Returns:
   An object of the form:
 
-    { # LINT.IfChange
+    {
   &quot;completed&quot;: &quot;A String&quot;, # Completion date of the task (as a RFC 3339 timestamp). This field is omitted if the task has not been completed.
   &quot;deleted&quot;: True or False, # Flag indicating whether the task has been deleted. The default is False.
   &quot;due&quot;: &quot;A String&quot;, # Due date of the task (as a RFC 3339 timestamp). Optional. The due date only records date information; the time portion of the timestamp is discarded when setting the due date. It isn&#x27;t possible to read or write the time that a task is due via the API.
@@ -186,7 +186,7 @@
   body: object, The request body.
     The object takes the form of:
 
-{ # LINT.IfChange
+{
   &quot;completed&quot;: &quot;A String&quot;, # Completion date of the task (as a RFC 3339 timestamp). This field is omitted if the task has not been completed.
   &quot;deleted&quot;: True or False, # Flag indicating whether the task has been deleted. The default is False.
   &quot;due&quot;: &quot;A String&quot;, # Due date of the task (as a RFC 3339 timestamp). Optional. The due date only records date information; the time portion of the timestamp is discarded when setting the due date. It isn&#x27;t possible to read or write the time that a task is due via the API.
@@ -220,7 +220,7 @@
 Returns:
   An object of the form:
 
-    { # LINT.IfChange
+    {
   &quot;completed&quot;: &quot;A String&quot;, # Completion date of the task (as a RFC 3339 timestamp). This field is omitted if the task has not been completed.
   &quot;deleted&quot;: True or False, # Flag indicating whether the task has been deleted. The default is False.
   &quot;due&quot;: &quot;A String&quot;, # Due date of the task (as a RFC 3339 timestamp). Optional. The due date only records date information; the time portion of the timestamp is discarded when setting the due date. It isn&#x27;t possible to read or write the time that a task is due via the API.
@@ -272,7 +272,7 @@
     {
   &quot;etag&quot;: &quot;A String&quot;, # ETag of the resource.
   &quot;items&quot;: [ # Collection of tasks.
-    { # LINT.IfChange
+    {
       &quot;completed&quot;: &quot;A String&quot;, # Completion date of the task (as a RFC 3339 timestamp). This field is omitted if the task has not been completed.
       &quot;deleted&quot;: True or False, # Flag indicating whether the task has been deleted. The default is False.
       &quot;due&quot;: &quot;A String&quot;, # Due date of the task (as a RFC 3339 timestamp). Optional. The due date only records date information; the time portion of the timestamp is discarded when setting the due date. It isn&#x27;t possible to read or write the time that a task is due via the API.
@@ -332,7 +332,7 @@
 Returns:
   An object of the form:
 
-    { # LINT.IfChange
+    {
   &quot;completed&quot;: &quot;A String&quot;, # Completion date of the task (as a RFC 3339 timestamp). This field is omitted if the task has not been completed.
   &quot;deleted&quot;: True or False, # Flag indicating whether the task has been deleted. The default is False.
   &quot;due&quot;: &quot;A String&quot;, # Due date of the task (as a RFC 3339 timestamp). Optional. The due date only records date information; the time portion of the timestamp is discarded when setting the due date. It isn&#x27;t possible to read or write the time that a task is due via the API.
@@ -367,7 +367,7 @@
   body: object, The request body.
     The object takes the form of:
 
-{ # LINT.IfChange
+{
   &quot;completed&quot;: &quot;A String&quot;, # Completion date of the task (as a RFC 3339 timestamp). This field is omitted if the task has not been completed.
   &quot;deleted&quot;: True or False, # Flag indicating whether the task has been deleted. The default is False.
   &quot;due&quot;: &quot;A String&quot;, # Due date of the task (as a RFC 3339 timestamp). Optional. The due date only records date information; the time portion of the timestamp is discarded when setting the due date. It isn&#x27;t possible to read or write the time that a task is due via the API.
@@ -399,7 +399,7 @@
 Returns:
   An object of the form:
 
-    { # LINT.IfChange
+    {
   &quot;completed&quot;: &quot;A String&quot;, # Completion date of the task (as a RFC 3339 timestamp). This field is omitted if the task has not been completed.
   &quot;deleted&quot;: True or False, # Flag indicating whether the task has been deleted. The default is False.
   &quot;due&quot;: &quot;A String&quot;, # Due date of the task (as a RFC 3339 timestamp). Optional. The due date only records date information; the time portion of the timestamp is discarded when setting the due date. It isn&#x27;t possible to read or write the time that a task is due via the API.
@@ -434,7 +434,7 @@
   body: object, The request body.
     The object takes the form of:
 
-{ # LINT.IfChange
+{
   &quot;completed&quot;: &quot;A String&quot;, # Completion date of the task (as a RFC 3339 timestamp). This field is omitted if the task has not been completed.
   &quot;deleted&quot;: True or False, # Flag indicating whether the task has been deleted. The default is False.
   &quot;due&quot;: &quot;A String&quot;, # Due date of the task (as a RFC 3339 timestamp). Optional. The due date only records date information; the time portion of the timestamp is discarded when setting the due date. It isn&#x27;t possible to read or write the time that a task is due via the API.
@@ -466,7 +466,7 @@
 Returns:
   An object of the form:
 
-    { # LINT.IfChange
+    {
   &quot;completed&quot;: &quot;A String&quot;, # Completion date of the task (as a RFC 3339 timestamp). This field is omitted if the task has not been completed.
   &quot;deleted&quot;: True or False, # Flag indicating whether the task has been deleted. The default is False.
   &quot;due&quot;: &quot;A String&quot;, # Due date of the task (as a RFC 3339 timestamp). Optional. The due date only records date information; the time portion of the timestamp is discarded when setting the due date. It isn&#x27;t possible to read or write the time that a task is due via the API.
diff --git a/docs/dyn/texttospeech_v1.voices.html b/docs/dyn/texttospeech_v1.voices.html
index 3a99ad0..043c6c9 100644
--- a/docs/dyn/texttospeech_v1.voices.html
+++ b/docs/dyn/texttospeech_v1.voices.html
@@ -91,7 +91,7 @@
   <pre>Returns a list of Voice supported for synthesis.
 
 Args:
-  languageCode: string, Optional. Recommended. [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag. If specified, the ListVoices call will only return voices that can be used to synthesize this language_code. E.g. when specifying &quot;en-NZ&quot;, you will get supported &quot;en-\*&quot; voices; when specifying &quot;no&quot;, you will get supported &quot;no-\*&quot; (Norwegian) and &quot;nb-\*&quot; (Norwegian Bokmal) voices; specifying &quot;zh&quot; will also get supported &quot;cmn-\*&quot; voices; specifying &quot;zh-hk&quot; will also get supported &quot;yue-\*&quot; voices.
+  languageCode: string, Optional. Recommended. [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag. If not specified, the API will return all supported voices. If specified, the ListVoices call will only return voices that can be used to synthesize this language_code. E.g. when specifying &quot;en-NZ&quot;, you will get supported &quot;en-NZ&quot; voices; when specifying &quot;no&quot;, you will get supported &quot;no-\*&quot; (Norwegian) and &quot;nb-\*&quot; (Norwegian Bokmal) voices; specifying &quot;zh&quot; will also get supported &quot;cmn-\*&quot; voices; specifying &quot;zh-hk&quot; will also get supported &quot;yue-hk&quot; voices.
   x__xgafv: string, V1 error format.
     Allowed values
       1 - v1 error format
diff --git a/docs/dyn/texttospeech_v1beta1.voices.html b/docs/dyn/texttospeech_v1beta1.voices.html
index 66e4dc7..bf21565 100644
--- a/docs/dyn/texttospeech_v1beta1.voices.html
+++ b/docs/dyn/texttospeech_v1beta1.voices.html
@@ -91,7 +91,7 @@
   <pre>Returns a list of Voice supported for synthesis.
 
 Args:
-  languageCode: string, Optional. Recommended. [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag. If specified, the ListVoices call will only return voices that can be used to synthesize this language_code. E.g. when specifying &quot;en-NZ&quot;, you will get supported &quot;en-\*&quot; voices; when specifying &quot;no&quot;, you will get supported &quot;no-\*&quot; (Norwegian) and &quot;nb-\*&quot; (Norwegian Bokmal) voices; specifying &quot;zh&quot; will also get supported &quot;cmn-\*&quot; voices; specifying &quot;zh-hk&quot; will also get supported &quot;yue-\*&quot; voices.
+  languageCode: string, Optional. Recommended. [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag. If not specified, the API will return all supported voices. If specified, the ListVoices call will only return voices that can be used to synthesize this language_code. E.g. when specifying &quot;en-NZ&quot;, you will get supported &quot;en-NZ&quot; voices; when specifying &quot;no&quot;, you will get supported &quot;no-\*&quot; (Norwegian) and &quot;nb-\*&quot; (Norwegian Bokmal) voices; specifying &quot;zh&quot; will also get supported &quot;cmn-\*&quot; voices; specifying &quot;zh-hk&quot; will also get supported &quot;yue-hk&quot; voices.
   x__xgafv: string, V1 error format.
     Allowed values
       1 - v1 error format
diff --git a/docs/dyn/translate_v3.projects.locations.html b/docs/dyn/translate_v3.projects.locations.html
index a9b1a3a..50e7107 100644
--- a/docs/dyn/translate_v3.projects.locations.html
+++ b/docs/dyn/translate_v3.projects.locations.html
@@ -125,7 +125,7 @@
       &quot;ignoreCase&quot;: True or False, # Optional. Indicates match is case-insensitive. Default value is false if missing.
     },
   },
-  &quot;inputConfigs&quot;: [ # Required. Input configurations. The total number of files matched should be &lt;= 1000. The total content size should be &lt;= 100M Unicode codepoints. The files must use UTF-8 encoding.
+  &quot;inputConfigs&quot;: [ # Required. Input configurations. The total number of files matched should be &lt;= 100. The total content size should be &lt;= 100M Unicode codepoints. The files must use UTF-8 encoding.
     { # Input configuration for BatchTranslateText request.
       &quot;gcsSource&quot;: { # The Google Cloud Storage location for the input content. # Required. Google Cloud Storage location for the source input. This can be a single file (for example, `gs://translation-test/input.tsv`) or a wildcard (for example, `gs://translation-test/*`). If a file extension is `.tsv`, it can contain either one or two columns. The first column (optional) is the id of the text request. If the first column is missing, we use the row number (0-based) from the input file as the ID in the output file. The second column is the actual text to be translated. We recommend each row be &lt;= 10K Unicode codepoints, otherwise an error might be returned. Note that the input tsv must be RFC 4180 compliant. You could use https://github.com/Clever/csvlint to check potential formatting errors in your tsv file. csvlint --delimiter=&#x27;\t&#x27; your_input_file.tsv The other supported file extensions are `.txt` or `.html`, which is treated as a single large chunk of text.
         &quot;inputUri&quot;: &quot;A String&quot;, # Required. Source data URI. For example, `gs://my_bucket/my_object`.
diff --git a/docs/dyn/translate_v3.projects.locations.operations.html b/docs/dyn/translate_v3.projects.locations.operations.html
index bf33bcc..b4d90ec 100644
--- a/docs/dyn/translate_v3.projects.locations.operations.html
+++ b/docs/dyn/translate_v3.projects.locations.operations.html
@@ -94,7 +94,7 @@
 <p class="firstline">Retrieves the next page of results.</p>
 <p class="toc_element">
   <code><a href="#wait">wait(name, body=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Waits for the specified long-running operation until it is done or reaches at most a specified timeout, returning the latest state. If the operation is already done, the latest state is immediately returned. If the timeout specified is greater than the default HTTP/RPC timeout, the HTTP/RPC timeout is used. If the server does not support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Note that this method is on a best-effort basis. It may return the latest state before the specified timeout (including immediately), meaning even an immediate response is no guarantee that the operation is done.</p>
+<p class="firstline">Waits until the specified long-running operation is done or reaches at most a specified timeout, returning the latest state. If the operation is already done, the latest state is immediately returned. If the timeout specified is greater than the default HTTP/RPC timeout, the HTTP/RPC timeout is used. If the server does not support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Note that this method is on a best-effort basis. It may return the latest state before the specified timeout (including immediately), meaning even an immediate response is no guarantee that the operation is done.</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="cancel">cancel(name, body=None, x__xgafv=None)</code>
@@ -237,7 +237,7 @@
 
 <div class="method">
     <code class="details" id="wait">wait(name, body=None, x__xgafv=None)</code>
-  <pre>Waits for the specified long-running operation until it is done or reaches at most a specified timeout, returning the latest state. If the operation is already done, the latest state is immediately returned. If the timeout specified is greater than the default HTTP/RPC timeout, the HTTP/RPC timeout is used. If the server does not support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Note that this method is on a best-effort basis. It may return the latest state before the specified timeout (including immediately), meaning even an immediate response is no guarantee that the operation is done.
+  <pre>Waits until the specified long-running operation is done or reaches at most a specified timeout, returning the latest state. If the operation is already done, the latest state is immediately returned. If the timeout specified is greater than the default HTTP/RPC timeout, the HTTP/RPC timeout is used. If the server does not support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Note that this method is on a best-effort basis. It may return the latest state before the specified timeout (including immediately), meaning even an immediate response is no guarantee that the operation is done.
 
 Args:
   name: string, The name of the operation resource to wait on. (required)
diff --git a/docs/dyn/translate_v3beta1.projects.locations.html b/docs/dyn/translate_v3beta1.projects.locations.html
index 1bd3419..6ebca81 100644
--- a/docs/dyn/translate_v3beta1.projects.locations.html
+++ b/docs/dyn/translate_v3beta1.projects.locations.html
@@ -125,7 +125,7 @@
       &quot;ignoreCase&quot;: True or False, # Optional. Indicates match is case-insensitive. Default value is false if missing.
     },
   },
-  &quot;inputConfigs&quot;: [ # Required. Input configurations. The total number of files matched should be &lt;= 1000. The total content size should be &lt;= 100M Unicode codepoints. The files must use UTF-8 encoding.
+  &quot;inputConfigs&quot;: [ # Required. Input configurations. The total number of files matched should be &lt;= 100. The total content size should be &lt;= 100M Unicode codepoints. The files must use UTF-8 encoding.
     { # Input configuration for BatchTranslateText request.
       &quot;gcsSource&quot;: { # The Google Cloud Storage location for the input content. # Required. Google Cloud Storage location for the source input. This can be a single file (for example, `gs://translation-test/input.tsv`) or a wildcard (for example, `gs://translation-test/*`). If a file extension is `.tsv`, it can contain either one or two columns. The first column (optional) is the id of the text request. If the first column is missing, we use the row number (0-based) from the input file as the ID in the output file. The second column is the actual text to be translated. We recommend each row be &lt;= 10K Unicode codepoints, otherwise an error might be returned. Note that the input tsv must be RFC 4180 compliant. You could use https://github.com/Clever/csvlint to check potential formatting errors in your tsv file. csvlint --delimiter=&#x27;\t&#x27; your_input_file.tsv The other supported file extensions are `.txt` or `.html`, which is treated as a single large chunk of text.
         &quot;inputUri&quot;: &quot;A String&quot;, # Required. Source data URI. For example, `gs://my_bucket/my_object`.
diff --git a/docs/dyn/translate_v3beta1.projects.locations.operations.html b/docs/dyn/translate_v3beta1.projects.locations.operations.html
index b7b3ce9..3dce875 100644
--- a/docs/dyn/translate_v3beta1.projects.locations.operations.html
+++ b/docs/dyn/translate_v3beta1.projects.locations.operations.html
@@ -94,7 +94,7 @@
 <p class="firstline">Retrieves the next page of results.</p>
 <p class="toc_element">
   <code><a href="#wait">wait(name, body=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Waits for the specified long-running operation until it is done or reaches at most a specified timeout, returning the latest state. If the operation is already done, the latest state is immediately returned. If the timeout specified is greater than the default HTTP/RPC timeout, the HTTP/RPC timeout is used. If the server does not support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Note that this method is on a best-effort basis. It may return the latest state before the specified timeout (including immediately), meaning even an immediate response is no guarantee that the operation is done.</p>
+<p class="firstline">Waits until the specified long-running operation is done or reaches at most a specified timeout, returning the latest state. If the operation is already done, the latest state is immediately returned. If the timeout specified is greater than the default HTTP/RPC timeout, the HTTP/RPC timeout is used. If the server does not support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Note that this method is on a best-effort basis. It may return the latest state before the specified timeout (including immediately), meaning even an immediate response is no guarantee that the operation is done.</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="cancel">cancel(name, body=None, x__xgafv=None)</code>
@@ -237,7 +237,7 @@
 
 <div class="method">
     <code class="details" id="wait">wait(name, body=None, x__xgafv=None)</code>
-  <pre>Waits for the specified long-running operation until it is done or reaches at most a specified timeout, returning the latest state. If the operation is already done, the latest state is immediately returned. If the timeout specified is greater than the default HTTP/RPC timeout, the HTTP/RPC timeout is used. If the server does not support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Note that this method is on a best-effort basis. It may return the latest state before the specified timeout (including immediately), meaning even an immediate response is no guarantee that the operation is done.
+  <pre>Waits until the specified long-running operation is done or reaches at most a specified timeout, returning the latest state. If the operation is already done, the latest state is immediately returned. If the timeout specified is greater than the default HTTP/RPC timeout, the HTTP/RPC timeout is used. If the server does not support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Note that this method is on a best-effort basis. It may return the latest state before the specified timeout (including immediately), meaning even an immediate response is no guarantee that the operation is done.
 
 Args:
   name: string, The name of the operation resource to wait on. (required)
diff --git a/docs/dyn/workflows_v1.html b/docs/dyn/workflows_v1.html
new file mode 100644
index 0000000..16c191c
--- /dev/null
+++ b/docs/dyn/workflows_v1.html
@@ -0,0 +1,111 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="workflows_v1.html">Workflows API</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="workflows_v1.projects.html">projects()</a></code>
+</p>
+<p class="firstline">Returns the projects Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#close">close()</a></code></p>
+<p class="firstline">Close httplib2 connections.</p>
+<p class="toc_element">
+  <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
+<p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="close">close()</code>
+  <pre>Close httplib2 connections.</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="new_batch_http_request">new_batch_http_request()</code>
+  <pre>Create a BatchHttpRequest object based on the discovery document.
+
+        Args:
+          callback: callable, A callback to be called for each response, of the
+            form callback(id, response, exception). The first parameter is the
+            request id, and the second is the deserialized response object. The
+            third is an apiclient.errors.HttpError exception object if an HTTP
+            error occurred while processing the request, or None if no error
+            occurred.
+
+        Returns:
+          A BatchHttpRequest object based on the discovery document.
+        </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/workflows_v1.projects.html b/docs/dyn/workflows_v1.projects.html
new file mode 100644
index 0000000..23de525
--- /dev/null
+++ b/docs/dyn/workflows_v1.projects.html
@@ -0,0 +1,91 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="workflows_v1.html">Workflows API</a> . <a href="workflows_v1.projects.html">projects</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="workflows_v1.projects.locations.html">locations()</a></code>
+</p>
+<p class="firstline">Returns the locations Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#close">close()</a></code></p>
+<p class="firstline">Close httplib2 connections.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="close">close()</code>
+  <pre>Close httplib2 connections.</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/workflows_v1.projects.locations.html b/docs/dyn/workflows_v1.projects.locations.html
new file mode 100644
index 0000000..e8fef85
--- /dev/null
+++ b/docs/dyn/workflows_v1.projects.locations.html
@@ -0,0 +1,181 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="workflows_v1.html">Workflows API</a> . <a href="workflows_v1.projects.html">projects</a> . <a href="workflows_v1.projects.locations.html">locations</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="workflows_v1.projects.locations.operations.html">operations()</a></code>
+</p>
+<p class="firstline">Returns the operations Resource.</p>
+
+<p class="toc_element">
+  <code><a href="workflows_v1.projects.locations.workflows.html">workflows()</a></code>
+</p>
+<p class="firstline">Returns the workflows Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#close">close()</a></code></p>
+<p class="firstline">Close httplib2 connections.</p>
+<p class="toc_element">
+  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets information about a location.</p>
+<p class="toc_element">
+  <code><a href="#list">list(name, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Lists information about the supported locations for this service.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="close">close()</code>
+  <pre>Close httplib2 connections.</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(name, x__xgafv=None)</code>
+  <pre>Gets information about a location.
+
+Args:
+  name: string, Resource name for the location. (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A resource that represents Google Cloud Platform location.
+  &quot;displayName&quot;: &quot;A String&quot;, # The friendly name for this location, typically a nearby city name. For example, &quot;Tokyo&quot;.
+  &quot;labels&quot;: { # Cross-service attributes for the location. For example {&quot;cloud.googleapis.com/region&quot;: &quot;us-east1&quot;}
+    &quot;a_key&quot;: &quot;A String&quot;,
+  },
+  &quot;locationId&quot;: &quot;A String&quot;, # The canonical id for this location. For example: `&quot;us-east1&quot;`.
+  &quot;metadata&quot;: { # Service-specific metadata. For example the available capacity at the given location.
+    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
+  },
+  &quot;name&quot;: &quot;A String&quot;, # Resource name for the location, which may vary between implementations. For example: `&quot;projects/example-project/locations/us-east1&quot;`
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(name, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
+  <pre>Lists information about the supported locations for this service.
+
+Args:
+  name: string, The resource that owns the locations collection, if applicable. (required)
+  filter: string, The standard list filter.
+  pageSize: integer, The standard list page size.
+  pageToken: string, The standard list page token.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response message for Locations.ListLocations.
+  &quot;locations&quot;: [ # A list of locations that matches the specified filter in the request.
+    { # A resource that represents Google Cloud Platform location.
+      &quot;displayName&quot;: &quot;A String&quot;, # The friendly name for this location, typically a nearby city name. For example, &quot;Tokyo&quot;.
+      &quot;labels&quot;: { # Cross-service attributes for the location. For example {&quot;cloud.googleapis.com/region&quot;: &quot;us-east1&quot;}
+        &quot;a_key&quot;: &quot;A String&quot;,
+      },
+      &quot;locationId&quot;: &quot;A String&quot;, # The canonical id for this location. For example: `&quot;us-east1&quot;`.
+      &quot;metadata&quot;: { # Service-specific metadata. For example the available capacity at the given location.
+        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
+      },
+      &quot;name&quot;: &quot;A String&quot;, # Resource name for the location, which may vary between implementations. For example: `&quot;projects/example-project/locations/us-east1&quot;`
+    },
+  ],
+  &quot;nextPageToken&quot;: &quot;A String&quot;, # The standard List next-page token.
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call &#x27;execute()&#x27; on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/workflows_v1.projects.locations.operations.html b/docs/dyn/workflows_v1.projects.locations.operations.html
new file mode 100644
index 0000000..1c1883b
--- /dev/null
+++ b/docs/dyn/workflows_v1.projects.locations.operations.html
@@ -0,0 +1,208 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="workflows_v1.html">Workflows API</a> . <a href="workflows_v1.projects.html">projects</a> . <a href="workflows_v1.projects.locations.html">locations</a> . <a href="workflows_v1.projects.locations.operations.html">operations</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#close">close()</a></code></p>
+<p class="firstline">Close httplib2 connections.</p>
+<p class="toc_element">
+  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.</p>
+<p class="toc_element">
+  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.</p>
+<p class="toc_element">
+  <code><a href="#list">list(name, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `"/v1/{name=users/*}/operations"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="close">close()</code>
+  <pre>Close httplib2 connections.</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
+  <pre>Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn&#x27;t support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.
+
+Args:
+  name: string, The name of the operation resource to be deleted. (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(name, x__xgafv=None)</code>
+  <pre>Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.
+
+Args:
+  name: string, The name of the operation resource. (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # This resource represents a long-running operation that is the result of a network API call.
+  &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
+  &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
+    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
+    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
+      {
+        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
+      },
+    ],
+    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
+  },
+  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
+    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
+  },
+  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
+  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
+    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
+  },
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(name, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
+  <pre>Lists operations that match the specified filter in the request. If the server doesn&#x27;t support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `&quot;/v1/{name=users/*}/operations&quot;` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.
+
+Args:
+  name: string, The name of the operation&#x27;s parent resource. (required)
+  filter: string, The standard list filter.
+  pageSize: integer, The standard list page size.
+  pageToken: string, The standard list page token.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response message for Operations.ListOperations.
+  &quot;nextPageToken&quot;: &quot;A String&quot;, # The standard List next-page token.
+  &quot;operations&quot;: [ # A list of operations that matches the specified filter in the request.
+    { # This resource represents a long-running operation that is the result of a network API call.
+      &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
+      &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
+        &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
+        &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
+          {
+            &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
+          },
+        ],
+        &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
+      },
+      &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
+        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
+      },
+      &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
+      &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
+        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
+      },
+    },
+  ],
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call &#x27;execute()&#x27; on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/workflows_v1.projects.locations.workflows.html b/docs/dyn/workflows_v1.projects.locations.workflows.html
new file mode 100644
index 0000000..eddca51
--- /dev/null
+++ b/docs/dyn/workflows_v1.projects.locations.workflows.html
@@ -0,0 +1,333 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="workflows_v1.html">Workflows API</a> . <a href="workflows_v1.projects.html">projects</a> . <a href="workflows_v1.projects.locations.html">locations</a> . <a href="workflows_v1.projects.locations.workflows.html">workflows</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#close">close()</a></code></p>
+<p class="firstline">Close httplib2 connections.</p>
+<p class="toc_element">
+  <code><a href="#create">create(parent, body=None, workflowId=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates a new workflow. If a workflow with the specified name already exists in the specified project and location, the long running operation will return ALREADY_EXISTS error.</p>
+<p class="toc_element">
+  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Deletes a workflow with the specified name. This method also cancels and deletes all running executions of the workflow.</p>
+<p class="toc_element">
+  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets details of a single Workflow.</p>
+<p class="toc_element">
+  <code><a href="#list">list(parent, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Lists Workflows in a given project and location. The default order is not specified.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Updates an existing workflow. Running this method has no impact on already running executions of the workflow. A new revision of the workflow may be created as a result of a successful update operation. In that case, such revision will be used in new workflow executions.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="close">close()</code>
+  <pre>Close httplib2 connections.</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="create">create(parent, body=None, workflowId=None, x__xgafv=None)</code>
+  <pre>Creates a new workflow. If a workflow with the specified name already exists in the specified project and location, the long running operation will return ALREADY_EXISTS error.
+
+Args:
+  parent: string, Required. Project and location in which the workflow should be created. Format: projects/{project}/locations/{location} (required)
+  body: object, The request body.
+    The object takes the form of:
+
+{ # Workflow program to be executed by Workflows.
+  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp of when the workflow was created.
+  &quot;description&quot;: &quot;A String&quot;, # Description of the workflow provided by the user. Must be at most 1000 unicode characters long.
+  &quot;labels&quot;: { # Labels associated with this workflow. Labels can contain at most 64 entries. Keys and values can be no longer than 63 characters and can only contain lowercase letters, numeric characters, underscores and dashes. Label keys must start with a letter. International characters are allowed.
+    &quot;a_key&quot;: &quot;A String&quot;,
+  },
+  &quot;name&quot;: &quot;A String&quot;, # The resource name of the workflow. Format: projects/{project}/locations/{location}/workflows/{workflow}
+  &quot;revisionCreateTime&quot;: &quot;A String&quot;, # Output only. The timestamp that the latest revision of the workflow was created.
+  &quot;revisionId&quot;: &quot;A String&quot;, # Output only. The revision of the workflow. A new revision of a workflow is created as a result of updating the following properties of a workflow: - Service account - Workflow code to be executed The format is &quot;000001-a4d&quot;, where the first 6 characters define the zero-padded revision ordinal number. They are followed by a hyphen and 3 hexadecimal random characters.
+  &quot;serviceAccount&quot;: &quot;A String&quot;, # Name of the service account associated with the latest workflow version. This service account represents the identity of the workflow and determines what permissions the workflow has. Format: projects/{project}/serviceAccounts/{account} Using `-` as a wildcard for the `{project}` will infer the project from the account. The `{account}` value can be the `email` address or the `unique_id` of the service account. If not provided, workflow will use the project&#x27;s default service account. Modifying this field for an existing workflow results in a new workflow revision.
+  &quot;sourceContents&quot;: &quot;A String&quot;, # Workflow code to be executed. The size limit is 32KB.
+  &quot;state&quot;: &quot;A String&quot;, # Output only. State of the workflow deployment.
+  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the workflow.
+}
+
+  workflowId: string, Required. The ID of the workflow to be created. It has to fulfill the following requirements: * Must contain only letters, numbers, underscores and hyphens. * Must start with a letter. * Must be between 1-64 characters. * Must end with a number or a letter. * Must be unique within the customer project and location.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # This resource represents a long-running operation that is the result of a network API call.
+  &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
+  &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
+    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
+    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
+      {
+        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
+      },
+    ],
+    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
+  },
+  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
+    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
+  },
+  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
+  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
+    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
+  },
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
+  <pre>Deletes a workflow with the specified name. This method also cancels and deletes all running executions of the workflow.
+
+Args:
+  name: string, Required. Name of the workflow to be deleted. Format: projects/{project}/locations/{location}/workflows/{workflow} (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # This resource represents a long-running operation that is the result of a network API call.
+  &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
+  &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
+    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
+    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
+      {
+        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
+      },
+    ],
+    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
+  },
+  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
+    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
+  },
+  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
+  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
+    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
+  },
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(name, x__xgafv=None)</code>
+  <pre>Gets details of a single Workflow.
+
+Args:
+  name: string, Required. Name of the workflow which information should be retrieved. Format: projects/{project}/locations/{location}/workflows/{workflow} (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Workflow program to be executed by Workflows.
+  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp of when the workflow was created.
+  &quot;description&quot;: &quot;A String&quot;, # Description of the workflow provided by the user. Must be at most 1000 unicode characters long.
+  &quot;labels&quot;: { # Labels associated with this workflow. Labels can contain at most 64 entries. Keys and values can be no longer than 63 characters and can only contain lowercase letters, numeric characters, underscores and dashes. Label keys must start with a letter. International characters are allowed.
+    &quot;a_key&quot;: &quot;A String&quot;,
+  },
+  &quot;name&quot;: &quot;A String&quot;, # The resource name of the workflow. Format: projects/{project}/locations/{location}/workflows/{workflow}
+  &quot;revisionCreateTime&quot;: &quot;A String&quot;, # Output only. The timestamp that the latest revision of the workflow was created.
+  &quot;revisionId&quot;: &quot;A String&quot;, # Output only. The revision of the workflow. A new revision of a workflow is created as a result of updating the following properties of a workflow: - Service account - Workflow code to be executed The format is &quot;000001-a4d&quot;, where the first 6 characters define the zero-padded revision ordinal number. They are followed by a hyphen and 3 hexadecimal random characters.
+  &quot;serviceAccount&quot;: &quot;A String&quot;, # Name of the service account associated with the latest workflow version. This service account represents the identity of the workflow and determines what permissions the workflow has. Format: projects/{project}/serviceAccounts/{account} Using `-` as a wildcard for the `{project}` will infer the project from the account. The `{account}` value can be the `email` address or the `unique_id` of the service account. If not provided, workflow will use the project&#x27;s default service account. Modifying this field for an existing workflow results in a new workflow revision.
+  &quot;sourceContents&quot;: &quot;A String&quot;, # Workflow code to be executed. The size limit is 32KB.
+  &quot;state&quot;: &quot;A String&quot;, # Output only. State of the workflow deployment.
+  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the workflow.
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(parent, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
+  <pre>Lists Workflows in a given project and location. The default order is not specified.
+
+Args:
+  parent: string, Required. Project and location from which the workflows should be listed. Format: projects/{project}/locations/{location} (required)
+  filter: string, Filter to restrict results to specific workflows.
+  orderBy: string, Comma-separated list of fields that that specify the order of the results. Default sorting order for a field is ascending. To specify descending order for a field, append a &quot; desc&quot; suffix. If not specified, the results will be returned in an unspecified order.
+  pageSize: integer, Maximum number of workflows to return per call. The service may return fewer than this value. If the value is not specified, a default value of 500 will be used. The maximum permitted value is 1000 and values greater than 1000 will be coerced down to 1000.
+  pageToken: string, A page token, received from a previous `ListWorkflows` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListWorkflows` must match the call that provided the page token.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Response for the ListWorkflows method.
+  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.
+  &quot;unreachable&quot;: [ # Unreachable resources.
+    &quot;A String&quot;,
+  ],
+  &quot;workflows&quot;: [ # The workflows which match the request.
+    { # Workflow program to be executed by Workflows.
+      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp of when the workflow was created.
+      &quot;description&quot;: &quot;A String&quot;, # Description of the workflow provided by the user. Must be at most 1000 unicode characters long.
+      &quot;labels&quot;: { # Labels associated with this workflow. Labels can contain at most 64 entries. Keys and values can be no longer than 63 characters and can only contain lowercase letters, numeric characters, underscores and dashes. Label keys must start with a letter. International characters are allowed.
+        &quot;a_key&quot;: &quot;A String&quot;,
+      },
+      &quot;name&quot;: &quot;A String&quot;, # The resource name of the workflow. Format: projects/{project}/locations/{location}/workflows/{workflow}
+      &quot;revisionCreateTime&quot;: &quot;A String&quot;, # Output only. The timestamp that the latest revision of the workflow was created.
+      &quot;revisionId&quot;: &quot;A String&quot;, # Output only. The revision of the workflow. A new revision of a workflow is created as a result of updating the following properties of a workflow: - Service account - Workflow code to be executed The format is &quot;000001-a4d&quot;, where the first 6 characters define the zero-padded revision ordinal number. They are followed by a hyphen and 3 hexadecimal random characters.
+      &quot;serviceAccount&quot;: &quot;A String&quot;, # Name of the service account associated with the latest workflow version. This service account represents the identity of the workflow and determines what permissions the workflow has. Format: projects/{project}/serviceAccounts/{account} Using `-` as a wildcard for the `{project}` will infer the project from the account. The `{account}` value can be the `email` address or the `unique_id` of the service account. If not provided, workflow will use the project&#x27;s default service account. Modifying this field for an existing workflow results in a new workflow revision.
+      &quot;sourceContents&quot;: &quot;A String&quot;, # Workflow code to be executed. The size limit is 32KB.
+      &quot;state&quot;: &quot;A String&quot;, # Output only. State of the workflow deployment.
+      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the workflow.
+    },
+  ],
+}</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call &#x27;execute()&#x27; on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
+  <pre>Updates an existing workflow. Running this method has no impact on already running executions of the workflow. A new revision of the workflow may be created as a result of a successful update operation. In that case, such revision will be used in new workflow executions.
+
+Args:
+  name: string, The resource name of the workflow. Format: projects/{project}/locations/{location}/workflows/{workflow} (required)
+  body: object, The request body.
+    The object takes the form of:
+
+{ # Workflow program to be executed by Workflows.
+  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp of when the workflow was created.
+  &quot;description&quot;: &quot;A String&quot;, # Description of the workflow provided by the user. Must be at most 1000 unicode characters long.
+  &quot;labels&quot;: { # Labels associated with this workflow. Labels can contain at most 64 entries. Keys and values can be no longer than 63 characters and can only contain lowercase letters, numeric characters, underscores and dashes. Label keys must start with a letter. International characters are allowed.
+    &quot;a_key&quot;: &quot;A String&quot;,
+  },
+  &quot;name&quot;: &quot;A String&quot;, # The resource name of the workflow. Format: projects/{project}/locations/{location}/workflows/{workflow}
+  &quot;revisionCreateTime&quot;: &quot;A String&quot;, # Output only. The timestamp that the latest revision of the workflow was created.
+  &quot;revisionId&quot;: &quot;A String&quot;, # Output only. The revision of the workflow. A new revision of a workflow is created as a result of updating the following properties of a workflow: - Service account - Workflow code to be executed The format is &quot;000001-a4d&quot;, where the first 6 characters define the zero-padded revision ordinal number. They are followed by a hyphen and 3 hexadecimal random characters.
+  &quot;serviceAccount&quot;: &quot;A String&quot;, # Name of the service account associated with the latest workflow version. This service account represents the identity of the workflow and determines what permissions the workflow has. Format: projects/{project}/serviceAccounts/{account} Using `-` as a wildcard for the `{project}` will infer the project from the account. The `{account}` value can be the `email` address or the `unique_id` of the service account. If not provided, workflow will use the project&#x27;s default service account. Modifying this field for an existing workflow results in a new workflow revision.
+  &quot;sourceContents&quot;: &quot;A String&quot;, # Workflow code to be executed. The size limit is 32KB.
+  &quot;state&quot;: &quot;A String&quot;, # Output only. State of the workflow deployment.
+  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp of the workflow.
+}
+
+  updateMask: string, List of fields to be updated. If not present, the entire workflow will be updated.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # This resource represents a long-running operation that is the result of a network API call.
+  &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
+  &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
+    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
+    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
+      {
+        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
+      },
+    ],
+    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
+  },
+  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
+    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
+  },
+  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
+  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
+    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
+  },
+}</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/workflows_v1beta.projects.locations.workflows.html b/docs/dyn/workflows_v1beta.projects.locations.workflows.html
index 19cd96f..23356eb 100644
--- a/docs/dyn/workflows_v1beta.projects.locations.workflows.html
+++ b/docs/dyn/workflows_v1beta.projects.locations.workflows.html
@@ -118,7 +118,7 @@
   },
   &quot;name&quot;: &quot;A String&quot;, # The resource name of the workflow. Format: projects/{project}/locations/{location}/workflows/{workflow}
   &quot;revisionCreateTime&quot;: &quot;A String&quot;, # Output only. The timestamp that the latest revision of the workflow was created.
-  &quot;revisionId&quot;: &quot;A String&quot;, # Output only. The revision of the workflow. A new revision of a workflow is created as a result of updating the following fields of a workflow: - `source_code` - `service_account` The format is &quot;000001-a4d&quot;, where the first 6 characters define the zero-padded revision ordinal number. They are followed by a hyphen and 3 hexadecimal random characters.
+  &quot;revisionId&quot;: &quot;A String&quot;, # Output only. The revision of the workflow. A new revision of a workflow is created as a result of updating the following properties of a workflow: - Service account - Workflow code to be executed The format is &quot;000001-a4d&quot;, where the first 6 characters define the zero-padded revision ordinal number. They are followed by a hyphen and 3 hexadecimal random characters.
   &quot;serviceAccount&quot;: &quot;A String&quot;, # Name of the service account associated with the latest workflow version. This service account represents the identity of the workflow and determines what permissions the workflow has. Format: projects/{project}/serviceAccounts/{account} Using `-` as a wildcard for the `{project}` will infer the project from the account. The `{account}` value can be the `email` address or the `unique_id` of the service account. If not provided, workflow will use the project&#x27;s default service account. Modifying this field for an existing workflow results in a new workflow revision.
   &quot;sourceContents&quot;: &quot;A String&quot;, # Workflow code to be executed. The size limit is 32KB.
   &quot;state&quot;: &quot;A String&quot;, # Output only. State of the workflow deployment.
@@ -212,7 +212,7 @@
   },
   &quot;name&quot;: &quot;A String&quot;, # The resource name of the workflow. Format: projects/{project}/locations/{location}/workflows/{workflow}
   &quot;revisionCreateTime&quot;: &quot;A String&quot;, # Output only. The timestamp that the latest revision of the workflow was created.
-  &quot;revisionId&quot;: &quot;A String&quot;, # Output only. The revision of the workflow. A new revision of a workflow is created as a result of updating the following fields of a workflow: - `source_code` - `service_account` The format is &quot;000001-a4d&quot;, where the first 6 characters define the zero-padded revision ordinal number. They are followed by a hyphen and 3 hexadecimal random characters.
+  &quot;revisionId&quot;: &quot;A String&quot;, # Output only. The revision of the workflow. A new revision of a workflow is created as a result of updating the following properties of a workflow: - Service account - Workflow code to be executed The format is &quot;000001-a4d&quot;, where the first 6 characters define the zero-padded revision ordinal number. They are followed by a hyphen and 3 hexadecimal random characters.
   &quot;serviceAccount&quot;: &quot;A String&quot;, # Name of the service account associated with the latest workflow version. This service account represents the identity of the workflow and determines what permissions the workflow has. Format: projects/{project}/serviceAccounts/{account} Using `-` as a wildcard for the `{project}` will infer the project from the account. The `{account}` value can be the `email` address or the `unique_id` of the service account. If not provided, workflow will use the project&#x27;s default service account. Modifying this field for an existing workflow results in a new workflow revision.
   &quot;sourceContents&quot;: &quot;A String&quot;, # Workflow code to be executed. The size limit is 32KB.
   &quot;state&quot;: &quot;A String&quot;, # Output only. State of the workflow deployment.
@@ -252,7 +252,7 @@
       },
       &quot;name&quot;: &quot;A String&quot;, # The resource name of the workflow. Format: projects/{project}/locations/{location}/workflows/{workflow}
       &quot;revisionCreateTime&quot;: &quot;A String&quot;, # Output only. The timestamp that the latest revision of the workflow was created.
-      &quot;revisionId&quot;: &quot;A String&quot;, # Output only. The revision of the workflow. A new revision of a workflow is created as a result of updating the following fields of a workflow: - `source_code` - `service_account` The format is &quot;000001-a4d&quot;, where the first 6 characters define the zero-padded revision ordinal number. They are followed by a hyphen and 3 hexadecimal random characters.
+      &quot;revisionId&quot;: &quot;A String&quot;, # Output only. The revision of the workflow. A new revision of a workflow is created as a result of updating the following properties of a workflow: - Service account - Workflow code to be executed The format is &quot;000001-a4d&quot;, where the first 6 characters define the zero-padded revision ordinal number. They are followed by a hyphen and 3 hexadecimal random characters.
       &quot;serviceAccount&quot;: &quot;A String&quot;, # Name of the service account associated with the latest workflow version. This service account represents the identity of the workflow and determines what permissions the workflow has. Format: projects/{project}/serviceAccounts/{account} Using `-` as a wildcard for the `{project}` will infer the project from the account. The `{account}` value can be the `email` address or the `unique_id` of the service account. If not provided, workflow will use the project&#x27;s default service account. Modifying this field for an existing workflow results in a new workflow revision.
       &quot;sourceContents&quot;: &quot;A String&quot;, # Workflow code to be executed. The size limit is 32KB.
       &quot;state&quot;: &quot;A String&quot;, # Output only. State of the workflow deployment.
@@ -293,7 +293,7 @@
   },
   &quot;name&quot;: &quot;A String&quot;, # The resource name of the workflow. Format: projects/{project}/locations/{location}/workflows/{workflow}
   &quot;revisionCreateTime&quot;: &quot;A String&quot;, # Output only. The timestamp that the latest revision of the workflow was created.
-  &quot;revisionId&quot;: &quot;A String&quot;, # Output only. The revision of the workflow. A new revision of a workflow is created as a result of updating the following fields of a workflow: - `source_code` - `service_account` The format is &quot;000001-a4d&quot;, where the first 6 characters define the zero-padded revision ordinal number. They are followed by a hyphen and 3 hexadecimal random characters.
+  &quot;revisionId&quot;: &quot;A String&quot;, # Output only. The revision of the workflow. A new revision of a workflow is created as a result of updating the following properties of a workflow: - Service account - Workflow code to be executed The format is &quot;000001-a4d&quot;, where the first 6 characters define the zero-padded revision ordinal number. They are followed by a hyphen and 3 hexadecimal random characters.
   &quot;serviceAccount&quot;: &quot;A String&quot;, # Name of the service account associated with the latest workflow version. This service account represents the identity of the workflow and determines what permissions the workflow has. Format: projects/{project}/serviceAccounts/{account} Using `-` as a wildcard for the `{project}` will infer the project from the account. The `{account}` value can be the `email` address or the `unique_id` of the service account. If not provided, workflow will use the project&#x27;s default service account. Modifying this field for an existing workflow results in a new workflow revision.
   &quot;sourceContents&quot;: &quot;A String&quot;, # Workflow code to be executed. The size limit is 32KB.
   &quot;state&quot;: &quot;A String&quot;, # Output only. State of the workflow deployment.
diff --git a/googleapiclient/discovery_cache/documents/admin.directory_v1.json b/googleapiclient/discovery_cache/documents/admin.directory_v1.json
index 9b10003..fcb1534 100644
--- a/googleapiclient/discovery_cache/documents/admin.directory_v1.json
+++ b/googleapiclient/discovery_cache/documents/admin.directory_v1.json
@@ -3478,6 +3478,27 @@
                             "location": "query",
                             "type": "string"
                         },
+                        "event": {
+                            "description": "Event on which subscription is intended (if subscribing)",
+                            "enum": [
+                                "eventUndefined",
+                                "add",
+                                "delete",
+                                "makeAdmin",
+                                "undelete",
+                                "update"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "User Created Event",
+                                "User Deleted Event",
+                                "User Admin Status Change Event",
+                                "User Undeleted Event",
+                                "User Updated Event"
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
                         "maxResults": {
                             "default": "100",
                             "description": "Maximum number of results to return.",
@@ -4159,7 +4180,7 @@
             }
         }
     },
-    "revision": "20210223",
+    "revision": "20210302",
     "rootUrl": "https://admin.googleapis.com/",
     "schemas": {
         "Alias": {
diff --git a/googleapiclient/discovery_cache/documents/admin.reports_v1.json b/googleapiclient/discovery_cache/documents/admin.reports_v1.json
index 8c9a1b4..612ead0 100644
--- a/googleapiclient/discovery_cache/documents/admin.reports_v1.json
+++ b/googleapiclient/discovery_cache/documents/admin.reports_v1.json
@@ -153,11 +153,11 @@
                             ],
                             "enumDescriptions": [
                                 "",
-                                "The G Suite Access Transparency activity reports return information about different types of Access Transparency activity events.",
+                                "The Google Workspace Access Transparency activity reports return information about different types of Access Transparency activity events.",
                                 "The Admin console application's activity reports return account information about different types of administrator activity events.",
-                                "The G Suite Calendar application's activity reports return information about various Calendar activity events.",
+                                "The Google Calendar application's activity reports return information about various Calendar activity events.",
                                 "The Chat activity reports return information about various Chat activity events.",
-                                "The Google Drive application's activity reports return information about various Google Drive activity events. The Drive activity report is only available for G Suite Business customers.",
+                                "The Google Drive application's activity reports return information about various Google Drive activity events. The Drive activity report is only available for Google Workspace Business and Enterprise customers.",
                                 "The Google Cloud Platform application's activity reports return information about various GCP activity events.",
                                 "The Google+ application's activity reports return information about various Google+ activity events.",
                                 "The Google Groups application's activity reports return information about various Groups activity events.",
@@ -192,7 +192,7 @@
                             "type": "string"
                         },
                         "eventName": {
-                            "description": "The name of the event being queried by the API. Each `eventName` is related to a specific G Suite service or feature which the API organizes into types of events. An example is the Google Calendar events in the Admin console application's reports. The Calendar Settings `type` structure has all of the Calendar `eventName` activities reported by the API. When an administrator changes a Calendar setting, the API reports this activity in the Calendar Settings `type` and `eventName` parameters. For more information about `eventName` query strings and parameters, see the list of event names for various applications above in `applicationName`.",
+                            "description": "The name of the event being queried by the API. Each `eventName` is related to a specific Google Workspace service or feature which the API organizes into types of events. An example is the Google Calendar events in the Admin console application's reports. The Calendar Settings `type` structure has all of the Calendar `eventName` activities reported by the API. When an administrator changes a Calendar setting, the API reports this activity in the Calendar Settings `type` and `eventName` parameters. For more information about `eventName` query strings and parameters, see the list of event names for various applications above in `applicationName`.",
                             "location": "query",
                             "type": "string"
                         },
@@ -236,7 +236,7 @@
                             "type": "string"
                         },
                         "userKey": {
-                            "description": "Represents the profile ID or the user email for which the data should be filtered. Can be `all` for all information, or `userKey` for a user's unique G Suite profile ID or their primary email address.",
+                            "description": "Represents the profile ID or the user email for which the data should be filtered. Can be `all` for all information, or `userKey` for a user's unique Google Workspace profile ID or their primary email address.",
                             "location": "path",
                             "required": true,
                             "type": "string"
@@ -292,11 +292,11 @@
                             ],
                             "enumDescriptions": [
                                 "",
-                                "The G Suite Access Transparency activity reports return information about different types of Access Transparency activity events.",
+                                "The Google Workspace Access Transparency activity reports return information about different types of Access Transparency activity events.",
                                 "The Admin console application's activity reports return account information about different types of administrator activity events.",
-                                "The G Suite Calendar application's activity reports return information about various Calendar activity events.",
+                                "The Google Calendar application's activity reports return information about various Calendar activity events.",
                                 "The Chat activity reports return information about various Chat activity events.",
-                                "The Google Drive application's activity reports return information about various Google Drive activity events. The Drive activity report is only available for G Suite Business customers.",
+                                "The Google Drive application's activity reports return information about various Google Drive activity events. The Drive activity report is only available for Google Workspace Business and Google Workspace Enterprise customers.",
                                 "The Google Cloud Platform application's activity reports return information about various GCP activity events.",
                                 "The Google+ application's activity reports return information about various Google+ activity events.",
                                 "The Google Groups application's activity reports return information about various Groups activity events.",
@@ -331,7 +331,7 @@
                             "type": "string"
                         },
                         "eventName": {
-                            "description": "The name of the event being queried by the API. Each `eventName` is related to a specific G Suite service or feature which the API organizes into types of events. An example is the Google Calendar events in the Admin console application's reports. The Calendar Settings `type` structure has all of the Calendar `eventName` activities reported by the API. When an administrator changes a Calendar setting, the API reports this activity in the Calendar Settings `type` and `eventName` parameters. For more information about `eventName` query strings and parameters, see the list of event names for various applications above in `applicationName`.",
+                            "description": "The name of the event being queried by the API. Each `eventName` is related to a specific Google Workspace service or feature which the API organizes into types of events. An example is the Google Calendar events in the Admin console application's reports. The Calendar Settings `type` structure has all of the Calendar `eventName` activities reported by the API. When an administrator changes a Calendar setting, the API reports this activity in the Calendar Settings `type` and `eventName` parameters. For more information about `eventName` query strings and parameters, see the list of event names for various applications above in `applicationName`.",
                             "location": "query",
                             "type": "string"
                         },
@@ -375,7 +375,7 @@
                             "type": "string"
                         },
                         "userKey": {
-                            "description": "Represents the profile ID or the user email for which the data should be filtered. Can be `all` for all information, or `userKey` for a user's unique G Suite profile ID or their primary email address.",
+                            "description": "Represents the profile ID or the user email for which the data should be filtered. Can be `all` for all information, or `userKey` for a user's unique Google Workspace profile ID or their primary email address.",
                             "location": "path",
                             "required": true,
                             "type": "string"
@@ -618,7 +618,7 @@
                             "type": "string"
                         },
                         "userKey": {
-                            "description": "Represents the profile ID or the user email for which the data should be filtered. Can be `all` for all information, or `userKey` for a user's unique G Suite profile ID or their primary email address.",
+                            "description": "Represents the profile ID or the user email for which the data should be filtered. Can be `all` for all information, or `userKey` for a user's unique Google Workspace profile ID or their primary email address.",
                             "location": "path",
                             "required": true,
                             "type": "string"
@@ -635,7 +635,7 @@
             }
         }
     },
-    "revision": "20201208",
+    "revision": "20210302",
     "rootUrl": "https://admin.googleapis.com/",
     "schemas": {
         "Activities": {
@@ -685,7 +685,7 @@
                             "type": "string"
                         },
                         "profileId": {
-                            "description": "The unique G Suite profile ID of the actor. May be absent if the actor is not a G Suite user.",
+                            "description": "The unique Google Workspace profile ID of the actor. May be absent if the actor is not a Google Workspace user.",
                             "type": "string"
                         }
                     },
@@ -700,7 +700,7 @@
                     "items": {
                         "properties": {
                             "name": {
-                                "description": "Name of the event. This is the specific name of the activity reported by the API. And each `eventName` is related to a specific G Suite service or feature which the API organizes into types of events. For `eventName` request parameters in general: - If no `eventName` is given, the report returns all possible instances of an `eventName`. - When you request an `eventName`, the API's response returns all activities which contain that `eventName`. It is possible that the returned activities will have other `eventName` properties in addition to the one requested. For more information about `eventName` properties, see the list of event names for various applications above in `applicationName`.",
+                                "description": "Name of the event. This is the specific name of the activity reported by the API. And each `eventName` is related to a specific Google Workspace service or feature which the API organizes into types of events. For `eventName` request parameters in general: - If no `eventName` is given, the report returns all possible instances of an `eventName`. - When you request an `eventName`, the API's response returns all activities which contain that `eventName`. It is possible that the returned activities will have other `eventName` properties in addition to the one requested. For more information about `eventName` properties, see the list of event names for various applications above in `applicationName`.",
                                 "type": "string"
                             },
                             "parameters": {
@@ -774,7 +774,7 @@
                                 "type": "array"
                             },
                             "type": {
-                                "description": "Type of event. The G Suite service or feature that an administrator changes is identified in the `type` property which identifies an event using the `eventName` property. For a full list of the API's `type` categories, see the list of event names for various applications above in `applicationName`.",
+                                "description": "Type of event. The Google Workspace service or feature that an administrator changes is identified in the `type` property which identifies an event using the `eventName` property. For a full list of the API's `type` categories, see the list of event names for various applications above in `applicationName`.",
                                 "type": "string"
                             }
                         },
@@ -790,7 +790,7 @@
                             "type": "string"
                         },
                         "customerId": {
-                            "description": "The unique identifier for a G suite account.",
+                            "description": "The unique identifier for a Google Workspace account.",
                             "type": "string"
                         },
                         "time": {
@@ -807,7 +807,7 @@
                     "type": "object"
                 },
                 "ipAddress": {
-                    "description": "IP address of the user doing the action. This is the Internet Protocol (IP) address of the user when logging into G Suite which may or may not reflect the user's physical location. For example, the IP address can be the user's proxy server's address or a virtual private network (VPN) address. The API supports IPv4 and IPv6.",
+                    "description": "IP address of the user doing the action. This is the Internet Protocol (IP) address of the user when logging into Google Workspace, which may or may not reflect the user's physical location. For example, the IP address can be the user's proxy server's address or a virtual private network (VPN) address. The API supports IPv4 and IPv6.",
                     "type": "string"
                 },
                 "kind": {
@@ -943,7 +943,7 @@
                             "type": "string"
                         },
                         "profileId": {
-                            "description": "Output only. The user's immutable G Suite profile identifier.",
+                            "description": "Output only. The user's immutable Google Workspace profile identifier.",
                             "readOnly": true,
                             "type": "string"
                         },
diff --git a/googleapiclient/discovery_cache/documents/admob.v1.json b/googleapiclient/discovery_cache/documents/admob.v1.json
index 268a8b6..45f0cf7 100644
--- a/googleapiclient/discovery_cache/documents/admob.v1.json
+++ b/googleapiclient/discovery_cache/documents/admob.v1.json
@@ -1,982 +1,982 @@
 {
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/admob.report": {
-          "description": "See your AdMob data"
-        },
-        "https://www.googleapis.com/auth/admob.readonly": {
-          "description": "See your AdMob data"
-        }
-      }
-    }
-  },
-  "revision": "20201114",
-  "canonicalName": "AdMob",
-  "title": "AdMob API",
-  "id": "admob:v1",
-  "protocol": "rest",
-  "baseUrl": "https://admob.googleapis.com/",
-  "version_module": true,
-  "name": "admob",
-  "basePath": "",
-  "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
-  },
-  "version": "v1",
-  "description": "The AdMob API allows publishers to programmatically get information about their AdMob account. ",
-  "fullyEncodeReservedExpansion": true,
-  "documentationLink": "https://developers.google.com/admob/api/",
-  "servicePath": "",
-  "parameters": {
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "default": "true",
-      "type": "boolean",
-      "location": "query",
-      "description": "Returns response with indentations and line breaks."
-    },
-    "callback": {
-      "location": "query",
-      "type": "string",
-      "description": "JSONP"
-    },
-    "fields": {
-      "type": "string",
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response."
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "alt": {
-      "type": "string",
-      "description": "Data format for response.",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "location": "query",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "default": "json"
-    },
-    "upload_protocol": {
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "location": "query"
-    },
-    "quotaUser": {
-      "location": "query",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "type": "string"
-    },
-    "key": {
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "location": "query",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "description": "V1 error format.",
-      "type": "string"
-    },
-    "access_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth access token."
-    }
-  },
-  "discoveryVersion": "v1",
-  "rootUrl": "https://admob.googleapis.com/",
-  "schemas": {
-    "MediationReportSpecSortCondition": {
-      "type": "object",
-      "description": "Sorting direction to be applied on a dimension or a metric.",
-      "properties": {
-        "dimension": {
-          "type": "string",
-          "enum": [
-            "DIMENSION_UNSPECIFIED",
-            "DATE",
-            "MONTH",
-            "WEEK",
-            "AD_SOURCE",
-            "AD_SOURCE_INSTANCE",
-            "AD_UNIT",
-            "APP",
-            "MEDIATION_GROUP",
-            "COUNTRY",
-            "FORMAT",
-            "PLATFORM"
-          ],
-          "enumDescriptions": [
-            "Default value for an unset field. Do not use.",
-            "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-            "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
-            "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-            "The [unique ID of the ad source](/admob/api/v1/ad_sources) (for example, \"5450213213286189855\" and \"AdMob Network\" as label value).",
-            "The unique ID of the ad source instance (for example, \"ca-app-pub-1234#5678\" and \"AdMob (default)\" as label value).",
-            "The unique ID of the ad unit (for example, \"ca-app-pub-1234/8790\"). If AD_UNIT dimension is specified, then APP is included automatically.",
-            "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
-            "The unique ID of the mediation group (for example, \"ca-app-pub-1234:mg:1234\" and \"AdMob (default)\" as label value).",
-            "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
-            "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
-            "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
-          ],
-          "description": "Sort by the specified dimension."
-        },
-        "order": {
-          "enum": [
-            "SORT_ORDER_UNSPECIFIED",
-            "ASCENDING",
-            "DESCENDING"
-          ],
-          "type": "string",
-          "description": "Sorting order of the dimension or metric.",
-          "enumDescriptions": [
-            "Default value for an unset field. Do not use.",
-            "Sort dimension value or metric value in ascending order.",
-            "Sort dimension value or metric value in descending order."
-          ]
-        },
-        "metric": {
-          "enum": [
-            "METRIC_UNSPECIFIED",
-            "AD_REQUESTS",
-            "CLICKS",
-            "ESTIMATED_EARNINGS",
-            "IMPRESSIONS",
-            "IMPRESSION_CTR",
-            "MATCHED_REQUESTS",
-            "MATCH_RATE",
-            "OBSERVED_ECPM"
-          ],
-          "type": "string",
-          "description": "Sort by the specified metric.",
-          "enumDescriptions": [
-            "Default value for an unset field. Do not use.",
-            "The number of requests. The value is an integer.",
-            "The number of times a user clicks an ad. The value is an integer.",
-            "The estimated earnings of the AdMob publisher. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $6.50 would be represented as 6500000. Estimated earnings per mediation group and per ad source instance level is supported dating back to October 20, 2019. Third-party estimated earnings will show 0 for dates prior to October 20, 2019.",
-            "The total number of ads shown to users. The value is an integer.",
-            "The ratio of clicks over impressions. The value is a double precision (approximate) decimal value.",
-            "The number of times ads are returned in response to a request. The value is an integer.",
-            "The ratio of matched ad requests over the total ad requests. The value is a double precision (approximate) decimal value.",
-            "The third-party ad network's estimated average eCPM. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $2.30 would be represented as 2300000. The estimated average eCPM per mediation group and per ad source instance level is supported dating back to October 20, 2019. Third-party estimated average eCPM will show 0 for dates prior to October 20, 2019."
-          ]
-        }
-      },
-      "id": "MediationReportSpecSortCondition"
-    },
-    "DateRange": {
-      "type": "object",
-      "description": "Specification of a single date range. Both dates are inclusive.",
-      "id": "DateRange",
-      "properties": {
-        "endDate": {
-          "$ref": "Date",
-          "description": "End date of the date range, inclusive. Must be greater than or equal to the start date."
-        },
-        "startDate": {
-          "description": "Start date of the date range, inclusive. Must be less than or equal to the end date.",
-          "$ref": "Date"
-        }
-      }
-    },
-    "ReportFooter": {
-      "id": "ReportFooter",
-      "description": "Groups data available after report generation, for example, warnings and row counts. Always sent as the last message in the stream response.",
-      "properties": {
-        "matchingRowCount": {
-          "description": "Total number of rows that matched the request. Warning: This count does NOT always match the number of rows in the response. Do not make that assumption when processing the response.",
-          "type": "string",
-          "format": "int64"
-        },
-        "warnings": {
-          "type": "array",
-          "description": "Warnings associated with generation of the report.",
-          "items": {
-            "$ref": "ReportWarning"
-          }
-        }
-      },
-      "type": "object"
-    },
-    "GenerateNetworkReportRequest": {
-      "description": "Request to generate an AdMob Network report.",
-      "properties": {
-        "reportSpec": {
-          "description": "Network report specification.",
-          "$ref": "NetworkReportSpec"
-        }
-      },
-      "type": "object",
-      "id": "GenerateNetworkReportRequest"
-    },
-    "MediationReportSpec": {
-      "id": "MediationReportSpec",
-      "description": "The specification for generating an AdMob Mediation report. For example, the specification to get observed ECPM sliced by ad source and app for the 'US' and 'CN' countries can look like the following example: { \"date_range\": { \"start_date\": {\"year\": 2018, \"month\": 9, \"day\": 1}, \"end_date\": {\"year\": 2018, \"month\": 9, \"day\": 30} }, \"dimensions\": [\"AD_SOURCE\", \"APP\", \"COUNTRY\"], \"metrics\": [\"OBSERVED_ECPM\"], \"dimension_filters\": [ { \"dimension\": \"COUNTRY\", \"matches_any\": {\"values\": [{\"value\": \"US\", \"value\": \"CN\"}]} } ], \"sort_conditions\": [ {\"dimension\":\"APP\", order: \"ASCENDING\"} ], \"localization_settings\": { \"currency_code\": \"USD\", \"language_code\": \"en-US\" } } For a better understanding, you can treat the preceding specification like the following pseudo SQL: SELECT AD_SOURCE, APP, COUNTRY, OBSERVED_ECPM FROM MEDIATION_REPORT WHERE DATE \u003e= '2018-09-01' AND DATE \u003c= '2018-09-30' AND COUNTRY IN ('US', 'CN') GROUP BY AD_SOURCE, APP, COUNTRY ORDER BY APP ASC;",
-      "type": "object",
-      "properties": {
-        "maxReportRows": {
-          "type": "integer",
-          "description": "Maximum number of report data rows to return. If the value is not set, the API returns as many rows as possible, up to 100000. Acceptable values are 1-100000, inclusive. Values larger than 100000 return an error.",
-          "format": "int32"
-        },
-        "timeZone": {
-          "description": "A report time zone. Accepts an IANA TZ name values, such as \"America/Los_Angeles.\" If no time zone is defined, the account default takes effect. Check default value by the get account action. **Warning:** The \"America/Los_Angeles\" is the only supported value at the moment.",
-          "type": "string"
-        },
-        "sortConditions": {
-          "items": {
-            "$ref": "MediationReportSpecSortCondition"
-          },
-          "type": "array",
-          "description": "Describes the sorting of report rows. The order of the condition in the list defines its precedence; the earlier the condition, the higher its precedence. If no sort conditions are specified, the row ordering is undefined."
-        },
-        "dateRange": {
-          "description": "The date range for which the report is generated.",
-          "$ref": "DateRange"
-        },
-        "dimensions": {
-          "type": "array",
-          "description": "List of dimensions of the report. The value combination of these dimensions determines the row of the report. If no dimensions are specified, the report returns a single row of requested metrics for the entire account.",
-          "items": {
-            "enum": [
-              "DIMENSION_UNSPECIFIED",
-              "DATE",
-              "MONTH",
-              "WEEK",
-              "AD_SOURCE",
-              "AD_SOURCE_INSTANCE",
-              "AD_UNIT",
-              "APP",
-              "MEDIATION_GROUP",
-              "COUNTRY",
-              "FORMAT",
-              "PLATFORM"
-            ],
-            "type": "string",
-            "enumDescriptions": [
-              "Default value for an unset field. Do not use.",
-              "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-              "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
-              "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-              "The [unique ID of the ad source](/admob/api/v1/ad_sources) (for example, \"5450213213286189855\" and \"AdMob Network\" as label value).",
-              "The unique ID of the ad source instance (for example, \"ca-app-pub-1234#5678\" and \"AdMob (default)\" as label value).",
-              "The unique ID of the ad unit (for example, \"ca-app-pub-1234/8790\"). If AD_UNIT dimension is specified, then APP is included automatically.",
-              "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
-              "The unique ID of the mediation group (for example, \"ca-app-pub-1234:mg:1234\" and \"AdMob (default)\" as label value).",
-              "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
-              "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
-              "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
-            ]
-          }
-        },
-        "metrics": {
-          "items": {
-            "enumDescriptions": [
-              "Default value for an unset field. Do not use.",
-              "The number of requests. The value is an integer.",
-              "The number of times a user clicks an ad. The value is an integer.",
-              "The estimated earnings of the AdMob publisher. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $6.50 would be represented as 6500000. Estimated earnings per mediation group and per ad source instance level is supported dating back to October 20, 2019. Third-party estimated earnings will show 0 for dates prior to October 20, 2019.",
-              "The total number of ads shown to users. The value is an integer.",
-              "The ratio of clicks over impressions. The value is a double precision (approximate) decimal value.",
-              "The number of times ads are returned in response to a request. The value is an integer.",
-              "The ratio of matched ad requests over the total ad requests. The value is a double precision (approximate) decimal value.",
-              "The third-party ad network's estimated average eCPM. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $2.30 would be represented as 2300000. The estimated average eCPM per mediation group and per ad source instance level is supported dating back to October 20, 2019. Third-party estimated average eCPM will show 0 for dates prior to October 20, 2019."
-            ],
-            "type": "string",
-            "enum": [
-              "METRIC_UNSPECIFIED",
-              "AD_REQUESTS",
-              "CLICKS",
-              "ESTIMATED_EARNINGS",
-              "IMPRESSIONS",
-              "IMPRESSION_CTR",
-              "MATCHED_REQUESTS",
-              "MATCH_RATE",
-              "OBSERVED_ECPM"
-            ]
-          },
-          "description": "List of metrics of the report. A report must specify at least one metric.",
-          "type": "array"
-        },
-        "localizationSettings": {
-          "$ref": "LocalizationSettings",
-          "description": "Localization settings of the report."
-        },
-        "dimensionFilters": {
-          "description": "Describes which report rows to match based on their dimension values.",
-          "type": "array",
-          "items": {
-            "$ref": "MediationReportSpecDimensionFilter"
-          }
-        }
-      }
-    },
-    "NetworkReportSpecSortCondition": {
-      "type": "object",
-      "description": "Sorting direction to be applied on a dimension or a metric.",
-      "id": "NetworkReportSpecSortCondition",
-      "properties": {
-        "order": {
-          "enum": [
-            "SORT_ORDER_UNSPECIFIED",
-            "ASCENDING",
-            "DESCENDING"
-          ],
-          "description": "Sorting order of the dimension or metric.",
-          "enumDescriptions": [
-            "Default value for an unset field. Do not use.",
-            "Sort dimension value or metric value in ascending order.",
-            "Sort dimension value or metric value in descending order."
-          ],
-          "type": "string"
-        },
-        "metric": {
-          "type": "string",
-          "enumDescriptions": [
-            "Default value for an unset field. Do not use.",
-            "The number of ad requests. The value is an integer. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
-            "The number of times a user clicks an ad. The value is an integer.",
-            "The estimated earnings of the AdMob publisher. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $6.50 would be represented as 6500000.",
-            "The total number of ads shown to users. The value is an integer.",
-            "The ratio of clicks over impressions. The value is a double precision (approximate) decimal value.",
-            "The estimated earnings per thousand ad impressions. The value is in micros. For example, $1.03 would be represented as 1030000. Equivalent to eCPM in the AdMob UI. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
-            "The number of times ads are returned in response to a request. The value is an integer.",
-            "The ratio of matched ad requests over the total ad requests. The value is a double precision (approximate) decimal value. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
-            "The ratio of ads that are displayed over ads that are returned, defined as impressions / matched requests. The value is a double precision (approximate) decimal value."
-          ],
-          "description": "Sort by the specified metric.",
-          "enum": [
-            "METRIC_UNSPECIFIED",
-            "AD_REQUESTS",
-            "CLICKS",
-            "ESTIMATED_EARNINGS",
-            "IMPRESSIONS",
-            "IMPRESSION_CTR",
-            "IMPRESSION_RPM",
-            "MATCHED_REQUESTS",
-            "MATCH_RATE",
-            "SHOW_RATE"
-          ]
-        },
-        "dimension": {
-          "enum": [
-            "DIMENSION_UNSPECIFIED",
-            "DATE",
-            "MONTH",
-            "WEEK",
-            "AD_UNIT",
-            "APP",
-            "AD_TYPE",
-            "COUNTRY",
-            "FORMAT",
-            "PLATFORM"
-          ],
-          "description": "Sort by the specified dimension.",
-          "type": "string",
-          "enumDescriptions": [
-            "Default value for an unset field. Do not use.",
-            "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-            "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
-            "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-            "The unique ID of the ad unit (for example, \"ca-app-pub-1234/1234\"). If AD_UNIT dimension is specified, then APP is included automatically.",
-            "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
-            "Type of the ad (for example, \"text\" or \"image\"), an ad delivery dimension. **Warning:** The dimension is incompatible with [AD_REQUESTS](#Metric.ENUM_VALUES.AD_REQUESTS), [MATCH_RATE](#Metric.ENUM_VALUES.MATCH_RATE) and [IMPRESSION_RPM](#Metric.ENUM_VALUES.IMPRESSION_RPM) metrics.",
-            "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
-            "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
-            "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
-          ]
-        }
-      }
-    },
-    "NetworkReportSpecDimensionFilter": {
-      "description": "Describes which report rows to match based on their dimension values.",
-      "type": "object",
-      "properties": {
-        "matchesAny": {
-          "description": "Matches a row if its value for the specified dimension is in one of the values specified in this condition.",
-          "$ref": "StringList"
-        },
-        "dimension": {
-          "description": "Applies the filter criterion to the specified dimension.",
-          "enum": [
-            "DIMENSION_UNSPECIFIED",
-            "DATE",
-            "MONTH",
-            "WEEK",
-            "AD_UNIT",
-            "APP",
-            "AD_TYPE",
-            "COUNTRY",
-            "FORMAT",
-            "PLATFORM"
-          ],
-          "enumDescriptions": [
-            "Default value for an unset field. Do not use.",
-            "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-            "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
-            "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-            "The unique ID of the ad unit (for example, \"ca-app-pub-1234/1234\"). If AD_UNIT dimension is specified, then APP is included automatically.",
-            "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
-            "Type of the ad (for example, \"text\" or \"image\"), an ad delivery dimension. **Warning:** The dimension is incompatible with [AD_REQUESTS](#Metric.ENUM_VALUES.AD_REQUESTS), [MATCH_RATE](#Metric.ENUM_VALUES.MATCH_RATE) and [IMPRESSION_RPM](#Metric.ENUM_VALUES.IMPRESSION_RPM) metrics.",
-            "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
-            "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
-            "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
-          ],
-          "type": "string"
-        }
-      },
-      "id": "NetworkReportSpecDimensionFilter"
-    },
-    "NetworkReportSpec": {
-      "id": "NetworkReportSpec",
-      "type": "object",
-      "properties": {
-        "maxReportRows": {
-          "description": "Maximum number of report data rows to return. If the value is not set, the API returns as many rows as possible, up to 100000. Acceptable values are 1-100000, inclusive. Values larger than 100000 return an error.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "dateRange": {
-          "$ref": "DateRange",
-          "description": "The date range for which the report is generated."
-        },
-        "timeZone": {
-          "type": "string",
-          "description": "A report time zone. Accepts an IANA TZ name values, such as \"America/Los_Angeles.\" If no time zone is defined, the account default takes effect. Check default value by the get account action. **Warning:** The \"America/Los_Angeles\" is the only supported value at the moment."
-        },
-        "localizationSettings": {
-          "description": "Localization settings of the report.",
-          "$ref": "LocalizationSettings"
-        },
-        "sortConditions": {
-          "type": "array",
-          "items": {
-            "$ref": "NetworkReportSpecSortCondition"
-          },
-          "description": "Describes the sorting of report rows. The order of the condition in the list defines its precedence; the earlier the condition, the higher its precedence. If no sort conditions are specified, the row ordering is undefined."
-        },
-        "dimensionFilters": {
-          "items": {
-            "$ref": "NetworkReportSpecDimensionFilter"
-          },
-          "type": "array",
-          "description": "Describes which report rows to match based on their dimension values."
-        },
-        "dimensions": {
-          "items": {
-            "enumDescriptions": [
-              "Default value for an unset field. Do not use.",
-              "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-              "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
-              "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-              "The unique ID of the ad unit (for example, \"ca-app-pub-1234/1234\"). If AD_UNIT dimension is specified, then APP is included automatically.",
-              "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
-              "Type of the ad (for example, \"text\" or \"image\"), an ad delivery dimension. **Warning:** The dimension is incompatible with [AD_REQUESTS](#Metric.ENUM_VALUES.AD_REQUESTS), [MATCH_RATE](#Metric.ENUM_VALUES.MATCH_RATE) and [IMPRESSION_RPM](#Metric.ENUM_VALUES.IMPRESSION_RPM) metrics.",
-              "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
-              "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
-              "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
-            ],
-            "enum": [
-              "DIMENSION_UNSPECIFIED",
-              "DATE",
-              "MONTH",
-              "WEEK",
-              "AD_UNIT",
-              "APP",
-              "AD_TYPE",
-              "COUNTRY",
-              "FORMAT",
-              "PLATFORM"
-            ],
-            "type": "string"
-          },
-          "type": "array",
-          "description": "List of dimensions of the report. The value combination of these dimensions determines the row of the report. If no dimensions are specified, the report returns a single row of requested metrics for the entire account."
-        },
-        "metrics": {
-          "type": "array",
-          "description": "List of metrics of the report. A report must specify at least one metric.",
-          "items": {
-            "type": "string",
-            "enum": [
-              "METRIC_UNSPECIFIED",
-              "AD_REQUESTS",
-              "CLICKS",
-              "ESTIMATED_EARNINGS",
-              "IMPRESSIONS",
-              "IMPRESSION_CTR",
-              "IMPRESSION_RPM",
-              "MATCHED_REQUESTS",
-              "MATCH_RATE",
-              "SHOW_RATE"
-            ],
-            "enumDescriptions": [
-              "Default value for an unset field. Do not use.",
-              "The number of ad requests. The value is an integer. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
-              "The number of times a user clicks an ad. The value is an integer.",
-              "The estimated earnings of the AdMob publisher. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $6.50 would be represented as 6500000.",
-              "The total number of ads shown to users. The value is an integer.",
-              "The ratio of clicks over impressions. The value is a double precision (approximate) decimal value.",
-              "The estimated earnings per thousand ad impressions. The value is in micros. For example, $1.03 would be represented as 1030000. Equivalent to eCPM in the AdMob UI. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
-              "The number of times ads are returned in response to a request. The value is an integer.",
-              "The ratio of matched ad requests over the total ad requests. The value is a double precision (approximate) decimal value. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
-              "The ratio of ads that are displayed over ads that are returned, defined as impressions / matched requests. The value is a double precision (approximate) decimal value."
-            ]
-          }
-        }
-      },
-      "description": "The specification for generating an AdMob Network report. For example, the specification to get clicks and estimated earnings for only the 'US' and 'CN' countries can look like the following example: { 'date_range': { 'start_date': {'year': 2018, 'month': 9, 'day': 1}, 'end_date': {'year': 2018, 'month': 9, 'day': 30} }, 'dimensions': ['DATE', 'APP', 'COUNTRY'], 'metrics': ['CLICKS', 'ESTIMATED_EARNINGS'], 'dimension_filters': [ { 'dimension': 'COUNTRY', 'matches_any': {'values': [{'value': 'US', 'value': 'CN'}]} } ], 'sort_conditions': [ {'dimension':'APP', order: 'ASCENDING'}, {'metric':'CLICKS', order: 'DESCENDING'} ], 'localization_settings': { 'currency_code': 'USD', 'language_code': 'en-US' } } For a better understanding, you can treat the preceding specification like the following pseudo SQL: SELECT DATE, APP, COUNTRY, CLICKS, ESTIMATED_EARNINGS FROM NETWORK_REPORT WHERE DATE \u003e= '2018-09-01' AND DATE \u003c= '2018-09-30' AND COUNTRY IN ('US', 'CN') GROUP BY DATE, APP, COUNTRY ORDER BY APP ASC, CLICKS DESC;"
-    },
-    "GenerateMediationReportResponse": {
-      "type": "object",
-      "id": "GenerateMediationReportResponse",
-      "properties": {
-        "footer": {
-          "description": "Additional information about the generated report, such as warnings about the data.",
-          "$ref": "ReportFooter"
-        },
-        "header": {
-          "$ref": "ReportHeader",
-          "description": "Report generation settings that describes the report contents, such as the report date range and localization settings."
-        },
-        "row": {
-          "description": "Actual report data.",
-          "$ref": "ReportRow"
-        }
-      },
-      "description": "The streaming response for the AdMob Mediation report where the first response contains the report header, then a stream of row responses, and finally a footer as the last response message. For example: [{ \"header\": { \"date_range\": { \"start_date\": {\"year\": 2018, \"month\": 9, \"day\": 1}, \"end_date\": {\"year\": 2018, \"month\": 9, \"day\": 1} }, \"localization_settings\": { \"currency_code\": \"USD\", \"language_code\": \"en-US\" } } }, { \"row\": { \"dimension_values\": { \"DATE\": {\"value\": \"20180918\"}, \"APP\": { \"value\": \"ca-app-pub-8123415297019784~1001342552\", \"display_label\": \"My app name!\" } }, \"metric_values\": { \"ESTIMATED_EARNINGS\": {\"decimal_value\": \"1324746\"} } } }, { \"footer\": {\"matching_row_count\": 1} }]"
-    },
-    "MediationReportSpecDimensionFilter": {
-      "id": "MediationReportSpecDimensionFilter",
-      "description": "Describes which report rows to match based on their dimension values.",
-      "properties": {
-        "matchesAny": {
-          "description": "Matches a row if its value for the specified dimension is in one of the values specified in this condition.",
-          "$ref": "StringList"
-        },
-        "dimension": {
-          "enumDescriptions": [
-            "Default value for an unset field. Do not use.",
-            "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-            "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
-            "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-            "The [unique ID of the ad source](/admob/api/v1/ad_sources) (for example, \"5450213213286189855\" and \"AdMob Network\" as label value).",
-            "The unique ID of the ad source instance (for example, \"ca-app-pub-1234#5678\" and \"AdMob (default)\" as label value).",
-            "The unique ID of the ad unit (for example, \"ca-app-pub-1234/8790\"). If AD_UNIT dimension is specified, then APP is included automatically.",
-            "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
-            "The unique ID of the mediation group (for example, \"ca-app-pub-1234:mg:1234\" and \"AdMob (default)\" as label value).",
-            "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
-            "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
-            "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
-          ],
-          "type": "string",
-          "enum": [
-            "DIMENSION_UNSPECIFIED",
-            "DATE",
-            "MONTH",
-            "WEEK",
-            "AD_SOURCE",
-            "AD_SOURCE_INSTANCE",
-            "AD_UNIT",
-            "APP",
-            "MEDIATION_GROUP",
-            "COUNTRY",
-            "FORMAT",
-            "PLATFORM"
-          ],
-          "description": "Applies the filter criterion to the specified dimension."
-        }
-      },
-      "type": "object"
-    },
-    "PublisherAccount": {
-      "id": "PublisherAccount",
-      "properties": {
-        "publisherId": {
-          "type": "string",
-          "description": "The unique ID by which this publisher account can be identified in the API requests (for example, pub-1234567890)."
-        },
-        "reportingTimeZone": {
-          "description": "The time zone that is used in reports that are generated for this account. The value is a time-zone ID as specified by the CLDR project, for example, \"America/Los_Angeles\".",
-          "type": "string"
-        },
-        "currencyCode": {
-          "description": "Currency code of the earning-related metrics, which is the 3-letter code defined in ISO 4217. The daily average rate is used for the currency conversion.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Resource name of this account. Format is accounts/{publisher_id}.",
-          "type": "string"
-        }
-      },
-      "description": "A publisher account contains information relevant to the use of this API, such as the time zone used for the reports.",
-      "type": "object"
-    },
-    "GenerateMediationReportRequest": {
-      "description": "Request to generate an AdMob Mediation report.",
-      "id": "GenerateMediationReportRequest",
-      "properties": {
-        "reportSpec": {
-          "description": "Network report specification.",
-          "$ref": "MediationReportSpec"
-        }
-      },
-      "type": "object"
-    },
-    "Date": {
-      "properties": {
-        "day": {
-          "description": "Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to specify a year by itself or a year and month where the day isn't significant.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "year": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year."
-        },
-        "month": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day."
-        }
-      },
-      "id": "Date",
-      "description": "Represents a whole or partial calendar date, such as a birthday. The time of day and time zone are either specified elsewhere or are insignificant. The date is relative to the Gregorian Calendar. This can represent one of the following: * A full date, with non-zero year, month, and day values * A month and day value, with a zero year, such as an anniversary * A year on its own, with zero month and day values * A year and month value, with a zero day, such as a credit card expiration date Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.",
-      "type": "object"
-    },
-    "ReportRowDimensionValue": {
-      "properties": {
-        "value": {
-          "type": "string",
-          "description": "Dimension value in the format specified in the report's spec Dimension enum."
-        },
-        "displayLabel": {
-          "description": "The localized string representation of the value. If unspecified, the display label should be derived from the value.",
-          "type": "string"
-        }
-      },
-      "id": "ReportRowDimensionValue",
-      "type": "object",
-      "description": "Representation of a dimension value."
-    },
-    "ReportRow": {
-      "properties": {
-        "metricValues": {
-          "additionalProperties": {
-            "$ref": "ReportRowMetricValue"
-          },
-          "type": "object",
-          "description": "Map of metric values in a row, with keys as enum name of the metrics. If a metric being requested has no value returned, the map will not include it."
-        },
-        "dimensionValues": {
-          "type": "object",
-          "additionalProperties": {
-            "$ref": "ReportRowDimensionValue"
-          },
-          "description": "Map of dimension values in a row, with keys as enum name of the dimensions."
-        }
-      },
-      "id": "ReportRow",
-      "type": "object",
-      "description": "A row of the returning report."
-    },
-    "LocalizationSettings": {
-      "id": "LocalizationSettings",
-      "properties": {
-        "languageCode": {
-          "description": "Language used for any localized text, such as some dimension value display labels. The language tag defined in the IETF BCP47. Defaults to 'en-US' if unspecified.",
-          "type": "string"
-        },
-        "currencyCode": {
-          "description": "Currency code of the earning related metrics, which is the 3-letter code defined in ISO 4217. The daily average rate is used for the currency conversion. Defaults to the account currency code if unspecified.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Localization settings for reports, such as currency and language. It affects how metrics are calculated."
-    },
-    "ReportWarning": {
-      "id": "ReportWarning",
-      "description": "Warnings associated with generation of the report.",
-      "type": "object",
-      "properties": {
-        "description": {
-          "description": "Describes the details of the warning message, in English.",
-          "type": "string"
-        },
-        "type": {
-          "description": "Type of the warning.",
-          "type": "string",
-          "enumDescriptions": [
-            "Default value for an unset field. Do not use.",
-            "Some data in this report is aggregated based on a time zone different from the requested time zone. This could happen if a local time-zone report has the start time before the last time this time zone changed. The description field will contain the date of the last time zone change.",
-            "There is an unusual delay in processing the source data for the requested date range. The report results might be less up to date than usual. AdMob is aware of the issue and is actively working to resolve it.",
-            "Warnings that are exposed without a specific type. Useful when new warning types are added but the API is not changed yet.",
-            "The currency being requested is not the account currency. The earning metrics will be based on the requested currency, and thus not a good estimation of the final payment anymore, due to the currency rate fluctuation."
-          ],
-          "enum": [
-            "TYPE_UNSPECIFIED",
-            "DATA_BEFORE_ACCOUNT_TIMEZONE_CHANGE",
-            "DATA_DELAYED",
-            "OTHER",
-            "REPORT_CURRENCY_NOT_ACCOUNT_CURRENCY"
-          ]
-        }
-      }
-    },
-    "ReportHeader": {
-      "type": "object",
-      "properties": {
-        "dateRange": {
-          "description": "The date range for which the report is generated. This is identical to the range specified in the report request.",
-          "$ref": "DateRange"
-        },
-        "localizationSettings": {
-          "$ref": "LocalizationSettings",
-          "description": "Localization settings of the report. This is identical to the settings in the report request."
-        },
-        "reportingTimeZone": {
-          "description": "The report time zone. The value is a time-zone ID as specified by the CLDR project, for example, \"America/Los_Angeles\".",
-          "type": "string"
-        }
-      },
-      "description": "Groups data helps to treat the generated report. Always sent as a first message in the stream response.",
-      "id": "ReportHeader"
-    },
-    "StringList": {
-      "description": "List of string values.",
-      "properties": {
-        "values": {
-          "type": "array",
-          "description": "The string values.",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "StringList",
-      "type": "object"
-    },
-    "ReportRowMetricValue": {
-      "description": "Representation of a metric value.",
-      "type": "object",
-      "properties": {
-        "integerValue": {
-          "description": "Metric integer value.",
-          "format": "int64",
-          "type": "string"
-        },
-        "microsValue": {
-          "description": "Amount in micros. One million is equivalent to one unit. Currency value is in the unit (USD, EUR or other) specified by the request. For example, $6.50 whould be represented as 6500000 micros.",
-          "format": "int64",
-          "type": "string"
-        },
-        "doubleValue": {
-          "format": "double",
-          "description": "Double precision (approximate) decimal values. Rates are from 0 to 1.",
-          "type": "number"
-        }
-      },
-      "id": "ReportRowMetricValue"
-    },
-    "ListPublisherAccountsResponse": {
-      "description": "Response for the publisher account list request.",
-      "properties": {
-        "account": {
-          "items": {
-            "$ref": "PublisherAccount"
-          },
-          "description": "Publisher that the client credentials can access.",
-          "type": "array"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "If not empty, indicates that there might be more accounts for the request; you must pass this value in a new `ListPublisherAccountsRequest`."
-        }
-      },
-      "id": "ListPublisherAccountsResponse",
-      "type": "object"
-    },
-    "GenerateNetworkReportResponse": {
-      "description": "The streaming response for the AdMob Network report where the first response contains the report header, then a stream of row responses, and finally a footer as the last response message. For example: [{ \"header\": { \"dateRange\": { \"startDate\": {\"year\": 2018, \"month\": 9, \"day\": 1}, \"endDate\": {\"year\": 2018, \"month\": 9, \"day\": 1} }, \"localizationSettings\": { \"currencyCode\": \"USD\", \"languageCode\": \"en-US\" } } }, { \"row\": { \"dimensionValues\": { \"DATE\": {\"value\": \"20180918\"}, \"APP\": { \"value\": \"ca-app-pub-8123415297019784~1001342552\", displayLabel: \"My app name!\" } }, \"metricValues\": { \"ESTIMATED_EARNINGS\": {\"microsValue\": 6500000} } } }, { \"footer\": {\"matchingRowCount\": 1} }]",
-      "id": "GenerateNetworkReportResponse",
-      "type": "object",
-      "properties": {
-        "row": {
-          "$ref": "ReportRow",
-          "description": "Actual report data."
-        },
-        "footer": {
-          "description": "Additional information about the generated report, such as warnings about the data.",
-          "$ref": "ReportFooter"
-        },
-        "header": {
-          "description": "Report generation settings that describes the report contents, such as the report date range and localization settings.",
-          "$ref": "ReportHeader"
-        }
-      }
-    }
-  },
-  "resources": {
-    "accounts": {
-      "resources": {
-        "networkReport": {
-          "methods": {
-            "generate": {
-              "parameters": {
-                "parent": {
-                  "type": "string",
-                  "pattern": "^accounts/[^/]+$",
-                  "description": "Resource name of the account to generate the report for. Example: accounts/pub-9876543210987654",
-                  "required": true,
-                  "location": "path"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/admob.readonly": {
+                    "description": "See your AdMob data"
+                },
+                "https://www.googleapis.com/auth/admob.report": {
+                    "description": "See your AdMob data"
                 }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/admob.readonly",
-                "https://www.googleapis.com/auth/admob.report"
-              ],
-              "path": "v1/{+parent}/networkReport:generate",
-              "streamingType": "SERVER_SIDE",
-              "flatPath": "v1/accounts/{accountsId}/networkReport:generate",
-              "response": {
-                "$ref": "GenerateNetworkReportResponse"
-              },
-              "description": "Generates an AdMob Network report based on the provided report specification. Returns result of a server-side streaming RPC. The result is returned in a sequence of responses.",
-              "id": "admob.accounts.networkReport.generate",
-              "request": {
-                "$ref": "GenerateNetworkReportRequest"
-              },
-              "parameterOrder": [
-                "parent"
-              ],
-              "httpMethod": "POST"
             }
-          }
-        },
-        "mediationReport": {
-          "methods": {
-            "generate": {
-              "parameterOrder": [
-                "parent"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/admob.readonly",
-                "https://www.googleapis.com/auth/admob.report"
-              ],
-              "path": "v1/{+parent}/mediationReport:generate",
-              "description": "Generates an AdMob Mediation report based on the provided report specification. Returns result of a server-side streaming RPC. The result is returned in a sequence of responses.",
-              "id": "admob.accounts.mediationReport.generate",
-              "response": {
-                "$ref": "GenerateMediationReportResponse"
-              },
-              "request": {
-                "$ref": "GenerateMediationReportRequest"
-              },
-              "flatPath": "v1/accounts/{accountsId}/mediationReport:generate",
-              "streamingType": "SERVER_SIDE",
-              "httpMethod": "POST",
-              "parameters": {
-                "parent": {
-                  "required": true,
-                  "location": "path",
-                  "pattern": "^accounts/[^/]+$",
-                  "description": "Resource name of the account to generate the report for. Example: accounts/pub-9876543210987654",
-                  "type": "string"
-                }
-              }
-            }
-          }
         }
-      },
-      "methods": {
-        "get": {
-          "parameters": {
-            "name": {
-              "type": "string",
-              "pattern": "^accounts/[^/]+$",
-              "required": true,
-              "description": "Resource name of the publisher account to retrieve. Example: accounts/pub-9876543210987654",
-              "location": "path"
-            }
-          },
-          "streamingType": "NONE",
-          "id": "admob.accounts.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/admob.readonly",
-            "https://www.googleapis.com/auth/admob.report"
-          ],
-          "path": "v1/{+name}",
-          "response": {
-            "$ref": "PublisherAccount"
-          },
-          "description": "Gets information about the specified AdMob publisher account.",
-          "flatPath": "v1/accounts/{accountsId}",
-          "parameterOrder": [
-            "name"
-          ],
-          "httpMethod": "GET"
+    },
+    "basePath": "",
+    "baseUrl": "https://admob.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "AdMob",
+    "description": "The AdMob API allows publishers to programmatically get information about their AdMob account. ",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://developers.google.com/admob/api/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "admob:v1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://admob.mtls.googleapis.com/",
+    "name": "admob",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "list": {
-          "streamingType": "NONE",
-          "description": "Lists the AdMob publisher account accessible with the client credential. Currently, all credentials have access to at most one AdMob account.",
-          "path": "v1/accounts",
-          "response": {
-            "$ref": "ListPublisherAccountsResponse"
-          },
-          "httpMethod": "GET",
-          "id": "admob.accounts.list",
-          "scopes": [
-            "https://www.googleapis.com/auth/admob.readonly",
-            "https://www.googleapis.com/auth/admob.report"
-          ],
-          "flatPath": "v1/accounts",
-          "parameters": {
-            "pageToken": {
-              "description": "The value returned by the last `ListPublisherAccountsResponse`; indicates that this is a continuation of a prior `ListPublisherAccounts` call, and that the system should return the next page of data.",
-              "type": "string",
-              "location": "query"
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        }
+    },
+    "protocol": "rest",
+    "resources": {
+        "accounts": {
+            "methods": {
+                "get": {
+                    "description": "Gets information about the specified AdMob publisher account.",
+                    "flatPath": "v1/accounts/{accountsId}",
+                    "httpMethod": "GET",
+                    "id": "admob.accounts.get",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "Resource name of the publisher account to retrieve. Example: accounts/pub-9876543210987654",
+                            "location": "path",
+                            "pattern": "^accounts/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/{+name}",
+                    "response": {
+                        "$ref": "PublisherAccount"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/admob.readonly",
+                        "https://www.googleapis.com/auth/admob.report"
+                    ],
+                    "streamingType": "NONE"
+                },
+                "list": {
+                    "description": "Lists the AdMob publisher account that was most recently signed in to from the AdMob UI. For more information, see https://support.google.com/admob/answer/10243672.",
+                    "flatPath": "v1/accounts",
+                    "httpMethod": "GET",
+                    "id": "admob.accounts.list",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "pageSize": {
+                            "description": "Maximum number of accounts to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The value returned by the last `ListPublisherAccountsResponse`; indicates that this is a continuation of a prior `ListPublisherAccounts` call, and that the system should return the next page of data.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/accounts",
+                    "response": {
+                        "$ref": "ListPublisherAccountsResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/admob.readonly",
+                        "https://www.googleapis.com/auth/admob.report"
+                    ],
+                    "streamingType": "NONE"
+                }
             },
-            "pageSize": {
-              "location": "query",
-              "description": "Maximum number of accounts to return.",
-              "type": "integer",
-              "format": "int32"
+            "resources": {
+                "mediationReport": {
+                    "methods": {
+                        "generate": {
+                            "description": "Generates an AdMob Mediation report based on the provided report specification. Returns result of a server-side streaming RPC. The result is returned in a sequence of responses.",
+                            "flatPath": "v1/accounts/{accountsId}/mediationReport:generate",
+                            "httpMethod": "POST",
+                            "id": "admob.accounts.mediationReport.generate",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Resource name of the account to generate the report for. Example: accounts/pub-9876543210987654",
+                                    "location": "path",
+                                    "pattern": "^accounts/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+parent}/mediationReport:generate",
+                            "request": {
+                                "$ref": "GenerateMediationReportRequest"
+                            },
+                            "response": {
+                                "$ref": "GenerateMediationReportResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/admob.readonly",
+                                "https://www.googleapis.com/auth/admob.report"
+                            ],
+                            "streamingType": "SERVER_SIDE"
+                        }
+                    }
+                },
+                "networkReport": {
+                    "methods": {
+                        "generate": {
+                            "description": "Generates an AdMob Network report based on the provided report specification. Returns result of a server-side streaming RPC. The result is returned in a sequence of responses.",
+                            "flatPath": "v1/accounts/{accountsId}/networkReport:generate",
+                            "httpMethod": "POST",
+                            "id": "admob.accounts.networkReport.generate",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Resource name of the account to generate the report for. Example: accounts/pub-9876543210987654",
+                                    "location": "path",
+                                    "pattern": "^accounts/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+parent}/networkReport:generate",
+                            "request": {
+                                "$ref": "GenerateNetworkReportRequest"
+                            },
+                            "response": {
+                                "$ref": "GenerateNetworkReportResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/admob.readonly",
+                                "https://www.googleapis.com/auth/admob.report"
+                            ],
+                            "streamingType": "SERVER_SIDE"
+                        }
+                    }
+                }
             }
-          },
-          "parameterOrder": []
         }
-      }
-    }
-  },
-  "batchPath": "batch",
-  "ownerDomain": "google.com",
-  "kind": "discovery#restDescription",
-  "ownerName": "Google",
-  "mtlsRootUrl": "https://admob.mtls.googleapis.com/"
-}
+    },
+    "revision": "20210227",
+    "rootUrl": "https://admob.googleapis.com/",
+    "schemas": {
+        "Date": {
+            "description": "Represents a whole or partial calendar date, such as a birthday. The time of day and time zone are either specified elsewhere or are insignificant. The date is relative to the Gregorian Calendar. This can represent one of the following: * A full date, with non-zero year, month, and day values * A month and day value, with a zero year, such as an anniversary * A year on its own, with zero month and day values * A year and month value, with a zero day, such as a credit card expiration date Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.",
+            "id": "Date",
+            "properties": {
+                "day": {
+                    "description": "Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to specify a year by itself or a year and month where the day isn't significant.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "month": {
+                    "description": "Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "year": {
+                    "description": "Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "DateRange": {
+            "description": "Specification of a single date range. Both dates are inclusive.",
+            "id": "DateRange",
+            "properties": {
+                "endDate": {
+                    "$ref": "Date",
+                    "description": "End date of the date range, inclusive. Must be greater than or equal to the start date."
+                },
+                "startDate": {
+                    "$ref": "Date",
+                    "description": "Start date of the date range, inclusive. Must be less than or equal to the end date."
+                }
+            },
+            "type": "object"
+        },
+        "GenerateMediationReportRequest": {
+            "description": "Request to generate an AdMob Mediation report.",
+            "id": "GenerateMediationReportRequest",
+            "properties": {
+                "reportSpec": {
+                    "$ref": "MediationReportSpec",
+                    "description": "Network report specification."
+                }
+            },
+            "type": "object"
+        },
+        "GenerateMediationReportResponse": {
+            "description": "The streaming response for the AdMob Mediation report where the first response contains the report header, then a stream of row responses, and finally a footer as the last response message. For example: [{ \"header\": { \"date_range\": { \"start_date\": {\"year\": 2018, \"month\": 9, \"day\": 1}, \"end_date\": {\"year\": 2018, \"month\": 9, \"day\": 1} }, \"localization_settings\": { \"currency_code\": \"USD\", \"language_code\": \"en-US\" } } }, { \"row\": { \"dimension_values\": { \"DATE\": {\"value\": \"20180918\"}, \"APP\": { \"value\": \"ca-app-pub-8123415297019784~1001342552\", \"display_label\": \"My app name!\" } }, \"metric_values\": { \"ESTIMATED_EARNINGS\": {\"decimal_value\": \"1324746\"} } } }, { \"footer\": {\"matching_row_count\": 1} }]",
+            "id": "GenerateMediationReportResponse",
+            "properties": {
+                "footer": {
+                    "$ref": "ReportFooter",
+                    "description": "Additional information about the generated report, such as warnings about the data."
+                },
+                "header": {
+                    "$ref": "ReportHeader",
+                    "description": "Report generation settings that describes the report contents, such as the report date range and localization settings."
+                },
+                "row": {
+                    "$ref": "ReportRow",
+                    "description": "Actual report data."
+                }
+            },
+            "type": "object"
+        },
+        "GenerateNetworkReportRequest": {
+            "description": "Request to generate an AdMob Network report.",
+            "id": "GenerateNetworkReportRequest",
+            "properties": {
+                "reportSpec": {
+                    "$ref": "NetworkReportSpec",
+                    "description": "Network report specification."
+                }
+            },
+            "type": "object"
+        },
+        "GenerateNetworkReportResponse": {
+            "description": "The streaming response for the AdMob Network report where the first response contains the report header, then a stream of row responses, and finally a footer as the last response message. For example: [{ \"header\": { \"dateRange\": { \"startDate\": {\"year\": 2018, \"month\": 9, \"day\": 1}, \"endDate\": {\"year\": 2018, \"month\": 9, \"day\": 1} }, \"localizationSettings\": { \"currencyCode\": \"USD\", \"languageCode\": \"en-US\" } } }, { \"row\": { \"dimensionValues\": { \"DATE\": {\"value\": \"20180918\"}, \"APP\": { \"value\": \"ca-app-pub-8123415297019784~1001342552\", displayLabel: \"My app name!\" } }, \"metricValues\": { \"ESTIMATED_EARNINGS\": {\"microsValue\": 6500000} } } }, { \"footer\": {\"matchingRowCount\": 1} }]",
+            "id": "GenerateNetworkReportResponse",
+            "properties": {
+                "footer": {
+                    "$ref": "ReportFooter",
+                    "description": "Additional information about the generated report, such as warnings about the data."
+                },
+                "header": {
+                    "$ref": "ReportHeader",
+                    "description": "Report generation settings that describes the report contents, such as the report date range and localization settings."
+                },
+                "row": {
+                    "$ref": "ReportRow",
+                    "description": "Actual report data."
+                }
+            },
+            "type": "object"
+        },
+        "ListPublisherAccountsResponse": {
+            "description": "Response for the publisher account list request.",
+            "id": "ListPublisherAccountsResponse",
+            "properties": {
+                "account": {
+                    "description": "Publisher that the client credentials can access.",
+                    "items": {
+                        "$ref": "PublisherAccount"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "If not empty, indicates that there might be more accounts for the request; you must pass this value in a new `ListPublisherAccountsRequest`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LocalizationSettings": {
+            "description": "Localization settings for reports, such as currency and language. It affects how metrics are calculated.",
+            "id": "LocalizationSettings",
+            "properties": {
+                "currencyCode": {
+                    "description": "Currency code of the earning related metrics, which is the 3-letter code defined in ISO 4217. The daily average rate is used for the currency conversion. Defaults to the account currency code if unspecified.",
+                    "type": "string"
+                },
+                "languageCode": {
+                    "description": "Language used for any localized text, such as some dimension value display labels. The language tag defined in the IETF BCP47. Defaults to 'en-US' if unspecified.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MediationReportSpec": {
+            "description": "The specification for generating an AdMob Mediation report. For example, the specification to get observed ECPM sliced by ad source and app for the 'US' and 'CN' countries can look like the following example: { \"date_range\": { \"start_date\": {\"year\": 2018, \"month\": 9, \"day\": 1}, \"end_date\": {\"year\": 2018, \"month\": 9, \"day\": 30} }, \"dimensions\": [\"AD_SOURCE\", \"APP\", \"COUNTRY\"], \"metrics\": [\"OBSERVED_ECPM\"], \"dimension_filters\": [ { \"dimension\": \"COUNTRY\", \"matches_any\": {\"values\": [{\"value\": \"US\", \"value\": \"CN\"}]} } ], \"sort_conditions\": [ {\"dimension\":\"APP\", order: \"ASCENDING\"} ], \"localization_settings\": { \"currency_code\": \"USD\", \"language_code\": \"en-US\" } } For a better understanding, you can treat the preceding specification like the following pseudo SQL: SELECT AD_SOURCE, APP, COUNTRY, OBSERVED_ECPM FROM MEDIATION_REPORT WHERE DATE >= '2018-09-01' AND DATE <= '2018-09-30' AND COUNTRY IN ('US', 'CN') GROUP BY AD_SOURCE, APP, COUNTRY ORDER BY APP ASC;",
+            "id": "MediationReportSpec",
+            "properties": {
+                "dateRange": {
+                    "$ref": "DateRange",
+                    "description": "The date range for which the report is generated."
+                },
+                "dimensionFilters": {
+                    "description": "Describes which report rows to match based on their dimension values.",
+                    "items": {
+                        "$ref": "MediationReportSpecDimensionFilter"
+                    },
+                    "type": "array"
+                },
+                "dimensions": {
+                    "description": "List of dimensions of the report. The value combination of these dimensions determines the row of the report. If no dimensions are specified, the report returns a single row of requested metrics for the entire account.",
+                    "items": {
+                        "enum": [
+                            "DIMENSION_UNSPECIFIED",
+                            "DATE",
+                            "MONTH",
+                            "WEEK",
+                            "AD_SOURCE",
+                            "AD_SOURCE_INSTANCE",
+                            "AD_UNIT",
+                            "APP",
+                            "MEDIATION_GROUP",
+                            "COUNTRY",
+                            "FORMAT",
+                            "PLATFORM"
+                        ],
+                        "enumDescriptions": [
+                            "Default value for an unset field. Do not use.",
+                            "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                            "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
+                            "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                            "The [unique ID of the ad source](/admob/api/v1/ad_sources) (for example, \"5450213213286189855\" and \"AdMob Network\" as label value).",
+                            "The unique ID of the ad source instance (for example, \"ca-app-pub-1234#5678\" and \"AdMob (default)\" as label value).",
+                            "The unique ID of the ad unit (for example, \"ca-app-pub-1234/8790\"). If AD_UNIT dimension is specified, then APP is included automatically.",
+                            "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
+                            "The unique ID of the mediation group (for example, \"ca-app-pub-1234:mg:1234\" and \"AdMob (default)\" as label value).",
+                            "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
+                            "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
+                            "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "localizationSettings": {
+                    "$ref": "LocalizationSettings",
+                    "description": "Localization settings of the report."
+                },
+                "maxReportRows": {
+                    "description": "Maximum number of report data rows to return. If the value is not set, the API returns as many rows as possible, up to 100000. Acceptable values are 1-100000, inclusive. Values larger than 100000 return an error.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "metrics": {
+                    "description": "List of metrics of the report. A report must specify at least one metric.",
+                    "items": {
+                        "enum": [
+                            "METRIC_UNSPECIFIED",
+                            "AD_REQUESTS",
+                            "CLICKS",
+                            "ESTIMATED_EARNINGS",
+                            "IMPRESSIONS",
+                            "IMPRESSION_CTR",
+                            "MATCHED_REQUESTS",
+                            "MATCH_RATE",
+                            "OBSERVED_ECPM"
+                        ],
+                        "enumDescriptions": [
+                            "Default value for an unset field. Do not use.",
+                            "The number of requests. The value is an integer.",
+                            "The number of times a user clicks an ad. The value is an integer.",
+                            "The estimated earnings of the AdMob publisher. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $6.50 would be represented as 6500000. Estimated earnings per mediation group and per ad source instance level is supported dating back to October 20, 2019. Third-party estimated earnings will show 0 for dates prior to October 20, 2019.",
+                            "The total number of ads shown to users. The value is an integer.",
+                            "The ratio of clicks over impressions. The value is a double precision (approximate) decimal value.",
+                            "The number of times ads are returned in response to a request. The value is an integer.",
+                            "The ratio of matched ad requests over the total ad requests. The value is a double precision (approximate) decimal value.",
+                            "The third-party ad network's estimated average eCPM. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $2.30 would be represented as 2300000. The estimated average eCPM per mediation group and per ad source instance level is supported dating back to October 20, 2019. Third-party estimated average eCPM will show 0 for dates prior to October 20, 2019."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "sortConditions": {
+                    "description": "Describes the sorting of report rows. The order of the condition in the list defines its precedence; the earlier the condition, the higher its precedence. If no sort conditions are specified, the row ordering is undefined.",
+                    "items": {
+                        "$ref": "MediationReportSpecSortCondition"
+                    },
+                    "type": "array"
+                },
+                "timeZone": {
+                    "description": "A report time zone. Accepts an IANA TZ name values, such as \"America/Los_Angeles.\" If no time zone is defined, the account default takes effect. Check default value by the get account action. **Warning:** The \"America/Los_Angeles\" is the only supported value at the moment.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MediationReportSpecDimensionFilter": {
+            "description": "Describes which report rows to match based on their dimension values.",
+            "id": "MediationReportSpecDimensionFilter",
+            "properties": {
+                "dimension": {
+                    "description": "Applies the filter criterion to the specified dimension.",
+                    "enum": [
+                        "DIMENSION_UNSPECIFIED",
+                        "DATE",
+                        "MONTH",
+                        "WEEK",
+                        "AD_SOURCE",
+                        "AD_SOURCE_INSTANCE",
+                        "AD_UNIT",
+                        "APP",
+                        "MEDIATION_GROUP",
+                        "COUNTRY",
+                        "FORMAT",
+                        "PLATFORM"
+                    ],
+                    "enumDescriptions": [
+                        "Default value for an unset field. Do not use.",
+                        "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                        "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
+                        "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                        "The [unique ID of the ad source](/admob/api/v1/ad_sources) (for example, \"5450213213286189855\" and \"AdMob Network\" as label value).",
+                        "The unique ID of the ad source instance (for example, \"ca-app-pub-1234#5678\" and \"AdMob (default)\" as label value).",
+                        "The unique ID of the ad unit (for example, \"ca-app-pub-1234/8790\"). If AD_UNIT dimension is specified, then APP is included automatically.",
+                        "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
+                        "The unique ID of the mediation group (for example, \"ca-app-pub-1234:mg:1234\" and \"AdMob (default)\" as label value).",
+                        "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
+                        "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
+                        "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
+                    ],
+                    "type": "string"
+                },
+                "matchesAny": {
+                    "$ref": "StringList",
+                    "description": "Matches a row if its value for the specified dimension is in one of the values specified in this condition."
+                }
+            },
+            "type": "object"
+        },
+        "MediationReportSpecSortCondition": {
+            "description": "Sorting direction to be applied on a dimension or a metric.",
+            "id": "MediationReportSpecSortCondition",
+            "properties": {
+                "dimension": {
+                    "description": "Sort by the specified dimension.",
+                    "enum": [
+                        "DIMENSION_UNSPECIFIED",
+                        "DATE",
+                        "MONTH",
+                        "WEEK",
+                        "AD_SOURCE",
+                        "AD_SOURCE_INSTANCE",
+                        "AD_UNIT",
+                        "APP",
+                        "MEDIATION_GROUP",
+                        "COUNTRY",
+                        "FORMAT",
+                        "PLATFORM"
+                    ],
+                    "enumDescriptions": [
+                        "Default value for an unset field. Do not use.",
+                        "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                        "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
+                        "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                        "The [unique ID of the ad source](/admob/api/v1/ad_sources) (for example, \"5450213213286189855\" and \"AdMob Network\" as label value).",
+                        "The unique ID of the ad source instance (for example, \"ca-app-pub-1234#5678\" and \"AdMob (default)\" as label value).",
+                        "The unique ID of the ad unit (for example, \"ca-app-pub-1234/8790\"). If AD_UNIT dimension is specified, then APP is included automatically.",
+                        "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
+                        "The unique ID of the mediation group (for example, \"ca-app-pub-1234:mg:1234\" and \"AdMob (default)\" as label value).",
+                        "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
+                        "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
+                        "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
+                    ],
+                    "type": "string"
+                },
+                "metric": {
+                    "description": "Sort by the specified metric.",
+                    "enum": [
+                        "METRIC_UNSPECIFIED",
+                        "AD_REQUESTS",
+                        "CLICKS",
+                        "ESTIMATED_EARNINGS",
+                        "IMPRESSIONS",
+                        "IMPRESSION_CTR",
+                        "MATCHED_REQUESTS",
+                        "MATCH_RATE",
+                        "OBSERVED_ECPM"
+                    ],
+                    "enumDescriptions": [
+                        "Default value for an unset field. Do not use.",
+                        "The number of requests. The value is an integer.",
+                        "The number of times a user clicks an ad. The value is an integer.",
+                        "The estimated earnings of the AdMob publisher. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $6.50 would be represented as 6500000. Estimated earnings per mediation group and per ad source instance level is supported dating back to October 20, 2019. Third-party estimated earnings will show 0 for dates prior to October 20, 2019.",
+                        "The total number of ads shown to users. The value is an integer.",
+                        "The ratio of clicks over impressions. The value is a double precision (approximate) decimal value.",
+                        "The number of times ads are returned in response to a request. The value is an integer.",
+                        "The ratio of matched ad requests over the total ad requests. The value is a double precision (approximate) decimal value.",
+                        "The third-party ad network's estimated average eCPM. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $2.30 would be represented as 2300000. The estimated average eCPM per mediation group and per ad source instance level is supported dating back to October 20, 2019. Third-party estimated average eCPM will show 0 for dates prior to October 20, 2019."
+                    ],
+                    "type": "string"
+                },
+                "order": {
+                    "description": "Sorting order of the dimension or metric.",
+                    "enum": [
+                        "SORT_ORDER_UNSPECIFIED",
+                        "ASCENDING",
+                        "DESCENDING"
+                    ],
+                    "enumDescriptions": [
+                        "Default value for an unset field. Do not use.",
+                        "Sort dimension value or metric value in ascending order.",
+                        "Sort dimension value or metric value in descending order."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "NetworkReportSpec": {
+            "description": "The specification for generating an AdMob Network report. For example, the specification to get clicks and estimated earnings for only the 'US' and 'CN' countries can look like the following example: { 'date_range': { 'start_date': {'year': 2018, 'month': 9, 'day': 1}, 'end_date': {'year': 2018, 'month': 9, 'day': 30} }, 'dimensions': ['DATE', 'APP', 'COUNTRY'], 'metrics': ['CLICKS', 'ESTIMATED_EARNINGS'], 'dimension_filters': [ { 'dimension': 'COUNTRY', 'matches_any': {'values': [{'value': 'US', 'value': 'CN'}]} } ], 'sort_conditions': [ {'dimension':'APP', order: 'ASCENDING'}, {'metric':'CLICKS', order: 'DESCENDING'} ], 'localization_settings': { 'currency_code': 'USD', 'language_code': 'en-US' } } For a better understanding, you can treat the preceding specification like the following pseudo SQL: SELECT DATE, APP, COUNTRY, CLICKS, ESTIMATED_EARNINGS FROM NETWORK_REPORT WHERE DATE >= '2018-09-01' AND DATE <= '2018-09-30' AND COUNTRY IN ('US', 'CN') GROUP BY DATE, APP, COUNTRY ORDER BY APP ASC, CLICKS DESC;",
+            "id": "NetworkReportSpec",
+            "properties": {
+                "dateRange": {
+                    "$ref": "DateRange",
+                    "description": "The date range for which the report is generated."
+                },
+                "dimensionFilters": {
+                    "description": "Describes which report rows to match based on their dimension values.",
+                    "items": {
+                        "$ref": "NetworkReportSpecDimensionFilter"
+                    },
+                    "type": "array"
+                },
+                "dimensions": {
+                    "description": "List of dimensions of the report. The value combination of these dimensions determines the row of the report. If no dimensions are specified, the report returns a single row of requested metrics for the entire account.",
+                    "items": {
+                        "enum": [
+                            "DIMENSION_UNSPECIFIED",
+                            "DATE",
+                            "MONTH",
+                            "WEEK",
+                            "AD_UNIT",
+                            "APP",
+                            "AD_TYPE",
+                            "COUNTRY",
+                            "FORMAT",
+                            "PLATFORM"
+                        ],
+                        "enumDescriptions": [
+                            "Default value for an unset field. Do not use.",
+                            "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                            "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
+                            "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                            "The unique ID of the ad unit (for example, \"ca-app-pub-1234/1234\"). If AD_UNIT dimension is specified, then APP is included automatically.",
+                            "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
+                            "Type of the ad (for example, \"text\" or \"image\"), an ad delivery dimension. **Warning:** The dimension is incompatible with [AD_REQUESTS](#Metric.ENUM_VALUES.AD_REQUESTS), [MATCH_RATE](#Metric.ENUM_VALUES.MATCH_RATE) and [IMPRESSION_RPM](#Metric.ENUM_VALUES.IMPRESSION_RPM) metrics.",
+                            "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
+                            "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
+                            "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "localizationSettings": {
+                    "$ref": "LocalizationSettings",
+                    "description": "Localization settings of the report."
+                },
+                "maxReportRows": {
+                    "description": "Maximum number of report data rows to return. If the value is not set, the API returns as many rows as possible, up to 100000. Acceptable values are 1-100000, inclusive. Values larger than 100000 return an error.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "metrics": {
+                    "description": "List of metrics of the report. A report must specify at least one metric.",
+                    "items": {
+                        "enum": [
+                            "METRIC_UNSPECIFIED",
+                            "AD_REQUESTS",
+                            "CLICKS",
+                            "ESTIMATED_EARNINGS",
+                            "IMPRESSIONS",
+                            "IMPRESSION_CTR",
+                            "IMPRESSION_RPM",
+                            "MATCHED_REQUESTS",
+                            "MATCH_RATE",
+                            "SHOW_RATE"
+                        ],
+                        "enumDescriptions": [
+                            "Default value for an unset field. Do not use.",
+                            "The number of ad requests. The value is an integer. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
+                            "The number of times a user clicks an ad. The value is an integer.",
+                            "The estimated earnings of the AdMob publisher. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $6.50 would be represented as 6500000.",
+                            "The total number of ads shown to users. The value is an integer.",
+                            "The ratio of clicks over impressions. The value is a double precision (approximate) decimal value.",
+                            "The estimated earnings per thousand ad impressions. The value is in micros. For example, $1.03 would be represented as 1030000. Equivalent to eCPM in the AdMob UI. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
+                            "The number of times ads are returned in response to a request. The value is an integer.",
+                            "The ratio of matched ad requests over the total ad requests. The value is a double precision (approximate) decimal value. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
+                            "The ratio of ads that are displayed over ads that are returned, defined as impressions / matched requests. The value is a double precision (approximate) decimal value."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "sortConditions": {
+                    "description": "Describes the sorting of report rows. The order of the condition in the list defines its precedence; the earlier the condition, the higher its precedence. If no sort conditions are specified, the row ordering is undefined.",
+                    "items": {
+                        "$ref": "NetworkReportSpecSortCondition"
+                    },
+                    "type": "array"
+                },
+                "timeZone": {
+                    "description": "A report time zone. Accepts an IANA TZ name values, such as \"America/Los_Angeles.\" If no time zone is defined, the account default takes effect. Check default value by the get account action. **Warning:** The \"America/Los_Angeles\" is the only supported value at the moment.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "NetworkReportSpecDimensionFilter": {
+            "description": "Describes which report rows to match based on their dimension values.",
+            "id": "NetworkReportSpecDimensionFilter",
+            "properties": {
+                "dimension": {
+                    "description": "Applies the filter criterion to the specified dimension.",
+                    "enum": [
+                        "DIMENSION_UNSPECIFIED",
+                        "DATE",
+                        "MONTH",
+                        "WEEK",
+                        "AD_UNIT",
+                        "APP",
+                        "AD_TYPE",
+                        "COUNTRY",
+                        "FORMAT",
+                        "PLATFORM"
+                    ],
+                    "enumDescriptions": [
+                        "Default value for an unset field. Do not use.",
+                        "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                        "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
+                        "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                        "The unique ID of the ad unit (for example, \"ca-app-pub-1234/1234\"). If AD_UNIT dimension is specified, then APP is included automatically.",
+                        "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
+                        "Type of the ad (for example, \"text\" or \"image\"), an ad delivery dimension. **Warning:** The dimension is incompatible with [AD_REQUESTS](#Metric.ENUM_VALUES.AD_REQUESTS), [MATCH_RATE](#Metric.ENUM_VALUES.MATCH_RATE) and [IMPRESSION_RPM](#Metric.ENUM_VALUES.IMPRESSION_RPM) metrics.",
+                        "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
+                        "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
+                        "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
+                    ],
+                    "type": "string"
+                },
+                "matchesAny": {
+                    "$ref": "StringList",
+                    "description": "Matches a row if its value for the specified dimension is in one of the values specified in this condition."
+                }
+            },
+            "type": "object"
+        },
+        "NetworkReportSpecSortCondition": {
+            "description": "Sorting direction to be applied on a dimension or a metric.",
+            "id": "NetworkReportSpecSortCondition",
+            "properties": {
+                "dimension": {
+                    "description": "Sort by the specified dimension.",
+                    "enum": [
+                        "DIMENSION_UNSPECIFIED",
+                        "DATE",
+                        "MONTH",
+                        "WEEK",
+                        "AD_UNIT",
+                        "APP",
+                        "AD_TYPE",
+                        "COUNTRY",
+                        "FORMAT",
+                        "PLATFORM"
+                    ],
+                    "enumDescriptions": [
+                        "Default value for an unset field. Do not use.",
+                        "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                        "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
+                        "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                        "The unique ID of the ad unit (for example, \"ca-app-pub-1234/1234\"). If AD_UNIT dimension is specified, then APP is included automatically.",
+                        "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
+                        "Type of the ad (for example, \"text\" or \"image\"), an ad delivery dimension. **Warning:** The dimension is incompatible with [AD_REQUESTS](#Metric.ENUM_VALUES.AD_REQUESTS), [MATCH_RATE](#Metric.ENUM_VALUES.MATCH_RATE) and [IMPRESSION_RPM](#Metric.ENUM_VALUES.IMPRESSION_RPM) metrics.",
+                        "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
+                        "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
+                        "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
+                    ],
+                    "type": "string"
+                },
+                "metric": {
+                    "description": "Sort by the specified metric.",
+                    "enum": [
+                        "METRIC_UNSPECIFIED",
+                        "AD_REQUESTS",
+                        "CLICKS",
+                        "ESTIMATED_EARNINGS",
+                        "IMPRESSIONS",
+                        "IMPRESSION_CTR",
+                        "IMPRESSION_RPM",
+                        "MATCHED_REQUESTS",
+                        "MATCH_RATE",
+                        "SHOW_RATE"
+                    ],
+                    "enumDescriptions": [
+                        "Default value for an unset field. Do not use.",
+                        "The number of ad requests. The value is an integer. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
+                        "The number of times a user clicks an ad. The value is an integer.",
+                        "The estimated earnings of the AdMob publisher. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $6.50 would be represented as 6500000.",
+                        "The total number of ads shown to users. The value is an integer.",
+                        "The ratio of clicks over impressions. The value is a double precision (approximate) decimal value.",
+                        "The estimated earnings per thousand ad impressions. The value is in micros. For example, $1.03 would be represented as 1030000. Equivalent to eCPM in the AdMob UI. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
+                        "The number of times ads are returned in response to a request. The value is an integer.",
+                        "The ratio of matched ad requests over the total ad requests. The value is a double precision (approximate) decimal value. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
+                        "The ratio of ads that are displayed over ads that are returned, defined as impressions / matched requests. The value is a double precision (approximate) decimal value."
+                    ],
+                    "type": "string"
+                },
+                "order": {
+                    "description": "Sorting order of the dimension or metric.",
+                    "enum": [
+                        "SORT_ORDER_UNSPECIFIED",
+                        "ASCENDING",
+                        "DESCENDING"
+                    ],
+                    "enumDescriptions": [
+                        "Default value for an unset field. Do not use.",
+                        "Sort dimension value or metric value in ascending order.",
+                        "Sort dimension value or metric value in descending order."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PublisherAccount": {
+            "description": "A publisher account contains information relevant to the use of this API, such as the time zone used for the reports.",
+            "id": "PublisherAccount",
+            "properties": {
+                "currencyCode": {
+                    "description": "Currency code of the earning-related metrics, which is the 3-letter code defined in ISO 4217. The daily average rate is used for the currency conversion.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Resource name of this account. Format is accounts/{publisher_id}.",
+                    "type": "string"
+                },
+                "publisherId": {
+                    "description": "The unique ID by which this publisher account can be identified in the API requests (for example, pub-1234567890).",
+                    "type": "string"
+                },
+                "reportingTimeZone": {
+                    "description": "The time zone that is used in reports that are generated for this account. The value is a time-zone ID as specified by the CLDR project, for example, \"America/Los_Angeles\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReportFooter": {
+            "description": "Groups data available after report generation, for example, warnings and row counts. Always sent as the last message in the stream response.",
+            "id": "ReportFooter",
+            "properties": {
+                "matchingRowCount": {
+                    "description": "Total number of rows that matched the request. Warning: This count does NOT always match the number of rows in the response. Do not make that assumption when processing the response.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "warnings": {
+                    "description": "Warnings associated with generation of the report.",
+                    "items": {
+                        "$ref": "ReportWarning"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ReportHeader": {
+            "description": "Groups data helps to treat the generated report. Always sent as a first message in the stream response.",
+            "id": "ReportHeader",
+            "properties": {
+                "dateRange": {
+                    "$ref": "DateRange",
+                    "description": "The date range for which the report is generated. This is identical to the range specified in the report request."
+                },
+                "localizationSettings": {
+                    "$ref": "LocalizationSettings",
+                    "description": "Localization settings of the report. This is identical to the settings in the report request."
+                },
+                "reportingTimeZone": {
+                    "description": "The report time zone. The value is a time-zone ID as specified by the CLDR project, for example, \"America/Los_Angeles\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReportRow": {
+            "description": "A row of the returning report.",
+            "id": "ReportRow",
+            "properties": {
+                "dimensionValues": {
+                    "additionalProperties": {
+                        "$ref": "ReportRowDimensionValue"
+                    },
+                    "description": "Map of dimension values in a row, with keys as enum name of the dimensions.",
+                    "type": "object"
+                },
+                "metricValues": {
+                    "additionalProperties": {
+                        "$ref": "ReportRowMetricValue"
+                    },
+                    "description": "Map of metric values in a row, with keys as enum name of the metrics. If a metric being requested has no value returned, the map will not include it.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "ReportRowDimensionValue": {
+            "description": "Representation of a dimension value.",
+            "id": "ReportRowDimensionValue",
+            "properties": {
+                "displayLabel": {
+                    "description": "The localized string representation of the value. If unspecified, the display label should be derived from the value.",
+                    "type": "string"
+                },
+                "value": {
+                    "description": "Dimension value in the format specified in the report's spec Dimension enum.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReportRowMetricValue": {
+            "description": "Representation of a metric value.",
+            "id": "ReportRowMetricValue",
+            "properties": {
+                "doubleValue": {
+                    "description": "Double precision (approximate) decimal values. Rates are from 0 to 1.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "integerValue": {
+                    "description": "Metric integer value.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "microsValue": {
+                    "description": "Amount in micros. One million is equivalent to one unit. Currency value is in the unit (USD, EUR or other) specified by the request. For example, $6.50 whould be represented as 6500000 micros.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReportWarning": {
+            "description": "Warnings associated with generation of the report.",
+            "id": "ReportWarning",
+            "properties": {
+                "description": {
+                    "description": "Describes the details of the warning message, in English.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Type of the warning.",
+                    "enum": [
+                        "TYPE_UNSPECIFIED",
+                        "DATA_BEFORE_ACCOUNT_TIMEZONE_CHANGE",
+                        "DATA_DELAYED",
+                        "OTHER",
+                        "REPORT_CURRENCY_NOT_ACCOUNT_CURRENCY"
+                    ],
+                    "enumDescriptions": [
+                        "Default value for an unset field. Do not use.",
+                        "Some data in this report is aggregated based on a time zone different from the requested time zone. This could happen if a local time-zone report has the start time before the last time this time zone changed. The description field will contain the date of the last time zone change.",
+                        "There is an unusual delay in processing the source data for the requested date range. The report results might be less up to date than usual. AdMob is aware of the issue and is actively working to resolve it.",
+                        "Warnings that are exposed without a specific type. Useful when new warning types are added but the API is not changed yet.",
+                        "The currency being requested is not the account currency. The earning metrics will be based on the requested currency, and thus not a good estimation of the final payment anymore, due to the currency rate fluctuation."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "StringList": {
+            "description": "List of string values.",
+            "id": "StringList",
+            "properties": {
+                "values": {
+                    "description": "The string values.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        }
+    },
+    "servicePath": "",
+    "title": "AdMob API",
+    "version": "v1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/admob.v1beta.json b/googleapiclient/discovery_cache/documents/admob.v1beta.json
index ed6f9fc..5c65515 100644
--- a/googleapiclient/discovery_cache/documents/admob.v1beta.json
+++ b/googleapiclient/discovery_cache/documents/admob.v1beta.json
@@ -1,1188 +1,1188 @@
 {
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "name": "admob",
-  "canonicalName": "AdMob",
-  "parameters": {
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
-    "callback": {
-      "type": "string",
-      "description": "JSONP",
-      "location": "query"
-    },
-    "uploadType": {
-      "location": "query",
-      "type": "string",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
-    },
-    "access_token": {
-      "type": "string",
-      "description": "OAuth access token.",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "alt": {
-      "type": "string",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "location": "query",
-      "default": "json",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "description": "Data format for response."
-    },
-    "$.xgafv": {
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "type": "string",
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format."
-    },
-    "oauth_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user."
-    },
-    "upload_protocol": {
-      "type": "string",
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
-    },
-    "quotaUser": {
-      "location": "query",
-      "type": "string",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters."
-    },
-    "key": {
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "location": "query",
-      "type": "string"
-    }
-  },
-  "mtlsRootUrl": "https://admob.mtls.googleapis.com/",
-  "version": "v1beta",
-  "rootUrl": "https://admob.googleapis.com/",
-  "basePath": "",
-  "fullyEncodeReservedExpansion": true,
-  "discoveryVersion": "v1",
-  "servicePath": "",
-  "kind": "discovery#restDescription",
-  "batchPath": "batch",
-  "version_module": true,
-  "documentationLink": "https://developers.google.com/admob/api/",
-  "title": "AdMob API",
-  "id": "admob:v1beta",
-  "description": "The AdMob API allows publishers to programmatically get information about their AdMob account. ",
-  "baseUrl": "https://admob.googleapis.com/",
-  "resources": {
-    "accounts": {
-      "resources": {
-        "mediationReport": {
-          "methods": {
-            "generate": {
-              "parameterOrder": [
-                "parent"
-              ],
-              "description": "Generates an AdMob Mediation report based on the provided report specification. Returns result of a server-side streaming RPC. The result is returned in a sequence of responses.",
-              "request": {
-                "$ref": "GenerateMediationReportRequest"
-              },
-              "flatPath": "v1beta/accounts/{accountsId}/mediationReport:generate",
-              "parameters": {
-                "parent": {
-                  "required": true,
-                  "location": "path",
-                  "pattern": "^accounts/[^/]+$",
-                  "description": "Resource name of the account to generate the report for. Example: accounts/pub-9876543210987654",
-                  "type": "string"
-                }
-              },
-              "response": {
-                "$ref": "GenerateMediationReportResponse"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/admob.readonly",
-                "https://www.googleapis.com/auth/admob.report"
-              ],
-              "httpMethod": "POST",
-              "streamingType": "SERVER_SIDE",
-              "id": "admob.accounts.mediationReport.generate",
-              "path": "v1beta/{+parent}/mediationReport:generate"
-            }
-          }
-        },
-        "apps": {
-          "methods": {
-            "list": {
-              "httpMethod": "GET",
-              "id": "admob.accounts.apps.list",
-              "description": "List the apps under the specified AdMob account.",
-              "flatPath": "v1beta/accounts/{accountsId}/apps",
-              "scopes": [
-                "https://www.googleapis.com/auth/admob.readonly"
-              ],
-              "response": {
-                "$ref": "ListAppsResponse"
-              },
-              "streamingType": "NONE",
-              "path": "v1beta/{+parent}/apps",
-              "parameterOrder": [
-                "parent"
-              ],
-              "parameters": {
-                "pageSize": {
-                  "location": "query",
-                  "description": "The maximum number of apps to return. If unspecified or 0, at most 1000 apps will be returned. The maximum value is 10,000; values above 10,000 will be coerced to 10,000.",
-                  "format": "int32",
-                  "type": "integer"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/admob.readonly": {
+                    "description": "See your AdMob data"
                 },
-                "parent": {
-                  "pattern": "^accounts/[^/]+$",
-                  "location": "path",
-                  "type": "string",
-                  "description": "Required. Resource name of the account to list apps for. Example: accounts/pub-9876543210987654",
-                  "required": true
-                },
-                "pageToken": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "The value returned by the last `ListAppsResponse`; indicates that this is a continuation of a prior `ListApps` call, and that the system should return the next page of data."
+                "https://www.googleapis.com/auth/admob.report": {
+                    "description": "See your AdMob data"
                 }
-              }
             }
-          }
-        },
-        "adUnits": {
-          "methods": {
-            "list": {
-              "parameters": {
-                "pageSize": {
-                  "location": "query",
-                  "format": "int32",
-                  "type": "integer",
-                  "description": "The maximum number of ad units to return."
-                },
-                "parent": {
-                  "description": "Required. Resource name of the account to list ad units for. Example: accounts/pub-9876543210987654",
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "pattern": "^accounts/[^/]+$"
-                },
-                "pageToken": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "The value returned by the last `ListAdUnitsResponse`; indicates that this is a continuation of a prior `ListAdUnits` call, and that the system should return the next page of data."
-                }
-              },
-              "streamingType": "NONE",
-              "parameterOrder": [
-                "parent"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/admob.readonly"
-              ],
-              "response": {
-                "$ref": "ListAdUnitsResponse"
-              },
-              "description": "List the ad units under the specified AdMob account.",
-              "flatPath": "v1beta/accounts/{accountsId}/adUnits",
-              "id": "admob.accounts.adUnits.list",
-              "httpMethod": "GET",
-              "path": "v1beta/{+parent}/adUnits"
-            }
-          }
-        },
-        "networkReport": {
-          "methods": {
-            "generate": {
-              "parameterOrder": [
-                "parent"
-              ],
-              "streamingType": "SERVER_SIDE",
-              "request": {
-                "$ref": "GenerateNetworkReportRequest"
-              },
-              "response": {
-                "$ref": "GenerateNetworkReportResponse"
-              },
-              "description": "Generates an AdMob Network report based on the provided report specification. Returns result of a server-side streaming RPC. The result is returned in a sequence of responses.",
-              "id": "admob.accounts.networkReport.generate",
-              "path": "v1beta/{+parent}/networkReport:generate",
-              "scopes": [
-                "https://www.googleapis.com/auth/admob.readonly",
-                "https://www.googleapis.com/auth/admob.report"
-              ],
-              "httpMethod": "POST",
-              "parameters": {
-                "parent": {
-                  "pattern": "^accounts/[^/]+$",
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "Resource name of the account to generate the report for. Example: accounts/pub-9876543210987654"
-                }
-              },
-              "flatPath": "v1beta/accounts/{accountsId}/networkReport:generate"
-            }
-          }
         }
-      },
-      "methods": {
-        "get": {
-          "parameterOrder": [
-            "name"
-          ],
-          "httpMethod": "GET",
-          "flatPath": "v1beta/accounts/{accountsId}",
-          "streamingType": "NONE",
-          "path": "v1beta/{+name}",
-          "response": {
-            "$ref": "PublisherAccount"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/admob.readonly",
-            "https://www.googleapis.com/auth/admob.report"
-          ],
-          "parameters": {
-            "name": {
-              "description": "Resource name of the publisher account to retrieve. Example: accounts/pub-9876543210987654",
-              "required": true,
-              "pattern": "^accounts/[^/]+$",
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "description": "Gets information about the specified AdMob publisher account.",
-          "id": "admob.accounts.get"
+    },
+    "basePath": "",
+    "baseUrl": "https://admob.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "AdMob",
+    "description": "The AdMob API allows publishers to programmatically get information about their AdMob account. ",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://developers.google.com/admob/api/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "admob:v1beta",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://admob.mtls.googleapis.com/",
+    "name": "admob",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/admob.readonly",
-            "https://www.googleapis.com/auth/admob.report"
-          ],
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "ListPublisherAccountsResponse"
-          },
-          "description": "Lists the AdMob publisher account accessible with the client credential. Currently, all credentials have access to at most one AdMob account.",
-          "parameterOrder": [],
-          "flatPath": "v1beta/accounts",
-          "streamingType": "NONE",
-          "parameters": {
-            "pageToken": {
-              "description": "The value returned by the last `ListPublisherAccountsResponse`; indicates that this is a continuation of a prior `ListPublisherAccounts` call, and that the system should return the next page of data.",
-              "type": "string",
-              "location": "query"
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        }
+    },
+    "protocol": "rest",
+    "resources": {
+        "accounts": {
+            "methods": {
+                "get": {
+                    "description": "Gets information about the specified AdMob publisher account.",
+                    "flatPath": "v1beta/accounts/{accountsId}",
+                    "httpMethod": "GET",
+                    "id": "admob.accounts.get",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "Resource name of the publisher account to retrieve. Example: accounts/pub-9876543210987654",
+                            "location": "path",
+                            "pattern": "^accounts/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1beta/{+name}",
+                    "response": {
+                        "$ref": "PublisherAccount"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/admob.readonly",
+                        "https://www.googleapis.com/auth/admob.report"
+                    ],
+                    "streamingType": "NONE"
+                },
+                "list": {
+                    "description": "Lists the AdMob publisher account that was most recently signed in to from the AdMob UI. For more information, see https://support.google.com/admob/answer/10243672.",
+                    "flatPath": "v1beta/accounts",
+                    "httpMethod": "GET",
+                    "id": "admob.accounts.list",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "pageSize": {
+                            "description": "Maximum number of accounts to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The value returned by the last `ListPublisherAccountsResponse`; indicates that this is a continuation of a prior `ListPublisherAccounts` call, and that the system should return the next page of data.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1beta/accounts",
+                    "response": {
+                        "$ref": "ListPublisherAccountsResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/admob.readonly",
+                        "https://www.googleapis.com/auth/admob.report"
+                    ],
+                    "streamingType": "NONE"
+                }
             },
-            "pageSize": {
-              "format": "int32",
-              "description": "Maximum number of accounts to return.",
-              "location": "query",
-              "type": "integer"
+            "resources": {
+                "adUnits": {
+                    "methods": {
+                        "list": {
+                            "description": "List the ad units under the specified AdMob account.",
+                            "flatPath": "v1beta/accounts/{accountsId}/adUnits",
+                            "httpMethod": "GET",
+                            "id": "admob.accounts.adUnits.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "The maximum number of ad units to return. If unspecified or 0, at most 1000 ad units will be returned. The maximum value is 10,000; values above 10,000 will be coerced to 10,000.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The value returned by the last `ListAdUnitsResponse`; indicates that this is a continuation of a prior `ListAdUnits` call, and that the system should return the next page of data.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. Resource name of the account to list ad units for. Example: accounts/pub-9876543210987654",
+                                    "location": "path",
+                                    "pattern": "^accounts/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta/{+parent}/adUnits",
+                            "response": {
+                                "$ref": "ListAdUnitsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/admob.readonly"
+                            ],
+                            "streamingType": "NONE"
+                        }
+                    }
+                },
+                "apps": {
+                    "methods": {
+                        "list": {
+                            "description": "List the apps under the specified AdMob account.",
+                            "flatPath": "v1beta/accounts/{accountsId}/apps",
+                            "httpMethod": "GET",
+                            "id": "admob.accounts.apps.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "The maximum number of apps to return. If unspecified or 0, at most 1000 apps will be returned. The maximum value is 10,000; values above 10,000 will be coerced to 10,000.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The value returned by the last `ListAppsResponse`; indicates that this is a continuation of a prior `ListApps` call, and that the system should return the next page of data.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. Resource name of the account to list apps for. Example: accounts/pub-9876543210987654",
+                                    "location": "path",
+                                    "pattern": "^accounts/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta/{+parent}/apps",
+                            "response": {
+                                "$ref": "ListAppsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/admob.readonly"
+                            ],
+                            "streamingType": "NONE"
+                        }
+                    }
+                },
+                "mediationReport": {
+                    "methods": {
+                        "generate": {
+                            "description": "Generates an AdMob Mediation report based on the provided report specification. Returns result of a server-side streaming RPC. The result is returned in a sequence of responses.",
+                            "flatPath": "v1beta/accounts/{accountsId}/mediationReport:generate",
+                            "httpMethod": "POST",
+                            "id": "admob.accounts.mediationReport.generate",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Resource name of the account to generate the report for. Example: accounts/pub-9876543210987654",
+                                    "location": "path",
+                                    "pattern": "^accounts/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta/{+parent}/mediationReport:generate",
+                            "request": {
+                                "$ref": "GenerateMediationReportRequest"
+                            },
+                            "response": {
+                                "$ref": "GenerateMediationReportResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/admob.readonly",
+                                "https://www.googleapis.com/auth/admob.report"
+                            ],
+                            "streamingType": "SERVER_SIDE"
+                        }
+                    }
+                },
+                "networkReport": {
+                    "methods": {
+                        "generate": {
+                            "description": "Generates an AdMob Network report based on the provided report specification. Returns result of a server-side streaming RPC. The result is returned in a sequence of responses.",
+                            "flatPath": "v1beta/accounts/{accountsId}/networkReport:generate",
+                            "httpMethod": "POST",
+                            "id": "admob.accounts.networkReport.generate",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Resource name of the account to generate the report for. Example: accounts/pub-9876543210987654",
+                                    "location": "path",
+                                    "pattern": "^accounts/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta/{+parent}/networkReport:generate",
+                            "request": {
+                                "$ref": "GenerateNetworkReportRequest"
+                            },
+                            "response": {
+                                "$ref": "GenerateNetworkReportResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/admob.readonly",
+                                "https://www.googleapis.com/auth/admob.report"
+                            ],
+                            "streamingType": "SERVER_SIDE"
+                        }
+                    }
+                }
             }
-          },
-          "path": "v1beta/accounts",
-          "id": "admob.accounts.list"
         }
-      }
-    }
-  },
-  "ownerName": "Google",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/admob.readonly": {
-          "description": "See your AdMob data"
-        },
-        "https://www.googleapis.com/auth/admob.report": {
-          "description": "See your AdMob data"
-        }
-      }
-    }
-  },
-  "schemas": {
-    "MediationReportSpecSortCondition": {
-      "type": "object",
-      "properties": {
-        "metric": {
-          "enumDescriptions": [
-            "Default value for an unset field. Do not use.",
-            "The number of requests. The value is an integer.",
-            "The number of times a user clicks an ad. The value is an integer.",
-            "The estimated earnings of the AdMob publisher. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $6.50 would be represented as 6500000. Estimated earnings per mediation group and per ad source instance level is supported dating back to October 20, 2019. Third-party estimated earnings will show 0 for dates prior to October 20, 2019.",
-            "The total number of ads shown to users. The value is an integer.",
-            "The ratio of clicks over impressions. The value is a double precision (approximate) decimal value.",
-            "The number of times ads are returned in response to a request. The value is an integer.",
-            "The ratio of matched ad requests over the total ad requests. The value is a double precision (approximate) decimal value.",
-            "The third-party ad network's estimated average eCPM. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $2.30 would be represented as 2300000. The estimated average eCPM per mediation group and per ad source instance level is supported dating back to October 20, 2019. Third-party estimated average eCPM will show 0 for dates prior to October 20, 2019."
-          ],
-          "type": "string",
-          "enum": [
-            "METRIC_UNSPECIFIED",
-            "AD_REQUESTS",
-            "CLICKS",
-            "ESTIMATED_EARNINGS",
-            "IMPRESSIONS",
-            "IMPRESSION_CTR",
-            "MATCHED_REQUESTS",
-            "MATCH_RATE",
-            "OBSERVED_ECPM"
-          ],
-          "description": "Sort by the specified metric."
-        },
-        "dimension": {
-          "enumDescriptions": [
-            "Default value for an unset field. Do not use.",
-            "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-            "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
-            "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-            "The [unique ID of the ad source](/admob/api/v1/ad_sources) (for example, \"5450213213286189855\" and \"AdMob Network\" as label value).",
-            "The unique ID of the ad source instance (for example, \"ca-app-pub-1234#5678\" and \"AdMob (default)\" as label value).",
-            "The unique ID of the ad unit (for example, \"ca-app-pub-1234/8790\"). If AD_UNIT dimension is specified, then APP is included automatically.",
-            "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
-            "The unique ID of the mediation group (for example, \"ca-app-pub-1234:mg:1234\" and \"AdMob (default)\" as label value).",
-            "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
-            "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
-            "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
-          ],
-          "type": "string",
-          "description": "Sort by the specified dimension.",
-          "enum": [
-            "DIMENSION_UNSPECIFIED",
-            "DATE",
-            "MONTH",
-            "WEEK",
-            "AD_SOURCE",
-            "AD_SOURCE_INSTANCE",
-            "AD_UNIT",
-            "APP",
-            "MEDIATION_GROUP",
-            "COUNTRY",
-            "FORMAT",
-            "PLATFORM"
-          ]
-        },
-        "order": {
-          "enum": [
-            "SORT_ORDER_UNSPECIFIED",
-            "ASCENDING",
-            "DESCENDING"
-          ],
-          "enumDescriptions": [
-            "Default value for an unset field. Do not use.",
-            "Sort dimension value or metric value in ascending order.",
-            "Sort dimension value or metric value in descending order."
-          ],
-          "description": "Sorting order of the dimension or metric.",
-          "type": "string"
-        }
-      },
-      "id": "MediationReportSpecSortCondition",
-      "description": "Sorting direction to be applied on a dimension or a metric."
     },
-    "ReportRowDimensionValue": {
-      "type": "object",
-      "properties": {
-        "value": {
-          "description": "Dimension value in the format specified in the report's spec Dimension enum.",
-          "type": "string"
+    "revision": "20210227",
+    "rootUrl": "https://admob.googleapis.com/",
+    "schemas": {
+        "AdUnit": {
+            "description": "Describes an AdMob ad unit.",
+            "id": "AdUnit",
+            "properties": {
+                "adFormat": {
+                    "description": "AdFormat of the ad unit. Possible values are as follows: \"BANNER\" - Banner ad format. \"BANNER_INTERSTITIAL\" - Legacy format that can be used as either banner or interstitial. This format can no longer be created but can be targeted by mediation groups. \"INTERSTITIAL\" - A full screen ad. Supported ad types are \"RICH_MEDIA\" and \"VIDEO\". \"NATIVE\" - Native ad format. \"REWARDED\" - An ad that, once viewed, gets a callback verifying the view so that a reward can be given to the user. Supported ad types are \"RICH_MEDIA\" (interactive) and video where video can not be excluded.",
+                    "type": "string"
+                },
+                "adTypes": {
+                    "description": "Ad media type supported by this ad unit. Possible values as follows: \"RICH_MEDIA\" - Text, image, and other non-video media. \"VIDEO\" - Video media.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "adUnitId": {
+                    "description": "The externally visible ID of the ad unit which can be used to integrate with the AdMob SDK. This is a read only property. Example: ca-app-pub-9876543210987654/0123456789",
+                    "type": "string"
+                },
+                "appId": {
+                    "description": "The externally visible ID of the app this ad unit is associated with. Example: ca-app-pub-9876543210987654~0123456789",
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "The display name of the ad unit as shown in the AdMob UI, which is provided by the user. The maximum length allowed is 80 characters.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Resource name for this ad unit. Format is accounts/{publisher_id}/adUnits/{ad_unit_id_fragment} Example: accounts/pub-9876543210987654/adUnits/0123456789",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "displayLabel": {
-          "type": "string",
-          "description": "The localized string representation of the value. If unspecified, the display label should be derived from the value."
+        "App": {
+            "description": "Describes an AdMob app for a specific platform (For example: Android or iOS).",
+            "id": "App",
+            "properties": {
+                "appId": {
+                    "description": "The externally visible ID of the app which can be used to integrate with the AdMob SDK. This is a read only property. Example: ca-app-pub-9876543210987654~0123456789",
+                    "type": "string"
+                },
+                "linkedAppInfo": {
+                    "$ref": "AppLinkedAppInfo",
+                    "description": "Immutable. The information for an app that is linked to an app store. This field is present if and only if the app is linked to an app store."
+                },
+                "manualAppInfo": {
+                    "$ref": "AppManualAppInfo",
+                    "description": "The information for an app that is not linked to any app store. After an app is linked, this information is still retrivable. If no name is provided for the app upon creation, a placeholder name will be used."
+                },
+                "name": {
+                    "description": "Resource name for this app. Format is accounts/{publisher_id}/apps/{app_id_fragment} Example: accounts/pub-9876543210987654/apps/0123456789",
+                    "type": "string"
+                },
+                "platform": {
+                    "description": "Describes the platform of the app. Limited to \"IOS\" and \"ANDROID\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AppLinkedAppInfo": {
+            "description": "Information from the app store if the app is linked to an app store.",
+            "id": "AppLinkedAppInfo",
+            "properties": {
+                "appStoreId": {
+                    "description": "The app store ID of the app; present if and only if the app is linked to an app store. If the app is added to the Google Play store, it will be the application ID of the app. For example: \"com.example.myapp\". See https://developer.android.com/studio/build/application-id. If the app is added to the Apple App Store, it will be app store ID. For example \"105169111\". Note that setting the app store id is considered an irreversible action. Once an app is linked, it cannot be unlinked.",
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "Output only. Display name of the app as it appears in the app store. This is an output-only field, and may be empty if the app cannot be found in the store.",
+                    "readOnly": true,
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AppManualAppInfo": {
+            "description": "Information provided for manual apps which are not linked to an application store (Example: Google Play, App Store).",
+            "id": "AppManualAppInfo",
+            "properties": {
+                "displayName": {
+                    "description": "The display name of the app as shown in the AdMob UI, which is provided by the user. The maximum length allowed is 80 characters.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Date": {
+            "description": "Represents a whole or partial calendar date, such as a birthday. The time of day and time zone are either specified elsewhere or are insignificant. The date is relative to the Gregorian Calendar. This can represent one of the following: * A full date, with non-zero year, month, and day values * A month and day value, with a zero year, such as an anniversary * A year on its own, with zero month and day values * A year and month value, with a zero day, such as a credit card expiration date Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.",
+            "id": "Date",
+            "properties": {
+                "day": {
+                    "description": "Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to specify a year by itself or a year and month where the day isn't significant.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "month": {
+                    "description": "Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "year": {
+                    "description": "Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "DateRange": {
+            "description": "Specification of a single date range. Both dates are inclusive.",
+            "id": "DateRange",
+            "properties": {
+                "endDate": {
+                    "$ref": "Date",
+                    "description": "End date of the date range, inclusive. Must be greater than or equal to the start date."
+                },
+                "startDate": {
+                    "$ref": "Date",
+                    "description": "Start date of the date range, inclusive. Must be less than or equal to the end date."
+                }
+            },
+            "type": "object"
+        },
+        "GenerateMediationReportRequest": {
+            "description": "Request to generate an AdMob Mediation report.",
+            "id": "GenerateMediationReportRequest",
+            "properties": {
+                "reportSpec": {
+                    "$ref": "MediationReportSpec",
+                    "description": "Network report specification."
+                }
+            },
+            "type": "object"
+        },
+        "GenerateMediationReportResponse": {
+            "description": "The streaming response for the AdMob Mediation report where the first response contains the report header, then a stream of row responses, and finally a footer as the last response message. For example: [{ \"header\": { \"date_range\": { \"start_date\": {\"year\": 2018, \"month\": 9, \"day\": 1}, \"end_date\": {\"year\": 2018, \"month\": 9, \"day\": 1} }, \"localization_settings\": { \"currency_code\": \"USD\", \"language_code\": \"en-US\" } } }, { \"row\": { \"dimension_values\": { \"DATE\": {\"value\": \"20180918\"}, \"APP\": { \"value\": \"ca-app-pub-8123415297019784~1001342552\", \"display_label\": \"My app name!\" } }, \"metric_values\": { \"ESTIMATED_EARNINGS\": {\"decimal_value\": \"1324746\"} } } }, { \"footer\": {\"matching_row_count\": 1} }]",
+            "id": "GenerateMediationReportResponse",
+            "properties": {
+                "footer": {
+                    "$ref": "ReportFooter",
+                    "description": "Additional information about the generated report, such as warnings about the data."
+                },
+                "header": {
+                    "$ref": "ReportHeader",
+                    "description": "Report generation settings that describes the report contents, such as the report date range and localization settings."
+                },
+                "row": {
+                    "$ref": "ReportRow",
+                    "description": "Actual report data."
+                }
+            },
+            "type": "object"
+        },
+        "GenerateNetworkReportRequest": {
+            "description": "Request to generate an AdMob Network report.",
+            "id": "GenerateNetworkReportRequest",
+            "properties": {
+                "reportSpec": {
+                    "$ref": "NetworkReportSpec",
+                    "description": "Network report specification."
+                }
+            },
+            "type": "object"
+        },
+        "GenerateNetworkReportResponse": {
+            "description": "The streaming response for the AdMob Network report where the first response contains the report header, then a stream of row responses, and finally a footer as the last response message. For example: [{ \"header\": { \"dateRange\": { \"startDate\": {\"year\": 2018, \"month\": 9, \"day\": 1}, \"endDate\": {\"year\": 2018, \"month\": 9, \"day\": 1} }, \"localizationSettings\": { \"currencyCode\": \"USD\", \"languageCode\": \"en-US\" } } }, { \"row\": { \"dimensionValues\": { \"DATE\": {\"value\": \"20180918\"}, \"APP\": { \"value\": \"ca-app-pub-8123415297019784~1001342552\", displayLabel: \"My app name!\" } }, \"metricValues\": { \"ESTIMATED_EARNINGS\": {\"microsValue\": 6500000} } } }, { \"footer\": {\"matchingRowCount\": 1} }]",
+            "id": "GenerateNetworkReportResponse",
+            "properties": {
+                "footer": {
+                    "$ref": "ReportFooter",
+                    "description": "Additional information about the generated report, such as warnings about the data."
+                },
+                "header": {
+                    "$ref": "ReportHeader",
+                    "description": "Report generation settings that describes the report contents, such as the report date range and localization settings."
+                },
+                "row": {
+                    "$ref": "ReportRow",
+                    "description": "Actual report data."
+                }
+            },
+            "type": "object"
+        },
+        "ListAdUnitsResponse": {
+            "description": "Response for the ad units list request.",
+            "id": "ListAdUnitsResponse",
+            "properties": {
+                "adUnits": {
+                    "description": "The resulting ad units for the requested account.",
+                    "items": {
+                        "$ref": "AdUnit"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "If not empty, indicates that there may be more ad units for the request; this value should be passed in a new `ListAdUnitsRequest`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListAppsResponse": {
+            "description": "Response for the apps list request.",
+            "id": "ListAppsResponse",
+            "properties": {
+                "apps": {
+                    "description": "The resulting apps for the requested account.",
+                    "items": {
+                        "$ref": "App"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "If not empty, indicates that there may be more apps for the request; this value should be passed in a new `ListAppsRequest`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListPublisherAccountsResponse": {
+            "description": "Response for the publisher account list request.",
+            "id": "ListPublisherAccountsResponse",
+            "properties": {
+                "account": {
+                    "description": "Publisher that the client credentials can access.",
+                    "items": {
+                        "$ref": "PublisherAccount"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "If not empty, indicates that there might be more accounts for the request; you must pass this value in a new `ListPublisherAccountsRequest`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LocalizationSettings": {
+            "description": "Localization settings for reports, such as currency and language. It affects how metrics are calculated.",
+            "id": "LocalizationSettings",
+            "properties": {
+                "currencyCode": {
+                    "description": "Currency code of the earning related metrics, which is the 3-letter code defined in ISO 4217. The daily average rate is used for the currency conversion. Defaults to the account currency code if unspecified.",
+                    "type": "string"
+                },
+                "languageCode": {
+                    "description": "Language used for any localized text, such as some dimension value display labels. The language tag defined in the IETF BCP47. Defaults to 'en-US' if unspecified.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MediationReportSpec": {
+            "description": "The specification for generating an AdMob Mediation report. For example, the specification to get observed ECPM sliced by ad source and app for the 'US' and 'CN' countries can look like the following example: { \"date_range\": { \"start_date\": {\"year\": 2018, \"month\": 9, \"day\": 1}, \"end_date\": {\"year\": 2018, \"month\": 9, \"day\": 30} }, \"dimensions\": [\"AD_SOURCE\", \"APP\", \"COUNTRY\"], \"metrics\": [\"OBSERVED_ECPM\"], \"dimension_filters\": [ { \"dimension\": \"COUNTRY\", \"matches_any\": {\"values\": [{\"value\": \"US\", \"value\": \"CN\"}]} } ], \"sort_conditions\": [ {\"dimension\":\"APP\", order: \"ASCENDING\"} ], \"localization_settings\": { \"currency_code\": \"USD\", \"language_code\": \"en-US\" } } For a better understanding, you can treat the preceding specification like the following pseudo SQL: SELECT AD_SOURCE, APP, COUNTRY, OBSERVED_ECPM FROM MEDIATION_REPORT WHERE DATE >= '2018-09-01' AND DATE <= '2018-09-30' AND COUNTRY IN ('US', 'CN') GROUP BY AD_SOURCE, APP, COUNTRY ORDER BY APP ASC;",
+            "id": "MediationReportSpec",
+            "properties": {
+                "dateRange": {
+                    "$ref": "DateRange",
+                    "description": "The date range for which the report is generated."
+                },
+                "dimensionFilters": {
+                    "description": "Describes which report rows to match based on their dimension values.",
+                    "items": {
+                        "$ref": "MediationReportSpecDimensionFilter"
+                    },
+                    "type": "array"
+                },
+                "dimensions": {
+                    "description": "List of dimensions of the report. The value combination of these dimensions determines the row of the report. If no dimensions are specified, the report returns a single row of requested metrics for the entire account.",
+                    "items": {
+                        "enum": [
+                            "DIMENSION_UNSPECIFIED",
+                            "DATE",
+                            "MONTH",
+                            "WEEK",
+                            "AD_SOURCE",
+                            "AD_SOURCE_INSTANCE",
+                            "AD_UNIT",
+                            "APP",
+                            "MEDIATION_GROUP",
+                            "COUNTRY",
+                            "FORMAT",
+                            "PLATFORM"
+                        ],
+                        "enumDescriptions": [
+                            "Default value for an unset field. Do not use.",
+                            "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                            "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
+                            "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                            "The [unique ID of the ad source](/admob/api/v1/ad_sources) (for example, \"5450213213286189855\" and \"AdMob Network\" as label value).",
+                            "The unique ID of the ad source instance (for example, \"ca-app-pub-1234#5678\" and \"AdMob (default)\" as label value).",
+                            "The unique ID of the ad unit (for example, \"ca-app-pub-1234/8790\"). If AD_UNIT dimension is specified, then APP is included automatically.",
+                            "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
+                            "The unique ID of the mediation group (for example, \"ca-app-pub-1234:mg:1234\" and \"AdMob (default)\" as label value).",
+                            "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
+                            "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
+                            "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "localizationSettings": {
+                    "$ref": "LocalizationSettings",
+                    "description": "Localization settings of the report."
+                },
+                "maxReportRows": {
+                    "description": "Maximum number of report data rows to return. If the value is not set, the API returns as many rows as possible, up to 100000. Acceptable values are 1-100000, inclusive. Values larger than 100000 return an error.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "metrics": {
+                    "description": "List of metrics of the report. A report must specify at least one metric.",
+                    "items": {
+                        "enum": [
+                            "METRIC_UNSPECIFIED",
+                            "AD_REQUESTS",
+                            "CLICKS",
+                            "ESTIMATED_EARNINGS",
+                            "IMPRESSIONS",
+                            "IMPRESSION_CTR",
+                            "MATCHED_REQUESTS",
+                            "MATCH_RATE",
+                            "OBSERVED_ECPM"
+                        ],
+                        "enumDescriptions": [
+                            "Default value for an unset field. Do not use.",
+                            "The number of requests. The value is an integer.",
+                            "The number of times a user clicks an ad. The value is an integer.",
+                            "The estimated earnings of the AdMob publisher. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $6.50 would be represented as 6500000. Estimated earnings per mediation group and per ad source instance level is supported dating back to October 20, 2019. Third-party estimated earnings will show 0 for dates prior to October 20, 2019.",
+                            "The total number of ads shown to users. The value is an integer.",
+                            "The ratio of clicks over impressions. The value is a double precision (approximate) decimal value.",
+                            "The number of times ads are returned in response to a request. The value is an integer.",
+                            "The ratio of matched ad requests over the total ad requests. The value is a double precision (approximate) decimal value.",
+                            "The third-party ad network's estimated average eCPM. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $2.30 would be represented as 2300000. The estimated average eCPM per mediation group and per ad source instance level is supported dating back to October 20, 2019. Third-party estimated average eCPM will show 0 for dates prior to October 20, 2019."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "sortConditions": {
+                    "description": "Describes the sorting of report rows. The order of the condition in the list defines its precedence; the earlier the condition, the higher its precedence. If no sort conditions are specified, the row ordering is undefined.",
+                    "items": {
+                        "$ref": "MediationReportSpecSortCondition"
+                    },
+                    "type": "array"
+                },
+                "timeZone": {
+                    "description": "A report time zone. Accepts an IANA TZ name values, such as \"America/Los_Angeles.\" If no time zone is defined, the account default takes effect. Check default value by the get account action. **Warning:** The \"America/Los_Angeles\" is the only supported value at the moment.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MediationReportSpecDimensionFilter": {
+            "description": "Describes which report rows to match based on their dimension values.",
+            "id": "MediationReportSpecDimensionFilter",
+            "properties": {
+                "dimension": {
+                    "description": "Applies the filter criterion to the specified dimension.",
+                    "enum": [
+                        "DIMENSION_UNSPECIFIED",
+                        "DATE",
+                        "MONTH",
+                        "WEEK",
+                        "AD_SOURCE",
+                        "AD_SOURCE_INSTANCE",
+                        "AD_UNIT",
+                        "APP",
+                        "MEDIATION_GROUP",
+                        "COUNTRY",
+                        "FORMAT",
+                        "PLATFORM"
+                    ],
+                    "enumDescriptions": [
+                        "Default value for an unset field. Do not use.",
+                        "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                        "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
+                        "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                        "The [unique ID of the ad source](/admob/api/v1/ad_sources) (for example, \"5450213213286189855\" and \"AdMob Network\" as label value).",
+                        "The unique ID of the ad source instance (for example, \"ca-app-pub-1234#5678\" and \"AdMob (default)\" as label value).",
+                        "The unique ID of the ad unit (for example, \"ca-app-pub-1234/8790\"). If AD_UNIT dimension is specified, then APP is included automatically.",
+                        "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
+                        "The unique ID of the mediation group (for example, \"ca-app-pub-1234:mg:1234\" and \"AdMob (default)\" as label value).",
+                        "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
+                        "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
+                        "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
+                    ],
+                    "type": "string"
+                },
+                "matchesAny": {
+                    "$ref": "StringList",
+                    "description": "Matches a row if its value for the specified dimension is in one of the values specified in this condition."
+                }
+            },
+            "type": "object"
+        },
+        "MediationReportSpecSortCondition": {
+            "description": "Sorting direction to be applied on a dimension or a metric.",
+            "id": "MediationReportSpecSortCondition",
+            "properties": {
+                "dimension": {
+                    "description": "Sort by the specified dimension.",
+                    "enum": [
+                        "DIMENSION_UNSPECIFIED",
+                        "DATE",
+                        "MONTH",
+                        "WEEK",
+                        "AD_SOURCE",
+                        "AD_SOURCE_INSTANCE",
+                        "AD_UNIT",
+                        "APP",
+                        "MEDIATION_GROUP",
+                        "COUNTRY",
+                        "FORMAT",
+                        "PLATFORM"
+                    ],
+                    "enumDescriptions": [
+                        "Default value for an unset field. Do not use.",
+                        "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                        "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
+                        "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                        "The [unique ID of the ad source](/admob/api/v1/ad_sources) (for example, \"5450213213286189855\" and \"AdMob Network\" as label value).",
+                        "The unique ID of the ad source instance (for example, \"ca-app-pub-1234#5678\" and \"AdMob (default)\" as label value).",
+                        "The unique ID of the ad unit (for example, \"ca-app-pub-1234/8790\"). If AD_UNIT dimension is specified, then APP is included automatically.",
+                        "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
+                        "The unique ID of the mediation group (for example, \"ca-app-pub-1234:mg:1234\" and \"AdMob (default)\" as label value).",
+                        "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
+                        "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
+                        "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
+                    ],
+                    "type": "string"
+                },
+                "metric": {
+                    "description": "Sort by the specified metric.",
+                    "enum": [
+                        "METRIC_UNSPECIFIED",
+                        "AD_REQUESTS",
+                        "CLICKS",
+                        "ESTIMATED_EARNINGS",
+                        "IMPRESSIONS",
+                        "IMPRESSION_CTR",
+                        "MATCHED_REQUESTS",
+                        "MATCH_RATE",
+                        "OBSERVED_ECPM"
+                    ],
+                    "enumDescriptions": [
+                        "Default value for an unset field. Do not use.",
+                        "The number of requests. The value is an integer.",
+                        "The number of times a user clicks an ad. The value is an integer.",
+                        "The estimated earnings of the AdMob publisher. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $6.50 would be represented as 6500000. Estimated earnings per mediation group and per ad source instance level is supported dating back to October 20, 2019. Third-party estimated earnings will show 0 for dates prior to October 20, 2019.",
+                        "The total number of ads shown to users. The value is an integer.",
+                        "The ratio of clicks over impressions. The value is a double precision (approximate) decimal value.",
+                        "The number of times ads are returned in response to a request. The value is an integer.",
+                        "The ratio of matched ad requests over the total ad requests. The value is a double precision (approximate) decimal value.",
+                        "The third-party ad network's estimated average eCPM. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $2.30 would be represented as 2300000. The estimated average eCPM per mediation group and per ad source instance level is supported dating back to October 20, 2019. Third-party estimated average eCPM will show 0 for dates prior to October 20, 2019."
+                    ],
+                    "type": "string"
+                },
+                "order": {
+                    "description": "Sorting order of the dimension or metric.",
+                    "enum": [
+                        "SORT_ORDER_UNSPECIFIED",
+                        "ASCENDING",
+                        "DESCENDING"
+                    ],
+                    "enumDescriptions": [
+                        "Default value for an unset field. Do not use.",
+                        "Sort dimension value or metric value in ascending order.",
+                        "Sort dimension value or metric value in descending order."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "NetworkReportSpec": {
+            "description": "The specification for generating an AdMob Network report. For example, the specification to get clicks and estimated earnings for only the 'US' and 'CN' countries can look like the following example: { 'date_range': { 'start_date': {'year': 2018, 'month': 9, 'day': 1}, 'end_date': {'year': 2018, 'month': 9, 'day': 30} }, 'dimensions': ['DATE', 'APP', 'COUNTRY'], 'metrics': ['CLICKS', 'ESTIMATED_EARNINGS'], 'dimension_filters': [ { 'dimension': 'COUNTRY', 'matches_any': {'values': [{'value': 'US', 'value': 'CN'}]} } ], 'sort_conditions': [ {'dimension':'APP', order: 'ASCENDING'}, {'metric':'CLICKS', order: 'DESCENDING'} ], 'localization_settings': { 'currency_code': 'USD', 'language_code': 'en-US' } } For a better understanding, you can treat the preceding specification like the following pseudo SQL: SELECT DATE, APP, COUNTRY, CLICKS, ESTIMATED_EARNINGS FROM NETWORK_REPORT WHERE DATE >= '2018-09-01' AND DATE <= '2018-09-30' AND COUNTRY IN ('US', 'CN') GROUP BY DATE, APP, COUNTRY ORDER BY APP ASC, CLICKS DESC;",
+            "id": "NetworkReportSpec",
+            "properties": {
+                "dateRange": {
+                    "$ref": "DateRange",
+                    "description": "The date range for which the report is generated."
+                },
+                "dimensionFilters": {
+                    "description": "Describes which report rows to match based on their dimension values.",
+                    "items": {
+                        "$ref": "NetworkReportSpecDimensionFilter"
+                    },
+                    "type": "array"
+                },
+                "dimensions": {
+                    "description": "List of dimensions of the report. The value combination of these dimensions determines the row of the report. If no dimensions are specified, the report returns a single row of requested metrics for the entire account.",
+                    "items": {
+                        "enum": [
+                            "DIMENSION_UNSPECIFIED",
+                            "DATE",
+                            "MONTH",
+                            "WEEK",
+                            "AD_UNIT",
+                            "APP",
+                            "AD_TYPE",
+                            "COUNTRY",
+                            "FORMAT",
+                            "PLATFORM"
+                        ],
+                        "enumDescriptions": [
+                            "Default value for an unset field. Do not use.",
+                            "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                            "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
+                            "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                            "The unique ID of the ad unit (for example, \"ca-app-pub-1234/1234\"). If AD_UNIT dimension is specified, then APP is included automatically.",
+                            "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
+                            "Type of the ad (for example, \"text\" or \"image\"), an ad delivery dimension. **Warning:** The dimension is incompatible with [AD_REQUESTS](#Metric.ENUM_VALUES.AD_REQUESTS), [MATCH_RATE](#Metric.ENUM_VALUES.MATCH_RATE) and [IMPRESSION_RPM](#Metric.ENUM_VALUES.IMPRESSION_RPM) metrics.",
+                            "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
+                            "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
+                            "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "localizationSettings": {
+                    "$ref": "LocalizationSettings",
+                    "description": "Localization settings of the report."
+                },
+                "maxReportRows": {
+                    "description": "Maximum number of report data rows to return. If the value is not set, the API returns as many rows as possible, up to 100000. Acceptable values are 1-100000, inclusive. Values larger than 100000 return an error.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "metrics": {
+                    "description": "List of metrics of the report. A report must specify at least one metric.",
+                    "items": {
+                        "enum": [
+                            "METRIC_UNSPECIFIED",
+                            "AD_REQUESTS",
+                            "CLICKS",
+                            "ESTIMATED_EARNINGS",
+                            "IMPRESSIONS",
+                            "IMPRESSION_CTR",
+                            "IMPRESSION_RPM",
+                            "MATCHED_REQUESTS",
+                            "MATCH_RATE",
+                            "SHOW_RATE"
+                        ],
+                        "enumDescriptions": [
+                            "Default value for an unset field. Do not use.",
+                            "The number of ad requests. The value is an integer. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
+                            "The number of times a user clicks an ad. The value is an integer.",
+                            "The estimated earnings of the AdMob publisher. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $6.50 would be represented as 6500000.",
+                            "The total number of ads shown to users. The value is an integer.",
+                            "The ratio of clicks over impressions. The value is a double precision (approximate) decimal value.",
+                            "The estimated earnings per thousand ad impressions. The value is in micros. For example, $1.03 would be represented as 1030000. Equivalent to eCPM in the AdMob UI. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
+                            "The number of times ads are returned in response to a request. The value is an integer.",
+                            "The ratio of matched ad requests over the total ad requests. The value is a double precision (approximate) decimal value. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
+                            "The ratio of ads that are displayed over ads that are returned, defined as impressions / matched requests. The value is a double precision (approximate) decimal value."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "sortConditions": {
+                    "description": "Describes the sorting of report rows. The order of the condition in the list defines its precedence; the earlier the condition, the higher its precedence. If no sort conditions are specified, the row ordering is undefined.",
+                    "items": {
+                        "$ref": "NetworkReportSpecSortCondition"
+                    },
+                    "type": "array"
+                },
+                "timeZone": {
+                    "description": "A report time zone. Accepts an IANA TZ name values, such as \"America/Los_Angeles.\" If no time zone is defined, the account default takes effect. Check default value by the get account action. **Warning:** The \"America/Los_Angeles\" is the only supported value at the moment.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "NetworkReportSpecDimensionFilter": {
+            "description": "Describes which report rows to match based on their dimension values.",
+            "id": "NetworkReportSpecDimensionFilter",
+            "properties": {
+                "dimension": {
+                    "description": "Applies the filter criterion to the specified dimension.",
+                    "enum": [
+                        "DIMENSION_UNSPECIFIED",
+                        "DATE",
+                        "MONTH",
+                        "WEEK",
+                        "AD_UNIT",
+                        "APP",
+                        "AD_TYPE",
+                        "COUNTRY",
+                        "FORMAT",
+                        "PLATFORM"
+                    ],
+                    "enumDescriptions": [
+                        "Default value for an unset field. Do not use.",
+                        "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                        "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
+                        "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                        "The unique ID of the ad unit (for example, \"ca-app-pub-1234/1234\"). If AD_UNIT dimension is specified, then APP is included automatically.",
+                        "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
+                        "Type of the ad (for example, \"text\" or \"image\"), an ad delivery dimension. **Warning:** The dimension is incompatible with [AD_REQUESTS](#Metric.ENUM_VALUES.AD_REQUESTS), [MATCH_RATE](#Metric.ENUM_VALUES.MATCH_RATE) and [IMPRESSION_RPM](#Metric.ENUM_VALUES.IMPRESSION_RPM) metrics.",
+                        "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
+                        "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
+                        "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
+                    ],
+                    "type": "string"
+                },
+                "matchesAny": {
+                    "$ref": "StringList",
+                    "description": "Matches a row if its value for the specified dimension is in one of the values specified in this condition."
+                }
+            },
+            "type": "object"
+        },
+        "NetworkReportSpecSortCondition": {
+            "description": "Sorting direction to be applied on a dimension or a metric.",
+            "id": "NetworkReportSpecSortCondition",
+            "properties": {
+                "dimension": {
+                    "description": "Sort by the specified dimension.",
+                    "enum": [
+                        "DIMENSION_UNSPECIFIED",
+                        "DATE",
+                        "MONTH",
+                        "WEEK",
+                        "AD_UNIT",
+                        "APP",
+                        "AD_TYPE",
+                        "COUNTRY",
+                        "FORMAT",
+                        "PLATFORM"
+                    ],
+                    "enumDescriptions": [
+                        "Default value for an unset field. Do not use.",
+                        "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                        "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
+                        "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
+                        "The unique ID of the ad unit (for example, \"ca-app-pub-1234/1234\"). If AD_UNIT dimension is specified, then APP is included automatically.",
+                        "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
+                        "Type of the ad (for example, \"text\" or \"image\"), an ad delivery dimension. **Warning:** The dimension is incompatible with [AD_REQUESTS](#Metric.ENUM_VALUES.AD_REQUESTS), [MATCH_RATE](#Metric.ENUM_VALUES.MATCH_RATE) and [IMPRESSION_RPM](#Metric.ENUM_VALUES.IMPRESSION_RPM) metrics.",
+                        "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
+                        "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
+                        "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
+                    ],
+                    "type": "string"
+                },
+                "metric": {
+                    "description": "Sort by the specified metric.",
+                    "enum": [
+                        "METRIC_UNSPECIFIED",
+                        "AD_REQUESTS",
+                        "CLICKS",
+                        "ESTIMATED_EARNINGS",
+                        "IMPRESSIONS",
+                        "IMPRESSION_CTR",
+                        "IMPRESSION_RPM",
+                        "MATCHED_REQUESTS",
+                        "MATCH_RATE",
+                        "SHOW_RATE"
+                    ],
+                    "enumDescriptions": [
+                        "Default value for an unset field. Do not use.",
+                        "The number of ad requests. The value is an integer. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
+                        "The number of times a user clicks an ad. The value is an integer.",
+                        "The estimated earnings of the AdMob publisher. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $6.50 would be represented as 6500000.",
+                        "The total number of ads shown to users. The value is an integer.",
+                        "The ratio of clicks over impressions. The value is a double precision (approximate) decimal value.",
+                        "The estimated earnings per thousand ad impressions. The value is in micros. For example, $1.03 would be represented as 1030000. Equivalent to eCPM in the AdMob UI. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
+                        "The number of times ads are returned in response to a request. The value is an integer.",
+                        "The ratio of matched ad requests over the total ad requests. The value is a double precision (approximate) decimal value. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
+                        "The ratio of ads that are displayed over ads that are returned, defined as impressions / matched requests. The value is a double precision (approximate) decimal value."
+                    ],
+                    "type": "string"
+                },
+                "order": {
+                    "description": "Sorting order of the dimension or metric.",
+                    "enum": [
+                        "SORT_ORDER_UNSPECIFIED",
+                        "ASCENDING",
+                        "DESCENDING"
+                    ],
+                    "enumDescriptions": [
+                        "Default value for an unset field. Do not use.",
+                        "Sort dimension value or metric value in ascending order.",
+                        "Sort dimension value or metric value in descending order."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PublisherAccount": {
+            "description": "A publisher account contains information relevant to the use of this API, such as the time zone used for the reports.",
+            "id": "PublisherAccount",
+            "properties": {
+                "currencyCode": {
+                    "description": "Currency code of the earning-related metrics, which is the 3-letter code defined in ISO 4217. The daily average rate is used for the currency conversion.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Resource name of this account. Format is accounts/{publisher_id}.",
+                    "type": "string"
+                },
+                "publisherId": {
+                    "description": "The unique ID by which this publisher account can be identified in the API requests (for example, pub-1234567890).",
+                    "type": "string"
+                },
+                "reportingTimeZone": {
+                    "description": "The time zone that is used in reports that are generated for this account. The value is a time-zone ID as specified by the CLDR project, for example, \"America/Los_Angeles\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReportFooter": {
+            "description": "Groups data available after report generation, for example, warnings and row counts. Always sent as the last message in the stream response.",
+            "id": "ReportFooter",
+            "properties": {
+                "matchingRowCount": {
+                    "description": "Total number of rows that matched the request. Warning: This count does NOT always match the number of rows in the response. Do not make that assumption when processing the response.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "warnings": {
+                    "description": "Warnings associated with generation of the report.",
+                    "items": {
+                        "$ref": "ReportWarning"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ReportHeader": {
+            "description": "Groups data helps to treat the generated report. Always sent as a first message in the stream response.",
+            "id": "ReportHeader",
+            "properties": {
+                "dateRange": {
+                    "$ref": "DateRange",
+                    "description": "The date range for which the report is generated. This is identical to the range specified in the report request."
+                },
+                "localizationSettings": {
+                    "$ref": "LocalizationSettings",
+                    "description": "Localization settings of the report. This is identical to the settings in the report request."
+                },
+                "reportingTimeZone": {
+                    "description": "The report time zone. The value is a time-zone ID as specified by the CLDR project, for example, \"America/Los_Angeles\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReportRow": {
+            "description": "A row of the returning report.",
+            "id": "ReportRow",
+            "properties": {
+                "dimensionValues": {
+                    "additionalProperties": {
+                        "$ref": "ReportRowDimensionValue"
+                    },
+                    "description": "Map of dimension values in a row, with keys as enum name of the dimensions.",
+                    "type": "object"
+                },
+                "metricValues": {
+                    "additionalProperties": {
+                        "$ref": "ReportRowMetricValue"
+                    },
+                    "description": "Map of metric values in a row, with keys as enum name of the metrics. If a metric being requested has no value returned, the map will not include it.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "ReportRowDimensionValue": {
+            "description": "Representation of a dimension value.",
+            "id": "ReportRowDimensionValue",
+            "properties": {
+                "displayLabel": {
+                    "description": "The localized string representation of the value. If unspecified, the display label should be derived from the value.",
+                    "type": "string"
+                },
+                "value": {
+                    "description": "Dimension value in the format specified in the report's spec Dimension enum.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReportRowMetricValue": {
+            "description": "Representation of a metric value.",
+            "id": "ReportRowMetricValue",
+            "properties": {
+                "doubleValue": {
+                    "description": "Double precision (approximate) decimal values. Rates are from 0 to 1.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "integerValue": {
+                    "description": "Metric integer value.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "microsValue": {
+                    "description": "Amount in micros. One million is equivalent to one unit. Currency value is in the unit (USD, EUR or other) specified by the request. For example, $6.50 whould be represented as 6500000 micros.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReportWarning": {
+            "description": "Warnings associated with generation of the report.",
+            "id": "ReportWarning",
+            "properties": {
+                "description": {
+                    "description": "Describes the details of the warning message, in English.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Type of the warning.",
+                    "enum": [
+                        "TYPE_UNSPECIFIED",
+                        "DATA_BEFORE_ACCOUNT_TIMEZONE_CHANGE",
+                        "DATA_DELAYED",
+                        "OTHER",
+                        "REPORT_CURRENCY_NOT_ACCOUNT_CURRENCY"
+                    ],
+                    "enumDescriptions": [
+                        "Default value for an unset field. Do not use.",
+                        "Some data in this report is aggregated based on a time zone different from the requested time zone. This could happen if a local time-zone report has the start time before the last time this time zone changed. The description field will contain the date of the last time zone change.",
+                        "There is an unusual delay in processing the source data for the requested date range. The report results might be less up to date than usual. AdMob is aware of the issue and is actively working to resolve it.",
+                        "Warnings that are exposed without a specific type. Useful when new warning types are added but the API is not changed yet.",
+                        "The currency being requested is not the account currency. The earning metrics will be based on the requested currency, and thus not a good estimation of the final payment anymore, due to the currency rate fluctuation."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "StringList": {
+            "description": "List of string values.",
+            "id": "StringList",
+            "properties": {
+                "values": {
+                    "description": "The string values.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         }
-      },
-      "id": "ReportRowDimensionValue",
-      "description": "Representation of a dimension value."
     },
-    "AppLinkedAppInfo": {
-      "id": "AppLinkedAppInfo",
-      "description": "Information from the app store if the app is linked to an app store.",
-      "type": "object",
-      "properties": {
-        "displayName": {
-          "type": "string",
-          "readOnly": true,
-          "description": "Output only. Display name of the app as it appears in the app store. This is an output-only field, and may be empty if the app cannot be found in the store."
-        },
-        "appStoreId": {
-          "type": "string",
-          "description": "The app store ID of the app; present if and only if the app is linked to an app store. If the app is added to the Google Play store, it will be the application ID of the app. For example: \"com.example.myapp\". See https://developer.android.com/studio/build/application-id. If the app is added to the Apple App Store, it will be app store ID. For example \"105169111\". Note that setting the app store id is considered an irreversible action. Once an app is linked, it cannot be unlinked."
-        }
-      }
-    },
-    "ListPublisherAccountsResponse": {
-      "properties": {
-        "account": {
-          "items": {
-            "$ref": "PublisherAccount"
-          },
-          "type": "array",
-          "description": "Publisher that the client credentials can access."
-        },
-        "nextPageToken": {
-          "description": "If not empty, indicates that there might be more accounts for the request; you must pass this value in a new `ListPublisherAccountsRequest`.",
-          "type": "string"
-        }
-      },
-      "description": "Response for the publisher account list request.",
-      "id": "ListPublisherAccountsResponse",
-      "type": "object"
-    },
-    "GenerateNetworkReportRequest": {
-      "id": "GenerateNetworkReportRequest",
-      "type": "object",
-      "properties": {
-        "reportSpec": {
-          "$ref": "NetworkReportSpec",
-          "description": "Network report specification."
-        }
-      },
-      "description": "Request to generate an AdMob Network report."
-    },
-    "ListAppsResponse": {
-      "description": "Response for the apps list request.",
-      "id": "ListAppsResponse",
-      "properties": {
-        "nextPageToken": {
-          "description": "If not empty, indicates that there may be more apps for the request; this value should be passed in a new `ListAppsRequest`.",
-          "type": "string"
-        },
-        "apps": {
-          "items": {
-            "$ref": "App"
-          },
-          "description": "The resulting apps for the requested account.",
-          "type": "array"
-        }
-      },
-      "type": "object"
-    },
-    "ReportHeader": {
-      "properties": {
-        "reportingTimeZone": {
-          "type": "string",
-          "description": "The report time zone. The value is a time-zone ID as specified by the CLDR project, for example, \"America/Los_Angeles\"."
-        },
-        "dateRange": {
-          "$ref": "DateRange",
-          "description": "The date range for which the report is generated. This is identical to the range specified in the report request."
-        },
-        "localizationSettings": {
-          "description": "Localization settings of the report. This is identical to the settings in the report request.",
-          "$ref": "LocalizationSettings"
-        }
-      },
-      "id": "ReportHeader",
-      "type": "object",
-      "description": "Groups data helps to treat the generated report. Always sent as a first message in the stream response."
-    },
-    "GenerateMediationReportResponse": {
-      "id": "GenerateMediationReportResponse",
-      "type": "object",
-      "properties": {
-        "footer": {
-          "description": "Additional information about the generated report, such as warnings about the data.",
-          "$ref": "ReportFooter"
-        },
-        "header": {
-          "description": "Report generation settings that describes the report contents, such as the report date range and localization settings.",
-          "$ref": "ReportHeader"
-        },
-        "row": {
-          "description": "Actual report data.",
-          "$ref": "ReportRow"
-        }
-      },
-      "description": "The streaming response for the AdMob Mediation report where the first response contains the report header, then a stream of row responses, and finally a footer as the last response message. For example: [{ \"header\": { \"date_range\": { \"start_date\": {\"year\": 2018, \"month\": 9, \"day\": 1}, \"end_date\": {\"year\": 2018, \"month\": 9, \"day\": 1} }, \"localization_settings\": { \"currency_code\": \"USD\", \"language_code\": \"en-US\" } } }, { \"row\": { \"dimension_values\": { \"DATE\": {\"value\": \"20180918\"}, \"APP\": { \"value\": \"ca-app-pub-8123415297019784~1001342552\", \"display_label\": \"My app name!\" } }, \"metric_values\": { \"ESTIMATED_EARNINGS\": {\"decimal_value\": \"1324746\"} } } }, { \"footer\": {\"matching_row_count\": 1} }]"
-    },
-    "ReportWarning": {
-      "id": "ReportWarning",
-      "type": "object",
-      "description": "Warnings associated with generation of the report.",
-      "properties": {
-        "type": {
-          "type": "string",
-          "description": "Type of the warning.",
-          "enumDescriptions": [
-            "Default value for an unset field. Do not use.",
-            "Some data in this report is aggregated based on a time zone different from the requested time zone. This could happen if a local time-zone report has the start time before the last time this time zone changed. The description field will contain the date of the last time zone change.",
-            "There is an unusual delay in processing the source data for the requested date range. The report results might be less up to date than usual. AdMob is aware of the issue and is actively working to resolve it.",
-            "Warnings that are exposed without a specific type. Useful when new warning types are added but the API is not changed yet.",
-            "The currency being requested is not the account currency. The earning metrics will be based on the requested currency, and thus not a good estimation of the final payment anymore, due to the currency rate fluctuation."
-          ],
-          "enum": [
-            "TYPE_UNSPECIFIED",
-            "DATA_BEFORE_ACCOUNT_TIMEZONE_CHANGE",
-            "DATA_DELAYED",
-            "OTHER",
-            "REPORT_CURRENCY_NOT_ACCOUNT_CURRENCY"
-          ]
-        },
-        "description": {
-          "type": "string",
-          "description": "Describes the details of the warning message, in English."
-        }
-      }
-    },
-    "MediationReportSpecDimensionFilter": {
-      "type": "object",
-      "description": "Describes which report rows to match based on their dimension values.",
-      "properties": {
-        "dimension": {
-          "description": "Applies the filter criterion to the specified dimension.",
-          "type": "string",
-          "enum": [
-            "DIMENSION_UNSPECIFIED",
-            "DATE",
-            "MONTH",
-            "WEEK",
-            "AD_SOURCE",
-            "AD_SOURCE_INSTANCE",
-            "AD_UNIT",
-            "APP",
-            "MEDIATION_GROUP",
-            "COUNTRY",
-            "FORMAT",
-            "PLATFORM"
-          ],
-          "enumDescriptions": [
-            "Default value for an unset field. Do not use.",
-            "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-            "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
-            "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-            "The [unique ID of the ad source](/admob/api/v1/ad_sources) (for example, \"5450213213286189855\" and \"AdMob Network\" as label value).",
-            "The unique ID of the ad source instance (for example, \"ca-app-pub-1234#5678\" and \"AdMob (default)\" as label value).",
-            "The unique ID of the ad unit (for example, \"ca-app-pub-1234/8790\"). If AD_UNIT dimension is specified, then APP is included automatically.",
-            "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
-            "The unique ID of the mediation group (for example, \"ca-app-pub-1234:mg:1234\" and \"AdMob (default)\" as label value).",
-            "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
-            "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
-            "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
-          ]
-        },
-        "matchesAny": {
-          "$ref": "StringList",
-          "description": "Matches a row if its value for the specified dimension is in one of the values specified in this condition."
-        }
-      },
-      "id": "MediationReportSpecDimensionFilter"
-    },
-    "ListAdUnitsResponse": {
-      "type": "object",
-      "properties": {
-        "adUnits": {
-          "description": "The resulting ad units for the requested account.",
-          "items": {
-            "$ref": "AdUnit"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "description": "If not empty, indicates that there may be more ad units for the request; this value should be passed in a new `ListAdUnitsRequest`.",
-          "type": "string"
-        }
-      },
-      "description": "Response for the ad units list request.",
-      "id": "ListAdUnitsResponse"
-    },
-    "NetworkReportSpec": {
-      "description": "The specification for generating an AdMob Network report. For example, the specification to get clicks and estimated earnings for only the 'US' and 'CN' countries can look like the following example: { 'date_range': { 'start_date': {'year': 2018, 'month': 9, 'day': 1}, 'end_date': {'year': 2018, 'month': 9, 'day': 30} }, 'dimensions': ['DATE', 'APP', 'COUNTRY'], 'metrics': ['CLICKS', 'ESTIMATED_EARNINGS'], 'dimension_filters': [ { 'dimension': 'COUNTRY', 'matches_any': {'values': [{'value': 'US', 'value': 'CN'}]} } ], 'sort_conditions': [ {'dimension':'APP', order: 'ASCENDING'}, {'metric':'CLICKS', order: 'DESCENDING'} ], 'localization_settings': { 'currency_code': 'USD', 'language_code': 'en-US' } } For a better understanding, you can treat the preceding specification like the following pseudo SQL: SELECT DATE, APP, COUNTRY, CLICKS, ESTIMATED_EARNINGS FROM NETWORK_REPORT WHERE DATE \u003e= '2018-09-01' AND DATE \u003c= '2018-09-30' AND COUNTRY IN ('US', 'CN') GROUP BY DATE, APP, COUNTRY ORDER BY APP ASC, CLICKS DESC;",
-      "id": "NetworkReportSpec",
-      "properties": {
-        "dimensions": {
-          "description": "List of dimensions of the report. The value combination of these dimensions determines the row of the report. If no dimensions are specified, the report returns a single row of requested metrics for the entire account.",
-          "type": "array",
-          "items": {
-            "enumDescriptions": [
-              "Default value for an unset field. Do not use.",
-              "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-              "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
-              "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-              "The unique ID of the ad unit (for example, \"ca-app-pub-1234/1234\"). If AD_UNIT dimension is specified, then APP is included automatically.",
-              "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
-              "Type of the ad (for example, \"text\" or \"image\"), an ad delivery dimension. **Warning:** The dimension is incompatible with [AD_REQUESTS](#Metric.ENUM_VALUES.AD_REQUESTS), [MATCH_RATE](#Metric.ENUM_VALUES.MATCH_RATE) and [IMPRESSION_RPM](#Metric.ENUM_VALUES.IMPRESSION_RPM) metrics.",
-              "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
-              "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
-              "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
-            ],
-            "enum": [
-              "DIMENSION_UNSPECIFIED",
-              "DATE",
-              "MONTH",
-              "WEEK",
-              "AD_UNIT",
-              "APP",
-              "AD_TYPE",
-              "COUNTRY",
-              "FORMAT",
-              "PLATFORM"
-            ],
-            "type": "string"
-          }
-        },
-        "timeZone": {
-          "type": "string",
-          "description": "A report time zone. Accepts an IANA TZ name values, such as \"America/Los_Angeles.\" If no time zone is defined, the account default takes effect. Check default value by the get account action. **Warning:** The \"America/Los_Angeles\" is the only supported value at the moment."
-        },
-        "localizationSettings": {
-          "$ref": "LocalizationSettings",
-          "description": "Localization settings of the report."
-        },
-        "dateRange": {
-          "description": "The date range for which the report is generated.",
-          "$ref": "DateRange"
-        },
-        "metrics": {
-          "items": {
-            "enum": [
-              "METRIC_UNSPECIFIED",
-              "AD_REQUESTS",
-              "CLICKS",
-              "ESTIMATED_EARNINGS",
-              "IMPRESSIONS",
-              "IMPRESSION_CTR",
-              "IMPRESSION_RPM",
-              "MATCHED_REQUESTS",
-              "MATCH_RATE",
-              "SHOW_RATE"
-            ],
-            "type": "string",
-            "enumDescriptions": [
-              "Default value for an unset field. Do not use.",
-              "The number of ad requests. The value is an integer. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
-              "The number of times a user clicks an ad. The value is an integer.",
-              "The estimated earnings of the AdMob publisher. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $6.50 would be represented as 6500000.",
-              "The total number of ads shown to users. The value is an integer.",
-              "The ratio of clicks over impressions. The value is a double precision (approximate) decimal value.",
-              "The estimated earnings per thousand ad impressions. The value is in micros. For example, $1.03 would be represented as 1030000. Equivalent to eCPM in the AdMob UI. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
-              "The number of times ads are returned in response to a request. The value is an integer.",
-              "The ratio of matched ad requests over the total ad requests. The value is a double precision (approximate) decimal value. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
-              "The ratio of ads that are displayed over ads that are returned, defined as impressions / matched requests. The value is a double precision (approximate) decimal value."
-            ]
-          },
-          "description": "List of metrics of the report. A report must specify at least one metric.",
-          "type": "array"
-        },
-        "maxReportRows": {
-          "format": "int32",
-          "description": "Maximum number of report data rows to return. If the value is not set, the API returns as many rows as possible, up to 100000. Acceptable values are 1-100000, inclusive. Values larger than 100000 return an error.",
-          "type": "integer"
-        },
-        "sortConditions": {
-          "items": {
-            "$ref": "NetworkReportSpecSortCondition"
-          },
-          "description": "Describes the sorting of report rows. The order of the condition in the list defines its precedence; the earlier the condition, the higher its precedence. If no sort conditions are specified, the row ordering is undefined.",
-          "type": "array"
-        },
-        "dimensionFilters": {
-          "items": {
-            "$ref": "NetworkReportSpecDimensionFilter"
-          },
-          "description": "Describes which report rows to match based on their dimension values.",
-          "type": "array"
-        }
-      },
-      "type": "object"
-    },
-    "NetworkReportSpecDimensionFilter": {
-      "description": "Describes which report rows to match based on their dimension values.",
-      "properties": {
-        "matchesAny": {
-          "$ref": "StringList",
-          "description": "Matches a row if its value for the specified dimension is in one of the values specified in this condition."
-        },
-        "dimension": {
-          "enum": [
-            "DIMENSION_UNSPECIFIED",
-            "DATE",
-            "MONTH",
-            "WEEK",
-            "AD_UNIT",
-            "APP",
-            "AD_TYPE",
-            "COUNTRY",
-            "FORMAT",
-            "PLATFORM"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "Default value for an unset field. Do not use.",
-            "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-            "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
-            "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-            "The unique ID of the ad unit (for example, \"ca-app-pub-1234/1234\"). If AD_UNIT dimension is specified, then APP is included automatically.",
-            "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
-            "Type of the ad (for example, \"text\" or \"image\"), an ad delivery dimension. **Warning:** The dimension is incompatible with [AD_REQUESTS](#Metric.ENUM_VALUES.AD_REQUESTS), [MATCH_RATE](#Metric.ENUM_VALUES.MATCH_RATE) and [IMPRESSION_RPM](#Metric.ENUM_VALUES.IMPRESSION_RPM) metrics.",
-            "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
-            "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
-            "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
-          ],
-          "description": "Applies the filter criterion to the specified dimension."
-        }
-      },
-      "type": "object",
-      "id": "NetworkReportSpecDimensionFilter"
-    },
-    "MediationReportSpec": {
-      "properties": {
-        "timeZone": {
-          "description": "A report time zone. Accepts an IANA TZ name values, such as \"America/Los_Angeles.\" If no time zone is defined, the account default takes effect. Check default value by the get account action. **Warning:** The \"America/Los_Angeles\" is the only supported value at the moment.",
-          "type": "string"
-        },
-        "sortConditions": {
-          "description": "Describes the sorting of report rows. The order of the condition in the list defines its precedence; the earlier the condition, the higher its precedence. If no sort conditions are specified, the row ordering is undefined.",
-          "items": {
-            "$ref": "MediationReportSpecSortCondition"
-          },
-          "type": "array"
-        },
-        "metrics": {
-          "items": {
-            "enum": [
-              "METRIC_UNSPECIFIED",
-              "AD_REQUESTS",
-              "CLICKS",
-              "ESTIMATED_EARNINGS",
-              "IMPRESSIONS",
-              "IMPRESSION_CTR",
-              "MATCHED_REQUESTS",
-              "MATCH_RATE",
-              "OBSERVED_ECPM"
-            ],
-            "enumDescriptions": [
-              "Default value for an unset field. Do not use.",
-              "The number of requests. The value is an integer.",
-              "The number of times a user clicks an ad. The value is an integer.",
-              "The estimated earnings of the AdMob publisher. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $6.50 would be represented as 6500000. Estimated earnings per mediation group and per ad source instance level is supported dating back to October 20, 2019. Third-party estimated earnings will show 0 for dates prior to October 20, 2019.",
-              "The total number of ads shown to users. The value is an integer.",
-              "The ratio of clicks over impressions. The value is a double precision (approximate) decimal value.",
-              "The number of times ads are returned in response to a request. The value is an integer.",
-              "The ratio of matched ad requests over the total ad requests. The value is a double precision (approximate) decimal value.",
-              "The third-party ad network's estimated average eCPM. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $2.30 would be represented as 2300000. The estimated average eCPM per mediation group and per ad source instance level is supported dating back to October 20, 2019. Third-party estimated average eCPM will show 0 for dates prior to October 20, 2019."
-            ],
-            "type": "string"
-          },
-          "type": "array",
-          "description": "List of metrics of the report. A report must specify at least one metric."
-        },
-        "dateRange": {
-          "$ref": "DateRange",
-          "description": "The date range for which the report is generated."
-        },
-        "maxReportRows": {
-          "description": "Maximum number of report data rows to return. If the value is not set, the API returns as many rows as possible, up to 100000. Acceptable values are 1-100000, inclusive. Values larger than 100000 return an error.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "dimensions": {
-          "description": "List of dimensions of the report. The value combination of these dimensions determines the row of the report. If no dimensions are specified, the report returns a single row of requested metrics for the entire account.",
-          "items": {
-            "type": "string",
-            "enumDescriptions": [
-              "Default value for an unset field. Do not use.",
-              "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-              "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
-              "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-              "The [unique ID of the ad source](/admob/api/v1/ad_sources) (for example, \"5450213213286189855\" and \"AdMob Network\" as label value).",
-              "The unique ID of the ad source instance (for example, \"ca-app-pub-1234#5678\" and \"AdMob (default)\" as label value).",
-              "The unique ID of the ad unit (for example, \"ca-app-pub-1234/8790\"). If AD_UNIT dimension is specified, then APP is included automatically.",
-              "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
-              "The unique ID of the mediation group (for example, \"ca-app-pub-1234:mg:1234\" and \"AdMob (default)\" as label value).",
-              "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
-              "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
-              "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
-            ],
-            "enum": [
-              "DIMENSION_UNSPECIFIED",
-              "DATE",
-              "MONTH",
-              "WEEK",
-              "AD_SOURCE",
-              "AD_SOURCE_INSTANCE",
-              "AD_UNIT",
-              "APP",
-              "MEDIATION_GROUP",
-              "COUNTRY",
-              "FORMAT",
-              "PLATFORM"
-            ]
-          },
-          "type": "array"
-        },
-        "dimensionFilters": {
-          "description": "Describes which report rows to match based on their dimension values.",
-          "type": "array",
-          "items": {
-            "$ref": "MediationReportSpecDimensionFilter"
-          }
-        },
-        "localizationSettings": {
-          "$ref": "LocalizationSettings",
-          "description": "Localization settings of the report."
-        }
-      },
-      "id": "MediationReportSpec",
-      "type": "object",
-      "description": "The specification for generating an AdMob Mediation report. For example, the specification to get observed ECPM sliced by ad source and app for the 'US' and 'CN' countries can look like the following example: { \"date_range\": { \"start_date\": {\"year\": 2018, \"month\": 9, \"day\": 1}, \"end_date\": {\"year\": 2018, \"month\": 9, \"day\": 30} }, \"dimensions\": [\"AD_SOURCE\", \"APP\", \"COUNTRY\"], \"metrics\": [\"OBSERVED_ECPM\"], \"dimension_filters\": [ { \"dimension\": \"COUNTRY\", \"matches_any\": {\"values\": [{\"value\": \"US\", \"value\": \"CN\"}]} } ], \"sort_conditions\": [ {\"dimension\":\"APP\", order: \"ASCENDING\"} ], \"localization_settings\": { \"currency_code\": \"USD\", \"language_code\": \"en-US\" } } For a better understanding, you can treat the preceding specification like the following pseudo SQL: SELECT AD_SOURCE, APP, COUNTRY, OBSERVED_ECPM FROM MEDIATION_REPORT WHERE DATE \u003e= '2018-09-01' AND DATE \u003c= '2018-09-30' AND COUNTRY IN ('US', 'CN') GROUP BY AD_SOURCE, APP, COUNTRY ORDER BY APP ASC;"
-    },
-    "StringList": {
-      "type": "object",
-      "properties": {
-        "values": {
-          "description": "The string values.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        }
-      },
-      "description": "List of string values.",
-      "id": "StringList"
-    },
-    "AdUnit": {
-      "id": "AdUnit",
-      "type": "object",
-      "properties": {
-        "adUnitId": {
-          "description": "The externally visible ID of the ad unit which can be used to integrate with the AdMob SDK. This is a read only property. Example: ca-app-pub-9876543210987654/0123456789",
-          "type": "string"
-        },
-        "adTypes": {
-          "description": "Ad media type supported by this ad unit. Possible values as follows: \"RICH_MEDIA\" - Text, image, and other non-video media. \"VIDEO\" - Video media.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "appId": {
-          "description": "The externally visible ID of the app this ad unit is associated with. Example: ca-app-pub-9876543210987654~0123456789",
-          "type": "string"
-        },
-        "displayName": {
-          "type": "string",
-          "description": "The display name of the ad unit as shown in the AdMob UI, which is provided by the user. The maximum length allowed is 80 characters."
-        },
-        "name": {
-          "description": "Resource name for this ad unit. Format is accounts/{publisher_id}/adUnits/{ad_unit_id_fragment} Example: accounts/pub-9876543210987654/adUnits/0123456789",
-          "type": "string"
-        },
-        "adFormat": {
-          "description": "AdFormat of the ad unit. Possible values are as follows: \"BANNER\" - Banner ad format. \"BANNER_INTERSTITIAL\" - Legacy format that can be used as either banner or interstitial. This format can no longer be created but can be targeted by mediation groups. \"INTERSTITIAL\" - A full screen ad. Supported ad types are \"RICH_MEDIA\" and \"VIDEO\". \"NATIVE\" - Native ad format. \"REWARDED\" - An ad that, once viewed, gets a callback verifying the view so that a reward can be given to the user. Supported ad types are \"RICH_MEDIA\" (interactive) and video where video can not be excluded.",
-          "type": "string"
-        }
-      },
-      "description": "Describes an AdMob ad unit."
-    },
-    "GenerateNetworkReportResponse": {
-      "type": "object",
-      "properties": {
-        "header": {
-          "description": "Report generation settings that describes the report contents, such as the report date range and localization settings.",
-          "$ref": "ReportHeader"
-        },
-        "row": {
-          "$ref": "ReportRow",
-          "description": "Actual report data."
-        },
-        "footer": {
-          "$ref": "ReportFooter",
-          "description": "Additional information about the generated report, such as warnings about the data."
-        }
-      },
-      "id": "GenerateNetworkReportResponse",
-      "description": "The streaming response for the AdMob Network report where the first response contains the report header, then a stream of row responses, and finally a footer as the last response message. For example: [{ \"header\": { \"dateRange\": { \"startDate\": {\"year\": 2018, \"month\": 9, \"day\": 1}, \"endDate\": {\"year\": 2018, \"month\": 9, \"day\": 1} }, \"localizationSettings\": { \"currencyCode\": \"USD\", \"languageCode\": \"en-US\" } } }, { \"row\": { \"dimensionValues\": { \"DATE\": {\"value\": \"20180918\"}, \"APP\": { \"value\": \"ca-app-pub-8123415297019784~1001342552\", displayLabel: \"My app name!\" } }, \"metricValues\": { \"ESTIMATED_EARNINGS\": {\"microsValue\": 6500000} } } }, { \"footer\": {\"matchingRowCount\": 1} }]"
-    },
-    "ReportRow": {
-      "description": "A row of the returning report.",
-      "properties": {
-        "dimensionValues": {
-          "additionalProperties": {
-            "$ref": "ReportRowDimensionValue"
-          },
-          "type": "object",
-          "description": "Map of dimension values in a row, with keys as enum name of the dimensions."
-        },
-        "metricValues": {
-          "additionalProperties": {
-            "$ref": "ReportRowMetricValue"
-          },
-          "type": "object",
-          "description": "Map of metric values in a row, with keys as enum name of the metrics. If a metric being requested has no value returned, the map will not include it."
-        }
-      },
-      "type": "object",
-      "id": "ReportRow"
-    },
-    "DateRange": {
-      "type": "object",
-      "description": "Specification of a single date range. Both dates are inclusive.",
-      "properties": {
-        "endDate": {
-          "$ref": "Date",
-          "description": "End date of the date range, inclusive. Must be greater than or equal to the start date."
-        },
-        "startDate": {
-          "description": "Start date of the date range, inclusive. Must be less than or equal to the end date.",
-          "$ref": "Date"
-        }
-      },
-      "id": "DateRange"
-    },
-    "PublisherAccount": {
-      "properties": {
-        "name": {
-          "description": "Resource name of this account. Format is accounts/{publisher_id}.",
-          "type": "string"
-        },
-        "currencyCode": {
-          "description": "Currency code of the earning-related metrics, which is the 3-letter code defined in ISO 4217. The daily average rate is used for the currency conversion.",
-          "type": "string"
-        },
-        "reportingTimeZone": {
-          "type": "string",
-          "description": "The time zone that is used in reports that are generated for this account. The value is a time-zone ID as specified by the CLDR project, for example, \"America/Los_Angeles\"."
-        },
-        "publisherId": {
-          "type": "string",
-          "description": "The unique ID by which this publisher account can be identified in the API requests (for example, pub-1234567890)."
-        }
-      },
-      "id": "PublisherAccount",
-      "type": "object",
-      "description": "A publisher account contains information relevant to the use of this API, such as the time zone used for the reports."
-    },
-    "LocalizationSettings": {
-      "properties": {
-        "languageCode": {
-          "description": "Language used for any localized text, such as some dimension value display labels. The language tag defined in the IETF BCP47. Defaults to 'en-US' if unspecified.",
-          "type": "string"
-        },
-        "currencyCode": {
-          "type": "string",
-          "description": "Currency code of the earning related metrics, which is the 3-letter code defined in ISO 4217. The daily average rate is used for the currency conversion. Defaults to the account currency code if unspecified."
-        }
-      },
-      "type": "object",
-      "description": "Localization settings for reports, such as currency and language. It affects how metrics are calculated.",
-      "id": "LocalizationSettings"
-    },
-    "AppManualAppInfo": {
-      "id": "AppManualAppInfo",
-      "properties": {
-        "displayName": {
-          "description": "The display name of the app as shown in the AdMob UI, which is provided by the user. The maximum length allowed is 80 characters.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Information provided for manual apps which are not linked to an application store (Example: Google Play, App Store)."
-    },
-    "ReportFooter": {
-      "properties": {
-        "matchingRowCount": {
-          "format": "int64",
-          "type": "string",
-          "description": "Total number of rows that matched the request. Warning: This count does NOT always match the number of rows in the response. Do not make that assumption when processing the response."
-        },
-        "warnings": {
-          "description": "Warnings associated with generation of the report.",
-          "items": {
-            "$ref": "ReportWarning"
-          },
-          "type": "array"
-        }
-      },
-      "id": "ReportFooter",
-      "description": "Groups data available after report generation, for example, warnings and row counts. Always sent as the last message in the stream response.",
-      "type": "object"
-    },
-    "NetworkReportSpecSortCondition": {
-      "id": "NetworkReportSpecSortCondition",
-      "description": "Sorting direction to be applied on a dimension or a metric.",
-      "type": "object",
-      "properties": {
-        "dimension": {
-          "description": "Sort by the specified dimension.",
-          "enumDescriptions": [
-            "Default value for an unset field. Do not use.",
-            "A date in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-            "A month in the YYYY-MM format (for example, \"2018-12\"). Requests can specify at most one time dimension.",
-            "The date of the first day of a week in the YYYY-MM-DD format (for example, \"2018-12-21\"). Requests can specify at most one time dimension.",
-            "The unique ID of the ad unit (for example, \"ca-app-pub-1234/1234\"). If AD_UNIT dimension is specified, then APP is included automatically.",
-            "The unique ID of the mobile application (for example, \"ca-app-pub-1234~1234\").",
-            "Type of the ad (for example, \"text\" or \"image\"), an ad delivery dimension. **Warning:** The dimension is incompatible with [AD_REQUESTS](#Metric.ENUM_VALUES.AD_REQUESTS), [MATCH_RATE](#Metric.ENUM_VALUES.MATCH_RATE) and [IMPRESSION_RPM](#Metric.ENUM_VALUES.IMPRESSION_RPM) metrics.",
-            "CLDR country code of the place where the ad views/clicks occur (for example, \"US\" or \"FR\"). This is a geography dimension.",
-            "Format of the ad unit (for example, \"banner\", \"native\"), an ad delivery dimension.",
-            "Mobile OS platform of the app (for example, \"Android\" or \"iOS\")."
-          ],
-          "enum": [
-            "DIMENSION_UNSPECIFIED",
-            "DATE",
-            "MONTH",
-            "WEEK",
-            "AD_UNIT",
-            "APP",
-            "AD_TYPE",
-            "COUNTRY",
-            "FORMAT",
-            "PLATFORM"
-          ],
-          "type": "string"
-        },
-        "order": {
-          "type": "string",
-          "enumDescriptions": [
-            "Default value for an unset field. Do not use.",
-            "Sort dimension value or metric value in ascending order.",
-            "Sort dimension value or metric value in descending order."
-          ],
-          "description": "Sorting order of the dimension or metric.",
-          "enum": [
-            "SORT_ORDER_UNSPECIFIED",
-            "ASCENDING",
-            "DESCENDING"
-          ]
-        },
-        "metric": {
-          "enum": [
-            "METRIC_UNSPECIFIED",
-            "AD_REQUESTS",
-            "CLICKS",
-            "ESTIMATED_EARNINGS",
-            "IMPRESSIONS",
-            "IMPRESSION_CTR",
-            "IMPRESSION_RPM",
-            "MATCHED_REQUESTS",
-            "MATCH_RATE",
-            "SHOW_RATE"
-          ],
-          "enumDescriptions": [
-            "Default value for an unset field. Do not use.",
-            "The number of ad requests. The value is an integer. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
-            "The number of times a user clicks an ad. The value is an integer.",
-            "The estimated earnings of the AdMob publisher. The currency unit (USD, EUR, or other) of the earning metrics are determined by the localization setting for currency. The amount is in micros. For example, $6.50 would be represented as 6500000.",
-            "The total number of ads shown to users. The value is an integer.",
-            "The ratio of clicks over impressions. The value is a double precision (approximate) decimal value.",
-            "The estimated earnings per thousand ad impressions. The value is in micros. For example, $1.03 would be represented as 1030000. Equivalent to eCPM in the AdMob UI. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
-            "The number of times ads are returned in response to a request. The value is an integer.",
-            "The ratio of matched ad requests over the total ad requests. The value is a double precision (approximate) decimal value. **Warning:** The metric is incompatible with [AD_TYPE](#Dimension.ENUM_VALUES.AD_TYPE) dimension.",
-            "The ratio of ads that are displayed over ads that are returned, defined as impressions / matched requests. The value is a double precision (approximate) decimal value."
-          ],
-          "description": "Sort by the specified metric.",
-          "type": "string"
-        }
-      }
-    },
-    "Date": {
-      "id": "Date",
-      "type": "object",
-      "description": "Represents a whole or partial calendar date, such as a birthday. The time of day and time zone are either specified elsewhere or are insignificant. The date is relative to the Gregorian Calendar. This can represent one of the following: * A full date, with non-zero year, month, and day values * A month and day value, with a zero year, such as an anniversary * A year on its own, with zero month and day values * A year and month value, with a zero day, such as a credit card expiration date Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.",
-      "properties": {
-        "day": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to specify a year by itself or a year and month where the day isn't significant."
-        },
-        "month": {
-          "description": "Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "year": {
-          "format": "int32",
-          "description": "Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year.",
-          "type": "integer"
-        }
-      }
-    },
-    "ReportRowMetricValue": {
-      "type": "object",
-      "description": "Representation of a metric value.",
-      "id": "ReportRowMetricValue",
-      "properties": {
-        "integerValue": {
-          "format": "int64",
-          "type": "string",
-          "description": "Metric integer value."
-        },
-        "microsValue": {
-          "description": "Amount in micros. One million is equivalent to one unit. Currency value is in the unit (USD, EUR or other) specified by the request. For example, $6.50 whould be represented as 6500000 micros.",
-          "type": "string",
-          "format": "int64"
-        },
-        "doubleValue": {
-          "type": "number",
-          "description": "Double precision (approximate) decimal values. Rates are from 0 to 1.",
-          "format": "double"
-        }
-      }
-    },
-    "App": {
-      "description": "Describes an AdMob app for a specific platform (For example: Android or iOS).",
-      "id": "App",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "Resource name for this app. Format is accounts/{publisher_id}/apps/{app_id_fragment} Example: accounts/pub-9876543210987654/apps/0123456789",
-          "type": "string"
-        },
-        "appId": {
-          "description": "The externally visible ID of the app which can be used to integrate with the AdMob SDK. This is a read only property. Example: ca-app-pub-9876543210987654~0123456789",
-          "type": "string"
-        },
-        "platform": {
-          "description": "Describes the platform of the app. Limited to \"IOS\" and \"ANDROID\".",
-          "type": "string"
-        },
-        "manualAppInfo": {
-          "description": "The information for an app that is not linked to any app store. After an app is linked, this information is still retrivable. If no name is provided for the app upon creation, a placeholder name will be used.",
-          "$ref": "AppManualAppInfo"
-        },
-        "linkedAppInfo": {
-          "$ref": "AppLinkedAppInfo",
-          "description": "Immutable. The information for an app that is linked to an app store. This field is present if and only if the app is linked to an app store."
-        }
-      }
-    },
-    "GenerateMediationReportRequest": {
-      "type": "object",
-      "properties": {
-        "reportSpec": {
-          "$ref": "MediationReportSpec",
-          "description": "Network report specification."
-        }
-      },
-      "description": "Request to generate an AdMob Mediation report.",
-      "id": "GenerateMediationReportRequest"
-    }
-  },
-  "ownerDomain": "google.com",
-  "revision": "20201114",
-  "protocol": "rest"
-}
+    "servicePath": "",
+    "title": "AdMob API",
+    "version": "v1beta",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/analytics.v3.json b/googleapiclient/discovery_cache/documents/analytics.v3.json
index 5202ddc..23dda81 100644
--- a/googleapiclient/discovery_cache/documents/analytics.v3.json
+++ b/googleapiclient/discovery_cache/documents/analytics.v3.json
@@ -1,7459 +1,7459 @@
 {
-  "baseUrl": "https://www.googleapis.com/analytics/v3/",
-  "parameters": {
-    "key": {
-      "type": "string",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "location": "query"
-    },
-    "oauth_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user."
-    },
-    "userIp": {
-      "type": "string",
-      "description": "Deprecated. Please use quotaUser instead.",
-      "location": "query"
-    },
-    "quotaUser": {
-      "description": "An opaque string that represents a user for quota purposes. Must not exceed 40 characters.",
-      "type": "string",
-      "location": "query"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "type": "boolean",
-      "default": "false",
-      "description": "Returns response with indentations and line breaks."
-    },
-    "alt": {
-      "default": "json",
-      "location": "query",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json"
-      ],
-      "enum": [
-        "json"
-      ],
-      "description": "Data format for the response.",
-      "type": "string"
-    }
-  },
-  "resources": {
-    "userDeletion": {
-      "resources": {
-        "userDeletionRequest": {
-          "methods": {
-            "upsert": {
-              "description": "Insert or update a user deletion requests.",
-              "id": "analytics.userDeletion.userDeletionRequest.upsert",
-              "response": {
-                "$ref": "UserDeletionRequest"
-              },
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.user.deletion"
-              ],
-              "path": "userDeletion/userDeletionRequests:upsert",
-              "request": {
-                "$ref": "UserDeletionRequest"
-              }
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/analytics": {
+                    "description": "View and manage your Google Analytics data"
+                },
+                "https://www.googleapis.com/auth/analytics.edit": {
+                    "description": "Edit Google Analytics management entities"
+                },
+                "https://www.googleapis.com/auth/analytics.manage.users": {
+                    "description": "Manage Google Analytics Account users by email address"
+                },
+                "https://www.googleapis.com/auth/analytics.manage.users.readonly": {
+                    "description": "View Google Analytics user permissions"
+                },
+                "https://www.googleapis.com/auth/analytics.provision": {
+                    "description": "Create a new Google Analytics account along with its default property and view"
+                },
+                "https://www.googleapis.com/auth/analytics.readonly": {
+                    "description": "View your Google Analytics data"
+                },
+                "https://www.googleapis.com/auth/analytics.user.deletion": {
+                    "description": "Manage Google Analytics user deletion requests"
+                }
             }
-          }
         }
-      }
     },
-    "provisioning": {
-      "methods": {
-        "createAccountTree": {
-          "scopes": [
-            "https://www.googleapis.com/auth/analytics.provision"
-          ],
-          "id": "analytics.provisioning.createAccountTree",
-          "httpMethod": "POST",
-          "description": "Provision account.",
-          "path": "provisioning/createAccountTree",
-          "request": {
-            "$ref": "AccountTreeRequest"
-          },
-          "response": {
-            "$ref": "AccountTreeResponse"
-          }
-        },
-        "createAccountTicket": {
-          "path": "provisioning/createAccountTicket",
-          "httpMethod": "POST",
-          "response": {
-            "$ref": "AccountTicket"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/analytics.provision"
-          ],
-          "request": {
-            "$ref": "AccountTicket"
-          },
-          "id": "analytics.provisioning.createAccountTicket",
-          "description": "Creates an account ticket."
-        }
-      }
+    "basePath": "/analytics/v3/",
+    "baseUrl": "https://www.googleapis.com/analytics/v3/",
+    "batchPath": "batch/analytics/v3",
+    "description": "Views and manages your Google Analytics data.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://developers.google.com/analytics/",
+    "etag": "\"9eZ1uxVRThTDhLJCZHhqs3eQWz4/o_TVyaWurnALX6ZIQ952-U5m22Y\"",
+    "icons": {
+        "x16": "https://www.google.com/images/icons/product/analytics-16.png",
+        "x32": "https://www.google.com/images/icons/product/analytics-32.png"
     },
-    "management": {
-      "resources": {
-        "accountSummaries": {
-          "methods": {
-            "list": {
-              "parameters": {
-                "start-index": {
-                  "location": "query",
-                  "format": "int32",
-                  "type": "integer",
-                  "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
-                  "minimum": "1"
-                },
-                "max-results": {
-                  "location": "query",
-                  "description": "The maximum number of account summaries to include in this response, where the largest acceptable value is 1000.",
-                  "type": "integer",
-                  "format": "int32"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "id": "analytics.management.accountSummaries.list",
-              "httpMethod": "GET",
-              "description": "Lists account summaries (lightweight tree comprised of accounts/properties/profiles) to which the user has access.",
-              "path": "management/accountSummaries",
-              "response": {
-                "$ref": "AccountSummaries"
-              }
-            }
-          }
-        },
-        "goals": {
-          "methods": {
-            "get": {
-              "id": "analytics.management.goals.get",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "parameters": {
-                "goalId": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "Goal ID to retrieve the goal for."
-                },
-                "accountId": {
-                  "required": true,
-                  "description": "Account ID to retrieve the goal for.",
-                  "type": "string",
-                  "location": "path"
-                },
-                "webPropertyId": {
-                  "location": "path",
-                  "required": true,
-                  "description": "Web property ID to retrieve the goal for.",
-                  "type": "string"
-                },
-                "profileId": {
-                  "description": "View (Profile) ID to retrieve the goal for.",
-                  "location": "path",
-                  "type": "string",
-                  "required": true
-                }
-              },
-              "httpMethod": "GET",
-              "description": "Gets a goal to which the user has access.",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId",
-                "goalId"
-              ],
-              "response": {
-                "$ref": "Goal"
-              }
-            },
-            "insert": {
-              "parameters": {
-                "accountId": {
-                  "location": "path",
-                  "required": true,
-                  "description": "Account ID to create the goal for.",
-                  "type": "string"
-                },
-                "profileId": {
-                  "description": "View (Profile) ID to create the goal for.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                },
-                "webPropertyId": {
-                  "description": "Web property ID to create the goal for.",
-                  "required": true,
-                  "location": "path",
-                  "type": "string"
-                }
-              },
-              "id": "analytics.management.goals.insert",
-              "description": "Create a new goal.",
-              "request": {
-                "$ref": "Goal"
-              },
-              "response": {
-                "$ref": "Goal"
-              },
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId"
-              ],
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals"
-            },
-            "update": {
-              "parameters": {
-                "goalId": {
-                  "description": "Index of the goal to be updated.",
-                  "location": "path",
-                  "required": true,
-                  "type": "string"
-                },
-                "accountId": {
-                  "type": "string",
-                  "description": "Account ID to update the goal.",
-                  "location": "path",
-                  "required": true
-                },
-                "profileId": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "View (Profile) ID to update the goal."
-                },
-                "webPropertyId": {
-                  "required": true,
-                  "description": "Web property ID to update the goal.",
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}",
-              "response": {
-                "$ref": "Goal"
-              },
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId",
-                "goalId"
-              ],
-              "id": "analytics.management.goals.update",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "httpMethod": "PUT",
-              "request": {
-                "$ref": "Goal"
-              },
-              "description": "Updates an existing goal."
-            },
-            "list": {
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "response": {
-                "$ref": "Goals"
-              },
-              "description": "Lists goals to which the user has access.",
-              "id": "analytics.management.goals.list",
-              "parameters": {
-                "webPropertyId": {
-                  "type": "string",
-                  "description": "Web property ID to retrieve goals for. Can either be a specific web property ID or '~all', which refers to all the web properties that user has access to.",
-                  "location": "path",
-                  "required": true
-                },
-                "profileId": {
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "description": "View (Profile) ID to retrieve goals for. Can either be a specific view (profile) ID or '~all', which refers to all the views (profiles) that user has access to."
-                },
-                "start-index": {
-                  "minimum": "1",
-                  "type": "integer",
-                  "location": "query",
-                  "description": "An index of the first goal to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
-                  "format": "int32"
-                },
-                "max-results": {
-                  "format": "int32",
-                  "location": "query",
-                  "description": "The maximum number of goals to include in this response.",
-                  "type": "integer"
-                },
-                "accountId": {
-                  "type": "string",
-                  "location": "path",
-                  "description": "Account ID to retrieve goals for. Can either be a specific account ID or '~all', which refers to all the accounts that user has access to.",
-                  "required": true
-                }
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals",
-              "httpMethod": "GET"
-            },
-            "patch": {
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId",
-                "goalId"
-              ],
-              "request": {
-                "$ref": "Goal"
-              },
-              "httpMethod": "PATCH",
-              "description": "Updates an existing goal. This method supports patch semantics.",
-              "parameters": {
-                "profileId": {
-                  "type": "string",
-                  "description": "View (Profile) ID to update the goal.",
-                  "location": "path",
-                  "required": true
-                },
-                "goalId": {
-                  "required": true,
-                  "description": "Index of the goal to be updated.",
-                  "location": "path",
-                  "type": "string"
-                },
-                "accountId": {
-                  "type": "string",
-                  "location": "path",
-                  "description": "Account ID to update the goal.",
-                  "required": true
-                },
-                "webPropertyId": {
-                  "type": "string",
-                  "required": true,
-                  "location": "path",
-                  "description": "Web property ID to update the goal."
-                }
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}",
-              "response": {
-                "$ref": "Goal"
-              },
-              "id": "analytics.management.goals.patch",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ]
-            }
-          }
-        },
-        "webproperties": {
-          "methods": {
-            "insert": {
-              "request": {
-                "$ref": "Webproperty"
-              },
-              "parameters": {
-                "accountId": {
-                  "required": true,
-                  "type": "string",
-                  "description": "Account ID to create the web property for.",
-                  "location": "path"
-                }
-              },
-              "path": "management/accounts/{accountId}/webproperties",
-              "response": {
-                "$ref": "Webproperty"
-              },
-              "description": "Create a new property if the account has fewer than 20 properties. Web properties are visible in the Google Analytics interface only if they have at least one profile.",
-              "parameterOrder": [
-                "accountId"
-              ],
-              "id": "analytics.management.webproperties.insert",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "httpMethod": "POST"
-            },
-            "get": {
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "parameters": {
-                "webPropertyId": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "UA-[0-9]+-[0-9]+",
-                  "location": "path",
-                  "description": "ID to retrieve the web property for."
-                },
-                "accountId": {
-                  "type": "string",
-                  "description": "Account ID to retrieve the web property for.",
-                  "location": "path",
-                  "required": true,
-                  "pattern": "[0-9]+"
-                }
-              },
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId"
-              ],
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}",
-              "description": "Gets a web property to which the user has access.",
-              "id": "analytics.management.webproperties.get",
-              "response": {
-                "$ref": "Webproperty"
-              },
-              "httpMethod": "GET"
-            },
-            "patch": {
-              "parameters": {
-                "accountId": {
-                  "description": "Account ID to which the web property belongs",
-                  "required": true,
-                  "location": "path",
-                  "type": "string"
-                },
-                "webPropertyId": {
-                  "type": "string",
-                  "description": "Web property ID",
-                  "required": true,
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId"
-              ],
-              "httpMethod": "PATCH",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}",
-              "response": {
-                "$ref": "Webproperty"
-              },
-              "id": "analytics.management.webproperties.patch",
-              "request": {
-                "$ref": "Webproperty"
-              },
-              "description": "Updates an existing web property. This method supports patch semantics."
-            },
-            "list": {
-              "path": "management/accounts/{accountId}/webproperties",
-              "description": "Lists web properties to which the user has access.",
-              "response": {
-                "$ref": "Webproperties"
-              },
-              "id": "analytics.management.webproperties.list",
-              "parameterOrder": [
-                "accountId"
-              ],
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "parameters": {
-                "max-results": {
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query",
-                  "description": "The maximum number of web properties to include in this response."
-                },
-                "start-index": {
-                  "location": "query",
-                  "minimum": "1",
-                  "type": "integer",
-                  "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
-                  "format": "int32"
-                },
-                "accountId": {
-                  "required": true,
-                  "location": "path",
-                  "description": "Account ID to retrieve web properties for. Can either be a specific account ID or '~all', which refers to all the accounts that user has access to.",
-                  "type": "string"
-                }
-              }
-            },
-            "update": {
-              "description": "Updates an existing web property.",
-              "id": "analytics.management.webproperties.update",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}",
-              "parameters": {
-                "accountId": {
-                  "description": "Account ID to which the web property belongs",
-                  "location": "path",
-                  "type": "string",
-                  "required": true
-                },
-                "webPropertyId": {
-                  "location": "path",
-                  "required": true,
-                  "description": "Web property ID",
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId"
-              ],
-              "request": {
-                "$ref": "Webproperty"
-              },
-              "httpMethod": "PUT",
-              "response": {
-                "$ref": "Webproperty"
-              }
-            }
-          }
-        },
-        "experiments": {
-          "methods": {
-            "get": {
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "id": "analytics.management.experiments.get",
-              "parameters": {
-                "experimentId": {
-                  "required": true,
-                  "location": "path",
-                  "description": "Experiment ID to retrieve the experiment for.",
-                  "type": "string"
-                },
-                "profileId": {
-                  "type": "string",
-                  "required": true,
-                  "description": "View (Profile) ID to retrieve the experiment for.",
-                  "location": "path"
-                },
-                "webPropertyId": {
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "description": "Web property ID to retrieve the experiment for."
-                },
-                "accountId": {
-                  "description": "Account ID to retrieve the experiment for.",
-                  "required": true,
-                  "location": "path",
-                  "type": "string"
-                }
-              },
-              "description": "Returns an experiment to which the user has access.",
-              "response": {
-                "$ref": "Experiment"
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId",
-                "experimentId"
-              ]
-            },
-            "update": {
-              "description": "Update an existing experiment.",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId",
-                "experimentId"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "id": "analytics.management.experiments.update",
-              "httpMethod": "PUT",
-              "parameters": {
-                "accountId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "Account ID of the experiment to update."
-                },
-                "profileId": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "description": "View (Profile) ID of the experiment to update."
-                },
-                "experimentId": {
-                  "description": "Experiment ID of the experiment to update.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "webPropertyId": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "description": "Web property ID of the experiment to update."
-                }
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}",
-              "response": {
-                "$ref": "Experiment"
-              },
-              "request": {
-                "$ref": "Experiment"
-              }
-            },
-            "insert": {
-              "parameters": {
-                "profileId": {
-                  "location": "path",
-                  "description": "View (Profile) ID to create the experiment for.",
-                  "required": true,
-                  "type": "string"
-                },
-                "webPropertyId": {
-                  "type": "string",
-                  "required": true,
-                  "location": "path",
-                  "description": "Web property ID to create the experiment for."
-                },
-                "accountId": {
-                  "type": "string",
-                  "required": true,
-                  "description": "Account ID to create the experiment for.",
-                  "location": "path"
-                }
-              },
-              "request": {
-                "$ref": "Experiment"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId"
-              ],
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments",
-              "httpMethod": "POST",
-              "description": "Create a new experiment.",
-              "response": {
-                "$ref": "Experiment"
-              },
-              "id": "analytics.management.experiments.insert"
-            },
-            "delete": {
-              "parameters": {
-                "accountId": {
-                  "type": "string",
-                  "required": true,
-                  "description": "Account ID to which the experiment belongs",
-                  "location": "path"
-                },
-                "experimentId": {
-                  "location": "path",
-                  "description": "ID of the experiment to delete",
-                  "type": "string",
-                  "required": true
-                },
-                "profileId": {
-                  "type": "string",
-                  "required": true,
-                  "description": "View (Profile) ID to which the experiment belongs",
-                  "location": "path"
-                },
-                "webPropertyId": {
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "description": "Web property ID to which the experiment belongs"
-                }
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId",
-                "experimentId"
-              ],
-              "id": "analytics.management.experiments.delete",
-              "description": "Delete an experiment.",
-              "httpMethod": "DELETE",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.edit"
-              ]
-            },
-            "patch": {
-              "request": {
-                "$ref": "Experiment"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId",
-                "experimentId"
-              ],
-              "description": "Update an existing experiment. This method supports patch semantics.",
-              "httpMethod": "PATCH",
-              "parameters": {
-                "experimentId": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "Experiment ID of the experiment to update."
-                },
-                "accountId": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "description": "Account ID of the experiment to update."
-                },
-                "webPropertyId": {
-                  "type": "string",
-                  "location": "path",
-                  "description": "Web property ID of the experiment to update.",
-                  "required": true
-                },
-                "profileId": {
-                  "required": true,
-                  "type": "string",
-                  "description": "View (Profile) ID of the experiment to update.",
-                  "location": "path"
-                }
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}",
-              "id": "analytics.management.experiments.patch",
-              "response": {
-                "$ref": "Experiment"
-              }
-            },
-            "list": {
-              "parameters": {
-                "accountId": {
-                  "description": "Account ID to retrieve experiments for.",
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "pattern": "\\d+"
-                },
-                "start-index": {
-                  "minimum": "1",
-                  "description": "An index of the first experiment to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
-                  "location": "query",
-                  "format": "int32",
-                  "type": "integer"
-                },
-                "max-results": {
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query",
-                  "description": "The maximum number of experiments to include in this response."
-                },
-                "profileId": {
-                  "pattern": "\\d+",
-                  "type": "string",
-                  "description": "View (Profile) ID to retrieve experiments for.",
-                  "location": "path",
-                  "required": true
-                },
-                "webPropertyId": {
-                  "location": "path",
-                  "required": true,
-                  "pattern": "UA-(\\d+)-(\\d+)",
-                  "type": "string",
-                  "description": "Web property ID to retrieve experiments for."
-                }
-              },
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "id": "analytics.management.experiments.list",
-              "response": {
-                "$ref": "Experiments"
-              },
-              "description": "Lists experiments to which the user has access.",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments",
-              "httpMethod": "GET"
-            }
-          }
-        },
-        "filters": {
-          "methods": {
-            "get": {
-              "httpMethod": "GET",
-              "id": "analytics.management.filters.get",
-              "parameterOrder": [
-                "accountId",
-                "filterId"
-              ],
-              "description": "Returns filters to which the user has access.",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "response": {
-                "$ref": "Filter"
-              },
-              "parameters": {
-                "accountId": {
-                  "required": true,
-                  "description": "Account ID to retrieve filters for.",
-                  "type": "string",
-                  "location": "path"
-                },
-                "filterId": {
-                  "description": "Filter ID to retrieve filters for.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                }
-              },
-              "path": "management/accounts/{accountId}/filters/{filterId}"
-            },
-            "list": {
-              "description": "Lists all filters for an account",
-              "response": {
-                "$ref": "Filters"
-              },
-              "parameterOrder": [
-                "accountId"
-              ],
-              "parameters": {
-                "max-results": {
-                  "description": "The maximum number of filters to include in this response.",
-                  "location": "query",
-                  "format": "int32",
-                  "type": "integer"
-                },
-                "accountId": {
-                  "type": "string",
-                  "required": true,
-                  "pattern": "\\d+",
-                  "location": "path",
-                  "description": "Account ID to retrieve filters for."
-                },
-                "start-index": {
-                  "type": "integer",
-                  "minimum": "1",
-                  "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
-                  "location": "query",
-                  "format": "int32"
-                }
-              },
-              "httpMethod": "GET",
-              "id": "analytics.management.filters.list",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "path": "management/accounts/{accountId}/filters"
-            },
-            "delete": {
-              "response": {
-                "$ref": "Filter"
-              },
-              "parameterOrder": [
-                "accountId",
-                "filterId"
-              ],
-              "description": "Delete a filter.",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "httpMethod": "DELETE",
-              "path": "management/accounts/{accountId}/filters/{filterId}",
-              "parameters": {
-                "filterId": {
-                  "location": "path",
-                  "type": "string",
-                  "description": "ID of the filter to be deleted.",
-                  "required": true
-                },
-                "accountId": {
-                  "type": "string",
-                  "description": "Account ID to delete the filter for.",
-                  "required": true,
-                  "location": "path"
-                }
-              },
-              "id": "analytics.management.filters.delete"
-            },
-            "insert": {
-              "response": {
-                "$ref": "Filter"
-              },
-              "path": "management/accounts/{accountId}/filters",
-              "description": "Create a new filter.",
-              "parameterOrder": [
-                "accountId"
-              ],
-              "parameters": {
-                "accountId": {
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "description": "Account ID to create filter for."
-                }
-              },
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "id": "analytics.management.filters.insert",
-              "request": {
-                "$ref": "Filter"
-              }
-            },
-            "update": {
-              "id": "analytics.management.filters.update",
-              "request": {
-                "$ref": "Filter"
-              },
-              "description": "Updates an existing filter.",
-              "parameters": {
-                "accountId": {
-                  "required": true,
-                  "location": "path",
-                  "description": "Account ID to which the filter belongs.",
-                  "type": "string"
-                },
-                "filterId": {
-                  "type": "string",
-                  "required": true,
-                  "location": "path",
-                  "description": "ID of the filter to be updated."
-                }
-              },
-              "path": "management/accounts/{accountId}/filters/{filterId}",
-              "httpMethod": "PUT",
-              "parameterOrder": [
-                "accountId",
-                "filterId"
-              ],
-              "response": {
-                "$ref": "Filter"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ]
-            },
-            "patch": {
-              "id": "analytics.management.filters.patch",
-              "description": "Updates an existing filter. This method supports patch semantics.",
-              "request": {
-                "$ref": "Filter"
-              },
-              "parameters": {
-                "accountId": {
-                  "location": "path",
-                  "type": "string",
-                  "description": "Account ID to which the filter belongs.",
-                  "required": true
-                },
-                "filterId": {
-                  "description": "ID of the filter to be updated.",
-                  "location": "path",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "response": {
-                "$ref": "Filter"
-              },
-              "httpMethod": "PATCH",
-              "parameterOrder": [
-                "accountId",
-                "filterId"
-              ],
-              "path": "management/accounts/{accountId}/filters/{filterId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ]
-            }
-          }
-        },
-        "segments": {
-          "methods": {
-            "list": {
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "description": "Lists segments to which the user has access.",
-              "parameters": {
-                "max-results": {
-                  "location": "query",
-                  "format": "int32",
-                  "description": "The maximum number of segments to include in this response.",
-                  "type": "integer"
-                },
-                "start-index": {
-                  "location": "query",
-                  "description": "An index of the first segment to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
-                  "minimum": "1",
-                  "type": "integer",
-                  "format": "int32"
-                }
-              },
-              "path": "management/segments",
-              "response": {
-                "$ref": "Segments"
-              },
-              "id": "analytics.management.segments.list",
-              "httpMethod": "GET"
-            }
-          }
-        },
-        "webPropertyAdWordsLinks": {
-          "methods": {
-            "patch": {
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks/{webPropertyAdWordsLinkId}",
-              "httpMethod": "PATCH",
-              "description": "Updates an existing webProperty-Google Ads link. This method supports patch semantics.",
-              "id": "analytics.management.webPropertyAdWordsLinks.patch",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "webPropertyAdWordsLinkId"
-              ],
-              "response": {
-                "$ref": "EntityAdWordsLink"
-              },
-              "parameters": {
-                "webPropertyAdWordsLinkId": {
-                  "type": "string",
-                  "location": "path",
-                  "description": "Web property-Google Ads link ID.",
-                  "required": true
-                },
-                "accountId": {
-                  "description": "ID of the account which the given web property belongs to.",
-                  "location": "path",
-                  "required": true,
-                  "type": "string"
-                },
-                "webPropertyId": {
-                  "description": "Web property ID to retrieve the Google Ads link for.",
-                  "location": "path",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "request": {
-                "$ref": "EntityAdWordsLink"
-              }
-            },
-            "list": {
-              "response": {
-                "$ref": "EntityAdWordsLinks"
-              },
-              "description": "Lists webProperty-Google Ads links for a given web property.",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks",
-              "parameters": {
-                "webPropertyId": {
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "description": "Web property ID to retrieve the Google Ads links for."
-                },
-                "start-index": {
-                  "description": "An index of the first webProperty-Google Ads link to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
-                  "location": "query",
-                  "type": "integer",
-                  "minimum": "1",
-                  "format": "int32"
-                },
-                "accountId": {
-                  "pattern": "\\d+",
-                  "type": "string",
-                  "required": true,
-                  "description": "ID of the account which the given web property belongs to.",
-                  "location": "path"
-                },
-                "max-results": {
-                  "location": "query",
-                  "description": "The maximum number of webProperty-Google Ads links to include in this response.",
-                  "format": "int32",
-                  "type": "integer"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId"
-              ],
-              "id": "analytics.management.webPropertyAdWordsLinks.list",
-              "httpMethod": "GET"
-            },
-            "get": {
-              "id": "analytics.management.webPropertyAdWordsLinks.get",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "webPropertyAdWordsLinkId"
-              ],
-              "description": "Returns a web property-Google Ads link to which the user has access.",
-              "httpMethod": "GET",
-              "parameters": {
-                "webPropertyId": {
-                  "description": "Web property ID to retrieve the Google Ads link for.",
-                  "type": "string",
-                  "required": true,
-                  "location": "path"
-                },
-                "accountId": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "description": "ID of the account which the given web property belongs to."
-                },
-                "webPropertyAdWordsLinkId": {
-                  "description": "Web property-Google Ads link ID.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "response": {
-                "$ref": "EntityAdWordsLink"
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks/{webPropertyAdWordsLinkId}"
-            },
-            "update": {
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "webPropertyAdWordsLinkId"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "description": "Updates an existing webProperty-Google Ads link.",
-              "response": {
-                "$ref": "EntityAdWordsLink"
-              },
-              "parameters": {
-                "accountId": {
-                  "description": "ID of the account which the given web property belongs to.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "webPropertyId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "Web property ID to retrieve the Google Ads link for."
-                },
-                "webPropertyAdWordsLinkId": {
-                  "description": "Web property-Google Ads link ID.",
-                  "location": "path",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "id": "analytics.management.webPropertyAdWordsLinks.update",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks/{webPropertyAdWordsLinkId}",
-              "httpMethod": "PUT",
-              "request": {
-                "$ref": "EntityAdWordsLink"
-              }
-            },
-            "delete": {
-              "httpMethod": "DELETE",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "webPropertyAdWordsLinkId"
-              ],
-              "parameters": {
-                "webPropertyAdWordsLinkId": {
-                  "required": true,
-                  "description": "Web property Google Ads link ID.",
-                  "location": "path",
-                  "type": "string"
-                },
-                "accountId": {
-                  "description": "ID of the account which the given web property belongs to.",
-                  "location": "path",
-                  "type": "string",
-                  "required": true
-                },
-                "webPropertyId": {
-                  "description": "Web property ID to delete the Google Ads link for.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks/{webPropertyAdWordsLinkId}",
-              "id": "analytics.management.webPropertyAdWordsLinks.delete",
-              "description": "Deletes a web property-Google Ads link.",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ]
-            },
-            "insert": {
-              "parameters": {
-                "accountId": {
-                  "description": "ID of the Google Analytics account to create the link for.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "webPropertyId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "Web property ID to create the link for."
-                }
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "description": "Creates a webProperty-Google Ads link.",
-              "request": {
-                "$ref": "EntityAdWordsLink"
-              },
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId"
-              ],
-              "httpMethod": "POST",
-              "id": "analytics.management.webPropertyAdWordsLinks.insert",
-              "response": {
-                "$ref": "EntityAdWordsLink"
-              }
-            }
-          }
-        },
-        "customMetrics": {
-          "methods": {
-            "patch": {
-              "parameters": {
-                "accountId": {
-                  "type": "string",
-                  "required": true,
-                  "description": "Account ID for the custom metric to update.",
-                  "location": "path"
-                },
-                "ignoreCustomDataSourceLinks": {
-                  "location": "query",
-                  "description": "Force the update and ignore any warnings related to the custom metric being linked to a custom data source / data set.",
-                  "type": "boolean",
-                  "default": "false"
-                },
-                "webPropertyId": {
-                  "description": "Web property ID for the custom metric to update.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                },
-                "customMetricId": {
-                  "description": "Custom metric ID for the custom metric to update.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customMetrics/{customMetricId}",
-              "httpMethod": "PATCH",
-              "description": "Updates an existing custom metric. This method supports patch semantics.",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "customMetricId"
-              ],
-              "id": "analytics.management.customMetrics.patch",
-              "request": {
-                "$ref": "CustomMetric"
-              },
-              "response": {
-                "$ref": "CustomMetric"
-              }
-            },
-            "get": {
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customMetrics/{customMetricId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "customMetricId"
-              ],
-              "description": "Get a custom metric to which the user has access.",
-              "id": "analytics.management.customMetrics.get",
-              "response": {
-                "$ref": "CustomMetric"
-              },
-              "parameters": {
-                "customMetricId": {
-                  "location": "path",
-                  "description": "The ID of the custom metric to retrieve.",
-                  "required": true,
-                  "type": "string"
-                },
-                "accountId": {
-                  "description": "Account ID for the custom metric to retrieve.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                },
-                "webPropertyId": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "description": "Web property ID for the custom metric to retrieve."
-                }
-              }
-            },
-            "list": {
-              "httpMethod": "GET",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customMetrics",
-              "id": "analytics.management.customMetrics.list",
-              "response": {
-                "$ref": "CustomMetrics"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "description": "Lists custom metrics to which the user has access.",
-              "parameters": {
-                "max-results": {
-                  "location": "query",
-                  "description": "The maximum number of custom metrics to include in this response.",
-                  "type": "integer",
-                  "format": "int32"
-                },
-                "accountId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "Account ID for the custom metrics to retrieve."
-                },
-                "start-index": {
-                  "type": "integer",
-                  "minimum": "1",
-                  "format": "int32",
-                  "location": "query",
-                  "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter."
-                },
-                "webPropertyId": {
-                  "location": "path",
-                  "description": "Web property ID for the custom metrics to retrieve.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId"
-              ]
-            },
-            "update": {
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customMetrics/{customMetricId}",
-              "id": "analytics.management.customMetrics.update",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "response": {
-                "$ref": "CustomMetric"
-              },
-              "request": {
-                "$ref": "CustomMetric"
-              },
-              "description": "Updates an existing custom metric.",
-              "httpMethod": "PUT",
-              "parameters": {
-                "customMetricId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "Custom metric ID for the custom metric to update."
-                },
-                "accountId": {
-                  "type": "string",
-                  "required": true,
-                  "location": "path",
-                  "description": "Account ID for the custom metric to update."
-                },
-                "ignoreCustomDataSourceLinks": {
-                  "description": "Force the update and ignore any warnings related to the custom metric being linked to a custom data source / data set.",
-                  "default": "false",
-                  "location": "query",
-                  "type": "boolean"
-                },
-                "webPropertyId": {
-                  "location": "path",
-                  "required": true,
-                  "description": "Web property ID for the custom metric to update.",
-                  "type": "string"
-                }
-              },
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "customMetricId"
-              ]
-            },
-            "insert": {
-              "request": {
-                "$ref": "CustomMetric"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId"
-              ],
-              "id": "analytics.management.customMetrics.insert",
-              "parameters": {
-                "webPropertyId": {
-                  "description": "Web property ID for the custom dimension to create.",
-                  "required": true,
-                  "location": "path",
-                  "type": "string"
-                },
-                "accountId": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "description": "Account ID for the custom metric to create."
-                }
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customMetrics",
-              "response": {
-                "$ref": "CustomMetric"
-              },
-              "description": "Create a new custom metric."
-            }
-          }
-        },
-        "profileUserLinks": {
-          "methods": {
-            "insert": {
-              "httpMethod": "POST",
-              "request": {
-                "$ref": "EntityUserLink"
-              },
-              "description": "Adds a new user to the given view (profile).",
-              "id": "analytics.management.profileUserLinks.insert",
-              "response": {
-                "$ref": "EntityUserLink"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.manage.users"
-              ],
-              "parameters": {
-                "accountId": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "description": "Account ID to create the user link for."
-                },
-                "profileId": {
-                  "type": "string",
-                  "description": "View (Profile) ID to create the user link for.",
-                  "location": "path",
-                  "required": true
-                },
-                "webPropertyId": {
-                  "description": "Web Property ID to create the user link for.",
-                  "location": "path",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId"
-              ],
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks"
-            },
-            "delete": {
-              "httpMethod": "DELETE",
-              "description": "Removes a user from the given view (profile).",
-              "id": "analytics.management.profileUserLinks.delete",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks/{linkId}",
-              "parameters": {
-                "linkId": {
-                  "description": "Link ID to delete the user link for.",
-                  "type": "string",
-                  "required": true,
-                  "location": "path"
-                },
-                "accountId": {
-                  "type": "string",
-                  "description": "Account ID to delete the user link for.",
-                  "required": true,
-                  "location": "path"
-                },
-                "webPropertyId": {
-                  "description": "Web Property ID to delete the user link for.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                },
-                "profileId": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "description": "View (Profile) ID to delete the user link for."
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.manage.users"
-              ],
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId",
-                "linkId"
-              ]
-            },
-            "list": {
-              "response": {
-                "$ref": "EntityUserLinks"
-              },
-              "id": "analytics.management.profileUserLinks.list",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId"
-              ],
-              "description": "Lists profile-user links for a given view (profile).",
-              "parameters": {
-                "profileId": {
-                  "description": "View (Profile) ID to retrieve the profile-user links for. Can either be a specific profile ID or '~all', which refers to all the profiles that user has access to.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                },
-                "webPropertyId": {
-                  "location": "path",
-                  "required": true,
-                  "description": "Web Property ID which the given view (profile) belongs to. Can either be a specific web property ID or '~all', which refers to all the web properties that user has access to.",
-                  "type": "string"
-                },
-                "accountId": {
-                  "type": "string",
-                  "description": "Account ID which the given view (profile) belongs to.",
-                  "required": true,
-                  "location": "path"
-                },
-                "max-results": {
-                  "format": "int32",
-                  "location": "query",
-                  "description": "The maximum number of profile-user links to include in this response.",
-                  "type": "integer"
-                },
-                "start-index": {
-                  "format": "int32",
-                  "description": "An index of the first profile-user link to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
-                  "location": "query",
-                  "minimum": "1",
-                  "type": "integer"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.manage.users",
-                "https://www.googleapis.com/auth/analytics.manage.users.readonly"
-              ],
-              "httpMethod": "GET"
-            },
-            "update": {
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId",
-                "linkId"
-              ],
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks/{linkId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.manage.users"
-              ],
-              "description": "Updates permissions for an existing user on the given view (profile).",
-              "request": {
-                "$ref": "EntityUserLink"
-              },
-              "httpMethod": "PUT",
-              "parameters": {
-                "linkId": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "description": "Link ID to update the user link for."
-                },
-                "webPropertyId": {
-                  "description": "Web Property ID to update the user link for.",
-                  "type": "string",
-                  "required": true,
-                  "location": "path"
-                },
-                "profileId": {
-                  "description": "View (Profile ID) to update the user link for.",
-                  "location": "path",
-                  "type": "string",
-                  "required": true
-                },
-                "accountId": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "description": "Account ID to update the user link for."
-                }
-              },
-              "response": {
-                "$ref": "EntityUserLink"
-              },
-              "id": "analytics.management.profileUserLinks.update"
-            }
-          }
-        },
-        "unsampledReports": {
-          "methods": {
-            "list": {
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "response": {
-                "$ref": "UnsampledReports"
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/unsampledReports",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId"
-              ],
-              "parameters": {
-                "accountId": {
-                  "description": "Account ID to retrieve unsampled reports for. Must be a specific account ID, ~all is not supported.",
-                  "location": "path",
-                  "required": true,
-                  "type": "string"
-                },
-                "webPropertyId": {
-                  "description": "Web property ID to retrieve unsampled reports for. Must be a specific web property ID, ~all is not supported.",
-                  "type": "string",
-                  "required": true,
-                  "location": "path"
-                },
-                "profileId": {
-                  "description": "View (Profile) ID to retrieve unsampled reports for. Must be a specific view (profile) ID, ~all is not supported.",
-                  "required": true,
-                  "location": "path",
-                  "type": "string"
-                },
-                "max-results": {
-                  "description": "The maximum number of unsampled reports to include in this response.",
-                  "type": "integer",
-                  "format": "int32",
-                  "location": "query"
-                },
-                "start-index": {
-                  "format": "int32",
-                  "location": "query",
-                  "description": "An index of the first unsampled report to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
-                  "type": "integer",
-                  "minimum": "1"
-                }
-              },
-              "id": "analytics.management.unsampledReports.list",
-              "httpMethod": "GET",
-              "description": "Lists unsampled reports to which the user has access."
-            },
-            "get": {
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "parameters": {
-                "unsampledReportId": {
-                  "type": "string",
-                  "description": "ID of the unsampled report to retrieve.",
-                  "required": true,
-                  "location": "path"
-                },
-                "profileId": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "description": "View (Profile) ID to retrieve unsampled report for."
-                },
-                "accountId": {
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "description": "Account ID to retrieve unsampled report for."
-                },
-                "webPropertyId": {
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "description": "Web property ID to retrieve unsampled reports for."
-                }
-              },
-              "id": "analytics.management.unsampledReports.get",
-              "response": {
-                "$ref": "UnsampledReport"
-              },
-              "description": "Returns a single unsampled report.",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId",
-                "unsampledReportId"
-              ],
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/unsampledReports/{unsampledReportId}"
-            },
-            "delete": {
-              "id": "analytics.management.unsampledReports.delete",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/unsampledReports/{unsampledReportId}",
-              "httpMethod": "DELETE",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId",
-                "unsampledReportId"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "description": "Deletes an unsampled report.",
-              "parameters": {
-                "unsampledReportId": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "ID of the unsampled report to be deleted."
-                },
-                "webPropertyId": {
-                  "location": "path",
-                  "description": "Web property ID to delete the unsampled reports for.",
-                  "required": true,
-                  "type": "string"
-                },
-                "accountId": {
-                  "required": true,
-                  "type": "string",
-                  "description": "Account ID to delete the unsampled report for.",
-                  "location": "path"
-                },
-                "profileId": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "description": "View (Profile) ID to delete the unsampled report for."
-                }
-              }
-            },
-            "insert": {
-              "request": {
-                "$ref": "UnsampledReport"
-              },
-              "httpMethod": "POST",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/unsampledReports",
-              "description": "Create a new unsampled report.",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "id": "analytics.management.unsampledReports.insert",
-              "response": {
-                "$ref": "UnsampledReport"
-              },
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId"
-              ],
-              "parameters": {
-                "profileId": {
-                  "type": "string",
-                  "required": true,
-                  "description": "View (Profile) ID to create the unsampled report for.",
-                  "location": "path"
-                },
-                "webPropertyId": {
-                  "description": "Web property ID to create the unsampled report for.",
-                  "type": "string",
-                  "required": true,
-                  "location": "path"
-                },
-                "accountId": {
-                  "description": "Account ID to create the unsampled report for.",
-                  "required": true,
-                  "location": "path",
-                  "type": "string"
-                }
-              }
-            }
-          }
-        },
-        "profileFilterLinks": {
-          "methods": {
-            "delete": {
-              "id": "analytics.management.profileFilterLinks.delete",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks/{linkId}",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId",
-                "linkId"
-              ],
-              "parameters": {
-                "profileId": {
-                  "description": "Profile ID to which the filter link belongs.",
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "pattern": "\\d+"
-                },
-                "accountId": {
-                  "pattern": "\\d+",
-                  "type": "string",
-                  "description": "Account ID to which the profile filter link belongs.",
-                  "location": "path",
-                  "required": true
-                },
-                "linkId": {
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "pattern": "\\d+:\\d+",
-                  "description": "ID of the profile filter link to delete."
-                },
-                "webPropertyId": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "pattern": "UA-(\\d+)-(\\d+)",
-                  "description": "Web property Id to which the profile filter link belongs."
-                }
-              },
-              "httpMethod": "DELETE",
-              "description": "Delete a profile filter link.",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ]
-            },
-            "list": {
-              "httpMethod": "GET",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks",
-              "parameters": {
-                "max-results": {
-                  "format": "int32",
-                  "description": "The maximum number of profile filter links to include in this response.",
-                  "location": "query",
-                  "type": "integer"
-                },
-                "webPropertyId": {
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "description": "Web property Id for profile filter links for. Can either be a specific web property ID or '~all', which refers to all the web properties that user has access to."
-                },
-                "start-index": {
-                  "location": "query",
-                  "format": "int32",
-                  "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
-                  "minimum": "1",
-                  "type": "integer"
-                },
-                "accountId": {
-                  "location": "path",
-                  "type": "string",
-                  "description": "Account ID to retrieve profile filter links for.",
-                  "pattern": "\\d+",
-                  "required": true
-                },
-                "profileId": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "description": "Profile ID to retrieve filter links for. Can either be a specific profile ID or '~all', which refers to all the profiles that user has access to."
-                }
-              },
-              "description": "Lists all profile filter links for a profile.",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId"
-              ],
-              "response": {
-                "$ref": "ProfileFilterLinks"
-              },
-              "id": "analytics.management.profileFilterLinks.list"
-            },
-            "insert": {
-              "parameters": {
-                "webPropertyId": {
-                  "type": "string",
-                  "required": true,
-                  "description": "Web property Id to create profile filter link for.",
-                  "location": "path",
-                  "pattern": "UA-(\\d+)-(\\d+)"
-                },
-                "accountId": {
-                  "type": "string",
-                  "description": "Account ID to create profile filter link for.",
-                  "pattern": "\\d+",
-                  "required": true,
-                  "location": "path"
-                },
-                "profileId": {
-                  "type": "string",
-                  "required": true,
-                  "location": "path",
-                  "pattern": "\\d+",
-                  "description": "Profile ID to create filter link for."
-                }
-              },
-              "httpMethod": "POST",
-              "description": "Create a new profile filter link.",
-              "request": {
-                "$ref": "ProfileFilterLink"
-              },
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId"
-              ],
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks",
-              "id": "analytics.management.profileFilterLinks.insert",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "response": {
-                "$ref": "ProfileFilterLink"
-              }
-            },
-            "update": {
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "httpMethod": "PUT",
-              "description": "Update an existing profile filter link.",
-              "parameters": {
-                "webPropertyId": {
-                  "location": "path",
-                  "description": "Web property Id to which profile filter link belongs",
-                  "pattern": "UA-(\\d+)-(\\d+)",
-                  "type": "string",
-                  "required": true
-                },
-                "linkId": {
-                  "required": true,
-                  "description": "ID of the profile filter link to be updated.",
-                  "location": "path",
-                  "type": "string",
-                  "pattern": "\\d+:\\d+"
-                },
-                "profileId": {
-                  "type": "string",
-                  "location": "path",
-                  "pattern": "\\d+",
-                  "description": "Profile ID to which filter link belongs",
-                  "required": true
-                },
-                "accountId": {
-                  "description": "Account ID to which profile filter link belongs.",
-                  "pattern": "\\d+",
-                  "required": true,
-                  "location": "path",
-                  "type": "string"
-                }
-              },
-              "response": {
-                "$ref": "ProfileFilterLink"
-              },
-              "request": {
-                "$ref": "ProfileFilterLink"
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks/{linkId}",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId",
-                "linkId"
-              ],
-              "id": "analytics.management.profileFilterLinks.update"
-            },
-            "get": {
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "parameters": {
-                "profileId": {
-                  "pattern": "\\d+",
-                  "description": "Profile ID to retrieve filter link for.",
-                  "type": "string",
-                  "required": true,
-                  "location": "path"
-                },
-                "linkId": {
-                  "location": "path",
-                  "description": "ID of the profile filter link.",
-                  "type": "string",
-                  "required": true,
-                  "pattern": "\\d+:\\d+"
-                },
-                "webPropertyId": {
-                  "location": "path",
-                  "pattern": "UA-(\\d+)-(\\d+)",
-                  "required": true,
-                  "type": "string",
-                  "description": "Web property Id to retrieve profile filter link for."
-                },
-                "accountId": {
-                  "location": "path",
-                  "description": "Account ID to retrieve profile filter link for.",
-                  "type": "string",
-                  "required": true,
-                  "pattern": "\\d+"
-                }
-              },
-              "id": "analytics.management.profileFilterLinks.get",
-              "description": "Returns a single profile filter link.",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId",
-                "linkId"
-              ],
-              "response": {
-                "$ref": "ProfileFilterLink"
-              },
-              "httpMethod": "GET",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks/{linkId}"
-            },
-            "patch": {
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId",
-                "linkId"
-              ],
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks/{linkId}",
-              "description": "Update an existing profile filter link. This method supports patch semantics.",
-              "request": {
-                "$ref": "ProfileFilterLink"
-              },
-              "response": {
-                "$ref": "ProfileFilterLink"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "parameters": {
-                "webPropertyId": {
-                  "description": "Web property Id to which profile filter link belongs",
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "UA-(\\d+)-(\\d+)"
-                },
-                "accountId": {
-                  "description": "Account ID to which profile filter link belongs.",
-                  "location": "path",
-                  "pattern": "\\d+",
-                  "type": "string",
-                  "required": true
-                },
-                "linkId": {
-                  "pattern": "\\d+:\\d+",
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "ID of the profile filter link to be updated."
-                },
-                "profileId": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "description": "Profile ID to which filter link belongs",
-                  "pattern": "\\d+"
-                }
-              },
-              "httpMethod": "PATCH",
-              "id": "analytics.management.profileFilterLinks.patch"
-            }
-          }
-        },
-        "profiles": {
-          "methods": {
-            "update": {
-              "response": {
-                "$ref": "Profile"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "id": "analytics.management.profiles.update",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}",
-              "httpMethod": "PUT",
-              "request": {
-                "$ref": "Profile"
-              },
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId"
-              ],
-              "parameters": {
-                "webPropertyId": {
-                  "type": "string",
-                  "required": true,
-                  "location": "path",
-                  "description": "Web property ID to which the view (profile) belongs"
-                },
-                "profileId": {
-                  "location": "path",
-                  "description": "ID of the view (profile) to be updated.",
-                  "type": "string",
-                  "required": true
-                },
-                "accountId": {
-                  "location": "path",
-                  "required": true,
-                  "description": "Account ID to which the view (profile) belongs",
-                  "type": "string"
-                }
-              },
-              "description": "Updates an existing view (profile)."
-            },
-            "delete": {
-              "id": "analytics.management.profiles.delete",
-              "parameters": {
-                "accountId": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "Account ID to delete the view (profile) for."
-                },
-                "profileId": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "description": "ID of the view (profile) to be deleted."
-                },
-                "webPropertyId": {
-                  "type": "string",
-                  "required": true,
-                  "description": "Web property ID to delete the view (profile) for.",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "httpMethod": "DELETE",
-              "description": "Deletes a view (profile).",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId"
-              ]
-            },
-            "get": {
-              "description": "Gets a view (profile) to which the user has access.",
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "parameters": {
-                "profileId": {
-                  "pattern": "[0-9]+",
-                  "type": "string",
-                  "location": "path",
-                  "description": "View (Profile) ID to retrieve the view (profile) for.",
-                  "required": true
-                },
-                "accountId": {
-                  "type": "string",
-                  "description": "Account ID to retrieve the view (profile) for.",
-                  "pattern": "[0-9]+",
-                  "required": true,
-                  "location": "path"
-                },
-                "webPropertyId": {
-                  "pattern": "UA-[0-9]+-[0-9]+",
-                  "description": "Web property ID to retrieve the view (profile) for.",
-                  "location": "path",
-                  "type": "string",
-                  "required": true
-                }
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId"
-              ],
-              "id": "analytics.management.profiles.get",
-              "response": {
-                "$ref": "Profile"
-              }
-            },
-            "list": {
-              "description": "Lists views (profiles) to which the user has access.",
-              "response": {
-                "$ref": "Profiles"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "httpMethod": "GET",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles",
-              "id": "analytics.management.profiles.list",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId"
-              ],
-              "parameters": {
-                "start-index": {
-                  "format": "int32",
-                  "type": "integer",
-                  "minimum": "1",
-                  "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
-                  "location": "query"
-                },
-                "accountId": {
-                  "location": "path",
-                  "description": "Account ID for the view (profiles) to retrieve. Can either be a specific account ID or '~all', which refers to all the accounts to which the user has access.",
-                  "required": true,
-                  "type": "string"
-                },
-                "max-results": {
-                  "description": "The maximum number of views (profiles) to include in this response.",
-                  "location": "query",
-                  "format": "int32",
-                  "type": "integer"
-                },
-                "webPropertyId": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "Web property ID for the views (profiles) to retrieve. Can either be a specific web property ID or '~all', which refers to all the web properties to which the user has access."
-                }
-              }
-            },
-            "patch": {
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "profileId"
-              ],
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}",
-              "parameters": {
-                "webPropertyId": {
-                  "required": true,
-                  "description": "Web property ID to which the view (profile) belongs",
-                  "location": "path",
-                  "type": "string"
-                },
-                "accountId": {
-                  "required": true,
-                  "type": "string",
-                  "description": "Account ID to which the view (profile) belongs",
-                  "location": "path"
-                },
-                "profileId": {
-                  "location": "path",
-                  "description": "ID of the view (profile) to be updated.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "response": {
-                "$ref": "Profile"
-              },
-              "httpMethod": "PATCH",
-              "id": "analytics.management.profiles.patch",
-              "description": "Updates an existing view (profile). This method supports patch semantics.",
-              "request": {
-                "$ref": "Profile"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ]
-            },
-            "insert": {
-              "id": "analytics.management.profiles.insert",
-              "parameters": {
-                "webPropertyId": {
-                  "required": true,
-                  "type": "string",
-                  "description": "Web property ID to create the view (profile) for.",
-                  "location": "path"
-                },
-                "accountId": {
-                  "location": "path",
-                  "description": "Account ID to create the view (profile) for.",
-                  "type": "string",
-                  "required": true
-                }
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles",
-              "request": {
-                "$ref": "Profile"
-              },
-              "response": {
-                "$ref": "Profile"
-              },
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "description": "Create a new view (profile).",
-              "httpMethod": "POST"
-            }
-          }
-        },
-        "uploads": {
-          "methods": {
-            "deleteUploadData": {
-              "description": "Delete data associated with a previous upload.",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "parameters": {
-                "accountId": {
-                  "location": "path",
-                  "pattern": "\\d+",
-                  "required": true,
-                  "type": "string",
-                  "description": "Account Id for the uploads to be deleted."
-                },
-                "webPropertyId": {
-                  "pattern": "UA-(\\d+)-(\\d+)",
-                  "type": "string",
-                  "required": true,
-                  "description": "Web property Id for the uploads to be deleted.",
-                  "location": "path"
-                },
-                "customDataSourceId": {
-                  "pattern": ".{22}",
-                  "type": "string",
-                  "location": "path",
-                  "description": "Custom data source Id for the uploads to be deleted.",
-                  "required": true
-                }
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/deleteUploadData",
-              "httpMethod": "POST",
-              "id": "analytics.management.uploads.deleteUploadData",
-              "request": {
-                "$ref": "AnalyticsDataimportDeleteUploadDataRequest"
-              },
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "customDataSourceId"
-              ]
-            },
-            "uploadData": {
-              "httpMethod": "POST",
-              "id": "analytics.management.uploads.uploadData",
-              "response": {
-                "$ref": "Upload"
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "supportsMediaUpload": true,
-              "mediaUpload": {
-                "protocols": {
-                  "resumable": {
-                    "path": "/resumable/upload/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads",
-                    "multipart": true
-                  },
-                  "simple": {
-                    "path": "/upload/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads",
-                    "multipart": true
-                  }
-                },
-                "accept": [
-                  "application/octet-stream"
-                ],
-                "maxSize": "1GB"
-              },
-              "description": "Upload data for a custom data source.",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "customDataSourceId"
-              ],
-              "parameters": {
-                "accountId": {
-                  "location": "path",
-                  "required": true,
-                  "pattern": "\\d+",
-                  "description": "Account Id associated with the upload.",
-                  "type": "string"
-                },
-                "customDataSourceId": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "description": "Custom data source Id to which the data being uploaded belongs."
-                },
-                "webPropertyId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "pattern": "UA-\\d+-\\d+",
-                  "description": "Web property UA-string associated with the upload."
-                }
-              }
-            },
-            "list": {
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads",
-              "response": {
-                "$ref": "Uploads"
-              },
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "customDataSourceId"
-              ],
-              "description": "List uploads to which the user has access.",
-              "id": "analytics.management.uploads.list",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "httpMethod": "GET",
-              "parameters": {
-                "accountId": {
-                  "description": "Account Id for the uploads to retrieve.",
-                  "pattern": "\\d+",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                },
-                "webPropertyId": {
-                  "required": true,
-                  "type": "string",
-                  "description": "Web property Id for the uploads to retrieve.",
-                  "pattern": "UA-(\\d+)-(\\d+)",
-                  "location": "path"
-                },
-                "start-index": {
-                  "minimum": "1",
-                  "location": "query",
-                  "description": "A 1-based index of the first upload to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
-                  "format": "int32",
-                  "type": "integer"
-                },
-                "max-results": {
-                  "minimum": "1",
-                  "location": "query",
-                  "format": "int32",
-                  "type": "integer",
-                  "description": "The maximum number of uploads to include in this response."
-                },
-                "customDataSourceId": {
-                  "type": "string",
-                  "pattern": ".{22}",
-                  "required": true,
-                  "description": "Custom data source Id for uploads to retrieve.",
-                  "location": "path"
-                }
-              }
-            },
-            "get": {
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "httpMethod": "GET",
-              "parameters": {
-                "accountId": {
-                  "pattern": "\\d+",
-                  "required": true,
-                  "description": "Account Id for the upload to retrieve.",
-                  "type": "string",
-                  "location": "path"
-                },
-                "webPropertyId": {
-                  "required": true,
-                  "description": "Web property Id for the upload to retrieve.",
-                  "type": "string",
-                  "pattern": "UA-(\\d+)-(\\d+)",
-                  "location": "path"
-                },
-                "uploadId": {
-                  "pattern": ".{22}",
-                  "required": true,
-                  "location": "path",
-                  "description": "Upload Id to retrieve.",
-                  "type": "string"
-                },
-                "customDataSourceId": {
-                  "type": "string",
-                  "description": "Custom data source Id for upload to retrieve.",
-                  "location": "path",
-                  "pattern": ".{22}",
-                  "required": true
-                }
-              },
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "customDataSourceId",
-                "uploadId"
-              ],
-              "description": "List uploads to which the user has access.",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads/{uploadId}",
-              "response": {
-                "$ref": "Upload"
-              },
-              "id": "analytics.management.uploads.get"
-            }
-          }
-        },
-        "customDimensions": {
-          "methods": {
-            "list": {
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDimensions",
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "parameters": {
-                "webPropertyId": {
-                  "location": "path",
-                  "required": true,
-                  "description": "Web property ID for the custom dimensions to retrieve.",
-                  "type": "string"
-                },
-                "start-index": {
-                  "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
-                  "format": "int32",
-                  "location": "query",
-                  "minimum": "1",
-                  "type": "integer"
-                },
-                "accountId": {
-                  "description": "Account ID for the custom dimensions to retrieve.",
-                  "location": "path",
-                  "type": "string",
-                  "required": true
-                },
-                "max-results": {
-                  "description": "The maximum number of custom dimensions to include in this response.",
-                  "location": "query",
-                  "type": "integer",
-                  "format": "int32"
-                }
-              },
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId"
-              ],
-              "description": "Lists custom dimensions to which the user has access.",
-              "id": "analytics.management.customDimensions.list",
-              "response": {
-                "$ref": "CustomDimensions"
-              }
-            },
-            "update": {
-              "httpMethod": "PUT",
-              "id": "analytics.management.customDimensions.update",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "request": {
-                "$ref": "CustomDimension"
-              },
-              "parameters": {
-                "webPropertyId": {
-                  "type": "string",
-                  "description": "Web property ID for the custom dimension to update.",
-                  "required": true,
-                  "location": "path"
-                },
-                "customDimensionId": {
-                  "type": "string",
-                  "location": "path",
-                  "description": "Custom dimension ID for the custom dimension to update.",
-                  "required": true
-                },
-                "accountId": {
-                  "location": "path",
-                  "type": "string",
-                  "description": "Account ID for the custom dimension to update.",
-                  "required": true
-                },
-                "ignoreCustomDataSourceLinks": {
-                  "default": "false",
-                  "type": "boolean",
-                  "description": "Force the update and ignore any warnings related to the custom dimension being linked to a custom data source / data set.",
-                  "location": "query"
-                }
-              },
-              "response": {
-                "$ref": "CustomDimension"
-              },
-              "description": "Updates an existing custom dimension.",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDimensions/{customDimensionId}",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "customDimensionId"
-              ]
-            },
-            "patch": {
-              "id": "analytics.management.customDimensions.patch",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDimensions/{customDimensionId}",
-              "response": {
-                "$ref": "CustomDimension"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "customDimensionId"
-              ],
-              "parameters": {
-                "webPropertyId": {
-                  "required": true,
-                  "description": "Web property ID for the custom dimension to update.",
-                  "location": "path",
-                  "type": "string"
-                },
-                "ignoreCustomDataSourceLinks": {
-                  "location": "query",
-                  "type": "boolean",
-                  "default": "false",
-                  "description": "Force the update and ignore any warnings related to the custom dimension being linked to a custom data source / data set."
-                },
-                "customDimensionId": {
-                  "description": "Custom dimension ID for the custom dimension to update.",
-                  "location": "path",
-                  "type": "string",
-                  "required": true
-                },
-                "accountId": {
-                  "type": "string",
-                  "required": true,
-                  "location": "path",
-                  "description": "Account ID for the custom dimension to update."
-                }
-              },
-              "description": "Updates an existing custom dimension. This method supports patch semantics.",
-              "request": {
-                "$ref": "CustomDimension"
-              },
-              "httpMethod": "PATCH"
-            },
-            "insert": {
-              "parameters": {
-                "accountId": {
-                  "description": "Account ID for the custom dimension to create.",
-                  "location": "path",
-                  "required": true,
-                  "type": "string"
-                },
-                "webPropertyId": {
-                  "required": true,
-                  "location": "path",
-                  "description": "Web property ID for the custom dimension to create.",
-                  "type": "string"
-                }
-              },
-              "response": {
-                "$ref": "CustomDimension"
-              },
-              "description": "Create a new custom dimension.",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId"
-              ],
-              "id": "analytics.management.customDimensions.insert",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDimensions",
-              "request": {
-                "$ref": "CustomDimension"
-              },
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ]
-            },
-            "get": {
-              "response": {
-                "$ref": "CustomDimension"
-              },
-              "parameters": {
-                "webPropertyId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "Web property ID for the custom dimension to retrieve."
-                },
-                "accountId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "Account ID for the custom dimension to retrieve."
-                },
-                "customDimensionId": {
-                  "required": true,
-                  "description": "The ID of the custom dimension to retrieve.",
-                  "location": "path",
-                  "type": "string"
-                }
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDimensions/{customDimensionId}",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "customDimensionId"
-              ],
-              "id": "analytics.management.customDimensions.get",
-              "description": "Get a custom dimension to which the user has access.",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ]
-            }
-          }
-        },
-        "accountUserLinks": {
-          "methods": {
-            "update": {
-              "id": "analytics.management.accountUserLinks.update",
-              "httpMethod": "PUT",
-              "parameterOrder": [
-                "accountId",
-                "linkId"
-              ],
-              "description": "Updates permissions for an existing user on the given account.",
-              "request": {
-                "$ref": "EntityUserLink"
-              },
-              "path": "management/accounts/{accountId}/entityUserLinks/{linkId}",
-              "parameters": {
-                "linkId": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "Link ID to update the account-user link for."
-                },
-                "accountId": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "description": "Account ID to update the account-user link for."
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.manage.users"
-              ],
-              "response": {
-                "$ref": "EntityUserLink"
-              }
-            },
-            "insert": {
-              "httpMethod": "POST",
-              "id": "analytics.management.accountUserLinks.insert",
-              "parameters": {
-                "accountId": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "Account ID to create the user link for."
-                }
-              },
-              "path": "management/accounts/{accountId}/entityUserLinks",
-              "parameterOrder": [
-                "accountId"
-              ],
-              "response": {
-                "$ref": "EntityUserLink"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.manage.users"
-              ],
-              "request": {
-                "$ref": "EntityUserLink"
-              },
-              "description": "Adds a new user to the given account."
-            },
-            "delete": {
-              "parameterOrder": [
-                "accountId",
-                "linkId"
-              ],
-              "httpMethod": "DELETE",
-              "path": "management/accounts/{accountId}/entityUserLinks/{linkId}",
-              "description": "Removes a user from the given account.",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.manage.users"
-              ],
-              "parameters": {
-                "accountId": {
-                  "description": "Account ID to delete the user link for.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                },
-                "linkId": {
-                  "description": "Link ID to delete the user link for.",
-                  "location": "path",
-                  "type": "string",
-                  "required": true
-                }
-              },
-              "id": "analytics.management.accountUserLinks.delete"
-            },
-            "list": {
-              "httpMethod": "GET",
-              "path": "management/accounts/{accountId}/entityUserLinks",
-              "description": "Lists account-user links for a given account.",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.manage.users",
-                "https://www.googleapis.com/auth/analytics.manage.users.readonly"
-              ],
-              "parameters": {
-                "accountId": {
-                  "description": "Account ID to retrieve the user links for.",
-                  "type": "string",
-                  "required": true,
-                  "location": "path"
-                },
-                "start-index": {
-                  "type": "integer",
-                  "description": "An index of the first account-user link to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
-                  "minimum": "1",
-                  "location": "query",
-                  "format": "int32"
-                },
-                "max-results": {
-                  "description": "The maximum number of account-user links to include in this response.",
-                  "location": "query",
-                  "type": "integer",
-                  "format": "int32"
-                }
-              },
-              "id": "analytics.management.accountUserLinks.list",
-              "response": {
-                "$ref": "EntityUserLinks"
-              },
-              "parameterOrder": [
-                "accountId"
-              ]
-            }
-          }
-        },
-        "clientId": {
-          "methods": {
-            "hashClientId": {
-              "request": {
-                "$ref": "HashClientIdRequest"
-              },
-              "response": {
-                "$ref": "HashClientIdResponse"
-              },
-              "id": "analytics.management.clientId.hashClientId",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "httpMethod": "POST",
-              "path": "management/clientId:hashClientId",
-              "description": "Hashes the given Client ID."
-            }
-          }
-        },
-        "customDataSources": {
-          "methods": {
-            "list": {
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources",
-              "description": "List custom data sources to which the user has access.",
-              "response": {
-                "$ref": "CustomDataSources"
-              },
-              "parameters": {
-                "max-results": {
-                  "format": "int32",
-                  "description": "The maximum number of custom data sources to include in this response.",
-                  "location": "query",
-                  "minimum": "1",
-                  "type": "integer"
-                },
-                "start-index": {
-                  "type": "integer",
-                  "format": "int32",
-                  "description": "A 1-based index of the first custom data source to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
-                  "minimum": "1",
-                  "location": "query"
-                },
-                "accountId": {
-                  "required": true,
-                  "type": "string",
-                  "description": "Account Id for the custom data sources to retrieve.",
-                  "location": "path",
-                  "pattern": "\\d+"
-                },
-                "webPropertyId": {
-                  "pattern": "UA-(\\d+)-(\\d+)",
-                  "description": "Web property Id for the custom data sources to retrieve.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "httpMethod": "GET",
-              "id": "analytics.management.customDataSources.list"
-            }
-          }
-        },
-        "webpropertyUserLinks": {
-          "methods": {
-            "insert": {
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.manage.users"
-              ],
-              "description": "Adds a new user to the given web property.",
-              "request": {
-                "$ref": "EntityUserLink"
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks",
-              "httpMethod": "POST",
-              "response": {
-                "$ref": "EntityUserLink"
-              },
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId"
-              ],
-              "id": "analytics.management.webpropertyUserLinks.insert",
-              "parameters": {
-                "webPropertyId": {
-                  "type": "string",
-                  "required": true,
-                  "description": "Web Property ID to create the user link for.",
-                  "location": "path"
-                },
-                "accountId": {
-                  "location": "path",
-                  "description": "Account ID to create the user link for.",
-                  "required": true,
-                  "type": "string"
-                }
-              }
-            },
-            "list": {
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.manage.users",
-                "https://www.googleapis.com/auth/analytics.manage.users.readonly"
-              ],
-              "description": "Lists webProperty-user links for a given web property.",
-              "response": {
-                "$ref": "EntityUserLinks"
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks",
-              "id": "analytics.management.webpropertyUserLinks.list",
-              "httpMethod": "GET",
-              "parameters": {
-                "start-index": {
-                  "minimum": "1",
-                  "location": "query",
-                  "description": "An index of the first webProperty-user link to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
-                  "format": "int32",
-                  "type": "integer"
-                },
-                "max-results": {
-                  "description": "The maximum number of webProperty-user Links to include in this response.",
-                  "format": "int32",
-                  "location": "query",
-                  "type": "integer"
-                },
-                "webPropertyId": {
-                  "description": "Web Property ID for the webProperty-user links to retrieve. Can either be a specific web property ID or '~all', which refers to all the web properties that user has access to.",
-                  "location": "path",
-                  "type": "string",
-                  "required": true
-                },
-                "accountId": {
-                  "location": "path",
-                  "type": "string",
-                  "description": "Account ID which the given web property belongs to.",
-                  "required": true
-                }
-              },
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId"
-              ]
-            },
-            "delete": {
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks/{linkId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.manage.users"
-              ],
-              "description": "Removes a user from the given web property.",
-              "httpMethod": "DELETE",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "linkId"
-              ],
-              "id": "analytics.management.webpropertyUserLinks.delete",
-              "parameters": {
-                "webPropertyId": {
-                  "required": true,
-                  "description": "Web Property ID to delete the user link for.",
-                  "location": "path",
-                  "type": "string"
-                },
-                "accountId": {
-                  "description": "Account ID to delete the user link for.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                },
-                "linkId": {
-                  "type": "string",
-                  "description": "Link ID to delete the user link for.",
-                  "required": true,
-                  "location": "path"
-                }
-              }
-            },
-            "update": {
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks/{linkId}",
-              "request": {
-                "$ref": "EntityUserLink"
-              },
-              "response": {
-                "$ref": "EntityUserLink"
-              },
-              "parameters": {
-                "webPropertyId": {
-                  "description": "Web property ID to update the account-user link for.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                },
-                "linkId": {
-                  "description": "Link ID to update the account-user link for.",
-                  "location": "path",
-                  "type": "string",
-                  "required": true
-                },
-                "accountId": {
-                  "required": true,
-                  "location": "path",
-                  "description": "Account ID to update the account-user link for.",
-                  "type": "string"
-                }
-              },
-              "id": "analytics.management.webpropertyUserLinks.update",
-              "httpMethod": "PUT",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.manage.users"
-              ],
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "linkId"
-              ],
-              "description": "Updates permissions for an existing user on the given web property."
-            }
-          }
-        },
-        "accounts": {
-          "methods": {
-            "list": {
-              "response": {
-                "$ref": "Accounts"
-              },
-              "path": "management/accounts",
-              "description": "Lists all accounts to which the user has access.",
-              "httpMethod": "GET",
-              "id": "analytics.management.accounts.list",
-              "parameters": {
-                "max-results": {
-                  "location": "query",
-                  "format": "int32",
-                  "type": "integer",
-                  "description": "The maximum number of accounts to include in this response."
-                },
-                "start-index": {
-                  "type": "integer",
-                  "location": "query",
-                  "minimum": "1",
-                  "format": "int32",
-                  "description": "An index of the first account to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter."
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ]
-            }
-          }
-        },
-        "remarketingAudience": {
-          "methods": {
-            "list": {
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId"
-              ],
-              "httpMethod": "GET",
-              "parameters": {
-                "accountId": {
-                  "location": "path",
-                  "type": "string",
-                  "description": "The account ID of the remarketing audiences to retrieve.",
-                  "required": true
-                },
-                "start-index": {
-                  "format": "int32",
-                  "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
-                  "minimum": "1",
-                  "location": "query",
-                  "type": "integer"
-                },
-                "type": {
-                  "default": "all",
-                  "location": "query",
-                  "type": "string"
-                },
-                "max-results": {
-                  "description": "The maximum number of remarketing audiences to include in this response.",
-                  "type": "integer",
-                  "location": "query",
-                  "format": "int32"
-                },
-                "webPropertyId": {
-                  "type": "string",
-                  "location": "path",
-                  "description": "The web property ID of the remarketing audiences to retrieve.",
-                  "required": true
-                }
-              },
-              "id": "analytics.management.remarketingAudience.list",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "description": "Lists remarketing audiences to which the user has access.",
-              "response": {
-                "$ref": "RemarketingAudiences"
-              }
-            },
-            "update": {
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "request": {
-                "$ref": "RemarketingAudience"
-              },
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "remarketingAudienceId"
-              ],
-              "id": "analytics.management.remarketingAudience.update",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences/{remarketingAudienceId}",
-              "response": {
-                "$ref": "RemarketingAudience"
-              },
-              "description": "Updates an existing remarketing audience.",
-              "httpMethod": "PUT",
-              "parameters": {
-                "remarketingAudienceId": {
-                  "type": "string",
-                  "required": true,
-                  "location": "path",
-                  "description": "The ID of the remarketing audience to update."
-                },
-                "webPropertyId": {
-                  "location": "path",
-                  "description": "The web property ID of the remarketing audience to update.",
-                  "type": "string",
-                  "required": true
-                },
-                "accountId": {
-                  "required": true,
-                  "description": "The account ID of the remarketing audience to update.",
-                  "type": "string",
-                  "location": "path"
-                }
-              }
-            },
-            "insert": {
-              "id": "analytics.management.remarketingAudience.insert",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "response": {
-                "$ref": "RemarketingAudience"
-              },
-              "description": "Creates a new remarketing audience.",
-              "request": {
-                "$ref": "RemarketingAudience"
-              },
-              "parameters": {
-                "accountId": {
-                  "type": "string",
-                  "required": true,
-                  "description": "The account ID for which to create the remarketing audience.",
-                  "location": "path"
-                },
-                "webPropertyId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "Web property ID for which to create the remarketing audience."
-                }
-              },
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId"
-              ],
-              "httpMethod": "POST"
-            },
-            "delete": {
-              "httpMethod": "DELETE",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "remarketingAudienceId"
-              ],
-              "id": "analytics.management.remarketingAudience.delete",
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences/{remarketingAudienceId}",
-              "description": "Delete a remarketing audience.",
-              "parameters": {
-                "webPropertyId": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "description": "Web property ID to which the remarketing audience belongs."
-                },
-                "accountId": {
-                  "location": "path",
-                  "type": "string",
-                  "description": "Account ID to which the remarketing audience belongs.",
-                  "required": true
-                },
-                "remarketingAudienceId": {
-                  "required": true,
-                  "type": "string",
-                  "description": "The ID of the remarketing audience to delete.",
-                  "location": "path"
-                }
-              }
-            },
-            "patch": {
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "remarketingAudienceId"
-              ],
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences/{remarketingAudienceId}",
-              "response": {
-                "$ref": "RemarketingAudience"
-              },
-              "httpMethod": "PATCH",
-              "parameters": {
-                "webPropertyId": {
-                  "required": true,
-                  "location": "path",
-                  "description": "The web property ID of the remarketing audience to update.",
-                  "type": "string"
-                },
-                "accountId": {
-                  "description": "The account ID of the remarketing audience to update.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "remarketingAudienceId": {
-                  "type": "string",
-                  "required": true,
-                  "location": "path",
-                  "description": "The ID of the remarketing audience to update."
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit"
-              ],
-              "description": "Updates an existing remarketing audience. This method supports patch semantics.",
-              "request": {
-                "$ref": "RemarketingAudience"
-              },
-              "id": "analytics.management.remarketingAudience.patch"
-            },
-            "get": {
-              "parameters": {
-                "webPropertyId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "The web property ID of the remarketing audience to retrieve."
-                },
-                "accountId": {
-                  "type": "string",
-                  "location": "path",
-                  "description": "The account ID of the remarketing audience to retrieve.",
-                  "required": true
-                },
-                "remarketingAudienceId": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "The ID of the remarketing audience to retrieve."
-                }
-              },
-              "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences/{remarketingAudienceId}",
-              "httpMethod": "GET",
-              "id": "analytics.management.remarketingAudience.get",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "response": {
-                "$ref": "RemarketingAudience"
-              },
-              "description": "Gets a remarketing audience to which the user has access.",
-              "parameterOrder": [
-                "accountId",
-                "webPropertyId",
-                "remarketingAudienceId"
-              ]
-            }
-          }
-        }
-      }
-    },
-    "data": {
-      "resources": {
-        "ga": {
-          "methods": {
-            "get": {
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "response": {
-                "$ref": "GaData"
-              },
-              "httpMethod": "GET",
-              "description": "Returns Analytics data for a view (profile).",
-              "id": "analytics.data.ga.get",
-              "parameterOrder": [
-                "ids",
-                "start-date",
-                "end-date",
-                "metrics"
-              ],
-              "parameters": {
-                "samplingLevel": {
-                  "type": "string",
-                  "description": "The desired sampling level.",
-                  "location": "query",
-                  "enumDescriptions": [
-                    "Returns response with a sample size that balances speed and accuracy.",
-                    "Returns a fast response with a smaller sample size.",
-                    "Returns a more accurate response using a large sample size, but this may result in the response being slower."
-                  ],
-                  "enum": [
-                    "DEFAULT",
-                    "FASTER",
-                    "HIGHER_PRECISION"
-                  ]
-                },
-                "segment": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "An Analytics segment to be applied to data."
-                },
-                "ids": {
-                  "location": "query",
-                  "description": "Unique table ID for retrieving Analytics data. Table ID is of the form ga:XXXX, where XXXX is the Analytics view (profile) ID.",
-                  "type": "string",
-                  "required": true,
-                  "pattern": "ga:[0-9]+"
-                },
-                "end-date": {
-                  "location": "query",
-                  "description": "End date for fetching Analytics data. Request can should specify an end date formatted as YYYY-MM-DD, or as a relative date (e.g., today, yesterday, or 7daysAgo). The default value is yesterday.",
-                  "required": true,
-                  "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}|today|yesterday|[0-9]+(daysAgo)",
-                  "type": "string"
-                },
-                "filters": {
-                  "description": "A comma-separated list of dimension or metric filters to be applied to Analytics data.",
-                  "pattern": "ga:.+",
-                  "location": "query",
-                  "type": "string"
-                },
-                "start-index": {
-                  "format": "int32",
-                  "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
-                  "minimum": "1",
-                  "type": "integer",
-                  "location": "query"
-                },
-                "start-date": {
-                  "description": "Start date for fetching Analytics data. Requests can specify a start date formatted as YYYY-MM-DD, or as a relative date (e.g., today, yesterday, or 7daysAgo). The default value is 7daysAgo.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}|today|yesterday|[0-9]+(daysAgo)",
-                  "location": "query"
-                },
-                "max-results": {
-                  "description": "The maximum number of entries to include in this feed.",
-                  "format": "int32",
-                  "location": "query",
-                  "type": "integer"
-                },
-                "sort": {
-                  "type": "string",
-                  "location": "query",
-                  "pattern": "(-)?ga:.+",
-                  "description": "A comma-separated list of dimensions or metrics that determine the sort order for Analytics data."
-                },
-                "output": {
-                  "description": "The selected format for the response. Default format is JSON.",
-                  "type": "string",
-                  "enum": [
-                    "dataTable",
-                    "json"
-                  ],
-                  "location": "query",
-                  "enumDescriptions": [
-                    "Returns the response in Google Charts Data Table format. This is useful in creating visualization using Google Charts.",
-                    "Returns the response in standard JSON format."
-                  ]
-                },
-                "dimensions": {
-                  "location": "query",
-                  "pattern": "(ga:.+)?",
-                  "description": "A comma-separated list of Analytics dimensions. E.g., 'ga:browser,ga:city'.",
-                  "type": "string"
-                },
-                "include-empty-rows": {
-                  "description": "The response will include empty rows if this parameter is set to true, the default is true",
-                  "type": "boolean",
-                  "location": "query"
-                },
-                "metrics": {
-                  "location": "query",
-                  "pattern": "ga:.+",
-                  "description": "A comma-separated list of Analytics metrics. E.g., 'ga:sessions,ga:pageviews'. At least one metric must be specified.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "path": "data/ga"
-            }
-          }
-        },
-        "realtime": {
-          "methods": {
-            "get": {
-              "parameters": {
-                "max-results": {
-                  "type": "integer",
-                  "location": "query",
-                  "description": "The maximum number of entries to include in this feed.",
-                  "format": "int32"
-                },
-                "sort": {
-                  "type": "string",
-                  "description": "A comma-separated list of dimensions or metrics that determine the sort order for real time data.",
-                  "pattern": "(-)?((ga:.+)|(rt:.+))",
-                  "location": "query"
-                },
-                "dimensions": {
-                  "type": "string",
-                  "description": "A comma-separated list of real time dimensions. E.g., 'rt:medium,rt:city'.",
-                  "pattern": "(ga:.+)|(rt:.+)",
-                  "location": "query"
-                },
-                "metrics": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "(ga:.+)|(rt:.+)",
-                  "location": "query",
-                  "description": "A comma-separated list of real time metrics. E.g., 'rt:activeUsers'. At least one metric must be specified."
-                },
-                "ids": {
-                  "required": true,
-                  "description": "Unique table ID for retrieving real time data. Table ID is of the form ga:XXXX, where XXXX is the Analytics view (profile) ID.",
-                  "type": "string",
-                  "pattern": "ga:[0-9]+",
-                  "location": "query"
-                },
-                "filters": {
-                  "location": "query",
-                  "pattern": "(ga:.+)|(rt:.+)",
-                  "description": "A comma-separated list of dimension or metric filters to be applied to real time data.",
-                  "type": "string"
-                }
-              },
-              "description": "Returns real time data for a view (profile).",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "path": "data/realtime",
-              "id": "analytics.data.realtime.get",
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "RealtimeData"
-              },
-              "parameterOrder": [
-                "ids",
-                "metrics"
-              ]
-            }
-          }
-        },
-        "mcf": {
-          "methods": {
-            "get": {
-              "response": {
-                "$ref": "McfData"
-              },
-              "parameterOrder": [
-                "ids",
-                "start-date",
-                "end-date",
-                "metrics"
-              ],
-              "id": "analytics.data.mcf.get",
-              "httpMethod": "GET",
-              "parameters": {
-                "dimensions": {
-                  "pattern": "(mcf:.+)?",
-                  "description": "A comma-separated list of Multi-Channel Funnels dimensions. E.g., 'mcf:source,mcf:medium'.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "max-results": {
-                  "format": "int32",
-                  "location": "query",
-                  "description": "The maximum number of entries to include in this feed.",
-                  "type": "integer"
-                },
-                "samplingLevel": {
-                  "enumDescriptions": [
-                    "Returns response with a sample size that balances speed and accuracy.",
-                    "Returns a fast response with a smaller sample size.",
-                    "Returns a more accurate response using a large sample size, but this may result in the response being slower."
-                  ],
-                  "enum": [
-                    "DEFAULT",
-                    "FASTER",
-                    "HIGHER_PRECISION"
-                  ],
-                  "description": "The desired sampling level.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "metrics": {
-                  "required": true,
-                  "description": "A comma-separated list of Multi-Channel Funnels metrics. E.g., 'mcf:totalConversions,mcf:totalConversionValue'. At least one metric must be specified.",
-                  "location": "query",
-                  "pattern": "mcf:.+",
-                  "type": "string"
-                },
-                "ids": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "ga:[0-9]+",
-                  "location": "query",
-                  "description": "Unique table ID for retrieving Analytics data. Table ID is of the form ga:XXXX, where XXXX is the Analytics view (profile) ID."
-                },
-                "start-index": {
-                  "type": "integer",
-                  "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
-                  "location": "query",
-                  "minimum": "1",
-                  "format": "int32"
-                },
-                "sort": {
-                  "pattern": "(-)?mcf:.+",
-                  "description": "A comma-separated list of dimensions or metrics that determine the sort order for the Analytics data.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "filters": {
-                  "description": "A comma-separated list of dimension or metric filters to be applied to the Analytics data.",
-                  "type": "string",
-                  "location": "query",
-                  "pattern": "mcf:.+"
-                },
-                "start-date": {
-                  "type": "string",
-                  "required": true,
-                  "location": "query",
-                  "description": "Start date for fetching Analytics data. Requests can specify a start date formatted as YYYY-MM-DD, or as a relative date (e.g., today, yesterday, or 7daysAgo). The default value is 7daysAgo.",
-                  "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}|today|yesterday|[0-9]+(daysAgo)"
-                },
-                "end-date": {
-                  "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}|today|yesterday|[0-9]+(daysAgo)",
-                  "description": "End date for fetching Analytics data. Requests can specify a start date formatted as YYYY-MM-DD, or as a relative date (e.g., today, yesterday, or 7daysAgo). The default value is 7daysAgo.",
-                  "type": "string",
-                  "required": true,
-                  "location": "query"
-                }
-              },
-              "description": "Returns Analytics Multi-Channel Funnels data for a view (profile).",
-              "path": "data/mcf",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ]
-            }
-          }
-        }
-      }
-    },
-    "metadata": {
-      "resources": {
-        "columns": {
-          "methods": {
-            "list": {
-              "parameterOrder": [
-                "reportType"
-              ],
-              "path": "metadata/{reportType}/columns",
-              "description": "Lists all columns for a report type",
-              "scopes": [
-                "https://www.googleapis.com/auth/analytics",
-                "https://www.googleapis.com/auth/analytics.edit",
-                "https://www.googleapis.com/auth/analytics.readonly"
-              ],
-              "id": "analytics.metadata.columns.list",
-              "parameters": {
-                "reportType": {
-                  "description": "Report type. Allowed Values: 'ga'. Where 'ga' corresponds to the Core Reporting API",
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "pattern": "ga"
-                }
-              },
-              "response": {
-                "$ref": "Columns"
-              },
-              "httpMethod": "GET"
-            }
-          }
-        }
-      }
-    }
-  },
-  "icons": {
-    "x16": "https://www.google.com/images/icons/product/analytics-16.png",
-    "x32": "https://www.google.com/images/icons/product/analytics-32.png"
-  },
-  "rootUrl": "https://www.googleapis.com/",
-  "ownerName": "Google",
-  "revision": "20190807",
-  "title": "Google Analytics API",
-  "id": "analytics:v3",
-  "ownerDomain": "google.com",
-  "basePath": "/analytics/v3/",
-  "protocol": "rest",
-  "schemas": {
-    "UnsampledReports": {
-      "type": "object",
-      "id": "UnsampledReports",
-      "properties": {
-        "totalResults": {
-          "description": "The total number of results for the query, regardless of the number of resources in the result.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "kind": {
-          "description": "Collection type.",
-          "type": "string",
-          "default": "analytics#unsampledReports"
-        },
-        "nextLink": {
-          "description": "Link to next page for this unsampled report collection.",
-          "type": "string"
-        },
-        "itemsPerPage": {
-          "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "startIndex": {
-          "type": "integer",
-          "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
-          "format": "int32"
-        },
-        "username": {
-          "description": "Email ID of the authenticated user",
-          "type": "string"
-        },
-        "previousLink": {
-          "type": "string",
-          "description": "Link to previous page for this unsampled report collection."
-        },
-        "items": {
-          "items": {
-            "$ref": "UnsampledReport"
-          },
-          "type": "array",
-          "description": "A list of unsampled reports."
-        }
-      },
-      "description": "An unsampled report collection lists Analytics unsampled reports to which the user has access. Each view (profile) can have a set of unsampled reports. Each resource in the unsampled report collection corresponds to a single Analytics unsampled report."
-    },
-    "EntityAdWordsLinks": {
-      "id": "EntityAdWordsLinks",
-      "description": "An entity Google Ads link collection provides a list of GA-Google Ads links Each resource in this collection corresponds to a single link.",
-      "type": "object",
-      "properties": {
-        "totalResults": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The total number of results for the query, regardless of the number of results in the response."
-        },
-        "startIndex": {
-          "type": "integer",
-          "description": "The starting index of the entries, which is 1 by default or otherwise specified by the start-index query parameter.",
-          "format": "int32"
-        },
-        "previousLink": {
-          "description": "Previous link for this Google Ads link collection.",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Collection type.",
-          "type": "string",
-          "default": "analytics#entityAdWordsLinks"
-        },
-        "nextLink": {
-          "description": "Next link for this Google Ads link collection.",
-          "type": "string"
-        },
-        "items": {
-          "description": "A list of entity Google Ads links.",
-          "items": {
-            "$ref": "EntityAdWordsLink"
-          },
-          "type": "array"
-        },
-        "itemsPerPage": {
-          "type": "integer",
-          "description": "The maximum number of entries the response can contain, regardless of the actual number of entries returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
-          "format": "int32"
-        }
-      }
-    },
-    "IncludeConditions": {
-      "description": "JSON template for an Analytics Remarketing Include Conditions.",
-      "type": "object",
-      "id": "IncludeConditions",
-      "properties": {
-        "daysToLookBack": {
-          "type": "integer",
-          "description": "The look-back window lets you specify a time frame for evaluating the behavior that qualifies users for your audience. For example, if your filters include users from Central Asia, and Transactions Greater than 2, and you set the look-back window to 14 days, then any user from Central Asia whose cumulative transactions exceed 2 during the last 14 days is added to the audience.",
-          "format": "int32"
-        },
-        "isSmartList": {
-          "description": "Boolean indicating whether this segment is a smart list. https://support.google.com/analytics/answer/4628577",
-          "type": "boolean"
-        },
-        "kind": {
-          "type": "string",
-          "default": "analytics#includeConditions",
-          "description": "Resource type for include conditions."
-        },
-        "segment": {
-          "type": "string",
-          "description": "The segment condition that will cause a user to be added to an audience."
-        },
-        "membershipDurationDays": {
-          "description": "Number of days (in the range 1 to 540) a user remains in the audience.",
-          "type": "integer",
-          "format": "int32"
-        }
-      }
-    },
-    "LinkedForeignAccount": {
-      "type": "object",
-      "description": "JSON template for an Analytics Remarketing Audience Foreign Link.",
-      "id": "LinkedForeignAccount",
-      "properties": {
-        "linkedAccountId": {
-          "type": "string",
-          "description": "The foreign account ID. For example the an Google Ads `linkedAccountId` has the following format XXX-XXX-XXXX."
-        },
-        "webPropertyId": {
-          "description": "Web property ID of the form UA-XXXXX-YY to which this linked foreign account belongs.",
-          "type": "string"
-        },
-        "accountId": {
-          "type": "string",
-          "description": "Account ID to which this linked foreign account belongs."
-        },
-        "id": {
-          "type": "string",
-          "description": "Entity ad account link ID."
-        },
-        "kind": {
-          "description": "Resource type for linked foreign account.",
-          "type": "string",
-          "default": "analytics#linkedForeignAccount"
-        },
-        "eligibleForSearch": {
-          "description": "Boolean indicating whether this is eligible for search.",
-          "type": "boolean",
-          "readOnly": true
-        },
-        "internalWebPropertyId": {
-          "readOnly": true,
-          "type": "string",
-          "description": "Internal ID for the web property to which this linked foreign account belongs."
-        },
-        "status": {
-          "description": "The status of this foreign account link.",
-          "type": "string"
-        },
-        "type": {
-          "description": "The type of the foreign account. For example, `ADWORDS_LINKS`, `DBM_LINKS`, `MCC_LINKS` or `OPTIMIZE`.",
-          "type": "string"
-        },
-        "remarketingAudienceId": {
-          "description": "Remarketing audience ID to which this linked foreign account belongs.",
-          "type": "string"
-        }
-      }
-    },
-    "Columns": {
-      "description": "Lists columns (dimensions and metrics) for a particular report type.",
-      "id": "Columns",
-      "type": "object",
-      "properties": {
-        "attributeNames": {
-          "items": {
+    "id": "analytics:v3",
+    "kind": "discovery#restDescription",
+    "name": "analytics",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "alt": {
+            "default": "json",
+            "description": "Data format for the response.",
+            "enum": [
+                "json"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json"
+            ],
+            "location": "query",
             "type": "string"
-          },
-          "type": "array",
-          "description": "List of attributes names returned by columns."
         },
-        "items": {
-          "items": {
-            "$ref": "Column"
-          },
-          "description": "List of columns for a report type.",
-          "type": "array"
-        },
-        "totalResults": {
-          "format": "int32",
-          "description": "Total number of columns returned in the response.",
-          "type": "integer"
-        },
-        "kind": {
-          "description": "Collection type.",
-          "default": "analytics#columns",
-          "type": "string"
-        },
-        "etag": {
-          "type": "string",
-          "description": "Etag of collection. This etag can be compared with the last response etag to check if response has changed."
-        }
-      }
-    },
-    "ProfileSummary": {
-      "properties": {
-        "kind": {
-          "type": "string",
-          "default": "analytics#profileSummary",
-          "description": "Resource type for Analytics ProfileSummary."
-        },
-        "name": {
-          "description": "View (profile) name.",
-          "type": "string"
-        },
-        "id": {
-          "type": "string",
-          "description": "View (profile) ID."
-        },
-        "starred": {
-          "type": "boolean",
-          "description": "Indicates whether this view (profile) is starred or not."
-        },
-        "type": {
-          "description": "View (Profile) type. Supported types: WEB or APP.",
-          "type": "string"
-        }
-      },
-      "description": "JSON template for an Analytics ProfileSummary. ProfileSummary returns basic information (i.e., summary) for a profile.",
-      "type": "object",
-      "id": "ProfileSummary"
-    },
-    "Experiment": {
-      "id": "Experiment",
-      "type": "object",
-      "description": "JSON template for Analytics experiment resource.",
-      "properties": {
-        "trafficCoverage": {
-          "format": "double",
-          "description": "A floating-point number in (0, 1]. Specifies the fraction of the traffic that participates in the experiment. Can be changed for a running experiment. This field may not be changed for an experiments whose status is ENDED.",
-          "type": "number"
-        },
-        "status": {
-          "type": "string",
-          "description": "Experiment status. Possible values: \"DRAFT\", \"READY_TO_RUN\", \"RUNNING\", \"ENDED\". Experiments can be created in the \"DRAFT\", \"READY_TO_RUN\" or \"RUNNING\" state. This field is required when creating an experiment.",
-          "annotations": {
-            "required": [
-              "analytics.management.experiments.insert",
-              "analytics.management.experiments.update"
-            ]
-          }
-        },
-        "editableInGaUi": {
-          "type": "boolean",
-          "description": "If true, the end user will be able to edit the experiment via the Google Analytics user interface."
-        },
-        "updated": {
-          "description": "Time the experiment was last modified. This field is read-only.",
-          "format": "date-time",
-          "type": "string"
-        },
-        "objectiveMetric": {
-          "type": "string",
-          "description": "The metric that the experiment is optimizing. Valid values: \"ga:goal(n)Completions\", \"ga:adsenseAdsClicks\", \"ga:adsenseAdsViewed\", \"ga:adsenseRevenue\", \"ga:bounces\", \"ga:pageviews\", \"ga:sessionDuration\", \"ga:transactions\", \"ga:transactionRevenue\". This field is required if status is \"RUNNING\" and servingFramework is one of \"REDIRECT\" or \"API\"."
-        },
-        "accountId": {
-          "description": "Account ID to which this experiment belongs. This field is read-only.",
-          "type": "string"
-        },
-        "minimumExperimentLengthInDays": {
-          "description": "An integer number in [3, 90]. Specifies the minimum length of the experiment. Can be changed for a running experiment. This field may not be changed for an experiments whose status is ENDED.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "snippet": {
-          "description": "The snippet of code to include on the control page(s). This field is read-only.",
-          "type": "string"
-        },
-        "description": {
-          "type": "string",
-          "description": "Notes about this experiment."
-        },
-        "servingFramework": {
-          "description": "The framework used to serve the experiment variations and evaluate the results. One of:  \n- REDIRECT: Google Analytics redirects traffic to different variation pages, reports the chosen variation and evaluates the results.\n- API: Google Analytics chooses and reports the variation to serve and evaluates the results; the caller is responsible for serving the selected variation.\n- EXTERNAL: The variations will be served externally and the chosen variation reported to Google Analytics. The caller is responsible for serving the selected variation and evaluating the results.",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Resource type for an Analytics experiment. This field is read-only.",
-          "default": "analytics#experiment",
-          "type": "string"
-        },
-        "optimizationType": {
-          "type": "string",
-          "description": "Whether the objectiveMetric should be minimized or maximized. Possible values: \"MAXIMUM\", \"MINIMUM\". Optional--defaults to \"MAXIMUM\". Cannot be specified without objectiveMetric. Cannot be modified when status is \"RUNNING\" or \"ENDED\"."
-        },
-        "created": {
-          "type": "string",
-          "format": "date-time",
-          "description": "Time the experiment was created. This field is read-only."
-        },
-        "id": {
-          "annotations": {
-            "required": [
-              "analytics.management.experiments.patch",
-              "analytics.management.experiments.update"
-            ]
-          },
-          "description": "Experiment ID. Required for patch and update. Disallowed for create.",
-          "type": "string"
-        },
-        "winnerFound": {
-          "type": "boolean",
-          "description": "Boolean specifying whether a winner has been found for this experiment. This field is read-only."
-        },
-        "equalWeighting": {
-          "type": "boolean",
-          "description": "Boolean specifying whether to distribute traffic evenly across all variations. If the value is False, content experiments follows the default behavior of adjusting traffic dynamically based on variation performance. Optional -- defaults to False. This field may not be changed for an experiment whose status is ENDED."
-        },
-        "endTime": {
-          "type": "string",
-          "format": "date-time",
-          "description": "The ending time of the experiment (the time the status changed from RUNNING to ENDED). This field is present only if the experiment has ended. This field is read-only."
-        },
-        "startTime": {
-          "description": "The starting time of the experiment (the time the status changed from READY_TO_RUN to RUNNING). This field is present only if the experiment has started. This field is read-only.",
-          "type": "string",
-          "format": "date-time"
-        },
-        "name": {
-          "type": "string",
-          "description": "Experiment name. This field may not be changed for an experiment whose status is ENDED. This field is required when creating an experiment.",
-          "annotations": {
-            "required": [
-              "analytics.management.experiments.insert",
-              "analytics.management.experiments.update"
-            ]
-          }
-        },
-        "profileId": {
-          "type": "string",
-          "description": "View (Profile) ID to which this experiment belongs. This field is read-only."
-        },
-        "reasonExperimentEnded": {
-          "type": "string",
-          "description": "Why the experiment ended. Possible values: \"STOPPED_BY_USER\", \"WINNER_FOUND\", \"EXPERIMENT_EXPIRED\", \"ENDED_WITH_NO_WINNER\", \"GOAL_OBJECTIVE_CHANGED\". \"ENDED_WITH_NO_WINNER\" means that the experiment didn't expire but no winner was projected to be found. If the experiment status is changed via the API to ENDED this field is set to STOPPED_BY_USER. This field is read-only."
-        },
-        "webPropertyId": {
-          "description": "Web property ID to which this experiment belongs. The web property ID is of the form UA-XXXXX-YY. This field is read-only.",
-          "type": "string"
-        },
-        "parentLink": {
-          "properties": {
-            "href": {
-              "description": "Link to the view (profile) to which this experiment belongs. This field is read-only.",
-              "type": "string"
-            },
-            "type": {
-              "description": "Value is \"analytics#profile\". This field is read-only.",
-              "default": "analytics#profile",
-              "type": "string"
-            }
-          },
-          "type": "object",
-          "description": "Parent link for an experiment. Points to the view (profile) to which this experiment belongs."
-        },
-        "rewriteVariationUrlsAsOriginal": {
-          "description": "Boolean specifying whether variations URLS are rewritten to match those of the original. This field may not be changed for an experiments whose status is ENDED.",
-          "type": "boolean"
-        },
-        "winnerConfidenceLevel": {
-          "description": "A floating-point number in (0, 1). Specifies the necessary confidence level to choose a winner. This field may not be changed for an experiments whose status is ENDED.",
-          "type": "number",
-          "format": "double"
-        },
-        "internalWebPropertyId": {
-          "description": "Internal ID for the web property to which this experiment belongs. This field is read-only.",
-          "type": "string"
-        },
-        "selfLink": {
-          "description": "Link for this experiment. This field is read-only.",
-          "type": "string"
-        },
-        "variations": {
-          "type": "array",
-          "description": "Array of variations. The first variation in the array is the original. The number of variations may not change once an experiment is in the RUNNING state. At least two variations are required before status can be set to RUNNING.",
-          "items": {
-            "type": "object",
-            "properties": {
-              "name": {
-                "description": "The name of the variation. This field is required when creating an experiment. This field may not be changed for an experiment whose status is ENDED.",
-                "annotations": {
-                  "required": [
-                    "analytics.management.experiments.insert",
-                    "analytics.management.experiments.update"
-                  ]
-                },
-                "type": "string"
-              },
-              "url": {
-                "type": "string",
-                "description": "The URL of the variation. This field may not be changed for an experiment whose status is RUNNING or ENDED."
-              },
-              "status": {
-                "description": "Status of the variation. Possible values: \"ACTIVE\", \"INACTIVE\". INACTIVE variations are not served. This field may not be changed for an experiment whose status is ENDED.",
-                "type": "string"
-              },
-              "won": {
-                "description": "True if the experiment has ended and this variation performed (statistically) significantly better than the original. This field is read-only.",
-                "type": "boolean"
-              },
-              "weight": {
-                "format": "double",
-                "type": "number",
-                "description": "Weight that this variation should receive. Only present if the experiment is running. This field is read-only."
-              }
-            }
-          }
-        }
-      }
-    },
-    "ProfileFilterLinks": {
-      "type": "object",
-      "properties": {
-        "items": {
-          "type": "array",
-          "description": "A list of profile filter links.",
-          "items": {
-            "$ref": "ProfileFilterLink"
-          }
-        },
-        "previousLink": {
-          "description": "Link to previous page for this profile filter link collection.",
-          "type": "string"
-        },
-        "startIndex": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter."
-        },
-        "kind": {
-          "type": "string",
-          "default": "analytics#profileFilterLinks",
-          "description": "Collection type."
-        },
-        "itemsPerPage": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1,000 with a value of 1000 by default, or otherwise specified by the max-results query parameter."
-        },
-        "nextLink": {
-          "description": "Link to next page for this profile filter link collection.",
-          "type": "string"
-        },
-        "totalResults": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The total number of results for the query, regardless of the number of results in the response."
-        },
-        "username": {
-          "description": "Email ID of the authenticated user",
-          "type": "string"
-        }
-      },
-      "description": "A profile filter link collection lists profile filter links between profiles and filters. Each resource in the collection corresponds to a profile filter link.",
-      "id": "ProfileFilterLinks"
-    },
-    "UserRef": {
-      "type": "object",
-      "id": "UserRef",
-      "description": "JSON template for a user reference.",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "default": "analytics#userRef"
-        },
-        "email": {
-          "type": "string",
-          "description": "Email ID of this user."
-        },
-        "id": {
-          "type": "string",
-          "description": "User ID."
-        }
-      }
-    },
-    "CustomDataSources": {
-      "properties": {
-        "itemsPerPage": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter."
-        },
-        "nextLink": {
-          "type": "string",
-          "description": "Link to next page for this custom data source collection."
-        },
-        "startIndex": {
-          "format": "int32",
-          "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
-          "type": "integer"
-        },
-        "kind": {
-          "default": "analytics#customDataSources",
-          "type": "string",
-          "description": "Collection type."
-        },
-        "items": {
-          "items": {
-            "$ref": "CustomDataSource"
-          },
-          "description": "Collection of custom data sources.",
-          "type": "array"
-        },
-        "username": {
-          "type": "string",
-          "description": "Email ID of the authenticated user"
-        },
-        "previousLink": {
-          "description": "Link to previous page for this custom data source collection.",
-          "type": "string"
-        },
-        "totalResults": {
-          "type": "integer",
-          "description": "The total number of results for the query, regardless of the number of results in the response.",
-          "format": "int32"
-        }
-      },
-      "type": "object",
-      "id": "CustomDataSources",
-      "description": "Lists Analytics custom data sources to which the user has access. Each resource in the collection corresponds to a single Analytics custom data source."
-    },
-    "AccountTreeResponse": {
-      "properties": {
-        "webproperty": {
-          "$ref": "Webproperty",
-          "description": "Web property for the account."
-        },
-        "profile": {
-          "description": "View (Profile) for the account.",
-          "$ref": "Profile"
-        },
-        "account": {
-          "description": "The account created.",
-          "$ref": "Account"
-        },
-        "kind": {
-          "default": "analytics#accountTreeResponse",
-          "description": "Resource type for account ticket.",
-          "type": "string"
-        }
-      },
-      "description": "JSON template for an Analytics account tree response. The account tree response is used in the provisioning api to return the result of creating an account, property, and view (profile).",
-      "type": "object",
-      "id": "AccountTreeResponse"
-    },
-    "CustomMetric": {
-      "description": "JSON template for Analytics Custom Metric.",
-      "type": "object",
-      "id": "CustomMetric",
-      "properties": {
-        "webPropertyId": {
-          "description": "Property ID.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of the custom metric.",
-          "type": "string"
-        },
-        "parentLink": {
-          "properties": {
-            "href": {
-              "description": "Link to the property to which the custom metric belongs.",
-              "type": "string"
-            },
-            "type": {
-              "description": "Type of the parent link. Set to \"analytics#webproperty\".",
-              "type": "string",
-              "default": "analytics#webproperty"
-            }
-          },
-          "type": "object",
-          "description": "Parent link for the custom metric. Points to the property to which the custom metric belongs."
-        },
-        "kind": {
-          "default": "analytics#customMetric",
-          "type": "string",
-          "readOnly": true,
-          "description": "Kind value for a custom metric. Set to \"analytics#customMetric\". It is a read-only field."
-        },
-        "updated": {
-          "format": "date-time",
-          "readOnly": true,
-          "description": "Time the custom metric was last modified.",
-          "type": "string"
-        },
-        "active": {
-          "type": "boolean",
-          "description": "Boolean indicating whether the custom metric is active."
-        },
-        "accountId": {
-          "description": "Account ID.",
-          "type": "string"
-        },
-        "index": {
-          "description": "Index of the custom metric.",
-          "readOnly": true,
-          "format": "int32",
-          "type": "integer"
-        },
-        "type": {
-          "type": "string",
-          "description": "Data type of custom metric."
-        },
-        "max_value": {
-          "type": "string",
-          "description": "Max value of custom metric."
-        },
-        "id": {
-          "description": "Custom metric ID.",
-          "type": "string"
-        },
-        "selfLink": {
-          "description": "Link for the custom metric",
-          "readOnly": true,
-          "type": "string"
-        },
-        "created": {
-          "readOnly": true,
-          "type": "string",
-          "description": "Time the custom metric was created.",
-          "format": "date-time"
-        },
-        "min_value": {
-          "description": "Min value of custom metric.",
-          "type": "string"
-        },
-        "scope": {
-          "description": "Scope of the custom metric: HIT or PRODUCT.",
-          "type": "string"
-        }
-      }
-    },
-    "ProfileFilterLink": {
-      "type": "object",
-      "id": "ProfileFilterLink",
-      "description": "JSON template for an Analytics profile filter link.",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "default": "analytics#profileFilterLink",
-          "description": "Resource type for Analytics filter.",
-          "readOnly": true
-        },
-        "rank": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The rank of this profile filter link relative to the other filters linked to the same profile.\nFor readonly (i.e., list and get) operations, the rank always starts at 1.\nFor write (i.e., create, update, or delete) operations, you may specify a value between 0 and 255 inclusively, [0, 255]. In order to insert a link at the end of the list, either don't specify a rank or set a rank to a number greater than the largest rank in the list. In order to insert a link to the beginning of the list specify a rank that is less than or equal to 1. The new link will move all existing filters with the same or lower rank down the list. After the link is inserted/updated/deleted all profile filter links will be renumbered starting at 1."
-        },
-        "filterRef": {
-          "$ref": "FilterRef",
-          "description": "Filter for this link."
-        },
-        "id": {
-          "type": "string",
-          "description": "Profile filter link ID."
-        },
-        "profileRef": {
-          "description": "View (Profile) for this link.",
-          "$ref": "ProfileRef"
-        },
-        "selfLink": {
-          "readOnly": true,
-          "description": "Link for this profile filter link.",
-          "type": "string"
-        }
-      }
-    },
-    "EntityAdWordsLink": {
-      "description": "JSON template for Analytics Entity Google Ads Link.",
-      "properties": {
-        "name": {
-          "annotations": {
-            "required": [
-              "analytics.management.webPropertyAdWordsLinks.insert",
-              "analytics.management.webPropertyAdWordsLinks.update"
-            ]
-          },
-          "description": "Name of the link. This field is required when creating a Google Ads link.",
-          "type": "string"
-        },
-        "entity": {
-          "properties": {
-            "webPropertyRef": {
-              "$ref": "WebPropertyRef"
-            }
-          },
-          "description": "Web property being linked.",
-          "type": "object"
-        },
-        "kind": {
-          "default": "analytics#entityAdWordsLink",
-          "type": "string",
-          "description": "Resource type for entity Google Ads link."
-        },
-        "profileIds": {
-          "items": {
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
             "type": "string"
-          },
-          "type": "array",
-          "description": "IDs of linked Views (Profiles) represented as strings."
         },
-        "adWordsAccounts": {
-          "items": {
-            "$ref": "AdWordsAccount"
-          },
-          "description": "A list of Google Ads client accounts. These cannot be MCC accounts. This field is required when creating a Google Ads link. It cannot be empty.",
-          "annotations": {
-            "required": [
-              "analytics.management.webPropertyAdWordsLinks.insert",
-              "analytics.management.webPropertyAdWordsLinks.update"
-            ]
-          },
-          "type": "array"
-        },
-        "id": {
-          "description": "Entity Google Ads link ID",
-          "type": "string"
-        },
-        "selfLink": {
-          "description": "URL link for this Google Analytics - Google Ads link.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "EntityAdWordsLink"
-    },
-    "Column": {
-      "properties": {
-        "id": {
-          "description": "Column id.",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Resource type for Analytics column.",
-          "default": "analytics#column",
-          "type": "string"
-        },
-        "attributes": {
-          "description": "Map of attribute name and value for this column.",
-          "additionalProperties": {
-            "description": "The name of the attribute.",
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
             "type": "string"
-          },
-          "type": "object"
-        }
-      },
-      "description": "JSON template for a metadata column.",
-      "id": "Column",
-      "type": "object"
-    },
-    "CustomMetrics": {
-      "description": "A custom metric collection lists Analytics custom metrics to which the user has access. Each resource in the collection corresponds to a single Analytics custom metric.",
-      "id": "CustomMetrics",
-      "properties": {
-        "previousLink": {
-          "description": "Link to previous page for this custom metric collection.",
-          "type": "string"
         },
-        "items": {
-          "items": {
-            "$ref": "CustomMetric"
-          },
-          "description": "Collection of custom metrics.",
-          "type": "array"
-        },
-        "itemsPerPage": {
-          "type": "integer",
-          "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
-          "format": "int32"
-        },
-        "kind": {
-          "default": "analytics#customMetrics",
-          "description": "Collection type.",
-          "type": "string"
-        },
-        "totalResults": {
-          "description": "The total number of results for the query, regardless of the number of results in the response.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "startIndex": {
-          "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "nextLink": {
-          "description": "Link to next page for this custom metric collection.",
-          "type": "string"
-        },
-        "username": {
-          "description": "Email ID of the authenticated user",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "UserDeletionRequest": {
-      "type": "object",
-      "properties": {
-        "webPropertyId": {
-          "description": "Web property ID of the form UA-XXXXX-YY.",
-          "type": "string"
-        },
-        "propertyId": {
-          "type": "string",
-          "description": "Property ID"
-        },
-        "kind": {
-          "description": "Value is \"analytics#userDeletionRequest\".",
-          "default": "analytics#userDeletionRequest",
-          "type": "string"
-        },
-        "firebaseProjectId": {
-          "description": "Firebase Project Id",
-          "type": "string"
-        },
-        "id": {
-          "properties": {
-            "type": {
-              "description": "Type of user",
-              "type": "string"
-            },
-            "userId": {
-              "type": "string",
-              "description": "The User's id"
-            }
-          },
-          "description": "User ID.",
-          "type": "object"
-        },
-        "deletionRequestTime": {
-          "readOnly": true,
-          "format": "date-time",
-          "description": "This marks the point in time for which all user data before should be deleted",
-          "type": "string"
-        }
-      },
-      "description": "JSON template for a user deletion request resource.",
-      "id": "UserDeletionRequest"
-    },
-    "Accounts": {
-      "type": "object",
-      "properties": {
-        "startIndex": {
-          "description": "The starting index of the entries, which is 1 by default or otherwise specified by the start-index query parameter.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "kind": {
-          "description": "Collection type.",
-          "default": "analytics#accounts",
-          "type": "string"
-        },
-        "totalResults": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The total number of results for the query, regardless of the number of results in the response."
-        },
-        "previousLink": {
-          "description": "Previous link for this account collection.",
-          "type": "string"
-        },
-        "items": {
-          "type": "array",
-          "items": {
-            "$ref": "Account"
-          },
-          "description": "A list of accounts."
-        },
-        "username": {
-          "description": "Email ID of the authenticated user",
-          "type": "string"
-        },
-        "itemsPerPage": {
-          "format": "int32",
-          "description": "The maximum number of entries the response can contain, regardless of the actual number of entries returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
-          "type": "integer"
-        },
-        "nextLink": {
-          "description": "Next link for this account collection.",
-          "type": "string"
-        }
-      },
-      "description": "An account collection provides a list of Analytics accounts to which a user has access. The account collection is the entry point to all management information. Each resource in the collection corresponds to a single Analytics account.",
-      "id": "Accounts"
-    },
-    "AccountSummary": {
-      "description": "JSON template for an Analytics AccountSummary. An AccountSummary is a lightweight tree comprised of properties/profiles.",
-      "type": "object",
-      "properties": {
-        "webProperties": {
-          "type": "array",
-          "description": "List of web properties under this account.",
-          "items": {
-            "$ref": "WebPropertySummary"
-          }
-        },
-        "kind": {
-          "type": "string",
-          "description": "Resource type for Analytics AccountSummary.",
-          "default": "analytics#accountSummary"
-        },
-        "name": {
-          "type": "string",
-          "description": "Account name."
-        },
-        "id": {
-          "description": "Account ID.",
-          "type": "string"
-        },
-        "starred": {
-          "type": "boolean",
-          "description": "Indicates whether this account is starred or not."
-        }
-      },
-      "id": "AccountSummary"
-    },
-    "AccountRef": {
-      "properties": {
-        "id": {
-          "description": "Account ID.",
-          "type": "string"
-        },
-        "kind": {
-          "default": "analytics#accountRef",
-          "type": "string",
-          "description": "Analytics account reference."
-        },
-        "name": {
-          "description": "Account name.",
-          "type": "string"
-        },
-        "href": {
-          "type": "string",
-          "description": "Link for this account."
-        }
-      },
-      "type": "object",
-      "description": "JSON template for a linked account.",
-      "id": "AccountRef"
-    },
-    "CustomDataSource": {
-      "id": "CustomDataSource",
-      "description": "JSON template for an Analytics custom data source.",
-      "properties": {
-        "webPropertyId": {
-          "description": "Web property ID of the form UA-XXXXX-YY to which this custom data source belongs.",
-          "type": "string"
-        },
-        "childLink": {
-          "properties": {
-            "type": {
-              "description": "Value is \"analytics#dailyUploads\". Value is \"analytics#uploads\".",
-              "type": "string"
-            },
-            "href": {
-              "description": "Link to the list of daily uploads for this custom data source. Link to the list of uploads for this custom data source.",
-              "type": "string"
-            }
-          },
-          "type": "object"
-        },
-        "kind": {
-          "description": "Resource type for Analytics custom data source.",
-          "default": "analytics#customDataSource",
-          "type": "string"
-        },
-        "updated": {
-          "type": "string",
-          "format": "date-time",
-          "description": "Time this custom data source was last modified."
-        },
-        "selfLink": {
-          "type": "string",
-          "description": "Link for this Analytics custom data source."
-        },
-        "name": {
-          "description": "Name of this custom data source.",
-          "type": "string"
-        },
-        "schema": {
-          "description": "Collection of schema headers of the custom data source.",
-          "items": {
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
             "type": "string"
-          },
-          "type": "array"
         },
-        "parentLink": {
-          "type": "object",
-          "properties": {
-            "href": {
-              "type": "string",
-              "description": "Link to the web property to which this custom data source belongs."
-            },
-            "type": {
-              "type": "string",
-              "default": "analytics#webproperty",
-              "description": "Value is \"analytics#webproperty\"."
-            }
-          },
-          "description": "Parent link for this custom data source. Points to the web property to which this custom data source belongs."
+        "prettyPrint": {
+            "default": "false",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
         },
-        "uploadType": {
-          "description": "Upload type of the custom data source.",
-          "type": "string"
-        },
-        "accountId": {
-          "type": "string",
-          "description": "Account ID to which this custom data source belongs."
-        },
-        "description": {
-          "description": "Description of custom data source.",
-          "type": "string"
-        },
-        "importBehavior": {
-          "type": "string"
-        },
-        "type": {
-          "type": "string",
-          "description": "Type of the custom data source."
-        },
-        "created": {
-          "type": "string",
-          "description": "Time this custom data source was created.",
-          "format": "date-time"
-        },
-        "id": {
-          "description": "Custom data source ID.",
-          "type": "string"
-        },
-        "profilesLinked": {
-          "description": "IDs of views (profiles) linked to the custom data source.",
-          "items": {
+        "quotaUser": {
+            "description": "An opaque string that represents a user for quota purposes. Must not exceed 40 characters.",
+            "location": "query",
             "type": "string"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object"
-    },
-    "Filters": {
-      "description": "A filter collection lists filters created by users in an Analytics account. Each resource in the collection corresponds to a filter.",
-      "properties": {
-        "nextLink": {
-          "description": "Link to next page for this filter collection.",
-          "type": "string"
         },
-        "items": {
-          "type": "array",
-          "description": "A list of filters.",
-          "items": {
-            "$ref": "Filter"
-          }
-        },
-        "itemsPerPage": {
-          "type": "integer",
-          "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1,000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
-          "format": "int32"
-        },
-        "username": {
-          "description": "Email ID of the authenticated user",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "default": "analytics#filters",
-          "description": "Collection type."
-        },
-        "totalResults": {
-          "description": "The total number of results for the query, regardless of the number of results in the response.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "previousLink": {
-          "description": "Link to previous page for this filter collection.",
-          "type": "string"
-        },
-        "startIndex": {
-          "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
-          "type": "integer",
-          "format": "int32"
-        }
-      },
-      "id": "Filters",
-      "type": "object"
-    },
-    "Goal": {
-      "type": "object",
-      "properties": {
-        "internalWebPropertyId": {
-          "type": "string",
-          "description": "Internal ID for the web property to which this goal belongs."
-        },
-        "urlDestinationDetails": {
-          "properties": {
-            "steps": {
-              "description": "List of steps configured for this goal funnel.",
-              "items": {
-                "type": "object",
-                "properties": {
-                  "url": {
-                    "description": "URL for this step.",
-                    "type": "string"
-                  },
-                  "number": {
-                    "format": "int32",
-                    "type": "integer",
-                    "description": "Step number."
-                  },
-                  "name": {
-                    "description": "Step name.",
-                    "type": "string"
-                  }
-                }
-              },
-              "type": "array"
-            },
-            "caseSensitive": {
-              "type": "boolean",
-              "description": "Determines if the goal URL must exactly match the capitalization of visited URLs."
-            },
-            "matchType": {
-              "description": "Match type for the goal URL. Possible values are HEAD, EXACT, or REGEX.",
-              "type": "string"
-            },
-            "firstStepRequired": {
-              "type": "boolean",
-              "description": "Determines if the first step in this goal is required."
-            },
-            "url": {
-              "type": "string",
-              "description": "URL for this goal."
-            }
-          },
-          "type": "object",
-          "description": "Details for the goal of the type URL_DESTINATION."
-        },
-        "selfLink": {
-          "type": "string",
-          "description": "Link for this goal."
-        },
-        "parentLink": {
-          "type": "object",
-          "description": "Parent link for a goal. Points to the view (profile) to which this goal belongs.",
-          "properties": {
-            "href": {
-              "description": "Link to the view (profile) to which this goal belongs.",
-              "type": "string"
-            },
-            "type": {
-              "type": "string",
-              "default": "analytics#profile",
-              "description": "Value is \"analytics#profile\"."
-            }
-          }
-        },
-        "accountId": {
-          "type": "string",
-          "description": "Account ID to which this goal belongs."
-        },
-        "visitNumPagesDetails": {
-          "type": "object",
-          "description": "Details for the goal of the type VISIT_NUM_PAGES.",
-          "properties": {
-            "comparisonType": {
-              "description": "Type of comparison. Possible values are LESS_THAN, GREATER_THAN, or EQUAL.",
-              "type": "string"
-            },
-            "comparisonValue": {
-              "type": "string",
-              "format": "int64",
-              "description": "Value used for this comparison."
-            }
-          }
-        },
-        "created": {
-          "description": "Time this goal was created.",
-          "format": "date-time",
-          "type": "string"
-        },
-        "value": {
-          "type": "number",
-          "description": "Goal value.",
-          "format": "float"
-        },
-        "name": {
-          "type": "string",
-          "description": "Goal name."
-        },
-        "kind": {
-          "description": "Resource type for an Analytics goal.",
-          "type": "string",
-          "default": "analytics#goal"
-        },
-        "type": {
-          "type": "string",
-          "description": "Goal type. Possible values are URL_DESTINATION, VISIT_TIME_ON_SITE, VISIT_NUM_PAGES, AND EVENT."
-        },
-        "visitTimeOnSiteDetails": {
-          "description": "Details for the goal of the type VISIT_TIME_ON_SITE.",
-          "type": "object",
-          "properties": {
-            "comparisonType": {
-              "description": "Type of comparison. Possible values are LESS_THAN or GREATER_THAN.",
-              "type": "string"
-            },
-            "comparisonValue": {
-              "type": "string",
-              "description": "Value used for this comparison.",
-              "format": "int64"
-            }
-          }
-        },
-        "updated": {
-          "format": "date-time",
-          "type": "string",
-          "description": "Time this goal was last modified."
-        },
-        "id": {
-          "description": "Goal ID.",
-          "type": "string"
-        },
-        "eventDetails": {
-          "description": "Details for the goal of the type EVENT.",
-          "properties": {
-            "useEventValue": {
-              "description": "Determines if the event value should be used as the value for this goal.",
-              "type": "boolean"
-            },
-            "eventConditions": {
-              "type": "array",
-              "items": {
-                "type": "object",
-                "properties": {
-                  "comparisonType": {
-                    "description": "Type of comparison. Possible values are LESS_THAN, GREATER_THAN or EQUAL.",
-                    "type": "string"
-                  },
-                  "matchType": {
-                    "type": "string",
-                    "description": "Type of the match to be performed. Possible values are REGEXP, BEGINS_WITH, or EXACT."
-                  },
-                  "comparisonValue": {
-                    "description": "Value used for this comparison.",
-                    "format": "int64",
-                    "type": "string"
-                  },
-                  "expression": {
-                    "type": "string",
-                    "description": "Expression used for this match."
-                  },
-                  "type": {
-                    "description": "Type of this event condition. Possible values are CATEGORY, ACTION, LABEL, or VALUE.",
-                    "type": "string"
-                  }
-                }
-              },
-              "description": "List of event conditions."
-            }
-          },
-          "type": "object"
-        },
-        "webPropertyId": {
-          "description": "Web property ID to which this goal belongs. The web property ID is of the form UA-XXXXX-YY.",
-          "type": "string"
-        },
-        "active": {
-          "type": "boolean",
-          "description": "Determines whether this goal is active."
-        },
-        "profileId": {
-          "description": "View (Profile) ID to which this goal belongs.",
-          "type": "string"
-        }
-      },
-      "description": "JSON template for Analytics goal resource.",
-      "id": "Goal"
-    },
-    "EntityUserLinks": {
-      "id": "EntityUserLinks",
-      "type": "object",
-      "properties": {
-        "totalResults": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The total number of results for the query, regardless of the number of results in the response."
-        },
-        "previousLink": {
-          "type": "string",
-          "description": "Previous link for this account collection."
-        },
-        "kind": {
-          "description": "Collection type.",
-          "default": "analytics#entityUserLinks",
-          "type": "string"
-        },
-        "startIndex": {
-          "description": "The starting index of the entries, which is 1 by default or otherwise specified by the start-index query parameter.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "itemsPerPage": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The maximum number of entries the response can contain, regardless of the actual number of entries returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter."
-        },
-        "items": {
-          "type": "array",
-          "items": {
-            "$ref": "EntityUserLink"
-          },
-          "description": "A list of entity user links."
-        },
-        "nextLink": {
-          "type": "string",
-          "description": "Next link for this account collection."
-        }
-      },
-      "description": "An entity user link collection provides a list of Analytics ACL links Each resource in this collection corresponds to a single link."
-    },
-    "RemarketingAudience": {
-      "properties": {
-        "created": {
-          "format": "date-time",
-          "description": "Time this remarketing audience was created.",
-          "readOnly": true,
-          "type": "string"
-        },
-        "id": {
-          "description": "Remarketing Audience ID.",
-          "type": "string"
-        },
-        "audienceDefinition": {
-          "properties": {
-            "includeConditions": {
-              "description": "Defines the conditions to include users to the audience.",
-              "$ref": "IncludeConditions"
-            }
-          },
-          "description": "The simple audience definition that will cause a user to be added to an audience.",
-          "type": "object"
-        },
-        "stateBasedAudienceDefinition": {
-          "properties": {
-            "excludeConditions": {
-              "description": "Defines the conditions to exclude users from the audience.",
-              "properties": {
-                "exclusionDuration": {
-                  "type": "string",
-                  "description": "Whether to make the exclusion TEMPORARY or PERMANENT."
-                },
-                "segment": {
-                  "description": "The segment condition that will cause a user to be removed from an audience.",
-                  "type": "string"
-                }
-              },
-              "type": "object"
-            },
-            "includeConditions": {
-              "$ref": "IncludeConditions",
-              "description": "Defines the conditions to include users to the audience."
-            }
-          },
-          "type": "object",
-          "description": "A state based audience definition that will cause a user to be added or removed from an audience."
-        },
-        "linkedAdAccounts": {
-          "items": {
-            "$ref": "LinkedForeignAccount"
-          },
-          "type": "array",
-          "description": "The linked ad accounts associated with this remarketing audience. A remarketing audience can have only one linkedAdAccount currently."
-        },
-        "audienceType": {
-          "type": "string",
-          "description": "The type of audience, either SIMPLE or STATE_BASED."
-        },
-        "linkedViews": {
-          "items": {
+        "userIp": {
+            "description": "Deprecated. Please use quotaUser instead.",
+            "location": "query",
             "type": "string"
-          },
-          "description": "The views (profiles) that this remarketing audience is linked to.",
-          "type": "array"
-        },
-        "kind": {
-          "description": "Collection type.",
-          "default": "analytics#remarketingAudience",
-          "type": "string"
-        },
-        "internalWebPropertyId": {
-          "readOnly": true,
-          "description": "Internal ID for the web property to which this remarketing audience belongs.",
-          "type": "string"
-        },
-        "webPropertyId": {
-          "description": "Web property ID of the form UA-XXXXX-YY to which this remarketing audience belongs.",
-          "type": "string"
-        },
-        "description": {
-          "type": "string",
-          "description": "The description of this remarketing audience.",
-          "readOnly": true
-        },
-        "name": {
-          "description": "The name of this remarketing audience.",
-          "type": "string"
-        },
-        "accountId": {
-          "description": "Account ID to which this remarketing audience belongs.",
-          "type": "string"
-        },
-        "updated": {
-          "description": "Time this remarketing audience was last modified.",
-          "readOnly": true,
-          "format": "date-time",
-          "type": "string"
         }
-      },
-      "type": "object",
-      "description": "JSON template for an Analytics remarketing audience.",
-      "id": "RemarketingAudience"
     },
-    "Account": {
-      "id": "Account",
-      "description": "JSON template for Analytics account entry.",
-      "properties": {
-        "selfLink": {
-          "description": "Link for this account.",
-          "type": "string"
-        },
-        "id": {
-          "type": "string",
-          "description": "Account ID."
-        },
-        "created": {
-          "type": "string",
-          "format": "date-time",
-          "description": "Time the account was created."
-        },
-        "name": {
-          "description": "Account name.",
-          "type": "string"
-        },
-        "starred": {
-          "description": "Indicates whether this account is starred or not.",
-          "type": "boolean"
-        },
-        "kind": {
-          "type": "string",
-          "default": "analytics#account",
-          "description": "Resource type for Analytics account."
-        },
-        "permissions": {
-          "description": "Permissions the user has for this account.",
-          "type": "object",
-          "properties": {
-            "effective": {
-              "readOnly": true,
-              "type": "array",
-              "description": "All the permissions that the user has for this account. These include any implied permissions (e.g., EDIT implies VIEW).",
-              "items": {
-                "type": "string"
-              }
-            }
-          }
-        },
-        "updated": {
-          "type": "string",
-          "format": "date-time",
-          "description": "Time the account was last modified."
-        },
-        "childLink": {
-          "properties": {
-            "href": {
-              "description": "Link to the list of web properties for this account.",
-              "type": "string"
-            },
-            "type": {
-              "description": "Type of the child link. Its value is \"analytics#webproperties\".",
-              "default": "analytics#webproperties",
-              "type": "string"
-            }
-          },
-          "type": "object",
-          "description": "Child link for an account entry. Points to the list of web properties for this account."
-        }
-      },
-      "type": "object"
-    },
-    "Segment": {
-      "description": "JSON template for an Analytics segment.",
-      "id": "Segment",
-      "type": "object",
-      "properties": {
-        "created": {
-          "description": "Time the segment was created.",
-          "format": "date-time",
-          "type": "string"
-        },
-        "selfLink": {
-          "description": "Link for this segment.",
-          "type": "string"
-        },
-        "definition": {
-          "description": "Segment definition.",
-          "type": "string"
-        },
-        "type": {
-          "description": "Type for a segment. Possible values are \"BUILT_IN\" or \"CUSTOM\".",
-          "type": "string"
-        },
-        "updated": {
-          "format": "date-time",
-          "type": "string",
-          "description": "Time the segment was last modified."
-        },
-        "kind": {
-          "default": "analytics#segment",
-          "description": "Resource type for Analytics segment.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "Segment name."
-        },
-        "id": {
-          "type": "string",
-          "description": "Segment ID."
-        },
-        "segmentId": {
-          "type": "string",
-          "description": "Segment ID. Can be used with the 'segment' parameter in Core Reporting API."
-        }
-      }
-    },
-    "EntityUserLink": {
-      "description": "JSON template for an Analytics Entity-User Link. Returns permissions that a user has for an entity.",
-      "type": "object",
-      "properties": {
-        "entity": {
-          "type": "object",
-          "description": "Entity for this link. It can be an account, a web property, or a view (profile).",
-          "properties": {
-            "profileRef": {
-              "description": "View (Profile) for this link.",
-              "$ref": "ProfileRef"
-            },
-            "accountRef": {
-              "$ref": "AccountRef",
-              "description": "Account for this link."
-            },
-            "webPropertyRef": {
-              "description": "Web property for this link.",
-              "$ref": "WebPropertyRef"
-            }
-          }
-        },
-        "kind": {
-          "description": "Resource type for entity user link.",
-          "type": "string",
-          "default": "analytics#entityUserLink"
-        },
-        "id": {
-          "description": "Entity user link ID",
-          "type": "string"
-        },
-        "permissions": {
-          "properties": {
-            "effective": {
-              "readOnly": true,
-              "items": {
-                "type": "string"
-              },
-              "description": "Effective permissions represent all the permissions that a user has for this entity. These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent entity. Effective permissions are read-only.",
-              "type": "array"
-            },
-            "local": {
-              "type": "array",
-              "description": "Permissions that a user has been assigned at this very level. Does not include any implied or inherited permissions. Local permissions are modifiable.",
-              "items": {
-                "type": "string"
-              }
-            }
-          },
-          "description": "Permissions the user has for this entity.",
-          "type": "object"
-        },
-        "selfLink": {
-          "type": "string",
-          "description": "Self link for this resource."
-        },
-        "userRef": {
-          "description": "User reference.",
-          "$ref": "UserRef"
-        }
-      },
-      "id": "EntityUserLink"
-    },
-    "CustomDimension": {
-      "type": "object",
-      "id": "CustomDimension",
-      "properties": {
-        "name": {
-          "description": "Name of the custom dimension.",
-          "type": "string"
-        },
-        "id": {
-          "type": "string",
-          "description": "Custom dimension ID."
-        },
-        "kind": {
-          "default": "analytics#customDimension",
-          "description": "Kind value for a custom dimension. Set to \"analytics#customDimension\". It is a read-only field.",
-          "readOnly": true,
-          "type": "string"
-        },
-        "scope": {
-          "description": "Scope of the custom dimension: HIT, SESSION, USER or PRODUCT.",
-          "type": "string"
-        },
-        "created": {
-          "format": "date-time",
-          "type": "string",
-          "readOnly": true,
-          "description": "Time the custom dimension was created."
-        },
-        "index": {
-          "description": "Index of the custom dimension.",
-          "type": "integer",
-          "format": "int32",
-          "readOnly": true
-        },
-        "selfLink": {
-          "readOnly": true,
-          "type": "string",
-          "description": "Link for the custom dimension"
-        },
-        "webPropertyId": {
-          "description": "Property ID.",
-          "type": "string"
-        },
-        "active": {
-          "type": "boolean",
-          "description": "Boolean indicating whether the custom dimension is active."
-        },
-        "parentLink": {
-          "properties": {
-            "href": {
-              "type": "string",
-              "description": "Link to the property to which the custom dimension belongs."
-            },
-            "type": {
-              "description": "Type of the parent link. Set to \"analytics#webproperty\".",
-              "default": "analytics#webproperty",
-              "type": "string"
-            }
-          },
-          "type": "object",
-          "description": "Parent link for the custom dimension. Points to the property to which the custom dimension belongs."
-        },
-        "accountId": {
-          "description": "Account ID.",
-          "type": "string"
-        },
-        "updated": {
-          "type": "string",
-          "format": "date-time",
-          "readOnly": true,
-          "description": "Time the custom dimension was last modified."
-        }
-      },
-      "description": "JSON template for Analytics Custom Dimension."
-    },
-    "Goals": {
-      "description": "A goal collection lists Analytics goals to which the user has access. Each view (profile) can have a set of goals. Each resource in the Goal collection corresponds to a single Analytics goal.",
-      "type": "object",
-      "id": "Goals",
-      "properties": {
-        "items": {
-          "items": {
-            "$ref": "Goal"
-          },
-          "type": "array",
-          "description": "A list of goals."
-        },
-        "startIndex": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter."
-        },
-        "previousLink": {
-          "description": "Link to previous page for this goal collection.",
-          "type": "string"
-        },
-        "username": {
-          "description": "Email ID of the authenticated user",
-          "type": "string"
-        },
-        "nextLink": {
-          "type": "string",
-          "description": "Link to next page for this goal collection."
-        },
-        "kind": {
-          "description": "Collection type.",
-          "type": "string",
-          "default": "analytics#goals"
-        },
-        "totalResults": {
-          "description": "The total number of results for the query, regardless of the number of resources in the result.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "itemsPerPage": {
-          "format": "int32",
-          "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
-          "type": "integer"
-        }
-      }
-    },
-    "Uploads": {
-      "description": "Upload collection lists Analytics uploads to which the user has access. Each custom data source can have a set of uploads. Each resource in the upload collection corresponds to a single Analytics data upload.",
-      "properties": {
-        "nextLink": {
-          "description": "Link to next page for this upload collection.",
-          "type": "string"
-        },
-        "totalResults": {
-          "type": "integer",
-          "description": "The total number of results for the query, regardless of the number of resources in the result.",
-          "format": "int32"
-        },
-        "previousLink": {
-          "description": "Link to previous page for this upload collection.",
-          "type": "string"
-        },
-        "startIndex": {
-          "type": "integer",
-          "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
-          "format": "int32"
-        },
-        "items": {
-          "description": "A list of uploads.",
-          "type": "array",
-          "items": {
-            "$ref": "Upload"
-          }
-        },
-        "itemsPerPage": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter."
-        },
-        "kind": {
-          "description": "Collection type.",
-          "default": "analytics#uploads",
-          "type": "string"
-        }
-      },
-      "id": "Uploads",
-      "type": "object"
-    },
-    "AdWordsAccount": {
-      "id": "AdWordsAccount",
-      "type": "object",
-      "properties": {
-        "autoTaggingEnabled": {
-          "type": "boolean",
-          "description": "True if auto-tagging is enabled on the Google Ads account. Read-only after the insert operation."
-        },
-        "customerId": {
-          "annotations": {
-            "required": [
-              "analytics.management.webPropertyAdWordsLinks.insert",
-              "analytics.management.webPropertyAdWordsLinks.update"
-            ]
-          },
-          "type": "string",
-          "description": "Customer ID. This field is required when creating a Google Ads link."
-        },
-        "kind": {
-          "default": "analytics#adWordsAccount",
-          "description": "Resource type for Google Ads account.",
-          "type": "string"
-        }
-      },
-      "description": "JSON template for an Google Ads account."
-    },
-    "WebPropertySummary": {
-      "properties": {
-        "profiles": {
-          "description": "List of profiles under this web property.",
-          "items": {
-            "$ref": "ProfileSummary"
-          },
-          "type": "array"
-        },
-        "kind": {
-          "default": "analytics#webPropertySummary",
-          "type": "string",
-          "description": "Resource type for Analytics WebPropertySummary."
-        },
-        "websiteUrl": {
-          "description": "Website url for this web property.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Web property name.",
-          "type": "string"
-        },
-        "internalWebPropertyId": {
-          "type": "string",
-          "description": "Internal ID for this web property."
-        },
-        "id": {
-          "type": "string",
-          "description": "Web property ID of the form UA-XXXXX-YY."
-        },
-        "starred": {
-          "type": "boolean",
-          "description": "Indicates whether this web property is starred or not."
-        },
-        "level": {
-          "description": "Level for this web property. Possible values are STANDARD or PREMIUM.",
-          "type": "string"
-        }
-      },
-      "description": "JSON template for an Analytics WebPropertySummary. WebPropertySummary returns basic information (i.e., summary) for a web property.",
-      "type": "object",
-      "id": "WebPropertySummary"
-    },
-    "Experiments": {
-      "id": "Experiments",
-      "description": "An experiment collection lists Analytics experiments to which the user has access. Each view (profile) can have a set of experiments. Each resource in the Experiment collection corresponds to a single Analytics experiment.",
-      "properties": {
-        "startIndex": {
-          "type": "integer",
-          "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
-          "format": "int32"
-        },
-        "totalResults": {
-          "description": "The total number of results for the query, regardless of the number of resources in the result.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "itemsPerPage": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter."
-        },
-        "kind": {
-          "type": "string",
-          "default": "analytics#experiments",
-          "description": "Collection type."
-        },
-        "nextLink": {
-          "description": "Link to next page for this experiment collection.",
-          "type": "string"
-        },
-        "previousLink": {
-          "description": "Link to previous page for this experiment collection.",
-          "type": "string"
-        },
-        "items": {
-          "items": {
-            "$ref": "Experiment"
-          },
-          "type": "array",
-          "description": "A list of experiments."
-        },
-        "username": {
-          "description": "Email ID of the authenticated user",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "Webproperties": {
-      "description": "A web property collection lists Analytics web properties to which the user has access. Each resource in the collection corresponds to a single Analytics web property.",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Collection type.",
-          "default": "analytics#webproperties"
-        },
-        "previousLink": {
-          "description": "Link to previous page for this web property collection.",
-          "type": "string"
-        },
-        "totalResults": {
-          "description": "The total number of results for the query, regardless of the number of results in the response.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "items": {
-          "items": {
-            "$ref": "Webproperty"
-          },
-          "type": "array",
-          "description": "A list of web properties."
-        },
-        "startIndex": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter."
-        },
-        "itemsPerPage": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter."
-        },
-        "nextLink": {
-          "description": "Link to next page for this web property collection.",
-          "type": "string"
-        },
-        "username": {
-          "description": "Email ID of the authenticated user",
-          "type": "string"
-        }
-      },
-      "id": "Webproperties",
-      "type": "object"
-    },
-    "RealtimeData": {
-      "id": "RealtimeData",
-      "properties": {
-        "columnHeaders": {
-          "items": {
-            "properties": {
-              "columnType": {
-                "description": "Column Type. Either DIMENSION or METRIC.",
-                "type": "string"
-              },
-              "name": {
-                "type": "string",
-                "description": "Column name."
-              },
-              "dataType": {
-                "type": "string",
-                "description": "Data type. Dimension column headers have only STRING as the data type. Metric column headers have data types for metric values such as INTEGER, DOUBLE, CURRENCY etc."
-              }
-            },
-            "type": "object"
-          },
-          "description": "Column headers that list dimension names followed by the metric names. The order of dimensions and metrics is same as specified in the request.",
-          "type": "array"
-        },
-        "id": {
-          "type": "string",
-          "description": "Unique ID for this data response."
-        },
-        "rows": {
-          "description": "Real time data rows, where each row contains a list of dimension values followed by the metric values. The order of dimensions and metrics is same as specified in the request.",
-          "items": {
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
-          },
-          "type": "array"
-        },
-        "selfLink": {
-          "description": "Link to this page.",
-          "type": "string"
-        },
-        "totalResults": {
-          "type": "integer",
-          "description": "The total number of rows for the query, regardless of the number of rows in the response.",
-          "format": "int32"
-        },
-        "totalsForAllResults": {
-          "description": "Total values for the requested metrics over all the results, not just the results returned in this response. The order of the metric totals is same as the metric order specified in the request.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "string",
-            "description": "Key-value pair for the total value of a metric. Key is the metric name and the value is the total value for that metric."
-          }
-        },
-        "kind": {
-          "type": "string",
-          "default": "analytics#realtimeData",
-          "description": "Resource type."
-        },
-        "profileInfo": {
-          "description": "Information for the view (profile), for which the real time data was requested.",
-          "properties": {
-            "tableId": {
-              "description": "Table ID for view (profile).",
-              "type": "string"
-            },
-            "internalWebPropertyId": {
-              "description": "Internal ID for the web property to which this view (profile) belongs.",
-              "type": "string"
-            },
-            "profileName": {
-              "description": "View (Profile) name.",
-              "type": "string"
-            },
-            "webPropertyId": {
-              "description": "Web Property ID to which this view (profile) belongs.",
-              "type": "string"
-            },
-            "profileId": {
-              "description": "View (Profile) ID.",
-              "type": "string"
-            },
-            "accountId": {
-              "description": "Account ID to which this view (profile) belongs.",
-              "type": "string"
-            }
-          },
-          "type": "object"
-        },
-        "query": {
-          "type": "object",
-          "description": "Real time data request query parameters.",
-          "properties": {
-            "sort": {
-              "type": "array",
-              "items": {
-                "type": "string"
-              },
-              "description": "List of dimensions or metrics based on which real time data is sorted."
-            },
-            "dimensions": {
-              "description": "List of real time dimensions.",
-              "type": "string"
-            },
-            "max-results": {
-              "type": "integer",
-              "description": "Maximum results per page.",
-              "format": "int32"
-            },
-            "filters": {
-              "type": "string",
-              "description": "Comma-separated list of dimension or metric filters."
-            },
-            "metrics": {
-              "items": {
-                "type": "string"
-              },
-              "type": "array",
-              "description": "List of real time metrics."
-            },
-            "ids": {
-              "type": "string",
-              "description": "Unique table ID."
-            }
-          }
-        }
-      },
-      "description": "Real time data for a given view (profile).",
-      "type": "object"
-    },
-    "AccountTicket": {
-      "description": "JSON template for an Analytics account ticket. The account ticket consists of the ticket ID and the basic information for the account, property and profile.",
-      "type": "object",
-      "id": "AccountTicket",
-      "properties": {
-        "redirectUri": {
-          "description": "Redirect URI where the user will be sent after accepting Terms of Service. Must be configured in APIs console as a callback URL.",
-          "type": "string"
-        },
-        "id": {
-          "description": "Account ticket ID used to access the account ticket.",
-          "type": "string"
-        },
-        "profile": {
-          "$ref": "Profile",
-          "description": "View (Profile) for the account."
-        },
-        "webproperty": {
-          "$ref": "Webproperty",
-          "description": "Web property for the account."
-        },
-        "account": {
-          "description": "Account for this ticket.",
-          "$ref": "Account"
-        },
-        "kind": {
-          "description": "Resource type for account ticket.",
-          "default": "analytics#accountTicket",
-          "type": "string"
-        }
-      }
-    },
-    "Filter": {
-      "properties": {
-        "includeDetails": {
-          "description": "Details for the filter of the type INCLUDE.",
-          "$ref": "FilterExpression"
-        },
-        "advancedDetails": {
-          "type": "object",
-          "properties": {
-            "outputConstructor": {
-              "type": "string",
-              "description": "Expression used to construct the output value."
-            },
-            "fieldBRequired": {
-              "description": "Indicates if field B is required to match.",
-              "type": "boolean"
-            },
-            "fieldB": {
-              "type": "string",
-              "description": "Field B."
-            },
-            "fieldBIndex": {
-              "description": "The Index of the custom dimension. Required if field is a CUSTOM_DIMENSION.",
-              "format": "int32",
-              "type": "integer"
-            },
-            "outputToFieldIndex": {
-              "format": "int32",
-              "description": "The Index of the custom dimension. Required if field is a CUSTOM_DIMENSION.",
-              "type": "integer"
-            },
-            "fieldARequired": {
-              "type": "boolean",
-              "description": "Indicates if field A is required to match."
-            },
-            "overrideOutputField": {
-              "type": "boolean",
-              "description": "Indicates if the existing value of the output field, if any, should be overridden by the output expression."
-            },
-            "extractA": {
-              "type": "string",
-              "description": "Expression to extract from field A."
-            },
-            "outputToField": {
-              "description": "Output field.",
-              "type": "string"
-            },
-            "extractB": {
-              "description": "Expression to extract from field B.",
-              "type": "string"
-            },
-            "fieldAIndex": {
-              "type": "integer",
-              "description": "The Index of the custom dimension. Required if field is a CUSTOM_DIMENSION.",
-              "format": "int32"
-            },
-            "fieldA": {
-              "type": "string",
-              "description": "Field A."
-            },
-            "caseSensitive": {
-              "description": "Indicates if the filter expressions are case sensitive.",
-              "type": "boolean"
-            }
-          },
-          "description": "Details for the filter of the type ADVANCED."
-        },
-        "id": {
-          "type": "string",
-          "description": "Filter ID."
-        },
-        "excludeDetails": {
-          "description": "Details for the filter of the type EXCLUDE.",
-          "$ref": "FilterExpression"
-        },
-        "kind": {
-          "readOnly": true,
-          "default": "analytics#filter",
-          "description": "Resource type for Analytics filter.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this filter.",
-          "annotations": {
-            "required": [
-              "analytics.management.filters.insert",
-              "analytics.management.filters.update"
-            ]
-          }
-        },
-        "lowercaseDetails": {
-          "type": "object",
-          "description": "Details for the filter of the type LOWER.",
-          "properties": {
-            "field": {
-              "description": "Field to use in the filter.",
-              "type": "string"
-            },
-            "fieldIndex": {
-              "description": "The Index of the custom dimension. Required if field is a CUSTOM_DIMENSION.",
-              "type": "integer",
-              "format": "int32"
-            }
-          }
-        },
-        "searchAndReplaceDetails": {
-          "type": "object",
-          "description": "Details for the filter of the type SEARCH_AND_REPLACE.",
-          "properties": {
-            "searchString": {
-              "description": "Term to search.",
-              "type": "string"
-            },
-            "replaceString": {
-              "type": "string",
-              "description": "Term to replace the search term with."
-            },
-            "caseSensitive": {
-              "description": "Determines if the filter is case sensitive.",
-              "type": "boolean"
-            },
-            "fieldIndex": {
-              "description": "The Index of the custom dimension. Required if field is a CUSTOM_DIMENSION.",
-              "type": "integer",
-              "format": "int32"
-            },
-            "field": {
-              "type": "string",
-              "description": "Field to use in the filter."
-            }
-          }
-        },
-        "accountId": {
-          "description": "Account ID to which this filter belongs.",
-          "type": "string"
-        },
-        "parentLink": {
-          "type": "object",
-          "properties": {
-            "type": {
-              "default": "analytics#account",
-              "type": "string",
-              "description": "Value is \"analytics#account\"."
-            },
-            "href": {
-              "type": "string",
-              "description": "Link to the account to which this filter belongs."
-            }
-          },
-          "description": "Parent link for this filter. Points to the account to which this filter belongs."
-        },
-        "uppercaseDetails": {
-          "type": "object",
-          "description": "Details for the filter of the type UPPER.",
-          "properties": {
-            "fieldIndex": {
-              "format": "int32",
-              "type": "integer",
-              "description": "The Index of the custom dimension. Required if field is a CUSTOM_DIMENSION."
-            },
-            "field": {
-              "description": "Field to use in the filter.",
-              "type": "string"
-            }
-          }
-        },
-        "updated": {
-          "description": "Time this filter was last modified.",
-          "format": "date-time",
-          "readOnly": true,
-          "type": "string"
-        },
-        "type": {
-          "type": "string",
-          "description": "Type of this filter. Possible values are INCLUDE, EXCLUDE, LOWERCASE, UPPERCASE, SEARCH_AND_REPLACE and ADVANCED.",
-          "annotations": {
-            "required": [
-              "analytics.management.filters.insert",
-              "analytics.management.filters.update"
-            ]
-          }
-        },
-        "created": {
-          "format": "date-time",
-          "type": "string",
-          "description": "Time this filter was created.",
-          "readOnly": true
-        },
-        "selfLink": {
-          "description": "Link for this filter.",
-          "readOnly": true,
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "Filter",
-      "description": "JSON template for an Analytics account filter."
-    },
-    "FilterRef": {
-      "properties": {
-        "accountId": {
-          "type": "string",
-          "description": "Account ID to which this filter belongs.",
-          "readOnly": true
-        },
-        "id": {
-          "annotations": {
-            "required": [
-              "analytics.management.profileFilterLinks.insert"
-            ]
-          },
-          "type": "string",
-          "description": "Filter ID."
-        },
-        "kind": {
-          "default": "analytics#filterRef",
-          "type": "string",
-          "description": "Kind value for filter reference."
-        },
-        "name": {
-          "type": "string",
-          "readOnly": true,
-          "description": "Name of this filter."
-        },
-        "href": {
-          "type": "string",
-          "description": "Link for this filter."
-        }
-      },
-      "description": "JSON template for a profile filter link.",
-      "type": "object",
-      "id": "FilterRef"
-    },
-    "HashClientIdResponse": {
-      "description": "JSON template for a hash Client Id response resource.",
-      "id": "HashClientIdResponse",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "default": "analytics#hashClientIdResponse"
-        },
-        "webPropertyId": {
-          "type": "string"
-        },
-        "clientId": {
-          "type": "string"
-        },
-        "hashedClientId": {
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "Webproperty": {
-      "properties": {
-        "selfLink": {
-          "description": "Link for this web property.",
-          "type": "string",
-          "readOnly": true
-        },
-        "accountId": {
-          "type": "string",
-          "description": "Account ID to which this web property belongs."
-        },
-        "industryVertical": {
-          "type": "string",
-          "description": "The industry vertical/category selected for this web property."
-        },
-        "starred": {
-          "description": "Indicates whether this web property is starred or not.",
-          "type": "boolean"
-        },
-        "dataRetentionResetOnNewActivity": {
-          "description": "Set to true to reset the retention period of the user identifier with each new event from that user (thus setting the expiration date to current time plus retention period).\nSet to false to delete data associated with the user identifier automatically after the rentention period.\nThis property cannot be set on insert.",
-          "type": "boolean"
-        },
-        "defaultProfileId": {
-          "format": "int64",
-          "description": "Default view (profile) ID.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of this web property.",
-          "type": "string"
-        },
-        "updated": {
-          "readOnly": true,
-          "description": "Time this web property was last modified.",
-          "type": "string",
-          "format": "date-time"
-        },
-        "id": {
-          "description": "Web property ID of the form UA-XXXXX-YY.",
-          "type": "string"
-        },
-        "permissions": {
-          "type": "object",
-          "description": "Permissions the user has for this web property.",
-          "properties": {
-            "effective": {
-              "readOnly": true,
-              "type": "array",
-              "description": "All the permissions that the user has for this web property. These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent account.",
-              "items": {
-                "type": "string"
-              }
-            }
-          }
-        },
-        "kind": {
-          "readOnly": true,
-          "type": "string",
-          "description": "Resource type for Analytics WebProperty.",
-          "default": "analytics#webproperty"
-        },
-        "websiteUrl": {
-          "type": "string",
-          "description": "Website url for this web property."
-        },
-        "parentLink": {
-          "description": "Parent link for this web property. Points to the account to which this web property belongs.",
-          "type": "object",
-          "properties": {
-            "type": {
-              "description": "Type of the parent link. Its value is \"analytics#account\".",
-              "type": "string",
-              "default": "analytics#account"
-            },
-            "href": {
-              "type": "string",
-              "description": "Link to the account for this web property."
-            }
-          }
-        },
-        "created": {
-          "format": "date-time",
-          "type": "string",
-          "readOnly": true,
-          "description": "Time this web property was created."
-        },
-        "level": {
-          "readOnly": true,
-          "type": "string",
-          "description": "Level for this web property. Possible values are STANDARD or PREMIUM."
-        },
-        "profileCount": {
-          "format": "int32",
-          "readOnly": true,
-          "type": "integer",
-          "description": "View (Profile) count for this web property."
-        },
-        "internalWebPropertyId": {
-          "type": "string",
-          "readOnly": true,
-          "description": "Internal ID for this web property."
-        },
-        "childLink": {
-          "description": "Child link for this web property. Points to the list of views (profiles) for this web property.",
-          "type": "object",
-          "properties": {
-            "href": {
-              "description": "Link to the list of views (profiles) for this web property.",
-              "type": "string"
-            },
-            "type": {
-              "description": "Type of the parent link. Its value is \"analytics#profiles\".",
-              "type": "string",
-              "default": "analytics#profiles"
-            }
-          }
-        },
-        "dataRetentionTtl": {
-          "description": "The length of time for which user and event data is retained.\nThis property cannot be set on insert.",
-          "type": "string"
-        }
-      },
-      "id": "Webproperty",
-      "description": "JSON template for an Analytics web property.",
-      "type": "object"
-    },
-    "FilterExpression": {
-      "id": "FilterExpression",
-      "properties": {
-        "expressionValue": {
-          "description": "Filter expression value",
-          "type": "string"
-        },
-        "field": {
-          "type": "string",
-          "description": "Field to filter. Possible values:  \n- Content and Traffic  \n- PAGE_REQUEST_URI, \n- PAGE_HOSTNAME, \n- PAGE_TITLE, \n- REFERRAL, \n- COST_DATA_URI (Campaign target URL), \n- HIT_TYPE, \n- INTERNAL_SEARCH_TERM, \n- INTERNAL_SEARCH_TYPE, \n- SOURCE_PROPERTY_TRACKING_ID,   \n- Campaign or AdGroup  \n- CAMPAIGN_SOURCE, \n- CAMPAIGN_MEDIUM, \n- CAMPAIGN_NAME, \n- CAMPAIGN_AD_GROUP, \n- CAMPAIGN_TERM, \n- CAMPAIGN_CONTENT, \n- CAMPAIGN_CODE, \n- CAMPAIGN_REFERRAL_PATH,   \n- E-Commerce  \n- TRANSACTION_COUNTRY, \n- TRANSACTION_REGION, \n- TRANSACTION_CITY, \n- TRANSACTION_AFFILIATION (Store or order location), \n- ITEM_NAME, \n- ITEM_CODE, \n- ITEM_VARIATION, \n- TRANSACTION_ID, \n- TRANSACTION_CURRENCY_CODE, \n- PRODUCT_ACTION_TYPE,   \n- Audience/Users  \n- BROWSER, \n- BROWSER_VERSION, \n- BROWSER_SIZE, \n- PLATFORM, \n- PLATFORM_VERSION, \n- LANGUAGE, \n- SCREEN_RESOLUTION, \n- SCREEN_COLORS, \n- JAVA_ENABLED (Boolean Field), \n- FLASH_VERSION, \n- GEO_SPEED (Connection speed), \n- VISITOR_TYPE, \n- GEO_ORGANIZATION (ISP organization), \n- GEO_DOMAIN, \n- GEO_IP_ADDRESS, \n- GEO_IP_VERSION,   \n- Location  \n- GEO_COUNTRY, \n- GEO_REGION, \n- GEO_CITY,   \n- Event  \n- EVENT_CATEGORY, \n- EVENT_ACTION, \n- EVENT_LABEL,   \n- Other  \n- CUSTOM_FIELD_1, \n- CUSTOM_FIELD_2, \n- USER_DEFINED_VALUE,   \n- Application  \n- APP_ID, \n- APP_INSTALLER_ID, \n- APP_NAME, \n- APP_VERSION, \n- SCREEN, \n- IS_APP (Boolean Field), \n- IS_FATAL_EXCEPTION (Boolean Field), \n- EXCEPTION_DESCRIPTION,   \n- Mobile device  \n- IS_MOBILE (Boolean Field, Deprecated. Use DEVICE_CATEGORY=mobile), \n- IS_TABLET (Boolean Field, Deprecated. Use DEVICE_CATEGORY=tablet), \n- DEVICE_CATEGORY, \n- MOBILE_HAS_QWERTY_KEYBOARD (Boolean Field), \n- MOBILE_HAS_NFC_SUPPORT (Boolean Field), \n- MOBILE_HAS_CELLULAR_RADIO (Boolean Field), \n- MOBILE_HAS_WIFI_SUPPORT (Boolean Field), \n- MOBILE_BRAND_NAME, \n- MOBILE_MODEL_NAME, \n- MOBILE_MARKETING_NAME, \n- MOBILE_POINTING_METHOD,   \n- Social  \n- SOCIAL_NETWORK, \n- SOCIAL_ACTION, \n- SOCIAL_ACTION_TARGET,   \n- Custom dimension  \n- CUSTOM_DIMENSION (See accompanying field index),"
-        },
-        "fieldIndex": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The Index of the custom dimension. Set only if the field is a is CUSTOM_DIMENSION."
-        },
-        "kind": {
-          "default": "analytics#filterExpression",
-          "description": "Kind value for filter expression",
-          "type": "string"
-        },
-        "matchType": {
-          "description": "Match type for this filter. Possible values are BEGINS_WITH, EQUAL, ENDS_WITH, CONTAINS, or MATCHES. GEO_DOMAIN, GEO_IP_ADDRESS, PAGE_REQUEST_URI, or PAGE_HOSTNAME filters can use any match type; all other filters must use MATCHES.",
-          "type": "string"
-        },
-        "caseSensitive": {
-          "description": "Determines if the filter is case sensitive.",
-          "type": "boolean"
-        }
-      },
-      "description": "JSON template for an Analytics filter expression.",
-      "type": "object"
-    },
-    "ProfileRef": {
-      "description": "JSON template for a linked view (profile).",
-      "type": "object",
-      "id": "ProfileRef",
-      "properties": {
-        "internalWebPropertyId": {
-          "type": "string",
-          "description": "Internal ID for the web property to which this view (profile) belongs."
-        },
-        "webPropertyId": {
-          "description": "Web property ID of the form UA-XXXXX-YY to which this view (profile) belongs.",
-          "type": "string"
-        },
-        "accountId": {
-          "type": "string",
-          "description": "Account ID to which this view (profile) belongs."
-        },
-        "id": {
-          "type": "string",
-          "description": "View (Profile) ID."
-        },
-        "href": {
-          "type": "string",
-          "description": "Link for this view (profile)."
-        },
-        "kind": {
-          "description": "Analytics view (profile) reference.",
-          "type": "string",
-          "default": "analytics#profileRef"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this view (profile)."
-        }
-      }
-    },
-    "RemarketingAudiences": {
-      "properties": {
-        "username": {
-          "description": "Email ID of the authenticated user",
-          "type": "string"
-        },
-        "items": {
-          "type": "array",
-          "items": {
-            "$ref": "RemarketingAudience"
-          },
-          "description": "A list of remarketing audiences."
-        },
-        "nextLink": {
-          "description": "Link to next page for this remarketing audience collection.",
-          "type": "string"
-        },
-        "kind": {
-          "default": "analytics#remarketingAudiences",
-          "description": "Collection type.",
-          "type": "string"
-        },
-        "itemsPerPage": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter."
-        },
-        "totalResults": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The total number of results for the query, regardless of the number of results in the response."
-        },
-        "startIndex": {
-          "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "previousLink": {
-          "type": "string",
-          "description": "Link to previous page for this view (profile) collection."
-        }
-      },
-      "description": "A remarketing audience collection lists Analytics remarketing audiences to which the user has access. Each resource in the collection corresponds to a single Analytics remarketing audience.",
-      "type": "object",
-      "id": "RemarketingAudiences"
-    },
-    "Profile": {
-      "properties": {
-        "eCommerceTracking": {
-          "type": "boolean",
-          "description": "Indicates whether ecommerce tracking is enabled for this view (profile)."
-        },
-        "excludeQueryParameters": {
-          "description": "The query parameters that are excluded from this view (profile).",
-          "type": "string"
-        },
-        "botFilteringEnabled": {
-          "type": "boolean",
-          "description": "Indicates whether bot filtering is enabled for this view (profile)."
-        },
-        "created": {
-          "type": "string",
-          "description": "Time this view (profile) was created.",
-          "readOnly": true,
-          "format": "date-time"
-        },
-        "timezone": {
-          "description": "Time zone for which this view (profile) has been configured. Time zones are identified by strings from the TZ database.",
-          "type": "string"
-        },
-        "selfLink": {
-          "description": "Link for this view (profile).",
-          "readOnly": true,
-          "type": "string"
-        },
-        "starred": {
-          "description": "Indicates whether this view (profile) is starred or not.",
-          "type": "boolean"
-        },
-        "permissions": {
-          "properties": {
-            "effective": {
-              "items": {
-                "type": "string"
-              },
-              "readOnly": true,
-              "type": "array",
-              "description": "All the permissions that the user has for this view (profile). These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent web property."
-            }
-          },
-          "type": "object",
-          "description": "Permissions the user has for this view (profile)."
-        },
-        "childLink": {
-          "description": "Child link for this view (profile). Points to the list of goals for this view (profile).",
-          "properties": {
-            "type": {
-              "description": "Value is \"analytics#goals\".",
-              "type": "string",
-              "default": "analytics#goals"
-            },
-            "href": {
-              "description": "Link to the list of goals for this view (profile).",
-              "type": "string"
-            }
-          },
-          "type": "object"
-        },
-        "currency": {
-          "description": "The currency type associated with this view (profile), defaults to USD. The supported values are:\nUSD, JPY, EUR, GBP, AUD, KRW, BRL, CNY, DKK, RUB, SEK, NOK, PLN, TRY, TWD, HKD, THB, IDR, ARS, MXN, VND, PHP, INR, CHF, CAD, CZK, NZD, HUF, BGN, LTL, ZAR, UAH, AED, BOB, CLP, COP, EGP, HRK, ILS, MAD, MYR, PEN, PKR, RON, RSD, SAR, SGD, VEF, LVL",
-          "type": "string"
-        },
-        "webPropertyId": {
-          "description": "Web property ID of the form UA-XXXXX-YY to which this view (profile) belongs.",
-          "type": "string",
-          "readOnly": true
-        },
-        "stripSiteSearchCategoryParameters": {
-          "type": "boolean",
-          "description": "Whether or not Analytics will strip search category parameters from the URLs in your reports."
-        },
-        "name": {
-          "description": "Name of this view (profile).",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "default": "analytics#profile",
-          "readOnly": true,
-          "description": "Resource type for Analytics view (profile)."
-        },
-        "siteSearchQueryParameters": {
-          "type": "string",
-          "description": "The site search query parameters for this view (profile)."
-        },
-        "id": {
-          "type": "string",
-          "description": "View (Profile) ID."
-        },
-        "defaultPage": {
-          "type": "string",
-          "description": "Default page for this view (profile)."
-        },
-        "stripSiteSearchQueryParameters": {
-          "type": "boolean",
-          "description": "Whether or not Analytics will strip search query parameters from the URLs in your reports."
-        },
-        "enhancedECommerceTracking": {
-          "description": "Indicates whether enhanced ecommerce tracking is enabled for this view (profile). This property can only be enabled if ecommerce tracking is enabled.",
-          "type": "boolean"
-        },
-        "accountId": {
-          "type": "string",
-          "description": "Account ID to which this view (profile) belongs."
-        },
-        "internalWebPropertyId": {
-          "type": "string",
-          "readOnly": true,
-          "description": "Internal ID for the web property to which this view (profile) belongs."
-        },
-        "siteSearchCategoryParameters": {
-          "description": "Site search category parameters for this view (profile).",
-          "type": "string"
-        },
-        "parentLink": {
-          "description": "Parent link for this view (profile). Points to the web property to which this view (profile) belongs.",
-          "properties": {
-            "href": {
-              "description": "Link to the web property to which this view (profile) belongs.",
-              "type": "string"
-            },
-            "type": {
-              "type": "string",
-              "description": "Value is \"analytics#webproperty\".",
-              "default": "analytics#webproperty"
-            }
-          },
-          "type": "object"
-        },
-        "type": {
-          "type": "string",
-          "description": "View (Profile) type. Supported types: WEB or APP."
-        },
-        "websiteUrl": {
-          "type": "string",
-          "description": "Website URL for this view (profile)."
-        },
-        "updated": {
-          "description": "Time this view (profile) was last modified.",
-          "readOnly": true,
-          "format": "date-time",
-          "type": "string"
-        }
-      },
-      "description": "JSON template for an Analytics view (profile).",
-      "type": "object",
-      "id": "Profile"
-    },
-    "Upload": {
-      "properties": {
-        "status": {
-          "description": "Upload status. Possible values: PENDING, COMPLETED, FAILED, DELETING, DELETED.",
-          "type": "string"
-        },
-        "uploadTime": {
-          "description": "Time this file is uploaded.",
-          "format": "date-time",
-          "type": "string"
-        },
-        "customDataSourceId": {
-          "type": "string",
-          "description": "Custom data source Id to which this data import belongs."
-        },
-        "id": {
-          "description": "A unique ID for this upload.",
-          "type": "string"
-        },
-        "accountId": {
-          "type": "string",
-          "description": "Account Id to which this upload belongs.",
-          "format": "int64"
-        },
-        "kind": {
-          "default": "analytics#upload",
-          "type": "string",
-          "description": "Resource type for Analytics upload."
-        },
-        "errors": {
-          "description": "Data import errors collection.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        }
-      },
-      "id": "Upload",
-      "type": "object",
-      "description": "Metadata returned for an upload operation."
-    },
-    "AccountSummaries": {
-      "properties": {
-        "kind": {
-          "description": "Collection type.",
-          "type": "string",
-          "default": "analytics#accountSummaries"
-        },
-        "totalResults": {
-          "format": "int32",
-          "description": "The total number of results for the query, regardless of the number of results in the response.",
-          "type": "integer"
-        },
-        "items": {
-          "type": "array",
-          "items": {
-            "$ref": "AccountSummary"
-          },
-          "description": "A list of AccountSummaries."
-        },
-        "previousLink": {
-          "description": "Link to previous page for this AccountSummary collection.",
-          "type": "string"
-        },
-        "nextLink": {
-          "type": "string",
-          "description": "Link to next page for this AccountSummary collection."
-        },
-        "startIndex": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter."
-        },
-        "itemsPerPage": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter."
-        },
-        "username": {
-          "description": "Email ID of the authenticated user",
-          "type": "string"
-        }
-      },
-      "id": "AccountSummaries",
-      "description": "An AccountSummary collection lists a summary of accounts, properties and views (profiles) to which the user has access. Each resource in the collection corresponds to a single AccountSummary.",
-      "type": "object"
-    },
-    "CustomDimensions": {
-      "type": "object",
-      "properties": {
-        "nextLink": {
-          "type": "string",
-          "description": "Link to next page for this custom dimension collection."
-        },
-        "previousLink": {
-          "description": "Link to previous page for this custom dimension collection.",
-          "type": "string"
-        },
-        "totalResults": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The total number of results for the query, regardless of the number of results in the response."
-        },
-        "itemsPerPage": {
-          "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "startIndex": {
-          "type": "integer",
-          "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
-          "format": "int32"
-        },
-        "items": {
-          "items": {
-            "$ref": "CustomDimension"
-          },
-          "type": "array",
-          "description": "Collection of custom dimensions."
-        },
-        "kind": {
-          "description": "Collection type.",
-          "default": "analytics#customDimensions",
-          "type": "string"
-        },
-        "username": {
-          "type": "string",
-          "description": "Email ID of the authenticated user"
-        }
-      },
-      "description": "A custom dimension collection lists Analytics custom dimensions to which the user has access. Each resource in the collection corresponds to a single Analytics custom dimension.",
-      "id": "CustomDimensions"
-    },
-    "AnalyticsDataimportDeleteUploadDataRequest": {
-      "properties": {
-        "customDataImportUids": {
-          "type": "array",
-          "description": "A list of upload UIDs.",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "AnalyticsDataimportDeleteUploadDataRequest",
-      "description": "Request template for the delete upload data request.",
-      "type": "object"
-    },
-    "Segments": {
-      "properties": {
-        "startIndex": {
-          "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "previousLink": {
-          "description": "Link to previous page for this segment collection.",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Collection type for segments.",
-          "default": "analytics#segments",
-          "type": "string"
-        },
-        "items": {
-          "items": {
-            "$ref": "Segment"
-          },
-          "type": "array",
-          "description": "A list of segments."
-        },
-        "nextLink": {
-          "description": "Link to next page for this segment collection.",
-          "type": "string"
-        },
-        "totalResults": {
-          "format": "int32",
-          "description": "The total number of results for the query, regardless of the number of results in the response.",
-          "type": "integer"
-        },
-        "username": {
-          "description": "Email ID of the authenticated user",
-          "type": "string"
-        },
-        "itemsPerPage": {
-          "type": "integer",
-          "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
-          "format": "int32"
-        }
-      },
-      "type": "object",
-      "id": "Segments",
-      "description": "An segment collection lists Analytics segments that the user has access to. Each resource in the collection corresponds to a single Analytics segment."
-    },
-    "HashClientIdRequest": {
-      "id": "HashClientIdRequest",
-      "type": "object",
-      "description": "JSON template for a hash Client Id request resource.",
-      "properties": {
-        "clientId": {
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "default": "analytics#hashClientIdRequest"
-        },
-        "webPropertyId": {
-          "type": "string"
-        }
-      }
-    },
-    "Profiles": {
-      "type": "object",
-      "id": "Profiles",
-      "description": "A view (profile) collection lists Analytics views (profiles) to which the user has access. Each resource in the collection corresponds to a single Analytics view (profile).",
-      "properties": {
-        "totalResults": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The total number of results for the query, regardless of the number of results in the response."
-        },
-        "startIndex": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter."
-        },
-        "nextLink": {
-          "description": "Link to next page for this view (profile) collection.",
-          "type": "string"
-        },
-        "previousLink": {
-          "type": "string",
-          "description": "Link to previous page for this view (profile) collection."
-        },
-        "username": {
-          "type": "string",
-          "description": "Email ID of the authenticated user"
-        },
-        "kind": {
-          "description": "Collection type.",
-          "type": "string",
-          "default": "analytics#profiles"
-        },
-        "itemsPerPage": {
-          "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "items": {
-          "description": "A list of views (profiles).",
-          "type": "array",
-          "items": {
-            "$ref": "Profile"
-          }
-        }
-      }
-    },
-    "GaData": {
-      "description": "Analytics data for a given view (profile).",
-      "id": "GaData",
-      "properties": {
-        "profileInfo": {
-          "description": "Information for the view (profile), for which the Analytics data was requested.",
-          "type": "object",
-          "properties": {
-            "internalWebPropertyId": {
-              "type": "string",
-              "description": "Internal ID for the web property to which this view (profile) belongs."
-            },
-            "accountId": {
-              "type": "string",
-              "description": "Account ID to which this view (profile) belongs."
-            },
-            "profileId": {
-              "type": "string",
-              "description": "View (Profile) ID."
-            },
-            "profileName": {
-              "description": "View (Profile) name.",
-              "type": "string"
-            },
-            "webPropertyId": {
-              "type": "string",
-              "description": "Web Property ID to which this view (profile) belongs."
-            },
-            "tableId": {
-              "description": "Table ID for view (profile).",
-              "type": "string"
-            }
-          }
-        },
-        "dataLastRefreshed": {
-          "type": "string",
-          "description": "The last refreshed time in seconds for Analytics data.",
-          "format": "int64"
-        },
-        "dataTable": {
-          "type": "object",
-          "properties": {
-            "cols": {
-              "items": {
-                "type": "object",
-                "properties": {
-                  "type": {
-                    "type": "string"
-                  },
-                  "label": {
-                    "type": "string"
-                  },
-                  "id": {
-                    "type": "string"
-                  }
-                }
-              },
-              "type": "array"
-            },
-            "rows": {
-              "items": {
-                "type": "object",
-                "properties": {
-                  "c": {
-                    "items": {
-                      "properties": {
-                        "v": {
-                          "type": "string"
+    "protocol": "rest",
+    "resources": {
+        "data": {
+            "resources": {
+                "ga": {
+                    "methods": {
+                        "get": {
+                            "description": "Returns Analytics data for a view (profile).",
+                            "httpMethod": "GET",
+                            "id": "analytics.data.ga.get",
+                            "parameterOrder": [
+                                "ids",
+                                "start-date",
+                                "end-date",
+                                "metrics"
+                            ],
+                            "parameters": {
+                                "dimensions": {
+                                    "description": "A comma-separated list of Analytics dimensions. E.g., 'ga:browser,ga:city'.",
+                                    "location": "query",
+                                    "pattern": "(ga:.+)?",
+                                    "type": "string"
+                                },
+                                "end-date": {
+                                    "description": "End date for fetching Analytics data. Request can should specify an end date formatted as YYYY-MM-DD, or as a relative date (e.g., today, yesterday, or 7daysAgo). The default value is yesterday.",
+                                    "location": "query",
+                                    "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}|today|yesterday|[0-9]+(daysAgo)",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "filters": {
+                                    "description": "A comma-separated list of dimension or metric filters to be applied to Analytics data.",
+                                    "location": "query",
+                                    "pattern": "ga:.+",
+                                    "type": "string"
+                                },
+                                "ids": {
+                                    "description": "Unique table ID for retrieving Analytics data. Table ID is of the form ga:XXXX, where XXXX is the Analytics view (profile) ID.",
+                                    "location": "query",
+                                    "pattern": "ga:[0-9]+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "include-empty-rows": {
+                                    "description": "The response will include empty rows if this parameter is set to true, the default is true",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "max-results": {
+                                    "description": "The maximum number of entries to include in this feed.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "metrics": {
+                                    "description": "A comma-separated list of Analytics metrics. E.g., 'ga:sessions,ga:pageviews'. At least one metric must be specified.",
+                                    "location": "query",
+                                    "pattern": "ga:.+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "output": {
+                                    "description": "The selected format for the response. Default format is JSON.",
+                                    "enum": [
+                                        "dataTable",
+                                        "json"
+                                    ],
+                                    "enumDescriptions": [
+                                        "Returns the response in Google Charts Data Table format. This is useful in creating visualization using Google Charts.",
+                                        "Returns the response in standard JSON format."
+                                    ],
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "samplingLevel": {
+                                    "description": "The desired sampling level.",
+                                    "enum": [
+                                        "DEFAULT",
+                                        "FASTER",
+                                        "HIGHER_PRECISION"
+                                    ],
+                                    "enumDescriptions": [
+                                        "Returns response with a sample size that balances speed and accuracy.",
+                                        "Returns a fast response with a smaller sample size.",
+                                        "Returns a more accurate response using a large sample size, but this may result in the response being slower."
+                                    ],
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "segment": {
+                                    "description": "An Analytics segment to be applied to data.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "sort": {
+                                    "description": "A comma-separated list of dimensions or metrics that determine the sort order for Analytics data.",
+                                    "location": "query",
+                                    "pattern": "(-)?ga:.+",
+                                    "type": "string"
+                                },
+                                "start-date": {
+                                    "description": "Start date for fetching Analytics data. Requests can specify a start date formatted as YYYY-MM-DD, or as a relative date (e.g., today, yesterday, or 7daysAgo). The default value is 7daysAgo.",
+                                    "location": "query",
+                                    "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}|today|yesterday|[0-9]+(daysAgo)",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "start-index": {
+                                    "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                }
+                            },
+                            "path": "data/ga",
+                            "response": {
+                                "$ref": "GaData"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
                         }
-                      },
-                      "type": "object"
-                    },
-                    "type": "array"
-                  }
+                    }
+                },
+                "mcf": {
+                    "methods": {
+                        "get": {
+                            "description": "Returns Analytics Multi-Channel Funnels data for a view (profile).",
+                            "httpMethod": "GET",
+                            "id": "analytics.data.mcf.get",
+                            "parameterOrder": [
+                                "ids",
+                                "start-date",
+                                "end-date",
+                                "metrics"
+                            ],
+                            "parameters": {
+                                "dimensions": {
+                                    "description": "A comma-separated list of Multi-Channel Funnels dimensions. E.g., 'mcf:source,mcf:medium'.",
+                                    "location": "query",
+                                    "pattern": "(mcf:.+)?",
+                                    "type": "string"
+                                },
+                                "end-date": {
+                                    "description": "End date for fetching Analytics data. Requests can specify a start date formatted as YYYY-MM-DD, or as a relative date (e.g., today, yesterday, or 7daysAgo). The default value is 7daysAgo.",
+                                    "location": "query",
+                                    "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}|today|yesterday|[0-9]+(daysAgo)",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "filters": {
+                                    "description": "A comma-separated list of dimension or metric filters to be applied to the Analytics data.",
+                                    "location": "query",
+                                    "pattern": "mcf:.+",
+                                    "type": "string"
+                                },
+                                "ids": {
+                                    "description": "Unique table ID for retrieving Analytics data. Table ID is of the form ga:XXXX, where XXXX is the Analytics view (profile) ID.",
+                                    "location": "query",
+                                    "pattern": "ga:[0-9]+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "max-results": {
+                                    "description": "The maximum number of entries to include in this feed.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "metrics": {
+                                    "description": "A comma-separated list of Multi-Channel Funnels metrics. E.g., 'mcf:totalConversions,mcf:totalConversionValue'. At least one metric must be specified.",
+                                    "location": "query",
+                                    "pattern": "mcf:.+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "samplingLevel": {
+                                    "description": "The desired sampling level.",
+                                    "enum": [
+                                        "DEFAULT",
+                                        "FASTER",
+                                        "HIGHER_PRECISION"
+                                    ],
+                                    "enumDescriptions": [
+                                        "Returns response with a sample size that balances speed and accuracy.",
+                                        "Returns a fast response with a smaller sample size.",
+                                        "Returns a more accurate response using a large sample size, but this may result in the response being slower."
+                                    ],
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "sort": {
+                                    "description": "A comma-separated list of dimensions or metrics that determine the sort order for the Analytics data.",
+                                    "location": "query",
+                                    "pattern": "(-)?mcf:.+",
+                                    "type": "string"
+                                },
+                                "start-date": {
+                                    "description": "Start date for fetching Analytics data. Requests can specify a start date formatted as YYYY-MM-DD, or as a relative date (e.g., today, yesterday, or 7daysAgo). The default value is 7daysAgo.",
+                                    "location": "query",
+                                    "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}|today|yesterday|[0-9]+(daysAgo)",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "start-index": {
+                                    "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                }
+                            },
+                            "path": "data/mcf",
+                            "response": {
+                                "$ref": "McfData"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        }
+                    }
+                },
+                "realtime": {
+                    "methods": {
+                        "get": {
+                            "description": "Returns real time data for a view (profile).",
+                            "httpMethod": "GET",
+                            "id": "analytics.data.realtime.get",
+                            "parameterOrder": [
+                                "ids",
+                                "metrics"
+                            ],
+                            "parameters": {
+                                "dimensions": {
+                                    "description": "A comma-separated list of real time dimensions. E.g., 'rt:medium,rt:city'.",
+                                    "location": "query",
+                                    "pattern": "(ga:.+)|(rt:.+)",
+                                    "type": "string"
+                                },
+                                "filters": {
+                                    "description": "A comma-separated list of dimension or metric filters to be applied to real time data.",
+                                    "location": "query",
+                                    "pattern": "(ga:.+)|(rt:.+)",
+                                    "type": "string"
+                                },
+                                "ids": {
+                                    "description": "Unique table ID for retrieving real time data. Table ID is of the form ga:XXXX, where XXXX is the Analytics view (profile) ID.",
+                                    "location": "query",
+                                    "pattern": "ga:[0-9]+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "max-results": {
+                                    "description": "The maximum number of entries to include in this feed.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "metrics": {
+                                    "description": "A comma-separated list of real time metrics. E.g., 'rt:activeUsers'. At least one metric must be specified.",
+                                    "location": "query",
+                                    "pattern": "(ga:.+)|(rt:.+)",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "sort": {
+                                    "description": "A comma-separated list of dimensions or metrics that determine the sort order for real time data.",
+                                    "location": "query",
+                                    "pattern": "(-)?((ga:.+)|(rt:.+))",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "data/realtime",
+                            "response": {
+                                "$ref": "RealtimeData"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        }
+                    }
                 }
-              },
-              "type": "array"
             }
-          }
         },
-        "sampleSize": {
-          "description": "The number of samples used to calculate the result.",
-          "type": "string",
-          "format": "int64"
-        },
-        "query": {
-          "type": "object",
-          "properties": {
-            "start-index": {
-              "format": "int32",
-              "type": "integer",
-              "description": "Start index."
-            },
-            "start-date": {
-              "description": "Start date.",
-              "type": "string"
-            },
-            "sort": {
-              "items": {
-                "type": "string"
-              },
-              "description": "List of dimensions or metrics based on which Analytics data is sorted.",
-              "type": "array"
-            },
-            "max-results": {
-              "description": "Maximum results per page.",
-              "format": "int32",
-              "type": "integer"
-            },
-            "end-date": {
-              "description": "End date.",
-              "type": "string"
-            },
-            "filters": {
-              "description": "Comma-separated list of dimension or metric filters.",
-              "type": "string"
-            },
-            "dimensions": {
-              "description": "List of analytics dimensions.",
-              "type": "string"
-            },
-            "metrics": {
-              "type": "array",
-              "description": "List of analytics metrics.",
-              "items": {
-                "type": "string"
-              }
-            },
-            "samplingLevel": {
-              "type": "string",
-              "description": "Desired sampling level"
-            },
-            "segment": {
-              "type": "string",
-              "description": "Analytics advanced segment."
-            },
-            "ids": {
-              "description": "Unique table ID.",
-              "type": "string"
+        "management": {
+            "resources": {
+                "accountSummaries": {
+                    "methods": {
+                        "list": {
+                            "description": "Lists account summaries (lightweight tree comprised of accounts/properties/profiles) to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.accountSummaries.list",
+                            "parameters": {
+                                "max-results": {
+                                    "description": "The maximum number of account summaries to include in this response, where the largest acceptable value is 1000.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "start-index": {
+                                    "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                }
+                            },
+                            "path": "management/accountSummaries",
+                            "response": {
+                                "$ref": "AccountSummaries"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        }
+                    }
+                },
+                "accountUserLinks": {
+                    "methods": {
+                        "delete": {
+                            "description": "Removes a user from the given account.",
+                            "httpMethod": "DELETE",
+                            "id": "analytics.management.accountUserLinks.delete",
+                            "parameterOrder": [
+                                "accountId",
+                                "linkId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to delete the user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "linkId": {
+                                    "description": "Link ID to delete the user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/entityUserLinks/{linkId}",
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.manage.users"
+                            ]
+                        },
+                        "insert": {
+                            "description": "Adds a new user to the given account.",
+                            "httpMethod": "POST",
+                            "id": "analytics.management.accountUserLinks.insert",
+                            "parameterOrder": [
+                                "accountId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to create the user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/entityUserLinks",
+                            "request": {
+                                "$ref": "EntityUserLink"
+                            },
+                            "response": {
+                                "$ref": "EntityUserLink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.manage.users"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists account-user links for a given account.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.accountUserLinks.list",
+                            "parameterOrder": [
+                                "accountId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to retrieve the user links for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "max-results": {
+                                    "description": "The maximum number of account-user links to include in this response.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "start-index": {
+                                    "description": "An index of the first account-user link to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/entityUserLinks",
+                            "response": {
+                                "$ref": "EntityUserLinks"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.manage.users",
+                                "https://www.googleapis.com/auth/analytics.manage.users.readonly"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates permissions for an existing user on the given account.",
+                            "httpMethod": "PUT",
+                            "id": "analytics.management.accountUserLinks.update",
+                            "parameterOrder": [
+                                "accountId",
+                                "linkId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to update the account-user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "linkId": {
+                                    "description": "Link ID to update the account-user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/entityUserLinks/{linkId}",
+                            "request": {
+                                "$ref": "EntityUserLink"
+                            },
+                            "response": {
+                                "$ref": "EntityUserLink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.manage.users"
+                            ]
+                        }
+                    }
+                },
+                "accounts": {
+                    "methods": {
+                        "list": {
+                            "description": "Lists all accounts to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.accounts.list",
+                            "parameters": {
+                                "max-results": {
+                                    "description": "The maximum number of accounts to include in this response.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "start-index": {
+                                    "description": "An index of the first account to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                }
+                            },
+                            "path": "management/accounts",
+                            "response": {
+                                "$ref": "Accounts"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        }
+                    }
+                },
+                "clientId": {
+                    "methods": {
+                        "hashClientId": {
+                            "description": "Hashes the given Client ID.",
+                            "httpMethod": "POST",
+                            "id": "analytics.management.clientId.hashClientId",
+                            "path": "management/clientId:hashClientId",
+                            "request": {
+                                "$ref": "HashClientIdRequest"
+                            },
+                            "response": {
+                                "$ref": "HashClientIdResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        }
+                    }
+                },
+                "customDataSources": {
+                    "methods": {
+                        "list": {
+                            "description": "List custom data sources to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.customDataSources.list",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account Id for the custom data sources to retrieve.",
+                                    "location": "path",
+                                    "pattern": "\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "max-results": {
+                                    "description": "The maximum number of custom data sources to include in this response.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                },
+                                "start-index": {
+                                    "description": "A 1-based index of the first custom data source to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property Id for the custom data sources to retrieve.",
+                                    "location": "path",
+                                    "pattern": "UA-(\\d+)-(\\d+)",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources",
+                            "response": {
+                                "$ref": "CustomDataSources"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        }
+                    }
+                },
+                "customDimensions": {
+                    "methods": {
+                        "get": {
+                            "description": "Get a custom dimension to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.customDimensions.get",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "customDimensionId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID for the custom dimension to retrieve.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "customDimensionId": {
+                                    "description": "The ID of the custom dimension to retrieve.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID for the custom dimension to retrieve.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDimensions/{customDimensionId}",
+                            "response": {
+                                "$ref": "CustomDimension"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "insert": {
+                            "description": "Create a new custom dimension.",
+                            "httpMethod": "POST",
+                            "id": "analytics.management.customDimensions.insert",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID for the custom dimension to create.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID for the custom dimension to create.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDimensions",
+                            "request": {
+                                "$ref": "CustomDimension"
+                            },
+                            "response": {
+                                "$ref": "CustomDimension"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists custom dimensions to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.customDimensions.list",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID for the custom dimensions to retrieve.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "max-results": {
+                                    "description": "The maximum number of custom dimensions to include in this response.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "start-index": {
+                                    "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID for the custom dimensions to retrieve.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDimensions",
+                            "response": {
+                                "$ref": "CustomDimensions"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates an existing custom dimension. This method supports patch semantics.",
+                            "httpMethod": "PATCH",
+                            "id": "analytics.management.customDimensions.patch",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "customDimensionId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID for the custom dimension to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "customDimensionId": {
+                                    "description": "Custom dimension ID for the custom dimension to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "ignoreCustomDataSourceLinks": {
+                                    "default": "false",
+                                    "description": "Force the update and ignore any warnings related to the custom dimension being linked to a custom data source / data set.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID for the custom dimension to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDimensions/{customDimensionId}",
+                            "request": {
+                                "$ref": "CustomDimension"
+                            },
+                            "response": {
+                                "$ref": "CustomDimension"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates an existing custom dimension.",
+                            "httpMethod": "PUT",
+                            "id": "analytics.management.customDimensions.update",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "customDimensionId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID for the custom dimension to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "customDimensionId": {
+                                    "description": "Custom dimension ID for the custom dimension to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "ignoreCustomDataSourceLinks": {
+                                    "default": "false",
+                                    "description": "Force the update and ignore any warnings related to the custom dimension being linked to a custom data source / data set.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID for the custom dimension to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDimensions/{customDimensionId}",
+                            "request": {
+                                "$ref": "CustomDimension"
+                            },
+                            "response": {
+                                "$ref": "CustomDimension"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        }
+                    }
+                },
+                "customMetrics": {
+                    "methods": {
+                        "get": {
+                            "description": "Get a custom metric to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.customMetrics.get",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "customMetricId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID for the custom metric to retrieve.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "customMetricId": {
+                                    "description": "The ID of the custom metric to retrieve.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID for the custom metric to retrieve.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customMetrics/{customMetricId}",
+                            "response": {
+                                "$ref": "CustomMetric"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "insert": {
+                            "description": "Create a new custom metric.",
+                            "httpMethod": "POST",
+                            "id": "analytics.management.customMetrics.insert",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID for the custom metric to create.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID for the custom dimension to create.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customMetrics",
+                            "request": {
+                                "$ref": "CustomMetric"
+                            },
+                            "response": {
+                                "$ref": "CustomMetric"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists custom metrics to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.customMetrics.list",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID for the custom metrics to retrieve.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "max-results": {
+                                    "description": "The maximum number of custom metrics to include in this response.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "start-index": {
+                                    "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID for the custom metrics to retrieve.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customMetrics",
+                            "response": {
+                                "$ref": "CustomMetrics"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates an existing custom metric. This method supports patch semantics.",
+                            "httpMethod": "PATCH",
+                            "id": "analytics.management.customMetrics.patch",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "customMetricId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID for the custom metric to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "customMetricId": {
+                                    "description": "Custom metric ID for the custom metric to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "ignoreCustomDataSourceLinks": {
+                                    "default": "false",
+                                    "description": "Force the update and ignore any warnings related to the custom metric being linked to a custom data source / data set.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID for the custom metric to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customMetrics/{customMetricId}",
+                            "request": {
+                                "$ref": "CustomMetric"
+                            },
+                            "response": {
+                                "$ref": "CustomMetric"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates an existing custom metric.",
+                            "httpMethod": "PUT",
+                            "id": "analytics.management.customMetrics.update",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "customMetricId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID for the custom metric to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "customMetricId": {
+                                    "description": "Custom metric ID for the custom metric to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "ignoreCustomDataSourceLinks": {
+                                    "default": "false",
+                                    "description": "Force the update and ignore any warnings related to the custom metric being linked to a custom data source / data set.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID for the custom metric to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customMetrics/{customMetricId}",
+                            "request": {
+                                "$ref": "CustomMetric"
+                            },
+                            "response": {
+                                "$ref": "CustomMetric"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        }
+                    }
+                },
+                "experiments": {
+                    "methods": {
+                        "delete": {
+                            "description": "Delete an experiment.",
+                            "httpMethod": "DELETE",
+                            "id": "analytics.management.experiments.delete",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId",
+                                "experimentId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to which the experiment belongs",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "experimentId": {
+                                    "description": "ID of the experiment to delete",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "View (Profile) ID to which the experiment belongs",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to which the experiment belongs",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}",
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "get": {
+                            "description": "Returns an experiment to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.experiments.get",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId",
+                                "experimentId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to retrieve the experiment for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "experimentId": {
+                                    "description": "Experiment ID to retrieve the experiment for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "View (Profile) ID to retrieve the experiment for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to retrieve the experiment for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}",
+                            "response": {
+                                "$ref": "Experiment"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "insert": {
+                            "description": "Create a new experiment.",
+                            "httpMethod": "POST",
+                            "id": "analytics.management.experiments.insert",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to create the experiment for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "View (Profile) ID to create the experiment for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to create the experiment for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments",
+                            "request": {
+                                "$ref": "Experiment"
+                            },
+                            "response": {
+                                "$ref": "Experiment"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists experiments to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.experiments.list",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to retrieve experiments for.",
+                                    "location": "path",
+                                    "pattern": "\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "max-results": {
+                                    "description": "The maximum number of experiments to include in this response.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "profileId": {
+                                    "description": "View (Profile) ID to retrieve experiments for.",
+                                    "location": "path",
+                                    "pattern": "\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "start-index": {
+                                    "description": "An index of the first experiment to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to retrieve experiments for.",
+                                    "location": "path",
+                                    "pattern": "UA-(\\d+)-(\\d+)",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments",
+                            "response": {
+                                "$ref": "Experiments"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Update an existing experiment. This method supports patch semantics.",
+                            "httpMethod": "PATCH",
+                            "id": "analytics.management.experiments.patch",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId",
+                                "experimentId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID of the experiment to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "experimentId": {
+                                    "description": "Experiment ID of the experiment to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "View (Profile) ID of the experiment to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID of the experiment to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}",
+                            "request": {
+                                "$ref": "Experiment"
+                            },
+                            "response": {
+                                "$ref": "Experiment"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "update": {
+                            "description": "Update an existing experiment.",
+                            "httpMethod": "PUT",
+                            "id": "analytics.management.experiments.update",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId",
+                                "experimentId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID of the experiment to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "experimentId": {
+                                    "description": "Experiment ID of the experiment to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "View (Profile) ID of the experiment to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID of the experiment to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}",
+                            "request": {
+                                "$ref": "Experiment"
+                            },
+                            "response": {
+                                "$ref": "Experiment"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        }
+                    }
+                },
+                "filters": {
+                    "methods": {
+                        "delete": {
+                            "description": "Delete a filter.",
+                            "httpMethod": "DELETE",
+                            "id": "analytics.management.filters.delete",
+                            "parameterOrder": [
+                                "accountId",
+                                "filterId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to delete the filter for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "filterId": {
+                                    "description": "ID of the filter to be deleted.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/filters/{filterId}",
+                            "response": {
+                                "$ref": "Filter"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "get": {
+                            "description": "Returns filters to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.filters.get",
+                            "parameterOrder": [
+                                "accountId",
+                                "filterId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to retrieve filters for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "filterId": {
+                                    "description": "Filter ID to retrieve filters for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/filters/{filterId}",
+                            "response": {
+                                "$ref": "Filter"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "insert": {
+                            "description": "Create a new filter.",
+                            "httpMethod": "POST",
+                            "id": "analytics.management.filters.insert",
+                            "parameterOrder": [
+                                "accountId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to create filter for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/filters",
+                            "request": {
+                                "$ref": "Filter"
+                            },
+                            "response": {
+                                "$ref": "Filter"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists all filters for an account",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.filters.list",
+                            "parameterOrder": [
+                                "accountId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to retrieve filters for.",
+                                    "location": "path",
+                                    "pattern": "\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "max-results": {
+                                    "description": "The maximum number of filters to include in this response.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "start-index": {
+                                    "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/filters",
+                            "response": {
+                                "$ref": "Filters"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates an existing filter. This method supports patch semantics.",
+                            "httpMethod": "PATCH",
+                            "id": "analytics.management.filters.patch",
+                            "parameterOrder": [
+                                "accountId",
+                                "filterId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to which the filter belongs.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "filterId": {
+                                    "description": "ID of the filter to be updated.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/filters/{filterId}",
+                            "request": {
+                                "$ref": "Filter"
+                            },
+                            "response": {
+                                "$ref": "Filter"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates an existing filter.",
+                            "httpMethod": "PUT",
+                            "id": "analytics.management.filters.update",
+                            "parameterOrder": [
+                                "accountId",
+                                "filterId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to which the filter belongs.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "filterId": {
+                                    "description": "ID of the filter to be updated.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/filters/{filterId}",
+                            "request": {
+                                "$ref": "Filter"
+                            },
+                            "response": {
+                                "$ref": "Filter"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        }
+                    }
+                },
+                "goals": {
+                    "methods": {
+                        "get": {
+                            "description": "Gets a goal to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.goals.get",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId",
+                                "goalId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to retrieve the goal for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "goalId": {
+                                    "description": "Goal ID to retrieve the goal for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "View (Profile) ID to retrieve the goal for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to retrieve the goal for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}",
+                            "response": {
+                                "$ref": "Goal"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "insert": {
+                            "description": "Create a new goal.",
+                            "httpMethod": "POST",
+                            "id": "analytics.management.goals.insert",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to create the goal for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "View (Profile) ID to create the goal for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to create the goal for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals",
+                            "request": {
+                                "$ref": "Goal"
+                            },
+                            "response": {
+                                "$ref": "Goal"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists goals to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.goals.list",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to retrieve goals for. Can either be a specific account ID or '~all', which refers to all the accounts that user has access to.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "max-results": {
+                                    "description": "The maximum number of goals to include in this response.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "profileId": {
+                                    "description": "View (Profile) ID to retrieve goals for. Can either be a specific view (profile) ID or '~all', which refers to all the views (profiles) that user has access to.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "start-index": {
+                                    "description": "An index of the first goal to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to retrieve goals for. Can either be a specific web property ID or '~all', which refers to all the web properties that user has access to.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals",
+                            "response": {
+                                "$ref": "Goals"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates an existing goal. This method supports patch semantics.",
+                            "httpMethod": "PATCH",
+                            "id": "analytics.management.goals.patch",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId",
+                                "goalId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to update the goal.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "goalId": {
+                                    "description": "Index of the goal to be updated.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "View (Profile) ID to update the goal.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to update the goal.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}",
+                            "request": {
+                                "$ref": "Goal"
+                            },
+                            "response": {
+                                "$ref": "Goal"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates an existing goal.",
+                            "httpMethod": "PUT",
+                            "id": "analytics.management.goals.update",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId",
+                                "goalId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to update the goal.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "goalId": {
+                                    "description": "Index of the goal to be updated.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "View (Profile) ID to update the goal.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to update the goal.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}",
+                            "request": {
+                                "$ref": "Goal"
+                            },
+                            "response": {
+                                "$ref": "Goal"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        }
+                    }
+                },
+                "profileFilterLinks": {
+                    "methods": {
+                        "delete": {
+                            "description": "Delete a profile filter link.",
+                            "httpMethod": "DELETE",
+                            "id": "analytics.management.profileFilterLinks.delete",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId",
+                                "linkId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to which the profile filter link belongs.",
+                                    "location": "path",
+                                    "pattern": "\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "linkId": {
+                                    "description": "ID of the profile filter link to delete.",
+                                    "location": "path",
+                                    "pattern": "\\d+:\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "Profile ID to which the filter link belongs.",
+                                    "location": "path",
+                                    "pattern": "\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property Id to which the profile filter link belongs.",
+                                    "location": "path",
+                                    "pattern": "UA-(\\d+)-(\\d+)",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks/{linkId}",
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "get": {
+                            "description": "Returns a single profile filter link.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.profileFilterLinks.get",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId",
+                                "linkId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to retrieve profile filter link for.",
+                                    "location": "path",
+                                    "pattern": "\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "linkId": {
+                                    "description": "ID of the profile filter link.",
+                                    "location": "path",
+                                    "pattern": "\\d+:\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "Profile ID to retrieve filter link for.",
+                                    "location": "path",
+                                    "pattern": "\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property Id to retrieve profile filter link for.",
+                                    "location": "path",
+                                    "pattern": "UA-(\\d+)-(\\d+)",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks/{linkId}",
+                            "response": {
+                                "$ref": "ProfileFilterLink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "insert": {
+                            "description": "Create a new profile filter link.",
+                            "httpMethod": "POST",
+                            "id": "analytics.management.profileFilterLinks.insert",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to create profile filter link for.",
+                                    "location": "path",
+                                    "pattern": "\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "Profile ID to create filter link for.",
+                                    "location": "path",
+                                    "pattern": "\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property Id to create profile filter link for.",
+                                    "location": "path",
+                                    "pattern": "UA-(\\d+)-(\\d+)",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks",
+                            "request": {
+                                "$ref": "ProfileFilterLink"
+                            },
+                            "response": {
+                                "$ref": "ProfileFilterLink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists all profile filter links for a profile.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.profileFilterLinks.list",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to retrieve profile filter links for.",
+                                    "location": "path",
+                                    "pattern": "\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "max-results": {
+                                    "description": "The maximum number of profile filter links to include in this response.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "profileId": {
+                                    "description": "Profile ID to retrieve filter links for. Can either be a specific profile ID or '~all', which refers to all the profiles that user has access to.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "start-index": {
+                                    "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property Id for profile filter links for. Can either be a specific web property ID or '~all', which refers to all the web properties that user has access to.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks",
+                            "response": {
+                                "$ref": "ProfileFilterLinks"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Update an existing profile filter link. This method supports patch semantics.",
+                            "httpMethod": "PATCH",
+                            "id": "analytics.management.profileFilterLinks.patch",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId",
+                                "linkId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to which profile filter link belongs.",
+                                    "location": "path",
+                                    "pattern": "\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "linkId": {
+                                    "description": "ID of the profile filter link to be updated.",
+                                    "location": "path",
+                                    "pattern": "\\d+:\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "Profile ID to which filter link belongs",
+                                    "location": "path",
+                                    "pattern": "\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property Id to which profile filter link belongs",
+                                    "location": "path",
+                                    "pattern": "UA-(\\d+)-(\\d+)",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks/{linkId}",
+                            "request": {
+                                "$ref": "ProfileFilterLink"
+                            },
+                            "response": {
+                                "$ref": "ProfileFilterLink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "update": {
+                            "description": "Update an existing profile filter link.",
+                            "httpMethod": "PUT",
+                            "id": "analytics.management.profileFilterLinks.update",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId",
+                                "linkId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to which profile filter link belongs.",
+                                    "location": "path",
+                                    "pattern": "\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "linkId": {
+                                    "description": "ID of the profile filter link to be updated.",
+                                    "location": "path",
+                                    "pattern": "\\d+:\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "Profile ID to which filter link belongs",
+                                    "location": "path",
+                                    "pattern": "\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property Id to which profile filter link belongs",
+                                    "location": "path",
+                                    "pattern": "UA-(\\d+)-(\\d+)",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks/{linkId}",
+                            "request": {
+                                "$ref": "ProfileFilterLink"
+                            },
+                            "response": {
+                                "$ref": "ProfileFilterLink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        }
+                    }
+                },
+                "profileUserLinks": {
+                    "methods": {
+                        "delete": {
+                            "description": "Removes a user from the given view (profile).",
+                            "httpMethod": "DELETE",
+                            "id": "analytics.management.profileUserLinks.delete",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId",
+                                "linkId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to delete the user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "linkId": {
+                                    "description": "Link ID to delete the user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "View (Profile) ID to delete the user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web Property ID to delete the user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks/{linkId}",
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.manage.users"
+                            ]
+                        },
+                        "insert": {
+                            "description": "Adds a new user to the given view (profile).",
+                            "httpMethod": "POST",
+                            "id": "analytics.management.profileUserLinks.insert",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to create the user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "View (Profile) ID to create the user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web Property ID to create the user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks",
+                            "request": {
+                                "$ref": "EntityUserLink"
+                            },
+                            "response": {
+                                "$ref": "EntityUserLink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.manage.users"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists profile-user links for a given view (profile).",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.profileUserLinks.list",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID which the given view (profile) belongs to.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "max-results": {
+                                    "description": "The maximum number of profile-user links to include in this response.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "profileId": {
+                                    "description": "View (Profile) ID to retrieve the profile-user links for. Can either be a specific profile ID or '~all', which refers to all the profiles that user has access to.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "start-index": {
+                                    "description": "An index of the first profile-user link to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web Property ID which the given view (profile) belongs to. Can either be a specific web property ID or '~all', which refers to all the web properties that user has access to.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks",
+                            "response": {
+                                "$ref": "EntityUserLinks"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.manage.users",
+                                "https://www.googleapis.com/auth/analytics.manage.users.readonly"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates permissions for an existing user on the given view (profile).",
+                            "httpMethod": "PUT",
+                            "id": "analytics.management.profileUserLinks.update",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId",
+                                "linkId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to update the user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "linkId": {
+                                    "description": "Link ID to update the user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "View (Profile ID) to update the user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web Property ID to update the user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks/{linkId}",
+                            "request": {
+                                "$ref": "EntityUserLink"
+                            },
+                            "response": {
+                                "$ref": "EntityUserLink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.manage.users"
+                            ]
+                        }
+                    }
+                },
+                "profiles": {
+                    "methods": {
+                        "delete": {
+                            "description": "Deletes a view (profile).",
+                            "httpMethod": "DELETE",
+                            "id": "analytics.management.profiles.delete",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to delete the view (profile) for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "ID of the view (profile) to be deleted.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to delete the view (profile) for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}",
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets a view (profile) to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.profiles.get",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to retrieve the view (profile) for.",
+                                    "location": "path",
+                                    "pattern": "[0-9]+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "View (Profile) ID to retrieve the view (profile) for.",
+                                    "location": "path",
+                                    "pattern": "[0-9]+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to retrieve the view (profile) for.",
+                                    "location": "path",
+                                    "pattern": "UA-[0-9]+-[0-9]+",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}",
+                            "response": {
+                                "$ref": "Profile"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "insert": {
+                            "description": "Create a new view (profile).",
+                            "httpMethod": "POST",
+                            "id": "analytics.management.profiles.insert",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to create the view (profile) for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to create the view (profile) for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles",
+                            "request": {
+                                "$ref": "Profile"
+                            },
+                            "response": {
+                                "$ref": "Profile"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists views (profiles) to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.profiles.list",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID for the view (profiles) to retrieve. Can either be a specific account ID or '~all', which refers to all the accounts to which the user has access.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "max-results": {
+                                    "description": "The maximum number of views (profiles) to include in this response.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "start-index": {
+                                    "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID for the views (profiles) to retrieve. Can either be a specific web property ID or '~all', which refers to all the web properties to which the user has access.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles",
+                            "response": {
+                                "$ref": "Profiles"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates an existing view (profile). This method supports patch semantics.",
+                            "httpMethod": "PATCH",
+                            "id": "analytics.management.profiles.patch",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to which the view (profile) belongs",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "ID of the view (profile) to be updated.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to which the view (profile) belongs",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}",
+                            "request": {
+                                "$ref": "Profile"
+                            },
+                            "response": {
+                                "$ref": "Profile"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates an existing view (profile).",
+                            "httpMethod": "PUT",
+                            "id": "analytics.management.profiles.update",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to which the view (profile) belongs",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "ID of the view (profile) to be updated.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to which the view (profile) belongs",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}",
+                            "request": {
+                                "$ref": "Profile"
+                            },
+                            "response": {
+                                "$ref": "Profile"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        }
+                    }
+                },
+                "remarketingAudience": {
+                    "methods": {
+                        "delete": {
+                            "description": "Delete a remarketing audience.",
+                            "httpMethod": "DELETE",
+                            "id": "analytics.management.remarketingAudience.delete",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "remarketingAudienceId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to which the remarketing audience belongs.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "remarketingAudienceId": {
+                                    "description": "The ID of the remarketing audience to delete.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to which the remarketing audience belongs.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences/{remarketingAudienceId}",
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets a remarketing audience to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.remarketingAudience.get",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "remarketingAudienceId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "The account ID of the remarketing audience to retrieve.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "remarketingAudienceId": {
+                                    "description": "The ID of the remarketing audience to retrieve.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "The web property ID of the remarketing audience to retrieve.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences/{remarketingAudienceId}",
+                            "response": {
+                                "$ref": "RemarketingAudience"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "insert": {
+                            "description": "Creates a new remarketing audience.",
+                            "httpMethod": "POST",
+                            "id": "analytics.management.remarketingAudience.insert",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "The account ID for which to create the remarketing audience.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID for which to create the remarketing audience.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences",
+                            "request": {
+                                "$ref": "RemarketingAudience"
+                            },
+                            "response": {
+                                "$ref": "RemarketingAudience"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists remarketing audiences to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.remarketingAudience.list",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "The account ID of the remarketing audiences to retrieve.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "max-results": {
+                                    "description": "The maximum number of remarketing audiences to include in this response.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "start-index": {
+                                    "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                },
+                                "type": {
+                                    "default": "all",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "The web property ID of the remarketing audiences to retrieve.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences",
+                            "response": {
+                                "$ref": "RemarketingAudiences"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates an existing remarketing audience. This method supports patch semantics.",
+                            "httpMethod": "PATCH",
+                            "id": "analytics.management.remarketingAudience.patch",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "remarketingAudienceId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "The account ID of the remarketing audience to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "remarketingAudienceId": {
+                                    "description": "The ID of the remarketing audience to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "The web property ID of the remarketing audience to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences/{remarketingAudienceId}",
+                            "request": {
+                                "$ref": "RemarketingAudience"
+                            },
+                            "response": {
+                                "$ref": "RemarketingAudience"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates an existing remarketing audience.",
+                            "httpMethod": "PUT",
+                            "id": "analytics.management.remarketingAudience.update",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "remarketingAudienceId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "The account ID of the remarketing audience to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "remarketingAudienceId": {
+                                    "description": "The ID of the remarketing audience to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "The web property ID of the remarketing audience to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences/{remarketingAudienceId}",
+                            "request": {
+                                "$ref": "RemarketingAudience"
+                            },
+                            "response": {
+                                "$ref": "RemarketingAudience"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        }
+                    }
+                },
+                "segments": {
+                    "methods": {
+                        "list": {
+                            "description": "Lists segments to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.segments.list",
+                            "parameters": {
+                                "max-results": {
+                                    "description": "The maximum number of segments to include in this response.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "start-index": {
+                                    "description": "An index of the first segment to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                }
+                            },
+                            "path": "management/segments",
+                            "response": {
+                                "$ref": "Segments"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        }
+                    }
+                },
+                "unsampledReports": {
+                    "methods": {
+                        "delete": {
+                            "description": "Deletes an unsampled report.",
+                            "httpMethod": "DELETE",
+                            "id": "analytics.management.unsampledReports.delete",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId",
+                                "unsampledReportId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to delete the unsampled report for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "View (Profile) ID to delete the unsampled report for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "unsampledReportId": {
+                                    "description": "ID of the unsampled report to be deleted.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to delete the unsampled reports for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/unsampledReports/{unsampledReportId}",
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "get": {
+                            "description": "Returns a single unsampled report.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.unsampledReports.get",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId",
+                                "unsampledReportId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to retrieve unsampled report for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "View (Profile) ID to retrieve unsampled report for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "unsampledReportId": {
+                                    "description": "ID of the unsampled report to retrieve.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to retrieve unsampled reports for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/unsampledReports/{unsampledReportId}",
+                            "response": {
+                                "$ref": "UnsampledReport"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "insert": {
+                            "description": "Create a new unsampled report.",
+                            "httpMethod": "POST",
+                            "id": "analytics.management.unsampledReports.insert",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to create the unsampled report for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "View (Profile) ID to create the unsampled report for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to create the unsampled report for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/unsampledReports",
+                            "request": {
+                                "$ref": "UnsampledReport"
+                            },
+                            "response": {
+                                "$ref": "UnsampledReport"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists unsampled reports to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.unsampledReports.list",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "profileId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to retrieve unsampled reports for. Must be a specific account ID, ~all is not supported.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "max-results": {
+                                    "description": "The maximum number of unsampled reports to include in this response.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "profileId": {
+                                    "description": "View (Profile) ID to retrieve unsampled reports for. Must be a specific view (profile) ID, ~all is not supported.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "start-index": {
+                                    "description": "An index of the first unsampled report to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to retrieve unsampled reports for. Must be a specific web property ID, ~all is not supported.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/unsampledReports",
+                            "response": {
+                                "$ref": "UnsampledReports"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        }
+                    }
+                },
+                "uploads": {
+                    "methods": {
+                        "deleteUploadData": {
+                            "description": "Delete data associated with a previous upload.",
+                            "httpMethod": "POST",
+                            "id": "analytics.management.uploads.deleteUploadData",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "customDataSourceId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account Id for the uploads to be deleted.",
+                                    "location": "path",
+                                    "pattern": "\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "customDataSourceId": {
+                                    "description": "Custom data source Id for the uploads to be deleted.",
+                                    "location": "path",
+                                    "pattern": ".{22}",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property Id for the uploads to be deleted.",
+                                    "location": "path",
+                                    "pattern": "UA-(\\d+)-(\\d+)",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/deleteUploadData",
+                            "request": {
+                                "$ref": "AnalyticsDataimportDeleteUploadDataRequest"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "get": {
+                            "description": "List uploads to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.uploads.get",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "customDataSourceId",
+                                "uploadId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account Id for the upload to retrieve.",
+                                    "location": "path",
+                                    "pattern": "\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "customDataSourceId": {
+                                    "description": "Custom data source Id for upload to retrieve.",
+                                    "location": "path",
+                                    "pattern": ".{22}",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "uploadId": {
+                                    "description": "Upload Id to retrieve.",
+                                    "location": "path",
+                                    "pattern": ".{22}",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property Id for the upload to retrieve.",
+                                    "location": "path",
+                                    "pattern": "UA-(\\d+)-(\\d+)",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads/{uploadId}",
+                            "response": {
+                                "$ref": "Upload"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "List uploads to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.uploads.list",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "customDataSourceId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account Id for the uploads to retrieve.",
+                                    "location": "path",
+                                    "pattern": "\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "customDataSourceId": {
+                                    "description": "Custom data source Id for uploads to retrieve.",
+                                    "location": "path",
+                                    "pattern": ".{22}",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "max-results": {
+                                    "description": "The maximum number of uploads to include in this response.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                },
+                                "start-index": {
+                                    "description": "A 1-based index of the first upload to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property Id for the uploads to retrieve.",
+                                    "location": "path",
+                                    "pattern": "UA-(\\d+)-(\\d+)",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads",
+                            "response": {
+                                "$ref": "Uploads"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "uploadData": {
+                            "description": "Upload data for a custom data source.",
+                            "httpMethod": "POST",
+                            "id": "analytics.management.uploads.uploadData",
+                            "mediaUpload": {
+                                "accept": [
+                                    "application/octet-stream"
+                                ],
+                                "maxSize": "1GB",
+                                "protocols": {
+                                    "resumable": {
+                                        "multipart": true,
+                                        "path": "/resumable/upload/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads"
+                                    },
+                                    "simple": {
+                                        "multipart": true,
+                                        "path": "/upload/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads"
+                                    }
+                                }
+                            },
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "customDataSourceId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account Id associated with the upload.",
+                                    "location": "path",
+                                    "pattern": "\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "customDataSourceId": {
+                                    "description": "Custom data source Id to which the data being uploaded belongs.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property UA-string associated with the upload.",
+                                    "location": "path",
+                                    "pattern": "UA-\\d+-\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads",
+                            "response": {
+                                "$ref": "Upload"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ],
+                            "supportsMediaUpload": true
+                        }
+                    }
+                },
+                "webPropertyAdWordsLinks": {
+                    "methods": {
+                        "delete": {
+                            "description": "Deletes a web property-Google Ads link.",
+                            "httpMethod": "DELETE",
+                            "id": "analytics.management.webPropertyAdWordsLinks.delete",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "webPropertyAdWordsLinkId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "ID of the account which the given web property belongs to.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyAdWordsLinkId": {
+                                    "description": "Web property Google Ads link ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to delete the Google Ads link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks/{webPropertyAdWordsLinkId}",
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "get": {
+                            "description": "Returns a web property-Google Ads link to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.webPropertyAdWordsLinks.get",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "webPropertyAdWordsLinkId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "ID of the account which the given web property belongs to.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyAdWordsLinkId": {
+                                    "description": "Web property-Google Ads link ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to retrieve the Google Ads link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks/{webPropertyAdWordsLinkId}",
+                            "response": {
+                                "$ref": "EntityAdWordsLink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "insert": {
+                            "description": "Creates a webProperty-Google Ads link.",
+                            "httpMethod": "POST",
+                            "id": "analytics.management.webPropertyAdWordsLinks.insert",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "ID of the Google Analytics account to create the link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to create the link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks",
+                            "request": {
+                                "$ref": "EntityAdWordsLink"
+                            },
+                            "response": {
+                                "$ref": "EntityAdWordsLink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists webProperty-Google Ads links for a given web property.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.webPropertyAdWordsLinks.list",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "ID of the account which the given web property belongs to.",
+                                    "location": "path",
+                                    "pattern": "\\d+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "max-results": {
+                                    "description": "The maximum number of webProperty-Google Ads links to include in this response.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "start-index": {
+                                    "description": "An index of the first webProperty-Google Ads link to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to retrieve the Google Ads links for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks",
+                            "response": {
+                                "$ref": "EntityAdWordsLinks"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates an existing webProperty-Google Ads link. This method supports patch semantics.",
+                            "httpMethod": "PATCH",
+                            "id": "analytics.management.webPropertyAdWordsLinks.patch",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "webPropertyAdWordsLinkId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "ID of the account which the given web property belongs to.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyAdWordsLinkId": {
+                                    "description": "Web property-Google Ads link ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to retrieve the Google Ads link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks/{webPropertyAdWordsLinkId}",
+                            "request": {
+                                "$ref": "EntityAdWordsLink"
+                            },
+                            "response": {
+                                "$ref": "EntityAdWordsLink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates an existing webProperty-Google Ads link.",
+                            "httpMethod": "PUT",
+                            "id": "analytics.management.webPropertyAdWordsLinks.update",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "webPropertyAdWordsLinkId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "ID of the account which the given web property belongs to.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyAdWordsLinkId": {
+                                    "description": "Web property-Google Ads link ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to retrieve the Google Ads link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks/{webPropertyAdWordsLinkId}",
+                            "request": {
+                                "$ref": "EntityAdWordsLink"
+                            },
+                            "response": {
+                                "$ref": "EntityAdWordsLink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        }
+                    }
+                },
+                "webproperties": {
+                    "methods": {
+                        "get": {
+                            "description": "Gets a web property to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.webproperties.get",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to retrieve the web property for.",
+                                    "location": "path",
+                                    "pattern": "[0-9]+",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "ID to retrieve the web property for.",
+                                    "location": "path",
+                                    "pattern": "UA-[0-9]+-[0-9]+",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}",
+                            "response": {
+                                "$ref": "Webproperty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "insert": {
+                            "description": "Create a new property if the account has fewer than 20 properties. Web properties are visible in the Google Analytics interface only if they have at least one profile.",
+                            "httpMethod": "POST",
+                            "id": "analytics.management.webproperties.insert",
+                            "parameterOrder": [
+                                "accountId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to create the web property for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties",
+                            "request": {
+                                "$ref": "Webproperty"
+                            },
+                            "response": {
+                                "$ref": "Webproperty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists web properties to which the user has access.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.webproperties.list",
+                            "parameterOrder": [
+                                "accountId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to retrieve web properties for. Can either be a specific account ID or '~all', which refers to all the accounts that user has access to.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "max-results": {
+                                    "description": "The maximum number of web properties to include in this response.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "start-index": {
+                                    "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties",
+                            "response": {
+                                "$ref": "Webproperties"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates an existing web property. This method supports patch semantics.",
+                            "httpMethod": "PATCH",
+                            "id": "analytics.management.webproperties.patch",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to which the web property belongs",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}",
+                            "request": {
+                                "$ref": "Webproperty"
+                            },
+                            "response": {
+                                "$ref": "Webproperty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates an existing web property.",
+                            "httpMethod": "PUT",
+                            "id": "analytics.management.webproperties.update",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to which the web property belongs",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}",
+                            "request": {
+                                "$ref": "Webproperty"
+                            },
+                            "response": {
+                                "$ref": "Webproperty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.edit"
+                            ]
+                        }
+                    }
+                },
+                "webpropertyUserLinks": {
+                    "methods": {
+                        "delete": {
+                            "description": "Removes a user from the given web property.",
+                            "httpMethod": "DELETE",
+                            "id": "analytics.management.webpropertyUserLinks.delete",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "linkId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to delete the user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "linkId": {
+                                    "description": "Link ID to delete the user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web Property ID to delete the user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks/{linkId}",
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.manage.users"
+                            ]
+                        },
+                        "insert": {
+                            "description": "Adds a new user to the given web property.",
+                            "httpMethod": "POST",
+                            "id": "analytics.management.webpropertyUserLinks.insert",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to create the user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web Property ID to create the user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks",
+                            "request": {
+                                "$ref": "EntityUserLink"
+                            },
+                            "response": {
+                                "$ref": "EntityUserLink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.manage.users"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists webProperty-user links for a given web property.",
+                            "httpMethod": "GET",
+                            "id": "analytics.management.webpropertyUserLinks.list",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID which the given web property belongs to.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "max-results": {
+                                    "description": "The maximum number of webProperty-user Links to include in this response.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "start-index": {
+                                    "description": "An index of the first webProperty-user link to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "minimum": "1",
+                                    "type": "integer"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web Property ID for the webProperty-user links to retrieve. Can either be a specific web property ID or '~all', which refers to all the web properties that user has access to.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks",
+                            "response": {
+                                "$ref": "EntityUserLinks"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.manage.users",
+                                "https://www.googleapis.com/auth/analytics.manage.users.readonly"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates permissions for an existing user on the given web property.",
+                            "httpMethod": "PUT",
+                            "id": "analytics.management.webpropertyUserLinks.update",
+                            "parameterOrder": [
+                                "accountId",
+                                "webPropertyId",
+                                "linkId"
+                            ],
+                            "parameters": {
+                                "accountId": {
+                                    "description": "Account ID to update the account-user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "linkId": {
+                                    "description": "Link ID to update the account-user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "webPropertyId": {
+                                    "description": "Web property ID to update the account-user link for.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks/{linkId}",
+                            "request": {
+                                "$ref": "EntityUserLink"
+                            },
+                            "response": {
+                                "$ref": "EntityUserLink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.manage.users"
+                            ]
+                        }
+                    }
+                }
             }
-          },
-          "description": "Analytics data request query parameters."
         },
-        "columnHeaders": {
-          "type": "array",
-          "description": "Column headers that list dimension names followed by the metric names. The order of dimensions and metrics is same as specified in the request.",
-          "items": {
-            "type": "object",
+        "metadata": {
+            "resources": {
+                "columns": {
+                    "methods": {
+                        "list": {
+                            "description": "Lists all columns for a report type",
+                            "httpMethod": "GET",
+                            "id": "analytics.metadata.columns.list",
+                            "parameterOrder": [
+                                "reportType"
+                            ],
+                            "parameters": {
+                                "reportType": {
+                                    "description": "Report type. Allowed Values: 'ga'. Where 'ga' corresponds to the Core Reporting API",
+                                    "location": "path",
+                                    "pattern": "ga",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "metadata/{reportType}/columns",
+                            "response": {
+                                "$ref": "Columns"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics",
+                                "https://www.googleapis.com/auth/analytics.edit",
+                                "https://www.googleapis.com/auth/analytics.readonly"
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "provisioning": {
+            "methods": {
+                "createAccountTicket": {
+                    "description": "Creates an account ticket.",
+                    "httpMethod": "POST",
+                    "id": "analytics.provisioning.createAccountTicket",
+                    "path": "provisioning/createAccountTicket",
+                    "request": {
+                        "$ref": "AccountTicket"
+                    },
+                    "response": {
+                        "$ref": "AccountTicket"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/analytics.provision"
+                    ]
+                },
+                "createAccountTree": {
+                    "description": "Provision account.",
+                    "httpMethod": "POST",
+                    "id": "analytics.provisioning.createAccountTree",
+                    "path": "provisioning/createAccountTree",
+                    "request": {
+                        "$ref": "AccountTreeRequest"
+                    },
+                    "response": {
+                        "$ref": "AccountTreeResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/analytics.provision"
+                    ]
+                }
+            }
+        },
+        "userDeletion": {
+            "resources": {
+                "userDeletionRequest": {
+                    "methods": {
+                        "upsert": {
+                            "description": "Insert or update a user deletion requests.",
+                            "httpMethod": "POST",
+                            "id": "analytics.userDeletion.userDeletionRequest.upsert",
+                            "path": "userDeletion/userDeletionRequests:upsert",
+                            "request": {
+                                "$ref": "UserDeletionRequest"
+                            },
+                            "response": {
+                                "$ref": "UserDeletionRequest"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/analytics.user.deletion"
+                            ]
+                        }
+                    }
+                }
+            }
+        }
+    },
+    "revision": "20190807",
+    "rootUrl": "https://analytics.googleapis.com/",
+    "schemas": {
+        "Account": {
+            "description": "JSON template for Analytics account entry.",
+            "id": "Account",
             "properties": {
-              "dataType": {
-                "type": "string",
-                "description": "Data type. Dimension column headers have only STRING as the data type. Metric column headers have data types for metric values such as INTEGER, DOUBLE, CURRENCY etc."
-              },
-              "name": {
-                "description": "Column name.",
-                "type": "string"
-              },
-              "columnType": {
-                "type": "string",
-                "description": "Column Type. Either DIMENSION or METRIC."
-              }
-            }
-          }
-        },
-        "id": {
-          "description": "Unique ID for this data response.",
-          "type": "string"
-        },
-        "selfLink": {
-          "type": "string",
-          "description": "Link to this page."
-        },
-        "totalsForAllResults": {
-          "additionalProperties": {
-            "type": "string",
-            "description": "Key-value pair for the total value of a metric. Key is the metric name and the value is the total value for that metric."
-          },
-          "description": "Total values for the requested metrics over all the results, not just the results returned in this response. The order of the metric totals is same as the metric order specified in the request.",
-          "type": "object"
-        },
-        "previousLink": {
-          "type": "string",
-          "description": "Link to previous page for this Analytics data query."
-        },
-        "totalResults": {
-          "type": "integer",
-          "description": "The total number of rows for the query, regardless of the number of rows in the response.",
-          "format": "int32"
-        },
-        "kind": {
-          "type": "string",
-          "default": "analytics#gaData",
-          "description": "Resource type."
-        },
-        "containsSampledData": {
-          "type": "boolean",
-          "description": "Determines if Analytics data contains samples."
-        },
-        "nextLink": {
-          "description": "Link to next page for this Analytics data query.",
-          "type": "string"
-        },
-        "itemsPerPage": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The maximum number of rows the response can contain, regardless of the actual number of rows returned. Its value ranges from 1 to 10,000 with a value of 1000 by default, or otherwise specified by the max-results query parameter."
-        },
-        "sampleSpace": {
-          "type": "string",
-          "format": "int64",
-          "description": "Total size of the sample space from which the samples were selected."
-        },
-        "rows": {
-          "items": {
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
-          },
-          "description": "Analytics data rows, where each row contains a list of dimension values followed by the metric values. The order of dimensions and metrics is same as specified in the request.",
-          "type": "array"
-        }
-      },
-      "type": "object"
-    },
-    "WebPropertyRef": {
-      "properties": {
-        "name": {
-          "description": "Name of this web property.",
-          "type": "string"
-        },
-        "href": {
-          "type": "string",
-          "description": "Link for this web property."
-        },
-        "accountId": {
-          "type": "string",
-          "description": "Account ID to which this web property belongs."
-        },
-        "internalWebPropertyId": {
-          "type": "string",
-          "description": "Internal ID for this web property."
-        },
-        "kind": {
-          "default": "analytics#webPropertyRef",
-          "type": "string",
-          "description": "Analytics web property reference."
-        },
-        "id": {
-          "description": "Web property ID of the form UA-XXXXX-YY.",
-          "type": "string"
-        }
-      },
-      "id": "WebPropertyRef",
-      "type": "object",
-      "description": "JSON template for a web property reference."
-    },
-    "UnsampledReport": {
-      "type": "object",
-      "description": "JSON template for Analytics unsampled report resource.",
-      "id": "UnsampledReport",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "Unsampled report ID."
-        },
-        "metrics": {
-          "annotations": {
-            "required": [
-              "analytics.management.filters.insert",
-              "analytics.management.unsampledReports.insert"
-            ]
-          },
-          "description": "The metrics for the unsampled report.",
-          "type": "string"
-        },
-        "webPropertyId": {
-          "description": "Web property ID to which this unsampled report belongs. The web property ID is of the form UA-XXXXX-YY.",
-          "type": "string"
-        },
-        "segment": {
-          "description": "The segment for the unsampled report.",
-          "type": "string"
-        },
-        "dimensions": {
-          "type": "string",
-          "description": "The dimensions for the unsampled report."
-        },
-        "cloudStorageDownloadDetails": {
-          "type": "object",
-          "description": "Download details for a file stored in Google Cloud Storage.",
-          "properties": {
-            "objectId": {
-              "description": "Id of the file object containing the report data.",
-              "type": "string"
-            },
-            "bucketId": {
-              "description": "Id of the bucket the file object is stored in.",
-              "type": "string"
-            }
-          },
-          "readOnly": true
-        },
-        "profileId": {
-          "description": "View (Profile) ID to which this unsampled report belongs.",
-          "type": "string"
-        },
-        "created": {
-          "format": "date-time",
-          "description": "Time this unsampled report was created.",
-          "type": "string",
-          "readOnly": true
-        },
-        "end-date": {
-          "description": "The end date for the unsampled report.",
-          "annotations": {
-            "required": [
-              "analytics.management.filters.insert",
-              "analytics.management.unsampledReports.insert"
-            ]
-          },
-          "type": "string"
-        },
-        "downloadType": {
-          "readOnly": true,
-          "type": "string",
-          "description": "The type of download you need to use for the report data file. Possible values include `GOOGLE_DRIVE` and `GOOGLE_CLOUD_STORAGE`. If the value is `GOOGLE_DRIVE`, see the `driveDownloadDetails` field. If the value is `GOOGLE_CLOUD_STORAGE`, see the `cloudStorageDownloadDetails` field."
-        },
-        "accountId": {
-          "description": "Account ID to which this unsampled report belongs.",
-          "type": "string"
-        },
-        "filters": {
-          "description": "The filters for the unsampled report.",
-          "type": "string"
-        },
-        "status": {
-          "description": "Status of this unsampled report. Possible values are PENDING, COMPLETED, or FAILED.",
-          "type": "string",
-          "readOnly": true
-        },
-        "kind": {
-          "description": "Resource type for an Analytics unsampled report.",
-          "default": "analytics#unsampledReport",
-          "type": "string",
-          "readOnly": true
-        },
-        "title": {
-          "annotations": {
-            "required": [
-              "analytics.management.filters.insert",
-              "analytics.management.unsampledReports.insert"
-            ]
-          },
-          "type": "string",
-          "description": "Title of the unsampled report."
-        },
-        "driveDownloadDetails": {
-          "readOnly": true,
-          "properties": {
-            "documentId": {
-              "description": "Id of the document/file containing the report data.",
-              "type": "string"
-            }
-          },
-          "description": "Download details for a file stored in Google Drive.",
-          "type": "object"
-        },
-        "updated": {
-          "type": "string",
-          "format": "date-time",
-          "readOnly": true,
-          "description": "Time this unsampled report was last modified."
-        },
-        "selfLink": {
-          "description": "Link for this unsampled report.",
-          "readOnly": true,
-          "type": "string"
-        },
-        "start-date": {
-          "type": "string",
-          "description": "The start date for the unsampled report.",
-          "annotations": {
-            "required": [
-              "analytics.management.filters.insert",
-              "analytics.management.unsampledReports.insert"
-            ]
-          }
-        }
-      }
-    },
-    "McfData": {
-      "properties": {
-        "rows": {
-          "description": "Analytics data rows, where each row contains a list of dimension values followed by the metric values. The order of dimensions and metrics is same as specified in the request.",
-          "items": {
-            "items": {
-              "properties": {
-                "conversionPathValue": {
-                  "type": "array",
-                  "description": "A conversion path dimension value, containing a list of interactions with their attributes.",
-                  "items": {
+                "childLink": {
+                    "description": "Child link for an account entry. Points to the list of web properties for this account.",
                     "properties": {
-                      "nodeValue": {
-                        "type": "string",
-                        "description": "Node value of an interaction on conversion path. Such as source, medium etc."
-                      },
-                      "interactionType": {
-                        "description": "Type of an interaction on conversion path. Such as CLICK, IMPRESSION etc.",
-                        "type": "string"
-                      }
+                        "href": {
+                            "description": "Link to the list of web properties for this account.",
+                            "type": "string"
+                        },
+                        "type": {
+                            "default": "analytics#webproperties",
+                            "description": "Type of the child link. Its value is \"analytics#webproperties\".",
+                            "type": "string"
+                        }
                     },
                     "type": "object"
-                  }
                 },
-                "primitiveValue": {
-                  "description": "A primitive dimension value. A primitive metric value.",
-                  "type": "string"
+                "created": {
+                    "description": "Time the account was created.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Account ID.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#account",
+                    "description": "Resource type for Analytics account.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Account name.",
+                    "type": "string"
+                },
+                "permissions": {
+                    "description": "Permissions the user has for this account.",
+                    "properties": {
+                        "effective": {
+                            "description": "All the permissions that the user has for this account. These include any implied permissions (e.g., EDIT implies VIEW).",
+                            "items": {
+                                "type": "string"
+                            },
+                            "readOnly": true,
+                            "type": "array"
+                        }
+                    },
+                    "type": "object"
+                },
+                "selfLink": {
+                    "description": "Link for this account.",
+                    "type": "string"
+                },
+                "starred": {
+                    "description": "Indicates whether this account is starred or not.",
+                    "type": "boolean"
+                },
+                "updated": {
+                    "description": "Time the account was last modified.",
+                    "format": "date-time",
+                    "type": "string"
                 }
-              },
-              "type": "object",
-              "description": "A union object representing a dimension or metric value. Only one of \"primitiveValue\" or \"conversionPathValue\" attribute will be populated."
-            },
-            "type": "array"
-          },
-          "type": "array"
-        },
-        "nextLink": {
-          "type": "string",
-          "description": "Link to next page for this Analytics data query."
-        },
-        "profileInfo": {
-          "description": "Information for the view (profile), for which the Analytics data was requested.",
-          "properties": {
-            "profileName": {
-              "type": "string",
-              "description": "View (Profile) name."
-            },
-            "accountId": {
-              "type": "string",
-              "description": "Account ID to which this view (profile) belongs."
-            },
-            "tableId": {
-              "type": "string",
-              "description": "Table ID for view (profile)."
-            },
-            "webPropertyId": {
-              "description": "Web Property ID to which this view (profile) belongs.",
-              "type": "string"
-            },
-            "profileId": {
-              "type": "string",
-              "description": "View (Profile) ID."
-            },
-            "internalWebPropertyId": {
-              "description": "Internal ID for the web property to which this view (profile) belongs.",
-              "type": "string"
-            }
-          },
-          "type": "object"
-        },
-        "previousLink": {
-          "description": "Link to previous page for this Analytics data query.",
-          "type": "string"
-        },
-        "sampleSize": {
-          "description": "The number of samples used to calculate the result.",
-          "format": "int64",
-          "type": "string"
-        },
-        "sampleSpace": {
-          "format": "int64",
-          "description": "Total size of the sample space from which the samples were selected.",
-          "type": "string"
-        },
-        "id": {
-          "description": "Unique ID for this data response.",
-          "type": "string"
-        },
-        "itemsPerPage": {
-          "format": "int32",
-          "description": "The maximum number of rows the response can contain, regardless of the actual number of rows returned. Its value ranges from 1 to 10,000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
-          "type": "integer"
-        },
-        "containsSampledData": {
-          "description": "Determines if the Analytics data contains sampled data.",
-          "type": "boolean"
-        },
-        "columnHeaders": {
-          "items": {
-            "properties": {
-              "columnType": {
-                "type": "string",
-                "description": "Column Type. Either DIMENSION or METRIC."
-              },
-              "dataType": {
-                "type": "string",
-                "description": "Data type. Dimension and metric values data types such as INTEGER, DOUBLE, CURRENCY, MCF_SEQUENCE etc."
-              },
-              "name": {
-                "type": "string",
-                "description": "Column name."
-              }
             },
             "type": "object"
-          },
-          "description": "Column headers that list dimension names followed by the metric names. The order of dimensions and metrics is same as specified in the request.",
-          "type": "array"
         },
-        "kind": {
-          "description": "Resource type.",
-          "type": "string",
-          "default": "analytics#mcfData"
+        "AccountRef": {
+            "description": "JSON template for a linked account.",
+            "id": "AccountRef",
+            "properties": {
+                "href": {
+                    "description": "Link for this account.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Account ID.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#accountRef",
+                    "description": "Analytics account reference.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Account name.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "selfLink": {
-          "type": "string",
-          "description": "Link to this page."
+        "AccountSummaries": {
+            "description": "An AccountSummary collection lists a summary of accounts, properties and views (profiles) to which the user has access. Each resource in the collection corresponds to a single AccountSummary.",
+            "id": "AccountSummaries",
+            "properties": {
+                "items": {
+                    "description": "A list of AccountSummaries.",
+                    "items": {
+                        "$ref": "AccountSummary"
+                    },
+                    "type": "array"
+                },
+                "itemsPerPage": {
+                    "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#accountSummaries",
+                    "description": "Collection type.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "Link to next page for this AccountSummary collection.",
+                    "type": "string"
+                },
+                "previousLink": {
+                    "description": "Link to previous page for this AccountSummary collection.",
+                    "type": "string"
+                },
+                "startIndex": {
+                    "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalResults": {
+                    "description": "The total number of results for the query, regardless of the number of results in the response.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "username": {
+                    "description": "Email ID of the authenticated user",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "totalsForAllResults": {
-          "description": "Total values for the requested metrics over all the results, not just the results returned in this response. The order of the metric totals is same as the metric order specified in the request.",
-          "additionalProperties": {
-            "description": "Key-value pair for the total value of a metric. Key is the metric name and the value is the total value for that metric.",
-            "type": "string"
-          },
-          "type": "object"
+        "AccountSummary": {
+            "description": "JSON template for an Analytics AccountSummary. An AccountSummary is a lightweight tree comprised of properties/profiles.",
+            "id": "AccountSummary",
+            "properties": {
+                "id": {
+                    "description": "Account ID.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#accountSummary",
+                    "description": "Resource type for Analytics AccountSummary.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Account name.",
+                    "type": "string"
+                },
+                "starred": {
+                    "description": "Indicates whether this account is starred or not.",
+                    "type": "boolean"
+                },
+                "webProperties": {
+                    "description": "List of web properties under this account.",
+                    "items": {
+                        "$ref": "WebPropertySummary"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "totalResults": {
-          "description": "The total number of rows for the query, regardless of the number of rows in the response.",
-          "type": "integer",
-          "format": "int32"
+        "AccountTicket": {
+            "description": "JSON template for an Analytics account ticket. The account ticket consists of the ticket ID and the basic information for the account, property and profile.",
+            "id": "AccountTicket",
+            "properties": {
+                "account": {
+                    "$ref": "Account",
+                    "description": "Account for this ticket."
+                },
+                "id": {
+                    "description": "Account ticket ID used to access the account ticket.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#accountTicket",
+                    "description": "Resource type for account ticket.",
+                    "type": "string"
+                },
+                "profile": {
+                    "$ref": "Profile",
+                    "description": "View (Profile) for the account."
+                },
+                "redirectUri": {
+                    "description": "Redirect URI where the user will be sent after accepting Terms of Service. Must be configured in APIs console as a callback URL.",
+                    "type": "string"
+                },
+                "webproperty": {
+                    "$ref": "Webproperty",
+                    "description": "Web property for the account."
+                }
+            },
+            "type": "object"
         },
-        "query": {
-          "properties": {
-            "dimensions": {
-              "type": "string",
-              "description": "List of analytics dimensions."
+        "AccountTreeRequest": {
+            "description": "JSON template for an Analytics account tree requests. The account tree request is used in the provisioning api to create an account, property, and view (profile). It contains the basic information required to make these fields.",
+            "id": "AccountTreeRequest",
+            "properties": {
+                "accountName": {
+                    "annotations": {
+                        "required": [
+                            "analytics.provisioning.createAccountTree"
+                        ]
+                    },
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#accountTreeRequest",
+                    "description": "Resource type for account ticket.",
+                    "type": "string"
+                },
+                "profileName": {
+                    "annotations": {
+                        "required": [
+                            "analytics.provisioning.createAccountTree"
+                        ]
+                    },
+                    "type": "string"
+                },
+                "timezone": {
+                    "annotations": {
+                        "required": [
+                            "analytics.provisioning.createAccountTree"
+                        ]
+                    },
+                    "type": "string"
+                },
+                "webpropertyName": {
+                    "annotations": {
+                        "required": [
+                            "analytics.provisioning.createAccountTree"
+                        ]
+                    },
+                    "type": "string"
+                },
+                "websiteUrl": {
+                    "annotations": {
+                        "required": [
+                            "analytics.provisioning.createAccountTree"
+                        ]
+                    },
+                    "type": "string"
+                }
             },
-            "start-index": {
-              "type": "integer",
-              "format": "int32",
-              "description": "Start index."
+            "type": "object"
+        },
+        "AccountTreeResponse": {
+            "description": "JSON template for an Analytics account tree response. The account tree response is used in the provisioning api to return the result of creating an account, property, and view (profile).",
+            "id": "AccountTreeResponse",
+            "properties": {
+                "account": {
+                    "$ref": "Account",
+                    "description": "The account created."
+                },
+                "kind": {
+                    "default": "analytics#accountTreeResponse",
+                    "description": "Resource type for account ticket.",
+                    "type": "string"
+                },
+                "profile": {
+                    "$ref": "Profile",
+                    "description": "View (Profile) for the account."
+                },
+                "webproperty": {
+                    "$ref": "Webproperty",
+                    "description": "Web property for the account."
+                }
             },
-            "filters": {
-              "type": "string",
-              "description": "Comma-separated list of dimension or metric filters."
+            "type": "object"
+        },
+        "Accounts": {
+            "description": "An account collection provides a list of Analytics accounts to which a user has access. The account collection is the entry point to all management information. Each resource in the collection corresponds to a single Analytics account.",
+            "id": "Accounts",
+            "properties": {
+                "items": {
+                    "description": "A list of accounts.",
+                    "items": {
+                        "$ref": "Account"
+                    },
+                    "type": "array"
+                },
+                "itemsPerPage": {
+                    "description": "The maximum number of entries the response can contain, regardless of the actual number of entries returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#accounts",
+                    "description": "Collection type.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "Next link for this account collection.",
+                    "type": "string"
+                },
+                "previousLink": {
+                    "description": "Previous link for this account collection.",
+                    "type": "string"
+                },
+                "startIndex": {
+                    "description": "The starting index of the entries, which is 1 by default or otherwise specified by the start-index query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalResults": {
+                    "description": "The total number of results for the query, regardless of the number of results in the response.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "username": {
+                    "description": "Email ID of the authenticated user",
+                    "type": "string"
+                }
             },
-            "segment": {
-              "description": "Analytics advanced segment.",
-              "type": "string"
+            "type": "object"
+        },
+        "AdWordsAccount": {
+            "description": "JSON template for an Google Ads account.",
+            "id": "AdWordsAccount",
+            "properties": {
+                "autoTaggingEnabled": {
+                    "description": "True if auto-tagging is enabled on the Google Ads account. Read-only after the insert operation.",
+                    "type": "boolean"
+                },
+                "customerId": {
+                    "annotations": {
+                        "required": [
+                            "analytics.management.webPropertyAdWordsLinks.insert",
+                            "analytics.management.webPropertyAdWordsLinks.update"
+                        ]
+                    },
+                    "description": "Customer ID. This field is required when creating a Google Ads link.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#adWordsAccount",
+                    "description": "Resource type for Google Ads account.",
+                    "type": "string"
+                }
             },
-            "samplingLevel": {
-              "description": "Desired sampling level",
-              "type": "string"
+            "type": "object"
+        },
+        "AnalyticsDataimportDeleteUploadDataRequest": {
+            "description": "Request template for the delete upload data request.",
+            "id": "AnalyticsDataimportDeleteUploadDataRequest",
+            "properties": {
+                "customDataImportUids": {
+                    "description": "A list of upload UIDs.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
             },
-            "max-results": {
-              "description": "Maximum results per page.",
-              "type": "integer",
-              "format": "int32"
+            "type": "object"
+        },
+        "Column": {
+            "description": "JSON template for a metadata column.",
+            "id": "Column",
+            "properties": {
+                "attributes": {
+                    "additionalProperties": {
+                        "description": "The name of the attribute.",
+                        "type": "string"
+                    },
+                    "description": "Map of attribute name and value for this column.",
+                    "type": "object"
+                },
+                "id": {
+                    "description": "Column id.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#column",
+                    "description": "Resource type for Analytics column.",
+                    "type": "string"
+                }
             },
-            "metrics": {
-              "items": {
-                "type": "string"
-              },
-              "description": "List of analytics metrics.",
-              "type": "array"
+            "type": "object"
+        },
+        "Columns": {
+            "description": "Lists columns (dimensions and metrics) for a particular report type.",
+            "id": "Columns",
+            "properties": {
+                "attributeNames": {
+                    "description": "List of attributes names returned by columns.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "etag": {
+                    "description": "Etag of collection. This etag can be compared with the last response etag to check if response has changed.",
+                    "type": "string"
+                },
+                "items": {
+                    "description": "List of columns for a report type.",
+                    "items": {
+                        "$ref": "Column"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "default": "analytics#columns",
+                    "description": "Collection type.",
+                    "type": "string"
+                },
+                "totalResults": {
+                    "description": "Total number of columns returned in the response.",
+                    "format": "int32",
+                    "type": "integer"
+                }
             },
-            "sort": {
-              "description": "List of dimensions or metrics based on which Analytics data is sorted.",
-              "type": "array",
-              "items": {
-                "type": "string"
-              }
+            "type": "object"
+        },
+        "CustomDataSource": {
+            "description": "JSON template for an Analytics custom data source.",
+            "id": "CustomDataSource",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID to which this custom data source belongs.",
+                    "type": "string"
+                },
+                "childLink": {
+                    "properties": {
+                        "href": {
+                            "description": "Link to the list of daily uploads for this custom data source. Link to the list of uploads for this custom data source.",
+                            "type": "string"
+                        },
+                        "type": {
+                            "description": "Value is \"analytics#dailyUploads\". Value is \"analytics#uploads\".",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "created": {
+                    "description": "Time this custom data source was created.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "description": {
+                    "description": "Description of custom data source.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Custom data source ID.",
+                    "type": "string"
+                },
+                "importBehavior": {
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#customDataSource",
+                    "description": "Resource type for Analytics custom data source.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this custom data source.",
+                    "type": "string"
+                },
+                "parentLink": {
+                    "description": "Parent link for this custom data source. Points to the web property to which this custom data source belongs.",
+                    "properties": {
+                        "href": {
+                            "description": "Link to the web property to which this custom data source belongs.",
+                            "type": "string"
+                        },
+                        "type": {
+                            "default": "analytics#webproperty",
+                            "description": "Value is \"analytics#webproperty\".",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "profilesLinked": {
+                    "description": "IDs of views (profiles) linked to the custom data source.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "schema": {
+                    "description": "Collection of schema headers of the custom data source.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "selfLink": {
+                    "description": "Link for this Analytics custom data source.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Type of the custom data source.",
+                    "type": "string"
+                },
+                "updated": {
+                    "description": "Time this custom data source was last modified.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "uploadType": {
+                    "description": "Upload type of the custom data source.",
+                    "type": "string"
+                },
+                "webPropertyId": {
+                    "description": "Web property ID of the form UA-XXXXX-YY to which this custom data source belongs.",
+                    "type": "string"
+                }
             },
-            "end-date": {
-              "description": "End date.",
-              "type": "string"
+            "type": "object"
+        },
+        "CustomDataSources": {
+            "description": "Lists Analytics custom data sources to which the user has access. Each resource in the collection corresponds to a single Analytics custom data source.",
+            "id": "CustomDataSources",
+            "properties": {
+                "items": {
+                    "description": "Collection of custom data sources.",
+                    "items": {
+                        "$ref": "CustomDataSource"
+                    },
+                    "type": "array"
+                },
+                "itemsPerPage": {
+                    "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#customDataSources",
+                    "description": "Collection type.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "Link to next page for this custom data source collection.",
+                    "type": "string"
+                },
+                "previousLink": {
+                    "description": "Link to previous page for this custom data source collection.",
+                    "type": "string"
+                },
+                "startIndex": {
+                    "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalResults": {
+                    "description": "The total number of results for the query, regardless of the number of results in the response.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "username": {
+                    "description": "Email ID of the authenticated user",
+                    "type": "string"
+                }
             },
-            "start-date": {
-              "description": "Start date.",
-              "type": "string"
+            "type": "object"
+        },
+        "CustomDimension": {
+            "description": "JSON template for Analytics Custom Dimension.",
+            "id": "CustomDimension",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID.",
+                    "type": "string"
+                },
+                "active": {
+                    "description": "Boolean indicating whether the custom dimension is active.",
+                    "type": "boolean"
+                },
+                "created": {
+                    "description": "Time the custom dimension was created.",
+                    "format": "date-time",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Custom dimension ID.",
+                    "type": "string"
+                },
+                "index": {
+                    "description": "Index of the custom dimension.",
+                    "format": "int32",
+                    "readOnly": true,
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#customDimension",
+                    "description": "Kind value for a custom dimension. Set to \"analytics#customDimension\". It is a read-only field.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of the custom dimension.",
+                    "type": "string"
+                },
+                "parentLink": {
+                    "description": "Parent link for the custom dimension. Points to the property to which the custom dimension belongs.",
+                    "properties": {
+                        "href": {
+                            "description": "Link to the property to which the custom dimension belongs.",
+                            "type": "string"
+                        },
+                        "type": {
+                            "default": "analytics#webproperty",
+                            "description": "Type of the parent link. Set to \"analytics#webproperty\".",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "scope": {
+                    "description": "Scope of the custom dimension: HIT, SESSION, USER or PRODUCT.",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "Link for the custom dimension",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "updated": {
+                    "description": "Time the custom dimension was last modified.",
+                    "format": "date-time",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "webPropertyId": {
+                    "description": "Property ID.",
+                    "type": "string"
+                }
             },
-            "ids": {
-              "description": "Unique table ID.",
-              "type": "string"
-            }
-          },
-          "description": "Analytics data request query parameters.",
-          "type": "object"
+            "type": "object"
+        },
+        "CustomDimensions": {
+            "description": "A custom dimension collection lists Analytics custom dimensions to which the user has access. Each resource in the collection corresponds to a single Analytics custom dimension.",
+            "id": "CustomDimensions",
+            "properties": {
+                "items": {
+                    "description": "Collection of custom dimensions.",
+                    "items": {
+                        "$ref": "CustomDimension"
+                    },
+                    "type": "array"
+                },
+                "itemsPerPage": {
+                    "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#customDimensions",
+                    "description": "Collection type.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "Link to next page for this custom dimension collection.",
+                    "type": "string"
+                },
+                "previousLink": {
+                    "description": "Link to previous page for this custom dimension collection.",
+                    "type": "string"
+                },
+                "startIndex": {
+                    "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalResults": {
+                    "description": "The total number of results for the query, regardless of the number of results in the response.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "username": {
+                    "description": "Email ID of the authenticated user",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CustomMetric": {
+            "description": "JSON template for Analytics Custom Metric.",
+            "id": "CustomMetric",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID.",
+                    "type": "string"
+                },
+                "active": {
+                    "description": "Boolean indicating whether the custom metric is active.",
+                    "type": "boolean"
+                },
+                "created": {
+                    "description": "Time the custom metric was created.",
+                    "format": "date-time",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Custom metric ID.",
+                    "type": "string"
+                },
+                "index": {
+                    "description": "Index of the custom metric.",
+                    "format": "int32",
+                    "readOnly": true,
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#customMetric",
+                    "description": "Kind value for a custom metric. Set to \"analytics#customMetric\". It is a read-only field.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "max_value": {
+                    "description": "Max value of custom metric.",
+                    "type": "string"
+                },
+                "min_value": {
+                    "description": "Min value of custom metric.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of the custom metric.",
+                    "type": "string"
+                },
+                "parentLink": {
+                    "description": "Parent link for the custom metric. Points to the property to which the custom metric belongs.",
+                    "properties": {
+                        "href": {
+                            "description": "Link to the property to which the custom metric belongs.",
+                            "type": "string"
+                        },
+                        "type": {
+                            "default": "analytics#webproperty",
+                            "description": "Type of the parent link. Set to \"analytics#webproperty\".",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "scope": {
+                    "description": "Scope of the custom metric: HIT or PRODUCT.",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "Link for the custom metric",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Data type of custom metric.",
+                    "type": "string"
+                },
+                "updated": {
+                    "description": "Time the custom metric was last modified.",
+                    "format": "date-time",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "webPropertyId": {
+                    "description": "Property ID.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CustomMetrics": {
+            "description": "A custom metric collection lists Analytics custom metrics to which the user has access. Each resource in the collection corresponds to a single Analytics custom metric.",
+            "id": "CustomMetrics",
+            "properties": {
+                "items": {
+                    "description": "Collection of custom metrics.",
+                    "items": {
+                        "$ref": "CustomMetric"
+                    },
+                    "type": "array"
+                },
+                "itemsPerPage": {
+                    "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#customMetrics",
+                    "description": "Collection type.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "Link to next page for this custom metric collection.",
+                    "type": "string"
+                },
+                "previousLink": {
+                    "description": "Link to previous page for this custom metric collection.",
+                    "type": "string"
+                },
+                "startIndex": {
+                    "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalResults": {
+                    "description": "The total number of results for the query, regardless of the number of results in the response.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "username": {
+                    "description": "Email ID of the authenticated user",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "EntityAdWordsLink": {
+            "description": "JSON template for Analytics Entity Google Ads Link.",
+            "id": "EntityAdWordsLink",
+            "properties": {
+                "adWordsAccounts": {
+                    "annotations": {
+                        "required": [
+                            "analytics.management.webPropertyAdWordsLinks.insert",
+                            "analytics.management.webPropertyAdWordsLinks.update"
+                        ]
+                    },
+                    "description": "A list of Google Ads client accounts. These cannot be MCC accounts. This field is required when creating a Google Ads link. It cannot be empty.",
+                    "items": {
+                        "$ref": "AdWordsAccount"
+                    },
+                    "type": "array"
+                },
+                "entity": {
+                    "description": "Web property being linked.",
+                    "properties": {
+                        "webPropertyRef": {
+                            "$ref": "WebPropertyRef"
+                        }
+                    },
+                    "type": "object"
+                },
+                "id": {
+                    "description": "Entity Google Ads link ID",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#entityAdWordsLink",
+                    "description": "Resource type for entity Google Ads link.",
+                    "type": "string"
+                },
+                "name": {
+                    "annotations": {
+                        "required": [
+                            "analytics.management.webPropertyAdWordsLinks.insert",
+                            "analytics.management.webPropertyAdWordsLinks.update"
+                        ]
+                    },
+                    "description": "Name of the link. This field is required when creating a Google Ads link.",
+                    "type": "string"
+                },
+                "profileIds": {
+                    "description": "IDs of linked Views (Profiles) represented as strings.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "selfLink": {
+                    "description": "URL link for this Google Analytics - Google Ads link.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "EntityAdWordsLinks": {
+            "description": "An entity Google Ads link collection provides a list of GA-Google Ads links Each resource in this collection corresponds to a single link.",
+            "id": "EntityAdWordsLinks",
+            "properties": {
+                "items": {
+                    "description": "A list of entity Google Ads links.",
+                    "items": {
+                        "$ref": "EntityAdWordsLink"
+                    },
+                    "type": "array"
+                },
+                "itemsPerPage": {
+                    "description": "The maximum number of entries the response can contain, regardless of the actual number of entries returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#entityAdWordsLinks",
+                    "description": "Collection type.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "Next link for this Google Ads link collection.",
+                    "type": "string"
+                },
+                "previousLink": {
+                    "description": "Previous link for this Google Ads link collection.",
+                    "type": "string"
+                },
+                "startIndex": {
+                    "description": "The starting index of the entries, which is 1 by default or otherwise specified by the start-index query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalResults": {
+                    "description": "The total number of results for the query, regardless of the number of results in the response.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "EntityUserLink": {
+            "description": "JSON template for an Analytics Entity-User Link. Returns permissions that a user has for an entity.",
+            "id": "EntityUserLink",
+            "properties": {
+                "entity": {
+                    "description": "Entity for this link. It can be an account, a web property, or a view (profile).",
+                    "properties": {
+                        "accountRef": {
+                            "$ref": "AccountRef",
+                            "description": "Account for this link."
+                        },
+                        "profileRef": {
+                            "$ref": "ProfileRef",
+                            "description": "View (Profile) for this link."
+                        },
+                        "webPropertyRef": {
+                            "$ref": "WebPropertyRef",
+                            "description": "Web property for this link."
+                        }
+                    },
+                    "type": "object"
+                },
+                "id": {
+                    "description": "Entity user link ID",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#entityUserLink",
+                    "description": "Resource type for entity user link.",
+                    "type": "string"
+                },
+                "permissions": {
+                    "description": "Permissions the user has for this entity.",
+                    "properties": {
+                        "effective": {
+                            "description": "Effective permissions represent all the permissions that a user has for this entity. These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent entity. Effective permissions are read-only.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "readOnly": true,
+                            "type": "array"
+                        },
+                        "local": {
+                            "description": "Permissions that a user has been assigned at this very level. Does not include any implied or inherited permissions. Local permissions are modifiable.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        }
+                    },
+                    "type": "object"
+                },
+                "selfLink": {
+                    "description": "Self link for this resource.",
+                    "type": "string"
+                },
+                "userRef": {
+                    "$ref": "UserRef",
+                    "description": "User reference."
+                }
+            },
+            "type": "object"
+        },
+        "EntityUserLinks": {
+            "description": "An entity user link collection provides a list of Analytics ACL links Each resource in this collection corresponds to a single link.",
+            "id": "EntityUserLinks",
+            "properties": {
+                "items": {
+                    "description": "A list of entity user links.",
+                    "items": {
+                        "$ref": "EntityUserLink"
+                    },
+                    "type": "array"
+                },
+                "itemsPerPage": {
+                    "description": "The maximum number of entries the response can contain, regardless of the actual number of entries returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#entityUserLinks",
+                    "description": "Collection type.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "Next link for this account collection.",
+                    "type": "string"
+                },
+                "previousLink": {
+                    "description": "Previous link for this account collection.",
+                    "type": "string"
+                },
+                "startIndex": {
+                    "description": "The starting index of the entries, which is 1 by default or otherwise specified by the start-index query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalResults": {
+                    "description": "The total number of results for the query, regardless of the number of results in the response.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "Experiment": {
+            "description": "JSON template for Analytics experiment resource.",
+            "id": "Experiment",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID to which this experiment belongs. This field is read-only.",
+                    "type": "string"
+                },
+                "created": {
+                    "description": "Time the experiment was created. This field is read-only.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "description": {
+                    "description": "Notes about this experiment.",
+                    "type": "string"
+                },
+                "editableInGaUi": {
+                    "description": "If true, the end user will be able to edit the experiment via the Google Analytics user interface.",
+                    "type": "boolean"
+                },
+                "endTime": {
+                    "description": "The ending time of the experiment (the time the status changed from RUNNING to ENDED). This field is present only if the experiment has ended. This field is read-only.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "equalWeighting": {
+                    "description": "Boolean specifying whether to distribute traffic evenly across all variations. If the value is False, content experiments follows the default behavior of adjusting traffic dynamically based on variation performance. Optional -- defaults to False. This field may not be changed for an experiment whose status is ENDED.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "annotations": {
+                        "required": [
+                            "analytics.management.experiments.patch",
+                            "analytics.management.experiments.update"
+                        ]
+                    },
+                    "description": "Experiment ID. Required for patch and update. Disallowed for create.",
+                    "type": "string"
+                },
+                "internalWebPropertyId": {
+                    "description": "Internal ID for the web property to which this experiment belongs. This field is read-only.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#experiment",
+                    "description": "Resource type for an Analytics experiment. This field is read-only.",
+                    "type": "string"
+                },
+                "minimumExperimentLengthInDays": {
+                    "description": "An integer number in [3, 90]. Specifies the minimum length of the experiment. Can be changed for a running experiment. This field may not be changed for an experiments whose status is ENDED.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "name": {
+                    "annotations": {
+                        "required": [
+                            "analytics.management.experiments.insert",
+                            "analytics.management.experiments.update"
+                        ]
+                    },
+                    "description": "Experiment name. This field may not be changed for an experiment whose status is ENDED. This field is required when creating an experiment.",
+                    "type": "string"
+                },
+                "objectiveMetric": {
+                    "description": "The metric that the experiment is optimizing. Valid values: \"ga:goal(n)Completions\", \"ga:adsenseAdsClicks\", \"ga:adsenseAdsViewed\", \"ga:adsenseRevenue\", \"ga:bounces\", \"ga:pageviews\", \"ga:sessionDuration\", \"ga:transactions\", \"ga:transactionRevenue\". This field is required if status is \"RUNNING\" and servingFramework is one of \"REDIRECT\" or \"API\".",
+                    "type": "string"
+                },
+                "optimizationType": {
+                    "description": "Whether the objectiveMetric should be minimized or maximized. Possible values: \"MAXIMUM\", \"MINIMUM\". Optional--defaults to \"MAXIMUM\". Cannot be specified without objectiveMetric. Cannot be modified when status is \"RUNNING\" or \"ENDED\".",
+                    "type": "string"
+                },
+                "parentLink": {
+                    "description": "Parent link for an experiment. Points to the view (profile) to which this experiment belongs.",
+                    "properties": {
+                        "href": {
+                            "description": "Link to the view (profile) to which this experiment belongs. This field is read-only.",
+                            "type": "string"
+                        },
+                        "type": {
+                            "default": "analytics#profile",
+                            "description": "Value is \"analytics#profile\". This field is read-only.",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "profileId": {
+                    "description": "View (Profile) ID to which this experiment belongs. This field is read-only.",
+                    "type": "string"
+                },
+                "reasonExperimentEnded": {
+                    "description": "Why the experiment ended. Possible values: \"STOPPED_BY_USER\", \"WINNER_FOUND\", \"EXPERIMENT_EXPIRED\", \"ENDED_WITH_NO_WINNER\", \"GOAL_OBJECTIVE_CHANGED\". \"ENDED_WITH_NO_WINNER\" means that the experiment didn't expire but no winner was projected to be found. If the experiment status is changed via the API to ENDED this field is set to STOPPED_BY_USER. This field is read-only.",
+                    "type": "string"
+                },
+                "rewriteVariationUrlsAsOriginal": {
+                    "description": "Boolean specifying whether variations URLS are rewritten to match those of the original. This field may not be changed for an experiments whose status is ENDED.",
+                    "type": "boolean"
+                },
+                "selfLink": {
+                    "description": "Link for this experiment. This field is read-only.",
+                    "type": "string"
+                },
+                "servingFramework": {
+                    "description": "The framework used to serve the experiment variations and evaluate the results. One of:  \n- REDIRECT: Google Analytics redirects traffic to different variation pages, reports the chosen variation and evaluates the results.\n- API: Google Analytics chooses and reports the variation to serve and evaluates the results; the caller is responsible for serving the selected variation.\n- EXTERNAL: The variations will be served externally and the chosen variation reported to Google Analytics. The caller is responsible for serving the selected variation and evaluating the results.",
+                    "type": "string"
+                },
+                "snippet": {
+                    "description": "The snippet of code to include on the control page(s). This field is read-only.",
+                    "type": "string"
+                },
+                "startTime": {
+                    "description": "The starting time of the experiment (the time the status changed from READY_TO_RUN to RUNNING). This field is present only if the experiment has started. This field is read-only.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "status": {
+                    "annotations": {
+                        "required": [
+                            "analytics.management.experiments.insert",
+                            "analytics.management.experiments.update"
+                        ]
+                    },
+                    "description": "Experiment status. Possible values: \"DRAFT\", \"READY_TO_RUN\", \"RUNNING\", \"ENDED\". Experiments can be created in the \"DRAFT\", \"READY_TO_RUN\" or \"RUNNING\" state. This field is required when creating an experiment.",
+                    "type": "string"
+                },
+                "trafficCoverage": {
+                    "description": "A floating-point number in (0, 1]. Specifies the fraction of the traffic that participates in the experiment. Can be changed for a running experiment. This field may not be changed for an experiments whose status is ENDED.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "updated": {
+                    "description": "Time the experiment was last modified. This field is read-only.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "variations": {
+                    "description": "Array of variations. The first variation in the array is the original. The number of variations may not change once an experiment is in the RUNNING state. At least two variations are required before status can be set to RUNNING.",
+                    "items": {
+                        "properties": {
+                            "name": {
+                                "annotations": {
+                                    "required": [
+                                        "analytics.management.experiments.insert",
+                                        "analytics.management.experiments.update"
+                                    ]
+                                },
+                                "description": "The name of the variation. This field is required when creating an experiment. This field may not be changed for an experiment whose status is ENDED.",
+                                "type": "string"
+                            },
+                            "status": {
+                                "description": "Status of the variation. Possible values: \"ACTIVE\", \"INACTIVE\". INACTIVE variations are not served. This field may not be changed for an experiment whose status is ENDED.",
+                                "type": "string"
+                            },
+                            "url": {
+                                "description": "The URL of the variation. This field may not be changed for an experiment whose status is RUNNING or ENDED.",
+                                "type": "string"
+                            },
+                            "weight": {
+                                "description": "Weight that this variation should receive. Only present if the experiment is running. This field is read-only.",
+                                "format": "double",
+                                "type": "number"
+                            },
+                            "won": {
+                                "description": "True if the experiment has ended and this variation performed (statistically) significantly better than the original. This field is read-only.",
+                                "type": "boolean"
+                            }
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "webPropertyId": {
+                    "description": "Web property ID to which this experiment belongs. The web property ID is of the form UA-XXXXX-YY. This field is read-only.",
+                    "type": "string"
+                },
+                "winnerConfidenceLevel": {
+                    "description": "A floating-point number in (0, 1). Specifies the necessary confidence level to choose a winner. This field may not be changed for an experiments whose status is ENDED.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "winnerFound": {
+                    "description": "Boolean specifying whether a winner has been found for this experiment. This field is read-only.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "Experiments": {
+            "description": "An experiment collection lists Analytics experiments to which the user has access. Each view (profile) can have a set of experiments. Each resource in the Experiment collection corresponds to a single Analytics experiment.",
+            "id": "Experiments",
+            "properties": {
+                "items": {
+                    "description": "A list of experiments.",
+                    "items": {
+                        "$ref": "Experiment"
+                    },
+                    "type": "array"
+                },
+                "itemsPerPage": {
+                    "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#experiments",
+                    "description": "Collection type.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "Link to next page for this experiment collection.",
+                    "type": "string"
+                },
+                "previousLink": {
+                    "description": "Link to previous page for this experiment collection.",
+                    "type": "string"
+                },
+                "startIndex": {
+                    "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalResults": {
+                    "description": "The total number of results for the query, regardless of the number of resources in the result.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "username": {
+                    "description": "Email ID of the authenticated user",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Filter": {
+            "description": "JSON template for an Analytics account filter.",
+            "id": "Filter",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID to which this filter belongs.",
+                    "type": "string"
+                },
+                "advancedDetails": {
+                    "description": "Details for the filter of the type ADVANCED.",
+                    "properties": {
+                        "caseSensitive": {
+                            "description": "Indicates if the filter expressions are case sensitive.",
+                            "type": "boolean"
+                        },
+                        "extractA": {
+                            "description": "Expression to extract from field A.",
+                            "type": "string"
+                        },
+                        "extractB": {
+                            "description": "Expression to extract from field B.",
+                            "type": "string"
+                        },
+                        "fieldA": {
+                            "description": "Field A.",
+                            "type": "string"
+                        },
+                        "fieldAIndex": {
+                            "description": "The Index of the custom dimension. Required if field is a CUSTOM_DIMENSION.",
+                            "format": "int32",
+                            "type": "integer"
+                        },
+                        "fieldARequired": {
+                            "description": "Indicates if field A is required to match.",
+                            "type": "boolean"
+                        },
+                        "fieldB": {
+                            "description": "Field B.",
+                            "type": "string"
+                        },
+                        "fieldBIndex": {
+                            "description": "The Index of the custom dimension. Required if field is a CUSTOM_DIMENSION.",
+                            "format": "int32",
+                            "type": "integer"
+                        },
+                        "fieldBRequired": {
+                            "description": "Indicates if field B is required to match.",
+                            "type": "boolean"
+                        },
+                        "outputConstructor": {
+                            "description": "Expression used to construct the output value.",
+                            "type": "string"
+                        },
+                        "outputToField": {
+                            "description": "Output field.",
+                            "type": "string"
+                        },
+                        "outputToFieldIndex": {
+                            "description": "The Index of the custom dimension. Required if field is a CUSTOM_DIMENSION.",
+                            "format": "int32",
+                            "type": "integer"
+                        },
+                        "overrideOutputField": {
+                            "description": "Indicates if the existing value of the output field, if any, should be overridden by the output expression.",
+                            "type": "boolean"
+                        }
+                    },
+                    "type": "object"
+                },
+                "created": {
+                    "description": "Time this filter was created.",
+                    "format": "date-time",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "excludeDetails": {
+                    "$ref": "FilterExpression",
+                    "description": "Details for the filter of the type EXCLUDE."
+                },
+                "id": {
+                    "description": "Filter ID.",
+                    "type": "string"
+                },
+                "includeDetails": {
+                    "$ref": "FilterExpression",
+                    "description": "Details for the filter of the type INCLUDE."
+                },
+                "kind": {
+                    "default": "analytics#filter",
+                    "description": "Resource type for Analytics filter.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "lowercaseDetails": {
+                    "description": "Details for the filter of the type LOWER.",
+                    "properties": {
+                        "field": {
+                            "description": "Field to use in the filter.",
+                            "type": "string"
+                        },
+                        "fieldIndex": {
+                            "description": "The Index of the custom dimension. Required if field is a CUSTOM_DIMENSION.",
+                            "format": "int32",
+                            "type": "integer"
+                        }
+                    },
+                    "type": "object"
+                },
+                "name": {
+                    "annotations": {
+                        "required": [
+                            "analytics.management.filters.insert",
+                            "analytics.management.filters.update"
+                        ]
+                    },
+                    "description": "Name of this filter.",
+                    "type": "string"
+                },
+                "parentLink": {
+                    "description": "Parent link for this filter. Points to the account to which this filter belongs.",
+                    "properties": {
+                        "href": {
+                            "description": "Link to the account to which this filter belongs.",
+                            "type": "string"
+                        },
+                        "type": {
+                            "default": "analytics#account",
+                            "description": "Value is \"analytics#account\".",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "searchAndReplaceDetails": {
+                    "description": "Details for the filter of the type SEARCH_AND_REPLACE.",
+                    "properties": {
+                        "caseSensitive": {
+                            "description": "Determines if the filter is case sensitive.",
+                            "type": "boolean"
+                        },
+                        "field": {
+                            "description": "Field to use in the filter.",
+                            "type": "string"
+                        },
+                        "fieldIndex": {
+                            "description": "The Index of the custom dimension. Required if field is a CUSTOM_DIMENSION.",
+                            "format": "int32",
+                            "type": "integer"
+                        },
+                        "replaceString": {
+                            "description": "Term to replace the search term with.",
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Term to search.",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "selfLink": {
+                    "description": "Link for this filter.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "type": {
+                    "annotations": {
+                        "required": [
+                            "analytics.management.filters.insert",
+                            "analytics.management.filters.update"
+                        ]
+                    },
+                    "description": "Type of this filter. Possible values are INCLUDE, EXCLUDE, LOWERCASE, UPPERCASE, SEARCH_AND_REPLACE and ADVANCED.",
+                    "type": "string"
+                },
+                "updated": {
+                    "description": "Time this filter was last modified.",
+                    "format": "date-time",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "uppercaseDetails": {
+                    "description": "Details for the filter of the type UPPER.",
+                    "properties": {
+                        "field": {
+                            "description": "Field to use in the filter.",
+                            "type": "string"
+                        },
+                        "fieldIndex": {
+                            "description": "The Index of the custom dimension. Required if field is a CUSTOM_DIMENSION.",
+                            "format": "int32",
+                            "type": "integer"
+                        }
+                    },
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "FilterExpression": {
+            "description": "JSON template for an Analytics filter expression.",
+            "id": "FilterExpression",
+            "properties": {
+                "caseSensitive": {
+                    "description": "Determines if the filter is case sensitive.",
+                    "type": "boolean"
+                },
+                "expressionValue": {
+                    "description": "Filter expression value",
+                    "type": "string"
+                },
+                "field": {
+                    "description": "Field to filter. Possible values:  \n- Content and Traffic  \n- PAGE_REQUEST_URI, \n- PAGE_HOSTNAME, \n- PAGE_TITLE, \n- REFERRAL, \n- COST_DATA_URI (Campaign target URL), \n- HIT_TYPE, \n- INTERNAL_SEARCH_TERM, \n- INTERNAL_SEARCH_TYPE, \n- SOURCE_PROPERTY_TRACKING_ID,   \n- Campaign or AdGroup  \n- CAMPAIGN_SOURCE, \n- CAMPAIGN_MEDIUM, \n- CAMPAIGN_NAME, \n- CAMPAIGN_AD_GROUP, \n- CAMPAIGN_TERM, \n- CAMPAIGN_CONTENT, \n- CAMPAIGN_CODE, \n- CAMPAIGN_REFERRAL_PATH,   \n- E-Commerce  \n- TRANSACTION_COUNTRY, \n- TRANSACTION_REGION, \n- TRANSACTION_CITY, \n- TRANSACTION_AFFILIATION (Store or order location), \n- ITEM_NAME, \n- ITEM_CODE, \n- ITEM_VARIATION, \n- TRANSACTION_ID, \n- TRANSACTION_CURRENCY_CODE, \n- PRODUCT_ACTION_TYPE,   \n- Audience/Users  \n- BROWSER, \n- BROWSER_VERSION, \n- BROWSER_SIZE, \n- PLATFORM, \n- PLATFORM_VERSION, \n- LANGUAGE, \n- SCREEN_RESOLUTION, \n- SCREEN_COLORS, \n- JAVA_ENABLED (Boolean Field), \n- FLASH_VERSION, \n- GEO_SPEED (Connection speed), \n- VISITOR_TYPE, \n- GEO_ORGANIZATION (ISP organization), \n- GEO_DOMAIN, \n- GEO_IP_ADDRESS, \n- GEO_IP_VERSION,   \n- Location  \n- GEO_COUNTRY, \n- GEO_REGION, \n- GEO_CITY,   \n- Event  \n- EVENT_CATEGORY, \n- EVENT_ACTION, \n- EVENT_LABEL,   \n- Other  \n- CUSTOM_FIELD_1, \n- CUSTOM_FIELD_2, \n- USER_DEFINED_VALUE,   \n- Application  \n- APP_ID, \n- APP_INSTALLER_ID, \n- APP_NAME, \n- APP_VERSION, \n- SCREEN, \n- IS_APP (Boolean Field), \n- IS_FATAL_EXCEPTION (Boolean Field), \n- EXCEPTION_DESCRIPTION,   \n- Mobile device  \n- IS_MOBILE (Boolean Field, Deprecated. Use DEVICE_CATEGORY=mobile), \n- IS_TABLET (Boolean Field, Deprecated. Use DEVICE_CATEGORY=tablet), \n- DEVICE_CATEGORY, \n- MOBILE_HAS_QWERTY_KEYBOARD (Boolean Field), \n- MOBILE_HAS_NFC_SUPPORT (Boolean Field), \n- MOBILE_HAS_CELLULAR_RADIO (Boolean Field), \n- MOBILE_HAS_WIFI_SUPPORT (Boolean Field), \n- MOBILE_BRAND_NAME, \n- MOBILE_MODEL_NAME, \n- MOBILE_MARKETING_NAME, \n- MOBILE_POINTING_METHOD,   \n- Social  \n- SOCIAL_NETWORK, \n- SOCIAL_ACTION, \n- SOCIAL_ACTION_TARGET,   \n- Custom dimension  \n- CUSTOM_DIMENSION (See accompanying field index),",
+                    "type": "string"
+                },
+                "fieldIndex": {
+                    "description": "The Index of the custom dimension. Set only if the field is a is CUSTOM_DIMENSION.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#filterExpression",
+                    "description": "Kind value for filter expression",
+                    "type": "string"
+                },
+                "matchType": {
+                    "description": "Match type for this filter. Possible values are BEGINS_WITH, EQUAL, ENDS_WITH, CONTAINS, or MATCHES. GEO_DOMAIN, GEO_IP_ADDRESS, PAGE_REQUEST_URI, or PAGE_HOSTNAME filters can use any match type; all other filters must use MATCHES.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FilterRef": {
+            "description": "JSON template for a profile filter link.",
+            "id": "FilterRef",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID to which this filter belongs.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "href": {
+                    "description": "Link for this filter.",
+                    "type": "string"
+                },
+                "id": {
+                    "annotations": {
+                        "required": [
+                            "analytics.management.profileFilterLinks.insert"
+                        ]
+                    },
+                    "description": "Filter ID.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#filterRef",
+                    "description": "Kind value for filter reference.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this filter.",
+                    "readOnly": true,
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Filters": {
+            "description": "A filter collection lists filters created by users in an Analytics account. Each resource in the collection corresponds to a filter.",
+            "id": "Filters",
+            "properties": {
+                "items": {
+                    "description": "A list of filters.",
+                    "items": {
+                        "$ref": "Filter"
+                    },
+                    "type": "array"
+                },
+                "itemsPerPage": {
+                    "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1,000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#filters",
+                    "description": "Collection type.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "Link to next page for this filter collection.",
+                    "type": "string"
+                },
+                "previousLink": {
+                    "description": "Link to previous page for this filter collection.",
+                    "type": "string"
+                },
+                "startIndex": {
+                    "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalResults": {
+                    "description": "The total number of results for the query, regardless of the number of results in the response.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "username": {
+                    "description": "Email ID of the authenticated user",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GaData": {
+            "description": "Analytics data for a given view (profile).",
+            "id": "GaData",
+            "properties": {
+                "columnHeaders": {
+                    "description": "Column headers that list dimension names followed by the metric names. The order of dimensions and metrics is same as specified in the request.",
+                    "items": {
+                        "properties": {
+                            "columnType": {
+                                "description": "Column Type. Either DIMENSION or METRIC.",
+                                "type": "string"
+                            },
+                            "dataType": {
+                                "description": "Data type. Dimension column headers have only STRING as the data type. Metric column headers have data types for metric values such as INTEGER, DOUBLE, CURRENCY etc.",
+                                "type": "string"
+                            },
+                            "name": {
+                                "description": "Column name.",
+                                "type": "string"
+                            }
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "containsSampledData": {
+                    "description": "Determines if Analytics data contains samples.",
+                    "type": "boolean"
+                },
+                "dataLastRefreshed": {
+                    "description": "The last refreshed time in seconds for Analytics data.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "dataTable": {
+                    "properties": {
+                        "cols": {
+                            "items": {
+                                "properties": {
+                                    "id": {
+                                        "type": "string"
+                                    },
+                                    "label": {
+                                        "type": "string"
+                                    },
+                                    "type": {
+                                        "type": "string"
+                                    }
+                                },
+                                "type": "object"
+                            },
+                            "type": "array"
+                        },
+                        "rows": {
+                            "items": {
+                                "properties": {
+                                    "c": {
+                                        "items": {
+                                            "properties": {
+                                                "v": {
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "type": "object"
+                                        },
+                                        "type": "array"
+                                    }
+                                },
+                                "type": "object"
+                            },
+                            "type": "array"
+                        }
+                    },
+                    "type": "object"
+                },
+                "id": {
+                    "description": "Unique ID for this data response.",
+                    "type": "string"
+                },
+                "itemsPerPage": {
+                    "description": "The maximum number of rows the response can contain, regardless of the actual number of rows returned. Its value ranges from 1 to 10,000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#gaData",
+                    "description": "Resource type.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "Link to next page for this Analytics data query.",
+                    "type": "string"
+                },
+                "previousLink": {
+                    "description": "Link to previous page for this Analytics data query.",
+                    "type": "string"
+                },
+                "profileInfo": {
+                    "description": "Information for the view (profile), for which the Analytics data was requested.",
+                    "properties": {
+                        "accountId": {
+                            "description": "Account ID to which this view (profile) belongs.",
+                            "type": "string"
+                        },
+                        "internalWebPropertyId": {
+                            "description": "Internal ID for the web property to which this view (profile) belongs.",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "View (Profile) ID.",
+                            "type": "string"
+                        },
+                        "profileName": {
+                            "description": "View (Profile) name.",
+                            "type": "string"
+                        },
+                        "tableId": {
+                            "description": "Table ID for view (profile).",
+                            "type": "string"
+                        },
+                        "webPropertyId": {
+                            "description": "Web Property ID to which this view (profile) belongs.",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "query": {
+                    "description": "Analytics data request query parameters.",
+                    "properties": {
+                        "dimensions": {
+                            "description": "List of analytics dimensions.",
+                            "type": "string"
+                        },
+                        "end-date": {
+                            "description": "End date.",
+                            "type": "string"
+                        },
+                        "filters": {
+                            "description": "Comma-separated list of dimension or metric filters.",
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Unique table ID.",
+                            "type": "string"
+                        },
+                        "max-results": {
+                            "description": "Maximum results per page.",
+                            "format": "int32",
+                            "type": "integer"
+                        },
+                        "metrics": {
+                            "description": "List of analytics metrics.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        },
+                        "samplingLevel": {
+                            "description": "Desired sampling level",
+                            "type": "string"
+                        },
+                        "segment": {
+                            "description": "Analytics advanced segment.",
+                            "type": "string"
+                        },
+                        "sort": {
+                            "description": "List of dimensions or metrics based on which Analytics data is sorted.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        },
+                        "start-date": {
+                            "description": "Start date.",
+                            "type": "string"
+                        },
+                        "start-index": {
+                            "description": "Start index.",
+                            "format": "int32",
+                            "type": "integer"
+                        }
+                    },
+                    "type": "object"
+                },
+                "rows": {
+                    "description": "Analytics data rows, where each row contains a list of dimension values followed by the metric values. The order of dimensions and metrics is same as specified in the request.",
+                    "items": {
+                        "items": {
+                            "type": "string"
+                        },
+                        "type": "array"
+                    },
+                    "type": "array"
+                },
+                "sampleSize": {
+                    "description": "The number of samples used to calculate the result.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "sampleSpace": {
+                    "description": "Total size of the sample space from which the samples were selected.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "Link to this page.",
+                    "type": "string"
+                },
+                "totalResults": {
+                    "description": "The total number of rows for the query, regardless of the number of rows in the response.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalsForAllResults": {
+                    "additionalProperties": {
+                        "description": "Key-value pair for the total value of a metric. Key is the metric name and the value is the total value for that metric.",
+                        "type": "string"
+                    },
+                    "description": "Total values for the requested metrics over all the results, not just the results returned in this response. The order of the metric totals is same as the metric order specified in the request.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "Goal": {
+            "description": "JSON template for Analytics goal resource.",
+            "id": "Goal",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID to which this goal belongs.",
+                    "type": "string"
+                },
+                "active": {
+                    "description": "Determines whether this goal is active.",
+                    "type": "boolean"
+                },
+                "created": {
+                    "description": "Time this goal was created.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "eventDetails": {
+                    "description": "Details for the goal of the type EVENT.",
+                    "properties": {
+                        "eventConditions": {
+                            "description": "List of event conditions.",
+                            "items": {
+                                "properties": {
+                                    "comparisonType": {
+                                        "description": "Type of comparison. Possible values are LESS_THAN, GREATER_THAN or EQUAL.",
+                                        "type": "string"
+                                    },
+                                    "comparisonValue": {
+                                        "description": "Value used for this comparison.",
+                                        "format": "int64",
+                                        "type": "string"
+                                    },
+                                    "expression": {
+                                        "description": "Expression used for this match.",
+                                        "type": "string"
+                                    },
+                                    "matchType": {
+                                        "description": "Type of the match to be performed. Possible values are REGEXP, BEGINS_WITH, or EXACT.",
+                                        "type": "string"
+                                    },
+                                    "type": {
+                                        "description": "Type of this event condition. Possible values are CATEGORY, ACTION, LABEL, or VALUE.",
+                                        "type": "string"
+                                    }
+                                },
+                                "type": "object"
+                            },
+                            "type": "array"
+                        },
+                        "useEventValue": {
+                            "description": "Determines if the event value should be used as the value for this goal.",
+                            "type": "boolean"
+                        }
+                    },
+                    "type": "object"
+                },
+                "id": {
+                    "description": "Goal ID.",
+                    "type": "string"
+                },
+                "internalWebPropertyId": {
+                    "description": "Internal ID for the web property to which this goal belongs.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#goal",
+                    "description": "Resource type for an Analytics goal.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Goal name.",
+                    "type": "string"
+                },
+                "parentLink": {
+                    "description": "Parent link for a goal. Points to the view (profile) to which this goal belongs.",
+                    "properties": {
+                        "href": {
+                            "description": "Link to the view (profile) to which this goal belongs.",
+                            "type": "string"
+                        },
+                        "type": {
+                            "default": "analytics#profile",
+                            "description": "Value is \"analytics#profile\".",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "profileId": {
+                    "description": "View (Profile) ID to which this goal belongs.",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "Link for this goal.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Goal type. Possible values are URL_DESTINATION, VISIT_TIME_ON_SITE, VISIT_NUM_PAGES, AND EVENT.",
+                    "type": "string"
+                },
+                "updated": {
+                    "description": "Time this goal was last modified.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "urlDestinationDetails": {
+                    "description": "Details for the goal of the type URL_DESTINATION.",
+                    "properties": {
+                        "caseSensitive": {
+                            "description": "Determines if the goal URL must exactly match the capitalization of visited URLs.",
+                            "type": "boolean"
+                        },
+                        "firstStepRequired": {
+                            "description": "Determines if the first step in this goal is required.",
+                            "type": "boolean"
+                        },
+                        "matchType": {
+                            "description": "Match type for the goal URL. Possible values are HEAD, EXACT, or REGEX.",
+                            "type": "string"
+                        },
+                        "steps": {
+                            "description": "List of steps configured for this goal funnel.",
+                            "items": {
+                                "properties": {
+                                    "name": {
+                                        "description": "Step name.",
+                                        "type": "string"
+                                    },
+                                    "number": {
+                                        "description": "Step number.",
+                                        "format": "int32",
+                                        "type": "integer"
+                                    },
+                                    "url": {
+                                        "description": "URL for this step.",
+                                        "type": "string"
+                                    }
+                                },
+                                "type": "object"
+                            },
+                            "type": "array"
+                        },
+                        "url": {
+                            "description": "URL for this goal.",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "value": {
+                    "description": "Goal value.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "visitNumPagesDetails": {
+                    "description": "Details for the goal of the type VISIT_NUM_PAGES.",
+                    "properties": {
+                        "comparisonType": {
+                            "description": "Type of comparison. Possible values are LESS_THAN, GREATER_THAN, or EQUAL.",
+                            "type": "string"
+                        },
+                        "comparisonValue": {
+                            "description": "Value used for this comparison.",
+                            "format": "int64",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "visitTimeOnSiteDetails": {
+                    "description": "Details for the goal of the type VISIT_TIME_ON_SITE.",
+                    "properties": {
+                        "comparisonType": {
+                            "description": "Type of comparison. Possible values are LESS_THAN or GREATER_THAN.",
+                            "type": "string"
+                        },
+                        "comparisonValue": {
+                            "description": "Value used for this comparison.",
+                            "format": "int64",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "webPropertyId": {
+                    "description": "Web property ID to which this goal belongs. The web property ID is of the form UA-XXXXX-YY.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Goals": {
+            "description": "A goal collection lists Analytics goals to which the user has access. Each view (profile) can have a set of goals. Each resource in the Goal collection corresponds to a single Analytics goal.",
+            "id": "Goals",
+            "properties": {
+                "items": {
+                    "description": "A list of goals.",
+                    "items": {
+                        "$ref": "Goal"
+                    },
+                    "type": "array"
+                },
+                "itemsPerPage": {
+                    "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#goals",
+                    "description": "Collection type.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "Link to next page for this goal collection.",
+                    "type": "string"
+                },
+                "previousLink": {
+                    "description": "Link to previous page for this goal collection.",
+                    "type": "string"
+                },
+                "startIndex": {
+                    "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalResults": {
+                    "description": "The total number of results for the query, regardless of the number of resources in the result.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "username": {
+                    "description": "Email ID of the authenticated user",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "HashClientIdRequest": {
+            "description": "JSON template for a hash Client Id request resource.",
+            "id": "HashClientIdRequest",
+            "properties": {
+                "clientId": {
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#hashClientIdRequest",
+                    "type": "string"
+                },
+                "webPropertyId": {
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "HashClientIdResponse": {
+            "description": "JSON template for a hash Client Id response resource.",
+            "id": "HashClientIdResponse",
+            "properties": {
+                "clientId": {
+                    "type": "string"
+                },
+                "hashedClientId": {
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#hashClientIdResponse",
+                    "type": "string"
+                },
+                "webPropertyId": {
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "IncludeConditions": {
+            "description": "JSON template for an Analytics Remarketing Include Conditions.",
+            "id": "IncludeConditions",
+            "properties": {
+                "daysToLookBack": {
+                    "description": "The look-back window lets you specify a time frame for evaluating the behavior that qualifies users for your audience. For example, if your filters include users from Central Asia, and Transactions Greater than 2, and you set the look-back window to 14 days, then any user from Central Asia whose cumulative transactions exceed 2 during the last 14 days is added to the audience.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "isSmartList": {
+                    "description": "Boolean indicating whether this segment is a smart list. https://support.google.com/analytics/answer/4628577",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "default": "analytics#includeConditions",
+                    "description": "Resource type for include conditions.",
+                    "type": "string"
+                },
+                "membershipDurationDays": {
+                    "description": "Number of days (in the range 1 to 540) a user remains in the audience.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "segment": {
+                    "description": "The segment condition that will cause a user to be added to an audience.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LinkedForeignAccount": {
+            "description": "JSON template for an Analytics Remarketing Audience Foreign Link.",
+            "id": "LinkedForeignAccount",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID to which this linked foreign account belongs.",
+                    "type": "string"
+                },
+                "eligibleForSearch": {
+                    "description": "Boolean indicating whether this is eligible for search.",
+                    "readOnly": true,
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "Entity ad account link ID.",
+                    "type": "string"
+                },
+                "internalWebPropertyId": {
+                    "description": "Internal ID for the web property to which this linked foreign account belongs.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#linkedForeignAccount",
+                    "description": "Resource type for linked foreign account.",
+                    "type": "string"
+                },
+                "linkedAccountId": {
+                    "description": "The foreign account ID. For example the an Google Ads `linkedAccountId` has the following format XXX-XXX-XXXX.",
+                    "type": "string"
+                },
+                "remarketingAudienceId": {
+                    "description": "Remarketing audience ID to which this linked foreign account belongs.",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "The status of this foreign account link.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "The type of the foreign account. For example, `ADWORDS_LINKS`, `DBM_LINKS`, `MCC_LINKS` or `OPTIMIZE`.",
+                    "type": "string"
+                },
+                "webPropertyId": {
+                    "description": "Web property ID of the form UA-XXXXX-YY to which this linked foreign account belongs.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "McfData": {
+            "description": "Multi-Channel Funnels data for a given view (profile).",
+            "id": "McfData",
+            "properties": {
+                "columnHeaders": {
+                    "description": "Column headers that list dimension names followed by the metric names. The order of dimensions and metrics is same as specified in the request.",
+                    "items": {
+                        "properties": {
+                            "columnType": {
+                                "description": "Column Type. Either DIMENSION or METRIC.",
+                                "type": "string"
+                            },
+                            "dataType": {
+                                "description": "Data type. Dimension and metric values data types such as INTEGER, DOUBLE, CURRENCY, MCF_SEQUENCE etc.",
+                                "type": "string"
+                            },
+                            "name": {
+                                "description": "Column name.",
+                                "type": "string"
+                            }
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "containsSampledData": {
+                    "description": "Determines if the Analytics data contains sampled data.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "Unique ID for this data response.",
+                    "type": "string"
+                },
+                "itemsPerPage": {
+                    "description": "The maximum number of rows the response can contain, regardless of the actual number of rows returned. Its value ranges from 1 to 10,000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#mcfData",
+                    "description": "Resource type.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "Link to next page for this Analytics data query.",
+                    "type": "string"
+                },
+                "previousLink": {
+                    "description": "Link to previous page for this Analytics data query.",
+                    "type": "string"
+                },
+                "profileInfo": {
+                    "description": "Information for the view (profile), for which the Analytics data was requested.",
+                    "properties": {
+                        "accountId": {
+                            "description": "Account ID to which this view (profile) belongs.",
+                            "type": "string"
+                        },
+                        "internalWebPropertyId": {
+                            "description": "Internal ID for the web property to which this view (profile) belongs.",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "View (Profile) ID.",
+                            "type": "string"
+                        },
+                        "profileName": {
+                            "description": "View (Profile) name.",
+                            "type": "string"
+                        },
+                        "tableId": {
+                            "description": "Table ID for view (profile).",
+                            "type": "string"
+                        },
+                        "webPropertyId": {
+                            "description": "Web Property ID to which this view (profile) belongs.",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "query": {
+                    "description": "Analytics data request query parameters.",
+                    "properties": {
+                        "dimensions": {
+                            "description": "List of analytics dimensions.",
+                            "type": "string"
+                        },
+                        "end-date": {
+                            "description": "End date.",
+                            "type": "string"
+                        },
+                        "filters": {
+                            "description": "Comma-separated list of dimension or metric filters.",
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Unique table ID.",
+                            "type": "string"
+                        },
+                        "max-results": {
+                            "description": "Maximum results per page.",
+                            "format": "int32",
+                            "type": "integer"
+                        },
+                        "metrics": {
+                            "description": "List of analytics metrics.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        },
+                        "samplingLevel": {
+                            "description": "Desired sampling level",
+                            "type": "string"
+                        },
+                        "segment": {
+                            "description": "Analytics advanced segment.",
+                            "type": "string"
+                        },
+                        "sort": {
+                            "description": "List of dimensions or metrics based on which Analytics data is sorted.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        },
+                        "start-date": {
+                            "description": "Start date.",
+                            "type": "string"
+                        },
+                        "start-index": {
+                            "description": "Start index.",
+                            "format": "int32",
+                            "type": "integer"
+                        }
+                    },
+                    "type": "object"
+                },
+                "rows": {
+                    "description": "Analytics data rows, where each row contains a list of dimension values followed by the metric values. The order of dimensions and metrics is same as specified in the request.",
+                    "items": {
+                        "items": {
+                            "description": "A union object representing a dimension or metric value. Only one of \"primitiveValue\" or \"conversionPathValue\" attribute will be populated.",
+                            "properties": {
+                                "conversionPathValue": {
+                                    "description": "A conversion path dimension value, containing a list of interactions with their attributes.",
+                                    "items": {
+                                        "properties": {
+                                            "interactionType": {
+                                                "description": "Type of an interaction on conversion path. Such as CLICK, IMPRESSION etc.",
+                                                "type": "string"
+                                            },
+                                            "nodeValue": {
+                                                "description": "Node value of an interaction on conversion path. Such as source, medium etc.",
+                                                "type": "string"
+                                            }
+                                        },
+                                        "type": "object"
+                                    },
+                                    "type": "array"
+                                },
+                                "primitiveValue": {
+                                    "description": "A primitive dimension value. A primitive metric value.",
+                                    "type": "string"
+                                }
+                            },
+                            "type": "object"
+                        },
+                        "type": "array"
+                    },
+                    "type": "array"
+                },
+                "sampleSize": {
+                    "description": "The number of samples used to calculate the result.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "sampleSpace": {
+                    "description": "Total size of the sample space from which the samples were selected.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "Link to this page.",
+                    "type": "string"
+                },
+                "totalResults": {
+                    "description": "The total number of rows for the query, regardless of the number of rows in the response.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalsForAllResults": {
+                    "additionalProperties": {
+                        "description": "Key-value pair for the total value of a metric. Key is the metric name and the value is the total value for that metric.",
+                        "type": "string"
+                    },
+                    "description": "Total values for the requested metrics over all the results, not just the results returned in this response. The order of the metric totals is same as the metric order specified in the request.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "Profile": {
+            "description": "JSON template for an Analytics view (profile).",
+            "id": "Profile",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID to which this view (profile) belongs.",
+                    "type": "string"
+                },
+                "botFilteringEnabled": {
+                    "description": "Indicates whether bot filtering is enabled for this view (profile).",
+                    "type": "boolean"
+                },
+                "childLink": {
+                    "description": "Child link for this view (profile). Points to the list of goals for this view (profile).",
+                    "properties": {
+                        "href": {
+                            "description": "Link to the list of goals for this view (profile).",
+                            "type": "string"
+                        },
+                        "type": {
+                            "default": "analytics#goals",
+                            "description": "Value is \"analytics#goals\".",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "created": {
+                    "description": "Time this view (profile) was created.",
+                    "format": "date-time",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "currency": {
+                    "description": "The currency type associated with this view (profile), defaults to USD. The supported values are:\nUSD, JPY, EUR, GBP, AUD, KRW, BRL, CNY, DKK, RUB, SEK, NOK, PLN, TRY, TWD, HKD, THB, IDR, ARS, MXN, VND, PHP, INR, CHF, CAD, CZK, NZD, HUF, BGN, LTL, ZAR, UAH, AED, BOB, CLP, COP, EGP, HRK, ILS, MAD, MYR, PEN, PKR, RON, RSD, SAR, SGD, VEF, LVL",
+                    "type": "string"
+                },
+                "defaultPage": {
+                    "description": "Default page for this view (profile).",
+                    "type": "string"
+                },
+                "eCommerceTracking": {
+                    "description": "Indicates whether ecommerce tracking is enabled for this view (profile).",
+                    "type": "boolean"
+                },
+                "enhancedECommerceTracking": {
+                    "description": "Indicates whether enhanced ecommerce tracking is enabled for this view (profile). This property can only be enabled if ecommerce tracking is enabled.",
+                    "type": "boolean"
+                },
+                "excludeQueryParameters": {
+                    "description": "The query parameters that are excluded from this view (profile).",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "View (Profile) ID.",
+                    "type": "string"
+                },
+                "internalWebPropertyId": {
+                    "description": "Internal ID for the web property to which this view (profile) belongs.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#profile",
+                    "description": "Resource type for Analytics view (profile).",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this view (profile).",
+                    "type": "string"
+                },
+                "parentLink": {
+                    "description": "Parent link for this view (profile). Points to the web property to which this view (profile) belongs.",
+                    "properties": {
+                        "href": {
+                            "description": "Link to the web property to which this view (profile) belongs.",
+                            "type": "string"
+                        },
+                        "type": {
+                            "default": "analytics#webproperty",
+                            "description": "Value is \"analytics#webproperty\".",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "permissions": {
+                    "description": "Permissions the user has for this view (profile).",
+                    "properties": {
+                        "effective": {
+                            "description": "All the permissions that the user has for this view (profile). These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent web property.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "readOnly": true,
+                            "type": "array"
+                        }
+                    },
+                    "type": "object"
+                },
+                "selfLink": {
+                    "description": "Link for this view (profile).",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "siteSearchCategoryParameters": {
+                    "description": "Site search category parameters for this view (profile).",
+                    "type": "string"
+                },
+                "siteSearchQueryParameters": {
+                    "description": "The site search query parameters for this view (profile).",
+                    "type": "string"
+                },
+                "starred": {
+                    "description": "Indicates whether this view (profile) is starred or not.",
+                    "type": "boolean"
+                },
+                "stripSiteSearchCategoryParameters": {
+                    "description": "Whether or not Analytics will strip search category parameters from the URLs in your reports.",
+                    "type": "boolean"
+                },
+                "stripSiteSearchQueryParameters": {
+                    "description": "Whether or not Analytics will strip search query parameters from the URLs in your reports.",
+                    "type": "boolean"
+                },
+                "timezone": {
+                    "description": "Time zone for which this view (profile) has been configured. Time zones are identified by strings from the TZ database.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "View (Profile) type. Supported types: WEB or APP.",
+                    "type": "string"
+                },
+                "updated": {
+                    "description": "Time this view (profile) was last modified.",
+                    "format": "date-time",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "webPropertyId": {
+                    "description": "Web property ID of the form UA-XXXXX-YY to which this view (profile) belongs.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "websiteUrl": {
+                    "description": "Website URL for this view (profile).",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ProfileFilterLink": {
+            "description": "JSON template for an Analytics profile filter link.",
+            "id": "ProfileFilterLink",
+            "properties": {
+                "filterRef": {
+                    "$ref": "FilterRef",
+                    "description": "Filter for this link."
+                },
+                "id": {
+                    "description": "Profile filter link ID.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#profileFilterLink",
+                    "description": "Resource type for Analytics filter.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "profileRef": {
+                    "$ref": "ProfileRef",
+                    "description": "View (Profile) for this link."
+                },
+                "rank": {
+                    "description": "The rank of this profile filter link relative to the other filters linked to the same profile.\nFor readonly (i.e., list and get) operations, the rank always starts at 1.\nFor write (i.e., create, update, or delete) operations, you may specify a value between 0 and 255 inclusively, [0, 255]. In order to insert a link at the end of the list, either don't specify a rank or set a rank to a number greater than the largest rank in the list. In order to insert a link to the beginning of the list specify a rank that is less than or equal to 1. The new link will move all existing filters with the same or lower rank down the list. After the link is inserted/updated/deleted all profile filter links will be renumbered starting at 1.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "selfLink": {
+                    "description": "Link for this profile filter link.",
+                    "readOnly": true,
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ProfileFilterLinks": {
+            "description": "A profile filter link collection lists profile filter links between profiles and filters. Each resource in the collection corresponds to a profile filter link.",
+            "id": "ProfileFilterLinks",
+            "properties": {
+                "items": {
+                    "description": "A list of profile filter links.",
+                    "items": {
+                        "$ref": "ProfileFilterLink"
+                    },
+                    "type": "array"
+                },
+                "itemsPerPage": {
+                    "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1,000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#profileFilterLinks",
+                    "description": "Collection type.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "Link to next page for this profile filter link collection.",
+                    "type": "string"
+                },
+                "previousLink": {
+                    "description": "Link to previous page for this profile filter link collection.",
+                    "type": "string"
+                },
+                "startIndex": {
+                    "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalResults": {
+                    "description": "The total number of results for the query, regardless of the number of results in the response.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "username": {
+                    "description": "Email ID of the authenticated user",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ProfileRef": {
+            "description": "JSON template for a linked view (profile).",
+            "id": "ProfileRef",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID to which this view (profile) belongs.",
+                    "type": "string"
+                },
+                "href": {
+                    "description": "Link for this view (profile).",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "View (Profile) ID.",
+                    "type": "string"
+                },
+                "internalWebPropertyId": {
+                    "description": "Internal ID for the web property to which this view (profile) belongs.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#profileRef",
+                    "description": "Analytics view (profile) reference.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this view (profile).",
+                    "type": "string"
+                },
+                "webPropertyId": {
+                    "description": "Web property ID of the form UA-XXXXX-YY to which this view (profile) belongs.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ProfileSummary": {
+            "description": "JSON template for an Analytics ProfileSummary. ProfileSummary returns basic information (i.e., summary) for a profile.",
+            "id": "ProfileSummary",
+            "properties": {
+                "id": {
+                    "description": "View (profile) ID.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#profileSummary",
+                    "description": "Resource type for Analytics ProfileSummary.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "View (profile) name.",
+                    "type": "string"
+                },
+                "starred": {
+                    "description": "Indicates whether this view (profile) is starred or not.",
+                    "type": "boolean"
+                },
+                "type": {
+                    "description": "View (Profile) type. Supported types: WEB or APP.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Profiles": {
+            "description": "A view (profile) collection lists Analytics views (profiles) to which the user has access. Each resource in the collection corresponds to a single Analytics view (profile).",
+            "id": "Profiles",
+            "properties": {
+                "items": {
+                    "description": "A list of views (profiles).",
+                    "items": {
+                        "$ref": "Profile"
+                    },
+                    "type": "array"
+                },
+                "itemsPerPage": {
+                    "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#profiles",
+                    "description": "Collection type.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "Link to next page for this view (profile) collection.",
+                    "type": "string"
+                },
+                "previousLink": {
+                    "description": "Link to previous page for this view (profile) collection.",
+                    "type": "string"
+                },
+                "startIndex": {
+                    "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalResults": {
+                    "description": "The total number of results for the query, regardless of the number of results in the response.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "username": {
+                    "description": "Email ID of the authenticated user",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RealtimeData": {
+            "description": "Real time data for a given view (profile).",
+            "id": "RealtimeData",
+            "properties": {
+                "columnHeaders": {
+                    "description": "Column headers that list dimension names followed by the metric names. The order of dimensions and metrics is same as specified in the request.",
+                    "items": {
+                        "properties": {
+                            "columnType": {
+                                "description": "Column Type. Either DIMENSION or METRIC.",
+                                "type": "string"
+                            },
+                            "dataType": {
+                                "description": "Data type. Dimension column headers have only STRING as the data type. Metric column headers have data types for metric values such as INTEGER, DOUBLE, CURRENCY etc.",
+                                "type": "string"
+                            },
+                            "name": {
+                                "description": "Column name.",
+                                "type": "string"
+                            }
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "id": {
+                    "description": "Unique ID for this data response.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#realtimeData",
+                    "description": "Resource type.",
+                    "type": "string"
+                },
+                "profileInfo": {
+                    "description": "Information for the view (profile), for which the real time data was requested.",
+                    "properties": {
+                        "accountId": {
+                            "description": "Account ID to which this view (profile) belongs.",
+                            "type": "string"
+                        },
+                        "internalWebPropertyId": {
+                            "description": "Internal ID for the web property to which this view (profile) belongs.",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "View (Profile) ID.",
+                            "type": "string"
+                        },
+                        "profileName": {
+                            "description": "View (Profile) name.",
+                            "type": "string"
+                        },
+                        "tableId": {
+                            "description": "Table ID for view (profile).",
+                            "type": "string"
+                        },
+                        "webPropertyId": {
+                            "description": "Web Property ID to which this view (profile) belongs.",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "query": {
+                    "description": "Real time data request query parameters.",
+                    "properties": {
+                        "dimensions": {
+                            "description": "List of real time dimensions.",
+                            "type": "string"
+                        },
+                        "filters": {
+                            "description": "Comma-separated list of dimension or metric filters.",
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Unique table ID.",
+                            "type": "string"
+                        },
+                        "max-results": {
+                            "description": "Maximum results per page.",
+                            "format": "int32",
+                            "type": "integer"
+                        },
+                        "metrics": {
+                            "description": "List of real time metrics.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        },
+                        "sort": {
+                            "description": "List of dimensions or metrics based on which real time data is sorted.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        }
+                    },
+                    "type": "object"
+                },
+                "rows": {
+                    "description": "Real time data rows, where each row contains a list of dimension values followed by the metric values. The order of dimensions and metrics is same as specified in the request.",
+                    "items": {
+                        "items": {
+                            "type": "string"
+                        },
+                        "type": "array"
+                    },
+                    "type": "array"
+                },
+                "selfLink": {
+                    "description": "Link to this page.",
+                    "type": "string"
+                },
+                "totalResults": {
+                    "description": "The total number of rows for the query, regardless of the number of rows in the response.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalsForAllResults": {
+                    "additionalProperties": {
+                        "description": "Key-value pair for the total value of a metric. Key is the metric name and the value is the total value for that metric.",
+                        "type": "string"
+                    },
+                    "description": "Total values for the requested metrics over all the results, not just the results returned in this response. The order of the metric totals is same as the metric order specified in the request.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "RemarketingAudience": {
+            "description": "JSON template for an Analytics remarketing audience.",
+            "id": "RemarketingAudience",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID to which this remarketing audience belongs.",
+                    "type": "string"
+                },
+                "audienceDefinition": {
+                    "description": "The simple audience definition that will cause a user to be added to an audience.",
+                    "properties": {
+                        "includeConditions": {
+                            "$ref": "IncludeConditions",
+                            "description": "Defines the conditions to include users to the audience."
+                        }
+                    },
+                    "type": "object"
+                },
+                "audienceType": {
+                    "description": "The type of audience, either SIMPLE or STATE_BASED.",
+                    "type": "string"
+                },
+                "created": {
+                    "description": "Time this remarketing audience was created.",
+                    "format": "date-time",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "description": {
+                    "description": "The description of this remarketing audience.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Remarketing Audience ID.",
+                    "type": "string"
+                },
+                "internalWebPropertyId": {
+                    "description": "Internal ID for the web property to which this remarketing audience belongs.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#remarketingAudience",
+                    "description": "Collection type.",
+                    "type": "string"
+                },
+                "linkedAdAccounts": {
+                    "description": "The linked ad accounts associated with this remarketing audience. A remarketing audience can have only one linkedAdAccount currently.",
+                    "items": {
+                        "$ref": "LinkedForeignAccount"
+                    },
+                    "type": "array"
+                },
+                "linkedViews": {
+                    "description": "The views (profiles) that this remarketing audience is linked to.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "name": {
+                    "description": "The name of this remarketing audience.",
+                    "type": "string"
+                },
+                "stateBasedAudienceDefinition": {
+                    "description": "A state based audience definition that will cause a user to be added or removed from an audience.",
+                    "properties": {
+                        "excludeConditions": {
+                            "description": "Defines the conditions to exclude users from the audience.",
+                            "properties": {
+                                "exclusionDuration": {
+                                    "description": "Whether to make the exclusion TEMPORARY or PERMANENT.",
+                                    "type": "string"
+                                },
+                                "segment": {
+                                    "description": "The segment condition that will cause a user to be removed from an audience.",
+                                    "type": "string"
+                                }
+                            },
+                            "type": "object"
+                        },
+                        "includeConditions": {
+                            "$ref": "IncludeConditions",
+                            "description": "Defines the conditions to include users to the audience."
+                        }
+                    },
+                    "type": "object"
+                },
+                "updated": {
+                    "description": "Time this remarketing audience was last modified.",
+                    "format": "date-time",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "webPropertyId": {
+                    "description": "Web property ID of the form UA-XXXXX-YY to which this remarketing audience belongs.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RemarketingAudiences": {
+            "description": "A remarketing audience collection lists Analytics remarketing audiences to which the user has access. Each resource in the collection corresponds to a single Analytics remarketing audience.",
+            "id": "RemarketingAudiences",
+            "properties": {
+                "items": {
+                    "description": "A list of remarketing audiences.",
+                    "items": {
+                        "$ref": "RemarketingAudience"
+                    },
+                    "type": "array"
+                },
+                "itemsPerPage": {
+                    "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#remarketingAudiences",
+                    "description": "Collection type.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "Link to next page for this remarketing audience collection.",
+                    "type": "string"
+                },
+                "previousLink": {
+                    "description": "Link to previous page for this view (profile) collection.",
+                    "type": "string"
+                },
+                "startIndex": {
+                    "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalResults": {
+                    "description": "The total number of results for the query, regardless of the number of results in the response.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "username": {
+                    "description": "Email ID of the authenticated user",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Segment": {
+            "description": "JSON template for an Analytics segment.",
+            "id": "Segment",
+            "properties": {
+                "created": {
+                    "description": "Time the segment was created.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "definition": {
+                    "description": "Segment definition.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Segment ID.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#segment",
+                    "description": "Resource type for Analytics segment.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Segment name.",
+                    "type": "string"
+                },
+                "segmentId": {
+                    "description": "Segment ID. Can be used with the 'segment' parameter in Core Reporting API.",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "Link for this segment.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Type for a segment. Possible values are \"BUILT_IN\" or \"CUSTOM\".",
+                    "type": "string"
+                },
+                "updated": {
+                    "description": "Time the segment was last modified.",
+                    "format": "date-time",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Segments": {
+            "description": "An segment collection lists Analytics segments that the user has access to. Each resource in the collection corresponds to a single Analytics segment.",
+            "id": "Segments",
+            "properties": {
+                "items": {
+                    "description": "A list of segments.",
+                    "items": {
+                        "$ref": "Segment"
+                    },
+                    "type": "array"
+                },
+                "itemsPerPage": {
+                    "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#segments",
+                    "description": "Collection type for segments.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "Link to next page for this segment collection.",
+                    "type": "string"
+                },
+                "previousLink": {
+                    "description": "Link to previous page for this segment collection.",
+                    "type": "string"
+                },
+                "startIndex": {
+                    "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalResults": {
+                    "description": "The total number of results for the query, regardless of the number of results in the response.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "username": {
+                    "description": "Email ID of the authenticated user",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UnsampledReport": {
+            "description": "JSON template for Analytics unsampled report resource.",
+            "id": "UnsampledReport",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID to which this unsampled report belongs.",
+                    "type": "string"
+                },
+                "cloudStorageDownloadDetails": {
+                    "description": "Download details for a file stored in Google Cloud Storage.",
+                    "properties": {
+                        "bucketId": {
+                            "description": "Id of the bucket the file object is stored in.",
+                            "type": "string"
+                        },
+                        "objectId": {
+                            "description": "Id of the file object containing the report data.",
+                            "type": "string"
+                        }
+                    },
+                    "readOnly": true,
+                    "type": "object"
+                },
+                "created": {
+                    "description": "Time this unsampled report was created.",
+                    "format": "date-time",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "dimensions": {
+                    "description": "The dimensions for the unsampled report.",
+                    "type": "string"
+                },
+                "downloadType": {
+                    "description": "The type of download you need to use for the report data file. Possible values include `GOOGLE_DRIVE` and `GOOGLE_CLOUD_STORAGE`. If the value is `GOOGLE_DRIVE`, see the `driveDownloadDetails` field. If the value is `GOOGLE_CLOUD_STORAGE`, see the `cloudStorageDownloadDetails` field.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "driveDownloadDetails": {
+                    "description": "Download details for a file stored in Google Drive.",
+                    "properties": {
+                        "documentId": {
+                            "description": "Id of the document/file containing the report data.",
+                            "type": "string"
+                        }
+                    },
+                    "readOnly": true,
+                    "type": "object"
+                },
+                "end-date": {
+                    "annotations": {
+                        "required": [
+                            "analytics.management.filters.insert",
+                            "analytics.management.unsampledReports.insert"
+                        ]
+                    },
+                    "description": "The end date for the unsampled report.",
+                    "type": "string"
+                },
+                "filters": {
+                    "description": "The filters for the unsampled report.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Unsampled report ID.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#unsampledReport",
+                    "description": "Resource type for an Analytics unsampled report.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "metrics": {
+                    "annotations": {
+                        "required": [
+                            "analytics.management.filters.insert",
+                            "analytics.management.unsampledReports.insert"
+                        ]
+                    },
+                    "description": "The metrics for the unsampled report.",
+                    "type": "string"
+                },
+                "profileId": {
+                    "description": "View (Profile) ID to which this unsampled report belongs.",
+                    "type": "string"
+                },
+                "segment": {
+                    "description": "The segment for the unsampled report.",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "Link for this unsampled report.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "start-date": {
+                    "annotations": {
+                        "required": [
+                            "analytics.management.filters.insert",
+                            "analytics.management.unsampledReports.insert"
+                        ]
+                    },
+                    "description": "The start date for the unsampled report.",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "Status of this unsampled report. Possible values are PENDING, COMPLETED, or FAILED.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "title": {
+                    "annotations": {
+                        "required": [
+                            "analytics.management.filters.insert",
+                            "analytics.management.unsampledReports.insert"
+                        ]
+                    },
+                    "description": "Title of the unsampled report.",
+                    "type": "string"
+                },
+                "updated": {
+                    "description": "Time this unsampled report was last modified.",
+                    "format": "date-time",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "webPropertyId": {
+                    "description": "Web property ID to which this unsampled report belongs. The web property ID is of the form UA-XXXXX-YY.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UnsampledReports": {
+            "description": "An unsampled report collection lists Analytics unsampled reports to which the user has access. Each view (profile) can have a set of unsampled reports. Each resource in the unsampled report collection corresponds to a single Analytics unsampled report.",
+            "id": "UnsampledReports",
+            "properties": {
+                "items": {
+                    "description": "A list of unsampled reports.",
+                    "items": {
+                        "$ref": "UnsampledReport"
+                    },
+                    "type": "array"
+                },
+                "itemsPerPage": {
+                    "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#unsampledReports",
+                    "description": "Collection type.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "Link to next page for this unsampled report collection.",
+                    "type": "string"
+                },
+                "previousLink": {
+                    "description": "Link to previous page for this unsampled report collection.",
+                    "type": "string"
+                },
+                "startIndex": {
+                    "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalResults": {
+                    "description": "The total number of results for the query, regardless of the number of resources in the result.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "username": {
+                    "description": "Email ID of the authenticated user",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Upload": {
+            "description": "Metadata returned for an upload operation.",
+            "id": "Upload",
+            "properties": {
+                "accountId": {
+                    "description": "Account Id to which this upload belongs.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "customDataSourceId": {
+                    "description": "Custom data source Id to which this data import belongs.",
+                    "type": "string"
+                },
+                "errors": {
+                    "description": "Data import errors collection.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "id": {
+                    "description": "A unique ID for this upload.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#upload",
+                    "description": "Resource type for Analytics upload.",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "Upload status. Possible values: PENDING, COMPLETED, FAILED, DELETING, DELETED.",
+                    "type": "string"
+                },
+                "uploadTime": {
+                    "description": "Time this file is uploaded.",
+                    "format": "date-time",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Uploads": {
+            "description": "Upload collection lists Analytics uploads to which the user has access. Each custom data source can have a set of uploads. Each resource in the upload collection corresponds to a single Analytics data upload.",
+            "id": "Uploads",
+            "properties": {
+                "items": {
+                    "description": "A list of uploads.",
+                    "items": {
+                        "$ref": "Upload"
+                    },
+                    "type": "array"
+                },
+                "itemsPerPage": {
+                    "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#uploads",
+                    "description": "Collection type.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "Link to next page for this upload collection.",
+                    "type": "string"
+                },
+                "previousLink": {
+                    "description": "Link to previous page for this upload collection.",
+                    "type": "string"
+                },
+                "startIndex": {
+                    "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalResults": {
+                    "description": "The total number of results for the query, regardless of the number of resources in the result.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "UserDeletionRequest": {
+            "description": "JSON template for a user deletion request resource.",
+            "id": "UserDeletionRequest",
+            "properties": {
+                "deletionRequestTime": {
+                    "description": "This marks the point in time for which all user data before should be deleted",
+                    "format": "date-time",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "firebaseProjectId": {
+                    "description": "Firebase Project Id",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "User ID.",
+                    "properties": {
+                        "type": {
+                            "description": "Type of user",
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The User's id",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "kind": {
+                    "default": "analytics#userDeletionRequest",
+                    "description": "Value is \"analytics#userDeletionRequest\".",
+                    "type": "string"
+                },
+                "propertyId": {
+                    "description": "Property ID",
+                    "type": "string"
+                },
+                "webPropertyId": {
+                    "description": "Web property ID of the form UA-XXXXX-YY.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UserRef": {
+            "description": "JSON template for a user reference.",
+            "id": "UserRef",
+            "properties": {
+                "email": {
+                    "description": "Email ID of this user.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "User ID.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#userRef",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "WebPropertyRef": {
+            "description": "JSON template for a web property reference.",
+            "id": "WebPropertyRef",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID to which this web property belongs.",
+                    "type": "string"
+                },
+                "href": {
+                    "description": "Link for this web property.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Web property ID of the form UA-XXXXX-YY.",
+                    "type": "string"
+                },
+                "internalWebPropertyId": {
+                    "description": "Internal ID for this web property.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#webPropertyRef",
+                    "description": "Analytics web property reference.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this web property.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "WebPropertySummary": {
+            "description": "JSON template for an Analytics WebPropertySummary. WebPropertySummary returns basic information (i.e., summary) for a web property.",
+            "id": "WebPropertySummary",
+            "properties": {
+                "id": {
+                    "description": "Web property ID of the form UA-XXXXX-YY.",
+                    "type": "string"
+                },
+                "internalWebPropertyId": {
+                    "description": "Internal ID for this web property.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#webPropertySummary",
+                    "description": "Resource type for Analytics WebPropertySummary.",
+                    "type": "string"
+                },
+                "level": {
+                    "description": "Level for this web property. Possible values are STANDARD or PREMIUM.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Web property name.",
+                    "type": "string"
+                },
+                "profiles": {
+                    "description": "List of profiles under this web property.",
+                    "items": {
+                        "$ref": "ProfileSummary"
+                    },
+                    "type": "array"
+                },
+                "starred": {
+                    "description": "Indicates whether this web property is starred or not.",
+                    "type": "boolean"
+                },
+                "websiteUrl": {
+                    "description": "Website url for this web property.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Webproperties": {
+            "description": "A web property collection lists Analytics web properties to which the user has access. Each resource in the collection corresponds to a single Analytics web property.",
+            "id": "Webproperties",
+            "properties": {
+                "items": {
+                    "description": "A list of web properties.",
+                    "items": {
+                        "$ref": "Webproperty"
+                    },
+                    "type": "array"
+                },
+                "itemsPerPage": {
+                    "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "default": "analytics#webproperties",
+                    "description": "Collection type.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "Link to next page for this web property collection.",
+                    "type": "string"
+                },
+                "previousLink": {
+                    "description": "Link to previous page for this web property collection.",
+                    "type": "string"
+                },
+                "startIndex": {
+                    "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalResults": {
+                    "description": "The total number of results for the query, regardless of the number of results in the response.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "username": {
+                    "description": "Email ID of the authenticated user",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Webproperty": {
+            "description": "JSON template for an Analytics web property.",
+            "id": "Webproperty",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID to which this web property belongs.",
+                    "type": "string"
+                },
+                "childLink": {
+                    "description": "Child link for this web property. Points to the list of views (profiles) for this web property.",
+                    "properties": {
+                        "href": {
+                            "description": "Link to the list of views (profiles) for this web property.",
+                            "type": "string"
+                        },
+                        "type": {
+                            "default": "analytics#profiles",
+                            "description": "Type of the parent link. Its value is \"analytics#profiles\".",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "created": {
+                    "description": "Time this web property was created.",
+                    "format": "date-time",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "dataRetentionResetOnNewActivity": {
+                    "description": "Set to true to reset the retention period of the user identifier with each new event from that user (thus setting the expiration date to current time plus retention period).\nSet to false to delete data associated with the user identifier automatically after the rentention period.\nThis property cannot be set on insert.",
+                    "type": "boolean"
+                },
+                "dataRetentionTtl": {
+                    "description": "The length of time for which user and event data is retained.\nThis property cannot be set on insert.",
+                    "type": "string"
+                },
+                "defaultProfileId": {
+                    "description": "Default view (profile) ID.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Web property ID of the form UA-XXXXX-YY.",
+                    "type": "string"
+                },
+                "industryVertical": {
+                    "description": "The industry vertical/category selected for this web property.",
+                    "type": "string"
+                },
+                "internalWebPropertyId": {
+                    "description": "Internal ID for this web property.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "analytics#webproperty",
+                    "description": "Resource type for Analytics WebProperty.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "level": {
+                    "description": "Level for this web property. Possible values are STANDARD or PREMIUM.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this web property.",
+                    "type": "string"
+                },
+                "parentLink": {
+                    "description": "Parent link for this web property. Points to the account to which this web property belongs.",
+                    "properties": {
+                        "href": {
+                            "description": "Link to the account for this web property.",
+                            "type": "string"
+                        },
+                        "type": {
+                            "default": "analytics#account",
+                            "description": "Type of the parent link. Its value is \"analytics#account\".",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "permissions": {
+                    "description": "Permissions the user has for this web property.",
+                    "properties": {
+                        "effective": {
+                            "description": "All the permissions that the user has for this web property. These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent account.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "readOnly": true,
+                            "type": "array"
+                        }
+                    },
+                    "type": "object"
+                },
+                "profileCount": {
+                    "description": "View (Profile) count for this web property.",
+                    "format": "int32",
+                    "readOnly": true,
+                    "type": "integer"
+                },
+                "selfLink": {
+                    "description": "Link for this web property.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "starred": {
+                    "description": "Indicates whether this web property is starred or not.",
+                    "type": "boolean"
+                },
+                "updated": {
+                    "description": "Time this web property was last modified.",
+                    "format": "date-time",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "websiteUrl": {
+                    "description": "Website url for this web property.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         }
-      },
-      "type": "object",
-      "description": "Multi-Channel Funnels data for a given view (profile).",
-      "id": "McfData"
     },
-    "AccountTreeRequest": {
-      "type": "object",
-      "description": "JSON template for an Analytics account tree requests. The account tree request is used in the provisioning api to create an account, property, and view (profile). It contains the basic information required to make these fields.",
-      "id": "AccountTreeRequest",
-      "properties": {
-        "accountName": {
-          "type": "string",
-          "annotations": {
-            "required": [
-              "analytics.provisioning.createAccountTree"
-            ]
-          }
-        },
-        "profileName": {
-          "annotations": {
-            "required": [
-              "analytics.provisioning.createAccountTree"
-            ]
-          },
-          "type": "string"
-        },
-        "webpropertyName": {
-          "annotations": {
-            "required": [
-              "analytics.provisioning.createAccountTree"
-            ]
-          },
-          "type": "string"
-        },
-        "kind": {
-          "default": "analytics#accountTreeRequest",
-          "type": "string",
-          "description": "Resource type for account ticket."
-        },
-        "websiteUrl": {
-          "type": "string",
-          "annotations": {
-            "required": [
-              "analytics.provisioning.createAccountTree"
-            ]
-          }
-        },
-        "timezone": {
-          "annotations": {
-            "required": [
-              "analytics.provisioning.createAccountTree"
-            ]
-          },
-          "type": "string"
-        }
-      }
-    }
-  },
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/analytics.user.deletion": {
-          "description": "Manage Google Analytics user deletion requests"
-        },
-        "https://www.googleapis.com/auth/analytics": {
-          "description": "View and manage your Google Analytics data"
-        },
-        "https://www.googleapis.com/auth/analytics.edit": {
-          "description": "Edit Google Analytics management entities"
-        },
-        "https://www.googleapis.com/auth/analytics.provision": {
-          "description": "Create a new Google Analytics account along with its default property and view"
-        },
-        "https://www.googleapis.com/auth/analytics.manage.users.readonly": {
-          "description": "View Google Analytics user permissions"
-        },
-        "https://www.googleapis.com/auth/analytics.manage.users": {
-          "description": "Manage Google Analytics Account users by email address"
-        },
-        "https://www.googleapis.com/auth/analytics.readonly": {
-          "description": "View your Google Analytics data"
-        }
-      }
-    }
-  },
-  "batchPath": "batch/analytics/v3",
-  "description": "Views and manages your Google Analytics data.",
-  "kind": "discovery#restDescription",
-  "discoveryVersion": "v1",
-  "etag": "\"9eZ1uxVRThTDhLJCZHhqs3eQWz4/o_TVyaWurnALX6ZIQ952-U5m22Y\"",
-  "name": "analytics",
-  "version": "v3",
-  "documentationLink": "https://developers.google.com/analytics/",
-  "servicePath": "analytics/v3/"
-}
+    "servicePath": "analytics/v3/",
+    "title": "Google Analytics API",
+    "version": "v3"
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/analyticsreporting.v4.json b/googleapiclient/discovery_cache/documents/analyticsreporting.v4.json
index 9281961..01ea1f5 100644
--- a/googleapiclient/discovery_cache/documents/analyticsreporting.v4.json
+++ b/googleapiclient/discovery_cache/documents/analyticsreporting.v4.json
@@ -1,1679 +1,1679 @@
 {
-  "name": "analyticsreporting",
-  "documentationLink": "https://developers.google.com/analytics/devguides/reporting/core/v4/",
-  "id": "analyticsreporting:v4",
-  "version": "v4",
-  "fullyEncodeReservedExpansion": true,
-  "ownerName": "Google",
-  "mtlsRootUrl": "https://analyticsreporting.mtls.googleapis.com/",
-  "baseUrl": "https://analyticsreporting.googleapis.com/",
-  "basePath": "",
-  "batchPath": "batch",
-  "resources": {
-    "reports": {
-      "methods": {
-        "batchGet": {
-          "parameters": {},
-          "flatPath": "v4/reports:batchGet",
-          "parameterOrder": [],
-          "id": "analyticsreporting.reports.batchGet",
-          "response": {
-            "$ref": "GetReportsResponse"
-          },
-          "request": {
-            "$ref": "GetReportsRequest"
-          },
-          "path": "v4/reports:batchGet",
-          "description": "Returns the Analytics data.",
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/analytics",
-            "https://www.googleapis.com/auth/analytics.readonly"
-          ]
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/analytics": {
+                    "description": "View and manage your Google Analytics data"
+                },
+                "https://www.googleapis.com/auth/analytics.readonly": {
+                    "description": "See and download your Google Analytics data"
+                }
+            }
         }
-      }
     },
-    "userActivity": {
-      "methods": {
-        "search": {
-          "response": {
-            "$ref": "SearchUserActivityResponse"
-          },
-          "request": {
-            "$ref": "SearchUserActivityRequest"
-          },
-          "parameterOrder": [],
-          "description": "Returns User Activity data.",
-          "scopes": [
-            "https://www.googleapis.com/auth/analytics",
-            "https://www.googleapis.com/auth/analytics.readonly"
-          ],
-          "httpMethod": "POST",
-          "flatPath": "v4/userActivity:search",
-          "id": "analyticsreporting.userActivity.search",
-          "path": "v4/userActivity:search",
-          "parameters": {}
-        }
-      }
-    }
-  },
-  "protocol": "rest",
-  "ownerDomain": "google.com",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "version_module": true,
-  "kind": "discovery#restDescription",
-  "description": "Accesses Analytics report data.",
-  "title": "Analytics Reporting API",
-  "discoveryVersion": "v1",
-  "schemas": {
-    "ReportRow": {
-      "id": "ReportRow",
-      "properties": {
-        "metrics": {
-          "items": {
-            "$ref": "DateRangeValues"
-          },
-          "type": "array",
-          "description": "List of metrics for each requested DateRange."
-        },
-        "dimensions": {
-          "items": {
-            "type": "string"
-          },
-          "description": "List of requested dimensions.",
-          "type": "array"
-        }
-      },
-      "description": "A row in the report.",
-      "type": "object"
+    "basePath": "",
+    "baseUrl": "https://analyticsreporting.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "AnalyticsReporting",
+    "description": "Accesses Analytics report data.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://developers.google.com/analytics/devguides/reporting/core/v4/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
     },
-    "ReportRequest": {
-      "properties": {
-        "hideTotals": {
-          "type": "boolean",
-          "description": "If set to true, hides the total of all metrics for all the matching rows, for every date range. The default false and will return the totals."
-        },
-        "segments": {
-          "type": "array",
-          "items": {
-            "$ref": "Segment"
-          },
-          "description": "Segment the data returned for the request. A segment definition helps look at a subset of the segment request. A request can contain up to four segments. Every [ReportRequest](#ReportRequest) within a `batchGet` method must contain the same `segments` definition. Requests with segments must have the `ga:segment` dimension."
-        },
-        "dimensionFilterClauses": {
-          "items": {
-            "$ref": "DimensionFilterClause"
-          },
-          "description": "The dimension filter clauses for filtering Dimension Values. They are logically combined with the `AND` operator. Note that filtering occurs before any dimensions are aggregated, so that the returned metrics represent the total for only the relevant dimensions.",
-          "type": "array"
-        },
-        "pivots": {
-          "type": "array",
-          "items": {
-            "$ref": "Pivot"
-          },
-          "description": "The pivot definitions. Requests can have a maximum of 2 pivots."
-        },
-        "filtersExpression": {
-          "description": "Dimension or metric filters that restrict the data returned for your request. To use the `filtersExpression`, supply a dimension or metric on which to filter, followed by the filter expression. For example, the following expression selects `ga:browser` dimension which starts with Firefox; `ga:browser=~^Firefox`. For more information on dimensions and metric filters, see [Filters reference](https://developers.google.com/analytics/devguides/reporting/core/v3/reference#filters).",
-          "type": "string"
-        },
-        "pageSize": {
-          "format": "int32",
-          "description": "Page size is for paging and specifies the maximum number of returned rows. Page size should be \u003e= 0. A query returns the default of 1,000 rows. The Analytics Core Reporting API returns a maximum of 100,000 rows per request, no matter how many you ask for. It can also return fewer rows than requested, if there aren't as many dimension segments as you expect. For instance, there are fewer than 300 possible values for `ga:country`, so when segmenting only by country, you can't get more than 300 rows, even if you set `pageSize` to a higher value.",
-          "type": "integer"
-        },
-        "pageToken": {
-          "type": "string",
-          "description": "A continuation token to get the next page of the results. Adding this to the request will return the rows after the pageToken. The pageToken should be the value returned in the nextPageToken parameter in the response to the GetReports request."
-        },
-        "dateRanges": {
-          "type": "array",
-          "description": "Date ranges in the request. The request can have a maximum of 2 date ranges. The response will contain a set of metric values for each combination of the dimensions for each date range in the request. So, if there are two date ranges, there will be two set of metric values, one for the original date range and one for the second date range. The `reportRequest.dateRanges` field should not be specified for cohorts or Lifetime value requests. If a date range is not provided, the default date range is (startDate: current date - 7 days, endDate: current date - 1 day). Every [ReportRequest](#ReportRequest) within a `batchGet` method must contain the same `dateRanges` definition.",
-          "items": {
-            "$ref": "DateRange"
-          }
-        },
-        "viewId": {
-          "description": "The Analytics [view ID](https://support.google.com/analytics/answer/1009618) from which to retrieve data. Every [ReportRequest](#ReportRequest) within a `batchGet` method must contain the same `viewId`.",
-          "type": "string"
-        },
-        "cohortGroup": {
-          "description": "Cohort group associated with this request. If there is a cohort group in the request the `ga:cohort` dimension must be present. Every [ReportRequest](#ReportRequest) within a `batchGet` method must contain the same `cohortGroup` definition.",
-          "$ref": "CohortGroup"
-        },
-        "dimensions": {
-          "type": "array",
-          "description": "The dimensions requested. Requests can have a total of 9 dimensions.",
-          "items": {
-            "$ref": "Dimension"
-          }
-        },
-        "hideValueRanges": {
-          "description": "If set to true, hides the minimum and maximum across all matching rows. The default is false and the value ranges are returned.",
-          "type": "boolean"
-        },
-        "samplingLevel": {
-          "enum": [
-            "SAMPLING_UNSPECIFIED",
-            "DEFAULT",
-            "SMALL",
-            "LARGE"
-          ],
-          "type": "string",
-          "description": "The desired report [sample](https://support.google.com/analytics/answer/2637192) size. If the the `samplingLevel` field is unspecified the `DEFAULT` sampling level is used. Every [ReportRequest](#ReportRequest) within a `batchGet` method must contain the same `samplingLevel` definition. See [developer guide](/analytics/devguides/reporting/core/v4/basics#sampling) for details.",
-          "enumDescriptions": [
-            "If the `samplingLevel` field is unspecified the `DEFAULT` sampling level is used.",
-            "Returns response with a sample size that balances speed and accuracy.",
-            "It returns a fast response with a smaller sampling size.",
-            "Returns a more accurate response using a large sampling size. But this may result in response being slower."
-          ]
-        },
-        "orderBys": {
-          "items": {
-            "$ref": "OrderBy"
-          },
-          "description": "Sort order on output rows. To compare two rows, the elements of the following are applied in order until a difference is found. All date ranges in the output get the same row order.",
-          "type": "array"
-        },
-        "metrics": {
-          "type": "array",
-          "description": "The metrics requested. Requests must specify at least one metric. Requests can have a total of 10 metrics.",
-          "items": {
-            "$ref": "Metric"
-          }
-        },
-        "metricFilterClauses": {
-          "description": "The metric filter clauses. They are logically combined with the `AND` operator. Metric filters look at only the first date range and not the comparing date range. Note that filtering on metrics occurs after the metrics are aggregated.",
-          "items": {
-            "$ref": "MetricFilterClause"
-          },
-          "type": "array"
-        },
-        "includeEmptyRows": {
-          "description": "If set to false, the response does not include rows if all the retrieved metrics are equal to zero. The default is false which will exclude these rows.",
-          "type": "boolean"
-        }
-      },
-      "description": "The main request class which specifies the Reporting API request.",
-      "type": "object",
-      "id": "ReportRequest"
-    },
-    "GetReportsRequest": {
-      "description": "The batch request containing multiple report request.",
-      "type": "object",
-      "properties": {
-        "useResourceQuotas": {
-          "description": "Enables [resource based quotas](/analytics/devguides/reporting/core/v4/limits-quotas#analytics_reporting_api_v4), (defaults to `False`). If this field is set to `True` the per view (profile) quotas are governed by the computational cost of the request. Note that using cost based quotas will higher enable sampling rates. (10 Million for `SMALL`, 100M for `LARGE`. See the [limits and quotas documentation](/analytics/devguides/reporting/core/v4/limits-quotas#analytics_reporting_api_v4) for details.",
-          "type": "boolean"
-        },
-        "reportRequests": {
-          "description": "Requests, each request will have a separate response. There can be a maximum of 5 requests. All requests should have the same `dateRanges`, `viewId`, `segments`, `samplingLevel`, and `cohortGroup`.",
-          "items": {
-            "$ref": "ReportRequest"
-          },
-          "type": "array"
-        }
-      },
-      "id": "GetReportsRequest"
-    },
-    "Report": {
-      "id": "Report",
-      "properties": {
-        "columnHeader": {
-          "description": "The column headers.",
-          "$ref": "ColumnHeader"
-        },
-        "data": {
-          "description": "Response data.",
-          "$ref": "ReportData"
-        },
-        "nextPageToken": {
-          "description": "Page token to retrieve the next page of results in the list.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "The data response corresponding to the request."
-    },
-    "User": {
-      "description": "Contains information to identify a particular user uniquely.",
-      "id": "User",
-      "type": "object",
-      "properties": {
-        "userId": {
-          "type": "string",
-          "description": "Unique Id of the user for which the data is being requested."
-        },
-        "type": {
-          "type": "string",
-          "enum": [
-            "USER_ID_TYPE_UNSPECIFIED",
-            "USER_ID",
-            "CLIENT_ID"
-          ],
-          "enumDescriptions": [
-            "When the User Id Type is not specified, the default type used will be CLIENT_ID.",
-            "A single user, like a signed-in user account, that may interact with content across one or more devices and / or browser instances.",
-            "Analytics assigned client_id."
-          ],
-          "description": "Type of the user in the request. The field `userId` is associated with this type."
-        }
-      }
-    },
-    "ReportData": {
-      "id": "ReportData",
-      "description": "The data part of the report.",
-      "type": "object",
-      "properties": {
-        "samplingSpaceSizes": {
-          "description": "If the results are [sampled](https://support.google.com/analytics/answer/2637192), this returns the total number of samples present, one entry per date range. If the results are not sampled this field will not be defined. See [developer guide](/analytics/devguides/reporting/core/v4/basics#sampling) for details.",
-          "type": "array",
-          "items": {
-            "type": "string",
-            "format": "int64"
-          }
-        },
-        "dataLastRefreshed": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "The last time the data in the report was refreshed. All the hits received before this timestamp are included in the calculation of the report."
-        },
-        "maximums": {
-          "description": "Minimum and maximum values seen over all matching rows. These are both empty when `hideValueRanges` in the request is false, or when rowCount is zero.",
-          "type": "array",
-          "items": {
-            "$ref": "DateRangeValues"
-          }
-        },
-        "samplesReadCounts": {
-          "type": "array",
-          "description": "If the results are [sampled](https://support.google.com/analytics/answer/2637192), this returns the total number of samples read, one entry per date range. If the results are not sampled this field will not be defined. See [developer guide](/analytics/devguides/reporting/core/v4/basics#sampling) for details.",
-          "items": {
-            "format": "int64",
-            "type": "string"
-          }
-        },
-        "totals": {
-          "type": "array",
-          "description": "For each requested date range, for the set of all rows that match the query, every requested value format gets a total. The total for a value format is computed by first totaling the metrics mentioned in the value format and then evaluating the value format as a scalar expression. E.g., The \"totals\" for `3 / (ga:sessions + 2)` we compute `3 / ((sum of all relevant ga:sessions) + 2)`. Totals are computed before pagination.",
-          "items": {
-            "$ref": "DateRangeValues"
-          }
-        },
-        "rows": {
-          "description": "There's one ReportRow for every unique combination of dimensions.",
-          "type": "array",
-          "items": {
-            "$ref": "ReportRow"
-          }
-        },
-        "isDataGolden": {
-          "description": "Indicates if response to this request is golden or not. Data is golden when the exact same request will not produce any new results if asked at a later point in time.",
-          "type": "boolean"
-        },
-        "minimums": {
-          "type": "array",
-          "items": {
-            "$ref": "DateRangeValues"
-          },
-          "description": "Minimum and maximum values seen over all matching rows. These are both empty when `hideValueRanges` in the request is false, or when rowCount is zero."
-        },
-        "rowCount": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Total number of matching rows for this query."
-        }
-      }
-    },
-    "Pivot": {
-      "description": "The Pivot describes the pivot section in the request. The Pivot helps rearrange the information in the table for certain reports by pivoting your data on a second dimension.",
-      "type": "object",
-      "id": "Pivot",
-      "properties": {
-        "metrics": {
-          "type": "array",
-          "items": {
-            "$ref": "Metric"
-          },
-          "description": "The pivot metrics. Pivot metrics are part of the restriction on total number of metrics allowed in the request."
-        },
-        "maxGroupCount": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Specifies the maximum number of groups to return. The default value is 10, also the maximum value is 1,000."
-        },
-        "dimensions": {
-          "items": {
-            "$ref": "Dimension"
-          },
-          "description": "A list of dimensions to show as pivot columns. A Pivot can have a maximum of 4 dimensions. Pivot dimensions are part of the restriction on the total number of dimensions allowed in the request.",
-          "type": "array"
-        },
-        "dimensionFilterClauses": {
-          "type": "array",
-          "description": "DimensionFilterClauses are logically combined with an `AND` operator: only data that is included by all these DimensionFilterClauses contributes to the values in this pivot region. Dimension filters can be used to restrict the columns shown in the pivot region. For example if you have `ga:browser` as the requested dimension in the pivot region, and you specify key filters to restrict `ga:browser` to only \"IE\" or \"Firefox\", then only those two browsers would show up as columns.",
-          "items": {
-            "$ref": "DimensionFilterClause"
-          }
-        },
-        "startGroup": {
-          "type": "integer",
-          "format": "int32",
-          "description": "If k metrics were requested, then the response will contain some data-dependent multiple of k columns in the report. E.g., if you pivoted on the dimension `ga:browser` then you'd get k columns for \"Firefox\", k columns for \"IE\", k columns for \"Chrome\", etc. The ordering of the groups of columns is determined by descending order of \"total\" for the first of the k values. Ties are broken by lexicographic ordering of the first pivot dimension, then lexicographic ordering of the second pivot dimension, and so on. E.g., if the totals for the first value for Firefox, IE, and Chrome were 8, 2, 8, respectively, the order of columns would be Chrome, Firefox, IE. The following let you choose which of the groups of k columns are included in the response."
-        }
-      }
-    },
-    "PivotHeaderEntry": {
-      "properties": {
-        "dimensionValues": {
-          "type": "array",
-          "description": "The values for the dimensions in the pivot.",
-          "items": {
-            "type": "string"
-          }
-        },
-        "dimensionNames": {
-          "description": "The name of the dimensions in the pivot response.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "metric": {
-          "$ref": "MetricHeaderEntry",
-          "description": "The metric header for the metric in the pivot."
-        }
-      },
-      "description": "The headers for the each of the metric column corresponding to the metrics requested in the pivots section of the response.",
-      "type": "object",
-      "id": "PivotHeaderEntry"
-    },
-    "ProductData": {
-      "id": "ProductData",
-      "description": "Details of the products in an e-commerce transaction.",
-      "type": "object",
-      "properties": {
-        "productQuantity": {
-          "type": "string",
-          "description": "Total number of this product units in the transaction.",
-          "format": "int64"
-        },
-        "productName": {
-          "description": "The product name, supplied by the e-commerce tracking application, for the purchased items.",
-          "type": "string"
-        },
-        "itemRevenue": {
-          "description": "The total revenue from purchased product items.",
-          "format": "double",
-          "type": "number"
-        },
-        "productSku": {
-          "type": "string",
-          "description": "Unique code that represents the product."
-        }
-      }
-    },
-    "Metric": {
-      "id": "Metric",
-      "properties": {
-        "alias": {
-          "type": "string",
-          "description": "An alias for the metric expression is an alternate name for the expression. The alias can be used for filtering and sorting. This field is optional and is useful if the expression is not a single metric but a complex expression which cannot be used in filtering and sorting. The alias is also used in the response column header."
-        },
-        "expression": {
-          "type": "string",
-          "description": "A metric expression in the request. An expression is constructed from one or more metrics and numbers. Accepted operators include: Plus (+), Minus (-), Negation (Unary -), Divided by (/), Multiplied by (*), Parenthesis, Positive cardinal numbers (0-9), can include decimals and is limited to 1024 characters. Example `ga:totalRefunds/ga:users`, in most cases the metric expression is just a single metric name like `ga:users`. Adding mixed `MetricType` (E.g., `CURRENCY` + `PERCENTAGE`) metrics will result in unexpected results."
-        },
-        "formattingType": {
-          "description": "Specifies how the metric expression should be formatted, for example `INTEGER`.",
-          "enumDescriptions": [
-            "Metric type is unspecified.",
-            "Integer metric.",
-            "Float metric.",
-            "Currency metric.",
-            "Percentage metric.",
-            "Time metric in `HH:MM:SS` format."
-          ],
-          "type": "string",
-          "enum": [
-            "METRIC_TYPE_UNSPECIFIED",
-            "INTEGER",
-            "FLOAT",
-            "CURRENCY",
-            "PERCENT",
-            "TIME"
-          ]
-        }
-      },
-      "description": "[Metrics](https://support.google.com/analytics/answer/1033861) are the quantitative measurements. For example, the metric `ga:users` indicates the total number of users for the requested time period.",
-      "type": "object"
-    },
-    "ColumnHeader": {
-      "properties": {
-        "dimensions": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "The dimension names in the response."
-        },
-        "metricHeader": {
-          "$ref": "MetricHeader",
-          "description": "Metric headers for the metrics in the response."
-        }
-      },
-      "type": "object",
-      "description": "Column headers.",
-      "id": "ColumnHeader"
-    },
-    "SegmentFilter": {
-      "id": "SegmentFilter",
-      "description": "SegmentFilter defines the segment to be either a simple or a sequence segment. A simple segment condition contains dimension and metric conditions to select the sessions or users. A sequence segment condition can be used to select users or sessions based on sequential conditions.",
-      "type": "object",
-      "properties": {
-        "simpleSegment": {
-          "description": "A Simple segment conditions consist of one or more dimension/metric conditions that can be combined",
-          "$ref": "SimpleSegment"
-        },
-        "sequenceSegment": {
-          "$ref": "SequenceSegment",
-          "description": "Sequence conditions consist of one or more steps, where each step is defined by one or more dimension/metric conditions. Multiple steps can be combined with special sequence operators."
-        },
-        "not": {
-          "description": "If true, match the complement of simple or sequence segment. For example, to match all visits not from \"New York\", we can define the segment as follows: \"sessionSegment\": { \"segmentFilters\": [{ \"simpleSegment\" :{ \"orFiltersForSegment\": [{ \"segmentFilterClauses\":[{ \"dimensionFilter\": { \"dimensionName\": \"ga:city\", \"expressions\": [\"New York\"] } }] }] }, \"not\": \"True\" }] },",
-          "type": "boolean"
-        }
-      }
-    },
-    "SegmentDimensionFilter": {
-      "type": "object",
-      "id": "SegmentDimensionFilter",
-      "description": "Dimension filter specifies the filtering options on a dimension.",
-      "properties": {
-        "operator": {
-          "description": "The operator to use to match the dimension with the expressions.",
-          "type": "string",
-          "enum": [
-            "OPERATOR_UNSPECIFIED",
-            "REGEXP",
-            "BEGINS_WITH",
-            "ENDS_WITH",
-            "PARTIAL",
-            "EXACT",
-            "IN_LIST",
-            "NUMERIC_LESS_THAN",
-            "NUMERIC_GREATER_THAN",
-            "NUMERIC_BETWEEN"
-          ],
-          "enumDescriptions": [
-            "If the match type is unspecified, it is treated as a REGEXP.",
-            "The match expression is treated as a regular expression. All other match types are not treated as regular expressions.",
-            "Matches the values which begin with the match expression provided.",
-            "Matches the values which end with the match expression provided.",
-            "Substring match.",
-            "The value should match the match expression entirely.",
-            "This option is used to specify a dimension filter whose expression can take any value from a selected list of values. This helps avoiding evaluating multiple exact match dimension filters which are OR'ed for every single response row. For example: expressions: [\"A\", \"B\", \"C\"] Any response row whose dimension has it is value as A, B or C, matches this DimensionFilter.",
-            "Integer comparison filters. case sensitivity is ignored for these and the expression is assumed to be a string representing an integer. Failure conditions: - if expression is not a valid int64, the client should expect an error. - input dimensions that are not valid int64 values will never match the filter. Checks if the dimension is numerically less than the match expression.",
-            "Checks if the dimension is numerically greater than the match expression.",
-            "Checks if the dimension is numerically between the minimum and maximum of the match expression, boundaries excluded."
-          ]
-        },
-        "dimensionName": {
-          "type": "string",
-          "description": "Name of the dimension for which the filter is being applied."
-        },
-        "maxComparisonValue": {
-          "description": "Maximum comparison values for `BETWEEN` match type.",
-          "type": "string"
-        },
-        "expressions": {
-          "items": {
-            "type": "string"
-          },
-          "description": "The list of expressions, only the first element is used for all operators",
-          "type": "array"
-        },
-        "minComparisonValue": {
-          "description": "Minimum comparison values for `BETWEEN` match type.",
-          "type": "string"
-        },
-        "caseSensitive": {
-          "type": "boolean",
-          "description": "Should the match be case sensitive, ignored for `IN_LIST` operator."
-        }
-      }
-    },
-    "ResourceQuotasRemaining": {
-      "type": "object",
-      "description": "The resource quota tokens remaining for the property after the request is completed.",
-      "id": "ResourceQuotasRemaining",
-      "properties": {
-        "hourlyQuotaTokensRemaining": {
-          "format": "int32",
-          "description": "Hourly resource quota tokens remaining.",
-          "type": "integer"
-        },
-        "dailyQuotaTokensRemaining": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Daily resource quota remaining remaining."
-        }
-      }
-    },
-    "DimensionFilterClause": {
-      "properties": {
-        "filters": {
-          "description": "The repeated set of filters. They are logically combined based on the operator specified.",
-          "items": {
-            "$ref": "DimensionFilter"
-          },
-          "type": "array"
-        },
-        "operator": {
-          "type": "string",
-          "description": "The operator for combining multiple dimension filters. If unspecified, it is treated as an `OR`.",
-          "enum": [
-            "OPERATOR_UNSPECIFIED",
-            "OR",
-            "AND"
-          ],
-          "enumDescriptions": [
-            "Unspecified operator. It is treated as an `OR`.",
-            "The logical `OR` operator.",
-            "The logical `AND` operator."
-          ]
-        }
-      },
-      "type": "object",
-      "id": "DimensionFilterClause",
-      "description": "A group of dimension filters. Set the operator value to specify how the filters are logically combined."
-    },
-    "SegmentMetricFilter": {
-      "properties": {
-        "comparisonValue": {
-          "type": "string",
-          "description": "The value to compare against. If the operator is `BETWEEN`, this value is treated as minimum comparison value."
-        },
-        "metricName": {
-          "type": "string",
-          "description": "The metric that will be filtered on. A `metricFilter` must contain a metric name."
-        },
-        "maxComparisonValue": {
-          "type": "string",
-          "description": "Max comparison value is only used for `BETWEEN` operator."
-        },
-        "scope": {
-          "enumDescriptions": [
-            "If the scope is unspecified, it defaults to the condition scope, `USER` or `SESSION` depending on if the segment is trying to choose users or sessions.",
-            "Product scope.",
-            "Hit scope.",
-            "Session scope.",
-            "User scope."
-          ],
-          "enum": [
-            "UNSPECIFIED_SCOPE",
-            "PRODUCT",
-            "HIT",
-            "SESSION",
-            "USER"
-          ],
-          "description": "Scope for a metric defines the level at which that metric is defined. The specified metric scope must be equal to or greater than its primary scope as defined in the data model. The primary scope is defined by if the segment is selecting users or sessions.",
-          "type": "string"
-        },
-        "operator": {
-          "type": "string",
-          "description": "Specifies is the operation to perform to compare the metric. The default is `EQUAL`.",
-          "enumDescriptions": [
-            "Unspecified operator is treated as `LESS_THAN` operator.",
-            "Checks if the metric value is less than comparison value.",
-            "Checks if the metric value is greater than comparison value.",
-            "Equals operator.",
-            "For between operator, both the minimum and maximum are exclusive. We will use `LT` and `GT` for comparison."
-          ],
-          "enum": [
-            "UNSPECIFIED_OPERATOR",
-            "LESS_THAN",
-            "GREATER_THAN",
-            "EQUAL",
-            "BETWEEN"
-          ]
-        }
-      },
-      "type": "object",
-      "description": "Metric filter to be used in a segment filter clause.",
-      "id": "SegmentMetricFilter"
-    },
-    "DateRangeValues": {
-      "type": "object",
-      "description": "Used to return a list of metrics for a single DateRange / dimension combination",
-      "properties": {
-        "values": {
-          "type": "array",
-          "description": "Each value corresponds to each Metric in the request.",
-          "items": {
-            "type": "string"
-          }
-        },
-        "pivotValueRegions": {
-          "type": "array",
-          "items": {
-            "$ref": "PivotValueRegion"
-          },
-          "description": "The values of each pivot region."
-        }
-      },
-      "id": "DateRangeValues"
-    },
-    "Cohort": {
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "A unique name for the cohort. If not defined name will be auto-generated with values cohort_[1234...]."
-        },
-        "type": {
-          "enumDescriptions": [
-            "If unspecified it's treated as `FIRST_VISIT_DATE`.",
-            "Cohorts that are selected based on first visit date."
-          ],
-          "enum": [
-            "UNSPECIFIED_COHORT_TYPE",
-            "FIRST_VISIT_DATE"
-          ],
-          "type": "string",
-          "description": "Type of the cohort. The only supported type as of now is `FIRST_VISIT_DATE`. If this field is unspecified the cohort is treated as `FIRST_VISIT_DATE` type cohort."
-        },
-        "dateRange": {
-          "description": "This is used for `FIRST_VISIT_DATE` cohort, the cohort selects users whose first visit date is between start date and end date defined in the DateRange. The date ranges should be aligned for cohort requests. If the request contains `ga:cohortNthDay` it should be exactly one day long, if `ga:cohortNthWeek` it should be aligned to the week boundary (starting at Sunday and ending Saturday), and for `ga:cohortNthMonth` the date range should be aligned to the month (starting at the first and ending on the last day of the month). For LTV requests there are no such restrictions. You do not need to supply a date range for the `reportsRequest.dateRanges` field.",
-          "$ref": "DateRange"
-        }
-      },
-      "type": "object",
-      "description": "Defines a cohort. A cohort is a group of users who share a common characteristic. For example, all users with the same acquisition date belong to the same cohort.",
-      "id": "Cohort"
-    },
-    "UserActivitySession": {
-      "properties": {
-        "sessionDate": {
-          "type": "string",
-          "description": "Date of this session in ISO-8601 format."
-        },
-        "platform": {
-          "description": "Platform on which the activity happened: \"android\", \"ios\" etc.",
-          "type": "string"
-        },
-        "dataSource": {
-          "description": "The data source of a hit. By default, hits sent from analytics.js are reported as \"web\" and hits sent from the mobile SDKs are reported as \"app\". These values can be overridden in the Measurement Protocol.",
-          "type": "string"
-        },
-        "activities": {
-          "items": {
-            "$ref": "Activity"
-          },
-          "type": "array",
-          "description": "Represents a detailed view into each of the activity in this session."
-        },
-        "deviceCategory": {
-          "type": "string",
-          "description": "The type of device used: \"mobile\", \"tablet\" etc."
-        },
-        "sessionId": {
-          "description": "Unique ID of the session.",
-          "type": "string"
-        }
-      },
-      "id": "UserActivitySession",
-      "type": "object",
-      "description": "This represents a user session performed on a specific device at a certain time over a period of time."
-    },
-    "SegmentDefinition": {
-      "type": "object",
-      "description": "SegmentDefinition defines the segment to be a set of SegmentFilters which are combined together with a logical `AND` operation.",
-      "properties": {
-        "segmentFilters": {
-          "type": "array",
-          "description": "A segment is defined by a set of segment filters which are combined together with a logical `AND` operation.",
-          "items": {
-            "$ref": "SegmentFilter"
-          }
-        }
-      },
-      "id": "SegmentDefinition"
-    },
-    "OrderBy": {
-      "type": "object",
-      "properties": {
-        "fieldName": {
-          "description": "The field which to sort by. The default sort order is ascending. Example: `ga:browser`. Note, that you can only specify one field for sort here. For example, `ga:browser, ga:city` is not valid.",
-          "type": "string"
-        },
-        "sortOrder": {
-          "enumDescriptions": [
-            "If the sort order is unspecified, the default is ascending.",
-            "Ascending sort. The field will be sorted in an ascending manner.",
-            "Descending sort. The field will be sorted in a descending manner."
-          ],
-          "description": "The sorting order for the field.",
-          "enum": [
-            "SORT_ORDER_UNSPECIFIED",
-            "ASCENDING",
-            "DESCENDING"
-          ],
-          "type": "string"
-        },
-        "orderType": {
-          "enumDescriptions": [
-            "Unspecified order type will be treated as sort based on value.",
-            "The sort order is based on the value of the chosen column; looks only at the first date range.",
-            "The sort order is based on the difference of the values of the chosen column between the first two date ranges. Usable only if there are exactly two date ranges.",
-            "The sort order is based on weighted value of the chosen column. If column has n/d format, then weighted value of this ratio will be `(n + totals.n)/(d + totals.d)` Usable only for metrics that represent ratios.",
-            "Histogram order type is applicable only to dimension columns with non-empty histogram-buckets.",
-            "If the dimensions are fixed length numbers, ordinary sort would just work fine. `DIMENSION_AS_INTEGER` can be used if the dimensions are variable length numbers."
-          ],
-          "type": "string",
-          "enum": [
-            "ORDER_TYPE_UNSPECIFIED",
-            "VALUE",
-            "DELTA",
-            "SMART",
-            "HISTOGRAM_BUCKET",
-            "DIMENSION_AS_INTEGER"
-          ],
-          "description": "The order type. The default orderType is `VALUE`."
-        }
-      },
-      "description": "Specifies the sorting options.",
-      "id": "OrderBy"
-    },
-    "MetricFilter": {
-      "id": "MetricFilter",
-      "description": "MetricFilter specifies the filter on a metric.",
-      "type": "object",
-      "properties": {
-        "comparisonValue": {
-          "type": "string",
-          "description": "The value to compare against."
-        },
-        "not": {
-          "type": "boolean",
-          "description": "Logical `NOT` operator. If this boolean is set to true, then the matching metric values will be excluded in the report. The default is false."
-        },
-        "operator": {
-          "type": "string",
-          "description": "Is the metric `EQUAL`, `LESS_THAN` or `GREATER_THAN` the comparisonValue, the default is `EQUAL`. If the operator is `IS_MISSING`, checks if the metric is missing and would ignore the comparisonValue.",
-          "enumDescriptions": [
-            "If the operator is not specified, it is treated as `EQUAL`.",
-            "Should the value of the metric be exactly equal to the comparison value.",
-            "Should the value of the metric be less than to the comparison value.",
-            "Should the value of the metric be greater than to the comparison value.",
-            "Validates if the metric is missing. Doesn't take comparisonValue into account."
-          ],
-          "enum": [
-            "OPERATOR_UNSPECIFIED",
-            "EQUAL",
-            "LESS_THAN",
-            "GREATER_THAN",
-            "IS_MISSING"
-          ]
-        },
-        "metricName": {
-          "type": "string",
-          "description": "The metric that will be filtered on. A metricFilter must contain a metric name. A metric name can be an alias earlier defined as a metric or it can also be a metric expression."
-        }
-      }
-    },
-    "MetricHeaderEntry": {
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "The name of the header."
-        },
-        "type": {
-          "description": "The type of the metric, for example `INTEGER`.",
-          "type": "string",
-          "enumDescriptions": [
-            "Metric type is unspecified.",
-            "Integer metric.",
-            "Float metric.",
-            "Currency metric.",
-            "Percentage metric.",
-            "Time metric in `HH:MM:SS` format."
-          ],
-          "enum": [
-            "METRIC_TYPE_UNSPECIFIED",
-            "INTEGER",
-            "FLOAT",
-            "CURRENCY",
-            "PERCENT",
-            "TIME"
-          ]
-        }
-      },
-      "type": "object",
-      "id": "MetricHeaderEntry",
-      "description": "Header for the metrics."
-    },
-    "EventData": {
-      "type": "object",
-      "description": "Represents all the details pertaining to an event.",
-      "id": "EventData",
-      "properties": {
-        "eventLabel": {
-          "type": "string",
-          "description": "Label attached with the event."
-        },
-        "eventValue": {
-          "format": "int64",
-          "description": "Numeric value associated with the event.",
-          "type": "string"
-        },
-        "eventCategory": {
-          "type": "string",
-          "description": "The object on the page that was interacted with. Eg: 'Video'."
-        },
-        "eventAction": {
-          "description": "Type of interaction with the object. Eg: 'play'.",
-          "type": "string"
-        },
-        "eventCount": {
-          "description": "Number of such events in this activity.",
-          "format": "int64",
-          "type": "string"
-        }
-      }
-    },
-    "SequenceSegment": {
-      "type": "object",
-      "description": "Sequence conditions consist of one or more steps, where each step is defined by one or more dimension/metric conditions. Multiple steps can be combined with special sequence operators.",
-      "properties": {
-        "firstStepShouldMatchFirstHit": {
-          "type": "boolean",
-          "description": "If set, first step condition must match the first hit of the visitor (in the date range)."
-        },
-        "segmentSequenceSteps": {
-          "description": "The list of steps in the sequence.",
-          "items": {
-            "$ref": "SegmentSequenceStep"
-          },
-          "type": "array"
-        }
-      },
-      "id": "SequenceSegment"
-    },
-    "OrFiltersForSegment": {
-      "properties": {
-        "segmentFilterClauses": {
-          "items": {
-            "$ref": "SegmentFilterClause"
-          },
-          "type": "array",
-          "description": "List of segment filters to be combined with a `OR` operator."
-        }
-      },
-      "description": "A list of segment filters in the `OR` group are combined with the logical OR operator.",
-      "id": "OrFiltersForSegment",
-      "type": "object"
-    },
-    "SegmentFilterClause": {
-      "type": "object",
-      "id": "SegmentFilterClause",
-      "description": "Filter Clause to be used in a segment definition, can be wither a metric or a dimension filter.",
-      "properties": {
-        "dimensionFilter": {
-          "$ref": "SegmentDimensionFilter",
-          "description": "Dimension Filter for the segment definition."
-        },
-        "metricFilter": {
-          "description": "Metric Filter for the segment definition.",
-          "$ref": "SegmentMetricFilter"
-        },
-        "not": {
-          "type": "boolean",
-          "description": "Matches the complement (`!`) of the filter."
-        }
-      }
-    },
-    "PageviewData": {
-      "properties": {
-        "pageTitle": {
-          "description": "The title of the page that the visitor viewed.",
-          "type": "string"
-        },
-        "pagePath": {
-          "description": "The URL of the page that the visitor viewed.",
-          "type": "string"
-        }
-      },
-      "description": "Represents details collected when the visitor views a page.",
-      "id": "PageviewData",
-      "type": "object"
-    },
-    "MetricFilterClause": {
-      "description": "Represents a group of metric filters. Set the operator value to specify how the filters are logically combined.",
-      "id": "MetricFilterClause",
-      "properties": {
-        "filters": {
-          "items": {
-            "$ref": "MetricFilter"
-          },
-          "description": "The repeated set of filters. They are logically combined based on the operator specified.",
-          "type": "array"
-        },
-        "operator": {
-          "enum": [
-            "OPERATOR_UNSPECIFIED",
-            "OR",
-            "AND"
-          ],
-          "enumDescriptions": [
-            "Unspecified operator. It is treated as an `OR`.",
-            "The logical `OR` operator.",
-            "The logical `AND` operator."
-          ],
-          "type": "string",
-          "description": "The operator for combining multiple metric filters. If unspecified, it is treated as an `OR`."
-        }
-      },
-      "type": "object"
-    },
-    "Segment": {
-      "description": "The segment definition, if the report needs to be segmented. A Segment is a subset of the Analytics data. For example, of the entire set of users, one Segment might be users from a particular country or city.",
-      "properties": {
-        "segmentId": {
-          "type": "string",
-          "description": "The segment ID of a built-in or custom segment, for example `gaid::-3`."
-        },
-        "dynamicSegment": {
-          "description": "A dynamic segment definition in the request.",
-          "$ref": "DynamicSegment"
-        }
-      },
-      "id": "Segment",
-      "type": "object"
-    },
-    "DynamicSegment": {
-      "id": "DynamicSegment",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "The name of the dynamic segment.",
-          "type": "string"
-        },
-        "sessionSegment": {
-          "$ref": "SegmentDefinition",
-          "description": "Session Segment to select sessions to include in the segment."
-        },
-        "userSegment": {
-          "$ref": "SegmentDefinition",
-          "description": "User Segment to select users to include in the segment."
-        }
-      },
-      "description": "Dynamic segment definition for defining the segment within the request. A segment can select users, sessions or both."
-    },
-    "PivotValueRegion": {
-      "properties": {
-        "values": {
-          "description": "The values of the metrics in each of the pivot regions.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "type": "object",
-      "id": "PivotValueRegion",
-      "description": "The metric values in the pivot region."
-    },
-    "CustomDimension": {
-      "id": "CustomDimension",
-      "type": "object",
-      "properties": {
-        "index": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Slot number of custom dimension."
-        },
-        "value": {
-          "description": "Value of the custom dimension. Default value (i.e. empty string) indicates clearing sesion/visitor scope custom dimension value.",
-          "type": "string"
-        }
-      },
-      "description": "Custom dimension."
-    },
-    "DateRange": {
-      "type": "object",
-      "id": "DateRange",
-      "properties": {
-        "endDate": {
-          "type": "string",
-          "description": "The end date for the query in the format `YYYY-MM-DD`."
-        },
-        "startDate": {
-          "description": "The start date for the query in the format `YYYY-MM-DD`.",
-          "type": "string"
-        }
-      },
-      "description": "A contiguous set of days: startDate, startDate + 1 day, ..., endDate. The start and end dates are specified in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601) date format `YYYY-MM-DD`."
-    },
-    "ScreenviewData": {
-      "id": "ScreenviewData",
-      "type": "object",
-      "properties": {
-        "mobileDeviceBranding": {
-          "description": "Mobile manufacturer or branded name. Eg: \"Google\", \"Apple\" etc.",
-          "type": "string"
-        },
-        "appName": {
-          "type": "string",
-          "description": "The application name."
-        },
-        "mobileDeviceModel": {
-          "type": "string",
-          "description": "Mobile device model. Eg: \"Pixel\", \"iPhone\" etc."
-        },
-        "screenName": {
-          "description": "The name of the screen.",
-          "type": "string"
-        }
-      }
-    },
-    "DimensionFilter": {
-      "properties": {
-        "expressions": {
-          "items": {
-            "type": "string"
-          },
-          "description": "Strings or regular expression to match against. Only the first value of the list is used for comparison unless the operator is `IN_LIST`. If `IN_LIST` operator, then the entire list is used to filter the dimensions as explained in the description of the `IN_LIST` operator.",
-          "type": "array"
-        },
-        "caseSensitive": {
-          "description": "Should the match be case sensitive? Default is false.",
-          "type": "boolean"
-        },
-        "not": {
-          "description": "Logical `NOT` operator. If this boolean is set to true, then the matching dimension values will be excluded in the report. The default is false.",
-          "type": "boolean"
-        },
-        "dimensionName": {
-          "type": "string",
-          "description": "The dimension to filter on. A DimensionFilter must contain a dimension."
-        },
-        "operator": {
-          "enumDescriptions": [
-            "If the match type is unspecified, it is treated as a `REGEXP`.",
-            "The match expression is treated as a regular expression. All match types are not treated as regular expressions.",
-            "Matches the value which begin with the match expression provided.",
-            "Matches the values which end with the match expression provided.",
-            "Substring match.",
-            "The value should match the match expression entirely.",
-            "Integer comparison filters. case sensitivity is ignored for these and the expression is assumed to be a string representing an integer. Failure conditions: - If expression is not a valid int64, the client should expect an error. - Input dimensions that are not valid int64 values will never match the filter.",
-            "Checks if the dimension is numerically greater than the match expression. Read the description for `NUMERIC_EQUALS` for restrictions.",
-            "Checks if the dimension is numerically less than the match expression. Read the description for `NUMERIC_EQUALS` for restrictions.",
-            "This option is used to specify a dimension filter whose expression can take any value from a selected list of values. This helps avoiding evaluating multiple exact match dimension filters which are OR'ed for every single response row. For example: expressions: [\"A\", \"B\", \"C\"] Any response row whose dimension has it is value as A, B or C, matches this DimensionFilter."
-          ],
-          "description": "How to match the dimension to the expression. The default is REGEXP.",
-          "type": "string",
-          "enum": [
-            "OPERATOR_UNSPECIFIED",
-            "REGEXP",
-            "BEGINS_WITH",
-            "ENDS_WITH",
-            "PARTIAL",
-            "EXACT",
-            "NUMERIC_EQUAL",
-            "NUMERIC_GREATER_THAN",
-            "NUMERIC_LESS_THAN",
-            "IN_LIST"
-          ]
-        }
-      },
-      "description": "Dimension filter specifies the filtering options on a dimension.",
-      "type": "object",
-      "id": "DimensionFilter"
-    },
-    "SearchUserActivityResponse": {
-      "description": "The response from `userActivity:get` call.",
-      "type": "object",
-      "properties": {
-        "sessions": {
-          "description": "Each record represents a session (device details, duration, etc).",
-          "items": {
-            "$ref": "UserActivitySession"
-          },
-          "type": "array"
-        },
-        "sampleRate": {
-          "description": "This field represents the [sampling rate](https://support.google.com/analytics/answer/2637192) for the given request and is a number between 0.0 to 1.0. See [developer guide](/analytics/devguides/reporting/core/v4/basics#sampling) for details.",
-          "type": "number",
-          "format": "double"
-        },
-        "nextPageToken": {
-          "description": "This token should be passed to [SearchUserActivityRequest](#SearchUserActivityRequest) to retrieve the next page.",
-          "type": "string"
-        },
-        "totalRows": {
-          "format": "int32",
-          "description": "Total rows returned by this query (across different pages).",
-          "type": "integer"
-        }
-      },
-      "id": "SearchUserActivityResponse"
-    },
-    "GoalData": {
-      "id": "GoalData",
-      "type": "object",
-      "properties": {
-        "goalValue": {
-          "format": "double",
-          "description": "Value in this goal.",
-          "type": "number"
-        },
-        "goalCompletions": {
-          "type": "string",
-          "format": "int64",
-          "description": "Total number of goal completions in this activity."
-        },
-        "goalPreviousStep1": {
-          "description": "URL of the page one step prior to the goal completion.",
-          "type": "string"
-        },
-        "goalIndex": {
-          "format": "int32",
-          "type": "integer",
-          "description": "This identifies the goal as configured for the profile."
-        },
-        "goalPreviousStep3": {
-          "type": "string",
-          "description": "URL of the page three steps prior to the goal completion."
-        },
-        "goalName": {
-          "description": "Name of the goal.",
-          "type": "string"
-        },
-        "goalCompletionLocation": {
-          "description": "URL of the page where this goal was completed.",
-          "type": "string"
-        },
-        "goalPreviousStep2": {
-          "type": "string",
-          "description": "URL of the page two steps prior to the goal completion."
-        }
-      },
-      "description": "Represents all the details pertaining to a goal."
-    },
-    "SegmentSequenceStep": {
-      "description": "A segment sequence definition.",
-      "properties": {
-        "matchType": {
-          "description": "Specifies if the step immediately precedes or can be any time before the next step.",
-          "enumDescriptions": [
-            "Unspecified match type is treated as precedes.",
-            "Operator indicates that the previous step precedes the next step.",
-            "Operator indicates that the previous step immediately precedes the next step."
-          ],
-          "enum": [
-            "UNSPECIFIED_MATCH_TYPE",
-            "PRECEDES",
-            "IMMEDIATELY_PRECEDES"
-          ],
-          "type": "string"
-        },
-        "orFiltersForSegment": {
-          "type": "array",
-          "description": "A sequence is specified with a list of Or grouped filters which are combined with `AND` operator.",
-          "items": {
-            "$ref": "OrFiltersForSegment"
-          }
-        }
-      },
-      "id": "SegmentSequenceStep",
-      "type": "object"
-    },
-    "MetricHeader": {
-      "properties": {
-        "metricHeaderEntries": {
-          "type": "array",
-          "items": {
-            "$ref": "MetricHeaderEntry"
-          },
-          "description": "Headers for the metrics in the response."
-        },
-        "pivotHeaders": {
-          "items": {
-            "$ref": "PivotHeader"
-          },
-          "description": "Headers for the pivots in the response.",
-          "type": "array"
-        }
-      },
-      "description": "The headers for the metrics.",
-      "type": "object",
-      "id": "MetricHeader"
-    },
-    "TransactionData": {
-      "type": "object",
-      "id": "TransactionData",
-      "description": "Represents details collected when the visitor performs a transaction on the page.",
-      "properties": {
-        "transactionRevenue": {
-          "type": "number",
-          "description": "The total sale revenue (excluding shipping and tax) of the transaction.",
-          "format": "double"
-        },
-        "transactionShipping": {
-          "description": "Total cost of shipping.",
-          "type": "number",
-          "format": "double"
-        },
-        "transactionTax": {
-          "format": "double",
-          "type": "number",
-          "description": "Total tax for the transaction."
-        },
-        "transactionId": {
-          "description": "The transaction ID, supplied by the e-commerce tracking method, for the purchase in the shopping cart.",
-          "type": "string"
-        }
-      }
-    },
-    "GoalSetData": {
-      "id": "GoalSetData",
-      "type": "object",
-      "properties": {
-        "goals": {
-          "description": "All the goals that were reached in the current activity.",
-          "items": {
-            "$ref": "GoalData"
-          },
-          "type": "array"
-        }
-      },
-      "description": "Represents a set of goals that were reached in an activity."
-    },
-    "CohortGroup": {
-      "description": "Defines a cohort group. For example: \"cohortGroup\": { \"cohorts\": [{ \"name\": \"cohort 1\", \"type\": \"FIRST_VISIT_DATE\", \"dateRange\": { \"startDate\": \"2015-08-01\", \"endDate\": \"2015-08-01\" } },{ \"name\": \"cohort 2\" \"type\": \"FIRST_VISIT_DATE\" \"dateRange\": { \"startDate\": \"2015-07-01\", \"endDate\": \"2015-07-01\" } }] }",
-      "properties": {
-        "lifetimeValue": {
-          "type": "boolean",
-          "description": "Enable Life Time Value (LTV). LTV measures lifetime value for users acquired through different channels. Please see: [Cohort Analysis](https://support.google.com/analytics/answer/6074676) and [Lifetime Value](https://support.google.com/analytics/answer/6182550) If the value of lifetimeValue is false: - The metric values are similar to the values in the web interface cohort report. - The cohort definition date ranges must be aligned to the calendar week and month. i.e. while requesting `ga:cohortNthWeek` the `startDate` in the cohort definition should be a Sunday and the `endDate` should be the following Saturday, and for `ga:cohortNthMonth`, the `startDate` should be the 1st of the month and `endDate` should be the last day of the month. When the lifetimeValue is true: - The metric values will correspond to the values in the web interface LifeTime value report. - The Lifetime Value report shows you how user value (Revenue) and engagement (Appviews, Goal Completions, Sessions, and Session Duration) grow during the 90 days after a user is acquired. - The metrics are calculated as a cumulative average per user per the time increment. - The cohort definition date ranges need not be aligned to the calendar week and month boundaries. - The `viewId` must be an [app view ID](https://support.google.com/analytics/answer/2649553#WebVersusAppViews)"
-        },
-        "cohorts": {
-          "description": "The definition for the cohort.",
-          "type": "array",
-          "items": {
-            "$ref": "Cohort"
-          }
-        }
-      },
-      "id": "CohortGroup",
-      "type": "object"
-    },
-    "Dimension": {
-      "description": "[Dimensions](https://support.google.com/analytics/answer/1033861) are attributes of your data. For example, the dimension `ga:city` indicates the city, for example, \"Paris\" or \"New York\", from which a session originates.",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "Name of the dimension to fetch, for example `ga:browser`.",
-          "type": "string"
-        },
-        "histogramBuckets": {
-          "description": "If non-empty, we place dimension values into buckets after string to int64. Dimension values that are not the string representation of an integral value will be converted to zero. The bucket values have to be in increasing order. Each bucket is closed on the lower end, and open on the upper end. The \"first\" bucket includes all values less than the first boundary, the \"last\" bucket includes all values up to infinity. Dimension values that fall in a bucket get transformed to a new dimension value. For example, if one gives a list of \"0, 1, 3, 4, 7\", then we return the following buckets: - bucket #1: values \u003c 0, dimension value \"\u003c0\" - bucket #2: values in [0,1), dimension value \"0\" - bucket #3: values in [1,3), dimension value \"1-2\" - bucket #4: values in [3,4), dimension value \"3\" - bucket #5: values in [4,7), dimension value \"4-6\" - bucket #6: values \u003e= 7, dimension value \"7+\" NOTE: If you are applying histogram mutation on any dimension, and using that dimension in sort, you will want to use the sort type `HISTOGRAM_BUCKET` for that purpose. Without that the dimension values will be sorted according to dictionary (lexicographic) order. For example the ascending dictionary order is: \"\u003c50\", \"1001+\", \"121-1000\", \"50-120\" And the ascending `HISTOGRAM_BUCKET` order is: \"\u003c50\", \"50-120\", \"121-1000\", \"1001+\" The client has to explicitly request `\"orderType\": \"HISTOGRAM_BUCKET\"` for a histogram-mutated dimension.",
-          "type": "array",
-          "items": {
-            "format": "int64",
-            "type": "string"
-          }
-        }
-      },
-      "id": "Dimension"
-    },
-    "SearchUserActivityRequest": {
-      "properties": {
-        "viewId": {
-          "type": "string",
-          "description": "Required. The Analytics [view ID](https://support.google.com/analytics/answer/1009618) from which to retrieve data. Every [SearchUserActivityRequest](#SearchUserActivityRequest) must contain the `viewId`."
-        },
-        "activityTypes": {
-          "description": "Set of all activity types being requested. Only acvities matching these types will be returned in the response. If empty, all activies will be returned.",
-          "items": {
+    "id": "analyticsreporting:v4",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://analyticsreporting.mtls.googleapis.com/",
+    "name": "analyticsreporting",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
             "enum": [
-              "ACTIVITY_TYPE_UNSPECIFIED",
-              "PAGEVIEW",
-              "SCREENVIEW",
-              "GOAL",
-              "ECOMMERCE",
-              "EVENT"
+                "1",
+                "2"
             ],
             "enumDescriptions": [
-              "ActivityType will never have this value in the response. Using this type in the request will result in an error.",
-              "Used when the activity resulted out of a visitor viewing a page.",
-              "Used when the activity resulted out of a visitor using an application on a mobile device.",
-              "Used to denote that a goal type activity.",
-              "An e-commerce transaction was performed by the visitor on the page.",
-              "Used when the activity is an event."
+                "v1 error format",
+                "v2 error format"
             ],
+            "location": "query",
             "type": "string"
-          },
-          "type": "array"
         },
-        "pageSize": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Page size is for paging and specifies the maximum number of returned rows. Page size should be \u003e 0. If the value is 0 or if the field isn't specified, the request returns the default of 1000 rows per page."
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
         },
-        "dateRange": {
-          "description": "Date range for which to retrieve the user activity. If a date range is not provided, the default date range is (startDate: current date - 7 days, endDate: current date - 1 day).",
-          "$ref": "DateRange"
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "pageToken": {
-          "description": "A continuation token to get the next page of the results. Adding this to the request will return the rows after the pageToken. The pageToken should be the value returned in the nextPageToken parameter in the response to the [SearchUserActivityRequest](#SearchUserActivityRequest) request.",
-          "type": "string"
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
         },
-        "user": {
-          "$ref": "User",
-          "description": "Required. Unique user Id to query for. Every [SearchUserActivityRequest](#SearchUserActivityRequest) must contain this field."
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      },
-      "description": "The request to fetch User Report from Reporting API `userActivity:get` call.",
-      "id": "SearchUserActivityRequest",
-      "type": "object"
     },
-    "EcommerceData": {
-      "description": "E-commerce details associated with the user activity.",
-      "properties": {
-        "actionType": {
-          "type": "string",
-          "description": "Action associated with this e-commerce action.",
-          "enum": [
-            "UNKNOWN",
-            "CLICK",
-            "DETAILS_VIEW",
-            "ADD_TO_CART",
-            "REMOVE_FROM_CART",
-            "CHECKOUT",
-            "PAYMENT",
-            "REFUND",
-            "CHECKOUT_OPTION"
-          ],
-          "enumDescriptions": [
-            "Action type is not known.",
-            "Click through of product lists.",
-            "Product detail views.",
-            "Add product(s) to cart.",
-            "Remove product(s) from cart.",
-            "Check out.",
-            "Completed purchase.",
-            "Refund of purchase.",
-            "Checkout options."
-          ]
-        },
-        "products": {
-          "items": {
-            "$ref": "ProductData"
-          },
-          "type": "array",
-          "description": "Details of the products in this transaction."
-        },
-        "transaction": {
-          "$ref": "TransactionData",
-          "description": "Transaction details of this e-commerce action."
-        },
-        "ecommerceType": {
-          "enumDescriptions": [
-            "Used when the e-commerce activity type is unspecified.",
-            "Used when activity has classic (non-enhanced) e-commerce information.",
-            "Used when activity has enhanced e-commerce information."
-          ],
-          "description": "The type of this e-commerce activity.",
-          "type": "string",
-          "enum": [
-            "ECOMMERCE_TYPE_UNSPECIFIED",
-            "CLASSIC",
-            "ENHANCED"
-          ]
-        }
-      },
-      "id": "EcommerceData",
-      "type": "object"
-    },
-    "GetReportsResponse": {
-      "type": "object",
-      "properties": {
-        "queryCost": {
-          "type": "integer",
-          "description": "The amount of resource quota tokens deducted to execute the query. Includes all responses.",
-          "format": "int32"
-        },
+    "protocol": "rest",
+    "resources": {
         "reports": {
-          "items": {
-            "$ref": "Report"
-          },
-          "description": "Responses corresponding to each of the request.",
-          "type": "array"
+            "methods": {
+                "batchGet": {
+                    "description": "Returns the Analytics data.",
+                    "flatPath": "v4/reports:batchGet",
+                    "httpMethod": "POST",
+                    "id": "analyticsreporting.reports.batchGet",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v4/reports:batchGet",
+                    "request": {
+                        "$ref": "GetReportsRequest"
+                    },
+                    "response": {
+                        "$ref": "GetReportsResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/analytics",
+                        "https://www.googleapis.com/auth/analytics.readonly"
+                    ]
+                }
+            }
         },
-        "resourceQuotasRemaining": {
-          "description": "The amount of resource quota remaining for the property.",
-          "$ref": "ResourceQuotasRemaining"
+        "userActivity": {
+            "methods": {
+                "search": {
+                    "description": "Returns User Activity data.",
+                    "flatPath": "v4/userActivity:search",
+                    "httpMethod": "POST",
+                    "id": "analyticsreporting.userActivity.search",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v4/userActivity:search",
+                    "request": {
+                        "$ref": "SearchUserActivityRequest"
+                    },
+                    "response": {
+                        "$ref": "SearchUserActivityResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/analytics",
+                        "https://www.googleapis.com/auth/analytics.readonly"
+                    ]
+                }
+            }
         }
-      },
-      "description": "The main response class which holds the reports from the Reporting API `batchGet` call.",
-      "id": "GetReportsResponse"
     },
-    "Activity": {
-      "id": "Activity",
-      "description": "An Activity represents data for an activity of a user. Note that an Activity is different from a hit. A hit might result in multiple Activity's. For example, if a hit includes a transaction and a goal completion, there will be two Activity protos for this hit, one for ECOMMERCE and one for GOAL. Conversely, multiple hits can also construct one Activity. In classic e-commerce, data for one transaction might be sent through multiple hits. These hits will be merged into one ECOMMERCE Activity.",
-      "type": "object",
-      "properties": {
-        "activityTime": {
-          "type": "string",
-          "description": "Timestamp of the activity. If activities for a visit cross midnight and occur in two separate dates, then two sessions (one per date) share the session identifier. For example, say session ID 113472 has activity within 2019-08-20, and session ID 243742 has activity within 2019-08-25 and 2019-08-26. Session ID 113472 is one session, and session ID 243742 is two sessions.",
-          "format": "google-datetime"
+    "revision": "20210106",
+    "rootUrl": "https://analyticsreporting.googleapis.com/",
+    "schemas": {
+        "Activity": {
+            "description": "An Activity represents data for an activity of a user. Note that an Activity is different from a hit. A hit might result in multiple Activity's. For example, if a hit includes a transaction and a goal completion, there will be two Activity protos for this hit, one for ECOMMERCE and one for GOAL. Conversely, multiple hits can also construct one Activity. In classic e-commerce, data for one transaction might be sent through multiple hits. These hits will be merged into one ECOMMERCE Activity.",
+            "id": "Activity",
+            "properties": {
+                "activityTime": {
+                    "description": "Timestamp of the activity. If activities for a visit cross midnight and occur in two separate dates, then two sessions (one per date) share the session identifier. For example, say session ID 113472 has activity within 2019-08-20, and session ID 243742 has activity within 2019-08-25 and 2019-08-26. Session ID 113472 is one session, and session ID 243742 is two sessions.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "activityType": {
+                    "description": "Type of this activity.",
+                    "enum": [
+                        "ACTIVITY_TYPE_UNSPECIFIED",
+                        "PAGEVIEW",
+                        "SCREENVIEW",
+                        "GOAL",
+                        "ECOMMERCE",
+                        "EVENT"
+                    ],
+                    "enumDescriptions": [
+                        "ActivityType will never have this value in the response. Using this type in the request will result in an error.",
+                        "Used when the activity resulted out of a visitor viewing a page.",
+                        "Used when the activity resulted out of a visitor using an application on a mobile device.",
+                        "Used to denote that a goal type activity.",
+                        "An e-commerce transaction was performed by the visitor on the page.",
+                        "Used when the activity is an event."
+                    ],
+                    "type": "string"
+                },
+                "appview": {
+                    "$ref": "ScreenviewData",
+                    "description": "This will be set if `activity_type` equals `SCREEN_VIEW`."
+                },
+                "campaign": {
+                    "description": "For manual campaign tracking, it is the value of the utm_campaign campaign tracking parameter. For AdWords autotagging, it is the name(s) of the online ad campaign(s) you use for the property. If you use neither, its value is (not set).",
+                    "type": "string"
+                },
+                "channelGrouping": {
+                    "description": "The Channel Group associated with an end user's session for this View (defined by the View's Channel Groupings).",
+                    "type": "string"
+                },
+                "customDimension": {
+                    "description": "A list of all custom dimensions associated with this activity.",
+                    "items": {
+                        "$ref": "CustomDimension"
+                    },
+                    "type": "array"
+                },
+                "ecommerce": {
+                    "$ref": "EcommerceData",
+                    "description": "This will be set if `activity_type` equals `ECOMMERCE`."
+                },
+                "event": {
+                    "$ref": "EventData",
+                    "description": "This field contains all the details pertaining to an event and will be set if `activity_type` equals `EVENT`."
+                },
+                "goals": {
+                    "$ref": "GoalSetData",
+                    "description": "This field contains a list of all the goals that were reached in this activity when `activity_type` equals `GOAL`."
+                },
+                "hostname": {
+                    "description": "The hostname from which the tracking request was made.",
+                    "type": "string"
+                },
+                "keyword": {
+                    "description": "For manual campaign tracking, it is the value of the utm_term campaign tracking parameter. For AdWords traffic, it contains the best matching targeting criteria. For the display network, where multiple targeting criteria could have caused the ad to show up, it returns the best matching targeting criteria as selected by Ads. This could be display_keyword, site placement, boomuserlist, user_interest, age, or gender. Otherwise its value is (not set).",
+                    "type": "string"
+                },
+                "landingPagePath": {
+                    "description": "The first page in users' sessions, or the landing page.",
+                    "type": "string"
+                },
+                "medium": {
+                    "description": "The type of referrals. For manual campaign tracking, it is the value of the utm_medium campaign tracking parameter. For AdWords autotagging, it is cpc. If users came from a search engine detected by Google Analytics, it is organic. If the referrer is not a search engine, it is referral. If users came directly to the property and document.referrer is empty, its value is (none).",
+                    "type": "string"
+                },
+                "pageview": {
+                    "$ref": "PageviewData",
+                    "description": "This will be set if `activity_type` equals `PAGEVIEW`. This field contains all the details about the visitor and the page that was visited."
+                },
+                "source": {
+                    "description": "The source of referrals. For manual campaign tracking, it is the value of the utm_source campaign tracking parameter. For AdWords autotagging, it is google. If you use neither, it is the domain of the source (e.g., document.referrer) referring the users. It may also contain a port address. If users arrived without a referrer, its value is (direct).",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "landingPagePath": {
-          "type": "string",
-          "description": "The first page in users' sessions, or the landing page."
+        "Cohort": {
+            "description": "Defines a cohort. A cohort is a group of users who share a common characteristic. For example, all users with the same acquisition date belong to the same cohort.",
+            "id": "Cohort",
+            "properties": {
+                "dateRange": {
+                    "$ref": "DateRange",
+                    "description": "This is used for `FIRST_VISIT_DATE` cohort, the cohort selects users whose first visit date is between start date and end date defined in the DateRange. The date ranges should be aligned for cohort requests. If the request contains `ga:cohortNthDay` it should be exactly one day long, if `ga:cohortNthWeek` it should be aligned to the week boundary (starting at Sunday and ending Saturday), and for `ga:cohortNthMonth` the date range should be aligned to the month (starting at the first and ending on the last day of the month). For LTV requests there are no such restrictions. You do not need to supply a date range for the `reportsRequest.dateRanges` field."
+                },
+                "name": {
+                    "description": "A unique name for the cohort. If not defined name will be auto-generated with values cohort_[1234...].",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Type of the cohort. The only supported type as of now is `FIRST_VISIT_DATE`. If this field is unspecified the cohort is treated as `FIRST_VISIT_DATE` type cohort.",
+                    "enum": [
+                        "UNSPECIFIED_COHORT_TYPE",
+                        "FIRST_VISIT_DATE"
+                    ],
+                    "enumDescriptions": [
+                        "If unspecified it's treated as `FIRST_VISIT_DATE`.",
+                        "Cohorts that are selected based on first visit date."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "goals": {
-          "$ref": "GoalSetData",
-          "description": "This field contains a list of all the goals that were reached in this activity when `activity_type` equals `GOAL`."
+        "CohortGroup": {
+            "description": "Defines a cohort group. For example: \"cohortGroup\": { \"cohorts\": [{ \"name\": \"cohort 1\", \"type\": \"FIRST_VISIT_DATE\", \"dateRange\": { \"startDate\": \"2015-08-01\", \"endDate\": \"2015-08-01\" } },{ \"name\": \"cohort 2\" \"type\": \"FIRST_VISIT_DATE\" \"dateRange\": { \"startDate\": \"2015-07-01\", \"endDate\": \"2015-07-01\" } }] }",
+            "id": "CohortGroup",
+            "properties": {
+                "cohorts": {
+                    "description": "The definition for the cohort.",
+                    "items": {
+                        "$ref": "Cohort"
+                    },
+                    "type": "array"
+                },
+                "lifetimeValue": {
+                    "description": "Enable Life Time Value (LTV). LTV measures lifetime value for users acquired through different channels. Please see: [Cohort Analysis](https://support.google.com/analytics/answer/6074676) and [Lifetime Value](https://support.google.com/analytics/answer/6182550) If the value of lifetimeValue is false: - The metric values are similar to the values in the web interface cohort report. - The cohort definition date ranges must be aligned to the calendar week and month. i.e. while requesting `ga:cohortNthWeek` the `startDate` in the cohort definition should be a Sunday and the `endDate` should be the following Saturday, and for `ga:cohortNthMonth`, the `startDate` should be the 1st of the month and `endDate` should be the last day of the month. When the lifetimeValue is true: - The metric values will correspond to the values in the web interface LifeTime value report. - The Lifetime Value report shows you how user value (Revenue) and engagement (Appviews, Goal Completions, Sessions, and Session Duration) grow during the 90 days after a user is acquired. - The metrics are calculated as a cumulative average per user per the time increment. - The cohort definition date ranges need not be aligned to the calendar week and month boundaries. - The `viewId` must be an [app view ID](https://support.google.com/analytics/answer/2649553#WebVersusAppViews)",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
         },
-        "keyword": {
-          "type": "string",
-          "description": "For manual campaign tracking, it is the value of the utm_term campaign tracking parameter. For AdWords traffic, it contains the best matching targeting criteria. For the display network, where multiple targeting criteria could have caused the ad to show up, it returns the best matching targeting criteria as selected by Ads. This could be display_keyword, site placement, boomuserlist, user_interest, age, or gender. Otherwise its value is (not set)."
+        "ColumnHeader": {
+            "description": "Column headers.",
+            "id": "ColumnHeader",
+            "properties": {
+                "dimensions": {
+                    "description": "The dimension names in the response.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "metricHeader": {
+                    "$ref": "MetricHeader",
+                    "description": "Metric headers for the metrics in the response."
+                }
+            },
+            "type": "object"
         },
-        "source": {
-          "type": "string",
-          "description": "The source of referrals. For manual campaign tracking, it is the value of the utm_source campaign tracking parameter. For AdWords autotagging, it is google. If you use neither, it is the domain of the source (e.g., document.referrer) referring the users. It may also contain a port address. If users arrived without a referrer, its value is (direct)."
+        "CustomDimension": {
+            "description": "Custom dimension.",
+            "id": "CustomDimension",
+            "properties": {
+                "index": {
+                    "description": "Slot number of custom dimension.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "value": {
+                    "description": "Value of the custom dimension. Default value (i.e. empty string) indicates clearing sesion/visitor scope custom dimension value.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "activityType": {
-          "enumDescriptions": [
-            "ActivityType will never have this value in the response. Using this type in the request will result in an error.",
-            "Used when the activity resulted out of a visitor viewing a page.",
-            "Used when the activity resulted out of a visitor using an application on a mobile device.",
-            "Used to denote that a goal type activity.",
-            "An e-commerce transaction was performed by the visitor on the page.",
-            "Used when the activity is an event."
-          ],
-          "type": "string",
-          "enum": [
-            "ACTIVITY_TYPE_UNSPECIFIED",
-            "PAGEVIEW",
-            "SCREENVIEW",
-            "GOAL",
-            "ECOMMERCE",
-            "EVENT"
-          ],
-          "description": "Type of this activity."
+        "DateRange": {
+            "description": "A contiguous set of days: startDate, startDate + 1 day, ..., endDate. The start and end dates are specified in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601) date format `YYYY-MM-DD`.",
+            "id": "DateRange",
+            "properties": {
+                "endDate": {
+                    "description": "The end date for the query in the format `YYYY-MM-DD`.",
+                    "type": "string"
+                },
+                "startDate": {
+                    "description": "The start date for the query in the format `YYYY-MM-DD`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "appview": {
-          "description": "This will be set if `activity_type` equals `SCREEN_VIEW`.",
-          "$ref": "ScreenviewData"
+        "DateRangeValues": {
+            "description": "Used to return a list of metrics for a single DateRange / dimension combination",
+            "id": "DateRangeValues",
+            "properties": {
+                "pivotValueRegions": {
+                    "description": "The values of each pivot region.",
+                    "items": {
+                        "$ref": "PivotValueRegion"
+                    },
+                    "type": "array"
+                },
+                "values": {
+                    "description": "Each value corresponds to each Metric in the request.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "medium": {
-          "description": "The type of referrals. For manual campaign tracking, it is the value of the utm_medium campaign tracking parameter. For AdWords autotagging, it is cpc. If users came from a search engine detected by Google Analytics, it is organic. If the referrer is not a search engine, it is referral. If users came directly to the property and document.referrer is empty, its value is (none).",
-          "type": "string"
+        "Dimension": {
+            "description": "[Dimensions](https://support.google.com/analytics/answer/1033861) are attributes of your data. For example, the dimension `ga:city` indicates the city, for example, \"Paris\" or \"New York\", from which a session originates.",
+            "id": "Dimension",
+            "properties": {
+                "histogramBuckets": {
+                    "description": "If non-empty, we place dimension values into buckets after string to int64. Dimension values that are not the string representation of an integral value will be converted to zero. The bucket values have to be in increasing order. Each bucket is closed on the lower end, and open on the upper end. The \"first\" bucket includes all values less than the first boundary, the \"last\" bucket includes all values up to infinity. Dimension values that fall in a bucket get transformed to a new dimension value. For example, if one gives a list of \"0, 1, 3, 4, 7\", then we return the following buckets: - bucket #1: values < 0, dimension value \"<0\" - bucket #2: values in [0,1), dimension value \"0\" - bucket #3: values in [1,3), dimension value \"1-2\" - bucket #4: values in [3,4), dimension value \"3\" - bucket #5: values in [4,7), dimension value \"4-6\" - bucket #6: values >= 7, dimension value \"7+\" NOTE: If you are applying histogram mutation on any dimension, and using that dimension in sort, you will want to use the sort type `HISTOGRAM_BUCKET` for that purpose. Without that the dimension values will be sorted according to dictionary (lexicographic) order. For example the ascending dictionary order is: \"<50\", \"1001+\", \"121-1000\", \"50-120\" And the ascending `HISTOGRAM_BUCKET` order is: \"<50\", \"50-120\", \"121-1000\", \"1001+\" The client has to explicitly request `\"orderType\": \"HISTOGRAM_BUCKET\"` for a histogram-mutated dimension.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "name": {
+                    "description": "Name of the dimension to fetch, for example `ga:browser`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "hostname": {
-          "description": "The hostname from which the tracking request was made.",
-          "type": "string"
+        "DimensionFilter": {
+            "description": "Dimension filter specifies the filtering options on a dimension.",
+            "id": "DimensionFilter",
+            "properties": {
+                "caseSensitive": {
+                    "description": "Should the match be case sensitive? Default is false.",
+                    "type": "boolean"
+                },
+                "dimensionName": {
+                    "description": "The dimension to filter on. A DimensionFilter must contain a dimension.",
+                    "type": "string"
+                },
+                "expressions": {
+                    "description": "Strings or regular expression to match against. Only the first value of the list is used for comparison unless the operator is `IN_LIST`. If `IN_LIST` operator, then the entire list is used to filter the dimensions as explained in the description of the `IN_LIST` operator.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "not": {
+                    "description": "Logical `NOT` operator. If this boolean is set to true, then the matching dimension values will be excluded in the report. The default is false.",
+                    "type": "boolean"
+                },
+                "operator": {
+                    "description": "How to match the dimension to the expression. The default is REGEXP.",
+                    "enum": [
+                        "OPERATOR_UNSPECIFIED",
+                        "REGEXP",
+                        "BEGINS_WITH",
+                        "ENDS_WITH",
+                        "PARTIAL",
+                        "EXACT",
+                        "NUMERIC_EQUAL",
+                        "NUMERIC_GREATER_THAN",
+                        "NUMERIC_LESS_THAN",
+                        "IN_LIST"
+                    ],
+                    "enumDescriptions": [
+                        "If the match type is unspecified, it is treated as a `REGEXP`.",
+                        "The match expression is treated as a regular expression. All match types are not treated as regular expressions.",
+                        "Matches the value which begin with the match expression provided.",
+                        "Matches the values which end with the match expression provided.",
+                        "Substring match.",
+                        "The value should match the match expression entirely.",
+                        "Integer comparison filters. case sensitivity is ignored for these and the expression is assumed to be a string representing an integer. Failure conditions: - If expression is not a valid int64, the client should expect an error. - Input dimensions that are not valid int64 values will never match the filter.",
+                        "Checks if the dimension is numerically greater than the match expression. Read the description for `NUMERIC_EQUALS` for restrictions.",
+                        "Checks if the dimension is numerically less than the match expression. Read the description for `NUMERIC_EQUALS` for restrictions.",
+                        "This option is used to specify a dimension filter whose expression can take any value from a selected list of values. This helps avoiding evaluating multiple exact match dimension filters which are OR'ed for every single response row. For example: expressions: [\"A\", \"B\", \"C\"] Any response row whose dimension has it is value as A, B or C, matches this DimensionFilter."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "campaign": {
-          "description": "For manual campaign tracking, it is the value of the utm_campaign campaign tracking parameter. For AdWords autotagging, it is the name(s) of the online ad campaign(s) you use for the property. If you use neither, its value is (not set).",
-          "type": "string"
+        "DimensionFilterClause": {
+            "description": "A group of dimension filters. Set the operator value to specify how the filters are logically combined.",
+            "id": "DimensionFilterClause",
+            "properties": {
+                "filters": {
+                    "description": "The repeated set of filters. They are logically combined based on the operator specified.",
+                    "items": {
+                        "$ref": "DimensionFilter"
+                    },
+                    "type": "array"
+                },
+                "operator": {
+                    "description": "The operator for combining multiple dimension filters. If unspecified, it is treated as an `OR`.",
+                    "enum": [
+                        "OPERATOR_UNSPECIFIED",
+                        "OR",
+                        "AND"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified operator. It is treated as an `OR`.",
+                        "The logical `OR` operator.",
+                        "The logical `AND` operator."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "channelGrouping": {
-          "type": "string",
-          "description": "The Channel Group associated with an end user's session for this View (defined by the View's Channel Groupings)."
+        "DynamicSegment": {
+            "description": "Dynamic segment definition for defining the segment within the request. A segment can select users, sessions or both.",
+            "id": "DynamicSegment",
+            "properties": {
+                "name": {
+                    "description": "The name of the dynamic segment.",
+                    "type": "string"
+                },
+                "sessionSegment": {
+                    "$ref": "SegmentDefinition",
+                    "description": "Session Segment to select sessions to include in the segment."
+                },
+                "userSegment": {
+                    "$ref": "SegmentDefinition",
+                    "description": "User Segment to select users to include in the segment."
+                }
+            },
+            "type": "object"
         },
-        "pageview": {
-          "$ref": "PageviewData",
-          "description": "This will be set if `activity_type` equals `PAGEVIEW`. This field contains all the details about the visitor and the page that was visited."
+        "EcommerceData": {
+            "description": "E-commerce details associated with the user activity.",
+            "id": "EcommerceData",
+            "properties": {
+                "actionType": {
+                    "description": "Action associated with this e-commerce action.",
+                    "enum": [
+                        "UNKNOWN",
+                        "CLICK",
+                        "DETAILS_VIEW",
+                        "ADD_TO_CART",
+                        "REMOVE_FROM_CART",
+                        "CHECKOUT",
+                        "PAYMENT",
+                        "REFUND",
+                        "CHECKOUT_OPTION"
+                    ],
+                    "enumDescriptions": [
+                        "Action type is not known.",
+                        "Click through of product lists.",
+                        "Product detail views.",
+                        "Add product(s) to cart.",
+                        "Remove product(s) from cart.",
+                        "Check out.",
+                        "Completed purchase.",
+                        "Refund of purchase.",
+                        "Checkout options."
+                    ],
+                    "type": "string"
+                },
+                "ecommerceType": {
+                    "description": "The type of this e-commerce activity.",
+                    "enum": [
+                        "ECOMMERCE_TYPE_UNSPECIFIED",
+                        "CLASSIC",
+                        "ENHANCED"
+                    ],
+                    "enumDescriptions": [
+                        "Used when the e-commerce activity type is unspecified.",
+                        "Used when activity has classic (non-enhanced) e-commerce information.",
+                        "Used when activity has enhanced e-commerce information."
+                    ],
+                    "type": "string"
+                },
+                "products": {
+                    "description": "Details of the products in this transaction.",
+                    "items": {
+                        "$ref": "ProductData"
+                    },
+                    "type": "array"
+                },
+                "transaction": {
+                    "$ref": "TransactionData",
+                    "description": "Transaction details of this e-commerce action."
+                }
+            },
+            "type": "object"
         },
-        "ecommerce": {
-          "description": "This will be set if `activity_type` equals `ECOMMERCE`.",
-          "$ref": "EcommerceData"
+        "EventData": {
+            "description": "Represents all the details pertaining to an event.",
+            "id": "EventData",
+            "properties": {
+                "eventAction": {
+                    "description": "Type of interaction with the object. Eg: 'play'.",
+                    "type": "string"
+                },
+                "eventCategory": {
+                    "description": "The object on the page that was interacted with. Eg: 'Video'.",
+                    "type": "string"
+                },
+                "eventCount": {
+                    "description": "Number of such events in this activity.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "eventLabel": {
+                    "description": "Label attached with the event.",
+                    "type": "string"
+                },
+                "eventValue": {
+                    "description": "Numeric value associated with the event.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "customDimension": {
-          "type": "array",
-          "description": "A list of all custom dimensions associated with this activity.",
-          "items": {
-            "$ref": "CustomDimension"
-          }
+        "GetReportsRequest": {
+            "description": "The batch request containing multiple report request.",
+            "id": "GetReportsRequest",
+            "properties": {
+                "reportRequests": {
+                    "description": "Requests, each request will have a separate response. There can be a maximum of 5 requests. All requests should have the same `dateRanges`, `viewId`, `segments`, `samplingLevel`, and `cohortGroup`.",
+                    "items": {
+                        "$ref": "ReportRequest"
+                    },
+                    "type": "array"
+                },
+                "useResourceQuotas": {
+                    "description": "Enables [resource based quotas](/analytics/devguides/reporting/core/v4/limits-quotas#analytics_reporting_api_v4), (defaults to `False`). If this field is set to `True` the per view (profile) quotas are governed by the computational cost of the request. Note that using cost based quotas will higher enable sampling rates. (10 Million for `SMALL`, 100M for `LARGE`. See the [limits and quotas documentation](/analytics/devguides/reporting/core/v4/limits-quotas#analytics_reporting_api_v4) for details.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
         },
-        "event": {
-          "$ref": "EventData",
-          "description": "This field contains all the details pertaining to an event and will be set if `activity_type` equals `EVENT`."
+        "GetReportsResponse": {
+            "description": "The main response class which holds the reports from the Reporting API `batchGet` call.",
+            "id": "GetReportsResponse",
+            "properties": {
+                "queryCost": {
+                    "description": "The amount of resource quota tokens deducted to execute the query. Includes all responses.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "reports": {
+                    "description": "Responses corresponding to each of the request.",
+                    "items": {
+                        "$ref": "Report"
+                    },
+                    "type": "array"
+                },
+                "resourceQuotasRemaining": {
+                    "$ref": "ResourceQuotasRemaining",
+                    "description": "The amount of resource quota remaining for the property."
+                }
+            },
+            "type": "object"
+        },
+        "GoalData": {
+            "description": "Represents all the details pertaining to a goal.",
+            "id": "GoalData",
+            "properties": {
+                "goalCompletionLocation": {
+                    "description": "URL of the page where this goal was completed.",
+                    "type": "string"
+                },
+                "goalCompletions": {
+                    "description": "Total number of goal completions in this activity.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "goalIndex": {
+                    "description": "This identifies the goal as configured for the profile.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "goalName": {
+                    "description": "Name of the goal.",
+                    "type": "string"
+                },
+                "goalPreviousStep1": {
+                    "description": "URL of the page one step prior to the goal completion.",
+                    "type": "string"
+                },
+                "goalPreviousStep2": {
+                    "description": "URL of the page two steps prior to the goal completion.",
+                    "type": "string"
+                },
+                "goalPreviousStep3": {
+                    "description": "URL of the page three steps prior to the goal completion.",
+                    "type": "string"
+                },
+                "goalValue": {
+                    "description": "Value in this goal.",
+                    "format": "double",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "GoalSetData": {
+            "description": "Represents a set of goals that were reached in an activity.",
+            "id": "GoalSetData",
+            "properties": {
+                "goals": {
+                    "description": "All the goals that were reached in the current activity.",
+                    "items": {
+                        "$ref": "GoalData"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Metric": {
+            "description": "[Metrics](https://support.google.com/analytics/answer/1033861) are the quantitative measurements. For example, the metric `ga:users` indicates the total number of users for the requested time period.",
+            "id": "Metric",
+            "properties": {
+                "alias": {
+                    "description": "An alias for the metric expression is an alternate name for the expression. The alias can be used for filtering and sorting. This field is optional and is useful if the expression is not a single metric but a complex expression which cannot be used in filtering and sorting. The alias is also used in the response column header.",
+                    "type": "string"
+                },
+                "expression": {
+                    "description": "A metric expression in the request. An expression is constructed from one or more metrics and numbers. Accepted operators include: Plus (+), Minus (-), Negation (Unary -), Divided by (/), Multiplied by (*), Parenthesis, Positive cardinal numbers (0-9), can include decimals and is limited to 1024 characters. Example `ga:totalRefunds/ga:users`, in most cases the metric expression is just a single metric name like `ga:users`. Adding mixed `MetricType` (E.g., `CURRENCY` + `PERCENTAGE`) metrics will result in unexpected results.",
+                    "type": "string"
+                },
+                "formattingType": {
+                    "description": "Specifies how the metric expression should be formatted, for example `INTEGER`.",
+                    "enum": [
+                        "METRIC_TYPE_UNSPECIFIED",
+                        "INTEGER",
+                        "FLOAT",
+                        "CURRENCY",
+                        "PERCENT",
+                        "TIME"
+                    ],
+                    "enumDescriptions": [
+                        "Metric type is unspecified.",
+                        "Integer metric.",
+                        "Float metric.",
+                        "Currency metric.",
+                        "Percentage metric.",
+                        "Time metric in `HH:MM:SS` format."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MetricFilter": {
+            "description": "MetricFilter specifies the filter on a metric.",
+            "id": "MetricFilter",
+            "properties": {
+                "comparisonValue": {
+                    "description": "The value to compare against.",
+                    "type": "string"
+                },
+                "metricName": {
+                    "description": "The metric that will be filtered on. A metricFilter must contain a metric name. A metric name can be an alias earlier defined as a metric or it can also be a metric expression.",
+                    "type": "string"
+                },
+                "not": {
+                    "description": "Logical `NOT` operator. If this boolean is set to true, then the matching metric values will be excluded in the report. The default is false.",
+                    "type": "boolean"
+                },
+                "operator": {
+                    "description": "Is the metric `EQUAL`, `LESS_THAN` or `GREATER_THAN` the comparisonValue, the default is `EQUAL`. If the operator is `IS_MISSING`, checks if the metric is missing and would ignore the comparisonValue.",
+                    "enum": [
+                        "OPERATOR_UNSPECIFIED",
+                        "EQUAL",
+                        "LESS_THAN",
+                        "GREATER_THAN",
+                        "IS_MISSING"
+                    ],
+                    "enumDescriptions": [
+                        "If the operator is not specified, it is treated as `EQUAL`.",
+                        "Should the value of the metric be exactly equal to the comparison value.",
+                        "Should the value of the metric be less than to the comparison value.",
+                        "Should the value of the metric be greater than to the comparison value.",
+                        "Validates if the metric is missing. Doesn't take comparisonValue into account."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MetricFilterClause": {
+            "description": "Represents a group of metric filters. Set the operator value to specify how the filters are logically combined.",
+            "id": "MetricFilterClause",
+            "properties": {
+                "filters": {
+                    "description": "The repeated set of filters. They are logically combined based on the operator specified.",
+                    "items": {
+                        "$ref": "MetricFilter"
+                    },
+                    "type": "array"
+                },
+                "operator": {
+                    "description": "The operator for combining multiple metric filters. If unspecified, it is treated as an `OR`.",
+                    "enum": [
+                        "OPERATOR_UNSPECIFIED",
+                        "OR",
+                        "AND"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified operator. It is treated as an `OR`.",
+                        "The logical `OR` operator.",
+                        "The logical `AND` operator."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MetricHeader": {
+            "description": "The headers for the metrics.",
+            "id": "MetricHeader",
+            "properties": {
+                "metricHeaderEntries": {
+                    "description": "Headers for the metrics in the response.",
+                    "items": {
+                        "$ref": "MetricHeaderEntry"
+                    },
+                    "type": "array"
+                },
+                "pivotHeaders": {
+                    "description": "Headers for the pivots in the response.",
+                    "items": {
+                        "$ref": "PivotHeader"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "MetricHeaderEntry": {
+            "description": "Header for the metrics.",
+            "id": "MetricHeaderEntry",
+            "properties": {
+                "name": {
+                    "description": "The name of the header.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "The type of the metric, for example `INTEGER`.",
+                    "enum": [
+                        "METRIC_TYPE_UNSPECIFIED",
+                        "INTEGER",
+                        "FLOAT",
+                        "CURRENCY",
+                        "PERCENT",
+                        "TIME"
+                    ],
+                    "enumDescriptions": [
+                        "Metric type is unspecified.",
+                        "Integer metric.",
+                        "Float metric.",
+                        "Currency metric.",
+                        "Percentage metric.",
+                        "Time metric in `HH:MM:SS` format."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "OrFiltersForSegment": {
+            "description": "A list of segment filters in the `OR` group are combined with the logical OR operator.",
+            "id": "OrFiltersForSegment",
+            "properties": {
+                "segmentFilterClauses": {
+                    "description": "List of segment filters to be combined with a `OR` operator.",
+                    "items": {
+                        "$ref": "SegmentFilterClause"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "OrderBy": {
+            "description": "Specifies the sorting options.",
+            "id": "OrderBy",
+            "properties": {
+                "fieldName": {
+                    "description": "The field which to sort by. The default sort order is ascending. Example: `ga:browser`. Note, that you can only specify one field for sort here. For example, `ga:browser, ga:city` is not valid.",
+                    "type": "string"
+                },
+                "orderType": {
+                    "description": "The order type. The default orderType is `VALUE`.",
+                    "enum": [
+                        "ORDER_TYPE_UNSPECIFIED",
+                        "VALUE",
+                        "DELTA",
+                        "SMART",
+                        "HISTOGRAM_BUCKET",
+                        "DIMENSION_AS_INTEGER"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified order type will be treated as sort based on value.",
+                        "The sort order is based on the value of the chosen column; looks only at the first date range.",
+                        "The sort order is based on the difference of the values of the chosen column between the first two date ranges. Usable only if there are exactly two date ranges.",
+                        "The sort order is based on weighted value of the chosen column. If column has n/d format, then weighted value of this ratio will be `(n + totals.n)/(d + totals.d)` Usable only for metrics that represent ratios.",
+                        "Histogram order type is applicable only to dimension columns with non-empty histogram-buckets.",
+                        "If the dimensions are fixed length numbers, ordinary sort would just work fine. `DIMENSION_AS_INTEGER` can be used if the dimensions are variable length numbers."
+                    ],
+                    "type": "string"
+                },
+                "sortOrder": {
+                    "description": "The sorting order for the field.",
+                    "enum": [
+                        "SORT_ORDER_UNSPECIFIED",
+                        "ASCENDING",
+                        "DESCENDING"
+                    ],
+                    "enumDescriptions": [
+                        "If the sort order is unspecified, the default is ascending.",
+                        "Ascending sort. The field will be sorted in an ascending manner.",
+                        "Descending sort. The field will be sorted in a descending manner."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PageviewData": {
+            "description": "Represents details collected when the visitor views a page.",
+            "id": "PageviewData",
+            "properties": {
+                "pagePath": {
+                    "description": "The URL of the page that the visitor viewed.",
+                    "type": "string"
+                },
+                "pageTitle": {
+                    "description": "The title of the page that the visitor viewed.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Pivot": {
+            "description": "The Pivot describes the pivot section in the request. The Pivot helps rearrange the information in the table for certain reports by pivoting your data on a second dimension.",
+            "id": "Pivot",
+            "properties": {
+                "dimensionFilterClauses": {
+                    "description": "DimensionFilterClauses are logically combined with an `AND` operator: only data that is included by all these DimensionFilterClauses contributes to the values in this pivot region. Dimension filters can be used to restrict the columns shown in the pivot region. For example if you have `ga:browser` as the requested dimension in the pivot region, and you specify key filters to restrict `ga:browser` to only \"IE\" or \"Firefox\", then only those two browsers would show up as columns.",
+                    "items": {
+                        "$ref": "DimensionFilterClause"
+                    },
+                    "type": "array"
+                },
+                "dimensions": {
+                    "description": "A list of dimensions to show as pivot columns. A Pivot can have a maximum of 4 dimensions. Pivot dimensions are part of the restriction on the total number of dimensions allowed in the request.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "maxGroupCount": {
+                    "description": "Specifies the maximum number of groups to return. The default value is 10, also the maximum value is 1,000.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "metrics": {
+                    "description": "The pivot metrics. Pivot metrics are part of the restriction on total number of metrics allowed in the request.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                },
+                "startGroup": {
+                    "description": "If k metrics were requested, then the response will contain some data-dependent multiple of k columns in the report. E.g., if you pivoted on the dimension `ga:browser` then you'd get k columns for \"Firefox\", k columns for \"IE\", k columns for \"Chrome\", etc. The ordering of the groups of columns is determined by descending order of \"total\" for the first of the k values. Ties are broken by lexicographic ordering of the first pivot dimension, then lexicographic ordering of the second pivot dimension, and so on. E.g., if the totals for the first value for Firefox, IE, and Chrome were 8, 2, 8, respectively, the order of columns would be Chrome, Firefox, IE. The following let you choose which of the groups of k columns are included in the response.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "PivotHeader": {
+            "description": "The headers for each of the pivot sections defined in the request.",
+            "id": "PivotHeader",
+            "properties": {
+                "pivotHeaderEntries": {
+                    "description": "A single pivot section header.",
+                    "items": {
+                        "$ref": "PivotHeaderEntry"
+                    },
+                    "type": "array"
+                },
+                "totalPivotGroupsCount": {
+                    "description": "The total number of groups for this pivot.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "PivotHeaderEntry": {
+            "description": "The headers for the each of the metric column corresponding to the metrics requested in the pivots section of the response.",
+            "id": "PivotHeaderEntry",
+            "properties": {
+                "dimensionNames": {
+                    "description": "The name of the dimensions in the pivot response.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "dimensionValues": {
+                    "description": "The values for the dimensions in the pivot.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "metric": {
+                    "$ref": "MetricHeaderEntry",
+                    "description": "The metric header for the metric in the pivot."
+                }
+            },
+            "type": "object"
+        },
+        "PivotValueRegion": {
+            "description": "The metric values in the pivot region.",
+            "id": "PivotValueRegion",
+            "properties": {
+                "values": {
+                    "description": "The values of the metrics in each of the pivot regions.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ProductData": {
+            "description": "Details of the products in an e-commerce transaction.",
+            "id": "ProductData",
+            "properties": {
+                "itemRevenue": {
+                    "description": "The total revenue from purchased product items.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "productName": {
+                    "description": "The product name, supplied by the e-commerce tracking application, for the purchased items.",
+                    "type": "string"
+                },
+                "productQuantity": {
+                    "description": "Total number of this product units in the transaction.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "productSku": {
+                    "description": "Unique code that represents the product.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Report": {
+            "description": "The data response corresponding to the request.",
+            "id": "Report",
+            "properties": {
+                "columnHeader": {
+                    "$ref": "ColumnHeader",
+                    "description": "The column headers."
+                },
+                "data": {
+                    "$ref": "ReportData",
+                    "description": "Response data."
+                },
+                "nextPageToken": {
+                    "description": "Page token to retrieve the next page of results in the list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReportData": {
+            "description": "The data part of the report.",
+            "id": "ReportData",
+            "properties": {
+                "dataLastRefreshed": {
+                    "description": "The last time the data in the report was refreshed. All the hits received before this timestamp are included in the calculation of the report.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "isDataGolden": {
+                    "description": "Indicates if response to this request is golden or not. Data is golden when the exact same request will not produce any new results if asked at a later point in time.",
+                    "type": "boolean"
+                },
+                "maximums": {
+                    "description": "Minimum and maximum values seen over all matching rows. These are both empty when `hideValueRanges` in the request is false, or when rowCount is zero.",
+                    "items": {
+                        "$ref": "DateRangeValues"
+                    },
+                    "type": "array"
+                },
+                "minimums": {
+                    "description": "Minimum and maximum values seen over all matching rows. These are both empty when `hideValueRanges` in the request is false, or when rowCount is zero.",
+                    "items": {
+                        "$ref": "DateRangeValues"
+                    },
+                    "type": "array"
+                },
+                "rowCount": {
+                    "description": "Total number of matching rows for this query.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "rows": {
+                    "description": "There's one ReportRow for every unique combination of dimensions.",
+                    "items": {
+                        "$ref": "ReportRow"
+                    },
+                    "type": "array"
+                },
+                "samplesReadCounts": {
+                    "description": "If the results are [sampled](https://support.google.com/analytics/answer/2637192), this returns the total number of samples read, one entry per date range. If the results are not sampled this field will not be defined. See [developer guide](/analytics/devguides/reporting/core/v4/basics#sampling) for details.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "samplingSpaceSizes": {
+                    "description": "If the results are [sampled](https://support.google.com/analytics/answer/2637192), this returns the total number of samples present, one entry per date range. If the results are not sampled this field will not be defined. See [developer guide](/analytics/devguides/reporting/core/v4/basics#sampling) for details.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "totals": {
+                    "description": "For each requested date range, for the set of all rows that match the query, every requested value format gets a total. The total for a value format is computed by first totaling the metrics mentioned in the value format and then evaluating the value format as a scalar expression. E.g., The \"totals\" for `3 / (ga:sessions + 2)` we compute `3 / ((sum of all relevant ga:sessions) + 2)`. Totals are computed before pagination.",
+                    "items": {
+                        "$ref": "DateRangeValues"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ReportRequest": {
+            "description": "The main request class which specifies the Reporting API request.",
+            "id": "ReportRequest",
+            "properties": {
+                "cohortGroup": {
+                    "$ref": "CohortGroup",
+                    "description": "Cohort group associated with this request. If there is a cohort group in the request the `ga:cohort` dimension must be present. Every [ReportRequest](#ReportRequest) within a `batchGet` method must contain the same `cohortGroup` definition."
+                },
+                "dateRanges": {
+                    "description": "Date ranges in the request. The request can have a maximum of 2 date ranges. The response will contain a set of metric values for each combination of the dimensions for each date range in the request. So, if there are two date ranges, there will be two set of metric values, one for the original date range and one for the second date range. The `reportRequest.dateRanges` field should not be specified for cohorts or Lifetime value requests. If a date range is not provided, the default date range is (startDate: current date - 7 days, endDate: current date - 1 day). Every [ReportRequest](#ReportRequest) within a `batchGet` method must contain the same `dateRanges` definition.",
+                    "items": {
+                        "$ref": "DateRange"
+                    },
+                    "type": "array"
+                },
+                "dimensionFilterClauses": {
+                    "description": "The dimension filter clauses for filtering Dimension Values. They are logically combined with the `AND` operator. Note that filtering occurs before any dimensions are aggregated, so that the returned metrics represent the total for only the relevant dimensions.",
+                    "items": {
+                        "$ref": "DimensionFilterClause"
+                    },
+                    "type": "array"
+                },
+                "dimensions": {
+                    "description": "The dimensions requested. Requests can have a total of 9 dimensions.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "filtersExpression": {
+                    "description": "Dimension or metric filters that restrict the data returned for your request. To use the `filtersExpression`, supply a dimension or metric on which to filter, followed by the filter expression. For example, the following expression selects `ga:browser` dimension which starts with Firefox; `ga:browser=~^Firefox`. For more information on dimensions and metric filters, see [Filters reference](https://developers.google.com/analytics/devguides/reporting/core/v3/reference#filters).",
+                    "type": "string"
+                },
+                "hideTotals": {
+                    "description": "If set to true, hides the total of all metrics for all the matching rows, for every date range. The default false and will return the totals.",
+                    "type": "boolean"
+                },
+                "hideValueRanges": {
+                    "description": "If set to true, hides the minimum and maximum across all matching rows. The default is false and the value ranges are returned.",
+                    "type": "boolean"
+                },
+                "includeEmptyRows": {
+                    "description": "If set to false, the response does not include rows if all the retrieved metrics are equal to zero. The default is false which will exclude these rows.",
+                    "type": "boolean"
+                },
+                "metricFilterClauses": {
+                    "description": "The metric filter clauses. They are logically combined with the `AND` operator. Metric filters look at only the first date range and not the comparing date range. Note that filtering on metrics occurs after the metrics are aggregated.",
+                    "items": {
+                        "$ref": "MetricFilterClause"
+                    },
+                    "type": "array"
+                },
+                "metrics": {
+                    "description": "The metrics requested. Requests must specify at least one metric. Requests can have a total of 10 metrics.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                },
+                "orderBys": {
+                    "description": "Sort order on output rows. To compare two rows, the elements of the following are applied in order until a difference is found. All date ranges in the output get the same row order.",
+                    "items": {
+                        "$ref": "OrderBy"
+                    },
+                    "type": "array"
+                },
+                "pageSize": {
+                    "description": "Page size is for paging and specifies the maximum number of returned rows. Page size should be >= 0. A query returns the default of 1,000 rows. The Analytics Core Reporting API returns a maximum of 100,000 rows per request, no matter how many you ask for. It can also return fewer rows than requested, if there aren't as many dimension segments as you expect. For instance, there are fewer than 300 possible values for `ga:country`, so when segmenting only by country, you can't get more than 300 rows, even if you set `pageSize` to a higher value.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "pageToken": {
+                    "description": "A continuation token to get the next page of the results. Adding this to the request will return the rows after the pageToken. The pageToken should be the value returned in the nextPageToken parameter in the response to the GetReports request.",
+                    "type": "string"
+                },
+                "pivots": {
+                    "description": "The pivot definitions. Requests can have a maximum of 2 pivots.",
+                    "items": {
+                        "$ref": "Pivot"
+                    },
+                    "type": "array"
+                },
+                "samplingLevel": {
+                    "description": "The desired report [sample](https://support.google.com/analytics/answer/2637192) size. If the the `samplingLevel` field is unspecified the `DEFAULT` sampling level is used. Every [ReportRequest](#ReportRequest) within a `batchGet` method must contain the same `samplingLevel` definition. See [developer guide](/analytics/devguides/reporting/core/v4/basics#sampling) for details.",
+                    "enum": [
+                        "SAMPLING_UNSPECIFIED",
+                        "DEFAULT",
+                        "SMALL",
+                        "LARGE"
+                    ],
+                    "enumDescriptions": [
+                        "If the `samplingLevel` field is unspecified the `DEFAULT` sampling level is used.",
+                        "Returns response with a sample size that balances speed and accuracy.",
+                        "It returns a fast response with a smaller sampling size.",
+                        "Returns a more accurate response using a large sampling size. But this may result in response being slower."
+                    ],
+                    "type": "string"
+                },
+                "segments": {
+                    "description": "Segment the data returned for the request. A segment definition helps look at a subset of the segment request. A request can contain up to four segments. Every [ReportRequest](#ReportRequest) within a `batchGet` method must contain the same `segments` definition. Requests with segments must have the `ga:segment` dimension.",
+                    "items": {
+                        "$ref": "Segment"
+                    },
+                    "type": "array"
+                },
+                "viewId": {
+                    "description": "The Analytics [view ID](https://support.google.com/analytics/answer/1009618) from which to retrieve data. Every [ReportRequest](#ReportRequest) within a `batchGet` method must contain the same `viewId`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReportRow": {
+            "description": "A row in the report.",
+            "id": "ReportRow",
+            "properties": {
+                "dimensions": {
+                    "description": "List of requested dimensions.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "metrics": {
+                    "description": "List of metrics for each requested DateRange.",
+                    "items": {
+                        "$ref": "DateRangeValues"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ResourceQuotasRemaining": {
+            "description": "The resource quota tokens remaining for the property after the request is completed.",
+            "id": "ResourceQuotasRemaining",
+            "properties": {
+                "dailyQuotaTokensRemaining": {
+                    "description": "Daily resource quota remaining remaining.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "hourlyQuotaTokensRemaining": {
+                    "description": "Hourly resource quota tokens remaining.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "ScreenviewData": {
+            "id": "ScreenviewData",
+            "properties": {
+                "appName": {
+                    "description": "The application name.",
+                    "type": "string"
+                },
+                "mobileDeviceBranding": {
+                    "description": "Mobile manufacturer or branded name. Eg: \"Google\", \"Apple\" etc.",
+                    "type": "string"
+                },
+                "mobileDeviceModel": {
+                    "description": "Mobile device model. Eg: \"Pixel\", \"iPhone\" etc.",
+                    "type": "string"
+                },
+                "screenName": {
+                    "description": "The name of the screen.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SearchUserActivityRequest": {
+            "description": "The request to fetch User Report from Reporting API `userActivity:get` call.",
+            "id": "SearchUserActivityRequest",
+            "properties": {
+                "activityTypes": {
+                    "description": "Set of all activity types being requested. Only acvities matching these types will be returned in the response. If empty, all activies will be returned.",
+                    "items": {
+                        "enum": [
+                            "ACTIVITY_TYPE_UNSPECIFIED",
+                            "PAGEVIEW",
+                            "SCREENVIEW",
+                            "GOAL",
+                            "ECOMMERCE",
+                            "EVENT"
+                        ],
+                        "enumDescriptions": [
+                            "ActivityType will never have this value in the response. Using this type in the request will result in an error.",
+                            "Used when the activity resulted out of a visitor viewing a page.",
+                            "Used when the activity resulted out of a visitor using an application on a mobile device.",
+                            "Used to denote that a goal type activity.",
+                            "An e-commerce transaction was performed by the visitor on the page.",
+                            "Used when the activity is an event."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "dateRange": {
+                    "$ref": "DateRange",
+                    "description": "Date range for which to retrieve the user activity. If a date range is not provided, the default date range is (startDate: current date - 7 days, endDate: current date - 1 day)."
+                },
+                "pageSize": {
+                    "description": "Page size is for paging and specifies the maximum number of returned rows. Page size should be > 0. If the value is 0 or if the field isn't specified, the request returns the default of 1000 rows per page.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "pageToken": {
+                    "description": "A continuation token to get the next page of the results. Adding this to the request will return the rows after the pageToken. The pageToken should be the value returned in the nextPageToken parameter in the response to the [SearchUserActivityRequest](#SearchUserActivityRequest) request.",
+                    "type": "string"
+                },
+                "user": {
+                    "$ref": "User",
+                    "description": "Required. Unique user Id to query for. Every [SearchUserActivityRequest](#SearchUserActivityRequest) must contain this field."
+                },
+                "viewId": {
+                    "description": "Required. The Analytics [view ID](https://support.google.com/analytics/answer/1009618) from which to retrieve data. Every [SearchUserActivityRequest](#SearchUserActivityRequest) must contain the `viewId`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SearchUserActivityResponse": {
+            "description": "The response from `userActivity:get` call.",
+            "id": "SearchUserActivityResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "This token should be passed to [SearchUserActivityRequest](#SearchUserActivityRequest) to retrieve the next page.",
+                    "type": "string"
+                },
+                "sampleRate": {
+                    "description": "This field represents the [sampling rate](https://support.google.com/analytics/answer/2637192) for the given request and is a number between 0.0 to 1.0. See [developer guide](/analytics/devguides/reporting/core/v4/basics#sampling) for details.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "sessions": {
+                    "description": "Each record represents a session (device details, duration, etc).",
+                    "items": {
+                        "$ref": "UserActivitySession"
+                    },
+                    "type": "array"
+                },
+                "totalRows": {
+                    "description": "Total rows returned by this query (across different pages).",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "Segment": {
+            "description": "The segment definition, if the report needs to be segmented. A Segment is a subset of the Analytics data. For example, of the entire set of users, one Segment might be users from a particular country or city.",
+            "id": "Segment",
+            "properties": {
+                "dynamicSegment": {
+                    "$ref": "DynamicSegment",
+                    "description": "A dynamic segment definition in the request."
+                },
+                "segmentId": {
+                    "description": "The segment ID of a built-in or custom segment, for example `gaid::-3`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SegmentDefinition": {
+            "description": "SegmentDefinition defines the segment to be a set of SegmentFilters which are combined together with a logical `AND` operation.",
+            "id": "SegmentDefinition",
+            "properties": {
+                "segmentFilters": {
+                    "description": "A segment is defined by a set of segment filters which are combined together with a logical `AND` operation.",
+                    "items": {
+                        "$ref": "SegmentFilter"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "SegmentDimensionFilter": {
+            "description": "Dimension filter specifies the filtering options on a dimension.",
+            "id": "SegmentDimensionFilter",
+            "properties": {
+                "caseSensitive": {
+                    "description": "Should the match be case sensitive, ignored for `IN_LIST` operator.",
+                    "type": "boolean"
+                },
+                "dimensionName": {
+                    "description": "Name of the dimension for which the filter is being applied.",
+                    "type": "string"
+                },
+                "expressions": {
+                    "description": "The list of expressions, only the first element is used for all operators",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "maxComparisonValue": {
+                    "description": "Maximum comparison values for `BETWEEN` match type.",
+                    "type": "string"
+                },
+                "minComparisonValue": {
+                    "description": "Minimum comparison values for `BETWEEN` match type.",
+                    "type": "string"
+                },
+                "operator": {
+                    "description": "The operator to use to match the dimension with the expressions.",
+                    "enum": [
+                        "OPERATOR_UNSPECIFIED",
+                        "REGEXP",
+                        "BEGINS_WITH",
+                        "ENDS_WITH",
+                        "PARTIAL",
+                        "EXACT",
+                        "IN_LIST",
+                        "NUMERIC_LESS_THAN",
+                        "NUMERIC_GREATER_THAN",
+                        "NUMERIC_BETWEEN"
+                    ],
+                    "enumDescriptions": [
+                        "If the match type is unspecified, it is treated as a REGEXP.",
+                        "The match expression is treated as a regular expression. All other match types are not treated as regular expressions.",
+                        "Matches the values which begin with the match expression provided.",
+                        "Matches the values which end with the match expression provided.",
+                        "Substring match.",
+                        "The value should match the match expression entirely.",
+                        "This option is used to specify a dimension filter whose expression can take any value from a selected list of values. This helps avoiding evaluating multiple exact match dimension filters which are OR'ed for every single response row. For example: expressions: [\"A\", \"B\", \"C\"] Any response row whose dimension has it is value as A, B or C, matches this DimensionFilter.",
+                        "Integer comparison filters. case sensitivity is ignored for these and the expression is assumed to be a string representing an integer. Failure conditions: - if expression is not a valid int64, the client should expect an error. - input dimensions that are not valid int64 values will never match the filter. Checks if the dimension is numerically less than the match expression.",
+                        "Checks if the dimension is numerically greater than the match expression.",
+                        "Checks if the dimension is numerically between the minimum and maximum of the match expression, boundaries excluded."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SegmentFilter": {
+            "description": "SegmentFilter defines the segment to be either a simple or a sequence segment. A simple segment condition contains dimension and metric conditions to select the sessions or users. A sequence segment condition can be used to select users or sessions based on sequential conditions.",
+            "id": "SegmentFilter",
+            "properties": {
+                "not": {
+                    "description": "If true, match the complement of simple or sequence segment. For example, to match all visits not from \"New York\", we can define the segment as follows: \"sessionSegment\": { \"segmentFilters\": [{ \"simpleSegment\" :{ \"orFiltersForSegment\": [{ \"segmentFilterClauses\":[{ \"dimensionFilter\": { \"dimensionName\": \"ga:city\", \"expressions\": [\"New York\"] } }] }] }, \"not\": \"True\" }] },",
+                    "type": "boolean"
+                },
+                "sequenceSegment": {
+                    "$ref": "SequenceSegment",
+                    "description": "Sequence conditions consist of one or more steps, where each step is defined by one or more dimension/metric conditions. Multiple steps can be combined with special sequence operators."
+                },
+                "simpleSegment": {
+                    "$ref": "SimpleSegment",
+                    "description": "A Simple segment conditions consist of one or more dimension/metric conditions that can be combined"
+                }
+            },
+            "type": "object"
+        },
+        "SegmentFilterClause": {
+            "description": "Filter Clause to be used in a segment definition, can be wither a metric or a dimension filter.",
+            "id": "SegmentFilterClause",
+            "properties": {
+                "dimensionFilter": {
+                    "$ref": "SegmentDimensionFilter",
+                    "description": "Dimension Filter for the segment definition."
+                },
+                "metricFilter": {
+                    "$ref": "SegmentMetricFilter",
+                    "description": "Metric Filter for the segment definition."
+                },
+                "not": {
+                    "description": "Matches the complement (`!`) of the filter.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "SegmentMetricFilter": {
+            "description": "Metric filter to be used in a segment filter clause.",
+            "id": "SegmentMetricFilter",
+            "properties": {
+                "comparisonValue": {
+                    "description": "The value to compare against. If the operator is `BETWEEN`, this value is treated as minimum comparison value.",
+                    "type": "string"
+                },
+                "maxComparisonValue": {
+                    "description": "Max comparison value is only used for `BETWEEN` operator.",
+                    "type": "string"
+                },
+                "metricName": {
+                    "description": "The metric that will be filtered on. A `metricFilter` must contain a metric name.",
+                    "type": "string"
+                },
+                "operator": {
+                    "description": "Specifies is the operation to perform to compare the metric. The default is `EQUAL`.",
+                    "enum": [
+                        "UNSPECIFIED_OPERATOR",
+                        "LESS_THAN",
+                        "GREATER_THAN",
+                        "EQUAL",
+                        "BETWEEN"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified operator is treated as `LESS_THAN` operator.",
+                        "Checks if the metric value is less than comparison value.",
+                        "Checks if the metric value is greater than comparison value.",
+                        "Equals operator.",
+                        "For between operator, both the minimum and maximum are exclusive. We will use `LT` and `GT` for comparison."
+                    ],
+                    "type": "string"
+                },
+                "scope": {
+                    "description": "Scope for a metric defines the level at which that metric is defined. The specified metric scope must be equal to or greater than its primary scope as defined in the data model. The primary scope is defined by if the segment is selecting users or sessions.",
+                    "enum": [
+                        "UNSPECIFIED_SCOPE",
+                        "PRODUCT",
+                        "HIT",
+                        "SESSION",
+                        "USER"
+                    ],
+                    "enumDescriptions": [
+                        "If the scope is unspecified, it defaults to the condition scope, `USER` or `SESSION` depending on if the segment is trying to choose users or sessions.",
+                        "Product scope.",
+                        "Hit scope.",
+                        "Session scope.",
+                        "User scope."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SegmentSequenceStep": {
+            "description": "A segment sequence definition.",
+            "id": "SegmentSequenceStep",
+            "properties": {
+                "matchType": {
+                    "description": "Specifies if the step immediately precedes or can be any time before the next step.",
+                    "enum": [
+                        "UNSPECIFIED_MATCH_TYPE",
+                        "PRECEDES",
+                        "IMMEDIATELY_PRECEDES"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified match type is treated as precedes.",
+                        "Operator indicates that the previous step precedes the next step.",
+                        "Operator indicates that the previous step immediately precedes the next step."
+                    ],
+                    "type": "string"
+                },
+                "orFiltersForSegment": {
+                    "description": "A sequence is specified with a list of Or grouped filters which are combined with `AND` operator.",
+                    "items": {
+                        "$ref": "OrFiltersForSegment"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "SequenceSegment": {
+            "description": "Sequence conditions consist of one or more steps, where each step is defined by one or more dimension/metric conditions. Multiple steps can be combined with special sequence operators.",
+            "id": "SequenceSegment",
+            "properties": {
+                "firstStepShouldMatchFirstHit": {
+                    "description": "If set, first step condition must match the first hit of the visitor (in the date range).",
+                    "type": "boolean"
+                },
+                "segmentSequenceSteps": {
+                    "description": "The list of steps in the sequence.",
+                    "items": {
+                        "$ref": "SegmentSequenceStep"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "SimpleSegment": {
+            "description": "A Simple segment conditions consist of one or more dimension/metric conditions that can be combined.",
+            "id": "SimpleSegment",
+            "properties": {
+                "orFiltersForSegment": {
+                    "description": "A list of segment filters groups which are combined with logical `AND` operator.",
+                    "items": {
+                        "$ref": "OrFiltersForSegment"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "TransactionData": {
+            "description": "Represents details collected when the visitor performs a transaction on the page.",
+            "id": "TransactionData",
+            "properties": {
+                "transactionId": {
+                    "description": "The transaction ID, supplied by the e-commerce tracking method, for the purchase in the shopping cart.",
+                    "type": "string"
+                },
+                "transactionRevenue": {
+                    "description": "The total sale revenue (excluding shipping and tax) of the transaction.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "transactionShipping": {
+                    "description": "Total cost of shipping.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "transactionTax": {
+                    "description": "Total tax for the transaction.",
+                    "format": "double",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "User": {
+            "description": "Contains information to identify a particular user uniquely.",
+            "id": "User",
+            "properties": {
+                "type": {
+                    "description": "Type of the user in the request. The field `userId` is associated with this type.",
+                    "enum": [
+                        "USER_ID_TYPE_UNSPECIFIED",
+                        "USER_ID",
+                        "CLIENT_ID"
+                    ],
+                    "enumDescriptions": [
+                        "When the User Id Type is not specified, the default type used will be CLIENT_ID.",
+                        "A single user, like a signed-in user account, that may interact with content across one or more devices and / or browser instances.",
+                        "Analytics assigned client_id."
+                    ],
+                    "type": "string"
+                },
+                "userId": {
+                    "description": "Unique Id of the user for which the data is being requested.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UserActivitySession": {
+            "description": "This represents a user session performed on a specific device at a certain time over a period of time.",
+            "id": "UserActivitySession",
+            "properties": {
+                "activities": {
+                    "description": "Represents a detailed view into each of the activity in this session.",
+                    "items": {
+                        "$ref": "Activity"
+                    },
+                    "type": "array"
+                },
+                "dataSource": {
+                    "description": "The data source of a hit. By default, hits sent from analytics.js are reported as \"web\" and hits sent from the mobile SDKs are reported as \"app\". These values can be overridden in the Measurement Protocol.",
+                    "type": "string"
+                },
+                "deviceCategory": {
+                    "description": "The type of device used: \"mobile\", \"tablet\" etc.",
+                    "type": "string"
+                },
+                "platform": {
+                    "description": "Platform on which the activity happened: \"android\", \"ios\" etc.",
+                    "type": "string"
+                },
+                "sessionDate": {
+                    "description": "Date of this session in ISO-8601 format.",
+                    "type": "string"
+                },
+                "sessionId": {
+                    "description": "Unique ID of the session.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         }
-      }
     },
-    "SimpleSegment": {
-      "id": "SimpleSegment",
-      "properties": {
-        "orFiltersForSegment": {
-          "type": "array",
-          "description": "A list of segment filters groups which are combined with logical `AND` operator.",
-          "items": {
-            "$ref": "OrFiltersForSegment"
-          }
-        }
-      },
-      "description": "A Simple segment conditions consist of one or more dimension/metric conditions that can be combined.",
-      "type": "object"
-    },
-    "PivotHeader": {
-      "type": "object",
-      "id": "PivotHeader",
-      "description": "The headers for each of the pivot sections defined in the request.",
-      "properties": {
-        "totalPivotGroupsCount": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The total number of groups for this pivot."
-        },
-        "pivotHeaderEntries": {
-          "type": "array",
-          "description": "A single pivot section header.",
-          "items": {
-            "$ref": "PivotHeaderEntry"
-          }
-        }
-      }
-    }
-  },
-  "servicePath": "",
-  "parameters": {
-    "quotaUser": {
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "location": "query",
-      "type": "string"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "type": "boolean",
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "default": "true"
-    },
-    "fields": {
-      "type": "string",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "location": "query"
-    },
-    "key": {
-      "type": "string",
-      "location": "query",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token."
-    },
-    "upload_protocol": {
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "location": "query"
-    },
-    "$.xgafv": {
-      "enum": [
-        "1",
-        "2"
-      ],
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "description": "V1 error format.",
-      "location": "query",
-      "type": "string"
-    },
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
-    },
-    "uploadType": {
-      "location": "query",
-      "type": "string",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
-    },
-    "alt": {
-      "description": "Data format for response.",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "location": "query",
-      "default": "json",
-      "type": "string"
-    },
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "location": "query"
-    }
-  },
-  "canonicalName": "AnalyticsReporting",
-  "revision": "20200902",
-  "rootUrl": "https://analyticsreporting.googleapis.com/",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/analytics.readonly": {
-          "description": "View your Google Analytics data"
-        },
-        "https://www.googleapis.com/auth/analytics": {
-          "description": "View and manage your Google Analytics data"
-        }
-      }
-    }
-  }
-}
+    "servicePath": "",
+    "title": "Analytics Reporting API",
+    "version": "v4",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/androidenterprise.v1.json b/googleapiclient/discovery_cache/documents/androidenterprise.v1.json
index c7facbd..acc37c4 100644
--- a/googleapiclient/discovery_cache/documents/androidenterprise.v1.json
+++ b/googleapiclient/discovery_cache/documents/androidenterprise.v1.json
@@ -1,4780 +1,4780 @@
 {
-  "title": "Google Play EMM API",
-  "kind": "discovery#restDescription",
-  "description": "Manages the deployment of apps to Android Enterprise devices.",
-  "name": "androidenterprise",
-  "basePath": "",
-  "schemas": {
-    "NotificationSet": {
-      "properties": {
-        "notification": {
-          "items": {
-            "$ref": "Notification"
-          },
-          "description": "The notifications received, or empty if no notifications are present.",
-          "type": "array"
-        },
-        "notificationSetId": {
-          "type": "string",
-          "description": "The notification set ID, required to mark the notification as received with the Enterprises.AcknowledgeNotification API. This will be omitted if no notifications are present."
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/androidenterprise": {
+                    "description": "Manage corporate Android devices"
+                }
+            }
         }
-      },
-      "id": "NotificationSet",
-      "description": "A resource returned by the PullNotificationSet API, which contains a collection of notifications for enterprises associated with the service account authenticated for the request.",
-      "type": "object"
     },
-    "Install": {
-      "properties": {
-        "installState": {
-          "type": "string",
-          "enum": [
-            "installed",
-            "installPending"
-          ],
-          "description": "Install state. The state \"installPending\" means that an install request has recently been made and download to the device is in progress. The state \"installed\" means that the app has been installed. This field is read-only.",
-          "enumDescriptions": [
-            "",
-            ""
-          ]
-        },
-        "productId": {
-          "type": "string",
-          "description": "The ID of the product that the install is for. For example, \"app:com.google.android.gm\"."
-        },
-        "versionCode": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The version of the installed product. Guaranteed to be set only if the install state is \"installed\"."
-        }
-      },
-      "id": "Install",
-      "description": "The existence of an Installs resource indicates that an app is installed on a particular device (or that an install is pending). The API can be used to create an install resource using the update method. This triggers the actual install of the app on the device. If the user does not already have an entitlement for the app, then an attempt is made to create one. If this fails (for example, because the app is not free and there is no available license), then the creation of the install fails. The API can also be used to update an installed app. If the update method is used on an existing install, then the app will be updated to the latest available version. Note that it is not possible to force the installation of a specific version of an app: the version code is read-only. If a user installs an app themselves (as permitted by the enterprise), then again an install resource and possibly an entitlement resource are automatically created. The API can also be used to delete an install resource, which triggers the removal of the app from the device. Note that deleting an install does not automatically remove the corresponding entitlement, even if there are no remaining installs. The install resource will also be deleted if the user uninstalls the app themselves.",
-      "type": "object"
+    "basePath": "",
+    "baseUrl": "https://androidenterprise.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Android Enterprise",
+    "description": "Manages the deployment of apps to Android Enterprise devices.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://developers.google.com/android/work/play/emm-api",
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
     },
-    "DeviceState": {
-      "id": "DeviceState",
-      "type": "object",
-      "description": "The state of a user's device, as accessed by the getState and setState methods on device resources.",
-      "properties": {
-        "accountState": {
-          "enum": [
-            "enabled",
-            "disabled"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "description": "The state of the Google account on the device. \"enabled\" indicates that the Google account on the device can be used to access Google services (including Google Play), while \"disabled\" means that it cannot. A new device is initially in the \"disabled\" state."
-        }
-      }
-    },
-    "VariableSet": {
-      "id": "VariableSet",
-      "type": "object",
-      "description": "A variable set is a key-value pair of EMM-provided placeholders and its corresponding value, which is attributed to a user. For example, $FIRSTNAME could be a placeholder, and its value could be Alice. Placeholders should start with a '$' sign and should be alphanumeric only.",
-      "properties": {
-        "userValue": {
-          "description": "The value of the placeholder, specific to the user.",
-          "type": "string"
-        },
-        "placeholder": {
-          "type": "string",
-          "description": "The placeholder string; defined by EMM."
-        }
-      }
-    },
-    "ApprovalUrlInfo": {
-      "properties": {
-        "approvalUrl": {
-          "type": "string",
-          "description": "A URL that displays a product's permissions and that can also be used to approve the product with the Products.approve call."
-        }
-      },
-      "type": "object",
-      "id": "ApprovalUrlInfo",
-      "description": "Information on an approval URL."
-    },
-    "ServiceAccountKey": {
-      "id": "ServiceAccountKey",
-      "description": "Credentials that can be used to authenticate as a service account.",
-      "type": "object",
-      "properties": {
-        "id": {
-          "description": "An opaque, unique identifier for this ServiceAccountKey. Assigned by the server.",
-          "type": "string"
-        },
-        "data": {
-          "type": "string",
-          "description": "The body of the private key credentials file, in string format. This is only populated when the ServiceAccountKey is created, and is not stored by Google."
-        },
-        "publicData": {
-          "description": "Public key data for the credentials file. This is an X.509 cert. If you are using the googleCredentials key type, this is identical to the cert that can be retrieved by using the X.509 cert url inside of the credentials file.",
-          "type": "string"
-        },
-        "type": {
-          "annotations": {
-            "required": [
-              "androidenterprise.serviceaccountkeys.insert"
-            ]
-          },
-          "enumDescriptions": [
-            "Google Credentials File format.",
-            "PKCS12 format. The password for the PKCS12 file is 'notasecret'. For more information, see https://tools.ietf.org/html/rfc7292. The data for keys of this type are base64 encoded according to RFC 4648 Section 4. See http://tools.ietf.org/html/rfc4648#section-4."
-          ],
-          "enum": [
-            "googleCredentials",
-            "pkcs12"
-          ],
-          "type": "string",
-          "description": "The file format of the generated key data."
-        }
-      }
-    },
-    "KeyedAppState": {
-      "type": "object",
-      "id": "KeyedAppState",
-      "description": "Represents a keyed app state containing a key, timestamp, severity level, optional description, and optional data.",
-      "properties": {
-        "key": {
-          "type": "string",
-          "description": "Key indicating what the app is providing a state for. The content of the key is set by the app's developer. To prevent XSS, we recommend removing any HTML from the key before displaying it. This field will always be present."
-        },
-        "message": {
-          "description": "Free-form, human-readable message describing the app state. For example, an error message. To prevent XSS, we recommend removing any HTML from the message before displaying it.",
-          "type": "string"
-        },
-        "severity": {
-          "description": "Severity of the app state. This field will always be present.",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "severityUnknown",
-            "severityInfo",
-            "severityError"
-          ],
-          "type": "string"
-        },
-        "stateTimestampMillis": {
-          "description": "Timestamp of when the app set the state in milliseconds since epoch. This field will always be present.",
-          "format": "int64",
-          "type": "string"
-        },
-        "data": {
-          "description": "Additional field intended for machine-readable data. For example, a number or JSON object. To prevent XSS, we recommend removing any HTML from the data before displaying it.",
-          "type": "string"
-        }
-      }
-    },
-    "StorePage": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "items": {
-            "$ref": "LocalizedText"
-          },
-          "type": "array",
-          "description": "Ordered list of localized strings giving the name of this page. The text displayed is the one that best matches the user locale, or the first entry if there is no good match. There needs to be at least one entry."
-        },
-        "id": {
-          "description": "Unique ID of this page. Assigned by the server. Immutable once assigned.",
-          "type": "string"
-        },
-        "link": {
-          "items": {
-            "type": "string"
-          },
-          "description": "Ordered list of pages a user should be able to reach from this page. The list can't include this page. It is recommended that the basic pages are created first, before adding the links between pages. The API doesn't verify that the pages exist or the pages are reachable.",
-          "type": "array"
-        }
-      },
-      "description": "Definition of a managed Google Play store page, made of a localized name and links to other pages. A page also contains clusters defined as a subcollection.",
-      "id": "StorePage"
-    },
-    "ManagedConfigurationsSettings": {
-      "description": "A managed configurations settings resource contains the set of managed properties that have been configured for an Android app to be applied to a set of users. The app's developer would have defined configurable properties in the managed configurations schema.",
-      "type": "object",
-      "id": "ManagedConfigurationsSettings",
-      "properties": {
-        "mcmId": {
-          "type": "string",
-          "description": "The ID of the managed configurations settings."
-        },
-        "name": {
-          "type": "string",
-          "description": "The name of the managed configurations settings."
-        },
-        "lastUpdatedTimestampMillis": {
-          "type": "string",
-          "description": "The last updated time of the managed configuration settings in milliseconds since 1970-01-01T00:00:00Z.",
-          "format": "int64"
-        }
-      }
-    },
-    "UsersListResponse": {
-      "type": "object",
-      "id": "UsersListResponse",
-      "properties": {
-        "user": {
-          "description": "A user of an enterprise.",
-          "items": {
-            "$ref": "User"
-          },
-          "type": "array"
-        }
-      }
-    },
-    "ManagedConfiguration": {
-      "description": "A managed configuration resource contains the set of managed properties defined by the app developer in the app's managed configurations schema, as well as any configuration variables defined for the user.",
-      "type": "object",
-      "properties": {
-        "kind": {
-          "description": "Deprecated.",
-          "type": "string"
-        },
-        "managedProperty": {
-          "items": {
-            "$ref": "ManagedProperty"
-          },
-          "type": "array",
-          "description": "The set of managed properties for this configuration."
-        },
-        "productId": {
-          "description": "The ID of the product that the managed configuration is for, e.g. \"app:com.google.android.gm\".",
-          "type": "string"
-        },
-        "configurationVariables": {
-          "description": "Contains the ID of the managed configuration profile and the set of configuration variables (if any) defined for the user.",
-          "$ref": "ConfigurationVariables"
-        }
-      },
-      "id": "ManagedConfiguration"
-    },
-    "AdministratorWebTokenSpecManagedConfigurations": {
-      "properties": {
-        "enabled": {
-          "description": "Whether the Managed Configuration page is displayed. Default is true.",
-          "type": "boolean"
-        }
-      },
-      "id": "AdministratorWebTokenSpecManagedConfigurations",
-      "type": "object"
-    },
-    "SignupInfo": {
-      "id": "SignupInfo",
-      "description": "A resource returned by the GenerateSignupUrl API, which contains the Signup URL and Completion Token.",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Deprecated."
-        },
-        "completionToken": {
-          "description": "An opaque token that will be required, along with the Enterprise Token, for obtaining the enterprise resource from CompleteSignup.",
-          "type": "string"
-        },
-        "url": {
-          "description": "A URL under which the Admin can sign up for an enterprise. The page pointed to cannot be rendered in an iframe.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "EnterprisesSendTestPushNotificationResponse": {
-      "type": "object",
-      "properties": {
-        "topicName": {
-          "description": "The name of the Cloud Pub/Sub topic to which notifications for this enterprise's enrolled account will be sent.",
-          "type": "string"
-        },
-        "messageId": {
-          "type": "string",
-          "description": "The message ID of the test push notification that was sent."
-        }
-      },
-      "id": "EnterprisesSendTestPushNotificationResponse"
-    },
-    "DeviceReport": {
-      "id": "DeviceReport",
-      "description": "Device report updated with the latest app states for managed apps on the device.",
-      "type": "object",
-      "properties": {
-        "lastUpdatedTimestampMillis": {
-          "type": "string",
-          "description": "The timestamp of the last report update in milliseconds since epoch. This field will always be present.",
-          "format": "int64"
-        },
-        "appState": {
-          "items": {
-            "$ref": "AppState"
-          },
-          "type": "array",
-          "description": "List of app states set by managed apps on the device. App states are defined by the app's developers. This field will always be present."
-        }
-      }
-    },
-    "ManagedProperty": {
-      "type": "object",
-      "id": "ManagedProperty",
-      "description": "A managed property of a managed configuration. The property must match one of the properties in the app restrictions schema of the product. Exactly one of the value fields must be populated, and it must match the property's type in the app restrictions schema.",
-      "properties": {
-        "valueBundle": {
-          "description": "The bundle of managed properties - this will only be present if type of the property is bundle.",
-          "$ref": "ManagedPropertyBundle"
-        },
-        "valueBool": {
-          "type": "boolean",
-          "description": "The boolean value - this will only be present if type of the property is bool."
-        },
-        "valueBundleArray": {
-          "type": "array",
-          "items": {
-            "$ref": "ManagedPropertyBundle"
-          },
-          "description": "The list of bundles of properties - this will only be present if type of the property is bundle_array."
-        },
-        "valueInteger": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The integer value - this will only be present if type of the property is integer."
-        },
-        "valueStringArray": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "The list of string values - this will only be present if type of the property is multiselect."
-        },
-        "valueString": {
-          "type": "string",
-          "description": "The string value - this will only be present if type of the property is string, choice or hidden."
-        },
-        "key": {
-          "type": "string",
-          "description": "The unique key that identifies the property."
-        }
-      }
-    },
-    "NewPermissionsEvent": {
-      "description": "An event generated when new permissions are added to an app.",
-      "type": "object",
-      "id": "NewPermissionsEvent",
-      "properties": {
-        "productId": {
-          "type": "string",
-          "description": "The id of the product (e.g. \"app:com.google.android.gm\") for which new permissions were added. This field will always be present."
-        },
-        "requestedPermissions": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "The set of permissions that the app is currently requesting. Use Permissions.Get on the EMM API to retrieve details about these permissions."
-        },
-        "approvedPermissions": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "The set of permissions that the enterprise admin has already approved for this application. Use Permissions.Get on the EMM API to retrieve details about these permissions."
-        }
-      }
-    },
-    "Administrator": {
-      "description": "This represents an enterprise admin who can manage the enterprise in the managed Google Play store.",
-      "id": "Administrator",
-      "type": "object",
-      "properties": {
-        "email": {
-          "type": "string",
-          "description": "The admin's email address."
-        }
-      }
-    },
-    "Product": {
-      "id": "Product",
-      "type": "object",
-      "description": "A Products resource represents an app in the Google Play store that is available to at least some users in the enterprise. (Some apps are restricted to a single enterprise, and no information about them is made available outside that enterprise.) The information provided for each product (localized name, icon, link to the full Google Play details page) is intended to allow a basic representation of the product within an EMM user interface.",
-      "properties": {
-        "category": {
-          "type": "string",
-          "description": "The app category (e.g. RACING, SOCIAL, etc.)"
-        },
-        "productId": {
-          "type": "string",
-          "description": "A string of the form *app:\u003cpackage name\u003e*. For example, app:com.google.android.gm represents the Gmail app."
-        },
-        "title": {
-          "type": "string",
-          "description": "The name of the product."
-        },
-        "features": {
-          "type": "array",
-          "description": "Noteworthy features (if any) of this product.",
-          "items": {
-            "type": "string",
+    "id": "androidenterprise:v1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://androidenterprise.mtls.googleapis.com/",
+    "name": "androidenterprise",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
             "enum": [
-              "featureUnknown",
-              "vpnApp"
+                "1",
+                "2"
             ],
             "enumDescriptions": [
-              "",
-              "The app is a VPN."
-            ]
-          }
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "requiresContainerApp": {
-          "description": "Deprecated.",
-          "type": "boolean"
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        }
+    },
+    "protocol": "rest",
+    "resources": {
+        "devices": {
+            "methods": {
+                "forceReportUpload": {
+                    "description": "Uploads a report containing any changes in app states on the device since the last report was generated. You can call this method up to 3 times every 24 hours for a given device. If you exceed the quota, then the Google Play EMM API returns HTTP 429 Too Many Requests.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/forceReportUpload",
+                    "httpMethod": "POST",
+                    "id": "androidenterprise.devices.forceReportUpload",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId",
+                        "deviceId"
+                    ],
+                    "parameters": {
+                        "deviceId": {
+                            "description": "The ID of the device.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/forceReportUpload",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "get": {
+                    "description": "Retrieves the details of a device.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.devices.get",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId",
+                        "deviceId"
+                    ],
+                    "parameters": {
+                        "deviceId": {
+                            "description": "The ID of the device.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}",
+                    "response": {
+                        "$ref": "Device"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "getState": {
+                    "description": "Retrieves whether a device's access to Google services is enabled or disabled. The device state takes effect only if enforcing EMM policies on Android devices is enabled in the Google Admin Console. Otherwise, the device state is ignored and all devices are allowed access to Google services. This is only supported for Google-managed users.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/state",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.devices.getState",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId",
+                        "deviceId"
+                    ],
+                    "parameters": {
+                        "deviceId": {
+                            "description": "The ID of the device.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/state",
+                    "response": {
+                        "$ref": "DeviceState"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves the IDs of all of a user's devices.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.devices.list",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices",
+                    "response": {
+                        "$ref": "DevicesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "setState": {
+                    "description": "Sets whether a device's access to Google services is enabled or disabled. The device state takes effect only if enforcing EMM policies on Android devices is enabled in the Google Admin Console. Otherwise, the device state is ignored and all devices are allowed access to Google services. This is only supported for Google-managed users.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/state",
+                    "httpMethod": "PUT",
+                    "id": "androidenterprise.devices.setState",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId",
+                        "deviceId"
+                    ],
+                    "parameters": {
+                        "deviceId": {
+                            "description": "The ID of the device.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/state",
+                    "request": {
+                        "$ref": "DeviceState"
+                    },
+                    "response": {
+                        "$ref": "DeviceState"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "update": {
+                    "description": "Updates the device policy. To ensure the policy is properly enforced, you need to prevent unmanaged accounts from accessing Google Play by setting the allowed_accounts in the managed configuration for the Google Play package. See restrict accounts in Google Play.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}",
+                    "httpMethod": "PUT",
+                    "id": "androidenterprise.devices.update",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId",
+                        "deviceId"
+                    ],
+                    "parameters": {
+                        "deviceId": {
+                            "description": "The ID of the device.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "updateMask": {
+                            "description": "Mask that identifies which fields to update. If not set, all modifiable fields will be modified. When set in a query parameter, this field should be specified as updateMask=<field1>,<field2>,...",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}",
+                    "request": {
+                        "$ref": "Device"
+                    },
+                    "response": {
+                        "$ref": "Device"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                }
+            }
+        },
+        "enterprises": {
+            "methods": {
+                "acknowledgeNotificationSet": {
+                    "description": "Acknowledges notifications that were received from Enterprises.PullNotificationSet to prevent subsequent calls from returning the same notifications.",
+                    "flatPath": "androidenterprise/v1/enterprises/acknowledgeNotificationSet",
+                    "httpMethod": "POST",
+                    "id": "androidenterprise.enterprises.acknowledgeNotificationSet",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "notificationSetId": {
+                            "description": "The notification set ID as returned by Enterprises.PullNotificationSet. This must be provided.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/acknowledgeNotificationSet",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "completeSignup": {
+                    "description": "Completes the signup flow, by specifying the Completion token and Enterprise token. This request must not be called multiple times for a given Enterprise Token.",
+                    "flatPath": "androidenterprise/v1/enterprises/completeSignup",
+                    "httpMethod": "POST",
+                    "id": "androidenterprise.enterprises.completeSignup",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "completionToken": {
+                            "description": "The Completion token initially returned by GenerateSignupUrl.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "enterpriseToken": {
+                            "description": "The Enterprise token appended to the Callback URL.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/completeSignup",
+                    "response": {
+                        "$ref": "Enterprise"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "createWebToken": {
+                    "description": "Returns a unique token to access an embeddable UI. To generate a web UI, pass the generated token into the managed Google Play javascript API. Each token may only be used to start one UI session. See the javascript API documentation for further information.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/createWebToken",
+                    "httpMethod": "POST",
+                    "id": "androidenterprise.enterprises.createWebToken",
+                    "parameterOrder": [
+                        "enterpriseId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/createWebToken",
+                    "request": {
+                        "$ref": "AdministratorWebTokenSpec"
+                    },
+                    "response": {
+                        "$ref": "AdministratorWebToken"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "enroll": {
+                    "description": "Enrolls an enterprise with the calling EMM.",
+                    "flatPath": "androidenterprise/v1/enterprises/enroll",
+                    "httpMethod": "POST",
+                    "id": "androidenterprise.enterprises.enroll",
+                    "parameterOrder": [
+                        "token"
+                    ],
+                    "parameters": {
+                        "token": {
+                            "description": "Required. The token provided by the enterprise to register the EMM.",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/enroll",
+                    "request": {
+                        "$ref": "Enterprise"
+                    },
+                    "response": {
+                        "$ref": "Enterprise"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "generateSignupUrl": {
+                    "description": "Generates a sign-up URL.",
+                    "flatPath": "androidenterprise/v1/enterprises/signupUrl",
+                    "httpMethod": "POST",
+                    "id": "androidenterprise.enterprises.generateSignupUrl",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "callbackUrl": {
+                            "description": "The callback URL to which the Admin will be redirected after successfully creating an enterprise. Before redirecting there the system will add a single query parameter to this URL named \"enterpriseToken\" which will contain an opaque token to be used for the CompleteSignup request. Beware that this means that the URL will be parsed, the parameter added and then a new URL formatted, i.e. there may be some minor formatting changes and, more importantly, the URL must be well-formed so that it can be parsed.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/signupUrl",
+                    "response": {
+                        "$ref": "SignupInfo"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "get": {
+                    "description": "Retrieves the name and domain of an enterprise.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.enterprises.get",
+                    "parameterOrder": [
+                        "enterpriseId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}",
+                    "response": {
+                        "$ref": "Enterprise"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "getServiceAccount": {
+                    "description": "Returns a service account and credentials. The service account can be bound to the enterprise by calling setAccount. The service account is unique to this enterprise and EMM, and will be deleted if the enterprise is unbound. The credentials contain private key data and are not stored server-side. This method can only be called after calling Enterprises.Enroll or Enterprises.CompleteSignup, and before Enterprises.SetAccount; at other times it will return an error. Subsequent calls after the first will generate a new, unique set of credentials, and invalidate the previously generated credentials. Once the service account is bound to the enterprise, it can be managed using the serviceAccountKeys resource.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/serviceAccount",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.enterprises.getServiceAccount",
+                    "parameterOrder": [
+                        "enterpriseId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "keyType": {
+                            "description": "The type of credential to return with the service account. Required.",
+                            "enum": [
+                                "googleCredentials",
+                                "pkcs12"
+                            ],
+                            "enumDescriptions": [
+                                "Google Credentials File format.",
+                                "PKCS12 format. The password for the PKCS12 file is 'notasecret'. For more information, see https://tools.ietf.org/html/rfc7292. The data for keys of this type are base64 encoded according to RFC 4648 Section 4. See http://tools.ietf.org/html/rfc4648#section-4."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/serviceAccount",
+                    "response": {
+                        "$ref": "ServiceAccount"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "getStoreLayout": {
+                    "description": "Returns the store layout for the enterprise. If the store layout has not been set, returns \"basic\" as the store layout type and no homepage.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.enterprises.getStoreLayout",
+                    "parameterOrder": [
+                        "enterpriseId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout",
+                    "response": {
+                        "$ref": "StoreLayout"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "list": {
+                    "description": "Looks up an enterprise by domain name. This is only supported for enterprises created via the Google-initiated creation flow. Lookup of the id is not needed for enterprises created via the EMM-initiated flow since the EMM learns the enterprise ID in the callback specified in the Enterprises.generateSignupUrl call.",
+                    "flatPath": "androidenterprise/v1/enterprises",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.enterprises.list",
+                    "parameterOrder": [
+                        "domain"
+                    ],
+                    "parameters": {
+                        "domain": {
+                            "description": "Required. The exact primary domain name of the enterprise to look up.",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises",
+                    "response": {
+                        "$ref": "EnterprisesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "pullNotificationSet": {
+                    "description": "Pulls and returns a notification set for the enterprises associated with the service account authenticated for the request. The notification set may be empty if no notification are pending. A notification set returned needs to be acknowledged within 20 seconds by calling Enterprises.AcknowledgeNotificationSet, unless the notification set is empty. Notifications that are not acknowledged within the 20 seconds will eventually be included again in the response to another PullNotificationSet request, and those that are never acknowledged will ultimately be deleted according to the Google Cloud Platform Pub/Sub system policy. Multiple requests might be performed concurrently to retrieve notifications, in which case the pending notifications (if any) will be split among each caller, if any are pending. If no notifications are present, an empty notification list is returned. Subsequent requests may return more notifications once they become available.",
+                    "flatPath": "androidenterprise/v1/enterprises/pullNotificationSet",
+                    "httpMethod": "POST",
+                    "id": "androidenterprise.enterprises.pullNotificationSet",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "requestMode": {
+                            "description": "The request mode for pulling notifications. Specifying waitForNotifications will cause the request to block and wait until one or more notifications are present, or return an empty notification list if no notifications are present after some time. Speciying returnImmediately will cause the request to immediately return the pending notifications, or an empty list if no notifications are present. If omitted, defaults to waitForNotifications.",
+                            "enum": [
+                                "waitForNotifications",
+                                "returnImmediately"
+                            ],
+                            "enumDescriptions": [
+                                "Wait until one or more notifications are present.",
+                                "Returns immediately whether notifications are present or not."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/pullNotificationSet",
+                    "response": {
+                        "$ref": "NotificationSet"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "sendTestPushNotification": {
+                    "description": "Sends a test notification to validate the EMM integration with the Google Cloud Pub/Sub service for this enterprise.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/sendTestPushNotification",
+                    "httpMethod": "POST",
+                    "id": "androidenterprise.enterprises.sendTestPushNotification",
+                    "parameterOrder": [
+                        "enterpriseId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/sendTestPushNotification",
+                    "response": {
+                        "$ref": "EnterprisesSendTestPushNotificationResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "setAccount": {
+                    "description": "Sets the account that will be used to authenticate to the API as the enterprise.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/account",
+                    "httpMethod": "PUT",
+                    "id": "androidenterprise.enterprises.setAccount",
+                    "parameterOrder": [
+                        "enterpriseId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/account",
+                    "request": {
+                        "$ref": "EnterpriseAccount"
+                    },
+                    "response": {
+                        "$ref": "EnterpriseAccount"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "setStoreLayout": {
+                    "description": "Sets the store layout for the enterprise. By default, storeLayoutType is set to \"basic\" and the basic store layout is enabled. The basic layout only contains apps approved by the admin, and that have been added to the available product set for a user (using the setAvailableProductSet call). Apps on the page are sorted in order of their product ID value. If you create a custom store layout (by setting storeLayoutType = \"custom\" and setting a homepage), the basic store layout is disabled.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout",
+                    "httpMethod": "PUT",
+                    "id": "androidenterprise.enterprises.setStoreLayout",
+                    "parameterOrder": [
+                        "enterpriseId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout",
+                    "request": {
+                        "$ref": "StoreLayout"
+                    },
+                    "response": {
+                        "$ref": "StoreLayout"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "unenroll": {
+                    "description": "Unenrolls an enterprise from the calling EMM.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/unenroll",
+                    "httpMethod": "POST",
+                    "id": "androidenterprise.enterprises.unenroll",
+                    "parameterOrder": [
+                        "enterpriseId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/unenroll",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                }
+            }
+        },
+        "entitlements": {
+            "methods": {
+                "delete": {
+                    "description": "Removes an entitlement to an app for a user.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements/{entitlementId}",
+                    "httpMethod": "DELETE",
+                    "id": "androidenterprise.entitlements.delete",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId",
+                        "entitlementId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "entitlementId": {
+                            "description": "The ID of the entitlement (a product ID), e.g. \"app:com.google.android.gm\".",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements/{entitlementId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "get": {
+                    "description": "Retrieves details of an entitlement.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements/{entitlementId}",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.entitlements.get",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId",
+                        "entitlementId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "entitlementId": {
+                            "description": "The ID of the entitlement (a product ID), e.g. \"app:com.google.android.gm\".",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements/{entitlementId}",
+                    "response": {
+                        "$ref": "Entitlement"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "list": {
+                    "description": "Lists all entitlements for the specified user. Only the ID is set.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.entitlements.list",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements",
+                    "response": {
+                        "$ref": "EntitlementsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "update": {
+                    "description": "Adds or updates an entitlement to an app for a user.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements/{entitlementId}",
+                    "httpMethod": "PUT",
+                    "id": "androidenterprise.entitlements.update",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId",
+                        "entitlementId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "entitlementId": {
+                            "description": "The ID of the entitlement (a product ID), e.g. \"app:com.google.android.gm\".",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "install": {
+                            "description": "Set to true to also install the product on all the user's devices where possible. Failure to install on one or more devices will not prevent this operation from returning successfully, as long as the entitlement was successfully assigned to the user.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements/{entitlementId}",
+                    "request": {
+                        "$ref": "Entitlement"
+                    },
+                    "response": {
+                        "$ref": "Entitlement"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                }
+            }
+        },
+        "grouplicenses": {
+            "methods": {
+                "get": {
+                    "description": "Retrieves details of an enterprise's group license for a product.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/groupLicenses/{groupLicenseId}",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.grouplicenses.get",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "groupLicenseId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "groupLicenseId": {
+                            "description": "The ID of the product the group license is for, e.g. \"app:com.google.android.gm\".",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/groupLicenses/{groupLicenseId}",
+                    "response": {
+                        "$ref": "GroupLicense"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves IDs of all products for which the enterprise has a group license.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/groupLicenses",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.grouplicenses.list",
+                    "parameterOrder": [
+                        "enterpriseId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/groupLicenses",
+                    "response": {
+                        "$ref": "GroupLicensesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                }
+            }
+        },
+        "grouplicenseusers": {
+            "methods": {
+                "list": {
+                    "description": "Retrieves the IDs of the users who have been granted entitlements under the license.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/groupLicenses/{groupLicenseId}/users",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.grouplicenseusers.list",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "groupLicenseId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "groupLicenseId": {
+                            "description": "The ID of the product the group license is for, e.g. \"app:com.google.android.gm\".",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/groupLicenses/{groupLicenseId}/users",
+                    "response": {
+                        "$ref": "GroupLicenseUsersListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                }
+            }
+        },
+        "installs": {
+            "methods": {
+                "delete": {
+                    "description": "Requests to remove an app from a device. A call to get or list will still show the app as installed on the device until it is actually removed.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs/{installId}",
+                    "httpMethod": "DELETE",
+                    "id": "androidenterprise.installs.delete",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId",
+                        "deviceId",
+                        "installId"
+                    ],
+                    "parameters": {
+                        "deviceId": {
+                            "description": "The Android ID of the device.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "installId": {
+                            "description": "The ID of the product represented by the install, e.g. \"app:com.google.android.gm\".",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs/{installId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "get": {
+                    "description": "Retrieves details of an installation of an app on a device.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs/{installId}",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.installs.get",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId",
+                        "deviceId",
+                        "installId"
+                    ],
+                    "parameters": {
+                        "deviceId": {
+                            "description": "The Android ID of the device.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "installId": {
+                            "description": "The ID of the product represented by the install, e.g. \"app:com.google.android.gm\".",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs/{installId}",
+                    "response": {
+                        "$ref": "Install"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves the details of all apps installed on the specified device.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.installs.list",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId",
+                        "deviceId"
+                    ],
+                    "parameters": {
+                        "deviceId": {
+                            "description": "The Android ID of the device.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs",
+                    "response": {
+                        "$ref": "InstallsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "update": {
+                    "description": "Requests to install the latest version of an app to a device. If the app is already installed, then it is updated to the latest version if necessary.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs/{installId}",
+                    "httpMethod": "PUT",
+                    "id": "androidenterprise.installs.update",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId",
+                        "deviceId",
+                        "installId"
+                    ],
+                    "parameters": {
+                        "deviceId": {
+                            "description": "The Android ID of the device.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "installId": {
+                            "description": "The ID of the product represented by the install, e.g. \"app:com.google.android.gm\".",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs/{installId}",
+                    "request": {
+                        "$ref": "Install"
+                    },
+                    "response": {
+                        "$ref": "Install"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                }
+            }
+        },
+        "managedconfigurationsfordevice": {
+            "methods": {
+                "delete": {
+                    "description": "Removes a per-device managed configuration for an app for the specified device.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice/{managedConfigurationForDeviceId}",
+                    "httpMethod": "DELETE",
+                    "id": "androidenterprise.managedconfigurationsfordevice.delete",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId",
+                        "deviceId",
+                        "managedConfigurationForDeviceId"
+                    ],
+                    "parameters": {
+                        "deviceId": {
+                            "description": "The Android ID of the device.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "managedConfigurationForDeviceId": {
+                            "description": "The ID of the managed configuration (a product ID), e.g. \"app:com.google.android.gm\".",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice/{managedConfigurationForDeviceId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "get": {
+                    "description": "Retrieves details of a per-device managed configuration.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice/{managedConfigurationForDeviceId}",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.managedconfigurationsfordevice.get",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId",
+                        "deviceId",
+                        "managedConfigurationForDeviceId"
+                    ],
+                    "parameters": {
+                        "deviceId": {
+                            "description": "The Android ID of the device.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "managedConfigurationForDeviceId": {
+                            "description": "The ID of the managed configuration (a product ID), e.g. \"app:com.google.android.gm\".",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice/{managedConfigurationForDeviceId}",
+                    "response": {
+                        "$ref": "ManagedConfiguration"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "list": {
+                    "description": "Lists all the per-device managed configurations for the specified device. Only the ID is set.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.managedconfigurationsfordevice.list",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId",
+                        "deviceId"
+                    ],
+                    "parameters": {
+                        "deviceId": {
+                            "description": "The Android ID of the device.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice",
+                    "response": {
+                        "$ref": "ManagedConfigurationsForDeviceListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "update": {
+                    "description": "Adds or updates a per-device managed configuration for an app for the specified device.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice/{managedConfigurationForDeviceId}",
+                    "httpMethod": "PUT",
+                    "id": "androidenterprise.managedconfigurationsfordevice.update",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId",
+                        "deviceId",
+                        "managedConfigurationForDeviceId"
+                    ],
+                    "parameters": {
+                        "deviceId": {
+                            "description": "The Android ID of the device.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "managedConfigurationForDeviceId": {
+                            "description": "The ID of the managed configuration (a product ID), e.g. \"app:com.google.android.gm\".",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice/{managedConfigurationForDeviceId}",
+                    "request": {
+                        "$ref": "ManagedConfiguration"
+                    },
+                    "response": {
+                        "$ref": "ManagedConfiguration"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                }
+            }
+        },
+        "managedconfigurationsforuser": {
+            "methods": {
+                "delete": {
+                    "description": "Removes a per-user managed configuration for an app for the specified user.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser/{managedConfigurationForUserId}",
+                    "httpMethod": "DELETE",
+                    "id": "androidenterprise.managedconfigurationsforuser.delete",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId",
+                        "managedConfigurationForUserId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "managedConfigurationForUserId": {
+                            "description": "The ID of the managed configuration (a product ID), e.g. \"app:com.google.android.gm\".",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser/{managedConfigurationForUserId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "get": {
+                    "description": "Retrieves details of a per-user managed configuration for an app for the specified user.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser/{managedConfigurationForUserId}",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.managedconfigurationsforuser.get",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId",
+                        "managedConfigurationForUserId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "managedConfigurationForUserId": {
+                            "description": "The ID of the managed configuration (a product ID), e.g. \"app:com.google.android.gm\".",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser/{managedConfigurationForUserId}",
+                    "response": {
+                        "$ref": "ManagedConfiguration"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "list": {
+                    "description": "Lists all the per-user managed configurations for the specified user. Only the ID is set.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.managedconfigurationsforuser.list",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser",
+                    "response": {
+                        "$ref": "ManagedConfigurationsForUserListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "update": {
+                    "description": "Adds or updates the managed configuration settings for an app for the specified user. If you support the Managed configurations iframe, you can apply managed configurations to a user by specifying an mcmId and its associated configuration variables (if any) in the request. Alternatively, all EMMs can apply managed configurations by passing a list of managed properties.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser/{managedConfigurationForUserId}",
+                    "httpMethod": "PUT",
+                    "id": "androidenterprise.managedconfigurationsforuser.update",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId",
+                        "managedConfigurationForUserId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "managedConfigurationForUserId": {
+                            "description": "The ID of the managed configuration (a product ID), e.g. \"app:com.google.android.gm\".",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser/{managedConfigurationForUserId}",
+                    "request": {
+                        "$ref": "ManagedConfiguration"
+                    },
+                    "response": {
+                        "$ref": "ManagedConfiguration"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                }
+            }
+        },
+        "managedconfigurationssettings": {
+            "methods": {
+                "list": {
+                    "description": "Lists all the managed configurations settings for the specified app.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/managedConfigurationsSettings",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.managedconfigurationssettings.list",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "productId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "productId": {
+                            "description": "The ID of the product for which the managed configurations settings applies to.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/managedConfigurationsSettings",
+                    "response": {
+                        "$ref": "ManagedConfigurationsSettingsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                }
+            }
         },
         "permissions": {
-          "items": {
-            "$ref": "ProductPermission"
-          },
-          "type": "array",
-          "description": "A list of permissions required by the app."
+            "methods": {
+                "get": {
+                    "description": "Retrieves details of an Android app permission for display to an enterprise admin.",
+                    "flatPath": "androidenterprise/v1/permissions/{permissionId}",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.permissions.get",
+                    "parameterOrder": [
+                        "permissionId"
+                    ],
+                    "parameters": {
+                        "language": {
+                            "description": "The BCP47 tag for the user's preferred language (e.g. \"en-US\", \"de\")",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "permissionId": {
+                            "description": "The ID of the permission.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/permissions/{permissionId}",
+                    "response": {
+                        "$ref": "Permission"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                }
+            }
         },
-        "signingCertificate": {
-          "description": "The certificate used to sign this product.",
-          "$ref": "ProductSigningCertificate"
-        },
-        "availableTracks": {
-          "type": "array",
-          "description": "Deprecated, use appTracks instead.",
-          "items": {
-            "type": "string",
-            "enum": [
-              "appTrackUnspecified",
-              "production",
-              "beta",
-              "alpha"
-            ],
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              ""
-            ]
-          }
-        },
-        "smallIconUrl": {
-          "type": "string",
-          "description": "A link to a smaller image that can be used as an icon for the product. This image is suitable for use at up to 128px x 128px."
-        },
-        "description": {
-          "type": "string",
-          "description": "The localized promotional description, if available."
-        },
-        "screenshotUrls": {
-          "type": "array",
-          "description": "A list of screenshot links representing the app.",
-          "items": {
-            "type": "string"
-          }
-        },
-        "detailsUrl": {
-          "description": "A link to the (consumer) Google Play details page for the product.",
-          "type": "string"
-        },
-        "availableCountries": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "The countries which this app is available in."
-        },
-        "appVersion": {
-          "items": {
-            "$ref": "AppVersion"
-          },
-          "type": "array",
-          "description": "App versions currently available for this product."
-        },
-        "distributionChannel": {
-          "enum": [
-            "publicGoogleHosted",
-            "privateGoogleHosted",
-            "privateSelfHosted"
-          ],
-          "description": "How and to whom the package is made available. The value publicGoogleHosted means that the package is available through the Play store and not restricted to a specific enterprise. The value privateGoogleHosted means that the package is a private app (restricted to an enterprise) but hosted by Google. The value privateSelfHosted means that the package is a private app (restricted to an enterprise) and is privately hosted.",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "type": "string"
-        },
-        "lastUpdatedTimestampMillis": {
-          "type": "string",
-          "description": "The approximate time (within 7 days) the app was last published, expressed in milliseconds since epoch.",
-          "format": "int64"
-        },
-        "minAndroidSdkVersion": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The minimum Android SDK necessary to run the app."
-        },
-        "authorName": {
-          "description": "The name of the author of the product (for example, the app developer).",
-          "type": "string"
-        },
-        "iconUrl": {
-          "description": "A link to an image that can be used as an icon for the product. This image is suitable for use at up to 512px x 512px.",
-          "type": "string"
-        },
-        "recentChanges": {
-          "description": "A description of the recent changes made to the app.",
-          "type": "string"
-        },
-        "workDetailsUrl": {
-          "description": "A link to the managed Google Play details page for the product, for use by an Enterprise admin.",
-          "type": "string"
-        },
-        "appTracks": {
-          "type": "array",
-          "description": "The tracks visible to the enterprise.",
-          "items": {
-            "$ref": "TrackInfo"
-          }
-        },
-        "productPricing": {
-          "enum": [
-            "unknown",
-            "free",
-            "freeWithInAppPurchase",
-            "paid"
-          ],
-          "enumDescriptions": [
-            "Unknown pricing, used to denote an approved product that is not generally available.",
-            "The product is free.",
-            "The product is free, but offers in-app purchases.",
-            "The product is paid."
-          ],
-          "description": "Whether this product is free, free with in-app purchases, or paid. If the pricing is unknown, this means the product is not generally available anymore (even though it might still be available to people who own it).",
-          "type": "string"
-        },
-        "contentRating": {
-          "description": "The content rating for this app.",
-          "enum": [
-            "ratingUnknown",
-            "all",
-            "preTeen",
-            "teen",
-            "mature"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        }
-      }
-    },
-    "ProductsListResponse": {
-      "properties": {
-        "pageInfo": {
-          "$ref": "PageInfo",
-          "description": "General pagination information."
-        },
-        "tokenPagination": {
-          "$ref": "TokenPagination",
-          "description": "Pagination information for token pagination."
-        },
-        "product": {
-          "items": {
-            "$ref": "Product"
-          },
-          "type": "array",
-          "description": "Information about a product (e.g. an app) in the Google Play store, for display to an enterprise admin."
-        }
-      },
-      "type": "object",
-      "id": "ProductsListResponse"
-    },
-    "TrackInfo": {
-      "description": "Id to name association of a track.",
-      "properties": {
-        "trackAlias": {
-          "description": "A modifiable name for a track. This is the visible name in the play developer console.",
-          "type": "string"
-        },
-        "trackId": {
-          "description": "Unmodifiable, unique track identifier. This identifier is the releaseTrackId in the url of the play developer console page that displays the track information.",
-          "type": "string"
-        }
-      },
-      "id": "TrackInfo",
-      "type": "object"
-    },
-    "Entitlement": {
-      "type": "object",
-      "properties": {
-        "reason": {
-          "type": "string",
-          "enum": [
-            "free",
-            "groupLicense",
-            "userPurchase"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "description": "The reason for the entitlement. For example, \"free\" for free apps. This property is temporary: it will be replaced by the acquisition kind field of group licenses."
-        },
-        "productId": {
-          "type": "string",
-          "description": "The ID of the product that the entitlement is for. For example, \"app:com.google.android.gm\"."
-        }
-      },
-      "id": "Entitlement",
-      "description": "The presence of an Entitlements resource indicates that a user has the right to use a particular app. Entitlements are user specific, not device specific. This allows a user with an entitlement to an app to install the app on all their devices. It's also possible for a user to hold an entitlement to an app without installing the app on any device. The API can be used to create an entitlement. As an option, you can also use the API to trigger the installation of an app on all a user's managed devices at the same time the entitlement is created. If the app is free, creating the entitlement also creates a group license for that app. For paid apps, creating the entitlement consumes one license, and that license remains consumed until the entitlement is removed. If the enterprise hasn't purchased enough licenses, then no entitlement is created and the installation fails. An entitlement is also not created for an app if the app requires permissions that the enterprise hasn't accepted. If an entitlement is deleted, the app may be uninstalled from a user's device. As a best practice, uninstall the app by calling Installs.delete() before deleting the entitlement. Entitlements for apps that a user pays for on an unmanaged profile have \"userPurchase\" as the entitlement reason. These entitlements cannot be removed via the API."
-    },
-    "InstallsListResponse": {
-      "properties": {
-        "install": {
-          "items": {
-            "$ref": "Install"
-          },
-          "description": "An installation of an app for a user on a specific device. The existence of an install implies that the user must have an entitlement to the app.",
-          "type": "array"
-        }
-      },
-      "id": "InstallsListResponse",
-      "type": "object"
-    },
-    "EntitlementsListResponse": {
-      "id": "EntitlementsListResponse",
-      "type": "object",
-      "properties": {
-        "entitlement": {
-          "description": "An entitlement of a user to a product (e.g. an app). For example, a free app that they have installed, or a paid app that they have been allocated a license to.",
-          "items": {
-            "$ref": "Entitlement"
-          },
-          "type": "array"
-        }
-      }
-    },
-    "ServiceAccountKeysListResponse": {
-      "properties": {
-        "serviceAccountKey": {
-          "type": "array",
-          "description": "The service account credentials.",
-          "items": {
-            "$ref": "ServiceAccountKey"
-          }
-        }
-      },
-      "type": "object",
-      "id": "ServiceAccountKeysListResponse"
-    },
-    "ProductsApproveRequest": {
-      "type": "object",
-      "id": "ProductsApproveRequest",
-      "properties": {
-        "approvalUrlInfo": {
-          "description": "The approval URL that was shown to the user. Only the permissions shown to the user with that URL will be accepted, which may not be the product's entire set of permissions. For example, the URL may only display new permissions from an update after the product was approved, or not include new permissions if the product was updated since the URL was generated.",
-          "$ref": "ApprovalUrlInfo"
-        },
-        "approvedPermissions": {
-          "enumDescriptions": [
-            "Approve only the permissions the product requires at approval time. If an update requires additional permissions, the app will not be updated on devices associated with enterprise users until the additional permissions are approved.",
-            "All current and future permissions the app requires are automatically approved."
-          ],
-          "type": "string",
-          "enum": [
-            "currentPermissionsOnly",
-            "allPermissions"
-          ],
-          "description": "Sets how new permission requests for the product are handled. \"allPermissions\" automatically approves all current and future permissions for the product. \"currentPermissionsOnly\" approves the current set of permissions for the product, but any future permissions added through updates will require manual reapproval. If not specified, only the current set of permissions will be approved."
-        }
-      }
-    },
-    "ManagedConfigurationsForUserListResponse": {
-      "properties": {
-        "managedConfigurationForUser": {
-          "items": {
-            "$ref": "ManagedConfiguration"
-          },
-          "description": "A managed configuration for an app for a specific user.",
-          "type": "array"
-        }
-      },
-      "id": "ManagedConfigurationsForUserListResponse",
-      "type": "object"
-    },
-    "AdministratorWebTokenSpecWebApps": {
-      "type": "object",
-      "properties": {
-        "enabled": {
-          "type": "boolean",
-          "description": "Whether the Web Apps page is displayed. Default is true."
-        }
-      },
-      "id": "AdministratorWebTokenSpecWebApps"
-    },
-    "AdministratorWebToken": {
-      "type": "object",
-      "description": "A token authorizing an admin to access an iframe.",
-      "id": "AdministratorWebToken",
-      "properties": {
-        "token": {
-          "description": "An opaque token to be passed to the Play front-end to generate an iframe.",
-          "type": "string"
-        }
-      }
-    },
-    "AppRestrictionsSchemaChangeEvent": {
-      "id": "AppRestrictionsSchemaChangeEvent",
-      "type": "object",
-      "properties": {
-        "productId": {
-          "type": "string",
-          "description": "The id of the product (e.g. \"app:com.google.android.gm\") for which the app restriction schema changed. This field will always be present."
-        }
-      },
-      "description": "An event generated when a new app version is uploaded to Google Play and its app restrictions schema changed. To fetch the app restrictions schema for an app, use Products.getAppRestrictionsSchema on the EMM API."
-    },
-    "WebAppsListResponse": {
-      "type": "object",
-      "id": "WebAppsListResponse",
-      "properties": {
-        "webApp": {
-          "type": "array",
-          "items": {
-            "$ref": "WebApp"
-          },
-          "description": "The manifest describing a web app."
-        }
-      }
-    },
-    "AutoInstallConstraint": {
-      "properties": {
-        "networkTypeConstraint": {
-          "enumDescriptions": [
-            "",
-            "Any active networks (Wi-Fi, cellular, etc.).",
-            "Any unmetered network (e.g. Wi-FI)."
-          ],
-          "description": "Network type constraint.",
-          "type": "string",
-          "enum": [
-            "networkTypeConstraintUnspecified",
-            "anyNetwork",
-            "unmeteredNetwork"
-          ]
-        },
-        "chargingStateConstraint": {
-          "enumDescriptions": [
-            "",
-            "Device doesn't have to be charging.",
-            "Device has to be charging."
-          ],
-          "type": "string",
-          "enum": [
-            "chargingStateConstraintUnspecified",
-            "chargingNotRequired",
-            "chargingRequired"
-          ],
-          "description": "Charging state constraint."
-        },
-        "deviceIdleStateConstraint": {
-          "enumDescriptions": [
-            "",
-            "Device doesn't have to be idle, app can be installed while the user is interacting with the device.",
-            "Device has to be idle."
-          ],
-          "description": "Device idle state constraint.",
-          "enum": [
-            "deviceIdleStateConstraintUnspecified",
-            "deviceIdleNotRequired",
-            "deviceIdleRequired"
-          ],
-          "type": "string"
-        }
-      },
-      "description": "The auto-install constraint. Defines a set of restrictions for installation. At least one of the fields must be set.",
-      "id": "AutoInstallConstraint",
-      "type": "object"
-    },
-    "ProductPolicy": {
-      "id": "ProductPolicy",
-      "properties": {
-        "productId": {
-          "description": "The ID of the product. For example, \"app:com.google.android.gm\".",
-          "type": "string"
-        },
-        "trackIds": {
-          "description": "Grants the device visibility to the specified product release track(s), identified by trackIds. The list of release tracks of a product can be obtained by calling Products.Get.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "autoInstallPolicy": {
-          "$ref": "AutoInstallPolicy",
-          "description": "The auto-install policy for the product."
-        },
-        "managedConfiguration": {
-          "$ref": "ManagedConfiguration",
-          "description": "The managed configuration for the product."
-        },
-        "tracks": {
-          "description": "Deprecated. Use trackIds instead.",
-          "items": {
-            "type": "string",
-            "enum": [
-              "appTrackUnspecified",
-              "production",
-              "beta",
-              "alpha"
-            ],
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              ""
-            ]
-          },
-          "type": "array"
-        },
-        "autoUpdateMode": {
-          "enumDescriptions": [
-            "Unspecified. Defaults to AUTO_UPDATE_DEFAULT.",
-            "The app is automatically updated with low priority to minimize the impact on the user. The app is updated when the following constraints are met: * The device is not actively used * The device is connected to a Wi-Fi network. * The device is charging * If the system update policy is set to `WINDOWED`: the local time of the device is within the daily maintenance window The device is notified about a new update within 24 hours after it is published by the developer, after which the app is updated the next time the constraints above are met.",
-            "The app is not automatically updated for a maximum of 90 days after the app becomes out of date. 90 days after the app becomes out of date, the latest available version is installed automatically with low priority (see AUTO_UPDATE_DEFAULT). After the app is updated it is not automatically updated again until 90 days after it becomes out of date again. The user can still manually update the app from the Play Store at any time.",
-            "The app is updated as soon as possible. No constraints are applied. The device is notified immediately about a new app update after it is published by the developer."
-          ],
-          "enum": [
-            "autoUpdateModeUnspecified",
-            "autoUpdateDefault",
-            "autoUpdatePostponed",
-            "autoUpdateHighPriority"
-          ],
-          "type": "string",
-          "description": "The auto-update mode for the product."
-        }
-      },
-      "type": "object",
-      "description": "The policy for a product."
-    },
-    "ProductSet": {
-      "properties": {
-        "productVisibility": {
-          "type": "array",
-          "items": {
-            "$ref": "ProductVisibility"
-          },
-          "description": "Additional list of product IDs making up the product set. Unlike the productID array, in this list It's possible to specify which tracks (alpha, beta, production) of a product are visible to the user. See ProductVisibility and its fields for more information. Specifying the same product ID both here and in the productId array is not allowed and it will result in an error."
-        },
-        "productId": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "The list of product IDs making up the set of products."
-        },
-        "productSetBehavior": {
-          "type": "string",
-          "description": "The interpretation of this product set. \"unknown\" should never be sent and is ignored if received. \"whitelist\" means that the user is entitled to access the product set. \"includeAll\" means that all products are accessible, including products that are approved, products with revoked approval, and products that have never been approved. \"allApproved\" means that the user is entitled to access all products that are approved for the enterprise. If the value is \"allApproved\" or \"includeAll\", the productId field is ignored. If no value is provided, it is interpreted as \"whitelist\" for backwards compatibility. Further \"allApproved\" or \"includeAll\" does not enable automatic visibility of \"alpha\" or \"beta\" tracks for Android app. Use ProductVisibility to enable \"alpha\" or \"beta\" tracks per user.",
-          "enumDescriptions": [
-            "This value should never be sent and ignored if received.",
-            "This product set constitutes a whitelist.",
-            "This product set represents all products. For Android app it represents only \"production\" track. (The value of the productId field is therefore ignored).",
-            "This product set represents all approved products. For Android app it represents only \"production\" track. (The value of the product_id field is therefore ignored)."
-          ],
-          "enum": [
-            "unknown",
-            "whitelist",
-            "includeAll",
-            "allApproved"
-          ]
-        }
-      },
-      "type": "object",
-      "id": "ProductSet",
-      "description": "A set of products."
-    },
-    "ProductAvailabilityChangeEvent": {
-      "description": "An event generated whenever a product's availability changes.",
-      "type": "object",
-      "properties": {
-        "productId": {
-          "type": "string",
-          "description": "The id of the product (e.g. \"app:com.google.android.gm\") for which the product availability changed. This field will always be present."
-        },
-        "availabilityStatus": {
-          "enumDescriptions": [
-            "Conveys no information.",
-            "The previously unavailable product is again available on Google Play.",
-            "The product was removed from Google Play.",
-            "The product was unpublished by the developer."
-          ],
-          "description": "The new state of the product. This field will always be present.",
-          "type": "string",
-          "enum": [
-            "unknown",
-            "available",
-            "removed",
-            "unpublished"
-          ]
-        }
-      },
-      "id": "ProductAvailabilityChangeEvent"
-    },
-    "DeviceReportUpdateEvent": {
-      "id": "DeviceReportUpdateEvent",
-      "type": "object",
-      "properties": {
-        "userId": {
-          "description": "The ID of the user. This field will always be present.",
-          "type": "string"
-        },
-        "report": {
-          "$ref": "DeviceReport",
-          "description": "The device report updated with the latest app states. This field will always be present."
-        },
-        "deviceId": {
-          "type": "string",
-          "description": "The Android ID of the device. This field will always be present."
-        }
-      },
-      "description": "An event generated when an updated device report is available."
-    },
-    "EnterpriseAccount": {
-      "properties": {
-        "accountEmail": {
-          "type": "string",
-          "description": "The email address of the service account."
-        }
-      },
-      "description": "A service account that can be used to authenticate as the enterprise to API calls that require such authentication.",
-      "type": "object",
-      "id": "EnterpriseAccount"
-    },
-    "ConfigurationVariables": {
-      "description": "A configuration variables resource contains the managed configuration settings ID to be applied to a single user, as well as the variable set that is attributed to the user. The variable set will be used to replace placeholders in the managed configuration settings.",
-      "properties": {
-        "variableSet": {
-          "items": {
-            "$ref": "VariableSet"
-          },
-          "type": "array",
-          "description": "The variable set that is attributed to the user."
-        },
-        "mcmId": {
-          "type": "string",
-          "description": "The ID of the managed configurations settings."
-        }
-      },
-      "id": "ConfigurationVariables",
-      "type": "object"
-    },
-    "StoreLayoutPagesListResponse": {
-      "properties": {
-        "page": {
-          "description": "A store page of an enterprise.",
-          "items": {
-            "$ref": "StorePage"
-          },
-          "type": "array"
-        }
-      },
-      "id": "StoreLayoutPagesListResponse",
-      "type": "object"
-    },
-    "InstallFailureEvent": {
-      "properties": {
-        "failureReason": {
-          "enum": [
-            "unknown",
-            "timeout"
-          ],
-          "description": "The reason for the installation failure. This field will always be present.",
-          "type": "string",
-          "enumDescriptions": [
-            "Used whenever no better reason for failure can be provided.",
-            "Used when the installation timed out. This can cover a number of situations, for example when the device did not have connectivity at any point during the retry period, or if the device is OOM."
-          ]
-        },
-        "userId": {
-          "description": "The ID of the user. This field will always be present.",
-          "type": "string"
-        },
-        "deviceId": {
-          "description": "The Android ID of the device. This field will always be present.",
-          "type": "string"
-        },
-        "failureDetails": {
-          "description": "Additional details on the failure if applicable.",
-          "type": "string"
-        },
-        "productId": {
-          "type": "string",
-          "description": "The id of the product (e.g. \"app:com.google.android.gm\") for which the install failure event occured. This field will always be present."
-        }
-      },
-      "id": "InstallFailureEvent",
-      "description": "An event generated when an app installation failed on a device",
-      "type": "object"
-    },
-    "EnterprisesListResponse": {
-      "id": "EnterprisesListResponse",
-      "type": "object",
-      "properties": {
-        "enterprise": {
-          "type": "array",
-          "items": {
-            "$ref": "Enterprise"
-          },
-          "description": "An enterprise."
-        }
-      }
-    },
-    "AutoInstallPolicy": {
-      "id": "AutoInstallPolicy",
-      "type": "object",
-      "properties": {
-        "autoInstallConstraint": {
-          "type": "array",
-          "items": {
-            "$ref": "AutoInstallConstraint"
-          },
-          "description": "The constraints for auto-installing the app. You can specify a maximum of one constraint."
-        },
-        "autoInstallPriority": {
-          "format": "int32",
-          "description": "The priority of the install, as an unsigned integer. A lower number means higher priority.",
-          "type": "integer"
-        },
-        "autoInstallMode": {
-          "type": "string",
-          "description": "The auto-install mode. If unset defaults to \"doNotAutoInstall\".",
-          "enumDescriptions": [
-            "",
-            "The product is not installed automatically, the user needs to install it from the Play Store.",
-            "The product is automatically installed once, if the user uninstalls the product it will not be installed again.",
-            "The product is automatically installed, if the user uninstalls the product it will be installed again. On managed devices the DPC should block uninstall."
-          ],
-          "enum": [
-            "autoInstallModeUnspecified",
-            "doNotAutoInstall",
-            "autoInstallOnce",
-            "forceAutoInstall"
-          ]
-        },
-        "minimumVersionCode": {
-          "description": "The minimum version of the app. If a lower version of the app is installed, then the app will be auto-updated according to the auto-install constraints, instead of waiting for the regular auto-update. You can set a minimum version code for at most 20 apps per device.",
-          "format": "int32",
-          "type": "integer"
-        }
-      }
-    },
-    "ServiceAccount": {
-      "type": "object",
-      "id": "ServiceAccount",
-      "description": "A service account identity, including the name and credentials that can be used to authenticate as the service account.",
-      "properties": {
-        "name": {
-          "description": "The account name of the service account, in the form of an email address. Assigned by the server.",
-          "type": "string"
-        },
-        "key": {
-          "description": "Credentials that can be used to authenticate as this ServiceAccount.",
-          "$ref": "ServiceAccountKey"
-        }
-      }
-    },
-    "User": {
-      "type": "object",
-      "description": "A Users resource represents an account associated with an enterprise. The account may be specific to a device or to an individual user (who can then use the account across multiple devices). The account may provide access to managed Google Play only, or to other Google services, depending on the identity model: - The Google managed domain identity model requires synchronization to Google account sources (via primaryEmail). - The managed Google Play Accounts identity model provides a dynamic means for enterprises to create user or device accounts as needed. These accounts provide access to managed Google Play. ",
-      "id": "User",
-      "properties": {
-        "id": {
-          "description": "The unique ID for the user.",
-          "type": "string"
-        },
-        "managementType": {
-          "enum": [
-            "googleManaged",
-            "emmManaged"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "description": "The entity that manages the user. With googleManaged users, the source of truth is Google so EMMs have to make sure a Google Account exists for the user. With emmManaged users, the EMM is in charge."
-        },
-        "displayName": {
-          "type": "string",
-          "description": "The name that will appear in user interfaces. Setting this property is optional when creating EMM-managed users. If you do set this property, use something generic about the organization (such as \"Example, Inc.\") or your name (as EMM). Not used for Google-managed user accounts. @mutable androidenterprise.users.update"
-        },
-        "accountIdentifier": {
-          "type": "string",
-          "annotations": {
-            "required": [
-              "androidenterprise.users.insert"
-            ]
-          },
-          "description": "A unique identifier you create for this user, such as \"user342\" or \"asset#44418\". Do not use personally identifiable information (PII) for this property. Must always be set for EMM-managed users. Not set for Google-managed users."
-        },
-        "accountType": {
-          "description": "The type of account that this user represents. A userAccount can be installed on multiple devices, but a deviceAccount is specific to a single device. An EMM-managed user (emmManaged) can be either type (userAccount, deviceAccount), but a Google-managed user (googleManaged) is always a userAccount.",
-          "annotations": {
-            "required": [
-              "androidenterprise.users.insert"
-            ]
-          },
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string",
-          "enum": [
-            "deviceAccount",
-            "userAccount"
-          ]
-        },
-        "primaryEmail": {
-          "type": "string",
-          "description": "The user's primary email address, for example, \"jsmith@example.com\". Will always be set for Google managed users and not set for EMM managed users."
-        }
-      }
-    },
-    "Device": {
-      "id": "Device",
-      "description": "A Devices resource represents a mobile device managed by the EMM and belonging to a specific enterprise user.",
-      "properties": {
-        "policy": {
-          "$ref": "Policy",
-          "description": "The policy enforced on the device."
-        },
-        "androidId": {
-          "description": "The Google Play Services Android ID for the device encoded as a lowercase hex string. For example, \"123456789abcdef0\".",
-          "type": "string"
-        },
-        "managementType": {
-          "enum": [
-            "managedDevice",
-            "managedProfile",
-            "containerApp",
-            "unmanagedProfile"
-          ],
-          "description": "Identifies the extent to which the device is controlled by a managed Google Play EMM in various deployment configurations. Possible values include: - \"managedDevice\", a device that has the EMM's device policy controller (DPC) as the device owner. - \"managedProfile\", a device that has a profile managed by the DPC (DPC is profile owner) in addition to a separate, personal profile that is unavailable to the DPC. - \"containerApp\", no longer used (deprecated). - \"unmanagedProfile\", a device that has been allowed (by the domain's admin, using the Admin Console to enable the privilege) to use managed Google Play, but the profile is itself not owned by a DPC. ",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string"
-        },
-        "report": {
-          "description": "The device report updated with the latest app states.",
-          "$ref": "DeviceReport"
-        }
-      },
-      "type": "object"
-    },
-    "MaintenanceWindow": {
-      "properties": {
-        "startTimeAfterMidnightMs": {
-          "type": "string",
-          "format": "int64",
-          "description": "Start time of the maintenance window, in milliseconds after midnight on the device. Windows can span midnight."
-        },
-        "durationMs": {
-          "format": "int64",
-          "type": "string",
-          "description": "Duration of the maintenance window, in milliseconds. The duration must be between 30 minutes and 24 hours (inclusive)."
-        }
-      },
-      "id": "MaintenanceWindow",
-      "description": "Maintenance window for managed Google Play Accounts. This allows Play store to update the apps on the foreground in the designated window.",
-      "type": "object"
-    },
-    "ProductPermissions": {
-      "properties": {
-        "permission": {
-          "description": "The permissions required by the app.",
-          "type": "array",
-          "items": {
-            "$ref": "ProductPermission"
-          }
-        },
-        "productId": {
-          "description": "The ID of the app that the permissions relate to, e.g. \"app:com.google.android.gm\".",
-          "type": "string"
-        }
-      },
-      "description": "Information about the permissions required by a specific app and whether they have been accepted by the enterprise.",
-      "id": "ProductPermissions",
-      "type": "object"
-    },
-    "ProductPermission": {
-      "type": "object",
-      "description": "A product permissions resource represents the set of permissions required by a specific app and whether or not they have been accepted by an enterprise admin. The API can be used to read the set of permissions, and also to update the set to indicate that permissions have been accepted.",
-      "properties": {
-        "state": {
-          "enumDescriptions": [
-            "The permission is required by the app but has not yet been accepted by the enterprise.",
-            "The permission has been accepted by the enterprise."
-          ],
-          "description": "Whether the permission has been accepted or not.",
-          "type": "string",
-          "enum": [
-            "required",
-            "accepted"
-          ]
-        },
-        "permissionId": {
-          "description": "An opaque string uniquely identifying the permission.",
-          "type": "string"
-        }
-      },
-      "id": "ProductPermission"
-    },
-    "ManagedConfigurationsForDeviceListResponse": {
-      "properties": {
-        "managedConfigurationForDevice": {
-          "type": "array",
-          "items": {
-            "$ref": "ManagedConfiguration"
-          },
-          "description": "A managed configuration for an app on a specific device."
-        }
-      },
-      "type": "object",
-      "id": "ManagedConfigurationsForDeviceListResponse"
-    },
-    "AppRestrictionsSchemaRestriction": {
-      "properties": {
-        "entryValue": {
-          "items": {
-            "type": "string"
-          },
-          "description": "For choice or multiselect restrictions, the list of possible entries' machine-readable values. These values should be used in the configuration, either as a single string value for a choice restriction or in a stringArray for a multiselect restriction.",
-          "type": "array"
-        },
-        "restrictionType": {
-          "enum": [
-            "bool",
-            "string",
-            "integer",
-            "choice",
-            "multiselect",
-            "hidden",
-            "bundle",
-            "bundleArray"
-          ],
-          "description": "The type of the restriction.",
-          "type": "string",
-          "enumDescriptions": [
-            "A restriction of boolean type.",
-            "A restriction of string type.",
-            "A restriction of integer type.",
-            "A choice of one item from a set.",
-            "A choice of multiple items from a set.",
-            "A hidden restriction of string type (the default value can be used to pass along information that cannot be modified, such as a version code).",
-            "[M+ devices only] A bundle of restrictions",
-            "[M+ devices only] An array of restriction bundles"
-          ]
-        },
-        "entry": {
-          "items": {
-            "type": "string"
-          },
-          "description": "For choice or multiselect restrictions, the list of possible entries' human-readable names.",
-          "type": "array"
-        },
-        "description": {
-          "description": "A longer description of the restriction, giving more detail of what it affects.",
-          "type": "string"
-        },
-        "nestedRestriction": {
-          "description": "For bundle or bundleArray restrictions, the list of nested restrictions. A bundle restriction is always nested within a bundleArray restriction, and a bundleArray restriction is at most two levels deep.",
-          "type": "array",
-          "items": {
-            "$ref": "AppRestrictionsSchemaRestriction"
-          }
-        },
-        "title": {
-          "type": "string",
-          "description": "The name of the restriction."
-        },
-        "defaultValue": {
-          "description": "The default value of the restriction. bundle and bundleArray restrictions never have a default value.",
-          "$ref": "AppRestrictionsSchemaRestrictionRestrictionValue"
-        },
-        "key": {
-          "type": "string",
-          "description": "The unique key that the product uses to identify the restriction, e.g. \"com.google.android.gm.fieldname\"."
-        }
-      },
-      "description": "A restriction in the App Restriction Schema represents a piece of configuration that may be pre-applied.",
-      "id": "AppRestrictionsSchemaRestriction",
-      "type": "object"
-    },
-    "StoreLayoutClustersListResponse": {
-      "type": "object",
-      "id": "StoreLayoutClustersListResponse",
-      "properties": {
-        "cluster": {
-          "type": "array",
-          "description": "A store cluster of an enterprise.",
-          "items": {
-            "$ref": "StoreCluster"
-          }
-        }
-      }
-    },
-    "AdministratorWebTokenSpecPrivateApps": {
-      "properties": {
-        "enabled": {
-          "type": "boolean",
-          "description": "Whether the Private Apps page is displayed. Default is true."
-        }
-      },
-      "id": "AdministratorWebTokenSpecPrivateApps",
-      "type": "object"
-    },
-    "AdministratorWebTokenSpecStoreBuilder": {
-      "type": "object",
-      "properties": {
-        "enabled": {
-          "type": "boolean",
-          "description": "Whether the Organize apps page is displayed. Default is true."
-        }
-      },
-      "id": "AdministratorWebTokenSpecStoreBuilder"
-    },
-    "ProductSigningCertificate": {
-      "properties": {
-        "certificateHashSha1": {
-          "description": "The base64 urlsafe encoded SHA1 hash of the certificate. (This field is deprecated in favor of SHA2-256. It should not be used and may be removed at any time.)",
-          "type": "string"
-        },
-        "certificateHashSha256": {
-          "type": "string",
-          "description": "The base64 urlsafe encoded SHA2-256 hash of the certificate."
-        }
-      },
-      "id": "ProductSigningCertificate",
-      "type": "object"
-    },
-    "AdministratorWebTokenSpecPlaySearch": {
-      "id": "AdministratorWebTokenSpecPlaySearch",
-      "type": "object",
-      "properties": {
-        "approveApps": {
-          "description": "Allow access to the iframe in approve mode. Default is false.",
-          "type": "boolean"
-        },
-        "enabled": {
-          "description": "Whether the managed Play Search apps page is displayed. Default is true.",
-          "type": "boolean"
-        }
-      }
-    },
-    "AppVersion": {
-      "id": "AppVersion",
-      "description": "This represents a single version of the app.",
-      "type": "object",
-      "properties": {
-        "isProduction": {
-          "description": "True if this version is a production APK.",
-          "type": "boolean"
-        },
-        "versionString": {
-          "description": "The string used in the Play store by the app developer to identify the version. The string is not necessarily unique or localized (for example, the string could be \"1.4\").",
-          "type": "string"
-        },
-        "versionCode": {
-          "type": "integer",
-          "description": "Unique increasing identifier for the app version.",
-          "format": "int32"
-        },
-        "track": {
-          "enum": [
-            "appTrackUnspecified",
-            "production",
-            "beta",
-            "alpha"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "Deprecated, use trackId instead.",
-          "type": "string"
-        },
-        "trackId": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "Track ids that the app version is published in. Replaces the track field (deprecated), but doesn't include the production track (see isProduction instead)."
-        }
-      }
-    },
-    "ProductApprovalEvent": {
-      "properties": {
-        "productId": {
-          "description": "The id of the product (e.g. \"app:com.google.android.gm\") for which the approval status has changed. This field will always be present.",
-          "type": "string"
-        },
-        "approved": {
-          "type": "string",
-          "description": "Whether the product was approved or unapproved. This field will always be present.",
-          "enumDescriptions": [
-            "Conveys no information.",
-            "The product was approved.",
-            "The product was unapproved."
-          ],
-          "enum": [
-            "unknown",
-            "approved",
-            "unapproved"
-          ]
-        }
-      },
-      "id": "ProductApprovalEvent",
-      "type": "object",
-      "description": "An event generated when a product's approval status is changed."
-    },
-    "AppRestrictionsSchemaRestrictionRestrictionValue": {
-      "properties": {
-        "valueInteger": {
-          "format": "int32",
-          "description": "The integer value - this will only be present if type is integer.",
-          "type": "integer"
-        },
-        "valueBool": {
-          "description": "The boolean value - this will only be present if type is bool.",
-          "type": "boolean"
-        },
-        "valueMultiselect": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "The list of string values - this will only be present if type is multiselect."
-        },
-        "valueString": {
-          "description": "The string value - this will be present for types string, choice and hidden.",
-          "type": "string"
-        },
-        "type": {
-          "description": "The type of the value being provided.",
-          "enumDescriptions": [
-            "A restriction of boolean type.",
-            "A restriction of string type.",
-            "A restriction of integer type.",
-            "A choice of one item from a set.",
-            "A choice of multiple items from a set.",
-            "A hidden restriction of string type (the default value can be used to pass along information that cannot be modified, such as a version code).",
-            "[M+ devices only] A bundle of restrictions",
-            "[M+ devices only] An array of restriction bundles"
-          ],
-          "type": "string",
-          "enum": [
-            "bool",
-            "string",
-            "integer",
-            "choice",
-            "multiselect",
-            "hidden",
-            "bundle",
-            "bundleArray"
-          ]
-        }
-      },
-      "description": "A typed value for the restriction.",
-      "type": "object",
-      "id": "AppRestrictionsSchemaRestrictionRestrictionValue"
-    },
-    "TokenPagination": {
-      "properties": {
-        "previousPageToken": {
-          "type": "string"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Tokens to pass to the standard list field 'page_token'. Whenever available, tokens are preferred over manipulating start_index."
-        }
-      },
-      "description": "Pagination information returned by a List operation when token pagination is enabled. List operations that supports paging return only one \"page\" of results. This protocol buffer message describes the page that has been returned. When using token pagination, clients should use the next/previous token to get another page of the result. The presence or absence of next/previous token indicates whether a next/previous page is available and provides a mean of accessing this page. ListRequest.page_token should be set to either next_page_token or previous_page_token to access another page.",
-      "type": "object",
-      "id": "TokenPagination"
-    },
-    "AdministratorWebTokenSpec": {
-      "type": "object",
-      "properties": {
-        "managedConfigurations": {
-          "$ref": "AdministratorWebTokenSpecManagedConfigurations",
-          "description": "Options for displaying the Managed Configuration page."
-        },
-        "privateApps": {
-          "description": "Options for displaying the Private Apps page.",
-          "$ref": "AdministratorWebTokenSpecPrivateApps"
-        },
-        "webApps": {
-          "description": "Options for displaying the Web Apps page.",
-          "$ref": "AdministratorWebTokenSpecWebApps"
-        },
-        "permission": {
-          "items": {
-            "type": "string",
-            "enum": [
-              "unknown",
-              "approveApps",
-              "manageMcm"
-            ],
-            "enumDescriptions": [
-              "Unknown permission.",
-              "Permission to approve and unapprove apps.",
-              "Permission to manage app restrictions."
-            ]
-          },
-          "type": "array",
-          "description": "Deprecated. Use PlaySearch.approveApps."
-        },
-        "storeBuilder": {
-          "description": "Options for displaying the Organize apps page.",
-          "$ref": "AdministratorWebTokenSpecStoreBuilder"
-        },
-        "parent": {
-          "description": "The URI of the parent frame hosting the iframe. To prevent XSS, the iframe may not be hosted at other URIs. This URI must be https. Use whitespaces to separate multiple parent URIs.",
-          "type": "string"
-        },
-        "playSearch": {
-          "$ref": "AdministratorWebTokenSpecPlaySearch",
-          "description": "Options for displaying the managed Play Search apps page."
-        }
-      },
-      "id": "AdministratorWebTokenSpec",
-      "description": "Specification for a token used to generate iframes. The token specifies what data the admin is allowed to modify and the URI the iframe is allowed to communiate with."
-    },
-    "AppRestrictionsSchema": {
-      "properties": {
-        "restrictions": {
-          "type": "array",
-          "description": "The set of restrictions that make up this schema.",
-          "items": {
-            "$ref": "AppRestrictionsSchemaRestriction"
-          }
-        },
-        "kind": {
-          "type": "string",
-          "description": "Deprecated."
-        }
-      },
-      "type": "object",
-      "description": "Represents the list of app restrictions available to be pre-configured for the product.",
-      "id": "AppRestrictionsSchema"
-    },
-    "Enterprise": {
-      "properties": {
-        "administrator": {
-          "type": "array",
-          "items": {
-            "$ref": "Administrator"
-          },
-          "description": "Admins of the enterprise. This is only supported for enterprises created via the EMM-initiated flow."
-        },
-        "name": {
-          "description": "The name of the enterprise, for example, \"Example, Inc\".",
-          "type": "string"
-        },
-        "id": {
-          "description": "The unique ID for the enterprise.",
-          "type": "string"
-        },
-        "primaryDomain": {
-          "description": "The enterprise's primary domain, such as \"example.com\".",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "An Enterprises resource represents the binding between an EMM and a specific organization. That binding can be instantiated in one of two different ways using this API as follows: - For Google managed domain customers, the process involves using Enterprises.enroll and Enterprises.setAccount (in conjunction with artifacts obtained from the Admin console and the Google API Console) and submitted to the EMM through a more-or-less manual process. - For managed Google Play Accounts customers, the process involves using Enterprises.generateSignupUrl and Enterprises.completeSignup in conjunction with the managed Google Play sign-up UI (Google-provided mechanism) to create the binding without manual steps. As an EMM, you can support either or both approaches in your EMM console. See Create an Enterprise for details.",
-      "id": "Enterprise"
-    },
-    "Policy": {
-      "id": "Policy",
-      "properties": {
-        "autoUpdatePolicy": {
-          "type": "string",
-          "enumDescriptions": [
-            "The auto update policy is not set.",
-            "The user can control auto-updates.",
-            "Apps are never auto-updated.",
-            "Apps are auto-updated over WiFi only.",
-            "Apps are auto-updated at any time. Data charges may apply."
-          ],
-          "description": "The auto-update policy for apps installed on the device. \"choiceToTheUser\" allows the device's user to configure the app update policy. \"always\" enables auto updates. \"never\" disables auto updates. \"wifiOnly\" enables auto updates only when the device is connected to wifi.",
-          "enum": [
-            "autoUpdatePolicyUnspecified",
-            "choiceToTheUser",
-            "never",
-            "wifiOnly",
-            "always"
-          ]
-        },
-        "deviceReportPolicy": {
-          "type": "string",
-          "description": "Whether the device reports app states to the EMM. The default value is \"deviceReportDisabled\".",
-          "enum": [
-            "deviceReportPolicyUnspecified",
-            "deviceReportDisabled",
-            "deviceReportEnabled"
-          ],
-          "enumDescriptions": [
-            "The device report policy is not set.",
-            "Device reports are disabled.",
-            "Device reports are enabled."
-          ]
-        },
-        "productPolicy": {
-          "type": "array",
-          "description": "The list of product policies. The productAvailabilityPolicy needs to be set to WHITELIST or ALL for the product policies to be applied.",
-          "items": {
-            "$ref": "ProductPolicy"
-          }
-        },
-        "productAvailabilityPolicy": {
-          "enum": [
-            "productAvailabilityPolicyUnspecified",
-            "whitelist",
-            "all"
-          ],
-          "description": "The availability granted to the device for the specified products. \"all\" gives the device access to all products, regardless of approval status. \"all\" does not enable automatic visibility of \"alpha\" or \"beta\" tracks. \"whitelist\" grants the device access the products specified in productPolicy[]. Only products that are approved or products that were previously approved (products with revoked approval) by the enterprise can be whitelisted. If no value is provided, the availability set at the user level is applied by default.",
-          "enumDescriptions": [
-            "Unspecified, applies the user available product set by default.",
-            "The approved products with product availability set to AVAILABLE in the product policy are available.",
-            "All products are available except those explicitly marked as unavailable in the product availability policy."
-          ],
-          "type": "string"
-        },
-        "maintenanceWindow": {
-          "description": "The maintenance window defining when apps running in the foreground should be updated.",
-          "$ref": "MaintenanceWindow"
-        }
-      },
-      "description": "The device policy for a given managed device.",
-      "type": "object"
-    },
-    "PageInfo": {
-      "description": "Information about the current page. List operations that supports paging return only one \"page\" of results. This protocol buffer message describes the page that has been returned.",
-      "properties": {
-        "totalResults": {
-          "description": "Total number of results available on the backend ! The total number of results in the result set.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "startIndex": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Index of the first result returned in the current page."
-        },
-        "resultPerPage": {
-          "description": "Maximum number of results returned in one page. ! The number of results included in the API response.",
-          "type": "integer",
-          "format": "int32"
-        }
-      },
-      "id": "PageInfo",
-      "type": "object"
-    },
-    "GroupLicenseUsersListResponse": {
-      "id": "GroupLicenseUsersListResponse",
-      "type": "object",
-      "properties": {
-        "user": {
-          "type": "array",
-          "items": {
-            "$ref": "User"
-          },
-          "description": "A user of an enterprise."
-        }
-      }
-    },
-    "AppUpdateEvent": {
-      "id": "AppUpdateEvent",
-      "description": "An event generated when a new version of an app is uploaded to Google Play. Notifications are sent for new public versions only: alpha, beta, or canary versions do not generate this event. To fetch up-to-date version history for an app, use Products.Get on the EMM API.",
-      "type": "object",
-      "properties": {
-        "productId": {
-          "type": "string",
-          "description": "The id of the product (e.g. \"app:com.google.android.gm\") that was updated. This field will always be present."
-        }
-      }
-    },
-    "NewDeviceEvent": {
-      "properties": {
-        "deviceId": {
-          "description": "The Android ID of the device. This field will always be present.",
-          "type": "string"
-        },
-        "dpcPackageName": {
-          "type": "string",
-          "description": "Policy app on the device."
-        },
-        "userId": {
-          "type": "string",
-          "description": "The ID of the user. This field will always be present."
-        },
-        "managementType": {
-          "type": "string",
-          "enum": [
-            "managedDevice",
-            "managedProfile"
-          ],
-          "description": "Identifies the extent to which the device is controlled by an Android EMM in various deployment configurations. Possible values include: - \"managedDevice\", a device where the DPC is set as device owner, - \"managedProfile\", a device where the DPC is set as profile owner. ",
-          "enumDescriptions": [
-            "",
-            ""
-          ]
-        }
-      },
-      "id": "NewDeviceEvent",
-      "description": "An event generated when a new device is ready to be managed.",
-      "type": "object"
-    },
-    "GroupLicense": {
-      "type": "object",
-      "description": "Group license objects allow you to keep track of licenses (called entitlements) for both free and paid apps. For a free app, a group license is created when an enterprise admin first approves the product in Google Play or when the first entitlement for the product is created for a user via the API. For a paid app, a group license object is only created when an enterprise admin purchases the product in Google Play for the first time. Use the API to query group licenses. A Grouplicenses resource includes the total number of licenses purchased (paid apps only) and the total number of licenses currently in use. In other words, the total number of Entitlements that exist for the product. Only one group license object is created per product and group license objects are never deleted. If a product is unapproved, its group license remains. This allows enterprise admins to keep track of any remaining entitlements for the product.",
-      "properties": {
-        "permissions": {
-          "type": "string",
-          "enum": [
-            "currentApproved",
-            "needsReapproval",
-            "allCurrentAndFutureApproved"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "description": "The permission approval status of the product. This field is only set if the product is approved. Possible states are: - \"currentApproved\", the current set of permissions is approved, but additional permissions will require the administrator to reapprove the product (If the product was approved without specifying the approved permissions setting, then this is the default behavior.), - \"needsReapproval\", the product has unapproved permissions. No additional product licenses can be assigned until the product is reapproved, - \"allCurrentAndFutureApproved\", the current permissions are approved and any future permission updates will be automatically approved without administrator review. "
-        },
-        "approval": {
-          "enum": [
-            "approved",
-            "unapproved"
-          ],
-          "type": "string",
-          "description": "Whether the product to which this group license relates is currently approved by the enterprise. Products are approved when a group license is first created, but this approval may be revoked by an enterprise admin via Google Play. Unapproved products will not be visible to end users in collections, and new entitlements to them should not normally be created.",
-          "enumDescriptions": [
-            "",
-            ""
-          ]
-        },
-        "numPurchased": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The number of purchased licenses (possibly in multiple purchases). If this field is omitted, then there is no limit on the number of licenses that can be provisioned (for example, if the acquisition kind is \"free\")."
-        },
-        "productId": {
-          "description": "The ID of the product that the license is for. For example, \"app:com.google.android.gm\".",
-          "type": "string"
-        },
-        "acquisitionKind": {
-          "enum": [
-            "free",
-            "bulkPurchase"
-          ],
-          "description": "How this group license was acquired. \"bulkPurchase\" means that this Grouplicenses resource was created because the enterprise purchased licenses for this product; otherwise, the value is \"free\" (for free products).",
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            ""
-          ]
-        },
-        "numProvisioned": {
-          "description": "The total number of provisioned licenses for this product. Returned by read operations, but ignored in write operations.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "GroupLicense"
-    },
-    "ManagedPropertyBundle": {
-      "type": "object",
-      "id": "ManagedPropertyBundle",
-      "description": "A bundle of managed properties.",
-      "properties": {
-        "managedProperty": {
-          "items": {
-            "$ref": "ManagedProperty"
-          },
-          "type": "array",
-          "description": "The list of managed properties."
-        }
-      }
-    },
-    "StoreCluster": {
-      "type": "object",
-      "description": "Definition of a managed Google Play store cluster, a list of products displayed as part of a store page.",
-      "properties": {
-        "productId": {
-          "items": {
-            "type": "string"
-          },
-          "description": "List of products in the order they are displayed in the cluster. There should not be duplicates within a cluster.",
-          "type": "array"
-        },
-        "id": {
-          "description": "Unique ID of this cluster. Assigned by the server. Immutable once assigned.",
-          "type": "string"
-        },
-        "orderInPage": {
-          "description": "String (US-ASCII only) used to determine order of this cluster within the parent page's elements. Page elements are sorted in lexicographic order of this field. Duplicated values are allowed, but ordering between elements with duplicate order is undefined. The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 256 characters.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Ordered list of localized strings giving the name of this page. The text displayed is the one that best matches the user locale, or the first entry if there is no good match. There needs to be at least one entry.",
-          "items": {
-            "$ref": "LocalizedText"
-          },
-          "type": "array"
-        }
-      },
-      "id": "StoreCluster"
-    },
-    "WebAppIcon": {
-      "properties": {
-        "imageData": {
-          "type": "string",
-          "description": "The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 \"Base 64 Encoding with URL and Filename Safe Alphabet\"). - The image type can be png or jpg. - The image should ideally be square. - The image should ideally have a size of 512x512. "
-        }
-      },
-      "id": "WebAppIcon",
-      "type": "object",
-      "description": "Icon for a web app."
-    },
-    "StoreLayout": {
-      "type": "object",
-      "properties": {
-        "homepageId": {
-          "type": "string",
-          "description": "The ID of the store page to be used as the homepage. The homepage is the first page shown in the managed Google Play Store. Not specifying a homepage is equivalent to setting the store layout type to \"basic\"."
-        },
-        "storeLayoutType": {
-          "enum": [
-            "unknown",
-            "basic",
-            "custom"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "description": "The store layout type. By default, this value is set to \"basic\" if the homepageId field is not set, and to \"custom\" otherwise. If set to \"basic\", the layout will consist of all approved apps that have been whitelisted for the user."
-        }
-      },
-      "id": "StoreLayout",
-      "description": "General setting for the managed Google Play store layout, currently only specifying the page to display the first time the store is opened."
-    },
-    "Notification": {
-      "id": "Notification",
-      "type": "object",
-      "description": "A notification of one event relating to an enterprise.",
-      "properties": {
-        "appUpdateEvent": {
-          "$ref": "AppUpdateEvent",
-          "description": "Notifications about app updates."
-        },
-        "installFailureEvent": {
-          "$ref": "InstallFailureEvent",
-          "description": "Notifications about an app installation failure."
-        },
-        "enterpriseId": {
-          "type": "string",
-          "description": "The ID of the enterprise for which the notification is sent. This will always be present."
-        },
-        "deviceReportUpdateEvent": {
-          "description": "Notifications about device report updates.",
-          "$ref": "DeviceReportUpdateEvent"
-        },
-        "newDeviceEvent": {
-          "description": "Notifications about new devices.",
-          "$ref": "NewDeviceEvent"
-        },
-        "appRestrictionsSchemaChangeEvent": {
-          "$ref": "AppRestrictionsSchemaChangeEvent",
-          "description": "Notifications about new app restrictions schema changes."
-        },
-        "productApprovalEvent": {
-          "$ref": "ProductApprovalEvent",
-          "description": "Notifications about changes to a product's approval status."
-        },
-        "notificationType": {
-          "enumDescriptions": [
-            "",
-            "A test push notification.",
-            "Notification about change to a product's approval status.",
-            "Notification about an app installation failure.",
-            "Notification about app update.",
-            "Notification about new app permissions.",
-            "Notification about new app restrictions schema change.",
-            "Notification about product availability change.",
-            "Notification about a new device.",
-            "Notification about an updated device report."
-          ],
-          "enum": [
-            "unknown",
-            "testNotification",
-            "productApproval",
-            "installFailure",
-            "appUpdate",
-            "newPermissions",
-            "appRestricionsSchemaChange",
-            "productAvailabilityChange",
-            "newDevice",
-            "deviceReportUpdate"
-          ],
-          "description": "Type of the notification.",
-          "type": "string"
-        },
-        "newPermissionsEvent": {
-          "$ref": "NewPermissionsEvent",
-          "description": "Notifications about new app permissions."
-        },
-        "productAvailabilityChangeEvent": {
-          "description": "Notifications about product availability changes.",
-          "$ref": "ProductAvailabilityChangeEvent"
-        },
-        "timestampMillis": {
-          "description": "The time when the notification was published in milliseconds since 1970-01-01T00:00:00Z. This will always be present.",
-          "format": "int64",
-          "type": "string"
-        }
-      }
-    },
-    "ManagedConfigurationsSettingsListResponse": {
-      "properties": {
-        "managedConfigurationsSettings": {
-          "type": "array",
-          "items": {
-            "$ref": "ManagedConfigurationsSettings"
-          },
-          "description": "A managed configurations settings for an app that may be assigned to a group of users in an enterprise."
-        }
-      },
-      "type": "object",
-      "id": "ManagedConfigurationsSettingsListResponse"
-    },
-    "WebApp": {
-      "properties": {
-        "isPublished": {
-          "description": "A flag whether the app has been published to the Play store yet.",
-          "type": "boolean"
-        },
-        "displayMode": {
-          "enum": [
-            "displayModeUnspecified",
-            "minimalUi",
-            "standalone",
-            "fullScreen"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "Opens the web app with a minimal set of browser UI elements for controlling navigation and viewing the page URL.",
-            "Opens the web app to look and feel like a standalone native application. The browser UI elements and page URL are not visible, however the system status bar and back button are visible.",
-            "Opens the web app in full screen without any visible controls. The browser UI elements, page URL, system status bar and back button are not visible, and the web app takes up the entirety of the available display area."
-          ],
-          "description": "The display mode of the web app. Possible values include: - \"minimalUi\", the device's status bar, navigation bar, the app's URL, and a refresh button are visible when the app is open. For HTTP URLs, you can only select this option. - \"standalone\", the device's status bar and navigation bar are visible when the app is open. - \"fullScreen\", the app opens in full screen mode, hiding the device's status and navigation bars. All browser UI elements, page URL, system status bar and back button are not visible, and the web app takes up the entirety of the available display area. "
-        },
-        "startUrl": {
-          "type": "string",
-          "description": "The start URL, i.e. the URL that should load when the user opens the application."
-        },
-        "webAppId": {
-          "type": "string",
-          "description": "The ID of the application. A string of the form \"app:\u003cpackage name\u003e\" where the package name always starts with the prefix \"com.google.enterprise.webapp.\" followed by a random id."
-        },
-        "title": {
-          "description": "The title of the web app as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).",
-          "type": "string"
-        },
-        "versionCode": {
-          "type": "string",
-          "format": "int64",
-          "description": "The current version of the app. Note that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date."
-        },
-        "icons": {
-          "description": "A list of icons representing this website. If absent, a default icon (for create) or the current icon (for update) will be used.",
-          "type": "array",
-          "items": {
-            "$ref": "WebAppIcon"
-          }
-        }
-      },
-      "type": "object",
-      "description": "A WebApps resource represents a web app created for an enterprise. Web apps are published to managed Google Play and can be distributed like other Android apps. On a user's device, a web app opens its specified URL.",
-      "id": "WebApp"
-    },
-    "DevicesListResponse": {
-      "properties": {
-        "device": {
-          "description": "A managed device.",
-          "type": "array",
-          "items": {
-            "$ref": "Device"
-          }
-        }
-      },
-      "type": "object",
-      "id": "DevicesListResponse"
-    },
-    "AuthenticationToken": {
-      "type": "object",
-      "description": "An AuthenticationToken is used by the EMM's device policy client on a device to provision the given EMM-managed user on that device.",
-      "id": "AuthenticationToken",
-      "properties": {
-        "token": {
-          "description": "The authentication token to be passed to the device policy client on the device where it can be used to provision the account for which this token was generated.",
-          "type": "string"
-        }
-      }
-    },
-    "LocalizedText": {
-      "properties": {
-        "locale": {
-          "type": "string",
-          "description": "The BCP47 tag for a locale. (e.g. \"en-US\", \"de\")."
-        },
-        "text": {
-          "type": "string",
-          "description": "The text localized in the associated locale."
-        }
-      },
-      "type": "object",
-      "id": "LocalizedText",
-      "description": "A localized string with its locale."
-    },
-    "GroupLicensesListResponse": {
-      "type": "object",
-      "id": "GroupLicensesListResponse",
-      "properties": {
-        "groupLicense": {
-          "type": "array",
-          "items": {
-            "$ref": "GroupLicense"
-          },
-          "description": "A group license for a product approved for use in the enterprise."
-        }
-      }
-    },
-    "ProductVisibility": {
-      "description": "A product to be made visible to a user.",
-      "properties": {
-        "tracks": {
-          "description": "Deprecated. Use trackIds instead.",
-          "items": {
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              ""
-            ],
-            "type": "string",
-            "enum": [
-              "appTrackUnspecified",
-              "production",
-              "beta",
-              "alpha"
-            ]
-          },
-          "type": "array"
-        },
-        "productId": {
-          "description": "The product ID to make visible to the user. Required for each item in the productVisibility list.",
-          "type": "string"
-        },
-        "trackIds": {
-          "type": "array",
-          "description": "Grants the user visibility to the specified product track(s), identified by trackIds.",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "ProductVisibility",
-      "type": "object"
-    },
-    "ProductsGenerateApprovalUrlResponse": {
-      "type": "object",
-      "id": "ProductsGenerateApprovalUrlResponse",
-      "properties": {
-        "url": {
-          "description": "A URL that can be rendered in an iframe to display the permissions (if any) of a product. This URL can be used to approve the product only once and only within 24 hours of being generated, using the Products.approve call. If the product is currently unapproved and has no permissions, this URL will point to an empty page. If the product is currently approved, a URL will only be generated if that product has added permissions since it was last approved, and the URL will only display those new permissions that have not yet been accepted.",
-          "type": "string"
-        }
-      }
-    },
-    "Permission": {
-      "description": "A Permissions resource represents some extra capability, to be granted to an Android app, which requires explicit consent. An enterprise admin must consent to these permissions on behalf of their users before an entitlement for the app can be created. The permissions collection is read-only. The information provided for each permission (localized name and description) is intended to be used in the MDM user interface when obtaining consent from the enterprise.",
-      "id": "Permission",
-      "properties": {
-        "permissionId": {
-          "type": "string",
-          "description": "An opaque string uniquely identifying the permission."
-        },
-        "description": {
-          "description": "A longer description of the Permissions resource, giving more details of what it affects.",
-          "type": "string"
-        },
-        "name": {
-          "description": "The name of the permission.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "AppState": {
-      "type": "object",
-      "id": "AppState",
-      "description": "List of states set by the app.",
-      "properties": {
-        "packageName": {
-          "description": "The package name of the app. This field will always be present.",
-          "type": "string"
-        },
-        "keyedAppState": {
-          "description": "List of keyed app states. This field will always be present.",
-          "items": {
-            "$ref": "KeyedAppState"
-          },
-          "type": "array"
-        }
-      }
-    }
-  },
-  "discoveryVersion": "v1",
-  "canonicalName": "Android Enterprise",
-  "documentationLink": "https://developers.google.com/android/work/play/emm-api",
-  "protocol": "rest",
-  "mtlsRootUrl": "https://androidenterprise.mtls.googleapis.com/",
-  "baseUrl": "https://androidenterprise.googleapis.com/",
-  "rootUrl": "https://androidenterprise.googleapis.com/",
-  "servicePath": "",
-  "batchPath": "batch",
-  "id": "androidenterprise:v1",
-  "revision": "20201104",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/androidenterprise": {
-          "description": "Manage corporate Android devices"
-        }
-      }
-    }
-  },
-  "resources": {
-    "managedconfigurationsfordevice": {
-      "methods": {
-        "delete": {
-          "description": "Removes a per-device managed configuration for an app for the specified device.",
-          "parameterOrder": [
-            "enterpriseId",
-            "userId",
-            "deviceId",
-            "managedConfigurationForDeviceId"
-          ],
-          "httpMethod": "DELETE",
-          "parameters": {
-            "enterpriseId": {
-              "required": true,
-              "type": "string",
-              "description": "The ID of the enterprise.",
-              "location": "path"
-            },
-            "deviceId": {
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "description": "The Android ID of the device."
-            },
-            "userId": {
-              "required": true,
-              "type": "string",
-              "description": "The ID of the user.",
-              "location": "path"
-            },
-            "managedConfigurationForDeviceId": {
-              "description": "The ID of the managed configuration (a product ID), e.g. \"app:com.google.android.gm\".",
-              "type": "string",
-              "required": true,
-              "location": "path"
+        "products": {
+            "methods": {
+                "approve": {
+                    "description": " Approves the specified product and the relevant app permissions, if any. The maximum number of products that you can approve per enterprise customer is 1,000. To learn how to use managed Google Play to design and create a store layout to display approved products to your users, see Store Layout Design. ",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/approve",
+                    "httpMethod": "POST",
+                    "id": "androidenterprise.products.approve",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "productId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "productId": {
+                            "description": "The ID of the product.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/approve",
+                    "request": {
+                        "$ref": "ProductsApproveRequest"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "generateApprovalUrl": {
+                    "description": "Generates a URL that can be rendered in an iframe to display the permissions (if any) of a product. An enterprise admin must view these permissions and accept them on behalf of their organization in order to approve that product. Admins should accept the displayed permissions by interacting with a separate UI element in the EMM console, which in turn should trigger the use of this URL as the approvalUrlInfo.approvalUrl property in a Products.approve call to approve the product. This URL can only be used to display permissions for up to 1 day.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/generateApprovalUrl",
+                    "httpMethod": "POST",
+                    "id": "androidenterprise.products.generateApprovalUrl",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "productId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "languageCode": {
+                            "description": "The BCP 47 language code used for permission names and descriptions in the returned iframe, for instance \"en-US\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "productId": {
+                            "description": "The ID of the product.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/generateApprovalUrl",
+                    "response": {
+                        "$ref": "ProductsGenerateApprovalUrlResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "get": {
+                    "description": "Retrieves details of a product for display to an enterprise admin.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.products.get",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "productId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "language": {
+                            "description": "The BCP47 tag for the user's preferred language (e.g. \"en-US\", \"de\").",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "productId": {
+                            "description": "The ID of the product, e.g. \"app:com.google.android.gm\".",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}",
+                    "response": {
+                        "$ref": "Product"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "getAppRestrictionsSchema": {
+                    "description": "Retrieves the schema that defines the configurable properties for this product. All products have a schema, but this schema may be empty if no managed configurations have been defined. This schema can be used to populate a UI that allows an admin to configure the product. To apply a managed configuration based on the schema obtained using this API, see Managed Configurations through Play.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/appRestrictionsSchema",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.products.getAppRestrictionsSchema",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "productId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "language": {
+                            "description": "The BCP47 tag for the user's preferred language (e.g. \"en-US\", \"de\").",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "productId": {
+                            "description": "The ID of the product.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/appRestrictionsSchema",
+                    "response": {
+                        "$ref": "AppRestrictionsSchema"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "getPermissions": {
+                    "description": "Retrieves the Android app permissions required by this app.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/permissions",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.products.getPermissions",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "productId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "productId": {
+                            "description": "The ID of the product.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/permissions",
+                    "response": {
+                        "$ref": "ProductPermissions"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "list": {
+                    "description": "Finds approved products that match a query, or all approved products if there is no query.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/products",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.products.list",
+                    "parameterOrder": [
+                        "enterpriseId"
+                    ],
+                    "parameters": {
+                        "approved": {
+                            "description": "Specifies whether to search among all products (false) or among only products that have been approved (true). Only \"true\" is supported, and should be specified.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "language": {
+                            "description": "The BCP47 tag for the user's preferred language (e.g. \"en-US\", \"de\"). Results are returned in the language best matching the preferred language.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "description": "Defines how many results the list operation should return. The default number depends on the resource collection.",
+                            "format": "uint32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "query": {
+                            "description": "The search query as typed in the Google Play store search box. If omitted, all approved apps will be returned (using the pagination parameters), including apps that are not available in the store (e.g. unpublished apps).",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "token": {
+                            "description": "Defines the token of the page to return, usually taken from TokenPagination. This can only be used if token paging is enabled.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/products",
+                    "response": {
+                        "$ref": "ProductsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "unapprove": {
+                    "description": "Unapproves the specified product (and the relevant app permissions, if any)",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/unapprove",
+                    "httpMethod": "POST",
+                    "id": "androidenterprise.products.unapprove",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "productId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "productId": {
+                            "description": "The ID of the product.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/unapprove",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                }
             }
-          },
-          "id": "androidenterprise.managedconfigurationsfordevice.delete",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice/{managedConfigurationForDeviceId}",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice/{managedConfigurationForDeviceId}"
         },
-        "update": {
-          "response": {
-            "$ref": "ManagedConfiguration"
-          },
-          "httpMethod": "PUT",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice/{managedConfigurationForDeviceId}",
-          "request": {
-            "$ref": "ManagedConfiguration"
-          },
-          "id": "androidenterprise.managedconfigurationsfordevice.update",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice/{managedConfigurationForDeviceId}",
-          "parameterOrder": [
-            "enterpriseId",
-            "userId",
-            "deviceId",
-            "managedConfigurationForDeviceId"
-          ],
-          "description": "Adds or updates a per-device managed configuration for an app for the specified device.",
-          "parameters": {
-            "deviceId": {
-              "location": "path",
-              "type": "string",
-              "description": "The Android ID of the device.",
-              "required": true
-            },
-            "userId": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "description": "The ID of the user."
-            },
-            "enterpriseId": {
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "description": "The ID of the enterprise."
-            },
-            "managedConfigurationForDeviceId": {
-              "location": "path",
-              "type": "string",
-              "description": "The ID of the managed configuration (a product ID), e.g. \"app:com.google.android.gm\".",
-              "required": true
+        "serviceaccountkeys": {
+            "methods": {
+                "delete": {
+                    "description": "Removes and invalidates the specified credentials for the service account associated with this enterprise. The calling service account must have been retrieved by calling Enterprises.GetServiceAccount and must have been set as the enterprise service account by calling Enterprises.SetAccount.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/serviceAccountKeys/{keyId}",
+                    "httpMethod": "DELETE",
+                    "id": "androidenterprise.serviceaccountkeys.delete",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "keyId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "keyId": {
+                            "description": "The ID of the key.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/serviceAccountKeys/{keyId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "insert": {
+                    "description": "Generates new credentials for the service account associated with this enterprise. The calling service account must have been retrieved by calling Enterprises.GetServiceAccount and must have been set as the enterprise service account by calling Enterprises.SetAccount. Only the type of the key should be populated in the resource to be inserted.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/serviceAccountKeys",
+                    "httpMethod": "POST",
+                    "id": "androidenterprise.serviceaccountkeys.insert",
+                    "parameterOrder": [
+                        "enterpriseId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/serviceAccountKeys",
+                    "request": {
+                        "$ref": "ServiceAccountKey"
+                    },
+                    "response": {
+                        "$ref": "ServiceAccountKey"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "list": {
+                    "description": "Lists all active credentials for the service account associated with this enterprise. Only the ID and key type are returned. The calling service account must have been retrieved by calling Enterprises.GetServiceAccount and must have been set as the enterprise service account by calling Enterprises.SetAccount.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/serviceAccountKeys",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.serviceaccountkeys.list",
+                    "parameterOrder": [
+                        "enterpriseId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/serviceAccountKeys",
+                    "response": {
+                        "$ref": "ServiceAccountKeysListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                }
             }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ]
         },
-        "list": {
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "response": {
-            "$ref": "ManagedConfigurationsForDeviceListResponse"
-          },
-          "parameters": {
-            "enterpriseId": {
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "The ID of the enterprise."
-            },
-            "userId": {
-              "description": "The ID of the user.",
-              "required": true,
-              "location": "path",
-              "type": "string"
-            },
-            "deviceId": {
-              "type": "string",
-              "location": "path",
-              "description": "The Android ID of the device.",
-              "required": true
+        "storelayoutclusters": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes a cluster.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters/{clusterId}",
+                    "httpMethod": "DELETE",
+                    "id": "androidenterprise.storelayoutclusters.delete",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "pageId",
+                        "clusterId"
+                    ],
+                    "parameters": {
+                        "clusterId": {
+                            "description": "The ID of the cluster.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "pageId": {
+                            "description": "The ID of the page.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters/{clusterId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "get": {
+                    "description": "Retrieves details of a cluster.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters/{clusterId}",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.storelayoutclusters.get",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "pageId",
+                        "clusterId"
+                    ],
+                    "parameters": {
+                        "clusterId": {
+                            "description": "The ID of the cluster.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "pageId": {
+                            "description": "The ID of the page.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters/{clusterId}",
+                    "response": {
+                        "$ref": "StoreCluster"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new cluster in a page.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters",
+                    "httpMethod": "POST",
+                    "id": "androidenterprise.storelayoutclusters.insert",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "pageId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "pageId": {
+                            "description": "The ID of the page.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters",
+                    "request": {
+                        "$ref": "StoreCluster"
+                    },
+                    "response": {
+                        "$ref": "StoreCluster"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves the details of all clusters on the specified page.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.storelayoutclusters.list",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "pageId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "pageId": {
+                            "description": "The ID of the page.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters",
+                    "response": {
+                        "$ref": "StoreLayoutClustersListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "update": {
+                    "description": "Updates a cluster.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters/{clusterId}",
+                    "httpMethod": "PUT",
+                    "id": "androidenterprise.storelayoutclusters.update",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "pageId",
+                        "clusterId"
+                    ],
+                    "parameters": {
+                        "clusterId": {
+                            "description": "The ID of the cluster.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "pageId": {
+                            "description": "The ID of the page.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters/{clusterId}",
+                    "request": {
+                        "$ref": "StoreCluster"
+                    },
+                    "response": {
+                        "$ref": "StoreCluster"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                }
             }
-          },
-          "id": "androidenterprise.managedconfigurationsfordevice.list",
-          "description": "Lists all the per-device managed configurations for the specified device. Only the ID is set.",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice",
-          "parameterOrder": [
-            "enterpriseId",
-            "userId",
-            "deviceId"
-          ],
-          "httpMethod": "GET"
         },
-        "get": {
-          "httpMethod": "GET",
-          "description": "Retrieves details of a per-device managed configuration.",
-          "parameters": {
-            "deviceId": {
-              "description": "The Android ID of the device.",
-              "type": "string",
-              "location": "path",
-              "required": true
-            },
-            "managedConfigurationForDeviceId": {
-              "required": true,
-              "description": "The ID of the managed configuration (a product ID), e.g. \"app:com.google.android.gm\".",
-              "type": "string",
-              "location": "path"
-            },
-            "enterpriseId": {
-              "description": "The ID of the enterprise.",
-              "location": "path",
-              "required": true,
-              "type": "string"
-            },
-            "userId": {
-              "location": "path",
-              "description": "The ID of the user.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "parameterOrder": [
-            "enterpriseId",
-            "userId",
-            "deviceId",
-            "managedConfigurationForDeviceId"
-          ],
-          "id": "androidenterprise.managedconfigurationsfordevice.get",
-          "response": {
-            "$ref": "ManagedConfiguration"
-          },
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice/{managedConfigurationForDeviceId}",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice/{managedConfigurationForDeviceId}"
-        }
-      }
-    },
-    "serviceaccountkeys": {
-      "methods": {
-        "delete": {
-          "id": "androidenterprise.serviceaccountkeys.delete",
-          "httpMethod": "DELETE",
-          "description": "Removes and invalidates the specified credentials for the service account associated with this enterprise. The calling service account must have been retrieved by calling Enterprises.GetServiceAccount and must have been set as the enterprise service account by calling Enterprises.SetAccount.",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/serviceAccountKeys/{keyId}",
-          "parameterOrder": [
-            "enterpriseId",
-            "keyId"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/serviceAccountKeys/{keyId}",
-          "parameters": {
-            "enterpriseId": {
-              "description": "The ID of the enterprise.",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            },
-            "keyId": {
-              "location": "path",
-              "required": true,
-              "description": "The ID of the key.",
-              "type": "string"
+        "storelayoutpages": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes a store page.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}",
+                    "httpMethod": "DELETE",
+                    "id": "androidenterprise.storelayoutpages.delete",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "pageId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "pageId": {
+                            "description": "The ID of the page.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "get": {
+                    "description": "Retrieves details of a store page.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.storelayoutpages.get",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "pageId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "pageId": {
+                            "description": "The ID of the page.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}",
+                    "response": {
+                        "$ref": "StorePage"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new store page.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages",
+                    "httpMethod": "POST",
+                    "id": "androidenterprise.storelayoutpages.insert",
+                    "parameterOrder": [
+                        "enterpriseId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages",
+                    "request": {
+                        "$ref": "StorePage"
+                    },
+                    "response": {
+                        "$ref": "StorePage"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves the details of all pages in the store.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.storelayoutpages.list",
+                    "parameterOrder": [
+                        "enterpriseId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages",
+                    "response": {
+                        "$ref": "StoreLayoutPagesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "update": {
+                    "description": "Updates the content of a store page.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}",
+                    "httpMethod": "PUT",
+                    "id": "androidenterprise.storelayoutpages.update",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "pageId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "pageId": {
+                            "description": "The ID of the page.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}",
+                    "request": {
+                        "$ref": "StorePage"
+                    },
+                    "response": {
+                        "$ref": "StorePage"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                }
             }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ]
         },
-        "list": {
-          "parameterOrder": [
-            "enterpriseId"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/serviceAccountKeys",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/serviceAccountKeys",
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "ServiceAccountKeysListResponse"
-          },
-          "description": "Lists all active credentials for the service account associated with this enterprise. Only the ID and key type are returned. The calling service account must have been retrieved by calling Enterprises.GetServiceAccount and must have been set as the enterprise service account by calling Enterprises.SetAccount.",
-          "parameters": {
-            "enterpriseId": {
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "description": "The ID of the enterprise."
+        "users": {
+            "methods": {
+                "delete": {
+                    "description": "Deleted an EMM-managed user.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}",
+                    "httpMethod": "DELETE",
+                    "id": "androidenterprise.users.delete",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "generateAuthenticationToken": {
+                    "description": "Generates an authentication token which the device policy client can use to provision the given EMM-managed user account on a device. The generated token is single-use and expires after a few minutes. You can provision a maximum of 10 devices per user. This call only works with EMM-managed accounts.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/authenticationToken",
+                    "httpMethod": "POST",
+                    "id": "androidenterprise.users.generateAuthenticationToken",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/authenticationToken",
+                    "response": {
+                        "$ref": "AuthenticationToken"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "get": {
+                    "description": "Retrieves a user's details.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.users.get",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}",
+                    "response": {
+                        "$ref": "User"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "getAvailableProductSet": {
+                    "description": "Retrieves the set of products a user is entitled to access.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/availableProductSet",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.users.getAvailableProductSet",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/availableProductSet",
+                    "response": {
+                        "$ref": "ProductSet"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "insert": {
+                    "description": "Creates a new EMM-managed user. The Users resource passed in the body of the request should include an accountIdentifier and an accountType. If a corresponding user already exists with the same account identifier, the user will be updated with the resource. In this case only the displayName field can be changed.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users",
+                    "httpMethod": "POST",
+                    "id": "androidenterprise.users.insert",
+                    "parameterOrder": [
+                        "enterpriseId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users",
+                    "request": {
+                        "$ref": "User"
+                    },
+                    "response": {
+                        "$ref": "User"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "list": {
+                    "description": "Looks up a user by primary email address. This is only supported for Google-managed users. Lookup of the id is not needed for EMM-managed users because the id is already returned in the result of the Users.insert call.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.users.list",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "email"
+                    ],
+                    "parameters": {
+                        "email": {
+                            "description": "Required. The exact primary email address of the user to look up.",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users",
+                    "response": {
+                        "$ref": "UsersListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "revokeDeviceAccess": {
+                    "description": "Revokes access to all devices currently provisioned to the user. The user will no longer be able to use the managed Play store on any of their managed devices. This call only works with EMM-managed accounts.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/deviceAccess",
+                    "httpMethod": "DELETE",
+                    "id": "androidenterprise.users.revokeDeviceAccess",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/deviceAccess",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "setAvailableProductSet": {
+                    "description": "Modifies the set of products that a user is entitled to access (referred to as *whitelisted* products). Only products that are approved or products that were previously approved (products with revoked approval) can be whitelisted.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/availableProductSet",
+                    "httpMethod": "PUT",
+                    "id": "androidenterprise.users.setAvailableProductSet",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/availableProductSet",
+                    "request": {
+                        "$ref": "ProductSet"
+                    },
+                    "response": {
+                        "$ref": "ProductSet"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "update": {
+                    "description": "Updates the details of an EMM-managed user. Can be used with EMM-managed users only (not Google managed users). Pass the new details in the Users resource in the request body. Only the displayName field can be changed. Other fields must either be unset or have the currently active value.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}",
+                    "httpMethod": "PUT",
+                    "id": "androidenterprise.users.update",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "userId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "The ID of the user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}",
+                    "request": {
+                        "$ref": "User"
+                    },
+                    "response": {
+                        "$ref": "User"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                }
             }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "id": "androidenterprise.serviceaccountkeys.list"
         },
-        "insert": {
-          "parameters": {
-            "enterpriseId": {
-              "type": "string",
-              "required": true,
-              "description": "The ID of the enterprise.",
-              "location": "path"
+        "webapps": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes an existing web app.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/webApps/{webAppId}",
+                    "httpMethod": "DELETE",
+                    "id": "androidenterprise.webapps.delete",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "webAppId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "webAppId": {
+                            "description": "The ID of the web app.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/webApps/{webAppId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "get": {
+                    "description": "Gets an existing web app.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/webApps/{webAppId}",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.webapps.get",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "webAppId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "webAppId": {
+                            "description": "The ID of the web app.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/webApps/{webAppId}",
+                    "response": {
+                        "$ref": "WebApp"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "insert": {
+                    "description": "Creates a new web app for the enterprise.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/webApps",
+                    "httpMethod": "POST",
+                    "id": "androidenterprise.webapps.insert",
+                    "parameterOrder": [
+                        "enterpriseId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/webApps",
+                    "request": {
+                        "$ref": "WebApp"
+                    },
+                    "response": {
+                        "$ref": "WebApp"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves the details of all web apps for a given enterprise.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/webApps",
+                    "httpMethod": "GET",
+                    "id": "androidenterprise.webapps.list",
+                    "parameterOrder": [
+                        "enterpriseId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/webApps",
+                    "response": {
+                        "$ref": "WebAppsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing web app.",
+                    "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/webApps/{webAppId}",
+                    "httpMethod": "PUT",
+                    "id": "androidenterprise.webapps.update",
+                    "parameterOrder": [
+                        "enterpriseId",
+                        "webAppId"
+                    ],
+                    "parameters": {
+                        "enterpriseId": {
+                            "description": "The ID of the enterprise.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "webAppId": {
+                            "description": "The ID of the web app.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "androidenterprise/v1/enterprises/{enterpriseId}/webApps/{webAppId}",
+                    "request": {
+                        "$ref": "WebApp"
+                    },
+                    "response": {
+                        "$ref": "WebApp"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/androidenterprise"
+                    ]
+                }
             }
-          },
-          "id": "androidenterprise.serviceaccountkeys.insert",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/serviceAccountKeys",
-          "httpMethod": "POST",
-          "description": "Generates new credentials for the service account associated with this enterprise. The calling service account must have been retrieved by calling Enterprises.GetServiceAccount and must have been set as the enterprise service account by calling Enterprises.SetAccount. Only the type of the key should be populated in the resource to be inserted.",
-          "parameterOrder": [
-            "enterpriseId"
-          ],
-          "request": {
-            "$ref": "ServiceAccountKey"
-          },
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/serviceAccountKeys",
-          "response": {
-            "$ref": "ServiceAccountKey"
-          }
         }
-      }
     },
-    "installs": {
-      "methods": {
-        "update": {
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs/{installId}",
-          "httpMethod": "PUT",
-          "parameterOrder": [
-            "enterpriseId",
-            "userId",
-            "deviceId",
-            "installId"
-          ],
-          "description": "Requests to install the latest version of an app to a device. If the app is already installed, then it is updated to the latest version if necessary.",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs/{installId}",
-          "id": "androidenterprise.installs.update",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "request": {
-            "$ref": "Install"
-          },
-          "response": {
-            "$ref": "Install"
-          },
-          "parameters": {
-            "installId": {
-              "type": "string",
-              "required": true,
-              "description": "The ID of the product represented by the install, e.g. \"app:com.google.android.gm\".",
-              "location": "path"
+    "revision": "20201125",
+    "rootUrl": "https://androidenterprise.googleapis.com/",
+    "schemas": {
+        "Administrator": {
+            "description": "This represents an enterprise admin who can manage the enterprise in the managed Google Play store.",
+            "id": "Administrator",
+            "properties": {
+                "email": {
+                    "description": "The admin's email address.",
+                    "type": "string"
+                }
             },
-            "userId": {
-              "description": "The ID of the user.",
-              "type": "string",
-              "required": true,
-              "location": "path"
+            "type": "object"
+        },
+        "AdministratorWebToken": {
+            "description": "A token authorizing an admin to access an iframe.",
+            "id": "AdministratorWebToken",
+            "properties": {
+                "token": {
+                    "description": "An opaque token to be passed to the Play front-end to generate an iframe.",
+                    "type": "string"
+                }
             },
-            "enterpriseId": {
-              "type": "string",
-              "required": true,
-              "description": "The ID of the enterprise.",
-              "location": "path"
+            "type": "object"
+        },
+        "AdministratorWebTokenSpec": {
+            "description": "Specification for a token used to generate iframes. The token specifies what data the admin is allowed to modify and the URI the iframe is allowed to communiate with.",
+            "id": "AdministratorWebTokenSpec",
+            "properties": {
+                "managedConfigurations": {
+                    "$ref": "AdministratorWebTokenSpecManagedConfigurations",
+                    "description": "Options for displaying the Managed Configuration page."
+                },
+                "parent": {
+                    "description": "The URI of the parent frame hosting the iframe. To prevent XSS, the iframe may not be hosted at other URIs. This URI must be https. Use whitespaces to separate multiple parent URIs.",
+                    "type": "string"
+                },
+                "permission": {
+                    "description": "Deprecated. Use PlaySearch.approveApps.",
+                    "items": {
+                        "enum": [
+                            "unknown",
+                            "approveApps",
+                            "manageMcm"
+                        ],
+                        "enumDescriptions": [
+                            "Unknown permission.",
+                            "Permission to approve and unapprove apps.",
+                            "Permission to manage app restrictions."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "playSearch": {
+                    "$ref": "AdministratorWebTokenSpecPlaySearch",
+                    "description": "Options for displaying the managed Play Search apps page."
+                },
+                "privateApps": {
+                    "$ref": "AdministratorWebTokenSpecPrivateApps",
+                    "description": "Options for displaying the Private Apps page."
+                },
+                "storeBuilder": {
+                    "$ref": "AdministratorWebTokenSpecStoreBuilder",
+                    "description": "Options for displaying the Organize apps page."
+                },
+                "webApps": {
+                    "$ref": "AdministratorWebTokenSpecWebApps",
+                    "description": "Options for displaying the Web Apps page."
+                }
             },
-            "deviceId": {
-              "description": "The Android ID of the device.",
-              "location": "path",
-              "required": true,
-              "type": "string"
-            }
-          }
+            "type": "object"
         },
-        "list": {
-          "httpMethod": "GET",
-          "id": "androidenterprise.installs.list",
-          "description": "Retrieves the details of all apps installed on the specified device.",
-          "response": {
-            "$ref": "InstallsListResponse"
-          },
-          "parameterOrder": [
-            "enterpriseId",
-            "userId",
-            "deviceId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "parameters": {
-            "deviceId": {
-              "required": true,
-              "description": "The Android ID of the device.",
-              "type": "string",
-              "location": "path"
+        "AdministratorWebTokenSpecManagedConfigurations": {
+            "id": "AdministratorWebTokenSpecManagedConfigurations",
+            "properties": {
+                "enabled": {
+                    "description": "Whether the Managed Configuration page is displayed. Default is true.",
+                    "type": "boolean"
+                }
             },
-            "userId": {
-              "description": "The ID of the user.",
-              "location": "path",
-              "type": "string",
-              "required": true
+            "type": "object"
+        },
+        "AdministratorWebTokenSpecPlaySearch": {
+            "id": "AdministratorWebTokenSpecPlaySearch",
+            "properties": {
+                "approveApps": {
+                    "description": "Allow access to the iframe in approve mode. Default is false.",
+                    "type": "boolean"
+                },
+                "enabled": {
+                    "description": "Whether the managed Play Search apps page is displayed. Default is true.",
+                    "type": "boolean"
+                }
             },
-            "enterpriseId": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "The ID of the enterprise."
-            }
-          },
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs"
+            "type": "object"
         },
-        "delete": {
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs/{installId}",
-          "parameterOrder": [
-            "enterpriseId",
-            "userId",
-            "deviceId",
-            "installId"
-          ],
-          "httpMethod": "DELETE",
-          "id": "androidenterprise.installs.delete",
-          "description": "Requests to remove an app from a device. A call to get or list will still show the app as installed on the device until it is actually removed.",
-          "parameters": {
-            "userId": {
-              "type": "string",
-              "location": "path",
-              "description": "The ID of the user.",
-              "required": true
+        "AdministratorWebTokenSpecPrivateApps": {
+            "id": "AdministratorWebTokenSpecPrivateApps",
+            "properties": {
+                "enabled": {
+                    "description": "Whether the Private Apps page is displayed. Default is true.",
+                    "type": "boolean"
+                }
             },
-            "enterpriseId": {
-              "type": "string",
-              "description": "The ID of the enterprise.",
-              "required": true,
-              "location": "path"
+            "type": "object"
+        },
+        "AdministratorWebTokenSpecStoreBuilder": {
+            "id": "AdministratorWebTokenSpecStoreBuilder",
+            "properties": {
+                "enabled": {
+                    "description": "Whether the Organize apps page is displayed. Default is true.",
+                    "type": "boolean"
+                }
             },
-            "installId": {
-              "description": "The ID of the product represented by the install, e.g. \"app:com.google.android.gm\".",
-              "required": true,
-              "location": "path",
-              "type": "string"
+            "type": "object"
+        },
+        "AdministratorWebTokenSpecWebApps": {
+            "id": "AdministratorWebTokenSpecWebApps",
+            "properties": {
+                "enabled": {
+                    "description": "Whether the Web Apps page is displayed. Default is true.",
+                    "type": "boolean"
+                }
             },
-            "deviceId": {
-              "required": true,
-              "description": "The Android ID of the device.",
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs/{installId}"
+            "type": "object"
         },
-        "get": {
-          "parameterOrder": [
-            "enterpriseId",
-            "userId",
-            "deviceId",
-            "installId"
-          ],
-          "id": "androidenterprise.installs.get",
-          "parameters": {
-            "installId": {
-              "required": true,
-              "type": "string",
-              "description": "The ID of the product represented by the install, e.g. \"app:com.google.android.gm\".",
-              "location": "path"
+        "AppRestrictionsSchema": {
+            "description": "Represents the list of app restrictions available to be pre-configured for the product.",
+            "id": "AppRestrictionsSchema",
+            "properties": {
+                "kind": {
+                    "description": "Deprecated.",
+                    "type": "string"
+                },
+                "restrictions": {
+                    "description": "The set of restrictions that make up this schema.",
+                    "items": {
+                        "$ref": "AppRestrictionsSchemaRestriction"
+                    },
+                    "type": "array"
+                }
             },
-            "userId": {
-              "required": true,
-              "description": "The ID of the user.",
-              "location": "path",
-              "type": "string"
+            "type": "object"
+        },
+        "AppRestrictionsSchemaChangeEvent": {
+            "description": "An event generated when a new app version is uploaded to Google Play and its app restrictions schema changed. To fetch the app restrictions schema for an app, use Products.getAppRestrictionsSchema on the EMM API.",
+            "id": "AppRestrictionsSchemaChangeEvent",
+            "properties": {
+                "productId": {
+                    "description": "The id of the product (e.g. \"app:com.google.android.gm\") for which the app restriction schema changed. This field will always be present.",
+                    "type": "string"
+                }
             },
-            "enterpriseId": {
-              "required": true,
-              "description": "The ID of the enterprise.",
-              "location": "path",
-              "type": "string"
+            "type": "object"
+        },
+        "AppRestrictionsSchemaRestriction": {
+            "description": "A restriction in the App Restriction Schema represents a piece of configuration that may be pre-applied.",
+            "id": "AppRestrictionsSchemaRestriction",
+            "properties": {
+                "defaultValue": {
+                    "$ref": "AppRestrictionsSchemaRestrictionRestrictionValue",
+                    "description": "The default value of the restriction. bundle and bundleArray restrictions never have a default value."
+                },
+                "description": {
+                    "description": "A longer description of the restriction, giving more detail of what it affects.",
+                    "type": "string"
+                },
+                "entry": {
+                    "description": "For choice or multiselect restrictions, the list of possible entries' human-readable names.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "entryValue": {
+                    "description": "For choice or multiselect restrictions, the list of possible entries' machine-readable values. These values should be used in the configuration, either as a single string value for a choice restriction or in a stringArray for a multiselect restriction.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "key": {
+                    "description": "The unique key that the product uses to identify the restriction, e.g. \"com.google.android.gm.fieldname\".",
+                    "type": "string"
+                },
+                "nestedRestriction": {
+                    "description": "For bundle or bundleArray restrictions, the list of nested restrictions. A bundle restriction is always nested within a bundleArray restriction, and a bundleArray restriction is at most two levels deep.",
+                    "items": {
+                        "$ref": "AppRestrictionsSchemaRestriction"
+                    },
+                    "type": "array"
+                },
+                "restrictionType": {
+                    "description": "The type of the restriction.",
+                    "enum": [
+                        "bool",
+                        "string",
+                        "integer",
+                        "choice",
+                        "multiselect",
+                        "hidden",
+                        "bundle",
+                        "bundleArray"
+                    ],
+                    "enumDescriptions": [
+                        "A restriction of boolean type.",
+                        "A restriction of string type.",
+                        "A restriction of integer type.",
+                        "A choice of one item from a set.",
+                        "A choice of multiple items from a set.",
+                        "A hidden restriction of string type (the default value can be used to pass along information that cannot be modified, such as a version code).",
+                        "[M+ devices only] A bundle of restrictions",
+                        "[M+ devices only] An array of restriction bundles"
+                    ],
+                    "type": "string"
+                },
+                "title": {
+                    "description": "The name of the restriction.",
+                    "type": "string"
+                }
             },
-            "deviceId": {
-              "description": "The Android ID of the device.",
-              "location": "path",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "httpMethod": "GET",
-          "description": "Retrieves details of an installation of an app on a device.",
-          "response": {
-            "$ref": "Install"
-          },
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs/{installId}",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs/{installId}"
-        }
-      }
-    },
-    "permissions": {
-      "methods": {
-        "get": {
-          "response": {
-            "$ref": "Permission"
-          },
-          "id": "androidenterprise.permissions.get",
-          "path": "androidenterprise/v1/permissions/{permissionId}",
-          "description": "Retrieves details of an Android app permission for display to an enterprise admin.",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "httpMethod": "GET",
-          "parameters": {
-            "permissionId": {
-              "description": "The ID of the permission.",
-              "type": "string",
-              "location": "path",
-              "required": true
+            "type": "object"
+        },
+        "AppRestrictionsSchemaRestrictionRestrictionValue": {
+            "description": "A typed value for the restriction.",
+            "id": "AppRestrictionsSchemaRestrictionRestrictionValue",
+            "properties": {
+                "type": {
+                    "description": "The type of the value being provided.",
+                    "enum": [
+                        "bool",
+                        "string",
+                        "integer",
+                        "choice",
+                        "multiselect",
+                        "hidden",
+                        "bundle",
+                        "bundleArray"
+                    ],
+                    "enumDescriptions": [
+                        "A restriction of boolean type.",
+                        "A restriction of string type.",
+                        "A restriction of integer type.",
+                        "A choice of one item from a set.",
+                        "A choice of multiple items from a set.",
+                        "A hidden restriction of string type (the default value can be used to pass along information that cannot be modified, such as a version code).",
+                        "[M+ devices only] A bundle of restrictions",
+                        "[M+ devices only] An array of restriction bundles"
+                    ],
+                    "type": "string"
+                },
+                "valueBool": {
+                    "description": "The boolean value - this will only be present if type is bool.",
+                    "type": "boolean"
+                },
+                "valueInteger": {
+                    "description": "The integer value - this will only be present if type is integer.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "valueMultiselect": {
+                    "description": "The list of string values - this will only be present if type is multiselect.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "valueString": {
+                    "description": "The string value - this will be present for types string, choice and hidden.",
+                    "type": "string"
+                }
             },
-            "language": {
-              "description": "The BCP47 tag for the user's preferred language (e.g. \"en-US\", \"de\")",
-              "location": "query",
-              "type": "string"
-            }
-          },
-          "flatPath": "androidenterprise/v1/permissions/{permissionId}",
-          "parameterOrder": [
-            "permissionId"
-          ]
-        }
-      }
-    },
-    "managedconfigurationssettings": {
-      "methods": {
-        "list": {
-          "description": "Lists all the managed configurations settings for the specified app.",
-          "parameterOrder": [
-            "enterpriseId",
-            "productId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "response": {
-            "$ref": "ManagedConfigurationsSettingsListResponse"
-          },
-          "parameters": {
-            "enterpriseId": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "The ID of the enterprise."
+            "type": "object"
+        },
+        "AppState": {
+            "description": "List of states set by the app.",
+            "id": "AppState",
+            "properties": {
+                "keyedAppState": {
+                    "description": "List of keyed app states. This field will always be present.",
+                    "items": {
+                        "$ref": "KeyedAppState"
+                    },
+                    "type": "array"
+                },
+                "packageName": {
+                    "description": "The package name of the app. This field will always be present.",
+                    "type": "string"
+                }
             },
-            "productId": {
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "The ID of the product for which the managed configurations settings applies to."
-            }
-          },
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/managedConfigurationsSettings",
-          "httpMethod": "GET",
-          "id": "androidenterprise.managedconfigurationssettings.list",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/managedConfigurationsSettings"
-        }
-      }
-    },
-    "grouplicenses": {
-      "methods": {
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "response": {
-            "$ref": "GroupLicensesListResponse"
-          },
-          "parameters": {
-            "enterpriseId": {
-              "description": "The ID of the enterprise.",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/groupLicenses",
-          "parameterOrder": [
-            "enterpriseId"
-          ],
-          "id": "androidenterprise.grouplicenses.list",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/groupLicenses",
-          "httpMethod": "GET",
-          "description": "Retrieves IDs of all products for which the enterprise has a group license."
+            "type": "object"
         },
-        "get": {
-          "httpMethod": "GET",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/groupLicenses/{groupLicenseId}",
-          "parameters": {
-            "groupLicenseId": {
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "The ID of the product the group license is for, e.g. \"app:com.google.android.gm\"."
+        "AppUpdateEvent": {
+            "description": "An event generated when a new version of an app is uploaded to Google Play. Notifications are sent for new public versions only: alpha, beta, or canary versions do not generate this event. To fetch up-to-date version history for an app, use Products.Get on the EMM API.",
+            "id": "AppUpdateEvent",
+            "properties": {
+                "productId": {
+                    "description": "The id of the product (e.g. \"app:com.google.android.gm\") that was updated. This field will always be present.",
+                    "type": "string"
+                }
             },
-            "enterpriseId": {
-              "type": "string",
-              "description": "The ID of the enterprise.",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "parameterOrder": [
-            "enterpriseId",
-            "groupLicenseId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "id": "androidenterprise.grouplicenses.get",
-          "response": {
-            "$ref": "GroupLicense"
-          },
-          "description": "Retrieves details of an enterprise's group license for a product.",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/groupLicenses/{groupLicenseId}"
-        }
-      }
-    },
-    "managedconfigurationsforuser": {
-      "methods": {
-        "list": {
-          "httpMethod": "GET",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser",
-          "description": "Lists all the per-user managed configurations for the specified user. Only the ID is set.",
-          "parameters": {
-            "enterpriseId": {
-              "type": "string",
-              "description": "The ID of the enterprise.",
-              "required": true,
-              "location": "path"
+            "type": "object"
+        },
+        "AppVersion": {
+            "description": "This represents a single version of the app.",
+            "id": "AppVersion",
+            "properties": {
+                "isProduction": {
+                    "description": "True if this version is a production APK.",
+                    "type": "boolean"
+                },
+                "track": {
+                    "description": "Deprecated, use trackId instead.",
+                    "enum": [
+                        "appTrackUnspecified",
+                        "production",
+                        "beta",
+                        "alpha"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "trackId": {
+                    "description": "Track ids that the app version is published in. Replaces the track field (deprecated), but doesn't include the production track (see isProduction instead).",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "versionCode": {
+                    "description": "Unique increasing identifier for the app version.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "versionString": {
+                    "description": "The string used in the Play store by the app developer to identify the version. The string is not necessarily unique or localized (for example, the string could be \"1.4\").",
+                    "type": "string"
+                }
             },
-            "userId": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "The ID of the user."
-            }
-          },
-          "parameterOrder": [
-            "enterpriseId",
-            "userId"
-          ],
-          "response": {
-            "$ref": "ManagedConfigurationsForUserListResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser",
-          "id": "androidenterprise.managedconfigurationsforuser.list"
+            "type": "object"
         },
-        "update": {
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser/{managedConfigurationForUserId}",
-          "parameters": {
-            "enterpriseId": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "The ID of the enterprise."
+        "ApprovalUrlInfo": {
+            "description": "Information on an approval URL.",
+            "id": "ApprovalUrlInfo",
+            "properties": {
+                "approvalUrl": {
+                    "description": "A URL that displays a product's permissions and that can also be used to approve the product with the Products.approve call.",
+                    "type": "string"
+                }
             },
-            "managedConfigurationForUserId": {
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "description": "The ID of the managed configuration (a product ID), e.g. \"app:com.google.android.gm\"."
+            "type": "object"
+        },
+        "AuthenticationToken": {
+            "description": "An AuthenticationToken is used by the EMM's device policy client on a device to provision the given EMM-managed user on that device.",
+            "id": "AuthenticationToken",
+            "properties": {
+                "token": {
+                    "description": "The authentication token to be passed to the device policy client on the device where it can be used to provision the account for which this token was generated.",
+                    "type": "string"
+                }
             },
-            "userId": {
-              "type": "string",
-              "description": "The ID of the user.",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "httpMethod": "PUT",
-          "id": "androidenterprise.managedconfigurationsforuser.update",
-          "response": {
-            "$ref": "ManagedConfiguration"
-          },
-          "description": "Adds or updates the managed configuration settings for an app for the specified user. If you support the Managed configurations iframe, you can apply managed configurations to a user by specifying an mcmId and its associated configuration variables (if any) in the request. Alternatively, all EMMs can apply managed configurations by passing a list of managed properties.",
-          "request": {
-            "$ref": "ManagedConfiguration"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "parameterOrder": [
-            "enterpriseId",
-            "userId",
-            "managedConfigurationForUserId"
-          ],
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser/{managedConfigurationForUserId}"
+            "type": "object"
         },
-        "get": {
-          "response": {
-            "$ref": "ManagedConfiguration"
-          },
-          "description": "Retrieves details of a per-user managed configuration for an app for the specified user.",
-          "parameters": {
-            "enterpriseId": {
-              "type": "string",
-              "location": "path",
-              "description": "The ID of the enterprise.",
-              "required": true
+        "AutoInstallConstraint": {
+            "description": "The auto-install constraint. Defines a set of restrictions for installation. At least one of the fields must be set.",
+            "id": "AutoInstallConstraint",
+            "properties": {
+                "chargingStateConstraint": {
+                    "description": "Charging state constraint.",
+                    "enum": [
+                        "chargingStateConstraintUnspecified",
+                        "chargingNotRequired",
+                        "chargingRequired"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "Device doesn't have to be charging.",
+                        "Device has to be charging."
+                    ],
+                    "type": "string"
+                },
+                "deviceIdleStateConstraint": {
+                    "description": "Device idle state constraint.",
+                    "enum": [
+                        "deviceIdleStateConstraintUnspecified",
+                        "deviceIdleNotRequired",
+                        "deviceIdleRequired"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "Device doesn't have to be idle, app can be installed while the user is interacting with the device.",
+                        "Device has to be idle."
+                    ],
+                    "type": "string"
+                },
+                "networkTypeConstraint": {
+                    "description": "Network type constraint.",
+                    "enum": [
+                        "networkTypeConstraintUnspecified",
+                        "anyNetwork",
+                        "unmeteredNetwork"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "Any active networks (Wi-Fi, cellular, etc.).",
+                        "Any unmetered network (e.g. Wi-FI)."
+                    ],
+                    "type": "string"
+                }
             },
-            "managedConfigurationForUserId": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "description": "The ID of the managed configuration (a product ID), e.g. \"app:com.google.android.gm\"."
+            "type": "object"
+        },
+        "AutoInstallPolicy": {
+            "id": "AutoInstallPolicy",
+            "properties": {
+                "autoInstallConstraint": {
+                    "description": "The constraints for auto-installing the app. You can specify a maximum of one constraint.",
+                    "items": {
+                        "$ref": "AutoInstallConstraint"
+                    },
+                    "type": "array"
+                },
+                "autoInstallMode": {
+                    "description": "The auto-install mode. If unset defaults to \"doNotAutoInstall\".",
+                    "enum": [
+                        "autoInstallModeUnspecified",
+                        "doNotAutoInstall",
+                        "autoInstallOnce",
+                        "forceAutoInstall"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "The product is not installed automatically, the user needs to install it from the Play Store.",
+                        "The product is automatically installed once, if the user uninstalls the product it will not be installed again.",
+                        "The product is automatically installed, if the user uninstalls the product it will be installed again. On managed devices the DPC should block uninstall."
+                    ],
+                    "type": "string"
+                },
+                "autoInstallPriority": {
+                    "description": "The priority of the install, as an unsigned integer. A lower number means higher priority.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "minimumVersionCode": {
+                    "description": "The minimum version of the app. If a lower version of the app is installed, then the app will be auto-updated according to the auto-install constraints, instead of waiting for the regular auto-update. You can set a minimum version code for at most 20 apps per device.",
+                    "format": "int32",
+                    "type": "integer"
+                }
             },
-            "userId": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "The ID of the user."
-            }
-          },
-          "id": "androidenterprise.managedconfigurationsforuser.get",
-          "httpMethod": "GET",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser/{managedConfigurationForUserId}",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser/{managedConfigurationForUserId}",
-          "parameterOrder": [
-            "enterpriseId",
-            "userId",
-            "managedConfigurationForUserId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ]
+            "type": "object"
         },
-        "delete": {
-          "httpMethod": "DELETE",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser/{managedConfigurationForUserId}",
-          "parameterOrder": [
-            "enterpriseId",
-            "userId",
-            "managedConfigurationForUserId"
-          ],
-          "parameters": {
-            "enterpriseId": {
-              "description": "The ID of the enterprise.",
-              "location": "path",
-              "type": "string",
-              "required": true
+        "ConfigurationVariables": {
+            "description": "A configuration variables resource contains the managed configuration settings ID to be applied to a single user, as well as the variable set that is attributed to the user. The variable set will be used to replace placeholders in the managed configuration settings.",
+            "id": "ConfigurationVariables",
+            "properties": {
+                "mcmId": {
+                    "description": "The ID of the managed configurations settings.",
+                    "type": "string"
+                },
+                "variableSet": {
+                    "description": "The variable set that is attributed to the user.",
+                    "items": {
+                        "$ref": "VariableSet"
+                    },
+                    "type": "array"
+                }
             },
-            "userId": {
-              "required": true,
-              "type": "string",
-              "description": "The ID of the user.",
-              "location": "path"
+            "type": "object"
+        },
+        "Device": {
+            "description": "A Devices resource represents a mobile device managed by the EMM and belonging to a specific enterprise user.",
+            "id": "Device",
+            "properties": {
+                "androidId": {
+                    "description": "The Google Play Services Android ID for the device encoded as a lowercase hex string. For example, \"123456789abcdef0\".",
+                    "type": "string"
+                },
+                "managementType": {
+                    "description": "Identifies the extent to which the device is controlled by a managed Google Play EMM in various deployment configurations. Possible values include: - \"managedDevice\", a device that has the EMM's device policy controller (DPC) as the device owner. - \"managedProfile\", a device that has a profile managed by the DPC (DPC is profile owner) in addition to a separate, personal profile that is unavailable to the DPC. - \"containerApp\", no longer used (deprecated). - \"unmanagedProfile\", a device that has been allowed (by the domain's admin, using the Admin Console to enable the privilege) to use managed Google Play, but the profile is itself not owned by a DPC. ",
+                    "enum": [
+                        "managedDevice",
+                        "managedProfile",
+                        "containerApp",
+                        "unmanagedProfile"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "policy": {
+                    "$ref": "Policy",
+                    "description": "The policy enforced on the device."
+                },
+                "report": {
+                    "$ref": "DeviceReport",
+                    "description": "The device report updated with the latest app states."
+                }
             },
-            "managedConfigurationForUserId": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "The ID of the managed configuration (a product ID), e.g. \"app:com.google.android.gm\"."
-            }
-          },
-          "id": "androidenterprise.managedconfigurationsforuser.delete",
-          "description": "Removes a per-user managed configuration for an app for the specified user.",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser/{managedConfigurationForUserId}"
-        }
-      }
-    },
-    "devices": {
-      "methods": {
-        "list": {
-          "parameters": {
-            "enterpriseId": {
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "The ID of the enterprise."
+            "type": "object"
+        },
+        "DeviceReport": {
+            "description": "Device report updated with the latest app states for managed apps on the device.",
+            "id": "DeviceReport",
+            "properties": {
+                "appState": {
+                    "description": "List of app states set by managed apps on the device. App states are defined by the app's developers. This field will always be present.",
+                    "items": {
+                        "$ref": "AppState"
+                    },
+                    "type": "array"
+                },
+                "lastUpdatedTimestampMillis": {
+                    "description": "The timestamp of the last report update in milliseconds since epoch. This field will always be present.",
+                    "format": "int64",
+                    "type": "string"
+                }
             },
-            "userId": {
-              "location": "path",
-              "type": "string",
-              "description": "The ID of the user.",
-              "required": true
-            }
-          },
-          "description": "Retrieves the IDs of all of a user's devices.",
-          "response": {
-            "$ref": "DevicesListResponse"
-          },
-          "id": "androidenterprise.devices.list",
-          "parameterOrder": [
-            "enterpriseId",
-            "userId"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices",
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices"
+            "type": "object"
         },
-        "get": {
-          "id": "androidenterprise.devices.get",
-          "response": {
-            "$ref": "Device"
-          },
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "parameterOrder": [
-            "enterpriseId",
-            "userId",
-            "deviceId"
-          ],
-          "parameters": {
-            "userId": {
-              "required": true,
-              "description": "The ID of the user.",
-              "type": "string",
-              "location": "path"
+        "DeviceReportUpdateEvent": {
+            "description": "An event generated when an updated device report is available.",
+            "id": "DeviceReportUpdateEvent",
+            "properties": {
+                "deviceId": {
+                    "description": "The Android ID of the device. This field will always be present.",
+                    "type": "string"
+                },
+                "report": {
+                    "$ref": "DeviceReport",
+                    "description": "The device report updated with the latest app states. This field will always be present."
+                },
+                "userId": {
+                    "description": "The ID of the user. This field will always be present.",
+                    "type": "string"
+                }
             },
-            "deviceId": {
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "The ID of the device."
+            "type": "object"
+        },
+        "DeviceState": {
+            "description": "The state of a user's device, as accessed by the getState and setState methods on device resources.",
+            "id": "DeviceState",
+            "properties": {
+                "accountState": {
+                    "description": "The state of the Google account on the device. \"enabled\" indicates that the Google account on the device can be used to access Google services (including Google Play), while \"disabled\" means that it cannot. A new device is initially in the \"disabled\" state.",
+                    "enum": [
+                        "enabled",
+                        "disabled"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
             },
-            "enterpriseId": {
-              "type": "string",
-              "description": "The ID of the enterprise.",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "description": "Retrieves the details of a device.",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}",
-          "httpMethod": "GET"
+            "type": "object"
         },
-        "forceReportUpload": {
-          "httpMethod": "POST",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/forceReportUpload",
-          "description": "Uploads a report containing any changes in app states on the device since the last report was generated. You can call this method up to 3 times every 24 hours for a given device. If you exceed the quota, then the Google Play EMM API returns HTTP 429 Too Many Requests.",
-          "parameterOrder": [
-            "enterpriseId",
-            "userId",
-            "deviceId"
-          ],
-          "id": "androidenterprise.devices.forceReportUpload",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "parameters": {
-            "userId": {
-              "type": "string",
-              "description": "The ID of the user.",
-              "location": "path",
-              "required": true
+        "DevicesListResponse": {
+            "id": "DevicesListResponse",
+            "properties": {
+                "device": {
+                    "description": "A managed device.",
+                    "items": {
+                        "$ref": "Device"
+                    },
+                    "type": "array"
+                }
             },
-            "deviceId": {
-              "type": "string",
-              "location": "path",
-              "description": "The ID of the device.",
-              "required": true
+            "type": "object"
+        },
+        "Enterprise": {
+            "description": "An Enterprises resource represents the binding between an EMM and a specific organization. That binding can be instantiated in one of two different ways using this API as follows: - For Google managed domain customers, the process involves using Enterprises.enroll and Enterprises.setAccount (in conjunction with artifacts obtained from the Admin console and the Google API Console) and submitted to the EMM through a more-or-less manual process. - For managed Google Play Accounts customers, the process involves using Enterprises.generateSignupUrl and Enterprises.completeSignup in conjunction with the managed Google Play sign-up UI (Google-provided mechanism) to create the binding without manual steps. As an EMM, you can support either or both approaches in your EMM console. See Create an Enterprise for details.",
+            "id": "Enterprise",
+            "properties": {
+                "administrator": {
+                    "description": "Admins of the enterprise. This is only supported for enterprises created via the EMM-initiated flow.",
+                    "items": {
+                        "$ref": "Administrator"
+                    },
+                    "type": "array"
+                },
+                "id": {
+                    "description": "The unique ID for the enterprise.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The name of the enterprise, for example, \"Example, Inc\".",
+                    "type": "string"
+                },
+                "primaryDomain": {
+                    "description": "The enterprise's primary domain, such as \"example.com\".",
+                    "type": "string"
+                }
             },
-            "enterpriseId": {
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "The ID of the enterprise."
-            }
-          },
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/forceReportUpload"
+            "type": "object"
         },
-        "getState": {
-          "description": "Retrieves whether a device's access to Google services is enabled or disabled. The device state takes effect only if enforcing EMM policies on Android devices is enabled in the Google Admin Console. Otherwise, the device state is ignored and all devices are allowed access to Google services. This is only supported for Google-managed users.",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/state",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/state",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "enterpriseId",
-            "userId",
-            "deviceId"
-          ],
-          "parameters": {
-            "enterpriseId": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "The ID of the enterprise."
+        "EnterpriseAccount": {
+            "description": "A service account that can be used to authenticate as the enterprise to API calls that require such authentication.",
+            "id": "EnterpriseAccount",
+            "properties": {
+                "accountEmail": {
+                    "description": "The email address of the service account.",
+                    "type": "string"
+                }
             },
-            "userId": {
-              "location": "path",
-              "description": "The ID of the user.",
-              "type": "string",
-              "required": true
+            "type": "object"
+        },
+        "EnterprisesListResponse": {
+            "id": "EnterprisesListResponse",
+            "properties": {
+                "enterprise": {
+                    "description": "An enterprise.",
+                    "items": {
+                        "$ref": "Enterprise"
+                    },
+                    "type": "array"
+                }
             },
-            "deviceId": {
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "The ID of the device."
-            }
-          },
-          "response": {
-            "$ref": "DeviceState"
-          },
-          "id": "androidenterprise.devices.getState"
+            "type": "object"
         },
-        "update": {
-          "response": {
-            "$ref": "Device"
-          },
-          "id": "androidenterprise.devices.update",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}",
-          "parameters": {
-            "deviceId": {
-              "description": "The ID of the device.",
-              "location": "path",
-              "required": true,
-              "type": "string"
+        "EnterprisesSendTestPushNotificationResponse": {
+            "id": "EnterprisesSendTestPushNotificationResponse",
+            "properties": {
+                "messageId": {
+                    "description": "The message ID of the test push notification that was sent.",
+                    "type": "string"
+                },
+                "topicName": {
+                    "description": "The name of the Cloud Pub/Sub topic to which notifications for this enterprise's enrolled account will be sent.",
+                    "type": "string"
+                }
             },
-            "enterpriseId": {
-              "type": "string",
-              "required": true,
-              "description": "The ID of the enterprise.",
-              "location": "path"
+            "type": "object"
+        },
+        "Entitlement": {
+            "description": "The presence of an Entitlements resource indicates that a user has the right to use a particular app. Entitlements are user specific, not device specific. This allows a user with an entitlement to an app to install the app on all their devices. It's also possible for a user to hold an entitlement to an app without installing the app on any device. The API can be used to create an entitlement. As an option, you can also use the API to trigger the installation of an app on all a user's managed devices at the same time the entitlement is created. If the app is free, creating the entitlement also creates a group license for that app. For paid apps, creating the entitlement consumes one license, and that license remains consumed until the entitlement is removed. If the enterprise hasn't purchased enough licenses, then no entitlement is created and the installation fails. An entitlement is also not created for an app if the app requires permissions that the enterprise hasn't accepted. If an entitlement is deleted, the app may be uninstalled from a user's device. As a best practice, uninstall the app by calling Installs.delete() before deleting the entitlement. Entitlements for apps that a user pays for on an unmanaged profile have \"userPurchase\" as the entitlement reason. These entitlements cannot be removed via the API.",
+            "id": "Entitlement",
+            "properties": {
+                "productId": {
+                    "description": "The ID of the product that the entitlement is for. For example, \"app:com.google.android.gm\".",
+                    "type": "string"
+                },
+                "reason": {
+                    "description": "The reason for the entitlement. For example, \"free\" for free apps. This property is temporary: it will be replaced by the acquisition kind field of group licenses.",
+                    "enum": [
+                        "free",
+                        "groupLicense",
+                        "userPurchase"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
             },
-            "userId": {
-              "description": "The ID of the user.",
-              "required": true,
-              "location": "path",
-              "type": "string"
+            "type": "object"
+        },
+        "EntitlementsListResponse": {
+            "id": "EntitlementsListResponse",
+            "properties": {
+                "entitlement": {
+                    "description": "An entitlement of a user to a product (e.g. an app). For example, a free app that they have installed, or a paid app that they have been allocated a license to.",
+                    "items": {
+                        "$ref": "Entitlement"
+                    },
+                    "type": "array"
+                }
             },
-            "updateMask": {
-              "type": "string",
-              "location": "query",
-              "description": "Mask that identifies which fields to update. If not set, all modifiable fields will be modified. When set in a query parameter, this field should be specified as updateMask=\u003cfield1\u003e,\u003cfield2\u003e,..."
-            }
-          },
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}",
-          "parameterOrder": [
-            "enterpriseId",
-            "userId",
-            "deviceId"
-          ],
-          "httpMethod": "PUT",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "request": {
-            "$ref": "Device"
-          },
-          "description": "Updates the device policy"
+            "type": "object"
         },
-        "setState": {
-          "response": {
-            "$ref": "DeviceState"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "description": "Sets whether a device's access to Google services is enabled or disabled. The device state takes effect only if enforcing EMM policies on Android devices is enabled in the Google Admin Console. Otherwise, the device state is ignored and all devices are allowed access to Google services. This is only supported for Google-managed users.",
-          "parameterOrder": [
-            "enterpriseId",
-            "userId",
-            "deviceId"
-          ],
-          "parameters": {
-            "enterpriseId": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "description": "The ID of the enterprise."
+        "GroupLicense": {
+            "description": "Group license objects allow you to keep track of licenses (called entitlements) for both free and paid apps. For a free app, a group license is created when an enterprise admin first approves the product in Google Play or when the first entitlement for the product is created for a user via the API. For a paid app, a group license object is only created when an enterprise admin purchases the product in Google Play for the first time. Use the API to query group licenses. A Grouplicenses resource includes the total number of licenses purchased (paid apps only) and the total number of licenses currently in use. In other words, the total number of Entitlements that exist for the product. Only one group license object is created per product and group license objects are never deleted. If a product is unapproved, its group license remains. This allows enterprise admins to keep track of any remaining entitlements for the product.",
+            "id": "GroupLicense",
+            "properties": {
+                "acquisitionKind": {
+                    "description": "How this group license was acquired. \"bulkPurchase\" means that this Grouplicenses resource was created because the enterprise purchased licenses for this product; otherwise, the value is \"free\" (for free products).",
+                    "enum": [
+                        "free",
+                        "bulkPurchase"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "approval": {
+                    "description": "Whether the product to which this group license relates is currently approved by the enterprise. Products are approved when a group license is first created, but this approval may be revoked by an enterprise admin via Google Play. Unapproved products will not be visible to end users in collections, and new entitlements to them should not normally be created.",
+                    "enum": [
+                        "approved",
+                        "unapproved"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "numProvisioned": {
+                    "description": "The total number of provisioned licenses for this product. Returned by read operations, but ignored in write operations.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "numPurchased": {
+                    "description": "The number of purchased licenses (possibly in multiple purchases). If this field is omitted, then there is no limit on the number of licenses that can be provisioned (for example, if the acquisition kind is \"free\").",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "permissions": {
+                    "description": "The permission approval status of the product. This field is only set if the product is approved. Possible states are: - \"currentApproved\", the current set of permissions is approved, but additional permissions will require the administrator to reapprove the product (If the product was approved without specifying the approved permissions setting, then this is the default behavior.), - \"needsReapproval\", the product has unapproved permissions. No additional product licenses can be assigned until the product is reapproved, - \"allCurrentAndFutureApproved\", the current permissions are approved and any future permission updates will be automatically approved without administrator review. ",
+                    "enum": [
+                        "currentApproved",
+                        "needsReapproval",
+                        "allCurrentAndFutureApproved"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "productId": {
+                    "description": "The ID of the product that the license is for. For example, \"app:com.google.android.gm\".",
+                    "type": "string"
+                }
             },
-            "userId": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "The ID of the user."
+            "type": "object"
+        },
+        "GroupLicenseUsersListResponse": {
+            "id": "GroupLicenseUsersListResponse",
+            "properties": {
+                "user": {
+                    "description": "A user of an enterprise.",
+                    "items": {
+                        "$ref": "User"
+                    },
+                    "type": "array"
+                }
             },
-            "deviceId": {
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "The ID of the device."
-            }
-          },
-          "id": "androidenterprise.devices.setState",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/state",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/state",
-          "request": {
-            "$ref": "DeviceState"
-          },
-          "httpMethod": "PUT"
-        }
-      }
-    },
-    "enterprises": {
-      "methods": {
-        "createWebToken": {
-          "request": {
-            "$ref": "AdministratorWebTokenSpec"
-          },
-          "description": "Returns a unique token to access an embeddable UI. To generate a web UI, pass the generated token into the managed Google Play javascript API. Each token may only be used to start one UI session. See the javascript API documentation for further information.",
-          "response": {
-            "$ref": "AdministratorWebToken"
-          },
-          "httpMethod": "POST",
-          "parameters": {
-            "enterpriseId": {
-              "location": "path",
-              "description": "The ID of the enterprise.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/createWebToken",
-          "parameterOrder": [
-            "enterpriseId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "id": "androidenterprise.enterprises.createWebToken",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/createWebToken"
+            "type": "object"
         },
-        "getServiceAccount": {
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/serviceAccount",
-          "id": "androidenterprise.enterprises.getServiceAccount",
-          "parameters": {
-            "keyType": {
-              "type": "string",
-              "enum": [
-                "googleCredentials",
-                "pkcs12"
-              ],
-              "location": "query",
-              "enumDescriptions": [
-                "Google Credentials File format.",
-                "PKCS12 format. The password for the PKCS12 file is 'notasecret'. For more information, see https://tools.ietf.org/html/rfc7292. The data for keys of this type are base64 encoded according to RFC 4648 Section 4. See http://tools.ietf.org/html/rfc4648#section-4."
-              ],
-              "description": "The type of credential to return with the service account. Required."
+        "GroupLicensesListResponse": {
+            "id": "GroupLicensesListResponse",
+            "properties": {
+                "groupLicense": {
+                    "description": "A group license for a product approved for use in the enterprise.",
+                    "items": {
+                        "$ref": "GroupLicense"
+                    },
+                    "type": "array"
+                }
             },
-            "enterpriseId": {
-              "required": true,
-              "type": "string",
-              "description": "The ID of the enterprise.",
-              "location": "path"
-            }
-          },
-          "description": "Returns a service account and credentials. The service account can be bound to the enterprise by calling setAccount. The service account is unique to this enterprise and EMM, and will be deleted if the enterprise is unbound. The credentials contain private key data and are not stored server-side. This method can only be called after calling Enterprises.Enroll or Enterprises.CompleteSignup, and before Enterprises.SetAccount; at other times it will return an error. Subsequent calls after the first will generate a new, unique set of credentials, and invalidate the previously generated credentials. Once the service account is bound to the enterprise, it can be managed using the serviceAccountKeys resource.",
-          "response": {
-            "$ref": "ServiceAccount"
-          },
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "enterpriseId"
-          ],
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/serviceAccount"
+            "type": "object"
         },
-        "setStoreLayout": {
-          "response": {
-            "$ref": "StoreLayout"
-          },
-          "request": {
-            "$ref": "StoreLayout"
-          },
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout",
-          "parameters": {
-            "enterpriseId": {
-              "location": "path",
-              "description": "The ID of the enterprise.",
-              "type": "string",
-              "required": true
-            }
-          },
-          "httpMethod": "PUT",
-          "parameterOrder": [
-            "enterpriseId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "description": "Sets the store layout for the enterprise. By default, storeLayoutType is set to \"basic\" and the basic store layout is enabled. The basic layout only contains apps approved by the admin, and that have been added to the available product set for a user (using the setAvailableProductSet call). Apps on the page are sorted in order of their product ID value. If you create a custom store layout (by setting storeLayoutType = \"custom\" and setting a homepage), the basic store layout is disabled.",
-          "id": "androidenterprise.enterprises.setStoreLayout"
+        "Install": {
+            "description": "The existence of an Installs resource indicates that an app is installed on a particular device (or that an install is pending). The API can be used to create an install resource using the update method. This triggers the actual install of the app on the device. If the user does not already have an entitlement for the app, then an attempt is made to create one. If this fails (for example, because the app is not free and there is no available license), then the creation of the install fails. The API can also be used to update an installed app. If the update method is used on an existing install, then the app will be updated to the latest available version. Note that it is not possible to force the installation of a specific version of an app: the version code is read-only. If a user installs an app themselves (as permitted by the enterprise), then again an install resource and possibly an entitlement resource are automatically created. The API can also be used to delete an install resource, which triggers the removal of the app from the device. Note that deleting an install does not automatically remove the corresponding entitlement, even if there are no remaining installs. The install resource will also be deleted if the user uninstalls the app themselves.",
+            "id": "Install",
+            "properties": {
+                "installState": {
+                    "description": "Install state. The state \"installPending\" means that an install request has recently been made and download to the device is in progress. The state \"installed\" means that the app has been installed. This field is read-only.",
+                    "enum": [
+                        "installed",
+                        "installPending"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "productId": {
+                    "description": "The ID of the product that the install is for. For example, \"app:com.google.android.gm\".",
+                    "type": "string"
+                },
+                "versionCode": {
+                    "description": "The version of the installed product. Guaranteed to be set only if the install state is \"installed\".",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
         },
-        "completeSignup": {
-          "httpMethod": "POST",
-          "parameters": {
-            "completionToken": {
-              "description": "The Completion token initially returned by GenerateSignupUrl.",
-              "type": "string",
-              "location": "query"
+        "InstallFailureEvent": {
+            "description": "An event generated when an app installation failed on a device",
+            "id": "InstallFailureEvent",
+            "properties": {
+                "deviceId": {
+                    "description": "The Android ID of the device. This field will always be present.",
+                    "type": "string"
+                },
+                "failureDetails": {
+                    "description": "Additional details on the failure if applicable.",
+                    "type": "string"
+                },
+                "failureReason": {
+                    "description": "The reason for the installation failure. This field will always be present.",
+                    "enum": [
+                        "unknown",
+                        "timeout"
+                    ],
+                    "enumDescriptions": [
+                        "Used whenever no better reason for failure can be provided.",
+                        "Used when the installation timed out. This can cover a number of situations, for example when the device did not have connectivity at any point during the retry period, or if the device is OOM."
+                    ],
+                    "type": "string"
+                },
+                "productId": {
+                    "description": "The id of the product (e.g. \"app:com.google.android.gm\") for which the install failure event occured. This field will always be present.",
+                    "type": "string"
+                },
+                "userId": {
+                    "description": "The ID of the user. This field will always be present.",
+                    "type": "string"
+                }
             },
-            "enterpriseToken": {
-              "location": "query",
-              "type": "string",
-              "description": "The Enterprise token appended to the Callback URL."
-            }
-          },
-          "path": "androidenterprise/v1/enterprises/completeSignup",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "parameterOrder": [],
-          "id": "androidenterprise.enterprises.completeSignup",
-          "description": "Completes the signup flow, by specifying the Completion token and Enterprise token. This request must not be called multiple times for a given Enterprise Token.",
-          "response": {
-            "$ref": "Enterprise"
-          },
-          "flatPath": "androidenterprise/v1/enterprises/completeSignup"
+            "type": "object"
         },
-        "getStoreLayout": {
-          "response": {
-            "$ref": "StoreLayout"
-          },
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "parameters": {
-            "enterpriseId": {
-              "required": true,
-              "type": "string",
-              "description": "The ID of the enterprise.",
-              "location": "path"
-            }
-          },
-          "description": "Returns the store layout for the enterprise. If the store layout has not been set, returns \"basic\" as the store layout type and no homepage.",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout",
-          "parameterOrder": [
-            "enterpriseId"
-          ],
-          "id": "androidenterprise.enterprises.getStoreLayout"
+        "InstallsListResponse": {
+            "id": "InstallsListResponse",
+            "properties": {
+                "install": {
+                    "description": "An installation of an app for a user on a specific device. The existence of an install implies that the user must have an entitlement to the app.",
+                    "items": {
+                        "$ref": "Install"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "enroll": {
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "description": "Enrolls an enterprise with the calling EMM.",
-          "response": {
-            "$ref": "Enterprise"
-          },
-          "parameters": {
-            "token": {
-              "type": "string",
-              "required": true,
-              "location": "query",
-              "description": "Required. The token provided by the enterprise to register the EMM."
-            }
-          },
-          "id": "androidenterprise.enterprises.enroll",
-          "httpMethod": "POST",
-          "path": "androidenterprise/v1/enterprises/enroll",
-          "parameterOrder": [
-            "token"
-          ],
-          "request": {
-            "$ref": "Enterprise"
-          },
-          "flatPath": "androidenterprise/v1/enterprises/enroll"
+        "KeyedAppState": {
+            "description": "Represents a keyed app state containing a key, timestamp, severity level, optional description, and optional data.",
+            "id": "KeyedAppState",
+            "properties": {
+                "data": {
+                    "description": "Additional field intended for machine-readable data. For example, a number or JSON object. To prevent XSS, we recommend removing any HTML from the data before displaying it.",
+                    "type": "string"
+                },
+                "key": {
+                    "description": "Key indicating what the app is providing a state for. The content of the key is set by the app's developer. To prevent XSS, we recommend removing any HTML from the key before displaying it. This field will always be present.",
+                    "type": "string"
+                },
+                "message": {
+                    "description": "Free-form, human-readable message describing the app state. For example, an error message. To prevent XSS, we recommend removing any HTML from the message before displaying it.",
+                    "type": "string"
+                },
+                "severity": {
+                    "description": "Severity of the app state. This field will always be present.",
+                    "enum": [
+                        "severityUnknown",
+                        "severityInfo",
+                        "severityError"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "stateTimestampMillis": {
+                    "description": "Timestamp of when the app set the state in milliseconds since epoch. This field will always be present.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "pullNotificationSet": {
-          "response": {
-            "$ref": "NotificationSet"
-          },
-          "httpMethod": "POST",
-          "id": "androidenterprise.enterprises.pullNotificationSet",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/pullNotificationSet",
-          "path": "androidenterprise/v1/enterprises/pullNotificationSet",
-          "parameterOrder": [],
-          "description": "Pulls and returns a notification set for the enterprises associated with the service account authenticated for the request. The notification set may be empty if no notification are pending. A notification set returned needs to be acknowledged within 20 seconds by calling Enterprises.AcknowledgeNotificationSet, unless the notification set is empty. Notifications that are not acknowledged within the 20 seconds will eventually be included again in the response to another PullNotificationSet request, and those that are never acknowledged will ultimately be deleted according to the Google Cloud Platform Pub/Sub system policy. Multiple requests might be performed concurrently to retrieve notifications, in which case the pending notifications (if any) will be split among each caller, if any are pending. If no notifications are present, an empty notification list is returned. Subsequent requests may return more notifications once they become available.",
-          "parameters": {
-            "requestMode": {
-              "enum": [
-                "waitForNotifications",
-                "returnImmediately"
-              ],
-              "enumDescriptions": [
-                "Wait until one or more notifications are present.",
-                "Returns immediately whether notifications are present or not."
-              ],
-              "location": "query",
-              "type": "string",
-              "description": "The request mode for pulling notifications. Specifying waitForNotifications will cause the request to block and wait until one or more notifications are present, or return an empty notification list if no notifications are present after some time. Speciying returnImmediately will cause the request to immediately return the pending notifications, or an empty list if no notifications are present. If omitted, defaults to waitForNotifications."
-            }
-          }
+        "LocalizedText": {
+            "description": "A localized string with its locale.",
+            "id": "LocalizedText",
+            "properties": {
+                "locale": {
+                    "description": "The BCP47 tag for a locale. (e.g. \"en-US\", \"de\").",
+                    "type": "string"
+                },
+                "text": {
+                    "description": "The text localized in the associated locale.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "unenroll": {
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "parameters": {
-            "enterpriseId": {
-              "location": "path",
-              "description": "The ID of the enterprise.",
-              "type": "string",
-              "required": true
-            }
-          },
-          "id": "androidenterprise.enterprises.unenroll",
-          "description": "Unenrolls an enterprise from the calling EMM.",
-          "httpMethod": "POST",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/unenroll",
-          "parameterOrder": [
-            "enterpriseId"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/unenroll"
+        "MaintenanceWindow": {
+            "description": "Maintenance window for managed Google Play Accounts. This allows Play store to update the apps on the foreground in the designated window.",
+            "id": "MaintenanceWindow",
+            "properties": {
+                "durationMs": {
+                    "description": "Duration of the maintenance window, in milliseconds. The duration must be between 30 minutes and 24 hours (inclusive).",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "startTimeAfterMidnightMs": {
+                    "description": "Start time of the maintenance window, in milliseconds after midnight on the device. Windows can span midnight.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "generateSignupUrl": {
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/signupUrl",
-          "parameterOrder": [],
-          "parameters": {
-            "callbackUrl": {
-              "location": "query",
-              "description": "The callback URL to which the Admin will be redirected after successfully creating an enterprise. Before redirecting there the system will add a single query parameter to this URL named \"enterpriseToken\" which will contain an opaque token to be used for the CompleteSignup request. Beware that this means that the URL will be parsed, the parameter added and then a new URL formatted, i.e. there may be some minor formatting changes and, more importantly, the URL must be well-formed so that it can be parsed.",
-              "type": "string"
-            }
-          },
-          "response": {
-            "$ref": "SignupInfo"
-          },
-          "id": "androidenterprise.enterprises.generateSignupUrl",
-          "path": "androidenterprise/v1/enterprises/signupUrl",
-          "description": "Generates a sign-up URL."
+        "ManagedConfiguration": {
+            "description": "A managed configuration resource contains the set of managed properties defined by the app developer in the app's managed configurations schema, as well as any configuration variables defined for the user.",
+            "id": "ManagedConfiguration",
+            "properties": {
+                "configurationVariables": {
+                    "$ref": "ConfigurationVariables",
+                    "description": "Contains the ID of the managed configuration profile and the set of configuration variables (if any) defined for the user."
+                },
+                "kind": {
+                    "description": "Deprecated.",
+                    "type": "string"
+                },
+                "managedProperty": {
+                    "description": "The set of managed properties for this configuration.",
+                    "items": {
+                        "$ref": "ManagedProperty"
+                    },
+                    "type": "array"
+                },
+                "productId": {
+                    "description": "The ID of the product that the managed configuration is for, e.g. \"app:com.google.android.gm\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "acknowledgeNotificationSet": {
-          "id": "androidenterprise.enterprises.acknowledgeNotificationSet",
-          "path": "androidenterprise/v1/enterprises/acknowledgeNotificationSet",
-          "description": "Acknowledges notifications that were received from Enterprises.PullNotificationSet to prevent subsequent calls from returning the same notifications.",
-          "parameterOrder": [],
-          "httpMethod": "POST",
-          "flatPath": "androidenterprise/v1/enterprises/acknowledgeNotificationSet",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "parameters": {
-            "notificationSetId": {
-              "location": "query",
-              "description": "The notification set ID as returned by Enterprises.PullNotificationSet. This must be provided.",
-              "type": "string"
-            }
-          }
+        "ManagedConfigurationsForDeviceListResponse": {
+            "id": "ManagedConfigurationsForDeviceListResponse",
+            "properties": {
+                "managedConfigurationForDevice": {
+                    "description": "A managed configuration for an app on a specific device.",
+                    "items": {
+                        "$ref": "ManagedConfiguration"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "sendTestPushNotification": {
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/sendTestPushNotification",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "httpMethod": "POST",
-          "parameters": {
-            "enterpriseId": {
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "The ID of the enterprise."
-            }
-          },
-          "parameterOrder": [
-            "enterpriseId"
-          ],
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/sendTestPushNotification",
-          "response": {
-            "$ref": "EnterprisesSendTestPushNotificationResponse"
-          },
-          "description": "Sends a test notification to validate the EMM integration with the Google Cloud Pub/Sub service for this enterprise.",
-          "id": "androidenterprise.enterprises.sendTestPushNotification"
+        "ManagedConfigurationsForUserListResponse": {
+            "id": "ManagedConfigurationsForUserListResponse",
+            "properties": {
+                "managedConfigurationForUser": {
+                    "description": "A managed configuration for an app for a specific user.",
+                    "items": {
+                        "$ref": "ManagedConfiguration"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "setAccount": {
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "parameterOrder": [
-            "enterpriseId"
-          ],
-          "parameters": {
-            "enterpriseId": {
-              "type": "string",
-              "required": true,
-              "description": "The ID of the enterprise.",
-              "location": "path"
-            }
-          },
-          "description": "Sets the account that will be used to authenticate to the API as the enterprise.",
-          "id": "androidenterprise.enterprises.setAccount",
-          "response": {
-            "$ref": "EnterpriseAccount"
-          },
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/account",
-          "request": {
-            "$ref": "EnterpriseAccount"
-          },
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/account",
-          "httpMethod": "PUT"
+        "ManagedConfigurationsSettings": {
+            "description": "A managed configurations settings resource contains the set of managed properties that have been configured for an Android app to be applied to a set of users. The app's developer would have defined configurable properties in the managed configurations schema.",
+            "id": "ManagedConfigurationsSettings",
+            "properties": {
+                "lastUpdatedTimestampMillis": {
+                    "description": "The last updated time of the managed configuration settings in milliseconds since 1970-01-01T00:00:00Z.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "mcmId": {
+                    "description": "The ID of the managed configurations settings.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The name of the managed configurations settings.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "get": {
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}",
-          "response": {
-            "$ref": "Enterprise"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "parameters": {
-            "enterpriseId": {
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "The ID of the enterprise."
-            }
-          },
-          "description": "Retrieves the name and domain of an enterprise.",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}",
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "enterpriseId"
-          ],
-          "id": "androidenterprise.enterprises.get"
+        "ManagedConfigurationsSettingsListResponse": {
+            "id": "ManagedConfigurationsSettingsListResponse",
+            "properties": {
+                "managedConfigurationsSettings": {
+                    "description": "A managed configurations settings for an app that may be assigned to a group of users in an enterprise.",
+                    "items": {
+                        "$ref": "ManagedConfigurationsSettings"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "list": {
-          "id": "androidenterprise.enterprises.list",
-          "parameters": {
-            "domain": {
-              "required": true,
-              "description": "Required. The exact primary domain name of the enterprise to look up.",
-              "type": "string",
-              "location": "query"
-            }
-          },
-          "path": "androidenterprise/v1/enterprises",
-          "description": "Looks up an enterprise by domain name. This is only supported for enterprises created via the Google-initiated creation flow. Lookup of the id is not needed for enterprises created via the EMM-initiated flow since the EMM learns the enterprise ID in the callback specified in the Enterprises.generateSignupUrl call.",
-          "flatPath": "androidenterprise/v1/enterprises",
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "parameterOrder": [
-            "domain"
-          ],
-          "response": {
-            "$ref": "EnterprisesListResponse"
-          }
-        }
-      }
-    },
-    "grouplicenseusers": {
-      "methods": {
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "description": "Retrieves the IDs of the users who have been granted entitlements under the license.",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/groupLicenses/{groupLicenseId}/users",
-          "parameters": {
-            "groupLicenseId": {
-              "location": "path",
-              "type": "string",
-              "description": "The ID of the product the group license is for, e.g. \"app:com.google.android.gm\".",
-              "required": true
+        "ManagedProperty": {
+            "description": "A managed property of a managed configuration. The property must match one of the properties in the app restrictions schema of the product. Exactly one of the value fields must be populated, and it must match the property's type in the app restrictions schema.",
+            "id": "ManagedProperty",
+            "properties": {
+                "key": {
+                    "description": "The unique key that identifies the property.",
+                    "type": "string"
+                },
+                "valueBool": {
+                    "description": "The boolean value - this will only be present if type of the property is bool.",
+                    "type": "boolean"
+                },
+                "valueBundle": {
+                    "$ref": "ManagedPropertyBundle",
+                    "description": "The bundle of managed properties - this will only be present if type of the property is bundle."
+                },
+                "valueBundleArray": {
+                    "description": "The list of bundles of properties - this will only be present if type of the property is bundle_array.",
+                    "items": {
+                        "$ref": "ManagedPropertyBundle"
+                    },
+                    "type": "array"
+                },
+                "valueInteger": {
+                    "description": "The integer value - this will only be present if type of the property is integer.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "valueString": {
+                    "description": "The string value - this will only be present if type of the property is string, choice or hidden.",
+                    "type": "string"
+                },
+                "valueStringArray": {
+                    "description": "The list of string values - this will only be present if type of the property is multiselect.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
             },
-            "enterpriseId": {
-              "description": "The ID of the enterprise.",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "enterpriseId",
-            "groupLicenseId"
-          ],
-          "id": "androidenterprise.grouplicenseusers.list",
-          "response": {
-            "$ref": "GroupLicenseUsersListResponse"
-          },
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/groupLicenses/{groupLicenseId}/users"
-        }
-      }
-    },
-    "entitlements": {
-      "methods": {
-        "list": {
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements",
-          "parameters": {
-            "userId": {
-              "required": true,
-              "type": "string",
-              "description": "The ID of the user.",
-              "location": "path"
+            "type": "object"
+        },
+        "ManagedPropertyBundle": {
+            "description": "A bundle of managed properties.",
+            "id": "ManagedPropertyBundle",
+            "properties": {
+                "managedProperty": {
+                    "description": "The list of managed properties.",
+                    "items": {
+                        "$ref": "ManagedProperty"
+                    },
+                    "type": "array"
+                }
             },
-            "enterpriseId": {
-              "type": "string",
-              "location": "path",
-              "description": "The ID of the enterprise.",
-              "required": true
-            }
-          },
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "enterpriseId",
-            "userId"
-          ],
-          "id": "androidenterprise.entitlements.list",
-          "description": "Lists all entitlements for the specified user. Only the ID is set.",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements",
-          "response": {
-            "$ref": "EntitlementsListResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ]
+            "type": "object"
         },
-        "get": {
-          "parameterOrder": [
-            "enterpriseId",
-            "userId",
-            "entitlementId"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements/{entitlementId}",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements/{entitlementId}",
-          "response": {
-            "$ref": "Entitlement"
-          },
-          "httpMethod": "GET",
-          "id": "androidenterprise.entitlements.get",
-          "parameters": {
-            "userId": {
-              "required": true,
-              "type": "string",
-              "description": "The ID of the user.",
-              "location": "path"
+        "NewDeviceEvent": {
+            "description": "An event generated when a new device is ready to be managed.",
+            "id": "NewDeviceEvent",
+            "properties": {
+                "deviceId": {
+                    "description": "The Android ID of the device. This field will always be present.",
+                    "type": "string"
+                },
+                "dpcPackageName": {
+                    "description": "Policy app on the device.",
+                    "type": "string"
+                },
+                "managementType": {
+                    "description": "Identifies the extent to which the device is controlled by an Android EMM in various deployment configurations. Possible values include: - \"managedDevice\", a device where the DPC is set as device owner, - \"managedProfile\", a device where the DPC is set as profile owner. ",
+                    "enum": [
+                        "managedDevice",
+                        "managedProfile"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "userId": {
+                    "description": "The ID of the user. This field will always be present.",
+                    "type": "string"
+                }
             },
-            "entitlementId": {
-              "required": true,
-              "description": "The ID of the entitlement (a product ID), e.g. \"app:com.google.android.gm\".",
-              "location": "path",
-              "type": "string"
+            "type": "object"
+        },
+        "NewPermissionsEvent": {
+            "description": "An event generated when new permissions are added to an app.",
+            "id": "NewPermissionsEvent",
+            "properties": {
+                "approvedPermissions": {
+                    "description": "The set of permissions that the enterprise admin has already approved for this application. Use Permissions.Get on the EMM API to retrieve details about these permissions.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "productId": {
+                    "description": "The id of the product (e.g. \"app:com.google.android.gm\") for which new permissions were added. This field will always be present.",
+                    "type": "string"
+                },
+                "requestedPermissions": {
+                    "description": "The set of permissions that the app is currently requesting. Use Permissions.Get on the EMM API to retrieve details about these permissions.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
             },
-            "enterpriseId": {
-              "type": "string",
-              "required": true,
-              "description": "The ID of the enterprise.",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "description": "Retrieves details of an entitlement."
+            "type": "object"
         },
-        "delete": {
-          "id": "androidenterprise.entitlements.delete",
-          "parameterOrder": [
-            "enterpriseId",
-            "userId",
-            "entitlementId"
-          ],
-          "parameters": {
-            "userId": {
-              "location": "path",
-              "description": "The ID of the user.",
-              "required": true,
-              "type": "string"
+        "Notification": {
+            "description": "A notification of one event relating to an enterprise.",
+            "id": "Notification",
+            "properties": {
+                "appRestrictionsSchemaChangeEvent": {
+                    "$ref": "AppRestrictionsSchemaChangeEvent",
+                    "description": "Notifications about new app restrictions schema changes."
+                },
+                "appUpdateEvent": {
+                    "$ref": "AppUpdateEvent",
+                    "description": "Notifications about app updates."
+                },
+                "deviceReportUpdateEvent": {
+                    "$ref": "DeviceReportUpdateEvent",
+                    "description": "Notifications about device report updates."
+                },
+                "enterpriseId": {
+                    "description": "The ID of the enterprise for which the notification is sent. This will always be present.",
+                    "type": "string"
+                },
+                "installFailureEvent": {
+                    "$ref": "InstallFailureEvent",
+                    "description": "Notifications about an app installation failure."
+                },
+                "newDeviceEvent": {
+                    "$ref": "NewDeviceEvent",
+                    "description": "Notifications about new devices."
+                },
+                "newPermissionsEvent": {
+                    "$ref": "NewPermissionsEvent",
+                    "description": "Notifications about new app permissions."
+                },
+                "notificationType": {
+                    "description": "Type of the notification.",
+                    "enum": [
+                        "unknown",
+                        "testNotification",
+                        "productApproval",
+                        "installFailure",
+                        "appUpdate",
+                        "newPermissions",
+                        "appRestricionsSchemaChange",
+                        "productAvailabilityChange",
+                        "newDevice",
+                        "deviceReportUpdate"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "A test push notification.",
+                        "Notification about change to a product's approval status.",
+                        "Notification about an app installation failure.",
+                        "Notification about app update.",
+                        "Notification about new app permissions.",
+                        "Notification about new app restrictions schema change.",
+                        "Notification about product availability change.",
+                        "Notification about a new device.",
+                        "Notification about an updated device report."
+                    ],
+                    "type": "string"
+                },
+                "productApprovalEvent": {
+                    "$ref": "ProductApprovalEvent",
+                    "description": "Notifications about changes to a product's approval status."
+                },
+                "productAvailabilityChangeEvent": {
+                    "$ref": "ProductAvailabilityChangeEvent",
+                    "description": "Notifications about product availability changes."
+                },
+                "timestampMillis": {
+                    "description": "The time when the notification was published in milliseconds since 1970-01-01T00:00:00Z. This will always be present.",
+                    "format": "int64",
+                    "type": "string"
+                }
             },
-            "entitlementId": {
-              "required": true,
-              "type": "string",
-              "description": "The ID of the entitlement (a product ID), e.g. \"app:com.google.android.gm\".",
-              "location": "path"
+            "type": "object"
+        },
+        "NotificationSet": {
+            "description": "A resource returned by the PullNotificationSet API, which contains a collection of notifications for enterprises associated with the service account authenticated for the request.",
+            "id": "NotificationSet",
+            "properties": {
+                "notification": {
+                    "description": "The notifications received, or empty if no notifications are present.",
+                    "items": {
+                        "$ref": "Notification"
+                    },
+                    "type": "array"
+                },
+                "notificationSetId": {
+                    "description": "The notification set ID, required to mark the notification as received with the Enterprises.AcknowledgeNotification API. This will be omitted if no notifications are present.",
+                    "type": "string"
+                }
             },
-            "enterpriseId": {
-              "type": "string",
-              "required": true,
-              "description": "The ID of the enterprise.",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "httpMethod": "DELETE",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements/{entitlementId}",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements/{entitlementId}",
-          "description": "Removes an entitlement to an app for a user."
+            "type": "object"
         },
-        "update": {
-          "parameters": {
-            "install": {
-              "description": "Set to true to also install the product on all the user's devices where possible. Failure to install on one or more devices will not prevent this operation from returning successfully, as long as the entitlement was successfully assigned to the user.",
-              "location": "query",
-              "type": "boolean"
+        "PageInfo": {
+            "description": "Information about the current page. List operations that supports paging return only one \"page\" of results. This protocol buffer message describes the page that has been returned.",
+            "id": "PageInfo",
+            "properties": {
+                "resultPerPage": {
+                    "description": "Maximum number of results returned in one page. ! The number of results included in the API response.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "startIndex": {
+                    "description": "Index of the first result returned in the current page.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalResults": {
+                    "description": "Total number of results available on the backend ! The total number of results in the result set.",
+                    "format": "int32",
+                    "type": "integer"
+                }
             },
-            "userId": {
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "The ID of the user."
+            "type": "object"
+        },
+        "Permission": {
+            "description": "A Permissions resource represents some extra capability, to be granted to an Android app, which requires explicit consent. An enterprise admin must consent to these permissions on behalf of their users before an entitlement for the app can be created. The permissions collection is read-only. The information provided for each permission (localized name and description) is intended to be used in the MDM user interface when obtaining consent from the enterprise.",
+            "id": "Permission",
+            "properties": {
+                "description": {
+                    "description": "A longer description of the Permissions resource, giving more details of what it affects.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The name of the permission.",
+                    "type": "string"
+                },
+                "permissionId": {
+                    "description": "An opaque string uniquely identifying the permission.",
+                    "type": "string"
+                }
             },
-            "entitlementId": {
-              "location": "path",
-              "description": "The ID of the entitlement (a product ID), e.g. \"app:com.google.android.gm\".",
-              "type": "string",
-              "required": true
+            "type": "object"
+        },
+        "Policy": {
+            "description": "The device policy for a given managed device.",
+            "id": "Policy",
+            "properties": {
+                "autoUpdatePolicy": {
+                    "description": "The auto-update policy for apps installed on the device. \"choiceToTheUser\" allows the device's user to configure the app update policy. \"always\" enables auto updates. \"never\" disables auto updates. \"wifiOnly\" enables auto updates only when the device is connected to wifi.",
+                    "enum": [
+                        "autoUpdatePolicyUnspecified",
+                        "choiceToTheUser",
+                        "never",
+                        "wifiOnly",
+                        "always"
+                    ],
+                    "enumDescriptions": [
+                        "The auto update policy is not set.",
+                        "The user can control auto-updates.",
+                        "Apps are never auto-updated.",
+                        "Apps are auto-updated over WiFi only.",
+                        "Apps are auto-updated at any time. Data charges may apply."
+                    ],
+                    "type": "string"
+                },
+                "deviceReportPolicy": {
+                    "description": "Whether the device reports app states to the EMM. The default value is \"deviceReportDisabled\".",
+                    "enum": [
+                        "deviceReportPolicyUnspecified",
+                        "deviceReportDisabled",
+                        "deviceReportEnabled"
+                    ],
+                    "enumDescriptions": [
+                        "The device report policy is not set.",
+                        "Device reports are disabled.",
+                        "Device reports are enabled."
+                    ],
+                    "type": "string"
+                },
+                "maintenanceWindow": {
+                    "$ref": "MaintenanceWindow",
+                    "description": "The maintenance window defining when apps running in the foreground should be updated."
+                },
+                "productAvailabilityPolicy": {
+                    "description": "The availability granted to the device for the specified products. \"all\" gives the device access to all products, regardless of approval status. \"all\" does not enable automatic visibility of \"alpha\" or \"beta\" tracks. \"whitelist\" grants the device access the products specified in productPolicy[]. Only products that are approved or products that were previously approved (products with revoked approval) by the enterprise can be whitelisted. If no value is provided, the availability set at the user level is applied by default.",
+                    "enum": [
+                        "productAvailabilityPolicyUnspecified",
+                        "whitelist",
+                        "all"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified, applies the user available product set by default.",
+                        "The approved products with product availability set to AVAILABLE in the product policy are available.",
+                        "All products are available except those explicitly marked as unavailable in the product availability policy."
+                    ],
+                    "type": "string"
+                },
+                "productPolicy": {
+                    "description": "The list of product policies. The productAvailabilityPolicy needs to be set to WHITELIST or ALL for the product policies to be applied.",
+                    "items": {
+                        "$ref": "ProductPolicy"
+                    },
+                    "type": "array"
+                }
             },
-            "enterpriseId": {
-              "required": true,
-              "description": "The ID of the enterprise.",
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "id": "androidenterprise.entitlements.update",
-          "parameterOrder": [
-            "enterpriseId",
-            "userId",
-            "entitlementId"
-          ],
-          "httpMethod": "PUT",
-          "request": {
-            "$ref": "Entitlement"
-          },
-          "description": "Adds or updates an entitlement to an app for a user.",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements/{entitlementId}",
-          "response": {
-            "$ref": "Entitlement"
-          },
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/entitlements/{entitlementId}"
-        }
-      }
-    },
-    "webapps": {
-      "methods": {
-        "insert": {
-          "parameters": {
-            "enterpriseId": {
-              "location": "path",
-              "type": "string",
-              "description": "The ID of the enterprise.",
-              "required": true
-            }
-          },
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/webApps",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "request": {
-            "$ref": "WebApp"
-          },
-          "description": "Creates a new web app for the enterprise.",
-          "response": {
-            "$ref": "WebApp"
-          },
-          "parameterOrder": [
-            "enterpriseId"
-          ],
-          "httpMethod": "POST",
-          "id": "androidenterprise.webapps.insert",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/webApps"
+            "type": "object"
         },
-        "delete": {
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/webApps/{webAppId}",
-          "parameterOrder": [
-            "enterpriseId",
-            "webAppId"
-          ],
-          "parameters": {
-            "enterpriseId": {
-              "required": true,
-              "location": "path",
-              "description": "The ID of the enterprise.",
-              "type": "string"
+        "Product": {
+            "description": "A Products resource represents an app in the Google Play store that is available to at least some users in the enterprise. (Some apps are restricted to a single enterprise, and no information about them is made available outside that enterprise.) The information provided for each product (localized name, icon, link to the full Google Play details page) is intended to allow a basic representation of the product within an EMM user interface.",
+            "id": "Product",
+            "properties": {
+                "appTracks": {
+                    "description": "The tracks visible to the enterprise.",
+                    "items": {
+                        "$ref": "TrackInfo"
+                    },
+                    "type": "array"
+                },
+                "appVersion": {
+                    "description": "App versions currently available for this product.",
+                    "items": {
+                        "$ref": "AppVersion"
+                    },
+                    "type": "array"
+                },
+                "authorName": {
+                    "description": "The name of the author of the product (for example, the app developer).",
+                    "type": "string"
+                },
+                "availableCountries": {
+                    "description": "The countries which this app is available in.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "availableTracks": {
+                    "description": "Deprecated, use appTracks instead.",
+                    "items": {
+                        "enum": [
+                            "appTrackUnspecified",
+                            "production",
+                            "beta",
+                            "alpha"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "category": {
+                    "description": "The app category (e.g. RACING, SOCIAL, etc.)",
+                    "type": "string"
+                },
+                "contentRating": {
+                    "description": "The content rating for this app.",
+                    "enum": [
+                        "ratingUnknown",
+                        "all",
+                        "preTeen",
+                        "teen",
+                        "mature"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "description": {
+                    "description": "The localized promotional description, if available.",
+                    "type": "string"
+                },
+                "detailsUrl": {
+                    "description": "A link to the (consumer) Google Play details page for the product.",
+                    "type": "string"
+                },
+                "distributionChannel": {
+                    "description": "How and to whom the package is made available. The value publicGoogleHosted means that the package is available through the Play store and not restricted to a specific enterprise. The value privateGoogleHosted means that the package is a private app (restricted to an enterprise) but hosted by Google. The value privateSelfHosted means that the package is a private app (restricted to an enterprise) and is privately hosted.",
+                    "enum": [
+                        "publicGoogleHosted",
+                        "privateGoogleHosted",
+                        "privateSelfHosted"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "features": {
+                    "description": "Noteworthy features (if any) of this product.",
+                    "items": {
+                        "enum": [
+                            "featureUnknown",
+                            "vpnApp"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "The app is a VPN."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "iconUrl": {
+                    "description": "A link to an image that can be used as an icon for the product. This image is suitable for use at up to 512px x 512px.",
+                    "type": "string"
+                },
+                "lastUpdatedTimestampMillis": {
+                    "description": "The approximate time (within 7 days) the app was last published, expressed in milliseconds since epoch.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "minAndroidSdkVersion": {
+                    "description": "The minimum Android SDK necessary to run the app.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "permissions": {
+                    "description": "A list of permissions required by the app.",
+                    "items": {
+                        "$ref": "ProductPermission"
+                    },
+                    "type": "array"
+                },
+                "productId": {
+                    "description": "A string of the form *app:<package name>*. For example, app:com.google.android.gm represents the Gmail app.",
+                    "type": "string"
+                },
+                "productPricing": {
+                    "description": "Whether this product is free, free with in-app purchases, or paid. If the pricing is unknown, this means the product is not generally available anymore (even though it might still be available to people who own it).",
+                    "enum": [
+                        "unknown",
+                        "free",
+                        "freeWithInAppPurchase",
+                        "paid"
+                    ],
+                    "enumDescriptions": [
+                        "Unknown pricing, used to denote an approved product that is not generally available.",
+                        "The product is free.",
+                        "The product is free, but offers in-app purchases.",
+                        "The product is paid."
+                    ],
+                    "type": "string"
+                },
+                "recentChanges": {
+                    "description": "A description of the recent changes made to the app.",
+                    "type": "string"
+                },
+                "requiresContainerApp": {
+                    "description": "Deprecated.",
+                    "type": "boolean"
+                },
+                "screenshotUrls": {
+                    "description": "A list of screenshot links representing the app.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "signingCertificate": {
+                    "$ref": "ProductSigningCertificate",
+                    "description": "The certificate used to sign this product."
+                },
+                "smallIconUrl": {
+                    "description": "A link to a smaller image that can be used as an icon for the product. This image is suitable for use at up to 128px x 128px.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "The name of the product.",
+                    "type": "string"
+                },
+                "workDetailsUrl": {
+                    "description": "A link to the managed Google Play details page for the product, for use by an Enterprise admin.",
+                    "type": "string"
+                }
             },
-            "webAppId": {
-              "required": true,
-              "location": "path",
-              "description": "The ID of the web app.",
-              "type": "string"
-            }
-          },
-          "description": "Deletes an existing web app.",
-          "httpMethod": "DELETE",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/webApps/{webAppId}",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "id": "androidenterprise.webapps.delete"
+            "type": "object"
         },
-        "get": {
-          "response": {
-            "$ref": "WebApp"
-          },
-          "id": "androidenterprise.webapps.get",
-          "parameterOrder": [
-            "enterpriseId",
-            "webAppId"
-          ],
-          "parameters": {
-            "webAppId": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "The ID of the web app."
+        "ProductApprovalEvent": {
+            "description": "An event generated when a product's approval status is changed.",
+            "id": "ProductApprovalEvent",
+            "properties": {
+                "approved": {
+                    "description": "Whether the product was approved or unapproved. This field will always be present.",
+                    "enum": [
+                        "unknown",
+                        "approved",
+                        "unapproved"
+                    ],
+                    "enumDescriptions": [
+                        "Conveys no information.",
+                        "The product was approved.",
+                        "The product was unapproved."
+                    ],
+                    "type": "string"
+                },
+                "productId": {
+                    "description": "The id of the product (e.g. \"app:com.google.android.gm\") for which the approval status has changed. This field will always be present.",
+                    "type": "string"
+                }
             },
-            "enterpriseId": {
-              "type": "string",
-              "required": true,
-              "description": "The ID of the enterprise.",
-              "location": "path"
-            }
-          },
-          "httpMethod": "GET",
-          "description": "Gets an existing web app.",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/webApps/{webAppId}",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/webApps/{webAppId}",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ]
+            "type": "object"
         },
-        "list": {
-          "parameterOrder": [
-            "enterpriseId"
-          ],
-          "description": "Retrieves the details of all web apps for a given enterprise.",
-          "id": "androidenterprise.webapps.list",
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/webApps",
-          "parameters": {
-            "enterpriseId": {
-              "location": "path",
-              "required": true,
-              "description": "The ID of the enterprise.",
-              "type": "string"
-            }
-          },
-          "response": {
-            "$ref": "WebAppsListResponse"
-          },
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/webApps"
+        "ProductAvailabilityChangeEvent": {
+            "description": "An event generated whenever a product's availability changes.",
+            "id": "ProductAvailabilityChangeEvent",
+            "properties": {
+                "availabilityStatus": {
+                    "description": "The new state of the product. This field will always be present.",
+                    "enum": [
+                        "unknown",
+                        "available",
+                        "removed",
+                        "unpublished"
+                    ],
+                    "enumDescriptions": [
+                        "Conveys no information.",
+                        "The previously unavailable product is again available on Google Play.",
+                        "The product was removed from Google Play.",
+                        "The product was unpublished by the developer."
+                    ],
+                    "type": "string"
+                },
+                "productId": {
+                    "description": "The id of the product (e.g. \"app:com.google.android.gm\") for which the product availability changed. This field will always be present.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "update": {
-          "response": {
-            "$ref": "WebApp"
-          },
-          "parameters": {
-            "enterpriseId": {
-              "type": "string",
-              "description": "The ID of the enterprise.",
-              "required": true,
-              "location": "path"
+        "ProductPermission": {
+            "description": "A product permissions resource represents the set of permissions required by a specific app and whether or not they have been accepted by an enterprise admin. The API can be used to read the set of permissions, and also to update the set to indicate that permissions have been accepted.",
+            "id": "ProductPermission",
+            "properties": {
+                "permissionId": {
+                    "description": "An opaque string uniquely identifying the permission.",
+                    "type": "string"
+                },
+                "state": {
+                    "description": "Whether the permission has been accepted or not.",
+                    "enum": [
+                        "required",
+                        "accepted"
+                    ],
+                    "enumDescriptions": [
+                        "The permission is required by the app but has not yet been accepted by the enterprise.",
+                        "The permission has been accepted by the enterprise."
+                    ],
+                    "type": "string"
+                }
             },
-            "webAppId": {
-              "required": true,
-              "location": "path",
-              "description": "The ID of the web app.",
-              "type": "string"
-            }
-          },
-          "httpMethod": "PUT",
-          "id": "androidenterprise.webapps.update",
-          "description": "Updates an existing web app.",
-          "request": {
-            "$ref": "WebApp"
-          },
-          "parameterOrder": [
-            "enterpriseId",
-            "webAppId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/webApps/{webAppId}",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/webApps/{webAppId}"
-        }
-      }
-    },
-    "storelayoutpages": {
-      "methods": {
-        "insert": {
-          "description": "Inserts a new store page.",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages",
-          "request": {
-            "$ref": "StorePage"
-          },
-          "id": "androidenterprise.storelayoutpages.insert",
-          "parameterOrder": [
-            "enterpriseId"
-          ],
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages",
-          "parameters": {
-            "enterpriseId": {
-              "description": "The ID of the enterprise.",
-              "location": "path",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "httpMethod": "POST",
-          "response": {
-            "$ref": "StorePage"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ]
+            "type": "object"
         },
-        "delete": {
-          "parameters": {
-            "enterpriseId": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "The ID of the enterprise."
+        "ProductPermissions": {
+            "description": "Information about the permissions required by a specific app and whether they have been accepted by the enterprise.",
+            "id": "ProductPermissions",
+            "properties": {
+                "permission": {
+                    "description": "The permissions required by the app.",
+                    "items": {
+                        "$ref": "ProductPermission"
+                    },
+                    "type": "array"
+                },
+                "productId": {
+                    "description": "The ID of the app that the permissions relate to, e.g. \"app:com.google.android.gm\".",
+                    "type": "string"
+                }
             },
-            "pageId": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "description": "The ID of the page."
-            }
-          },
-          "httpMethod": "DELETE",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "parameterOrder": [
-            "enterpriseId",
-            "pageId"
-          ],
-          "description": "Deletes a store page.",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}",
-          "id": "androidenterprise.storelayoutpages.delete"
+            "type": "object"
         },
-        "get": {
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}",
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "StorePage"
-          },
-          "parameterOrder": [
-            "enterpriseId",
-            "pageId"
-          ],
-          "parameters": {
-            "pageId": {
-              "type": "string",
-              "location": "path",
-              "description": "The ID of the page.",
-              "required": true
+        "ProductPolicy": {
+            "description": "The policy for a product.",
+            "id": "ProductPolicy",
+            "properties": {
+                "autoInstallPolicy": {
+                    "$ref": "AutoInstallPolicy",
+                    "description": "The auto-install policy for the product."
+                },
+                "autoUpdateMode": {
+                    "description": "The auto-update mode for the product.",
+                    "enum": [
+                        "autoUpdateModeUnspecified",
+                        "autoUpdateDefault",
+                        "autoUpdatePostponed",
+                        "autoUpdateHighPriority"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified. Defaults to AUTO_UPDATE_DEFAULT.",
+                        "The app is automatically updated with low priority to minimize the impact on the user. The app is updated when the following constraints are met: * The device is not actively used * The device is connected to a Wi-Fi network. * The device is charging * If the system update policy is set to `WINDOWED`: the local time of the device is within the daily maintenance window The device is notified about a new update within 24 hours after it is published by the developer, after which the app is updated the next time the constraints above are met.",
+                        "The app is not automatically updated for a maximum of 90 days after the app becomes out of date. 90 days after the app becomes out of date, the latest available version is installed automatically with low priority (see AUTO_UPDATE_DEFAULT). After the app is updated it is not automatically updated again until 90 days after it becomes out of date again. The user can still manually update the app from the Play Store at any time.",
+                        "The app is updated as soon as possible. No constraints are applied. The device is notified immediately about a new app update after it is published by the developer."
+                    ],
+                    "type": "string"
+                },
+                "managedConfiguration": {
+                    "$ref": "ManagedConfiguration",
+                    "description": "The managed configuration for the product."
+                },
+                "productId": {
+                    "description": "The ID of the product. For example, \"app:com.google.android.gm\".",
+                    "type": "string"
+                },
+                "trackIds": {
+                    "description": "Grants the device visibility to the specified product release track(s), identified by trackIds. The list of release tracks of a product can be obtained by calling Products.Get.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "tracks": {
+                    "description": "Deprecated. Use trackIds instead.",
+                    "items": {
+                        "enum": [
+                            "appTrackUnspecified",
+                            "production",
+                            "beta",
+                            "alpha"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
             },
-            "enterpriseId": {
-              "description": "The ID of the enterprise.",
-              "location": "path",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "description": "Retrieves details of a store page.",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "id": "androidenterprise.storelayoutpages.get"
+            "type": "object"
         },
-        "update": {
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}",
-          "response": {
-            "$ref": "StorePage"
-          },
-          "httpMethod": "PUT",
-          "parameterOrder": [
-            "enterpriseId",
-            "pageId"
-          ],
-          "request": {
-            "$ref": "StorePage"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "description": "Updates the content of a store page.",
-          "parameters": {
-            "enterpriseId": {
-              "description": "The ID of the enterprise.",
-              "type": "string",
-              "required": true,
-              "location": "path"
+        "ProductSet": {
+            "description": "A set of products.",
+            "id": "ProductSet",
+            "properties": {
+                "productId": {
+                    "description": "The list of product IDs making up the set of products.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "productSetBehavior": {
+                    "description": "The interpretation of this product set. \"unknown\" should never be sent and is ignored if received. \"whitelist\" means that the user is entitled to access the product set. \"includeAll\" means that all products are accessible, including products that are approved, products with revoked approval, and products that have never been approved. \"allApproved\" means that the user is entitled to access all products that are approved for the enterprise. If the value is \"allApproved\" or \"includeAll\", the productId field is ignored. If no value is provided, it is interpreted as \"whitelist\" for backwards compatibility. Further \"allApproved\" or \"includeAll\" does not enable automatic visibility of \"alpha\" or \"beta\" tracks for Android app. Use ProductVisibility to enable \"alpha\" or \"beta\" tracks per user.",
+                    "enum": [
+                        "unknown",
+                        "whitelist",
+                        "includeAll",
+                        "allApproved"
+                    ],
+                    "enumDescriptions": [
+                        "This value should never be sent and ignored if received.",
+                        "This product set constitutes a whitelist.",
+                        "This product set represents all products. For Android app it represents only \"production\" track. (The value of the productId field is therefore ignored).",
+                        "This product set represents all approved products. For Android app it represents only \"production\" track. (The value of the product_id field is therefore ignored)."
+                    ],
+                    "type": "string"
+                },
+                "productVisibility": {
+                    "description": "Additional list of product IDs making up the product set. Unlike the productID array, in this list It's possible to specify which tracks (alpha, beta, production) of a product are visible to the user. See ProductVisibility and its fields for more information. Specifying the same product ID both here and in the productId array is not allowed and it will result in an error.",
+                    "items": {
+                        "$ref": "ProductVisibility"
+                    },
+                    "type": "array"
+                }
             },
-            "pageId": {
-              "required": true,
-              "description": "The ID of the page.",
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}",
-          "id": "androidenterprise.storelayoutpages.update"
+            "type": "object"
         },
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages",
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "enterpriseId"
-          ],
-          "id": "androidenterprise.storelayoutpages.list",
-          "description": "Retrieves the details of all pages in the store.",
-          "parameters": {
-            "enterpriseId": {
-              "type": "string",
-              "location": "path",
-              "description": "The ID of the enterprise.",
-              "required": true
-            }
-          },
-          "response": {
-            "$ref": "StoreLayoutPagesListResponse"
-          },
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages"
-        }
-      }
-    },
-    "products": {
-      "methods": {
-        "list": {
-          "description": "Finds approved products that match a query, or all approved products if there is no query.",
-          "id": "androidenterprise.products.list",
-          "parameters": {
-            "approved": {
-              "location": "query",
-              "type": "boolean",
-              "description": "Specifies whether to search among all products (false) or among only products that have been approved (true). Only \"true\" is supported, and should be specified."
-            },
-            "maxResults": {
-              "type": "integer",
-              "format": "uint32",
-              "description": "Defines how many results the list operation should return. The default number depends on the resource collection.",
-              "location": "query"
-            },
-            "token": {
-              "type": "string",
-              "location": "query",
-              "description": "Defines the token of the page to return, usually taken from TokenPagination. This can only be used if token paging is enabled."
+        "ProductSigningCertificate": {
+            "id": "ProductSigningCertificate",
+            "properties": {
+                "certificateHashSha1": {
+                    "description": "The base64 urlsafe encoded SHA1 hash of the certificate. (This field is deprecated in favor of SHA2-256. It should not be used and may be removed at any time.)",
+                    "type": "string"
+                },
+                "certificateHashSha256": {
+                    "description": "The base64 urlsafe encoded SHA2-256 hash of the certificate.",
+                    "type": "string"
+                }
             },
-            "enterpriseId": {
-              "location": "path",
-              "required": true,
-              "description": "The ID of the enterprise.",
-              "type": "string"
+            "type": "object"
+        },
+        "ProductVisibility": {
+            "description": "A product to be made visible to a user.",
+            "id": "ProductVisibility",
+            "properties": {
+                "productId": {
+                    "description": "The product ID to make visible to the user. Required for each item in the productVisibility list.",
+                    "type": "string"
+                },
+                "trackIds": {
+                    "description": "Grants the user visibility to the specified product track(s), identified by trackIds.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "tracks": {
+                    "description": "Deprecated. Use trackIds instead.",
+                    "items": {
+                        "enum": [
+                            "appTrackUnspecified",
+                            "production",
+                            "beta",
+                            "alpha"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
             },
-            "query": {
-              "description": "The search query as typed in the Google Play store search box. If omitted, all approved apps will be returned (using the pagination parameters), including apps that are not available in the store (e.g. unpublished apps).",
-              "location": "query",
-              "type": "string"
+            "type": "object"
+        },
+        "ProductsApproveRequest": {
+            "id": "ProductsApproveRequest",
+            "properties": {
+                "approvalUrlInfo": {
+                    "$ref": "ApprovalUrlInfo",
+                    "description": "The approval URL that was shown to the user. Only the permissions shown to the user with that URL will be accepted, which may not be the product's entire set of permissions. For example, the URL may only display new permissions from an update after the product was approved, or not include new permissions if the product was updated since the URL was generated."
+                },
+                "approvedPermissions": {
+                    "description": "Sets how new permission requests for the product are handled. \"allPermissions\" automatically approves all current and future permissions for the product. \"currentPermissionsOnly\" approves the current set of permissions for the product, but any future permissions added through updates will require manual reapproval. If not specified, only the current set of permissions will be approved.",
+                    "enum": [
+                        "currentPermissionsOnly",
+                        "allPermissions"
+                    ],
+                    "enumDescriptions": [
+                        "Approve only the permissions the product requires at approval time. If an update requires additional permissions, the app will not be updated on devices associated with enterprise users until the additional permissions are approved.",
+                        "All current and future permissions the app requires are automatically approved."
+                    ],
+                    "type": "string"
+                }
             },
-            "language": {
-              "description": "The BCP47 tag for the user's preferred language (e.g. \"en-US\", \"de\"). Results are returned in the language best matching the preferred language.",
-              "type": "string",
-              "location": "query"
-            }
-          },
-          "parameterOrder": [
-            "enterpriseId"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/products",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "ProductsListResponse"
-          },
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/products"
+            "type": "object"
         },
-        "get": {
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "parameterOrder": [
-            "enterpriseId",
-            "productId"
-          ],
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}",
-          "id": "androidenterprise.products.get",
-          "description": "Retrieves details of a product for display to an enterprise admin.",
-          "parameters": {
-            "enterpriseId": {
-              "location": "path",
-              "description": "The ID of the enterprise.",
-              "type": "string",
-              "required": true
+        "ProductsGenerateApprovalUrlResponse": {
+            "id": "ProductsGenerateApprovalUrlResponse",
+            "properties": {
+                "url": {
+                    "description": "A URL that can be rendered in an iframe to display the permissions (if any) of a product. This URL can be used to approve the product only once and only within 24 hours of being generated, using the Products.approve call. If the product is currently unapproved and has no permissions, this URL will point to an empty page. If the product is currently approved, a URL will only be generated if that product has added permissions since it was last approved, and the URL will only display those new permissions that have not yet been accepted.",
+                    "type": "string"
+                }
             },
-            "language": {
-              "location": "query",
-              "type": "string",
-              "description": "The BCP47 tag for the user's preferred language (e.g. \"en-US\", \"de\")."
+            "type": "object"
+        },
+        "ProductsListResponse": {
+            "id": "ProductsListResponse",
+            "properties": {
+                "pageInfo": {
+                    "$ref": "PageInfo",
+                    "description": "General pagination information."
+                },
+                "product": {
+                    "description": "Information about a product (e.g. an app) in the Google Play store, for display to an enterprise admin.",
+                    "items": {
+                        "$ref": "Product"
+                    },
+                    "type": "array"
+                },
+                "tokenPagination": {
+                    "$ref": "TokenPagination",
+                    "description": "Pagination information for token pagination."
+                }
             },
-            "productId": {
-              "location": "path",
-              "required": true,
-              "description": "The ID of the product, e.g. \"app:com.google.android.gm\".",
-              "type": "string"
-            }
-          },
-          "response": {
-            "$ref": "Product"
-          },
-          "httpMethod": "GET",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}"
+            "type": "object"
         },
-        "approve": {
-          "id": "androidenterprise.products.approve",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/approve",
-          "description": " Approves the specified product and the relevant app permissions, if any. The maximum number of products that you can approve per enterprise customer is 1,000. To learn how to use managed Google Play to design and create a store layout to display approved products to your users, see Store Layout Design. ",
-          "parameterOrder": [
-            "enterpriseId",
-            "productId"
-          ],
-          "parameters": {
-            "enterpriseId": {
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "The ID of the enterprise."
+        "ServiceAccount": {
+            "description": "A service account identity, including the name and credentials that can be used to authenticate as the service account.",
+            "id": "ServiceAccount",
+            "properties": {
+                "key": {
+                    "$ref": "ServiceAccountKey",
+                    "description": "Credentials that can be used to authenticate as this ServiceAccount."
+                },
+                "name": {
+                    "description": "The account name of the service account, in the form of an email address. Assigned by the server.",
+                    "type": "string"
+                }
             },
-            "productId": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "The ID of the product."
-            }
-          },
-          "request": {
-            "$ref": "ProductsApproveRequest"
-          },
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/approve"
+            "type": "object"
         },
-        "unapprove": {
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/unapprove",
-          "parameterOrder": [
-            "enterpriseId",
-            "productId"
-          ],
-          "parameters": {
-            "productId": {
-              "type": "string",
-              "description": "The ID of the product.",
-              "required": true,
-              "location": "path"
+        "ServiceAccountKey": {
+            "description": "Credentials that can be used to authenticate as a service account.",
+            "id": "ServiceAccountKey",
+            "properties": {
+                "data": {
+                    "description": "The body of the private key credentials file, in string format. This is only populated when the ServiceAccountKey is created, and is not stored by Google.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "An opaque, unique identifier for this ServiceAccountKey. Assigned by the server.",
+                    "type": "string"
+                },
+                "publicData": {
+                    "description": "Public key data for the credentials file. This is an X.509 cert. If you are using the googleCredentials key type, this is identical to the cert that can be retrieved by using the X.509 cert url inside of the credentials file.",
+                    "type": "string"
+                },
+                "type": {
+                    "annotations": {
+                        "required": [
+                            "androidenterprise.serviceaccountkeys.insert"
+                        ]
+                    },
+                    "description": "The file format of the generated key data.",
+                    "enum": [
+                        "googleCredentials",
+                        "pkcs12"
+                    ],
+                    "enumDescriptions": [
+                        "Google Credentials File format.",
+                        "PKCS12 format. The password for the PKCS12 file is 'notasecret'. For more information, see https://tools.ietf.org/html/rfc7292. The data for keys of this type are base64 encoded according to RFC 4648 Section 4. See http://tools.ietf.org/html/rfc4648#section-4."
+                    ],
+                    "type": "string"
+                }
             },
-            "enterpriseId": {
-              "location": "path",
-              "description": "The ID of the enterprise.",
-              "type": "string",
-              "required": true
-            }
-          },
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/unapprove",
-          "httpMethod": "POST",
-          "description": "Unapproves the specified product (and the relevant app permissions, if any)",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "id": "androidenterprise.products.unapprove"
+            "type": "object"
         },
-        "generateApprovalUrl": {
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/generateApprovalUrl",
-          "description": "Generates a URL that can be rendered in an iframe to display the permissions (if any) of a product. An enterprise admin must view these permissions and accept them on behalf of their organization in order to approve that product. Admins should accept the displayed permissions by interacting with a separate UI element in the EMM console, which in turn should trigger the use of this URL as the approvalUrlInfo.approvalUrl property in a Products.approve call to approve the product. This URL can only be used to display permissions for up to 1 day.",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "id": "androidenterprise.products.generateApprovalUrl",
-          "parameters": {
-            "languageCode": {
-              "type": "string",
-              "location": "query",
-              "description": "The BCP 47 language code used for permission names and descriptions in the returned iframe, for instance \"en-US\"."
+        "ServiceAccountKeysListResponse": {
+            "id": "ServiceAccountKeysListResponse",
+            "properties": {
+                "serviceAccountKey": {
+                    "description": "The service account credentials.",
+                    "items": {
+                        "$ref": "ServiceAccountKey"
+                    },
+                    "type": "array"
+                }
             },
-            "enterpriseId": {
-              "description": "The ID of the enterprise.",
-              "required": true,
-              "type": "string",
-              "location": "path"
+            "type": "object"
+        },
+        "SignupInfo": {
+            "description": "A resource returned by the GenerateSignupUrl API, which contains the Signup URL and Completion Token.",
+            "id": "SignupInfo",
+            "properties": {
+                "completionToken": {
+                    "description": "An opaque token that will be required, along with the Enterprise Token, for obtaining the enterprise resource from CompleteSignup.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Deprecated.",
+                    "type": "string"
+                },
+                "url": {
+                    "description": "A URL under which the Admin can sign up for an enterprise. The page pointed to cannot be rendered in an iframe.",
+                    "type": "string"
+                }
             },
-            "productId": {
-              "location": "path",
-              "description": "The ID of the product.",
-              "type": "string",
-              "required": true
-            }
-          },
-          "httpMethod": "POST",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/generateApprovalUrl",
-          "response": {
-            "$ref": "ProductsGenerateApprovalUrlResponse"
-          },
-          "parameterOrder": [
-            "enterpriseId",
-            "productId"
-          ]
+            "type": "object"
         },
-        "getAppRestrictionsSchema": {
-          "id": "androidenterprise.products.getAppRestrictionsSchema",
-          "response": {
-            "$ref": "AppRestrictionsSchema"
-          },
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/appRestrictionsSchema",
-          "description": "Retrieves the schema that defines the configurable properties for this product. All products have a schema, but this schema may be empty if no managed configurations have been defined. This schema can be used to populate a UI that allows an admin to configure the product. To apply a managed configuration based on the schema obtained using this API, see Managed Configurations through Play.",
-          "parameters": {
-            "language": {
-              "description": "The BCP47 tag for the user's preferred language (e.g. \"en-US\", \"de\").",
-              "type": "string",
-              "location": "query"
+        "StoreCluster": {
+            "description": "Definition of a managed Google Play store cluster, a list of products displayed as part of a store page.",
+            "id": "StoreCluster",
+            "properties": {
+                "id": {
+                    "description": "Unique ID of this cluster. Assigned by the server. Immutable once assigned.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Ordered list of localized strings giving the name of this page. The text displayed is the one that best matches the user locale, or the first entry if there is no good match. There needs to be at least one entry.",
+                    "items": {
+                        "$ref": "LocalizedText"
+                    },
+                    "type": "array"
+                },
+                "orderInPage": {
+                    "description": "String (US-ASCII only) used to determine order of this cluster within the parent page's elements. Page elements are sorted in lexicographic order of this field. Duplicated values are allowed, but ordering between elements with duplicate order is undefined. The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 256 characters.",
+                    "type": "string"
+                },
+                "productId": {
+                    "description": "List of products in the order they are displayed in the cluster. There should not be duplicates within a cluster.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
             },
-            "enterpriseId": {
-              "description": "The ID of the enterprise.",
-              "required": true,
-              "location": "path",
-              "type": "string"
-            },
-            "productId": {
-              "type": "string",
-              "location": "path",
-              "description": "The ID of the product.",
-              "required": true
-            }
-          },
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/appRestrictionsSchema",
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "parameterOrder": [
-            "enterpriseId",
-            "productId"
-          ]
+            "type": "object"
         },
-        "getPermissions": {
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/permissions",
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "enterpriseId",
-            "productId"
-          ],
-          "response": {
-            "$ref": "ProductPermissions"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "id": "androidenterprise.products.getPermissions",
-          "description": "Retrieves the Android app permissions required by this app.",
-          "parameters": {
-            "enterpriseId": {
-              "required": true,
-              "description": "The ID of the enterprise.",
-              "type": "string",
-              "location": "path"
+        "StoreLayout": {
+            "description": "General setting for the managed Google Play store layout, currently only specifying the page to display the first time the store is opened.",
+            "id": "StoreLayout",
+            "properties": {
+                "homepageId": {
+                    "description": "The ID of the store page to be used as the homepage. The homepage is the first page shown in the managed Google Play Store. Not specifying a homepage is equivalent to setting the store layout type to \"basic\".",
+                    "type": "string"
+                },
+                "storeLayoutType": {
+                    "description": "The store layout type. By default, this value is set to \"basic\" if the homepageId field is not set, and to \"custom\" otherwise. If set to \"basic\", the layout will consist of all approved apps that have been whitelisted for the user.",
+                    "enum": [
+                        "unknown",
+                        "basic",
+                        "custom"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
             },
-            "productId": {
-              "description": "The ID of the product.",
-              "type": "string",
-              "location": "path",
-              "required": true
-            }
-          },
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/products/{productId}/permissions"
-        }
-      }
-    },
-    "users": {
-      "methods": {
-        "update": {
-          "parameterOrder": [
-            "enterpriseId",
-            "userId"
-          ],
-          "httpMethod": "PUT",
-          "response": {
-            "$ref": "User"
-          },
-          "id": "androidenterprise.users.update",
-          "request": {
-            "$ref": "User"
-          },
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}",
-          "parameters": {
-            "userId": {
-              "description": "The ID of the user.",
-              "type": "string",
-              "location": "path",
-              "required": true
-            },
-            "enterpriseId": {
-              "location": "path",
-              "required": true,
-              "description": "The ID of the enterprise.",
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}",
-          "description": "Updates the details of an EMM-managed user. Can be used with EMM-managed users only (not Google managed users). Pass the new details in the Users resource in the request body. Only the displayName field can be changed. Other fields must either be unset or have the currently active value."
+            "type": "object"
         },
-        "generateAuthenticationToken": {
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/authenticationToken",
-          "response": {
-            "$ref": "AuthenticationToken"
-          },
-          "id": "androidenterprise.users.generateAuthenticationToken",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "description": "Generates an authentication token which the device policy client can use to provision the given EMM-managed user account on a device. The generated token is single-use and expires after a few minutes. You can provision a maximum of 10 devices per user. This call only works with EMM-managed accounts.",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/authenticationToken",
-          "parameterOrder": [
-            "enterpriseId",
-            "userId"
-          ],
-          "parameters": {
-            "enterpriseId": {
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "The ID of the enterprise."
+        "StoreLayoutClustersListResponse": {
+            "id": "StoreLayoutClustersListResponse",
+            "properties": {
+                "cluster": {
+                    "description": "A store cluster of an enterprise.",
+                    "items": {
+                        "$ref": "StoreCluster"
+                    },
+                    "type": "array"
+                }
             },
-            "userId": {
-              "description": "The ID of the user.",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "httpMethod": "POST"
+            "type": "object"
         },
-        "list": {
-          "description": "Looks up a user by primary email address. This is only supported for Google-managed users. Lookup of the id is not needed for EMM-managed users because the id is already returned in the result of the Users.insert call.",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users",
-          "parameters": {
-            "email": {
-              "location": "query",
-              "type": "string",
-              "required": true,
-              "description": "Required. The exact primary email address of the user to look up."
+        "StoreLayoutPagesListResponse": {
+            "id": "StoreLayoutPagesListResponse",
+            "properties": {
+                "page": {
+                    "description": "A store page of an enterprise.",
+                    "items": {
+                        "$ref": "StorePage"
+                    },
+                    "type": "array"
+                }
             },
-            "enterpriseId": {
-              "type": "string",
-              "description": "The ID of the enterprise.",
-              "location": "path",
-              "required": true
-            }
-          },
-          "parameterOrder": [
-            "enterpriseId",
-            "email"
-          ],
-          "httpMethod": "GET",
-          "id": "androidenterprise.users.list",
-          "response": {
-            "$ref": "UsersListResponse"
-          }
+            "type": "object"
         },
-        "insert": {
-          "description": "Creates a new EMM-managed user. The Users resource passed in the body of the request should include an accountIdentifier and an accountType. If a corresponding user already exists with the same account identifier, the user will be updated with the resource. In this case only the displayName field can be changed.",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "request": {
-            "$ref": "User"
-          },
-          "response": {
-            "$ref": "User"
-          },
-          "id": "androidenterprise.users.insert",
-          "parameters": {
-            "enterpriseId": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "The ID of the enterprise."
-            }
-          },
-          "parameterOrder": [
-            "enterpriseId"
-          ],
-          "httpMethod": "POST",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users"
-        },
-        "setAvailableProductSet": {
-          "httpMethod": "PUT",
-          "id": "androidenterprise.users.setAvailableProductSet",
-          "parameterOrder": [
-            "enterpriseId",
-            "userId"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/availableProductSet",
-          "response": {
-            "$ref": "ProductSet"
-          },
-          "description": "Modifies the set of products that a user is entitled to access (referred to as *whitelisted* products). Only products that are approved or products that were previously approved (products with revoked approval) can be whitelisted.",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "parameters": {
-            "userId": {
-              "location": "path",
-              "required": true,
-              "description": "The ID of the user.",
-              "type": "string"
+        "StorePage": {
+            "description": "Definition of a managed Google Play store page, made of a localized name and links to other pages. A page also contains clusters defined as a subcollection.",
+            "id": "StorePage",
+            "properties": {
+                "id": {
+                    "description": "Unique ID of this page. Assigned by the server. Immutable once assigned.",
+                    "type": "string"
+                },
+                "link": {
+                    "description": "Ordered list of pages a user should be able to reach from this page. The list can't include this page. It is recommended that the basic pages are created first, before adding the links between pages. The API doesn't verify that the pages exist or the pages are reachable.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "name": {
+                    "description": "Ordered list of localized strings giving the name of this page. The text displayed is the one that best matches the user locale, or the first entry if there is no good match. There needs to be at least one entry.",
+                    "items": {
+                        "$ref": "LocalizedText"
+                    },
+                    "type": "array"
+                }
             },
-            "enterpriseId": {
-              "description": "The ID of the enterprise.",
-              "type": "string",
-              "location": "path",
-              "required": true
-            }
-          },
-          "request": {
-            "$ref": "ProductSet"
-          },
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/availableProductSet"
+            "type": "object"
         },
-        "delete": {
-          "parameterOrder": [
-            "enterpriseId",
-            "userId"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "parameters": {
-            "userId": {
-              "type": "string",
-              "required": true,
-              "description": "The ID of the user.",
-              "location": "path"
+        "TokenPagination": {
+            "description": "Pagination information returned by a List operation when token pagination is enabled. List operations that supports paging return only one \"page\" of results. This protocol buffer message describes the page that has been returned. When using token pagination, clients should use the next/previous token to get another page of the result. The presence or absence of next/previous token indicates whether a next/previous page is available and provides a mean of accessing this page. ListRequest.page_token should be set to either next_page_token or previous_page_token to access another page.",
+            "id": "TokenPagination",
+            "properties": {
+                "nextPageToken": {
+                    "description": "Tokens to pass to the standard list field 'page_token'. Whenever available, tokens are preferred over manipulating start_index.",
+                    "type": "string"
+                },
+                "previousPageToken": {
+                    "type": "string"
+                }
             },
-            "enterpriseId": {
-              "description": "The ID of the enterprise.",
-              "required": true,
-              "location": "path",
-              "type": "string"
-            }
-          },
-          "id": "androidenterprise.users.delete",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}",
-          "description": "Deleted an EMM-managed user.",
-          "httpMethod": "DELETE"
+            "type": "object"
         },
-        "revokeDeviceAccess": {
-          "httpMethod": "DELETE",
-          "description": "Revokes access to all devices currently provisioned to the user. The user will no longer be able to use the managed Play store on any of their managed devices. This call only works with EMM-managed accounts.",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "parameterOrder": [
-            "enterpriseId",
-            "userId"
-          ],
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/deviceAccess",
-          "parameters": {
-            "userId": {
-              "location": "path",
-              "description": "The ID of the user.",
-              "type": "string",
-              "required": true
+        "TrackInfo": {
+            "description": "Id to name association of a track.",
+            "id": "TrackInfo",
+            "properties": {
+                "trackAlias": {
+                    "description": "A modifiable name for a track. This is the visible name in the play developer console.",
+                    "type": "string"
+                },
+                "trackId": {
+                    "description": "Unmodifiable, unique track identifier. This identifier is the releaseTrackId in the url of the play developer console page that displays the track information.",
+                    "type": "string"
+                }
             },
-            "enterpriseId": {
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "The ID of the enterprise."
-            }
-          },
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/deviceAccess",
-          "id": "androidenterprise.users.revokeDeviceAccess"
+            "type": "object"
         },
-        "get": {
-          "description": "Retrieves a user's details.",
-          "id": "androidenterprise.users.get",
-          "parameters": {
-            "userId": {
-              "description": "The ID of the user.",
-              "type": "string",
-              "location": "path",
-              "required": true
+        "User": {
+            "description": "A Users resource represents an account associated with an enterprise. The account may be specific to a device or to an individual user (who can then use the account across multiple devices). The account may provide access to managed Google Play only, or to other Google services, depending on the identity model: - The Google managed domain identity model requires synchronization to Google account sources (via primaryEmail). - The managed Google Play Accounts identity model provides a dynamic means for enterprises to create user or device accounts as needed. These accounts provide access to managed Google Play. ",
+            "id": "User",
+            "properties": {
+                "accountIdentifier": {
+                    "annotations": {
+                        "required": [
+                            "androidenterprise.users.insert"
+                        ]
+                    },
+                    "description": "A unique identifier you create for this user, such as \"user342\" or \"asset#44418\". Do not use personally identifiable information (PII) for this property. Must always be set for EMM-managed users. Not set for Google-managed users.",
+                    "type": "string"
+                },
+                "accountType": {
+                    "annotations": {
+                        "required": [
+                            "androidenterprise.users.insert"
+                        ]
+                    },
+                    "description": "The type of account that this user represents. A userAccount can be installed on multiple devices, but a deviceAccount is specific to a single device. An EMM-managed user (emmManaged) can be either type (userAccount, deviceAccount), but a Google-managed user (googleManaged) is always a userAccount.",
+                    "enum": [
+                        "deviceAccount",
+                        "userAccount"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "The name that will appear in user interfaces. Setting this property is optional when creating EMM-managed users. If you do set this property, use something generic about the organization (such as \"Example, Inc.\") or your name (as EMM). Not used for Google-managed user accounts. @mutable androidenterprise.users.update",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "The unique ID for the user.",
+                    "type": "string"
+                },
+                "managementType": {
+                    "description": "The entity that manages the user. With googleManaged users, the source of truth is Google so EMMs have to make sure a Google Account exists for the user. With emmManaged users, the EMM is in charge.",
+                    "enum": [
+                        "googleManaged",
+                        "emmManaged"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "primaryEmail": {
+                    "description": "The user's primary email address, for example, \"jsmith@example.com\". Will always be set for Google managed users and not set for EMM managed users.",
+                    "type": "string"
+                }
             },
-            "enterpriseId": {
-              "description": "The ID of the enterprise.",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "parameterOrder": [
-            "enterpriseId",
-            "userId"
-          ],
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}",
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "User"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ]
+            "type": "object"
         },
-        "getAvailableProductSet": {
-          "description": "Retrieves the set of products a user is entitled to access.",
-          "httpMethod": "GET",
-          "id": "androidenterprise.users.getAvailableProductSet",
-          "response": {
-            "$ref": "ProductSet"
-          },
-          "parameters": {
-            "enterpriseId": {
-              "required": true,
-              "type": "string",
-              "description": "The ID of the enterprise.",
-              "location": "path"
+        "UsersListResponse": {
+            "id": "UsersListResponse",
+            "properties": {
+                "user": {
+                    "description": "A user of an enterprise.",
+                    "items": {
+                        "$ref": "User"
+                    },
+                    "type": "array"
+                }
             },
-            "userId": {
-              "location": "path",
-              "type": "string",
-              "description": "The ID of the user.",
-              "required": true
-            }
-          },
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/availableProductSet",
-          "parameterOrder": [
-            "enterpriseId",
-            "userId"
-          ],
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/users/{userId}/availableProductSet",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ]
-        }
-      }
-    },
-    "storelayoutclusters": {
-      "methods": {
-        "get": {
-          "parameters": {
-            "pageId": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "description": "The ID of the page."
-            },
-            "clusterId": {
-              "location": "path",
-              "description": "The ID of the cluster.",
-              "type": "string",
-              "required": true
-            },
-            "enterpriseId": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "The ID of the enterprise."
-            }
-          },
-          "response": {
-            "$ref": "StoreCluster"
-          },
-          "id": "androidenterprise.storelayoutclusters.get",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters/{clusterId}",
-          "description": "Retrieves details of a cluster.",
-          "parameterOrder": [
-            "enterpriseId",
-            "pageId",
-            "clusterId"
-          ],
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters/{clusterId}",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "httpMethod": "GET"
+            "type": "object"
         },
-        "list": {
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters",
-          "httpMethod": "GET",
-          "id": "androidenterprise.storelayoutclusters.list",
-          "parameters": {
-            "pageId": {
-              "description": "The ID of the page.",
-              "type": "string",
-              "required": true,
-              "location": "path"
+        "VariableSet": {
+            "description": "A variable set is a key-value pair of EMM-provided placeholders and its corresponding value, which is attributed to a user. For example, $FIRSTNAME could be a placeholder, and its value could be Alice. Placeholders should start with a '$' sign and should be alphanumeric only.",
+            "id": "VariableSet",
+            "properties": {
+                "placeholder": {
+                    "description": "The placeholder string; defined by EMM.",
+                    "type": "string"
+                },
+                "userValue": {
+                    "description": "The value of the placeholder, specific to the user.",
+                    "type": "string"
+                }
             },
-            "enterpriseId": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "The ID of the enterprise."
-            }
-          },
-          "description": "Retrieves the details of all clusters on the specified page.",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "response": {
-            "$ref": "StoreLayoutClustersListResponse"
-          },
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters",
-          "parameterOrder": [
-            "enterpriseId",
-            "pageId"
-          ]
+            "type": "object"
         },
-        "update": {
-          "parameterOrder": [
-            "enterpriseId",
-            "pageId",
-            "clusterId"
-          ],
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters/{clusterId}",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters/{clusterId}",
-          "response": {
-            "$ref": "StoreCluster"
-          },
-          "description": "Updates a cluster.",
-          "parameters": {
-            "enterpriseId": {
-              "description": "The ID of the enterprise.",
-              "type": "string",
-              "required": true,
-              "location": "path"
+        "WebApp": {
+            "description": "A WebApps resource represents a web app created for an enterprise. Web apps are published to managed Google Play and can be distributed like other Android apps. On a user's device, a web app opens its specified URL.",
+            "id": "WebApp",
+            "properties": {
+                "displayMode": {
+                    "description": "The display mode of the web app. Possible values include: - \"minimalUi\", the device's status bar, navigation bar, the app's URL, and a refresh button are visible when the app is open. For HTTP URLs, you can only select this option. - \"standalone\", the device's status bar and navigation bar are visible when the app is open. - \"fullScreen\", the app opens in full screen mode, hiding the device's status and navigation bars. All browser UI elements, page URL, system status bar and back button are not visible, and the web app takes up the entirety of the available display area. ",
+                    "enum": [
+                        "displayModeUnspecified",
+                        "minimalUi",
+                        "standalone",
+                        "fullScreen"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "Opens the web app with a minimal set of browser UI elements for controlling navigation and viewing the page URL.",
+                        "Opens the web app to look and feel like a standalone native application. The browser UI elements and page URL are not visible, however the system status bar and back button are visible.",
+                        "Opens the web app in full screen without any visible controls. The browser UI elements, page URL, system status bar and back button are not visible, and the web app takes up the entirety of the available display area."
+                    ],
+                    "type": "string"
+                },
+                "icons": {
+                    "description": "A list of icons representing this website. If absent, a default icon (for create) or the current icon (for update) will be used.",
+                    "items": {
+                        "$ref": "WebAppIcon"
+                    },
+                    "type": "array"
+                },
+                "isPublished": {
+                    "description": "A flag whether the app has been published to the Play store yet.",
+                    "type": "boolean"
+                },
+                "startUrl": {
+                    "description": "The start URL, i.e. the URL that should load when the user opens the application.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "The title of the web app as displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).",
+                    "type": "string"
+                },
+                "versionCode": {
+                    "description": "The current version of the app. Note that the version can automatically increase during the lifetime of the web app, while Google does internal housekeeping to keep the web app up-to-date.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "webAppId": {
+                    "description": "The ID of the application. A string of the form \"app:<package name>\" where the package name always starts with the prefix \"com.google.enterprise.webapp.\" followed by a random id.",
+                    "type": "string"
+                }
             },
-            "pageId": {
-              "required": true,
-              "description": "The ID of the page.",
-              "location": "path",
-              "type": "string"
-            },
-            "clusterId": {
-              "type": "string",
-              "description": "The ID of the cluster.",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "id": "androidenterprise.storelayoutclusters.update",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "httpMethod": "PUT",
-          "request": {
-            "$ref": "StoreCluster"
-          }
+            "type": "object"
         },
-        "insert": {
-          "description": "Inserts a new cluster in a page.",
-          "id": "androidenterprise.storelayoutclusters.insert",
-          "request": {
-            "$ref": "StoreCluster"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ],
-          "response": {
-            "$ref": "StoreCluster"
-          },
-          "parameters": {
-            "enterpriseId": {
-              "description": "The ID of the enterprise.",
-              "required": true,
-              "location": "path",
-              "type": "string"
+        "WebAppIcon": {
+            "description": "Icon for a web app.",
+            "id": "WebAppIcon",
+            "properties": {
+                "imageData": {
+                    "description": "The actual bytes of the image in a base64url encoded string (c.f. RFC4648, section 5 \"Base 64 Encoding with URL and Filename Safe Alphabet\"). - The image type can be png or jpg. - The image should ideally be square. - The image should ideally have a size of 512x512. ",
+                    "type": "string"
+                }
             },
-            "pageId": {
-              "description": "The ID of the page.",
-              "location": "path",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "parameterOrder": [
-            "enterpriseId",
-            "pageId"
-          ],
-          "httpMethod": "POST",
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters"
+            "type": "object"
         },
-        "delete": {
-          "path": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters/{clusterId}",
-          "parameters": {
-            "clusterId": {
-              "description": "The ID of the cluster.",
-              "type": "string",
-              "location": "path",
-              "required": true
-            },
-            "pageId": {
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "The ID of the page."
+        "WebAppsListResponse": {
+            "id": "WebAppsListResponse",
+            "properties": {
+                "webApp": {
+                    "description": "The manifest describing a web app.",
+                    "items": {
+                        "$ref": "WebApp"
+                    },
+                    "type": "array"
+                }
             },
-            "enterpriseId": {
-              "required": true,
-              "description": "The ID of the enterprise.",
-              "location": "path",
-              "type": "string"
-            }
-          },
-          "parameterOrder": [
-            "enterpriseId",
-            "pageId",
-            "clusterId"
-          ],
-          "httpMethod": "DELETE",
-          "description": "Deletes a cluster.",
-          "id": "androidenterprise.storelayoutclusters.delete",
-          "flatPath": "androidenterprise/v1/enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters/{clusterId}",
-          "scopes": [
-            "https://www.googleapis.com/auth/androidenterprise"
-          ]
+            "type": "object"
         }
-      }
-    }
-  },
-  "ownerName": "Google",
-  "parameters": {
-    "alt": {
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "location": "query",
-      "type": "string",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "default": "json",
-      "description": "Data format for response."
-    },
-    "uploadType": {
-      "type": "string",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "location": "query"
-    },
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "location": "query",
-      "type": "string"
-    },
-    "oauth_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user."
-    },
-    "quotaUser": {
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "location": "query",
-      "type": "string"
-    },
-    "key": {
-      "location": "query",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "type": "string"
-    },
-    "fields": {
-      "type": "string",
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response."
-    },
-    "callback": {
-      "type": "string",
-      "location": "query",
-      "description": "JSONP"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "type": "boolean",
-      "default": "true",
-      "description": "Returns response with indentations and line breaks."
     },
-    "$.xgafv": {
-      "location": "query",
-      "description": "V1 error format.",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "type": "string"
-    }
-  },
-  "ownerDomain": "google.com",
-  "version": "v1",
-  "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
-  }
-}
+    "servicePath": "",
+    "title": "Google Play EMM API",
+    "version": "v1"
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/assuredworkloads.v1.json b/googleapiclient/discovery_cache/documents/assuredworkloads.v1.json
index dfb2ce7..50e01a4 100644
--- a/googleapiclient/discovery_cache/documents/assuredworkloads.v1.json
+++ b/googleapiclient/discovery_cache/documents/assuredworkloads.v1.json
@@ -1,828 +1,836 @@
 {
-  "resources": {
-    "organizations": {
-      "resources": {
-        "locations": {
-          "resources": {
-            "operations": {
-              "methods": {
-                "list": {
-                  "parameters": {
-                    "pageSize": {
-                      "format": "int32",
-                      "type": "integer",
-                      "location": "query",
-                      "description": "The standard list page size."
-                    },
-                    "pageToken": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "The standard list page token."
-                    },
-                    "filter": {
-                      "type": "string",
-                      "description": "The standard list filter.",
-                      "location": "query"
-                    },
-                    "name": {
-                      "location": "path",
-                      "pattern": "^organizations/[^/]+/locations/[^/]+$",
-                      "type": "string",
-                      "description": "The name of the operation's parent resource.",
-                      "required": true
-                    }
-                  },
-                  "id": "assuredworkloads.organizations.locations.operations.list",
-                  "httpMethod": "GET",
-                  "flatPath": "v1/organizations/{organizationsId}/locations/{locationsId}/operations",
-                  "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "response": {
-                    "$ref": "GoogleLongrunningListOperationsResponse"
-                  },
-                  "path": "v1/{+name}/operations"
-                },
-                "get": {
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "GoogleLongrunningOperation"
-                  },
-                  "path": "v1/{+name}",
-                  "flatPath": "v1/organizations/{organizationsId}/locations/{locationsId}/operations/{operationsId}",
-                  "id": "assuredworkloads.organizations.locations.operations.get",
-                  "parameters": {
-                    "name": {
-                      "pattern": "^organizations/[^/]+/locations/[^/]+/operations/[^/]+$",
-                      "type": "string",
-                      "location": "path",
-                      "required": true,
-                      "description": "The name of the operation resource."
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ]
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
                 }
-              }
+            }
+        }
+    },
+    "basePath": "",
+    "baseUrl": "https://assuredworkloads.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Assuredworkloads",
+    "description": "",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "assuredworkloads:v1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://assuredworkloads.mtls.googleapis.com/",
+    "name": "assuredworkloads",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        }
+    },
+    "protocol": "rest",
+    "resources": {
+        "organizations": {
+            "resources": {
+                "locations": {
+                    "resources": {
+                        "operations": {
+                            "methods": {
+                                "get": {
+                                    "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
+                                    "flatPath": "v1/organizations/{organizationsId}/locations/{locationsId}/operations/{operationsId}",
+                                    "httpMethod": "GET",
+                                    "id": "assuredworkloads.organizations.locations.operations.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The name of the operation resource.",
+                                            "location": "path",
+                                            "pattern": "^organizations/[^/]+/locations/[^/]+/operations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}",
+                                    "response": {
+                                        "$ref": "GoogleLongrunningOperation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
+                                    "flatPath": "v1/organizations/{organizationsId}/locations/{locationsId}/operations",
+                                    "httpMethod": "GET",
+                                    "id": "assuredworkloads.organizations.locations.operations.list",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "filter": {
+                                            "description": "The standard list filter.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "name": {
+                                            "description": "The name of the operation's parent resource.",
+                                            "location": "path",
+                                            "pattern": "^organizations/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "The standard list page size.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "The standard list page token.",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}/operations",
+                                    "response": {
+                                        "$ref": "GoogleLongrunningListOperationsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
+                            }
+                        },
+                        "workloads": {
+                            "methods": {
+                                "create": {
+                                    "description": "Creates Assured Workload.",
+                                    "flatPath": "v1/organizations/{organizationsId}/locations/{locationsId}/workloads",
+                                    "httpMethod": "POST",
+                                    "id": "assuredworkloads.organizations.locations.workloads.create",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "externalId": {
+                                            "description": "Optional. A identifier associated with the workload and underlying projects which allows for the break down of billing costs for a workload. The value provided for the identifier will add a label to the workload and contained projects with the identifier as the value.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The resource name of the new Workload's parent. Must be of the form `organizations/{org_id}/locations/{location_id}`.",
+                                            "location": "path",
+                                            "pattern": "^organizations/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+parent}/workloads",
+                                    "request": {
+                                        "$ref": "GoogleCloudAssuredworkloadsV1Workload"
+                                    },
+                                    "response": {
+                                        "$ref": "GoogleLongrunningOperation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes the workload. Make sure that workload's direct children are already in a deleted state, otherwise the request will fail with a FAILED_PRECONDITION error.",
+                                    "flatPath": "v1/organizations/{organizationsId}/locations/{locationsId}/workloads/{workloadsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "assuredworkloads.organizations.locations.workloads.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "etag": {
+                                            "description": "Optional. The etag of the workload. If this is provided, it must match the server's etag.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "name": {
+                                            "description": "Required. The `name` field is used to identify the workload. Format: organizations/{org_id}/locations/{location_id}/workloads/{workload_id}",
+                                            "location": "path",
+                                            "pattern": "^organizations/[^/]+/locations/[^/]+/workloads/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}",
+                                    "response": {
+                                        "$ref": "GoogleProtobufEmpty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets Assured Workload associated with a CRM Node",
+                                    "flatPath": "v1/organizations/{organizationsId}/locations/{locationsId}/workloads/{workloadsId}",
+                                    "httpMethod": "GET",
+                                    "id": "assuredworkloads.organizations.locations.workloads.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The resource name of the Workload to fetch. This is the workloads's relative path in the API, formatted as \"organizations/{organization_id}/locations/{location_id}/workloads/{workload_id}\". For example, \"organizations/123/locations/us-east1/workloads/assured-workload-1\".",
+                                            "location": "path",
+                                            "pattern": "^organizations/[^/]+/locations/[^/]+/workloads/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}",
+                                    "response": {
+                                        "$ref": "GoogleCloudAssuredworkloadsV1Workload"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists Assured Workloads under a CRM Node.",
+                                    "flatPath": "v1/organizations/{organizationsId}/locations/{locationsId}/workloads",
+                                    "httpMethod": "GET",
+                                    "id": "assuredworkloads.organizations.locations.workloads.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "filter": {
+                                            "description": "A custom filter for filtering by properties of a workload. At this time, only filtering by labels is supported.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "Page size.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "Page token returned from previous request. Page token contains context from previous request. Page token needs to be passed in the second and following requests.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. Parent Resource to list workloads from. Must be of the form `organizations/{org_id}/locations/{location}`.",
+                                            "location": "path",
+                                            "pattern": "^organizations/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+parent}/workloads",
+                                    "response": {
+                                        "$ref": "GoogleCloudAssuredworkloadsV1ListWorkloadsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "patch": {
+                                    "description": "Updates an existing workload. Currently allows updating of workload display_name and labels. For force updates don't set etag field in the Workload. Only one update operation per workload can be in progress.",
+                                    "flatPath": "v1/organizations/{organizationsId}/locations/{locationsId}/workloads/{workloadsId}",
+                                    "httpMethod": "PATCH",
+                                    "id": "assuredworkloads.organizations.locations.workloads.patch",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Optional. The resource name of the workload. Format: organizations/{organization}/locations/{location}/workloads/{workload} Read-only.",
+                                            "location": "path",
+                                            "pattern": "^organizations/[^/]+/locations/[^/]+/workloads/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "updateMask": {
+                                            "description": "Required. The list of fields to be updated.",
+                                            "format": "google-fieldmask",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}",
+                                    "request": {
+                                        "$ref": "GoogleCloudAssuredworkloadsV1Workload"
+                                    },
+                                    "response": {
+                                        "$ref": "GoogleCloudAssuredworkloadsV1Workload"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    },
+    "revision": "20210113",
+    "rootUrl": "https://assuredworkloads.googleapis.com/",
+    "schemas": {
+        "GoogleCloudAssuredworkloadsV1CreateWorkloadOperationMetadata": {
+            "description": "Operation metadata to give request details of CreateWorkload.",
+            "id": "GoogleCloudAssuredworkloadsV1CreateWorkloadOperationMetadata",
+            "properties": {
+                "complianceRegime": {
+                    "description": "Optional. Compliance controls that should be applied to the resources managed by the workload.",
+                    "enum": [
+                        "COMPLIANCE_REGIME_UNSPECIFIED",
+                        "IL4",
+                        "CJIS",
+                        "FEDRAMP_HIGH",
+                        "FEDRAMP_MODERATE",
+                        "US_REGIONAL_ACCESS"
+                    ],
+                    "enumDescriptions": [
+                        "Unknown compliance regime.",
+                        "Information protection as per DoD IL4 requirements.",
+                        "Criminal Justice Information Services (CJIS) Security policies.",
+                        "FedRAMP High data protection controls",
+                        "FedRAMP Moderate data protection controls",
+                        "Assured Workloads For US Regions data protection controls"
+                    ],
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "Optional. Time when the operation was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "Optional. The display name of the workload.",
+                    "type": "string"
+                },
+                "parent": {
+                    "description": "Optional. The parent of the workload.",
+                    "type": "string"
+                }
             },
-            "workloads": {
-              "methods": {
-                "list": {
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "flatPath": "v1/organizations/{organizationsId}/locations/{locationsId}/workloads",
-                  "httpMethod": "GET",
-                  "description": "Lists Assured Workloads under a CRM Node.",
-                  "response": {
-                    "$ref": "GoogleCloudAssuredworkloadsV1ListWorkloadsResponse"
-                  },
-                  "id": "assuredworkloads.organizations.locations.workloads.list",
-                  "parameters": {
-                    "pageSize": {
-                      "format": "int32",
-                      "type": "integer",
-                      "location": "query",
-                      "description": "Page size."
-                    },
-                    "pageToken": {
-                      "location": "query",
-                      "type": "string",
-                      "description": "Page token returned from previous request. Page token contains context from previous request. Page token needs to be passed in the second and following requests."
-                    },
-                    "parent": {
-                      "type": "string",
-                      "pattern": "^organizations/[^/]+/locations/[^/]+$",
-                      "required": true,
-                      "location": "path",
-                      "description": "Required. Parent Resource to list workloads from. Must be of the form `organizations/{org_id}/locations/{location}`."
-                    },
-                    "filter": {
-                      "location": "query",
-                      "type": "string",
-                      "description": "A custom filter for filtering by properties of a workload. At this time, only filtering by labels is supported."
-                    }
-                  },
-                  "path": "v1/{+parent}/workloads",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ]
+            "type": "object"
+        },
+        "GoogleCloudAssuredworkloadsV1ListWorkloadsResponse": {
+            "description": "Response of ListWorkloads endpoint.",
+            "id": "GoogleCloudAssuredworkloadsV1ListWorkloadsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The next page token. Return empty if reached the last page.",
+                    "type": "string"
                 },
-                "patch": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "path": "v1/{+name}",
-                  "description": "Updates an existing workload. Currently allows updating of workload display_name and labels. For force updates don't set etag field in the Workload. Only one update operation per workload can be in progress.",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "id": "assuredworkloads.organizations.locations.workloads.patch",
-                  "response": {
-                    "$ref": "GoogleCloudAssuredworkloadsV1Workload"
-                  },
-                  "request": {
-                    "$ref": "GoogleCloudAssuredworkloadsV1Workload"
-                  },
-                  "httpMethod": "PATCH",
-                  "flatPath": "v1/organizations/{organizationsId}/locations/{locationsId}/workloads/{workloadsId}",
-                  "parameters": {
-                    "name": {
-                      "required": true,
-                      "location": "path",
-                      "pattern": "^organizations/[^/]+/locations/[^/]+/workloads/[^/]+$",
-                      "type": "string",
-                      "description": "Optional. The resource name of the workload. Format: organizations/{organization}/locations/{location}/workloads/{workload} Read-only."
+                "workloads": {
+                    "description": "List of Workloads under a given parent.",
+                    "items": {
+                        "$ref": "GoogleCloudAssuredworkloadsV1Workload"
                     },
-                    "updateMask": {
-                      "description": "Required. The list of fields to be updated.",
-                      "location": "query",
-                      "type": "string",
-                      "format": "google-fieldmask"
-                    }
-                  }
-                },
-                "delete": {
-                  "response": {
-                    "$ref": "GoogleProtobufEmpty"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "path": "v1/{+name}",
-                  "id": "assuredworkloads.organizations.locations.workloads.delete",
-                  "flatPath": "v1/organizations/{organizationsId}/locations/{locationsId}/workloads/{workloadsId}",
-                  "parameters": {
-                    "etag": {
-                      "location": "query",
-                      "type": "string",
-                      "description": "Optional. The etag of the workload. If this is provided, it must match the server's etag."
-                    },
-                    "name": {
-                      "type": "string",
-                      "required": true,
-                      "description": "Required. The `name` field is used to identify the workload. Format: organizations/{org_id}/locations/{location_id}/workloads/{workload_id}",
-                      "pattern": "^organizations/[^/]+/locations/[^/]+/workloads/[^/]+$",
-                      "location": "path"
-                    }
-                  },
-                  "httpMethod": "DELETE",
-                  "description": "Deletes the workload. Make sure that workload's direct children are already in a deleted state, otherwise the request will fail with a FAILED_PRECONDITION error.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ]
-                },
-                "create": {
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "request": {
-                    "$ref": "GoogleCloudAssuredworkloadsV1Workload"
-                  },
-                  "response": {
-                    "$ref": "GoogleLongrunningOperation"
-                  },
-                  "parameters": {
-                    "parent": {
-                      "description": "Required. The resource name of the new Workload's parent. Must be of the form `organizations/{org_id}/locations/{location_id}`.",
-                      "location": "path",
-                      "required": true,
-                      "pattern": "^organizations/[^/]+/locations/[^/]+$",
-                      "type": "string"
-                    },
-                    "externalId": {
-                      "description": "Optional. A identifier associated with the workload and underlying projects which allows for the break down of billing costs for a workload. The value provided for the identifier will add a label to the workload and contained projects with the identifier as the value.",
-                      "location": "query",
-                      "type": "string"
-                    }
-                  },
-                  "httpMethod": "POST",
-                  "id": "assuredworkloads.organizations.locations.workloads.create",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1/organizations/{organizationsId}/locations/{locationsId}/workloads",
-                  "path": "v1/{+parent}/workloads",
-                  "description": "Creates Assured Workload."
-                },
-                "get": {
-                  "id": "assuredworkloads.organizations.locations.workloads.get",
-                  "flatPath": "v1/organizations/{organizationsId}/locations/{locationsId}/workloads/{workloadsId}",
-                  "description": "Gets Assured Workload associated with a CRM Node",
-                  "httpMethod": "GET",
-                  "parameters": {
-                    "name": {
-                      "description": "Required. The resource name of the Workload to fetch. This is the workloads's relative path in the API, formatted as \"organizations/{organization_id}/locations/{location_id}/workloads/{workload_id}\". For example, \"organizations/123/locations/us-east1/workloads/assured-workload-1\".",
-                      "location": "path",
-                      "pattern": "^organizations/[^/]+/locations/[^/]+/workloads/[^/]+$",
-                      "required": true,
-                      "type": "string"
-                    }
-                  },
-                  "response": {
-                    "$ref": "GoogleCloudAssuredworkloadsV1Workload"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "path": "v1/{+name}",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ]
+                    "type": "array"
                 }
-              }
-            }
-          }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssuredworkloadsV1Workload": {
+            "description": "An Workload object for managing highly regulated workloads of cloud customers.",
+            "id": "GoogleCloudAssuredworkloadsV1Workload",
+            "properties": {
+                "billingAccount": {
+                    "description": "Required. Input only. The billing account used for the resources which are direct children of workload. This billing account is initially associated with the resources created as part of Workload creation. After the initial creation of these resources, the customer can change the assigned billing account. The resource name has the form `billingAccounts/{billing_account_id}`. For example, `billingAccounts/012345-567890-ABCDEF`.",
+                    "type": "string"
+                },
+                "complianceRegime": {
+                    "description": "Required. Immutable. Compliance Regime associated with this workload.",
+                    "enum": [
+                        "COMPLIANCE_REGIME_UNSPECIFIED",
+                        "IL4",
+                        "CJIS",
+                        "FEDRAMP_HIGH",
+                        "FEDRAMP_MODERATE",
+                        "US_REGIONAL_ACCESS"
+                    ],
+                    "enumDescriptions": [
+                        "Unknown compliance regime.",
+                        "Information protection as per DoD IL4 requirements.",
+                        "Criminal Justice Information Services (CJIS) Security policies.",
+                        "FedRAMP High data protection controls",
+                        "FedRAMP Moderate data protection controls",
+                        "Assured Workloads For US Regions data protection controls"
+                    ],
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "Output only. Immutable. The Workload creation timestamp.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "Required. The user-assigned display name of the Workload. When present it must be between 4 to 30 characters. Allowed characters are: lowercase and uppercase letters, numbers, hyphen, and spaces. Example: My Workload",
+                    "type": "string"
+                },
+                "etag": {
+                    "description": "Optional. ETag of the workload, it is calculated on the basis of the Workload contents. It will be used in Update & Delete operations.",
+                    "type": "string"
+                },
+                "kmsSettings": {
+                    "$ref": "GoogleCloudAssuredworkloadsV1WorkloadKMSSettings",
+                    "description": "Input only. Settings used to create a CMEK crypto key. When set a project with a KMS CMEK key is provisioned. This field is mandatory for a subset of Compliance Regimes."
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Optional. Labels applied to the workload.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "Optional. The resource name of the workload. Format: organizations/{organization}/locations/{location}/workloads/{workload} Read-only.",
+                    "type": "string"
+                },
+                "provisionedResourcesParent": {
+                    "description": "Input only. The parent resource for the resources managed by this Assured Workload. May be either an organization or a folder. Must be the same or a child of the Workload parent. If not specified all resources are created under the Workload parent. Formats: folders/{folder_id} organizations/{organization_id}",
+                    "type": "string"
+                },
+                "resources": {
+                    "description": "Output only. The resources associated with this workload. These resources will be created when creating the workload. If any of the projects already exist, the workload creation will fail. Always read only.",
+                    "items": {
+                        "$ref": "GoogleCloudAssuredworkloadsV1WorkloadResourceInfo"
+                    },
+                    "readOnly": true,
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssuredworkloadsV1WorkloadKMSSettings": {
+            "description": "Settings specific to the Key Management Service.",
+            "id": "GoogleCloudAssuredworkloadsV1WorkloadKMSSettings",
+            "properties": {
+                "nextRotationTime": {
+                    "description": "Required. Input only. Immutable. The time at which the Key Management Service will automatically create a new version of the crypto key and mark it as the primary.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "rotationPeriod": {
+                    "description": "Required. Input only. Immutable. [next_rotation_time] will be advanced by this period when the Key Management Service automatically rotates a key. Must be at least 24 hours and at most 876,000 hours.",
+                    "format": "google-duration",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssuredworkloadsV1WorkloadResourceInfo": {
+            "description": "Represent the resources that are children of this Workload.",
+            "id": "GoogleCloudAssuredworkloadsV1WorkloadResourceInfo",
+            "properties": {
+                "resourceId": {
+                    "description": "Resource identifier. For a project this represents project_number.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "resourceType": {
+                    "description": "Indicates the type of resource.",
+                    "enum": [
+                        "RESOURCE_TYPE_UNSPECIFIED",
+                        "CONSUMER_PROJECT",
+                        "ENCRYPTION_KEYS_PROJECT"
+                    ],
+                    "enumDescriptions": [
+                        "Unknown resource type.",
+                        "Consumer project.",
+                        "Consumer project containing encryption keys."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssuredworkloadsV1beta1CreateWorkloadOperationMetadata": {
+            "description": "Operation metadata to give request details of CreateWorkload.",
+            "id": "GoogleCloudAssuredworkloadsV1beta1CreateWorkloadOperationMetadata",
+            "properties": {
+                "complianceRegime": {
+                    "description": "Optional. Compliance controls that should be applied to the resources managed by the workload.",
+                    "enum": [
+                        "COMPLIANCE_REGIME_UNSPECIFIED",
+                        "IL4",
+                        "CJIS",
+                        "FEDRAMP_HIGH",
+                        "FEDRAMP_MODERATE",
+                        "US_REGIONAL_ACCESS"
+                    ],
+                    "enumDescriptions": [
+                        "Unknown compliance regime.",
+                        "Information protection as per DoD IL4 requirements.",
+                        "Criminal Justice Information Services (CJIS) Security policies.",
+                        "FedRAMP High data protection controls",
+                        "FedRAMP Moderate data protection controls",
+                        "Assured Workloads For US Regions data protection controls"
+                    ],
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "Optional. Time when the operation was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "Optional. The display name of the workload.",
+                    "type": "string"
+                },
+                "parent": {
+                    "description": "Optional. The parent of the workload.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssuredworkloadsV1beta1Workload": {
+            "description": "An Workload object for managing highly regulated workloads of cloud customers.",
+            "id": "GoogleCloudAssuredworkloadsV1beta1Workload",
+            "properties": {
+                "billingAccount": {
+                    "description": "Required. Input only. The billing account used for the resources which are direct children of workload. This billing account is initially associated with the resources created as part of Workload creation. After the initial creation of these resources, the customer can change the assigned billing account. The resource name has the form `billingAccounts/{billing_account_id}`. For example, `billingAccounts/012345-567890-ABCDEF`.",
+                    "type": "string"
+                },
+                "cjisSettings": {
+                    "$ref": "GoogleCloudAssuredworkloadsV1beta1WorkloadCJISSettings",
+                    "description": "Required. Input only. Immutable. Settings specific to resources needed for CJIS."
+                },
+                "complianceRegime": {
+                    "description": "Required. Immutable. Compliance Regime associated with this workload.",
+                    "enum": [
+                        "COMPLIANCE_REGIME_UNSPECIFIED",
+                        "IL4",
+                        "CJIS",
+                        "FEDRAMP_HIGH",
+                        "FEDRAMP_MODERATE",
+                        "US_REGIONAL_ACCESS"
+                    ],
+                    "enumDescriptions": [
+                        "Unknown compliance regime.",
+                        "Information protection as per DoD IL4 requirements.",
+                        "Criminal Justice Information Services (CJIS) Security policies.",
+                        "FedRAMP High data protection controls",
+                        "FedRAMP Moderate data protection controls",
+                        "Assured Workloads For US Regions data protection controls"
+                    ],
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "Output only. Immutable. The Workload creation timestamp.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "Required. The user-assigned display name of the Workload. When present it must be between 4 to 30 characters. Allowed characters are: lowercase and uppercase letters, numbers, hyphen, and spaces. Example: My Workload",
+                    "type": "string"
+                },
+                "etag": {
+                    "description": "Optional. ETag of the workload, it is calculated on the basis of the Workload contents. It will be used in Update & Delete operations.",
+                    "type": "string"
+                },
+                "fedrampHighSettings": {
+                    "$ref": "GoogleCloudAssuredworkloadsV1beta1WorkloadFedrampHighSettings",
+                    "description": "Required. Input only. Immutable. Settings specific to resources needed for FedRAMP High."
+                },
+                "fedrampModerateSettings": {
+                    "$ref": "GoogleCloudAssuredworkloadsV1beta1WorkloadFedrampModerateSettings",
+                    "description": "Required. Input only. Immutable. Settings specific to resources needed for FedRAMP Moderate."
+                },
+                "il4Settings": {
+                    "$ref": "GoogleCloudAssuredworkloadsV1beta1WorkloadIL4Settings",
+                    "description": "Required. Input only. Immutable. Settings specific to resources needed for IL4."
+                },
+                "kmsSettings": {
+                    "$ref": "GoogleCloudAssuredworkloadsV1beta1WorkloadKMSSettings",
+                    "description": "Input only. Settings used to create a CMEK crypto key. When set a project with a KMS CMEK key is provisioned. This field is mandatory for a subset of Compliance Regimes."
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Optional. Labels applied to the workload.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "Optional. The resource name of the workload. Format: organizations/{organization}/locations/{location}/workloads/{workload} Read-only.",
+                    "type": "string"
+                },
+                "provisionedResourcesParent": {
+                    "description": "Input only. The parent resource for the resources managed by this Assured Workload. May be either an organization or a folder. Must be the same or a child of the Workload parent. If not specified all resources are created under the Workload parent. Formats: folders/{folder_id} organizations/{organization_id}",
+                    "type": "string"
+                },
+                "resources": {
+                    "description": "Output only. The resources associated with this workload. These resources will be created when creating the workload. If any of the projects already exist, the workload creation will fail. Always read only.",
+                    "items": {
+                        "$ref": "GoogleCloudAssuredworkloadsV1beta1WorkloadResourceInfo"
+                    },
+                    "readOnly": true,
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssuredworkloadsV1beta1WorkloadCJISSettings": {
+            "description": "Settings specific to resources needed for CJIS.",
+            "id": "GoogleCloudAssuredworkloadsV1beta1WorkloadCJISSettings",
+            "properties": {
+                "kmsSettings": {
+                    "$ref": "GoogleCloudAssuredworkloadsV1beta1WorkloadKMSSettings",
+                    "description": "Required. Input only. Immutable. Settings used to create a CMEK crypto key."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssuredworkloadsV1beta1WorkloadFedrampHighSettings": {
+            "description": "Settings specific to resources needed for FedRAMP High.",
+            "id": "GoogleCloudAssuredworkloadsV1beta1WorkloadFedrampHighSettings",
+            "properties": {
+                "kmsSettings": {
+                    "$ref": "GoogleCloudAssuredworkloadsV1beta1WorkloadKMSSettings",
+                    "description": "Required. Input only. Immutable. Settings used to create a CMEK crypto key."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssuredworkloadsV1beta1WorkloadFedrampModerateSettings": {
+            "description": "Settings specific to resources needed for FedRAMP Moderate.",
+            "id": "GoogleCloudAssuredworkloadsV1beta1WorkloadFedrampModerateSettings",
+            "properties": {
+                "kmsSettings": {
+                    "$ref": "GoogleCloudAssuredworkloadsV1beta1WorkloadKMSSettings",
+                    "description": "Required. Input only. Immutable. Settings used to create a CMEK crypto key."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssuredworkloadsV1beta1WorkloadIL4Settings": {
+            "description": "Settings specific to resources needed for IL4.",
+            "id": "GoogleCloudAssuredworkloadsV1beta1WorkloadIL4Settings",
+            "properties": {
+                "kmsSettings": {
+                    "$ref": "GoogleCloudAssuredworkloadsV1beta1WorkloadKMSSettings",
+                    "description": "Required. Input only. Immutable. Settings used to create a CMEK crypto key."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssuredworkloadsV1beta1WorkloadKMSSettings": {
+            "description": "Settings specific to the Key Management Service.",
+            "id": "GoogleCloudAssuredworkloadsV1beta1WorkloadKMSSettings",
+            "properties": {
+                "nextRotationTime": {
+                    "description": "Required. Input only. Immutable. The time at which the Key Management Service will automatically create a new version of the crypto key and mark it as the primary.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "rotationPeriod": {
+                    "description": "Required. Input only. Immutable. [next_rotation_time] will be advanced by this period when the Key Management Service automatically rotates a key. Must be at least 24 hours and at most 876,000 hours.",
+                    "format": "google-duration",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssuredworkloadsV1beta1WorkloadResourceInfo": {
+            "description": "Represent the resources that are children of this Workload.",
+            "id": "GoogleCloudAssuredworkloadsV1beta1WorkloadResourceInfo",
+            "properties": {
+                "resourceId": {
+                    "description": "Resource identifier. For a project this represents project_number.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "resourceType": {
+                    "description": "Indicates the type of resource.",
+                    "enum": [
+                        "RESOURCE_TYPE_UNSPECIFIED",
+                        "CONSUMER_PROJECT",
+                        "ENCRYPTION_KEYS_PROJECT"
+                    ],
+                    "enumDescriptions": [
+                        "Unknown resource type.",
+                        "Consumer project.",
+                        "Consumer project containing encryption keys."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleLongrunningListOperationsResponse": {
+            "description": "The response message for Operations.ListOperations.",
+            "id": "GoogleLongrunningListOperationsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                },
+                "operations": {
+                    "description": "A list of operations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "GoogleLongrunningOperation"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleLongrunningOperation": {
+            "description": "This resource represents a long-running operation that is the result of a network API call.",
+            "id": "GoogleLongrunningOperation",
+            "properties": {
+                "done": {
+                    "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
+                    "type": "boolean"
+                },
+                "error": {
+                    "$ref": "GoogleRpcStatus",
+                    "description": "The error result of the operation in case of failure or cancellation."
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
+                    "type": "string"
+                },
+                "response": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleProtobufEmpty": {
+            "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
+            "id": "GoogleProtobufEmpty",
+            "properties": {},
+            "type": "object"
+        },
+        "GoogleRpcStatus": {
+            "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
+            "id": "GoogleRpcStatus",
+            "properties": {
+                "code": {
+                    "description": "The status code, which should be an enum value of google.rpc.Code.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         }
-      }
-    }
-  },
-  "batchPath": "batch",
-  "kind": "discovery#restDescription",
-  "rootUrl": "https://assuredworkloads.googleapis.com/",
-  "discoveryVersion": "v1",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "servicePath": "",
-  "basePath": "",
-  "fullyEncodeReservedExpansion": true,
-  "id": "assuredworkloads:v1",
-  "ownerName": "Google",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "revision": "20201112",
-  "description": "",
-  "baseUrl": "https://assuredworkloads.googleapis.com/",
-  "version_module": true,
-  "schemas": {
-    "GoogleCloudAssuredworkloadsV1beta1WorkloadFedrampModerateSettings": {
-      "type": "object",
-      "description": "Settings specific to resources needed for FedRAMP Moderate.",
-      "properties": {
-        "kmsSettings": {
-          "description": "Required. Input only. Immutable. Settings used to create a CMEK crypto key.",
-          "$ref": "GoogleCloudAssuredworkloadsV1beta1WorkloadKMSSettings"
-        }
-      },
-      "id": "GoogleCloudAssuredworkloadsV1beta1WorkloadFedrampModerateSettings"
     },
-    "GoogleCloudAssuredworkloadsV1beta1WorkloadKMSSettings": {
-      "type": "object",
-      "description": "Settings specific to the Key Management Service.",
-      "id": "GoogleCloudAssuredworkloadsV1beta1WorkloadKMSSettings",
-      "properties": {
-        "rotationPeriod": {
-          "format": "google-duration",
-          "type": "string",
-          "description": "Required. Input only. Immutable. [next_rotation_time] will be advanced by this period when the Key Management Service automatically rotates a key. Must be at least 24 hours and at most 876,000 hours."
-        },
-        "nextRotationTime": {
-          "type": "string",
-          "description": "Required. Input only. Immutable. The time at which the Key Management Service will automatically create a new version of the crypto key and mark it as the primary.",
-          "format": "google-datetime"
-        }
-      }
-    },
-    "GoogleProtobufEmpty": {
-      "type": "object",
-      "properties": {},
-      "id": "GoogleProtobufEmpty",
-      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`."
-    },
-    "GoogleCloudAssuredworkloadsV1beta1WorkloadCJISSettings": {
-      "id": "GoogleCloudAssuredworkloadsV1beta1WorkloadCJISSettings",
-      "properties": {
-        "kmsSettings": {
-          "$ref": "GoogleCloudAssuredworkloadsV1beta1WorkloadKMSSettings",
-          "description": "Required. Input only. Immutable. Settings used to create a CMEK crypto key."
-        }
-      },
-      "type": "object",
-      "description": "Settings specific to resources needed for CJIS."
-    },
-    "GoogleCloudAssuredworkloadsV1Workload": {
-      "type": "object",
-      "description": "An Workload object for managing highly regulated workloads of cloud customers.",
-      "properties": {
-        "createTime": {
-          "description": "Output only. Immutable. The Workload creation timestamp.",
-          "format": "google-datetime",
-          "type": "string",
-          "readOnly": true
-        },
-        "labels": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional. Labels applied to the workload."
-        },
-        "billingAccount": {
-          "type": "string",
-          "description": "Required. Input only. The billing account used for the resources which are direct children of workload. This billing account is initially associated with the resources created as part of Workload creation. After the initial creation of these resources, the customer can change the assigned billing account. The resource name has the form `billingAccounts/{billing_account_id}`. For example, `billingAccounts/012345-567890-ABCDEF`."
-        },
-        "displayName": {
-          "description": "Required. The user-assigned display name of the Workload. When present it must be between 4 to 30 characters. Allowed characters are: lowercase and uppercase letters, numbers, hyphen, and spaces. Example: My Workload",
-          "type": "string"
-        },
-        "etag": {
-          "description": "Optional. ETag of the workload, it is calculated on the basis of the Workload contents. It will be used in Update & Delete operations.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "Optional. The resource name of the workload. Format: organizations/{organization}/locations/{location}/workloads/{workload} Read-only."
-        },
-        "kmsSettings": {
-          "description": "Input only. Settings used to create a CMEK crypto key. When set a project with a KMS CMEK key is provisioned. This field is mandatory for a subset of Compliance Regimes.",
-          "$ref": "GoogleCloudAssuredworkloadsV1WorkloadKMSSettings"
-        },
-        "complianceRegime": {
-          "enumDescriptions": [
-            "Unknown compliance regime.",
-            "Information protection as per DoD IL4 requirements.",
-            "Criminal Justice Information Services (CJIS) Security policies.",
-            "FedRAMP High data protection controls",
-            "FedRAMP Moderate data protection controls"
-          ],
-          "enum": [
-            "COMPLIANCE_REGIME_UNSPECIFIED",
-            "IL4",
-            "CJIS",
-            "FEDRAMP_HIGH",
-            "FEDRAMP_MODERATE"
-          ],
-          "description": "Required. Immutable. Compliance Regime associated with this workload.",
-          "type": "string"
-        },
-        "provisionedResourcesParent": {
-          "description": "Input only. The parent resource for the resources managed by this Assured Workload. May be either an organization or a folder. Must be the same or a child of the Workload parent. If not specified all resources are created under the Workload parent. Formats: folders/{folder_id} organizations/{organization_id}",
-          "type": "string"
-        },
-        "resources": {
-          "description": "Output only. The resources associated with this workload. These resources will be created when creating the workload. If any of the projects already exist, the workload creation will fail. Always read only.",
-          "readOnly": true,
-          "items": {
-            "$ref": "GoogleCloudAssuredworkloadsV1WorkloadResourceInfo"
-          },
-          "type": "array"
-        }
-      },
-      "id": "GoogleCloudAssuredworkloadsV1Workload"
-    },
-    "GoogleCloudAssuredworkloadsV1beta1WorkloadResourceInfo": {
-      "type": "object",
-      "description": "Represent the resources that are children of this Workload.",
-      "id": "GoogleCloudAssuredworkloadsV1beta1WorkloadResourceInfo",
-      "properties": {
-        "resourceType": {
-          "enum": [
-            "RESOURCE_TYPE_UNSPECIFIED",
-            "CONSUMER_PROJECT",
-            "ENCRYPTION_KEYS_PROJECT"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "Unknown resource type.",
-            "Consumer project.",
-            "Consumer project containing encryption keys."
-          ],
-          "description": "Indicates the type of resource."
-        },
-        "resourceId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Resource identifier. For a project this represents project_number."
-        }
-      }
-    },
-    "GoogleCloudAssuredworkloadsV1WorkloadResourceInfo": {
-      "description": "Represent the resources that are children of this Workload.",
-      "type": "object",
-      "properties": {
-        "resourceType": {
-          "type": "string",
-          "enum": [
-            "RESOURCE_TYPE_UNSPECIFIED",
-            "CONSUMER_PROJECT",
-            "ENCRYPTION_KEYS_PROJECT"
-          ],
-          "description": "Indicates the type of resource.",
-          "enumDescriptions": [
-            "Unknown resource type.",
-            "Consumer project.",
-            "Consumer project containing encryption keys."
-          ]
-        },
-        "resourceId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Resource identifier. For a project this represents project_number."
-        }
-      },
-      "id": "GoogleCloudAssuredworkloadsV1WorkloadResourceInfo"
-    },
-    "GoogleCloudAssuredworkloadsV1beta1WorkloadFedrampHighSettings": {
-      "id": "GoogleCloudAssuredworkloadsV1beta1WorkloadFedrampHighSettings",
-      "description": "Settings specific to resources needed for FedRAMP High.",
-      "type": "object",
-      "properties": {
-        "kmsSettings": {
-          "description": "Required. Input only. Immutable. Settings used to create a CMEK crypto key.",
-          "$ref": "GoogleCloudAssuredworkloadsV1beta1WorkloadKMSSettings"
-        }
-      }
-    },
-    "GoogleCloudAssuredworkloadsV1WorkloadKMSSettings": {
-      "description": "Settings specific to the Key Management Service.",
-      "type": "object",
-      "id": "GoogleCloudAssuredworkloadsV1WorkloadKMSSettings",
-      "properties": {
-        "rotationPeriod": {
-          "format": "google-duration",
-          "type": "string",
-          "description": "Required. Input only. Immutable. [next_rotation_time] will be advanced by this period when the Key Management Service automatically rotates a key. Must be at least 24 hours and at most 876,000 hours."
-        },
-        "nextRotationTime": {
-          "format": "google-datetime",
-          "description": "Required. Input only. Immutable. The time at which the Key Management Service will automatically create a new version of the crypto key and mark it as the primary.",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleCloudAssuredworkloadsV1beta1CreateWorkloadOperationMetadata": {
-      "id": "GoogleCloudAssuredworkloadsV1beta1CreateWorkloadOperationMetadata",
-      "description": "Operation metadata to give request details of CreateWorkload.",
-      "properties": {
-        "displayName": {
-          "type": "string",
-          "description": "Optional. The display name of the workload."
-        },
-        "createTime": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "Optional. Time when the operation was created."
-        },
-        "parent": {
-          "type": "string",
-          "description": "Optional. The parent of the workload."
-        },
-        "complianceRegime": {
-          "enumDescriptions": [
-            "Unknown compliance regime.",
-            "Information protection as per DoD IL4 requirements.",
-            "Criminal Justice Information Services (CJIS) Security policies.",
-            "FedRAMP High data protection controls",
-            "FedRAMP Moderate data protection controls"
-          ],
-          "description": "Optional. Compliance controls that should be applied to the resources managed by the workload.",
-          "type": "string",
-          "enum": [
-            "COMPLIANCE_REGIME_UNSPECIFIED",
-            "IL4",
-            "CJIS",
-            "FEDRAMP_HIGH",
-            "FEDRAMP_MODERATE"
-          ]
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudAssuredworkloadsV1CreateWorkloadOperationMetadata": {
-      "properties": {
-        "displayName": {
-          "description": "Optional. The display name of the workload.",
-          "type": "string"
-        },
-        "parent": {
-          "description": "Optional. The parent of the workload.",
-          "type": "string"
-        },
-        "complianceRegime": {
-          "enumDescriptions": [
-            "Unknown compliance regime.",
-            "Information protection as per DoD IL4 requirements.",
-            "Criminal Justice Information Services (CJIS) Security policies.",
-            "FedRAMP High data protection controls",
-            "FedRAMP Moderate data protection controls"
-          ],
-          "enum": [
-            "COMPLIANCE_REGIME_UNSPECIFIED",
-            "IL4",
-            "CJIS",
-            "FEDRAMP_HIGH",
-            "FEDRAMP_MODERATE"
-          ],
-          "type": "string",
-          "description": "Optional. Compliance controls that should be applied to the resources managed by the workload."
-        },
-        "createTime": {
-          "format": "google-datetime",
-          "description": "Optional. Time when the operation was created.",
-          "type": "string"
-        }
-      },
-      "id": "GoogleCloudAssuredworkloadsV1CreateWorkloadOperationMetadata",
-      "description": "Operation metadata to give request details of CreateWorkload.",
-      "type": "object"
-    },
-    "GoogleLongrunningListOperationsResponse": {
-      "properties": {
-        "nextPageToken": {
-          "description": "The standard List next-page token.",
-          "type": "string"
-        },
-        "operations": {
-          "type": "array",
-          "description": "A list of operations that matches the specified filter in the request.",
-          "items": {
-            "$ref": "GoogleLongrunningOperation"
-          }
-        }
-      },
-      "id": "GoogleLongrunningListOperationsResponse",
-      "type": "object",
-      "description": "The response message for Operations.ListOperations."
-    },
-    "GoogleRpcStatus": {
-      "properties": {
-        "message": {
-          "type": "string",
-          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client."
-        },
-        "details": {
-          "items": {
-            "type": "object",
-            "additionalProperties": {
-              "description": "Properties of the object. Contains field @type with type URL.",
-              "type": "any"
-            }
-          },
-          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
-          "type": "array"
-        },
-        "code": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The status code, which should be an enum value of google.rpc.Code."
-        }
-      },
-      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
-      "id": "GoogleRpcStatus",
-      "type": "object"
-    },
-    "GoogleCloudAssuredworkloadsV1ListWorkloadsResponse": {
-      "id": "GoogleCloudAssuredworkloadsV1ListWorkloadsResponse",
-      "description": "Response of ListWorkloads endpoint.",
-      "properties": {
-        "nextPageToken": {
-          "description": "The next page token. Return empty if reached the last page.",
-          "type": "string"
-        },
-        "workloads": {
-          "type": "array",
-          "description": "List of Workloads under a given parent.",
-          "items": {
-            "$ref": "GoogleCloudAssuredworkloadsV1Workload"
-          }
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudAssuredworkloadsV1beta1WorkloadIL4Settings": {
-      "type": "object",
-      "description": "Settings specific to resources needed for IL4.",
-      "properties": {
-        "kmsSettings": {
-          "$ref": "GoogleCloudAssuredworkloadsV1beta1WorkloadKMSSettings",
-          "description": "Required. Input only. Immutable. Settings used to create a CMEK crypto key."
-        }
-      },
-      "id": "GoogleCloudAssuredworkloadsV1beta1WorkloadIL4Settings"
-    },
-    "GoogleCloudAssuredworkloadsV1beta1Workload": {
-      "type": "object",
-      "properties": {
-        "complianceRegime": {
-          "type": "string",
-          "description": "Required. Immutable. Compliance Regime associated with this workload.",
-          "enum": [
-            "COMPLIANCE_REGIME_UNSPECIFIED",
-            "IL4",
-            "CJIS",
-            "FEDRAMP_HIGH",
-            "FEDRAMP_MODERATE"
-          ],
-          "enumDescriptions": [
-            "Unknown compliance regime.",
-            "Information protection as per DoD IL4 requirements.",
-            "Criminal Justice Information Services (CJIS) Security policies.",
-            "FedRAMP High data protection controls",
-            "FedRAMP Moderate data protection controls"
-          ]
-        },
-        "billingAccount": {
-          "description": "Required. Input only. The billing account used for the resources which are direct children of workload. This billing account is initially associated with the resources created as part of Workload creation. After the initial creation of these resources, the customer can change the assigned billing account. The resource name has the form `billingAccounts/{billing_account_id}`. For example, `billingAccounts/012345-567890-ABCDEF`.",
-          "type": "string"
-        },
-        "provisionedResourcesParent": {
-          "type": "string",
-          "description": "Input only. The parent resource for the resources managed by this Assured Workload. May be either an organization or a folder. Must be the same or a child of the Workload parent. If not specified all resources are created under the Workload parent. Formats: folders/{folder_id} organizations/{organization_id}"
-        },
-        "resources": {
-          "items": {
-            "$ref": "GoogleCloudAssuredworkloadsV1beta1WorkloadResourceInfo"
-          },
-          "type": "array",
-          "description": "Output only. The resources associated with this workload. These resources will be created when creating the workload. If any of the projects already exist, the workload creation will fail. Always read only.",
-          "readOnly": true
-        },
-        "kmsSettings": {
-          "description": "Input only. Settings used to create a CMEK crypto key. When set a project with a KMS CMEK key is provisioned. This field is mandatory for a subset of Compliance Regimes.",
-          "$ref": "GoogleCloudAssuredworkloadsV1beta1WorkloadKMSSettings"
-        },
-        "il4Settings": {
-          "$ref": "GoogleCloudAssuredworkloadsV1beta1WorkloadIL4Settings",
-          "description": "Required. Input only. Immutable. Settings specific to resources needed for IL4."
-        },
-        "createTime": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "Output only. Immutable. The Workload creation timestamp.",
-          "readOnly": true
-        },
-        "displayName": {
-          "description": "Required. The user-assigned display name of the Workload. When present it must be between 4 to 30 characters. Allowed characters are: lowercase and uppercase letters, numbers, hyphen, and spaces. Example: My Workload",
-          "type": "string"
-        },
-        "etag": {
-          "description": "Optional. ETag of the workload, it is calculated on the basis of the Workload contents. It will be used in Update & Delete operations.",
-          "type": "string"
-        },
-        "fedrampHighSettings": {
-          "$ref": "GoogleCloudAssuredworkloadsV1beta1WorkloadFedrampHighSettings",
-          "description": "Required. Input only. Immutable. Settings specific to resources needed for FedRAMP High."
-        },
-        "fedrampModerateSettings": {
-          "description": "Required. Input only. Immutable. Settings specific to resources needed for FedRAMP Moderate.",
-          "$ref": "GoogleCloudAssuredworkloadsV1beta1WorkloadFedrampModerateSettings"
-        },
-        "cjisSettings": {
-          "description": "Required. Input only. Immutable. Settings specific to resources needed for CJIS.",
-          "$ref": "GoogleCloudAssuredworkloadsV1beta1WorkloadCJISSettings"
-        },
-        "name": {
-          "type": "string",
-          "description": "Optional. The resource name of the workload. Format: organizations/{organization}/locations/{location}/workloads/{workload} Read-only."
-        },
-        "labels": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional. Labels applied to the workload."
-        }
-      },
-      "description": "An Workload object for managing highly regulated workloads of cloud customers.",
-      "id": "GoogleCloudAssuredworkloadsV1beta1Workload"
-    },
-    "GoogleLongrunningOperation": {
-      "properties": {
-        "done": {
-          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
-          "type": "boolean"
-        },
-        "name": {
-          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
-          "type": "string"
-        },
-        "response": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`."
-        },
-        "error": {
-          "$ref": "GoogleRpcStatus",
-          "description": "The error result of the operation in case of failure or cancellation."
-        },
-        "metadata": {
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
-          "type": "object"
-        }
-      },
-      "type": "object",
-      "id": "GoogleLongrunningOperation",
-      "description": "This resource represents a long-running operation that is the result of a network API call."
-    }
-  },
-  "mtlsRootUrl": "https://assuredworkloads.mtls.googleapis.com/",
-  "canonicalName": "Assuredworkloads",
-  "parameters": {
-    "key": {
-      "location": "query",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "type": "string",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format.",
-      "location": "query"
-    },
-    "quotaUser": {
-      "type": "string",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "location": "query"
-    },
-    "uploadType": {
-      "location": "query",
-      "type": "string",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
-    },
-    "alt": {
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "description": "Data format for response.",
-      "default": "json",
-      "type": "string",
-      "location": "query",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ]
-    },
-    "callback": {
-      "description": "JSONP",
-      "location": "query",
-      "type": "string"
-    },
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "type": "boolean",
-      "default": "true",
-      "description": "Returns response with indentations and line breaks.",
-      "location": "query"
-    },
-    "fields": {
-      "location": "query",
-      "type": "string",
-      "description": "Selector specifying which fields to include in a partial response."
-    },
-    "oauth_token": {
-      "location": "query",
-      "type": "string",
-      "description": "OAuth 2.0 token for the current user."
-    }
-  },
-  "ownerDomain": "google.com",
-  "title": "Assured Workloads API",
-  "protocol": "rest",
-  "name": "assuredworkloads",
-  "version": "v1",
-  "documentationLink": "https://cloud.google.com"
-}
+    "servicePath": "",
+    "title": "Assured Workloads API",
+    "version": "v1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/bigquerydatatransfer.v1.json b/googleapiclient/discovery_cache/documents/bigquerydatatransfer.v1.json
index bf201ab..4c04b79 100644
--- a/googleapiclient/discovery_cache/documents/bigquerydatatransfer.v1.json
+++ b/googleapiclient/discovery_cache/documents/bigquerydatatransfer.v1.json
@@ -1,2054 +1,2054 @@
 {
-  "name": "bigquerydatatransfer",
-  "resources": {
-    "projects": {
-      "resources": {
-        "transferConfigs": {
-          "resources": {
-            "runs": {
-              "resources": {
-                "transferLogs": {
-                  "methods": {
-                    "list": {
-                      "parameters": {
-                        "pageToken": {
-                          "location": "query",
-                          "description": "Pagination token, which can be used to request a specific page of `ListTransferLogsRequest` list results. For multiple-page results, `ListTransferLogsResponse` outputs a `next_page` token, which can be used as the `page_token` value to request the next page of list results.",
-                          "type": "string"
-                        },
-                        "messageTypes": {
-                          "description": "Message types to return. If not populated - INFO, WARNING and ERROR messages are returned.",
-                          "repeated": true,
-                          "enum": [
-                            "MESSAGE_SEVERITY_UNSPECIFIED",
-                            "INFO",
-                            "WARNING",
-                            "ERROR"
-                          ],
-                          "type": "string",
-                          "enumDescriptions": [
-                            "No severity specified.",
-                            "Informational message.",
-                            "Warning message.",
-                            "Error message."
-                          ],
-                          "location": "query"
-                        },
-                        "parent": {
-                          "pattern": "^projects/[^/]+/transferConfigs/[^/]+/runs/[^/]+$",
-                          "description": "Required. Transfer run name in the form: `projects/{project_id}/transferConfigs/{config_id}/runs/{run_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}/runs/{run_id}`",
-                          "location": "path",
-                          "type": "string",
-                          "required": true
-                        },
-                        "pageSize": {
-                          "description": "Page size. The default page size is the maximum value of 1000 results.",
-                          "location": "query",
-                          "type": "integer",
-                          "format": "int32"
-                        }
-                      },
-                      "flatPath": "v1/projects/{projectsId}/transferConfigs/{transferConfigsId}/runs/{runsId}/transferLogs",
-                      "id": "bigquerydatatransfer.projects.transferConfigs.runs.transferLogs.list",
-                      "description": "Returns user facing log messages for the data transfer run.",
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "httpMethod": "GET",
-                      "path": "v1/{+parent}/transferLogs",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/bigquery",
-                        "https://www.googleapis.com/auth/bigquery.readonly",
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloud-platform.read-only"
-                      ],
-                      "response": {
-                        "$ref": "ListTransferLogsResponse"
-                      }
-                    }
-                  }
-                }
-              },
-              "methods": {
-                "get": {
-                  "response": {
-                    "$ref": "TransferRun"
-                  },
-                  "id": "bigquerydatatransfer.projects.transferConfigs.runs.get",
-                  "description": "Returns information about the particular transfer run.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/bigquery",
-                    "https://www.googleapis.com/auth/bigquery.readonly",
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only"
-                  ],
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "flatPath": "v1/projects/{projectsId}/transferConfigs/{transferConfigsId}/runs/{runsId}",
-                  "httpMethod": "GET",
-                  "path": "v1/{+name}",
-                  "parameters": {
-                    "name": {
-                      "location": "path",
-                      "type": "string",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/transferConfigs/[^/]+/runs/[^/]+$",
-                      "description": "Required. The field will contain name of the resource requested, for example: `projects/{project_id}/transferConfigs/{config_id}/runs/{run_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}/runs/{run_id}`"
-                    }
-                  }
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/bigquery": {
+                    "description": "View and manage your data in Google BigQuery"
                 },
-                "list": {
-                  "response": {
-                    "$ref": "ListTransferRunsResponse"
-                  },
-                  "path": "v1/{+parent}/runs",
-                  "description": "Returns information about running and completed jobs.",
-                  "parameters": {
-                    "states": {
-                      "enum": [
+                "https://www.googleapis.com/auth/bigquery.readonly": {
+                    "description": "View your data in Google BigQuery"
+                },
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
+                },
+                "https://www.googleapis.com/auth/cloud-platform.read-only": {
+                    "description": "View your data across Google Cloud Platform services"
+                }
+            }
+        }
+    },
+    "basePath": "",
+    "baseUrl": "https://bigquerydatatransfer.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "BigQuery Data Transfer",
+    "description": "Schedule queries or transfer external data from SaaS applications to Google BigQuery on a regular basis.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/bigquery-transfer/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "bigquerydatatransfer:v1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://bigquerydatatransfer.mtls.googleapis.com/",
+    "name": "bigquerydatatransfer",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        }
+    },
+    "protocol": "rest",
+    "resources": {
+        "projects": {
+            "resources": {
+                "dataSources": {
+                    "methods": {
+                        "checkValidCreds": {
+                            "description": "Returns true if valid credentials exist for the given data source and requesting user. Some data sources doesn't support service account, so we need to talk to them on behalf of the end user. This API just checks whether we have OAuth token for the particular user, which is a pre-requisite before user can create a transfer config.",
+                            "flatPath": "v1/projects/{projectsId}/dataSources/{dataSourcesId}:checkValidCreds",
+                            "httpMethod": "POST",
+                            "id": "bigquerydatatransfer.projects.dataSources.checkValidCreds",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The data source in the form: `projects/{project_id}/dataSources/{data_source_id}` or `projects/{project_id}/locations/{location_id}/dataSources/{data_source_id}`.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/dataSources/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+name}:checkValidCreds",
+                            "request": {
+                                "$ref": "CheckValidCredsRequest"
+                            },
+                            "response": {
+                                "$ref": "CheckValidCredsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/bigquery",
+                                "https://www.googleapis.com/auth/bigquery.readonly",
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only"
+                            ]
+                        },
+                        "get": {
+                            "description": "Retrieves a supported data source and returns its settings, which can be used for UI rendering.",
+                            "flatPath": "v1/projects/{projectsId}/dataSources/{dataSourcesId}",
+                            "httpMethod": "GET",
+                            "id": "bigquerydatatransfer.projects.dataSources.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The field will contain name of the resource requested, for example: `projects/{project_id}/dataSources/{data_source_id}` or `projects/{project_id}/locations/{location_id}/dataSources/{data_source_id}`",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/dataSources/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+name}",
+                            "response": {
+                                "$ref": "DataSource"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/bigquery",
+                                "https://www.googleapis.com/auth/bigquery.readonly",
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists supported data sources and returns their settings, which can be used for UI rendering.",
+                            "flatPath": "v1/projects/{projectsId}/dataSources",
+                            "httpMethod": "GET",
+                            "id": "bigquerydatatransfer.projects.dataSources.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "Page size. The default page size is the maximum value of 1000 results.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Pagination token, which can be used to request a specific page of `ListDataSourcesRequest` list results. For multiple-page results, `ListDataSourcesResponse` outputs a `next_page` token, which can be used as the `page_token` value to request the next page of list results.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The BigQuery project id for which data sources should be returned. Must be in the form: `projects/{project_id}` or `projects/{project_id}/locations/{location_id}",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+parent}/dataSources",
+                            "response": {
+                                "$ref": "ListDataSourcesResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/bigquery",
+                                "https://www.googleapis.com/auth/bigquery.readonly",
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only"
+                            ]
+                        }
+                    }
+                },
+                "locations": {
+                    "methods": {
+                        "get": {
+                            "description": "Gets information about a location.",
+                            "flatPath": "v1/projects/{projectsId}/locations/{locationsId}",
+                            "httpMethod": "GET",
+                            "id": "bigquerydatatransfer.projects.locations.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Resource name for the location.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+name}",
+                            "response": {
+                                "$ref": "Location"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/bigquery",
+                                "https://www.googleapis.com/auth/bigquery.readonly",
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists information about the supported locations for this service.",
+                            "flatPath": "v1/projects/{projectsId}/locations",
+                            "httpMethod": "GET",
+                            "id": "bigquerydatatransfer.projects.locations.list",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "The standard list filter.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "name": {
+                                    "description": "The resource that owns the locations collection, if applicable.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "The standard list page size.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The standard list page token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+name}/locations",
+                            "response": {
+                                "$ref": "ListLocationsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/bigquery",
+                                "https://www.googleapis.com/auth/bigquery.readonly",
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "dataSources": {
+                            "methods": {
+                                "checkValidCreds": {
+                                    "description": "Returns true if valid credentials exist for the given data source and requesting user. Some data sources doesn't support service account, so we need to talk to them on behalf of the end user. This API just checks whether we have OAuth token for the particular user, which is a pre-requisite before user can create a transfer config.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/dataSources/{dataSourcesId}:checkValidCreds",
+                                    "httpMethod": "POST",
+                                    "id": "bigquerydatatransfer.projects.locations.dataSources.checkValidCreds",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The data source in the form: `projects/{project_id}/dataSources/{data_source_id}` or `projects/{project_id}/locations/{location_id}/dataSources/{data_source_id}`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/dataSources/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}:checkValidCreds",
+                                    "request": {
+                                        "$ref": "CheckValidCredsRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "CheckValidCredsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/bigquery",
+                                        "https://www.googleapis.com/auth/bigquery.readonly",
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Retrieves a supported data source and returns its settings, which can be used for UI rendering.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/dataSources/{dataSourcesId}",
+                                    "httpMethod": "GET",
+                                    "id": "bigquerydatatransfer.projects.locations.dataSources.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The field will contain name of the resource requested, for example: `projects/{project_id}/dataSources/{data_source_id}` or `projects/{project_id}/locations/{location_id}/dataSources/{data_source_id}`",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/dataSources/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}",
+                                    "response": {
+                                        "$ref": "DataSource"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/bigquery",
+                                        "https://www.googleapis.com/auth/bigquery.readonly",
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists supported data sources and returns their settings, which can be used for UI rendering.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/dataSources",
+                                    "httpMethod": "GET",
+                                    "id": "bigquerydatatransfer.projects.locations.dataSources.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "pageSize": {
+                                            "description": "Page size. The default page size is the maximum value of 1000 results.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "Pagination token, which can be used to request a specific page of `ListDataSourcesRequest` list results. For multiple-page results, `ListDataSourcesResponse` outputs a `next_page` token, which can be used as the `page_token` value to request the next page of list results.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The BigQuery project id for which data sources should be returned. Must be in the form: `projects/{project_id}` or `projects/{project_id}/locations/{location_id}",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+parent}/dataSources",
+                                    "response": {
+                                        "$ref": "ListDataSourcesResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/bigquery",
+                                        "https://www.googleapis.com/auth/bigquery.readonly",
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only"
+                                    ]
+                                }
+                            }
+                        },
+                        "transferConfigs": {
+                            "methods": {
+                                "create": {
+                                    "description": "Creates a new data transfer configuration.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs",
+                                    "httpMethod": "POST",
+                                    "id": "bigquerydatatransfer.projects.locations.transferConfigs.create",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "authorizationCode": {
+                                            "description": "Optional OAuth2 authorization code to use with this transfer configuration. This is required if new credentials are needed, as indicated by `CheckValidCreds`. In order to obtain authorization_code, please make a request to https://www.gstatic.com/bigquerydatatransfer/oauthz/auth?client_id=&scope=&redirect_uri= * client_id should be OAuth client_id of BigQuery DTS API for the given data source returned by ListDataSources method. * data_source_scopes are the scopes returned by ListDataSources method. * redirect_uri is an optional parameter. If not specified, then authorization code is posted to the opener of authorization flow window. Otherwise it will be sent to the redirect uri. A special value of urn:ietf:wg:oauth:2.0:oob means that authorization code should be returned in the title bar of the browser, with the page text prompting the user to copy the code and paste it in the application.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The BigQuery project id where the transfer configuration should be created. Must be in the format projects/{project_id}/locations/{location_id} or projects/{project_id}. If specified location and location of the destination bigquery dataset do not match - the request will fail.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "serviceAccountName": {
+                                            "description": "Optional service account name. If this field is set, transfer config will be created with this service account credentials. It requires that requesting user calling this API has permissions to act as this service account.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "versionInfo": {
+                                            "description": "Optional version info. If users want to find a very recent access token, that is, immediately after approving access, users have to set the version_info claim in the token request. To obtain the version_info, users must use the \"none+gsession\" response type. which be return a version_info back in the authorization response which be be put in a JWT claim in the token request.",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+parent}/transferConfigs",
+                                    "request": {
+                                        "$ref": "TransferConfig"
+                                    },
+                                    "response": {
+                                        "$ref": "TransferConfig"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a data transfer configuration, including any associated transfer runs and logs.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "bigquerydatatransfer.projects.locations.transferConfigs.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The field will contain name of the resource requested, for example: `projects/{project_id}/transferConfigs/{config_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}",
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/bigquery",
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Returns information about a data transfer config.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}",
+                                    "httpMethod": "GET",
+                                    "id": "bigquerydatatransfer.projects.locations.transferConfigs.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The field will contain name of the resource requested, for example: `projects/{project_id}/transferConfigs/{config_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}",
+                                    "response": {
+                                        "$ref": "TransferConfig"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/bigquery",
+                                        "https://www.googleapis.com/auth/bigquery.readonly",
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Returns information about all data transfers in the project.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs",
+                                    "httpMethod": "GET",
+                                    "id": "bigquerydatatransfer.projects.locations.transferConfigs.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "dataSourceIds": {
+                                            "description": "When specified, only configurations of requested data sources are returned.",
+                                            "location": "query",
+                                            "repeated": true,
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "Page size. The default page size is the maximum value of 1000 results.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "Pagination token, which can be used to request a specific page of `ListTransfersRequest` list results. For multiple-page results, `ListTransfersResponse` outputs a `next_page` token, which can be used as the `page_token` value to request the next page of list results.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The BigQuery project id for which data sources should be returned: `projects/{project_id}` or `projects/{project_id}/locations/{location_id}`",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+parent}/transferConfigs",
+                                    "response": {
+                                        "$ref": "ListTransferConfigsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/bigquery",
+                                        "https://www.googleapis.com/auth/bigquery.readonly",
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only"
+                                    ]
+                                },
+                                "patch": {
+                                    "description": "Updates a data transfer configuration. All fields must be set, even if they are not updated.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}",
+                                    "httpMethod": "PATCH",
+                                    "id": "bigquerydatatransfer.projects.locations.transferConfigs.patch",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "authorizationCode": {
+                                            "description": "Optional OAuth2 authorization code to use with this transfer configuration. If it is provided, the transfer configuration will be associated with the authorizing user. In order to obtain authorization_code, please make a request to https://www.gstatic.com/bigquerydatatransfer/oauthz/auth?client_id=&scope=&redirect_uri= * client_id should be OAuth client_id of BigQuery DTS API for the given data source returned by ListDataSources method. * data_source_scopes are the scopes returned by ListDataSources method. * redirect_uri is an optional parameter. If not specified, then authorization code is posted to the opener of authorization flow window. Otherwise it will be sent to the redirect uri. A special value of urn:ietf:wg:oauth:2.0:oob means that authorization code should be returned in the title bar of the browser, with the page text prompting the user to copy the code and paste it in the application.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "name": {
+                                            "description": "The resource name of the transfer config. Transfer config names have the form `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. Where `config_id` is usually a uuid, even though it is not guaranteed or required. The name is ignored when creating a transfer config.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "serviceAccountName": {
+                                            "description": "Optional service account name. If this field is set and \"service_account_name\" is set in update_mask, transfer config will be updated to use this service account credentials. It requires that requesting user calling this API has permissions to act as this service account.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "updateMask": {
+                                            "description": "Required. Required list of fields to be updated in this request.",
+                                            "format": "google-fieldmask",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "versionInfo": {
+                                            "description": "Optional version info. If users want to find a very recent access token, that is, immediately after approving access, users have to set the version_info claim in the token request. To obtain the version_info, users must use the \"none+gsession\" response type. which be return a version_info back in the authorization response which be be put in a JWT claim in the token request.",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}",
+                                    "request": {
+                                        "$ref": "TransferConfig"
+                                    },
+                                    "response": {
+                                        "$ref": "TransferConfig"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "scheduleRuns": {
+                                    "description": "Creates transfer runs for a time range [start_time, end_time]. For each date - or whatever granularity the data source supports - in the range, one transfer run is created. Note that runs are created per UTC time in the time range. DEPRECATED: use StartManualTransferRuns instead.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}:scheduleRuns",
+                                    "httpMethod": "POST",
+                                    "id": "bigquerydatatransfer.projects.locations.transferConfigs.scheduleRuns",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "parent": {
+                                            "description": "Required. Transfer configuration name in the form: `projects/{project_id}/transferConfigs/{config_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+parent}:scheduleRuns",
+                                    "request": {
+                                        "$ref": "ScheduleTransferRunsRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "ScheduleTransferRunsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/bigquery",
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "startManualRuns": {
+                                    "description": "Start manual transfer runs to be executed now with schedule_time equal to current time. The transfer runs can be created for a time range where the run_time is between start_time (inclusive) and end_time (exclusive), or for a specific run_time.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}:startManualRuns",
+                                    "httpMethod": "POST",
+                                    "id": "bigquerydatatransfer.projects.locations.transferConfigs.startManualRuns",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "parent": {
+                                            "description": "Transfer configuration name in the form: `projects/{project_id}/transferConfigs/{config_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+parent}:startManualRuns",
+                                    "request": {
+                                        "$ref": "StartManualTransferRunsRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "StartManualTransferRunsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/bigquery",
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
+                            },
+                            "resources": {
+                                "runs": {
+                                    "methods": {
+                                        "delete": {
+                                            "description": "Deletes the specified transfer run.",
+                                            "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}/runs/{runsId}",
+                                            "httpMethod": "DELETE",
+                                            "id": "bigquerydatatransfer.projects.locations.transferConfigs.runs.delete",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. The field will contain name of the resource requested, for example: `projects/{project_id}/transferConfigs/{config_id}/runs/{run_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}/runs/{run_id}`",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+/runs/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1/{+name}",
+                                            "response": {
+                                                "$ref": "Empty"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/bigquery",
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        },
+                                        "get": {
+                                            "description": "Returns information about the particular transfer run.",
+                                            "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}/runs/{runsId}",
+                                            "httpMethod": "GET",
+                                            "id": "bigquerydatatransfer.projects.locations.transferConfigs.runs.get",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. The field will contain name of the resource requested, for example: `projects/{project_id}/transferConfigs/{config_id}/runs/{run_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}/runs/{run_id}`",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+/runs/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1/{+name}",
+                                            "response": {
+                                                "$ref": "TransferRun"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/bigquery",
+                                                "https://www.googleapis.com/auth/bigquery.readonly",
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloud-platform.read-only"
+                                            ]
+                                        },
+                                        "list": {
+                                            "description": "Returns information about running and completed jobs.",
+                                            "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}/runs",
+                                            "httpMethod": "GET",
+                                            "id": "bigquerydatatransfer.projects.locations.transferConfigs.runs.list",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "pageSize": {
+                                                    "description": "Page size. The default page size is the maximum value of 1000 results.",
+                                                    "format": "int32",
+                                                    "location": "query",
+                                                    "type": "integer"
+                                                },
+                                                "pageToken": {
+                                                    "description": "Pagination token, which can be used to request a specific page of `ListTransferRunsRequest` list results. For multiple-page results, `ListTransferRunsResponse` outputs a `next_page` token, which can be used as the `page_token` value to request the next page of list results.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "parent": {
+                                                    "description": "Required. Name of transfer configuration for which transfer runs should be retrieved. Format of transfer configuration resource name is: `projects/{project_id}/transferConfigs/{config_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "runAttempt": {
+                                                    "description": "Indicates how run attempts are to be pulled.",
+                                                    "enum": [
+                                                        "RUN_ATTEMPT_UNSPECIFIED",
+                                                        "LATEST"
+                                                    ],
+                                                    "enumDescriptions": [
+                                                        "All runs should be returned.",
+                                                        "Only latest run per day should be returned."
+                                                    ],
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "states": {
+                                                    "description": "When specified, only transfer runs with requested states are returned.",
+                                                    "enum": [
+                                                        "TRANSFER_STATE_UNSPECIFIED",
+                                                        "PENDING",
+                                                        "RUNNING",
+                                                        "SUCCEEDED",
+                                                        "FAILED",
+                                                        "CANCELLED"
+                                                    ],
+                                                    "enumDescriptions": [
+                                                        "State placeholder (0).",
+                                                        "Data transfer is scheduled and is waiting to be picked up by data transfer backend (2).",
+                                                        "Data transfer is in progress (3).",
+                                                        "Data transfer completed successfully (4).",
+                                                        "Data transfer failed (5).",
+                                                        "Data transfer is cancelled (6)."
+                                                    ],
+                                                    "location": "query",
+                                                    "repeated": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1/{+parent}/runs",
+                                            "response": {
+                                                "$ref": "ListTransferRunsResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/bigquery",
+                                                "https://www.googleapis.com/auth/bigquery.readonly",
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloud-platform.read-only"
+                                            ]
+                                        }
+                                    },
+                                    "resources": {
+                                        "transferLogs": {
+                                            "methods": {
+                                                "list": {
+                                                    "description": "Returns user facing log messages for the data transfer run.",
+                                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}/runs/{runsId}/transferLogs",
+                                                    "httpMethod": "GET",
+                                                    "id": "bigquerydatatransfer.projects.locations.transferConfigs.runs.transferLogs.list",
+                                                    "parameterOrder": [
+                                                        "parent"
+                                                    ],
+                                                    "parameters": {
+                                                        "messageTypes": {
+                                                            "description": "Message types to return. If not populated - INFO, WARNING and ERROR messages are returned.",
+                                                            "enum": [
+                                                                "MESSAGE_SEVERITY_UNSPECIFIED",
+                                                                "INFO",
+                                                                "WARNING",
+                                                                "ERROR"
+                                                            ],
+                                                            "enumDescriptions": [
+                                                                "No severity specified.",
+                                                                "Informational message.",
+                                                                "Warning message.",
+                                                                "Error message."
+                                                            ],
+                                                            "location": "query",
+                                                            "repeated": true,
+                                                            "type": "string"
+                                                        },
+                                                        "pageSize": {
+                                                            "description": "Page size. The default page size is the maximum value of 1000 results.",
+                                                            "format": "int32",
+                                                            "location": "query",
+                                                            "type": "integer"
+                                                        },
+                                                        "pageToken": {
+                                                            "description": "Pagination token, which can be used to request a specific page of `ListTransferLogsRequest` list results. For multiple-page results, `ListTransferLogsResponse` outputs a `next_page` token, which can be used as the `page_token` value to request the next page of list results.",
+                                                            "location": "query",
+                                                            "type": "string"
+                                                        },
+                                                        "parent": {
+                                                            "description": "Required. Transfer run name in the form: `projects/{project_id}/transferConfigs/{config_id}/runs/{run_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}/runs/{run_id}`",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+/runs/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1/{+parent}/transferLogs",
+                                                    "response": {
+                                                        "$ref": "ListTransferLogsResponse"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/bigquery",
+                                                        "https://www.googleapis.com/auth/bigquery.readonly",
+                                                        "https://www.googleapis.com/auth/cloud-platform",
+                                                        "https://www.googleapis.com/auth/cloud-platform.read-only"
+                                                    ]
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                },
+                "transferConfigs": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a new data transfer configuration.",
+                            "flatPath": "v1/projects/{projectsId}/transferConfigs",
+                            "httpMethod": "POST",
+                            "id": "bigquerydatatransfer.projects.transferConfigs.create",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "authorizationCode": {
+                                    "description": "Optional OAuth2 authorization code to use with this transfer configuration. This is required if new credentials are needed, as indicated by `CheckValidCreds`. In order to obtain authorization_code, please make a request to https://www.gstatic.com/bigquerydatatransfer/oauthz/auth?client_id=&scope=&redirect_uri= * client_id should be OAuth client_id of BigQuery DTS API for the given data source returned by ListDataSources method. * data_source_scopes are the scopes returned by ListDataSources method. * redirect_uri is an optional parameter. If not specified, then authorization code is posted to the opener of authorization flow window. Otherwise it will be sent to the redirect uri. A special value of urn:ietf:wg:oauth:2.0:oob means that authorization code should be returned in the title bar of the browser, with the page text prompting the user to copy the code and paste it in the application.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The BigQuery project id where the transfer configuration should be created. Must be in the format projects/{project_id}/locations/{location_id} or projects/{project_id}. If specified location and location of the destination bigquery dataset do not match - the request will fail.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "serviceAccountName": {
+                                    "description": "Optional service account name. If this field is set, transfer config will be created with this service account credentials. It requires that requesting user calling this API has permissions to act as this service account.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "versionInfo": {
+                                    "description": "Optional version info. If users want to find a very recent access token, that is, immediately after approving access, users have to set the version_info claim in the token request. To obtain the version_info, users must use the \"none+gsession\" response type. which be return a version_info back in the authorization response which be be put in a JWT claim in the token request.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+parent}/transferConfigs",
+                            "request": {
+                                "$ref": "TransferConfig"
+                            },
+                            "response": {
+                                "$ref": "TransferConfig"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes a data transfer configuration, including any associated transfer runs and logs.",
+                            "flatPath": "v1/projects/{projectsId}/transferConfigs/{transferConfigsId}",
+                            "httpMethod": "DELETE",
+                            "id": "bigquerydatatransfer.projects.transferConfigs.delete",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The field will contain name of the resource requested, for example: `projects/{project_id}/transferConfigs/{config_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/transferConfigs/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+name}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/bigquery",
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "get": {
+                            "description": "Returns information about a data transfer config.",
+                            "flatPath": "v1/projects/{projectsId}/transferConfigs/{transferConfigsId}",
+                            "httpMethod": "GET",
+                            "id": "bigquerydatatransfer.projects.transferConfigs.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The field will contain name of the resource requested, for example: `projects/{project_id}/transferConfigs/{config_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/transferConfigs/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+name}",
+                            "response": {
+                                "$ref": "TransferConfig"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/bigquery",
+                                "https://www.googleapis.com/auth/bigquery.readonly",
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only"
+                            ]
+                        },
+                        "list": {
+                            "description": "Returns information about all data transfers in the project.",
+                            "flatPath": "v1/projects/{projectsId}/transferConfigs",
+                            "httpMethod": "GET",
+                            "id": "bigquerydatatransfer.projects.transferConfigs.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "dataSourceIds": {
+                                    "description": "When specified, only configurations of requested data sources are returned.",
+                                    "location": "query",
+                                    "repeated": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "Page size. The default page size is the maximum value of 1000 results.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Pagination token, which can be used to request a specific page of `ListTransfersRequest` list results. For multiple-page results, `ListTransfersResponse` outputs a `next_page` token, which can be used as the `page_token` value to request the next page of list results.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The BigQuery project id for which data sources should be returned: `projects/{project_id}` or `projects/{project_id}/locations/{location_id}`",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+parent}/transferConfigs",
+                            "response": {
+                                "$ref": "ListTransferConfigsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/bigquery",
+                                "https://www.googleapis.com/auth/bigquery.readonly",
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates a data transfer configuration. All fields must be set, even if they are not updated.",
+                            "flatPath": "v1/projects/{projectsId}/transferConfigs/{transferConfigsId}",
+                            "httpMethod": "PATCH",
+                            "id": "bigquerydatatransfer.projects.transferConfigs.patch",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "authorizationCode": {
+                                    "description": "Optional OAuth2 authorization code to use with this transfer configuration. If it is provided, the transfer configuration will be associated with the authorizing user. In order to obtain authorization_code, please make a request to https://www.gstatic.com/bigquerydatatransfer/oauthz/auth?client_id=&scope=&redirect_uri= * client_id should be OAuth client_id of BigQuery DTS API for the given data source returned by ListDataSources method. * data_source_scopes are the scopes returned by ListDataSources method. * redirect_uri is an optional parameter. If not specified, then authorization code is posted to the opener of authorization flow window. Otherwise it will be sent to the redirect uri. A special value of urn:ietf:wg:oauth:2.0:oob means that authorization code should be returned in the title bar of the browser, with the page text prompting the user to copy the code and paste it in the application.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "name": {
+                                    "description": "The resource name of the transfer config. Transfer config names have the form `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. Where `config_id` is usually a uuid, even though it is not guaranteed or required. The name is ignored when creating a transfer config.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/transferConfigs/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "serviceAccountName": {
+                                    "description": "Optional service account name. If this field is set and \"service_account_name\" is set in update_mask, transfer config will be updated to use this service account credentials. It requires that requesting user calling this API has permissions to act as this service account.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "updateMask": {
+                                    "description": "Required. Required list of fields to be updated in this request.",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "versionInfo": {
+                                    "description": "Optional version info. If users want to find a very recent access token, that is, immediately after approving access, users have to set the version_info claim in the token request. To obtain the version_info, users must use the \"none+gsession\" response type. which be return a version_info back in the authorization response which be be put in a JWT claim in the token request.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+name}",
+                            "request": {
+                                "$ref": "TransferConfig"
+                            },
+                            "response": {
+                                "$ref": "TransferConfig"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "scheduleRuns": {
+                            "description": "Creates transfer runs for a time range [start_time, end_time]. For each date - or whatever granularity the data source supports - in the range, one transfer run is created. Note that runs are created per UTC time in the time range. DEPRECATED: use StartManualTransferRuns instead.",
+                            "flatPath": "v1/projects/{projectsId}/transferConfigs/{transferConfigsId}:scheduleRuns",
+                            "httpMethod": "POST",
+                            "id": "bigquerydatatransfer.projects.transferConfigs.scheduleRuns",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. Transfer configuration name in the form: `projects/{project_id}/transferConfigs/{config_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/transferConfigs/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+parent}:scheduleRuns",
+                            "request": {
+                                "$ref": "ScheduleTransferRunsRequest"
+                            },
+                            "response": {
+                                "$ref": "ScheduleTransferRunsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/bigquery",
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "startManualRuns": {
+                            "description": "Start manual transfer runs to be executed now with schedule_time equal to current time. The transfer runs can be created for a time range where the run_time is between start_time (inclusive) and end_time (exclusive), or for a specific run_time.",
+                            "flatPath": "v1/projects/{projectsId}/transferConfigs/{transferConfigsId}:startManualRuns",
+                            "httpMethod": "POST",
+                            "id": "bigquerydatatransfer.projects.transferConfigs.startManualRuns",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Transfer configuration name in the form: `projects/{project_id}/transferConfigs/{config_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/transferConfigs/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+parent}:startManualRuns",
+                            "request": {
+                                "$ref": "StartManualTransferRunsRequest"
+                            },
+                            "response": {
+                                "$ref": "StartManualTransferRunsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/bigquery",
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "runs": {
+                            "methods": {
+                                "delete": {
+                                    "description": "Deletes the specified transfer run.",
+                                    "flatPath": "v1/projects/{projectsId}/transferConfigs/{transferConfigsId}/runs/{runsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "bigquerydatatransfer.projects.transferConfigs.runs.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The field will contain name of the resource requested, for example: `projects/{project_id}/transferConfigs/{config_id}/runs/{run_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}/runs/{run_id}`",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/transferConfigs/[^/]+/runs/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}",
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/bigquery",
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Returns information about the particular transfer run.",
+                                    "flatPath": "v1/projects/{projectsId}/transferConfigs/{transferConfigsId}/runs/{runsId}",
+                                    "httpMethod": "GET",
+                                    "id": "bigquerydatatransfer.projects.transferConfigs.runs.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The field will contain name of the resource requested, for example: `projects/{project_id}/transferConfigs/{config_id}/runs/{run_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}/runs/{run_id}`",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/transferConfigs/[^/]+/runs/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}",
+                                    "response": {
+                                        "$ref": "TransferRun"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/bigquery",
+                                        "https://www.googleapis.com/auth/bigquery.readonly",
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Returns information about running and completed jobs.",
+                                    "flatPath": "v1/projects/{projectsId}/transferConfigs/{transferConfigsId}/runs",
+                                    "httpMethod": "GET",
+                                    "id": "bigquerydatatransfer.projects.transferConfigs.runs.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "pageSize": {
+                                            "description": "Page size. The default page size is the maximum value of 1000 results.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "Pagination token, which can be used to request a specific page of `ListTransferRunsRequest` list results. For multiple-page results, `ListTransferRunsResponse` outputs a `next_page` token, which can be used as the `page_token` value to request the next page of list results.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. Name of transfer configuration for which transfer runs should be retrieved. Format of transfer configuration resource name is: `projects/{project_id}/transferConfigs/{config_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/transferConfigs/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "runAttempt": {
+                                            "description": "Indicates how run attempts are to be pulled.",
+                                            "enum": [
+                                                "RUN_ATTEMPT_UNSPECIFIED",
+                                                "LATEST"
+                                            ],
+                                            "enumDescriptions": [
+                                                "All runs should be returned.",
+                                                "Only latest run per day should be returned."
+                                            ],
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "states": {
+                                            "description": "When specified, only transfer runs with requested states are returned.",
+                                            "enum": [
+                                                "TRANSFER_STATE_UNSPECIFIED",
+                                                "PENDING",
+                                                "RUNNING",
+                                                "SUCCEEDED",
+                                                "FAILED",
+                                                "CANCELLED"
+                                            ],
+                                            "enumDescriptions": [
+                                                "State placeholder (0).",
+                                                "Data transfer is scheduled and is waiting to be picked up by data transfer backend (2).",
+                                                "Data transfer is in progress (3).",
+                                                "Data transfer completed successfully (4).",
+                                                "Data transfer failed (5).",
+                                                "Data transfer is cancelled (6)."
+                                            ],
+                                            "location": "query",
+                                            "repeated": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+parent}/runs",
+                                    "response": {
+                                        "$ref": "ListTransferRunsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/bigquery",
+                                        "https://www.googleapis.com/auth/bigquery.readonly",
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only"
+                                    ]
+                                }
+                            },
+                            "resources": {
+                                "transferLogs": {
+                                    "methods": {
+                                        "list": {
+                                            "description": "Returns user facing log messages for the data transfer run.",
+                                            "flatPath": "v1/projects/{projectsId}/transferConfigs/{transferConfigsId}/runs/{runsId}/transferLogs",
+                                            "httpMethod": "GET",
+                                            "id": "bigquerydatatransfer.projects.transferConfigs.runs.transferLogs.list",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "messageTypes": {
+                                                    "description": "Message types to return. If not populated - INFO, WARNING and ERROR messages are returned.",
+                                                    "enum": [
+                                                        "MESSAGE_SEVERITY_UNSPECIFIED",
+                                                        "INFO",
+                                                        "WARNING",
+                                                        "ERROR"
+                                                    ],
+                                                    "enumDescriptions": [
+                                                        "No severity specified.",
+                                                        "Informational message.",
+                                                        "Warning message.",
+                                                        "Error message."
+                                                    ],
+                                                    "location": "query",
+                                                    "repeated": true,
+                                                    "type": "string"
+                                                },
+                                                "pageSize": {
+                                                    "description": "Page size. The default page size is the maximum value of 1000 results.",
+                                                    "format": "int32",
+                                                    "location": "query",
+                                                    "type": "integer"
+                                                },
+                                                "pageToken": {
+                                                    "description": "Pagination token, which can be used to request a specific page of `ListTransferLogsRequest` list results. For multiple-page results, `ListTransferLogsResponse` outputs a `next_page` token, which can be used as the `page_token` value to request the next page of list results.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "parent": {
+                                                    "description": "Required. Transfer run name in the form: `projects/{project_id}/transferConfigs/{config_id}/runs/{run_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}/runs/{run_id}`",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/transferConfigs/[^/]+/runs/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1/{+parent}/transferLogs",
+                                            "response": {
+                                                "$ref": "ListTransferLogsResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/bigquery",
+                                                "https://www.googleapis.com/auth/bigquery.readonly",
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloud-platform.read-only"
+                                            ]
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    },
+    "revision": "20210221",
+    "rootUrl": "https://bigquerydatatransfer.googleapis.com/",
+    "schemas": {
+        "CheckValidCredsRequest": {
+            "description": "A request to determine whether the user has valid credentials. This method is used to limit the number of OAuth popups in the user interface. The user id is inferred from the API call context. If the data source has the Google+ authorization type, this method returns false, as it cannot be determined whether the credentials are already valid merely based on the user id.",
+            "id": "CheckValidCredsRequest",
+            "properties": {},
+            "type": "object"
+        },
+        "CheckValidCredsResponse": {
+            "description": "A response indicating whether the credentials exist and are valid.",
+            "id": "CheckValidCredsResponse",
+            "properties": {
+                "hasValidCreds": {
+                    "description": "If set to `true`, the credentials exist and are valid.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "DataSource": {
+            "description": "Represents data source metadata. Metadata is sufficient to render UI and request proper OAuth tokens.",
+            "id": "DataSource",
+            "properties": {
+                "authorizationType": {
+                    "description": "Indicates the type of authorization.",
+                    "enum": [
+                        "AUTHORIZATION_TYPE_UNSPECIFIED",
+                        "AUTHORIZATION_CODE",
+                        "GOOGLE_PLUS_AUTHORIZATION_CODE",
+                        "FIRST_PARTY_OAUTH"
+                    ],
+                    "enumDescriptions": [
+                        "Type unspecified.",
+                        "Use OAuth 2 authorization codes that can be exchanged for a refresh token on the backend.",
+                        "Return an authorization code for a given Google+ page that can then be exchanged for a refresh token on the backend.",
+                        "Use First Party OAuth based on Loas Owned Clients. First Party OAuth doesn't require a refresh token to get an offline access token. Instead, it uses a client-signed JWT assertion to retrieve an access token."
+                    ],
+                    "type": "string"
+                },
+                "clientId": {
+                    "description": "Data source client id which should be used to receive refresh token.",
+                    "type": "string"
+                },
+                "dataRefreshType": {
+                    "description": "Specifies whether the data source supports automatic data refresh for the past few days, and how it's supported. For some data sources, data might not be complete until a few days later, so it's useful to refresh data automatically.",
+                    "enum": [
+                        "DATA_REFRESH_TYPE_UNSPECIFIED",
+                        "SLIDING_WINDOW",
+                        "CUSTOM_SLIDING_WINDOW"
+                    ],
+                    "enumDescriptions": [
+                        "The data source won't support data auto refresh, which is default value.",
+                        "The data source supports data auto refresh, and runs will be scheduled for the past few days. Does not allow custom values to be set for each transfer config.",
+                        "The data source supports data auto refresh, and runs will be scheduled for the past few days. Allows custom values to be set for each transfer config."
+                    ],
+                    "type": "string"
+                },
+                "dataSourceId": {
+                    "description": "Data source id.",
+                    "type": "string"
+                },
+                "defaultDataRefreshWindowDays": {
+                    "description": "Default data refresh window on days. Only meaningful when `data_refresh_type` = `SLIDING_WINDOW`.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "defaultSchedule": {
+                    "description": "Default data transfer schedule. Examples of valid schedules include: `1st,3rd monday of month 15:30`, `every wed,fri of jan,jun 13:15`, and `first sunday of quarter 00:00`.",
+                    "type": "string"
+                },
+                "description": {
+                    "description": "User friendly data source description string.",
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "User friendly data source name.",
+                    "type": "string"
+                },
+                "helpUrl": {
+                    "description": "Url for the help document for this data source.",
+                    "type": "string"
+                },
+                "manualRunsDisabled": {
+                    "description": "Disables backfilling and manual run scheduling for the data source.",
+                    "type": "boolean"
+                },
+                "minimumScheduleInterval": {
+                    "description": "The minimum interval for scheduler to schedule runs.",
+                    "format": "google-duration",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Output only. Data source resource name.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "parameters": {
+                    "description": "Data source parameters.",
+                    "items": {
+                        "$ref": "DataSourceParameter"
+                    },
+                    "type": "array"
+                },
+                "scopes": {
+                    "description": "Api auth scopes for which refresh token needs to be obtained. These are scopes needed by a data source to prepare data and ingest them into BigQuery, e.g., https://www.googleapis.com/auth/bigquery",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "supportsCustomSchedule": {
+                    "description": "Specifies whether the data source supports a user defined schedule, or operates on the default schedule. When set to `true`, user can override default schedule.",
+                    "type": "boolean"
+                },
+                "supportsMultipleTransfers": {
+                    "description": "Deprecated. This field has no effect.",
+                    "type": "boolean"
+                },
+                "transferType": {
+                    "description": "Deprecated. This field has no effect.",
+                    "enum": [
+                        "TRANSFER_TYPE_UNSPECIFIED",
+                        "BATCH",
+                        "STREAMING"
+                    ],
+                    "enumDescriptions": [
+                        "Invalid or Unknown transfer type placeholder.",
+                        "Batch data transfer.",
+                        "Streaming data transfer. Streaming data source currently doesn't support multiple transfer configs per project."
+                    ],
+                    "type": "string"
+                },
+                "updateDeadlineSeconds": {
+                    "description": "The number of seconds to wait for an update from the data source before the Data Transfer Service marks the transfer as FAILED.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "DataSourceParameter": {
+            "description": "Represents a data source parameter with validation rules, so that parameters can be rendered in the UI. These parameters are given to us by supported data sources, and include all needed information for rendering and validation. Thus, whoever uses this api can decide to generate either generic ui, or custom data source specific forms.",
+            "id": "DataSourceParameter",
+            "properties": {
+                "allowedValues": {
+                    "description": "All possible values for the parameter.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "deprecated": {
+                    "description": "If true, it should not be used in new transfers, and it should not be visible to users.",
+                    "type": "boolean"
+                },
+                "description": {
+                    "description": "Parameter description.",
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "Parameter display name in the user interface.",
+                    "type": "string"
+                },
+                "fields": {
+                    "description": "Deprecated. This field has no effect.",
+                    "items": {
+                        "$ref": "DataSourceParameter"
+                    },
+                    "type": "array"
+                },
+                "immutable": {
+                    "description": "Cannot be changed after initial creation.",
+                    "type": "boolean"
+                },
+                "maxValue": {
+                    "description": "For integer and double values specifies maxminum allowed value.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "minValue": {
+                    "description": "For integer and double values specifies minimum allowed value.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "paramId": {
+                    "description": "Parameter identifier.",
+                    "type": "string"
+                },
+                "recurse": {
+                    "description": "Deprecated. This field has no effect.",
+                    "type": "boolean"
+                },
+                "repeated": {
+                    "description": "Deprecated. This field has no effect.",
+                    "type": "boolean"
+                },
+                "required": {
+                    "description": "Is parameter required.",
+                    "type": "boolean"
+                },
+                "type": {
+                    "description": "Parameter type.",
+                    "enum": [
+                        "TYPE_UNSPECIFIED",
+                        "STRING",
+                        "INTEGER",
+                        "DOUBLE",
+                        "BOOLEAN",
+                        "RECORD",
+                        "PLUS_PAGE"
+                    ],
+                    "enumDescriptions": [
+                        "Type unspecified.",
+                        "String parameter.",
+                        "Integer parameter (64-bits). Will be serialized to json as string.",
+                        "Double precision floating point parameter.",
+                        "Boolean parameter.",
+                        "Deprecated. This field has no effect.",
+                        "Page ID for a Google+ Page."
+                    ],
+                    "type": "string"
+                },
+                "validationDescription": {
+                    "description": "Description of the requirements for this field, in case the user input does not fulfill the regex pattern or min/max values.",
+                    "type": "string"
+                },
+                "validationHelpUrl": {
+                    "description": "URL to a help document to further explain the naming requirements.",
+                    "type": "string"
+                },
+                "validationRegex": {
+                    "description": "Regular expression which can be used for parameter validation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "EmailPreferences": {
+            "description": "Represents preferences for sending email notifications for transfer run events.",
+            "id": "EmailPreferences",
+            "properties": {
+                "enableFailureEmail": {
+                    "description": "If true, email notifications will be sent on transfer run failures.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "Empty": {
+            "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
+            "id": "Empty",
+            "properties": {},
+            "type": "object"
+        },
+        "ListDataSourcesResponse": {
+            "description": "Returns list of supported data sources and their metadata.",
+            "id": "ListDataSourcesResponse",
+            "properties": {
+                "dataSources": {
+                    "description": "List of supported data sources and their transfer settings.",
+                    "items": {
+                        "$ref": "DataSource"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Output only. The next-pagination token. For multiple-page list results, this token can be used as the `ListDataSourcesRequest.page_token` to request the next page of list results.",
+                    "readOnly": true,
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListLocationsResponse": {
+            "description": "The response message for Locations.ListLocations.",
+            "id": "ListLocationsResponse",
+            "properties": {
+                "locations": {
+                    "description": "A list of locations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Location"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListTransferConfigsResponse": {
+            "description": "The returned list of pipelines in the project.",
+            "id": "ListTransferConfigsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "Output only. The next-pagination token. For multiple-page list results, this token can be used as the `ListTransferConfigsRequest.page_token` to request the next page of list results.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "transferConfigs": {
+                    "description": "Output only. The stored pipeline transfer configurations.",
+                    "items": {
+                        "$ref": "TransferConfig"
+                    },
+                    "readOnly": true,
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListTransferLogsResponse": {
+            "description": "The returned list transfer run messages.",
+            "id": "ListTransferLogsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "Output only. The next-pagination token. For multiple-page list results, this token can be used as the `GetTransferRunLogRequest.page_token` to request the next page of list results.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "transferMessages": {
+                    "description": "Output only. The stored pipeline transfer messages.",
+                    "items": {
+                        "$ref": "TransferMessage"
+                    },
+                    "readOnly": true,
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListTransferRunsResponse": {
+            "description": "The returned list of pipelines in the project.",
+            "id": "ListTransferRunsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "Output only. The next-pagination token. For multiple-page list results, this token can be used as the `ListTransferRunsRequest.page_token` to request the next page of list results.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "transferRuns": {
+                    "description": "Output only. The stored pipeline transfer runs.",
+                    "items": {
+                        "$ref": "TransferRun"
+                    },
+                    "readOnly": true,
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Location": {
+            "description": "A resource that represents Google Cloud Platform location.",
+            "id": "Location",
+            "properties": {
+                "displayName": {
+                    "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\".",
+                    "type": "string"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}",
+                    "type": "object"
+                },
+                "locationId": {
+                    "description": "The canonical id for this location. For example: `\"us-east1\"`.",
+                    "type": "string"
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata. For example the available capacity at the given location.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "Resource name for the location, which may vary between implementations. For example: `\"projects/example-project/locations/us-east1\"`",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ScheduleOptions": {
+            "description": "Options customizing the data transfer schedule.",
+            "id": "ScheduleOptions",
+            "properties": {
+                "disableAutoScheduling": {
+                    "description": "If true, automatic scheduling of data transfer runs for this configuration will be disabled. The runs can be started on ad-hoc basis using StartManualTransferRuns API. When automatic scheduling is disabled, the TransferConfig.schedule field will be ignored.",
+                    "type": "boolean"
+                },
+                "endTime": {
+                    "description": "Defines time to stop scheduling transfer runs. A transfer run cannot be scheduled at or after the end time. The end time can be changed at any moment. The time when a data transfer can be trigerred manually is not limited by this option.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "startTime": {
+                    "description": "Specifies time to start scheduling transfer runs. The first run will be scheduled at or after the start time according to a recurrence pattern defined in the schedule string. The start time can be changed at any moment. The time when a data transfer can be trigerred manually is not limited by this option.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ScheduleTransferRunsRequest": {
+            "description": "A request to schedule transfer runs for a time range.",
+            "id": "ScheduleTransferRunsRequest",
+            "properties": {
+                "endTime": {
+                    "description": "Required. End time of the range of transfer runs. For example, `\"2017-05-30T00:00:00+00:00\"`.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "startTime": {
+                    "description": "Required. Start time of the range of transfer runs. For example, `\"2017-05-25T00:00:00+00:00\"`.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ScheduleTransferRunsResponse": {
+            "description": "A response to schedule transfer runs for a time range.",
+            "id": "ScheduleTransferRunsResponse",
+            "properties": {
+                "runs": {
+                    "description": "The transfer runs that were scheduled.",
+                    "items": {
+                        "$ref": "TransferRun"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "StartManualTransferRunsRequest": {
+            "description": "A request to start manual transfer runs.",
+            "id": "StartManualTransferRunsRequest",
+            "properties": {
+                "requestedRunTime": {
+                    "description": "Specific run_time for a transfer run to be started. The requested_run_time must not be in the future.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "requestedTimeRange": {
+                    "$ref": "TimeRange",
+                    "description": "Time range for the transfer runs that should be started."
+                }
+            },
+            "type": "object"
+        },
+        "StartManualTransferRunsResponse": {
+            "description": "A response to start manual transfer runs.",
+            "id": "StartManualTransferRunsResponse",
+            "properties": {
+                "runs": {
+                    "description": "The transfer runs that were created.",
+                    "items": {
+                        "$ref": "TransferRun"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Status": {
+            "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
+            "id": "Status",
+            "properties": {
+                "code": {
+                    "description": "The status code, which should be an enum value of google.rpc.Code.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TimeRange": {
+            "description": "A specification for a time range, this will request transfer runs with run_time between start_time (inclusive) and end_time (exclusive).",
+            "id": "TimeRange",
+            "properties": {
+                "endTime": {
+                    "description": "End time of the range of transfer runs. For example, `\"2017-05-30T00:00:00+00:00\"`. The end_time must not be in the future. Creates transfer runs where run_time is in the range between start_time (inclusive) and end_time (exclusive).",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "startTime": {
+                    "description": "Start time of the range of transfer runs. For example, `\"2017-05-25T00:00:00+00:00\"`. The start_time must be strictly less than the end_time. Creates transfer runs where run_time is in the range between start_time (inclusive) and end_time (exclusive).",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TransferConfig": {
+            "description": "Represents a data transfer configuration. A transfer configuration contains all metadata needed to perform a data transfer. For example, `destination_dataset_id` specifies where data should be stored. When a new transfer configuration is created, the specified `destination_dataset_id` is created when needed and shared with the appropriate data source service account.",
+            "id": "TransferConfig",
+            "properties": {
+                "dataRefreshWindowDays": {
+                    "description": "The number of days to look back to automatically refresh the data. For example, if `data_refresh_window_days = 10`, then every day BigQuery reingests data for [today-10, today-1], rather than ingesting data for just [today-1]. Only valid if the data source supports the feature. Set the value to 0 to use the default value.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "dataSourceId": {
+                    "description": "Data source id. Cannot be changed once data transfer is created.",
+                    "type": "string"
+                },
+                "datasetRegion": {
+                    "description": "Output only. Region in which BigQuery dataset is located.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "destinationDatasetId": {
+                    "description": "The BigQuery target dataset id.",
+                    "type": "string"
+                },
+                "disabled": {
+                    "description": "Is this config disabled. When set to true, no runs are scheduled for a given transfer.",
+                    "type": "boolean"
+                },
+                "displayName": {
+                    "description": "User specified display name for the data transfer.",
+                    "type": "string"
+                },
+                "emailPreferences": {
+                    "$ref": "EmailPreferences",
+                    "description": "Email notifications will be sent according to these preferences to the email address of the user who owns this transfer config."
+                },
+                "name": {
+                    "description": "The resource name of the transfer config. Transfer config names have the form `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. Where `config_id` is usually a uuid, even though it is not guaranteed or required. The name is ignored when creating a transfer config.",
+                    "type": "string"
+                },
+                "nextRunTime": {
+                    "description": "Output only. Next time when data transfer will run.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "notificationPubsubTopic": {
+                    "description": "Pub/Sub topic where notifications will be sent after transfer runs associated with this transfer config finish.",
+                    "type": "string"
+                },
+                "params": {
+                    "additionalProperties": {
+                        "description": "Properties of the object.",
+                        "type": "any"
+                    },
+                    "description": "Data transfer specific parameters.",
+                    "type": "object"
+                },
+                "schedule": {
+                    "description": "Data transfer schedule. If the data source does not support a custom schedule, this should be empty. If it is empty, the default value for the data source will be used. The specified times are in UTC. Examples of valid format: `1st,3rd monday of month 15:30`, `every wed,fri of jan,jun 13:15`, and `first sunday of quarter 00:00`. See more explanation about the format here: https://cloud.google.com/appengine/docs/flexible/python/scheduling-jobs-with-cron-yaml#the_schedule_format NOTE: the granularity should be at least 8 hours, or less frequent.",
+                    "type": "string"
+                },
+                "scheduleOptions": {
+                    "$ref": "ScheduleOptions",
+                    "description": "Options customizing the data transfer schedule."
+                },
+                "state": {
+                    "description": "Output only. State of the most recently updated transfer run.",
+                    "enum": [
                         "TRANSFER_STATE_UNSPECIFIED",
                         "PENDING",
                         "RUNNING",
                         "SUCCEEDED",
                         "FAILED",
                         "CANCELLED"
-                      ],
-                      "repeated": true,
-                      "description": "When specified, only transfer runs with requested states are returned.",
-                      "enumDescriptions": [
-                        "State placeholder.",
-                        "Data transfer is scheduled and is waiting to be picked up by data transfer backend.",
-                        "Data transfer is in progress.",
-                        "Data transfer completed successfully.",
-                        "Data transfer failed.",
-                        "Data transfer is cancelled."
-                      ],
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "parent": {
-                      "description": "Required. Name of transfer configuration for which transfer runs should be retrieved. Format of transfer configuration resource name is: `projects/{project_id}/transferConfigs/{config_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`.",
-                      "pattern": "^projects/[^/]+/transferConfigs/[^/]+$",
-                      "required": true,
-                      "location": "path",
-                      "type": "string"
-                    },
-                    "pageToken": {
-                      "description": "Pagination token, which can be used to request a specific page of `ListTransferRunsRequest` list results. For multiple-page results, `ListTransferRunsResponse` outputs a `next_page` token, which can be used as the `page_token` value to request the next page of list results.",
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "pageSize": {
-                      "format": "int32",
-                      "location": "query",
-                      "description": "Page size. The default page size is the maximum value of 1000 results.",
-                      "type": "integer"
-                    },
-                    "runAttempt": {
-                      "enumDescriptions": [
-                        "All runs should be returned.",
-                        "Only latest run per day should be returned."
-                      ],
-                      "enum": [
-                        "RUN_ATTEMPT_UNSPECIFIED",
-                        "LATEST"
-                      ],
-                      "description": "Indicates how run attempts are to be pulled.",
-                      "location": "query",
-                      "type": "string"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/bigquery",
-                    "https://www.googleapis.com/auth/bigquery.readonly",
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only"
-                  ],
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "id": "bigquerydatatransfer.projects.transferConfigs.runs.list",
-                  "httpMethod": "GET",
-                  "flatPath": "v1/projects/{projectsId}/transferConfigs/{transferConfigsId}/runs"
+                    ],
+                    "enumDescriptions": [
+                        "State placeholder (0).",
+                        "Data transfer is scheduled and is waiting to be picked up by data transfer backend (2).",
+                        "Data transfer is in progress (3).",
+                        "Data transfer completed successfully (4).",
+                        "Data transfer failed (5).",
+                        "Data transfer is cancelled (6)."
+                    ],
+                    "readOnly": true,
+                    "type": "string"
                 },
-                "delete": {
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "id": "bigquerydatatransfer.projects.transferConfigs.runs.delete",
-                  "path": "v1/{+name}",
-                  "flatPath": "v1/projects/{projectsId}/transferConfigs/{transferConfigsId}/runs/{runsId}",
-                  "parameters": {
-                    "name": {
-                      "location": "path",
-                      "description": "Required. The field will contain name of the resource requested, for example: `projects/{project_id}/transferConfigs/{config_id}/runs/{run_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}/runs/{run_id}`",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/transferConfigs/[^/]+/runs/[^/]+$",
-                      "type": "string"
-                    }
-                  },
-                  "httpMethod": "DELETE",
-                  "description": "Deletes the specified transfer run.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/bigquery",
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ]
+                "updateTime": {
+                    "description": "Output only. Data transfer modification time. Ignored by server on input.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "userId": {
+                    "description": "Deprecated. Unique ID of the user on whose behalf transfer is done.",
+                    "format": "int64",
+                    "type": "string"
                 }
-              }
-            }
-          },
-          "methods": {
-            "get": {
-              "response": {
-                "$ref": "TransferConfig"
-              },
-              "parameters": {
-                "name": {
-                  "required": true,
-                  "description": "Required. The field will contain name of the resource requested, for example: `projects/{project_id}/transferConfigs/{config_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`",
-                  "pattern": "^projects/[^/]+/transferConfigs/[^/]+$",
-                  "location": "path",
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1/projects/{projectsId}/transferConfigs/{transferConfigsId}",
-              "parameterOrder": [
-                "name"
-              ],
-              "path": "v1/{+name}",
-              "scopes": [
-                "https://www.googleapis.com/auth/bigquery",
-                "https://www.googleapis.com/auth/bigquery.readonly",
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only"
-              ],
-              "id": "bigquerydatatransfer.projects.transferConfigs.get",
-              "httpMethod": "GET",
-              "description": "Returns information about a data transfer config."
-            },
-            "scheduleRuns": {
-              "id": "bigquerydatatransfer.projects.transferConfigs.scheduleRuns",
-              "description": "Creates transfer runs for a time range [start_time, end_time]. For each date - or whatever granularity the data source supports - in the range, one transfer run is created. Note that runs are created per UTC time in the time range. DEPRECATED: use StartManualTransferRuns instead.",
-              "request": {
-                "$ref": "ScheduleTransferRunsRequest"
-              },
-              "parameters": {
-                "parent": {
-                  "location": "path",
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/transferConfigs/[^/]+$",
-                  "description": "Required. Transfer configuration name in the form: `projects/{project_id}/transferConfigs/{config_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`.",
-                  "required": true
-                }
-              },
-              "response": {
-                "$ref": "ScheduleTransferRunsResponse"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/bigquery",
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectsId}/transferConfigs/{transferConfigsId}:scheduleRuns",
-              "parameterOrder": [
-                "parent"
-              ],
-              "path": "v1/{+parent}:scheduleRuns",
-              "httpMethod": "POST"
-            },
-            "delete": {
-              "id": "bigquerydatatransfer.projects.transferConfigs.delete",
-              "scopes": [
-                "https://www.googleapis.com/auth/bigquery",
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameters": {
-                "name": {
-                  "description": "Required. The field will contain name of the resource requested, for example: `projects/{project_id}/transferConfigs/{config_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`",
-                  "type": "string",
-                  "required": true,
-                  "location": "path",
-                  "pattern": "^projects/[^/]+/transferConfigs/[^/]+$"
-                }
-              },
-              "path": "v1/{+name}",
-              "httpMethod": "DELETE",
-              "description": "Deletes a data transfer configuration, including any associated transfer runs and logs.",
-              "parameterOrder": [
-                "name"
-              ],
-              "flatPath": "v1/projects/{projectsId}/transferConfigs/{transferConfigsId}"
-            },
-            "patch": {
-              "parameters": {
-                "authorizationCode": {
-                  "description": "Optional OAuth2 authorization code to use with this transfer configuration. If it is provided, the transfer configuration will be associated with the authorizing user. In order to obtain authorization_code, please make a request to https://www.gstatic.com/bigquerydatatransfer/oauthz/auth?client_id=&scope=&redirect_uri= * client_id should be OAuth client_id of BigQuery DTS API for the given data source returned by ListDataSources method. * data_source_scopes are the scopes returned by ListDataSources method. * redirect_uri is an optional parameter. If not specified, then authorization code is posted to the opener of authorization flow window. Otherwise it will be sent to the redirect uri. A special value of urn:ietf:wg:oauth:2.0:oob means that authorization code should be returned in the title bar of the browser, with the page text prompting the user to copy the code and paste it in the application.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "updateMask": {
-                  "format": "google-fieldmask",
-                  "description": "Required. Required list of fields to be updated in this request.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "serviceAccountName": {
-                  "description": "Optional service account name. If this field is set and \"service_account_name\" is set in update_mask, transfer config will be updated to use this service account credentials. It requires that requesting user calling this API has permissions to act as this service account.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "name": {
-                  "type": "string",
-                  "description": "The resource name of the transfer config. Transfer config names have the form of `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. The name is automatically generated based on the config_id specified in CreateTransferConfigRequest along with project_id and region. If config_id is not provided, usually a uuid, even though it is not guaranteed or required, will be generated for config_id.",
-                  "location": "path",
-                  "pattern": "^projects/[^/]+/transferConfigs/[^/]+$",
-                  "required": true
-                },
-                "versionInfo": {
-                  "description": "Optional version info. If users want to find a very recent access token, that is, immediately after approving access, users have to set the version_info claim in the token request. To obtain the version_info, users must use the \"none+gsession\" response type. which be return a version_info back in the authorization response which be be put in a JWT claim in the token request.",
-                  "location": "query",
-                  "type": "string"
-                }
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "id": "bigquerydatatransfer.projects.transferConfigs.patch",
-              "httpMethod": "PATCH",
-              "path": "v1/{+name}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectsId}/transferConfigs/{transferConfigsId}",
-              "request": {
-                "$ref": "TransferConfig"
-              },
-              "description": "Updates a data transfer configuration. All fields must be set, even if they are not updated.",
-              "response": {
-                "$ref": "TransferConfig"
-              }
-            },
-            "create": {
-              "flatPath": "v1/projects/{projectsId}/transferConfigs",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "path": "v1/{+parent}/transferConfigs",
-              "parameterOrder": [
-                "parent"
-              ],
-              "description": "Creates a new data transfer configuration.",
-              "id": "bigquerydatatransfer.projects.transferConfigs.create",
-              "response": {
-                "$ref": "TransferConfig"
-              },
-              "request": {
-                "$ref": "TransferConfig"
-              },
-              "parameters": {
-                "parent": {
-                  "location": "path",
-                  "type": "string",
-                  "description": "Required. The BigQuery project id where the transfer configuration should be created. Must be in the format projects/{project_id}/locations/{location_id} or projects/{project_id}. If specified location and location of the destination bigquery dataset do not match - the request will fail.",
-                  "required": true,
-                  "pattern": "^projects/[^/]+$"
-                },
-                "authorizationCode": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "Optional OAuth2 authorization code to use with this transfer configuration. This is required if new credentials are needed, as indicated by `CheckValidCreds`. In order to obtain authorization_code, please make a request to https://www.gstatic.com/bigquerydatatransfer/oauthz/auth?client_id=&scope=&redirect_uri= * client_id should be OAuth client_id of BigQuery DTS API for the given data source returned by ListDataSources method. * data_source_scopes are the scopes returned by ListDataSources method. * redirect_uri is an optional parameter. If not specified, then authorization code is posted to the opener of authorization flow window. Otherwise it will be sent to the redirect uri. A special value of urn:ietf:wg:oauth:2.0:oob means that authorization code should be returned in the title bar of the browser, with the page text prompting the user to copy the code and paste it in the application."
-                },
-                "versionInfo": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "Optional version info. If users want to find a very recent access token, that is, immediately after approving access, users have to set the version_info claim in the token request. To obtain the version_info, users must use the \"none+gsession\" response type. which be return a version_info back in the authorization response which be be put in a JWT claim in the token request."
-                },
-                "serviceAccountName": {
-                  "description": "Optional service account name. If this field is set, transfer config will be created with this service account credentials. It requires that requesting user calling this API has permissions to act as this service account.",
-                  "type": "string",
-                  "location": "query"
-                }
-              },
-              "httpMethod": "POST"
-            },
-            "list": {
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/bigquery",
-                "https://www.googleapis.com/auth/bigquery.readonly",
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only"
-              ],
-              "flatPath": "v1/projects/{projectsId}/transferConfigs",
-              "path": "v1/{+parent}/transferConfigs",
-              "response": {
-                "$ref": "ListTransferConfigsResponse"
-              },
-              "parameterOrder": [
-                "parent"
-              ],
-              "parameters": {
-                "pageToken": {
-                  "description": "Pagination token, which can be used to request a specific page of `ListTransfersRequest` list results. For multiple-page results, `ListTransfersResponse` outputs a `next_page` token, which can be used as the `page_token` value to request the next page of list results.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "format": "int32",
-                  "description": "Page size. The default page size is the maximum value of 1000 results.",
-                  "type": "integer",
-                  "location": "query"
-                },
-                "dataSourceIds": {
-                  "type": "string",
-                  "repeated": true,
-                  "location": "query",
-                  "description": "When specified, only configurations of requested data sources are returned."
-                },
-                "parent": {
-                  "pattern": "^projects/[^/]+$",
-                  "type": "string",
-                  "location": "path",
-                  "description": "Required. The BigQuery project id for which data sources should be returned: `projects/{project_id}` or `projects/{project_id}/locations/{location_id}`",
-                  "required": true
-                }
-              },
-              "description": "Returns information about all data transfers in the project.",
-              "id": "bigquerydatatransfer.projects.transferConfigs.list"
-            },
-            "startManualRuns": {
-              "httpMethod": "POST",
-              "description": "Start manual transfer runs to be executed now with schedule_time equal to current time. The transfer runs can be created for a time range where the run_time is between start_time (inclusive) and end_time (exclusive), or for a specific run_time.",
-              "path": "v1/{+parent}:startManualRuns",
-              "parameters": {
-                "parent": {
-                  "location": "path",
-                  "required": true,
-                  "description": "Transfer configuration name in the form: `projects/{project_id}/transferConfigs/{config_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`.",
-                  "pattern": "^projects/[^/]+/transferConfigs/[^/]+$",
-                  "type": "string"
-                }
-              },
-              "response": {
-                "$ref": "StartManualTransferRunsResponse"
-              },
-              "flatPath": "v1/projects/{projectsId}/transferConfigs/{transferConfigsId}:startManualRuns",
-              "request": {
-                "$ref": "StartManualTransferRunsRequest"
-              },
-              "parameterOrder": [
-                "parent"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/bigquery",
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "id": "bigquerydatatransfer.projects.transferConfigs.startManualRuns"
-            }
-          }
-        },
-        "dataSources": {
-          "methods": {
-            "checkValidCreds": {
-              "flatPath": "v1/projects/{projectsId}/dataSources/{dataSourcesId}:checkValidCreds",
-              "id": "bigquerydatatransfer.projects.dataSources.checkValidCreds",
-              "response": {
-                "$ref": "CheckValidCredsResponse"
-              },
-              "path": "v1/{+name}:checkValidCreds",
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "name"
-              ],
-              "description": "Returns true if valid credentials exist for the given data source and requesting user. Some data sources doesn't support service account, so we need to talk to them on behalf of the end user. This API just checks whether we have OAuth token for the particular user, which is a pre-requisite before user can create a transfer config.",
-              "parameters": {
-                "name": {
-                  "pattern": "^projects/[^/]+/dataSources/[^/]+$",
-                  "type": "string",
-                  "location": "path",
-                  "description": "Required. The data source in the form: `projects/{project_id}/dataSources/{data_source_id}` or `projects/{project_id}/locations/{location_id}/dataSources/{data_source_id}`.",
-                  "required": true
-                }
-              },
-              "request": {
-                "$ref": "CheckValidCredsRequest"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/bigquery",
-                "https://www.googleapis.com/auth/bigquery.readonly",
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only"
-              ]
-            },
-            "get": {
-              "scopes": [
-                "https://www.googleapis.com/auth/bigquery",
-                "https://www.googleapis.com/auth/bigquery.readonly",
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only"
-              ],
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET",
-              "id": "bigquerydatatransfer.projects.dataSources.get",
-              "response": {
-                "$ref": "DataSource"
-              },
-              "path": "v1/{+name}",
-              "parameters": {
-                "name": {
-                  "location": "path",
-                  "required": true,
-                  "pattern": "^projects/[^/]+/dataSources/[^/]+$",
-                  "description": "Required. The field will contain name of the resource requested, for example: `projects/{project_id}/dataSources/{data_source_id}` or `projects/{project_id}/locations/{location_id}/dataSources/{data_source_id}`",
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1/projects/{projectsId}/dataSources/{dataSourcesId}",
-              "description": "Retrieves a supported data source and returns its settings, which can be used for UI rendering."
-            },
-            "list": {
-              "description": "Lists supported data sources and returns their settings, which can be used for UI rendering.",
-              "response": {
-                "$ref": "ListDataSourcesResponse"
-              },
-              "httpMethod": "GET",
-              "id": "bigquerydatatransfer.projects.dataSources.list",
-              "path": "v1/{+parent}/dataSources",
-              "parameterOrder": [
-                "parent"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/bigquery",
-                "https://www.googleapis.com/auth/bigquery.readonly",
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only"
-              ],
-              "flatPath": "v1/projects/{projectsId}/dataSources",
-              "parameters": {
-                "parent": {
-                  "location": "path",
-                  "required": true,
-                  "pattern": "^projects/[^/]+$",
-                  "type": "string",
-                  "description": "Required. The BigQuery project id for which data sources should be returned. Must be in the form: `projects/{project_id}` or `projects/{project_id}/locations/{location_id}"
-                },
-                "pageToken": {
-                  "type": "string",
-                  "description": "Pagination token, which can be used to request a specific page of `ListDataSourcesRequest` list results. For multiple-page results, `ListDataSourcesResponse` outputs a `next_page` token, which can be used as the `page_token` value to request the next page of list results.",
-                  "location": "query"
-                },
-                "pageSize": {
-                  "location": "query",
-                  "description": "Page size. The default page size is the maximum value of 1000 results.",
-                  "format": "int32",
-                  "type": "integer"
-                }
-              }
-            }
-          }
-        },
-        "locations": {
-          "resources": {
-            "transferConfigs": {
-              "resources": {
-                "runs": {
-                  "resources": {
-                    "transferLogs": {
-                      "methods": {
-                        "list": {
-                          "description": "Returns user facing log messages for the data transfer run.",
-                          "path": "v1/{+parent}/transferLogs",
-                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}/runs/{runsId}/transferLogs",
-                          "parameters": {
-                            "parent": {
-                              "location": "path",
-                              "type": "string",
-                              "required": true,
-                              "description": "Required. Transfer run name in the form: `projects/{project_id}/transferConfigs/{config_id}/runs/{run_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}/runs/{run_id}`",
-                              "pattern": "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+/runs/[^/]+$"
-                            },
-                            "pageToken": {
-                              "location": "query",
-                              "description": "Pagination token, which can be used to request a specific page of `ListTransferLogsRequest` list results. For multiple-page results, `ListTransferLogsResponse` outputs a `next_page` token, which can be used as the `page_token` value to request the next page of list results.",
-                              "type": "string"
-                            },
-                            "messageTypes": {
-                              "location": "query",
-                              "enumDescriptions": [
-                                "No severity specified.",
-                                "Informational message.",
-                                "Warning message.",
-                                "Error message."
-                              ],
-                              "enum": [
-                                "MESSAGE_SEVERITY_UNSPECIFIED",
-                                "INFO",
-                                "WARNING",
-                                "ERROR"
-                              ],
-                              "repeated": true,
-                              "type": "string",
-                              "description": "Message types to return. If not populated - INFO, WARNING and ERROR messages are returned."
-                            },
-                            "pageSize": {
-                              "location": "query",
-                              "description": "Page size. The default page size is the maximum value of 1000 results.",
-                              "format": "int32",
-                              "type": "integer"
-                            }
-                          },
-                          "id": "bigquerydatatransfer.projects.locations.transferConfigs.runs.transferLogs.list",
-                          "parameterOrder": [
-                            "parent"
-                          ],
-                          "httpMethod": "GET",
-                          "scopes": [
-                            "https://www.googleapis.com/auth/bigquery",
-                            "https://www.googleapis.com/auth/bigquery.readonly",
-                            "https://www.googleapis.com/auth/cloud-platform",
-                            "https://www.googleapis.com/auth/cloud-platform.read-only"
-                          ],
-                          "response": {
-                            "$ref": "ListTransferLogsResponse"
-                          }
-                        }
-                      }
-                    }
-                  },
-                  "methods": {
-                    "delete": {
-                      "httpMethod": "DELETE",
-                      "response": {
-                        "$ref": "Empty"
-                      },
-                      "id": "bigquerydatatransfer.projects.locations.transferConfigs.runs.delete",
-                      "description": "Deletes the specified transfer run.",
-                      "path": "v1/{+name}",
-                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}/runs/{runsId}",
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "parameters": {
-                        "name": {
-                          "pattern": "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+/runs/[^/]+$",
-                          "type": "string",
-                          "description": "Required. The field will contain name of the resource requested, for example: `projects/{project_id}/transferConfigs/{config_id}/runs/{run_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}/runs/{run_id}`",
-                          "location": "path",
-                          "required": true
-                        }
-                      },
-                      "scopes": [
-                        "https://www.googleapis.com/auth/bigquery",
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ]
-                    },
-                    "get": {
-                      "scopes": [
-                        "https://www.googleapis.com/auth/bigquery",
-                        "https://www.googleapis.com/auth/bigquery.readonly",
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloud-platform.read-only"
-                      ],
-                      "parameters": {
-                        "name": {
-                          "location": "path",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+/runs/[^/]+$",
-                          "description": "Required. The field will contain name of the resource requested, for example: `projects/{project_id}/transferConfigs/{config_id}/runs/{run_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}/runs/{run_id}`",
-                          "required": true,
-                          "type": "string"
-                        }
-                      },
-                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}/runs/{runsId}",
-                      "httpMethod": "GET",
-                      "description": "Returns information about the particular transfer run.",
-                      "response": {
-                        "$ref": "TransferRun"
-                      },
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "id": "bigquerydatatransfer.projects.locations.transferConfigs.runs.get",
-                      "path": "v1/{+name}"
-                    },
-                    "list": {
-                      "id": "bigquerydatatransfer.projects.locations.transferConfigs.runs.list",
-                      "response": {
-                        "$ref": "ListTransferRunsResponse"
-                      },
-                      "scopes": [
-                        "https://www.googleapis.com/auth/bigquery",
-                        "https://www.googleapis.com/auth/bigquery.readonly",
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloud-platform.read-only"
-                      ],
-                      "path": "v1/{+parent}/runs",
-                      "httpMethod": "GET",
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}/runs",
-                      "parameters": {
-                        "pageSize": {
-                          "description": "Page size. The default page size is the maximum value of 1000 results.",
-                          "location": "query",
-                          "type": "integer",
-                          "format": "int32"
-                        },
-                        "states": {
-                          "type": "string",
-                          "location": "query",
-                          "enum": [
-                            "TRANSFER_STATE_UNSPECIFIED",
-                            "PENDING",
-                            "RUNNING",
-                            "SUCCEEDED",
-                            "FAILED",
-                            "CANCELLED"
-                          ],
-                          "description": "When specified, only transfer runs with requested states are returned.",
-                          "repeated": true,
-                          "enumDescriptions": [
-                            "State placeholder.",
-                            "Data transfer is scheduled and is waiting to be picked up by data transfer backend.",
-                            "Data transfer is in progress.",
-                            "Data transfer completed successfully.",
-                            "Data transfer failed.",
-                            "Data transfer is cancelled."
-                          ]
-                        },
-                        "parent": {
-                          "type": "string",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+$",
-                          "description": "Required. Name of transfer configuration for which transfer runs should be retrieved. Format of transfer configuration resource name is: `projects/{project_id}/transferConfigs/{config_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`.",
-                          "required": true,
-                          "location": "path"
-                        },
-                        "pageToken": {
-                          "description": "Pagination token, which can be used to request a specific page of `ListTransferRunsRequest` list results. For multiple-page results, `ListTransferRunsResponse` outputs a `next_page` token, which can be used as the `page_token` value to request the next page of list results.",
-                          "location": "query",
-                          "type": "string"
-                        },
-                        "runAttempt": {
-                          "description": "Indicates how run attempts are to be pulled.",
-                          "enum": [
-                            "RUN_ATTEMPT_UNSPECIFIED",
-                            "LATEST"
-                          ],
-                          "location": "query",
-                          "type": "string",
-                          "enumDescriptions": [
-                            "All runs should be returned.",
-                            "Only latest run per day should be returned."
-                          ]
-                        }
-                      },
-                      "description": "Returns information about running and completed jobs."
-                    }
-                  }
-                }
-              },
-              "methods": {
-                "get": {
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+$",
-                      "required": true,
-                      "location": "path",
-                      "description": "Required. The field will contain name of the resource requested, for example: `projects/{project_id}/transferConfigs/{config_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/bigquery",
-                    "https://www.googleapis.com/auth/bigquery.readonly",
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only"
-                  ],
-                  "path": "v1/{+name}",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}",
-                  "response": {
-                    "$ref": "TransferConfig"
-                  },
-                  "httpMethod": "GET",
-                  "id": "bigquerydatatransfer.projects.locations.transferConfigs.get",
-                  "description": "Returns information about a data transfer config."
-                },
-                "list": {
-                  "httpMethod": "GET",
-                  "description": "Returns information about all data transfers in the project.",
-                  "id": "bigquerydatatransfer.projects.locations.transferConfigs.list",
-                  "response": {
-                    "$ref": "ListTransferConfigsResponse"
-                  },
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/bigquery",
-                    "https://www.googleapis.com/auth/bigquery.readonly",
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only"
-                  ],
-                  "path": "v1/{+parent}/transferConfigs",
-                  "parameters": {
-                    "parent": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Required. The BigQuery project id for which data sources should be returned: `projects/{project_id}` or `projects/{project_id}/locations/{location_id}`",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$"
-                    },
-                    "pageToken": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "Pagination token, which can be used to request a specific page of `ListTransfersRequest` list results. For multiple-page results, `ListTransfersResponse` outputs a `next_page` token, which can be used as the `page_token` value to request the next page of list results."
-                    },
-                    "pageSize": {
-                      "type": "integer",
-                      "format": "int32",
-                      "location": "query",
-                      "description": "Page size. The default page size is the maximum value of 1000 results."
-                    },
-                    "dataSourceIds": {
-                      "location": "query",
-                      "description": "When specified, only configurations of requested data sources are returned.",
-                      "type": "string",
-                      "repeated": true
-                    }
-                  },
-                  "parameterOrder": [
-                    "parent"
-                  ]
-                },
-                "scheduleRuns": {
-                  "id": "bigquerydatatransfer.projects.locations.transferConfigs.scheduleRuns",
-                  "description": "Creates transfer runs for a time range [start_time, end_time]. For each date - or whatever granularity the data source supports - in the range, one transfer run is created. Note that runs are created per UTC time in the time range. DEPRECATED: use StartManualTransferRuns instead.",
-                  "parameters": {
-                    "parent": {
-                      "required": true,
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+$",
-                      "type": "string",
-                      "description": "Required. Transfer configuration name in the form: `projects/{project_id}/transferConfigs/{config_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`."
-                    }
-                  },
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}:scheduleRuns",
-                  "request": {
-                    "$ref": "ScheduleTransferRunsRequest"
-                  },
-                  "httpMethod": "POST",
-                  "path": "v1/{+parent}:scheduleRuns",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/bigquery",
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "response": {
-                    "$ref": "ScheduleTransferRunsResponse"
-                  },
-                  "parameterOrder": [
-                    "parent"
-                  ]
-                },
-                "create": {
-                  "description": "Creates a new data transfer configuration.",
-                  "request": {
-                    "$ref": "TransferConfig"
-                  },
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "path": "v1/{+parent}/transferConfigs",
-                  "id": "bigquerydatatransfer.projects.locations.transferConfigs.create",
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs",
-                  "httpMethod": "POST",
-                  "response": {
-                    "$ref": "TransferConfig"
-                  },
-                  "parameters": {
-                    "versionInfo": {
-                      "description": "Optional version info. If users want to find a very recent access token, that is, immediately after approving access, users have to set the version_info claim in the token request. To obtain the version_info, users must use the \"none+gsession\" response type. which be return a version_info back in the authorization response which be be put in a JWT claim in the token request.",
-                      "location": "query",
-                      "type": "string"
-                    },
-                    "serviceAccountName": {
-                      "type": "string",
-                      "description": "Optional service account name. If this field is set, transfer config will be created with this service account credentials. It requires that requesting user calling this API has permissions to act as this service account.",
-                      "location": "query"
-                    },
-                    "authorizationCode": {
-                      "location": "query",
-                      "type": "string",
-                      "description": "Optional OAuth2 authorization code to use with this transfer configuration. This is required if new credentials are needed, as indicated by `CheckValidCreds`. In order to obtain authorization_code, please make a request to https://www.gstatic.com/bigquerydatatransfer/oauthz/auth?client_id=&scope=&redirect_uri= * client_id should be OAuth client_id of BigQuery DTS API for the given data source returned by ListDataSources method. * data_source_scopes are the scopes returned by ListDataSources method. * redirect_uri is an optional parameter. If not specified, then authorization code is posted to the opener of authorization flow window. Otherwise it will be sent to the redirect uri. A special value of urn:ietf:wg:oauth:2.0:oob means that authorization code should be returned in the title bar of the browser, with the page text prompting the user to copy the code and paste it in the application."
-                    },
-                    "parent": {
-                      "location": "path",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "type": "string",
-                      "description": "Required. The BigQuery project id where the transfer configuration should be created. Must be in the format projects/{project_id}/locations/{location_id} or projects/{project_id}. If specified location and location of the destination bigquery dataset do not match - the request will fail."
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ]
-                },
-                "delete": {
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/bigquery",
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "id": "bigquerydatatransfer.projects.locations.transferConfigs.delete",
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "httpMethod": "DELETE",
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}",
-                  "path": "v1/{+name}",
-                  "parameters": {
-                    "name": {
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+$",
-                      "location": "path",
-                      "description": "Required. The field will contain name of the resource requested, for example: `projects/{project_id}/transferConfigs/{config_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`"
-                    }
-                  },
-                  "description": "Deletes a data transfer configuration, including any associated transfer runs and logs."
-                },
-                "patch": {
-                  "response": {
-                    "$ref": "TransferConfig"
-                  },
-                  "parameters": {
-                    "versionInfo": {
-                      "description": "Optional version info. If users want to find a very recent access token, that is, immediately after approving access, users have to set the version_info claim in the token request. To obtain the version_info, users must use the \"none+gsession\" response type. which be return a version_info back in the authorization response which be be put in a JWT claim in the token request.",
-                      "location": "query",
-                      "type": "string"
-                    },
-                    "updateMask": {
-                      "type": "string",
-                      "description": "Required. Required list of fields to be updated in this request.",
-                      "location": "query",
-                      "format": "google-fieldmask"
-                    },
-                    "name": {
-                      "description": "The resource name of the transfer config. Transfer config names have the form of `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. The name is automatically generated based on the config_id specified in CreateTransferConfigRequest along with project_id and region. If config_id is not provided, usually a uuid, even though it is not guaranteed or required, will be generated for config_id.",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+$",
-                      "location": "path"
-                    },
-                    "authorizationCode": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "Optional OAuth2 authorization code to use with this transfer configuration. If it is provided, the transfer configuration will be associated with the authorizing user. In order to obtain authorization_code, please make a request to https://www.gstatic.com/bigquerydatatransfer/oauthz/auth?client_id=&scope=&redirect_uri= * client_id should be OAuth client_id of BigQuery DTS API for the given data source returned by ListDataSources method. * data_source_scopes are the scopes returned by ListDataSources method. * redirect_uri is an optional parameter. If not specified, then authorization code is posted to the opener of authorization flow window. Otherwise it will be sent to the redirect uri. A special value of urn:ietf:wg:oauth:2.0:oob means that authorization code should be returned in the title bar of the browser, with the page text prompting the user to copy the code and paste it in the application."
-                    },
-                    "serviceAccountName": {
-                      "description": "Optional service account name. If this field is set and \"service_account_name\" is set in update_mask, transfer config will be updated to use this service account credentials. It requires that requesting user calling this API has permissions to act as this service account.",
-                      "type": "string",
-                      "location": "query"
-                    }
-                  },
-                  "description": "Updates a data transfer configuration. All fields must be set, even if they are not updated.",
-                  "httpMethod": "PATCH",
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "path": "v1/{+name}",
-                  "id": "bigquerydatatransfer.projects.locations.transferConfigs.patch",
-                  "request": {
-                    "$ref": "TransferConfig"
-                  }
-                },
-                "startManualRuns": {
-                  "description": "Start manual transfer runs to be executed now with schedule_time equal to current time. The transfer runs can be created for a time range where the run_time is between start_time (inclusive) and end_time (exclusive), or for a specific run_time.",
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/transferConfigs/{transferConfigsId}:startManualRuns",
-                  "request": {
-                    "$ref": "StartManualTransferRunsRequest"
-                  },
-                  "path": "v1/{+parent}:startManualRuns",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/bigquery",
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "response": {
-                    "$ref": "StartManualTransferRunsResponse"
-                  },
-                  "id": "bigquerydatatransfer.projects.locations.transferConfigs.startManualRuns",
-                  "parameters": {
-                    "parent": {
-                      "location": "path",
-                      "required": true,
-                      "type": "string",
-                      "description": "Transfer configuration name in the form: `projects/{project_id}/transferConfigs/{config_id}` or `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`.",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/transferConfigs/[^/]+$"
-                    }
-                  },
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "httpMethod": "POST"
-                }
-              }
-            },
-            "dataSources": {
-              "methods": {
-                "get": {
-                  "parameters": {
-                    "name": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+/dataSources/[^/]+$",
-                      "description": "Required. The field will contain name of the resource requested, for example: `projects/{project_id}/dataSources/{data_source_id}` or `projects/{project_id}/locations/{location_id}/dataSources/{data_source_id}`",
-                      "location": "path",
-                      "type": "string",
-                      "required": true
-                    }
-                  },
-                  "id": "bigquerydatatransfer.projects.locations.dataSources.get",
-                  "response": {
-                    "$ref": "DataSource"
-                  },
-                  "httpMethod": "GET",
-                  "path": "v1/{+name}",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/bigquery",
-                    "https://www.googleapis.com/auth/bigquery.readonly",
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only"
-                  ],
-                  "description": "Retrieves a supported data source and returns its settings, which can be used for UI rendering.",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/dataSources/{dataSourcesId}"
-                },
-                "list": {
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/bigquery",
-                    "https://www.googleapis.com/auth/bigquery.readonly",
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only"
-                  ],
-                  "httpMethod": "GET",
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/dataSources",
-                  "response": {
-                    "$ref": "ListDataSourcesResponse"
-                  },
-                  "path": "v1/{+parent}/dataSources",
-                  "description": "Lists supported data sources and returns their settings, which can be used for UI rendering.",
-                  "id": "bigquerydatatransfer.projects.locations.dataSources.list",
-                  "parameters": {
-                    "pageToken": {
-                      "type": "string",
-                      "description": "Pagination token, which can be used to request a specific page of `ListDataSourcesRequest` list results. For multiple-page results, `ListDataSourcesResponse` outputs a `next_page` token, which can be used as the `page_token` value to request the next page of list results.",
-                      "location": "query"
-                    },
-                    "parent": {
-                      "type": "string",
-                      "description": "Required. The BigQuery project id for which data sources should be returned. Must be in the form: `projects/{project_id}` or `projects/{project_id}/locations/{location_id}",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "required": true,
-                      "location": "path"
-                    },
-                    "pageSize": {
-                      "type": "integer",
-                      "location": "query",
-                      "description": "Page size. The default page size is the maximum value of 1000 results.",
-                      "format": "int32"
-                    }
-                  }
-                },
-                "checkValidCreds": {
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "path": "v1/{+name}:checkValidCreds",
-                  "parameters": {
-                    "name": {
-                      "description": "Required. The data source in the form: `projects/{project_id}/dataSources/{data_source_id}` or `projects/{project_id}/locations/{location_id}/dataSources/{data_source_id}`.",
-                      "type": "string",
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/dataSources/[^/]+$",
-                      "required": true
-                    }
-                  },
-                  "response": {
-                    "$ref": "CheckValidCredsResponse"
-                  },
-                  "id": "bigquerydatatransfer.projects.locations.dataSources.checkValidCreds",
-                  "httpMethod": "POST",
-                  "description": "Returns true if valid credentials exist for the given data source and requesting user. Some data sources doesn't support service account, so we need to talk to them on behalf of the end user. This API just checks whether we have OAuth token for the particular user, which is a pre-requisite before user can create a transfer config.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/bigquery",
-                    "https://www.googleapis.com/auth/bigquery.readonly",
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only"
-                  ],
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/dataSources/{dataSourcesId}:checkValidCreds",
-                  "request": {
-                    "$ref": "CheckValidCredsRequest"
-                  }
-                }
-              }
-            }
-          },
-          "methods": {
-            "get": {
-              "id": "bigquerydatatransfer.projects.locations.get",
-              "flatPath": "v1/projects/{projectsId}/locations/{locationsId}",
-              "parameterOrder": [
-                "name"
-              ],
-              "description": "Gets information about a location.",
-              "response": {
-                "$ref": "Location"
-              },
-              "httpMethod": "GET",
-              "path": "v1/{+name}",
-              "scopes": [
-                "https://www.googleapis.com/auth/bigquery",
-                "https://www.googleapis.com/auth/bigquery.readonly",
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only"
-              ],
-              "parameters": {
-                "name": {
-                  "description": "Resource name for the location.",
-                  "type": "string",
-                  "required": true,
-                  "location": "path",
-                  "pattern": "^projects/[^/]+/locations/[^/]+$"
-                }
-              }
-            },
-            "list": {
-              "path": "v1/{+name}/locations",
-              "parameters": {
-                "pageToken": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "The standard list page token."
-                },
-                "name": {
-                  "description": "The resource that owns the locations collection, if applicable.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "pattern": "^projects/[^/]+$"
-                },
-                "filter": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "The standard list filter."
-                },
-                "pageSize": {
-                  "type": "integer",
-                  "format": "int32",
-                  "description": "The standard list page size.",
-                  "location": "query"
-                }
-              },
-              "httpMethod": "GET",
-              "flatPath": "v1/projects/{projectsId}/locations",
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "ListLocationsResponse"
-              },
-              "id": "bigquerydatatransfer.projects.locations.list",
-              "description": "Lists information about the supported locations for this service.",
-              "scopes": [
-                "https://www.googleapis.com/auth/bigquery",
-                "https://www.googleapis.com/auth/bigquery.readonly",
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only"
-              ]
-            }
-          }
-        }
-      }
-    }
-  },
-  "schemas": {
-    "ListLocationsResponse": {
-      "type": "object",
-      "description": "The response message for Locations.ListLocations.",
-      "properties": {
-        "locations": {
-          "description": "A list of locations that matches the specified filter in the request.",
-          "items": {
-            "$ref": "Location"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "description": "The standard List next-page token.",
-          "type": "string"
-        }
-      },
-      "id": "ListLocationsResponse"
-    },
-    "ListDataSourcesResponse": {
-      "id": "ListDataSourcesResponse",
-      "properties": {
-        "nextPageToken": {
-          "description": "Output only. The next-pagination token. For multiple-page list results, this token can be used as the `ListDataSourcesRequest.page_token` to request the next page of list results.",
-          "readOnly": true,
-          "type": "string"
-        },
-        "dataSources": {
-          "description": "List of supported data sources and their transfer settings.",
-          "type": "array",
-          "items": {
-            "$ref": "DataSource"
-          }
-        }
-      },
-      "description": "Returns list of supported data sources and their metadata.",
-      "type": "object"
-    },
-    "ListTransferRunsResponse": {
-      "type": "object",
-      "id": "ListTransferRunsResponse",
-      "properties": {
-        "transferRuns": {
-          "readOnly": true,
-          "items": {
-            "$ref": "TransferRun"
-          },
-          "type": "array",
-          "description": "Output only. The stored pipeline transfer runs."
-        },
-        "nextPageToken": {
-          "description": "Output only. The next-pagination token. For multiple-page list results, this token can be used as the `ListTransferRunsRequest.page_token` to request the next page of list results.",
-          "readOnly": true,
-          "type": "string"
-        }
-      },
-      "description": "The returned list of pipelines in the project."
-    },
-    "Status": {
-      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
-      "id": "Status",
-      "properties": {
-        "message": {
-          "type": "string",
-          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client."
-        },
-        "code": {
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "details": {
-          "items": {
-            "additionalProperties": {
-              "type": "any",
-              "description": "Properties of the object. Contains field @type with type URL."
             },
             "type": "object"
-          },
-          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
-          "type": "array"
+        },
+        "TransferMessage": {
+            "description": "Represents a user facing message for a particular data transfer run.",
+            "id": "TransferMessage",
+            "properties": {
+                "messageText": {
+                    "description": "Message text.",
+                    "type": "string"
+                },
+                "messageTime": {
+                    "description": "Time when message was logged.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "severity": {
+                    "description": "Message severity.",
+                    "enum": [
+                        "MESSAGE_SEVERITY_UNSPECIFIED",
+                        "INFO",
+                        "WARNING",
+                        "ERROR"
+                    ],
+                    "enumDescriptions": [
+                        "No severity specified.",
+                        "Informational message.",
+                        "Warning message.",
+                        "Error message."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TransferRun": {
+            "description": "Represents a data transfer run.",
+            "id": "TransferRun",
+            "properties": {
+                "dataSourceId": {
+                    "description": "Output only. Data source id.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "destinationDatasetId": {
+                    "description": "Output only. The BigQuery target dataset id.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "emailPreferences": {
+                    "$ref": "EmailPreferences",
+                    "description": "Output only. Email notifications will be sent according to these preferences to the email address of the user who owns the transfer config this run was derived from.",
+                    "readOnly": true
+                },
+                "endTime": {
+                    "description": "Output only. Time when transfer run ended. Parameter ignored by server for input requests.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "errorStatus": {
+                    "$ref": "Status",
+                    "description": "Status of the transfer run."
+                },
+                "name": {
+                    "description": "The resource name of the transfer run. Transfer run names have the form `projects/{project_id}/locations/{location}/transferConfigs/{config_id}/runs/{run_id}`. The name is ignored when creating a transfer run.",
+                    "type": "string"
+                },
+                "notificationPubsubTopic": {
+                    "description": "Output only. Pub/Sub topic where a notification will be sent after this transfer run finishes",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "params": {
+                    "additionalProperties": {
+                        "description": "Properties of the object.",
+                        "type": "any"
+                    },
+                    "description": "Output only. Data transfer specific parameters.",
+                    "readOnly": true,
+                    "type": "object"
+                },
+                "runTime": {
+                    "description": "For batch transfer runs, specifies the date and time of the data should be ingested.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "schedule": {
+                    "description": "Output only. Describes the schedule of this transfer run if it was created as part of a regular schedule. For batch transfer runs that are scheduled manually, this is empty. NOTE: the system might choose to delay the schedule depending on the current load, so `schedule_time` doesn't always match this.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "scheduleTime": {
+                    "description": "Minimum time after which a transfer run can be started.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "startTime": {
+                    "description": "Output only. Time when transfer run was started. Parameter ignored by server for input requests.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "state": {
+                    "description": "Data transfer run state. Ignored for input requests.",
+                    "enum": [
+                        "TRANSFER_STATE_UNSPECIFIED",
+                        "PENDING",
+                        "RUNNING",
+                        "SUCCEEDED",
+                        "FAILED",
+                        "CANCELLED"
+                    ],
+                    "enumDescriptions": [
+                        "State placeholder (0).",
+                        "Data transfer is scheduled and is waiting to be picked up by data transfer backend (2).",
+                        "Data transfer is in progress (3).",
+                        "Data transfer completed successfully (4).",
+                        "Data transfer failed (5).",
+                        "Data transfer is cancelled (6)."
+                    ],
+                    "type": "string"
+                },
+                "updateTime": {
+                    "description": "Output only. Last time the data transfer run state was updated.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "userId": {
+                    "description": "Deprecated. Unique ID of the user on whose behalf transfer is done.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         }
-      },
-      "type": "object"
     },
-    "CheckValidCredsRequest": {
-      "type": "object",
-      "properties": {},
-      "description": "A request to determine whether the user has valid credentials. This method is used to limit the number of OAuth popups in the user interface. The user id is inferred from the API call context. If the data source has the Google+ authorization type, this method returns false, as it cannot be determined whether the credentials are already valid merely based on the user id.",
-      "id": "CheckValidCredsRequest"
-    },
-    "EmailPreferences": {
-      "description": "Represents preferences for sending email notifications for transfer run events.",
-      "properties": {
-        "enableFailureEmail": {
-          "type": "boolean",
-          "description": "If true, email notifications will be sent on transfer run failures."
-        }
-      },
-      "type": "object",
-      "id": "EmailPreferences"
-    },
-    "StartManualTransferRunsResponse": {
-      "type": "object",
-      "properties": {
-        "runs": {
-          "description": "The transfer runs that were created.",
-          "type": "array",
-          "items": {
-            "$ref": "TransferRun"
-          }
-        }
-      },
-      "id": "StartManualTransferRunsResponse",
-      "description": "A response to start manual transfer runs."
-    },
-    "StartManualTransferRunsRequest": {
-      "properties": {
-        "requestedTimeRange": {
-          "$ref": "TimeRange",
-          "description": "Time range for the transfer runs that should be started."
-        },
-        "requestedRunTime": {
-          "type": "string",
-          "description": "Specific run_time for a transfer run to be started. The requested_run_time must not be in the future.",
-          "format": "google-datetime"
-        }
-      },
-      "id": "StartManualTransferRunsRequest",
-      "type": "object",
-      "description": "A request to start manual transfer runs."
-    },
-    "TimeRange": {
-      "description": "A specification for a time range, this will request transfer runs with run_time between start_time (inclusive) and end_time (exclusive).",
-      "properties": {
-        "endTime": {
-          "description": "End time of the range of transfer runs. For example, `\"2017-05-30T00:00:00+00:00\"`. The end_time must not be in the future. Creates transfer runs where run_time is in the range between start_time (inclusive) and end_time (exclusive).",
-          "type": "string",
-          "format": "google-datetime"
-        },
-        "startTime": {
-          "description": "Start time of the range of transfer runs. For example, `\"2017-05-25T00:00:00+00:00\"`. The start_time must be strictly less than the end_time. Creates transfer runs where run_time is in the range between start_time (inclusive) and end_time (exclusive).",
-          "type": "string",
-          "format": "google-datetime"
-        }
-      },
-      "type": "object",
-      "id": "TimeRange"
-    },
-    "DataSource": {
-      "properties": {
-        "minimumScheduleInterval": {
-          "description": "The minimum interval for scheduler to schedule runs.",
-          "type": "string",
-          "format": "google-duration"
-        },
-        "manualRunsDisabled": {
-          "type": "boolean",
-          "description": "Disables backfilling and manual run scheduling for the data source."
-        },
-        "dataRefreshType": {
-          "enum": [
-            "DATA_REFRESH_TYPE_UNSPECIFIED",
-            "SLIDING_WINDOW",
-            "CUSTOM_SLIDING_WINDOW"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "The data source won't support data auto refresh, which is default value.",
-            "The data source supports data auto refresh, and runs will be scheduled for the past few days. Does not allow custom values to be set for each transfer config.",
-            "The data source supports data auto refresh, and runs will be scheduled for the past few days. Allows custom values to be set for each transfer config."
-          ],
-          "description": "Specifies whether the data source supports automatic data refresh for the past few days, and how it's supported. For some data sources, data might not be complete until a few days later, so it's useful to refresh data automatically."
-        },
-        "defaultSchedule": {
-          "description": "Default data transfer schedule. Examples of valid schedules include: `1st,3rd monday of month 15:30`, `every wed,fri of jan,jun 13:15`, and `first sunday of quarter 00:00`.",
-          "type": "string"
-        },
-        "updateDeadlineSeconds": {
-          "description": "The number of seconds to wait for an update from the data source before the Data Transfer Service marks the transfer as FAILED.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "displayName": {
-          "description": "User friendly data source name.",
-          "type": "string"
-        },
-        "dataSourceId": {
-          "description": "Data source id.",
-          "type": "string"
-        },
-        "parameters": {
-          "description": "Data source parameters.",
-          "type": "array",
-          "items": {
-            "$ref": "DataSourceParameter"
-          }
-        },
-        "name": {
-          "description": "Output only. Data source resource name.",
-          "readOnly": true,
-          "type": "string"
-        },
-        "description": {
-          "description": "User friendly data source description string.",
-          "type": "string"
-        },
-        "clientId": {
-          "description": "Data source client id which should be used to receive refresh token.",
-          "type": "string"
-        },
-        "authorizationType": {
-          "description": "Indicates the type of authorization.",
-          "type": "string",
-          "enum": [
-            "AUTHORIZATION_TYPE_UNSPECIFIED",
-            "AUTHORIZATION_CODE",
-            "GOOGLE_PLUS_AUTHORIZATION_CODE",
-            "FIRST_PARTY_OAUTH"
-          ],
-          "enumDescriptions": [
-            "Type unspecified.",
-            "Use OAuth 2 authorization codes that can be exchanged for a refresh token on the backend.",
-            "Return an authorization code for a given Google+ page that can then be exchanged for a refresh token on the backend.",
-            "Use First Party OAuth based on Loas Owned Clients. First Party OAuth doesn't require a refresh token to get an offline access token. Instead, it uses a client-signed JWT assertion to retrieve an access token."
-          ]
-        },
-        "defaultDataRefreshWindowDays": {
-          "description": "Default data refresh window on days. Only meaningful when `data_refresh_type` = `SLIDING_WINDOW`.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "supportsCustomSchedule": {
-          "type": "boolean",
-          "description": "Specifies whether the data source supports a user defined schedule, or operates on the default schedule. When set to `true`, user can override default schedule."
-        },
-        "supportsMultipleTransfers": {
-          "type": "boolean",
-          "description": "Deprecated. This field has no effect."
-        },
-        "helpUrl": {
-          "description": "Url for the help document for this data source.",
-          "type": "string"
-        },
-        "transferType": {
-          "enumDescriptions": [
-            "Invalid or Unknown transfer type placeholder.",
-            "Batch data transfer.",
-            "Streaming data transfer. Streaming data source currently doesn't support multiple transfer configs per project."
-          ],
-          "enum": [
-            "TRANSFER_TYPE_UNSPECIFIED",
-            "BATCH",
-            "STREAMING"
-          ],
-          "description": "Deprecated. This field has no effect.",
-          "type": "string"
-        },
-        "scopes": {
-          "description": "Api auth scopes for which refresh token needs to be obtained. These are scopes needed by a data source to prepare data and ingest them into BigQuery, e.g., https://www.googleapis.com/auth/bigquery",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        }
-      },
-      "id": "DataSource",
-      "description": "Represents data source metadata. Metadata is sufficient to render UI and request proper OAuth tokens.",
-      "type": "object"
-    },
-    "ScheduleTransferRunsRequest": {
-      "id": "ScheduleTransferRunsRequest",
-      "description": "A request to schedule transfer runs for a time range.",
-      "properties": {
-        "startTime": {
-          "type": "string",
-          "description": "Required. Start time of the range of transfer runs. For example, `\"2017-05-25T00:00:00+00:00\"`.",
-          "format": "google-datetime"
-        },
-        "endTime": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "Required. End time of the range of transfer runs. For example, `\"2017-05-30T00:00:00+00:00\"`."
-        }
-      },
-      "type": "object"
-    },
-    "Location": {
-      "id": "Location",
-      "properties": {
-        "locationId": {
-          "description": "The canonical id for this location. For example: `\"us-east1\"`.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Resource name for the location, which may vary between implementations. For example: `\"projects/example-project/locations/us-east1\"`",
-          "type": "string"
-        },
-        "labels": {
-          "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}",
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          }
-        },
-        "metadata": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "description": "Service-specific metadata. For example the available capacity at the given location."
-        },
-        "displayName": {
-          "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\".",
-          "type": "string"
-        }
-      },
-      "description": "A resource that represents Google Cloud Platform location.",
-      "type": "object"
-    },
-    "TransferMessage": {
-      "description": "Represents a user facing message for a particular data transfer run.",
-      "type": "object",
-      "properties": {
-        "severity": {
-          "enumDescriptions": [
-            "No severity specified.",
-            "Informational message.",
-            "Warning message.",
-            "Error message."
-          ],
-          "type": "string",
-          "description": "Message severity.",
-          "enum": [
-            "MESSAGE_SEVERITY_UNSPECIFIED",
-            "INFO",
-            "WARNING",
-            "ERROR"
-          ]
-        },
-        "messageText": {
-          "type": "string",
-          "description": "Message text."
-        },
-        "messageTime": {
-          "description": "Time when message was logged.",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      },
-      "id": "TransferMessage"
-    },
-    "ListTransferConfigsResponse": {
-      "description": "The returned list of pipelines in the project.",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "readOnly": true,
-          "description": "Output only. The next-pagination token. For multiple-page list results, this token can be used as the `ListTransferConfigsRequest.page_token` to request the next page of list results."
-        },
-        "transferConfigs": {
-          "readOnly": true,
-          "description": "Output only. The stored pipeline transfer configurations.",
-          "type": "array",
-          "items": {
-            "$ref": "TransferConfig"
-          }
-        }
-      },
-      "type": "object",
-      "id": "ListTransferConfigsResponse"
-    },
-    "TransferConfig": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "The resource name of the transfer config. Transfer config names have the form of `projects/{project_id}/locations/{region}/transferConfigs/{config_id}`. The name is automatically generated based on the config_id specified in CreateTransferConfigRequest along with project_id and region. If config_id is not provided, usually a uuid, even though it is not guaranteed or required, will be generated for config_id.",
-          "type": "string"
-        },
-        "dataSourceId": {
-          "description": "Data source id. Cannot be changed once data transfer is created.",
-          "type": "string"
-        },
-        "datasetRegion": {
-          "description": "Output only. Region in which BigQuery dataset is located.",
-          "type": "string",
-          "readOnly": true
-        },
-        "schedule": {
-          "type": "string",
-          "description": "Data transfer schedule. If the data source does not support a custom schedule, this should be empty. If it is empty, the default value for the data source will be used. The specified times are in UTC. Examples of valid format: `1st,3rd monday of month 15:30`, `every wed,fri of jan,jun 13:15`, and `first sunday of quarter 00:00`. See more explanation about the format here: https://cloud.google.com/appengine/docs/flexible/python/scheduling-jobs-with-cron-yaml#the_schedule_format NOTE: the granularity should be at least 8 hours, or less frequent."
-        },
-        "notificationPubsubTopic": {
-          "description": "Pub/Sub topic where notifications will be sent after transfer runs associated with this transfer config finish.",
-          "type": "string"
-        },
-        "state": {
-          "enumDescriptions": [
-            "State placeholder.",
-            "Data transfer is scheduled and is waiting to be picked up by data transfer backend.",
-            "Data transfer is in progress.",
-            "Data transfer completed successfully.",
-            "Data transfer failed.",
-            "Data transfer is cancelled."
-          ],
-          "readOnly": true,
-          "description": "Output only. State of the most recently updated transfer run.",
-          "enum": [
-            "TRANSFER_STATE_UNSPECIFIED",
-            "PENDING",
-            "RUNNING",
-            "SUCCEEDED",
-            "FAILED",
-            "CANCELLED"
-          ],
-          "type": "string"
-        },
-        "emailPreferences": {
-          "$ref": "EmailPreferences",
-          "description": "Email notifications will be sent according to these preferences to the email address of the user who owns this transfer config."
-        },
-        "scheduleOptions": {
-          "description": "Options customizing the data transfer schedule.",
-          "$ref": "ScheduleOptions"
-        },
-        "destinationDatasetId": {
-          "type": "string",
-          "description": "The BigQuery target dataset id."
-        },
-        "userId": {
-          "description": "Deprecated. Unique ID of the user on whose behalf transfer is done.",
-          "format": "int64",
-          "type": "string"
-        },
-        "nextRunTime": {
-          "format": "google-datetime",
-          "readOnly": true,
-          "description": "Output only. Next time when data transfer will run.",
-          "type": "string"
-        },
-        "dataRefreshWindowDays": {
-          "format": "int32",
-          "description": "The number of days to look back to automatically refresh the data. For example, if `data_refresh_window_days = 10`, then every day BigQuery reingests data for [today-10, today-1], rather than ingesting data for just [today-1]. Only valid if the data source supports the feature. Set the value to 0 to use the default value.",
-          "type": "integer"
-        },
-        "displayName": {
-          "description": "User specified display name for the data transfer.",
-          "type": "string"
-        },
-        "disabled": {
-          "description": "Is this config disabled. When set to true, no runs are scheduled for a given transfer.",
-          "type": "boolean"
-        },
-        "params": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object."
-          },
-          "description": "Data transfer specific parameters."
-        },
-        "updateTime": {
-          "type": "string",
-          "readOnly": true,
-          "format": "google-datetime",
-          "description": "Output only. Data transfer modification time. Ignored by server on input."
-        }
-      },
-      "description": "Represents a data transfer configuration. A transfer configuration contains all metadata needed to perform a data transfer. For example, `destination_dataset_id` specifies where data should be stored. When a new transfer configuration is created, the specified `destination_dataset_id` is created when needed and shared with the appropriate data source service account.",
-      "id": "TransferConfig"
-    },
-    "ScheduleTransferRunsResponse": {
-      "description": "A response to schedule transfer runs for a time range.",
-      "properties": {
-        "runs": {
-          "description": "The transfer runs that were scheduled.",
-          "items": {
-            "$ref": "TransferRun"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "id": "ScheduleTransferRunsResponse"
-    },
-    "ListTransferLogsResponse": {
-      "properties": {
-        "nextPageToken": {
-          "description": "Output only. The next-pagination token. For multiple-page list results, this token can be used as the `GetTransferRunLogRequest.page_token` to request the next page of list results.",
-          "readOnly": true,
-          "type": "string"
-        },
-        "transferMessages": {
-          "description": "Output only. The stored pipeline transfer messages.",
-          "type": "array",
-          "readOnly": true,
-          "items": {
-            "$ref": "TransferMessage"
-          }
-        }
-      },
-      "description": "The returned list transfer run messages.",
-      "type": "object",
-      "id": "ListTransferLogsResponse"
-    },
-    "CheckValidCredsResponse": {
-      "id": "CheckValidCredsResponse",
-      "properties": {
-        "hasValidCreds": {
-          "description": "If set to `true`, the credentials exist and are valid.",
-          "type": "boolean"
-        }
-      },
-      "description": "A response indicating whether the credentials exist and are valid.",
-      "type": "object"
-    },
-    "DataSourceParameter": {
-      "type": "object",
-      "description": "Represents a data source parameter with validation rules, so that parameters can be rendered in the UI. These parameters are given to us by supported data sources, and include all needed information for rendering and validation. Thus, whoever uses this api can decide to generate either generic ui, or custom data source specific forms.",
-      "properties": {
-        "recurse": {
-          "description": "Deprecated. This field has no effect.",
-          "type": "boolean"
-        },
-        "paramId": {
-          "description": "Parameter identifier.",
-          "type": "string"
-        },
-        "required": {
-          "type": "boolean",
-          "description": "Is parameter required."
-        },
-        "allowedValues": {
-          "items": {
-            "type": "string"
-          },
-          "description": "All possible values for the parameter.",
-          "type": "array"
-        },
-        "repeated": {
-          "type": "boolean",
-          "description": "Deprecated. This field has no effect."
-        },
-        "validationDescription": {
-          "description": "Description of the requirements for this field, in case the user input does not fulfill the regex pattern or min/max values.",
-          "type": "string"
-        },
-        "description": {
-          "type": "string",
-          "description": "Parameter description."
-        },
-        "immutable": {
-          "description": "Cannot be changed after initial creation.",
-          "type": "boolean"
-        },
-        "minValue": {
-          "description": "For integer and double values specifies minimum allowed value.",
-          "type": "number",
-          "format": "double"
-        },
-        "validationHelpUrl": {
-          "type": "string",
-          "description": "URL to a help document to further explain the naming requirements."
-        },
-        "fields": {
-          "items": {
-            "$ref": "DataSourceParameter"
-          },
-          "description": "Deprecated. This field has no effect.",
-          "type": "array"
-        },
-        "validationRegex": {
-          "description": "Regular expression which can be used for parameter validation.",
-          "type": "string"
-        },
-        "displayName": {
-          "type": "string",
-          "description": "Parameter display name in the user interface."
-        },
-        "type": {
-          "enum": [
-            "TYPE_UNSPECIFIED",
-            "STRING",
-            "INTEGER",
-            "DOUBLE",
-            "BOOLEAN",
-            "RECORD",
-            "PLUS_PAGE"
-          ],
-          "description": "Parameter type.",
-          "type": "string",
-          "enumDescriptions": [
-            "Type unspecified.",
-            "String parameter.",
-            "Integer parameter (64-bits). Will be serialized to json as string.",
-            "Double precision floating point parameter.",
-            "Boolean parameter.",
-            "Deprecated. This field has no effect.",
-            "Page ID for a Google+ Page."
-          ]
-        },
-        "maxValue": {
-          "format": "double",
-          "description": "For integer and double values specifies maxminum allowed value.",
-          "type": "number"
-        },
-        "deprecated": {
-          "type": "boolean",
-          "description": "If true, it should not be used in new transfers, and it should not be visible to users."
-        }
-      },
-      "id": "DataSourceParameter"
-    },
-    "ScheduleOptions": {
-      "type": "object",
-      "description": "Options customizing the data transfer schedule.",
-      "properties": {
-        "disableAutoScheduling": {
-          "type": "boolean",
-          "description": "If true, automatic scheduling of data transfer runs for this configuration will be disabled. The runs can be started on ad-hoc basis using StartManualTransferRuns API. When automatic scheduling is disabled, the TransferConfig.schedule field will be ignored."
-        },
-        "startTime": {
-          "format": "google-datetime",
-          "type": "string",
-          "description": "Specifies time to start scheduling transfer runs. The first run will be scheduled at or after the start time according to a recurrence pattern defined in the schedule string. The start time can be changed at any moment. The time when a data transfer can be trigerred manually is not limited by this option."
-        },
-        "endTime": {
-          "format": "google-datetime",
-          "type": "string",
-          "description": "Defines time to stop scheduling transfer runs. A transfer run cannot be scheduled at or after the end time. The end time can be changed at any moment. The time when a data transfer can be trigerred manually is not limited by this option."
-        }
-      },
-      "id": "ScheduleOptions"
-    },
-    "TransferRun": {
-      "type": "object",
-      "properties": {
-        "notificationPubsubTopic": {
-          "readOnly": true,
-          "description": "Output only. Pub/Sub topic where a notification will be sent after this transfer run finishes",
-          "type": "string"
-        },
-        "emailPreferences": {
-          "$ref": "EmailPreferences",
-          "description": "Output only. Email notifications will be sent according to these preferences to the email address of the user who owns the transfer config this run was derived from.",
-          "readOnly": true
-        },
-        "errorStatus": {
-          "$ref": "Status",
-          "description": "Status of the transfer run."
-        },
-        "scheduleTime": {
-          "description": "Minimum time after which a transfer run can be started.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "runTime": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "For batch transfer runs, specifies the date and time of the data should be ingested."
-        },
-        "params": {
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object."
-          },
-          "readOnly": true,
-          "type": "object",
-          "description": "Output only. Data transfer specific parameters."
-        },
-        "endTime": {
-          "readOnly": true,
-          "format": "google-datetime",
-          "type": "string",
-          "description": "Output only. Time when transfer run ended. Parameter ignored by server for input requests."
-        },
-        "schedule": {
-          "description": "Output only. Describes the schedule of this transfer run if it was created as part of a regular schedule. For batch transfer runs that are scheduled manually, this is empty. NOTE: the system might choose to delay the schedule depending on the current load, so `schedule_time` doesn't always match this.",
-          "readOnly": true,
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "The resource name of the transfer run. Transfer run names have the form `projects/{project_id}/locations/{location}/transferConfigs/{config_id}/runs/{run_id}`. The name is ignored when creating a transfer run."
-        },
-        "updateTime": {
-          "description": "Output only. Last time the data transfer run state was updated.",
-          "format": "google-datetime",
-          "readOnly": true,
-          "type": "string"
-        },
-        "state": {
-          "type": "string",
-          "description": "Data transfer run state. Ignored for input requests.",
-          "enum": [
-            "TRANSFER_STATE_UNSPECIFIED",
-            "PENDING",
-            "RUNNING",
-            "SUCCEEDED",
-            "FAILED",
-            "CANCELLED"
-          ],
-          "enumDescriptions": [
-            "State placeholder.",
-            "Data transfer is scheduled and is waiting to be picked up by data transfer backend.",
-            "Data transfer is in progress.",
-            "Data transfer completed successfully.",
-            "Data transfer failed.",
-            "Data transfer is cancelled."
-          ]
-        },
-        "dataSourceId": {
-          "type": "string",
-          "description": "Output only. Data source id.",
-          "readOnly": true
-        },
-        "destinationDatasetId": {
-          "readOnly": true,
-          "description": "Output only. The BigQuery target dataset id.",
-          "type": "string"
-        },
-        "startTime": {
-          "format": "google-datetime",
-          "readOnly": true,
-          "description": "Output only. Time when transfer run was started. Parameter ignored by server for input requests.",
-          "type": "string"
-        },
-        "userId": {
-          "format": "int64",
-          "description": "Deprecated. Unique ID of the user on whose behalf transfer is done.",
-          "type": "string"
-        }
-      },
-      "description": "Represents a data transfer run.",
-      "id": "TransferRun"
-    },
-    "Empty": {
-      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
-      "type": "object",
-      "properties": {},
-      "id": "Empty"
-    }
-  },
-  "ownerName": "Google",
-  "discoveryVersion": "v1",
-  "basePath": "",
-  "title": "BigQuery Data Transfer API",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "rootUrl": "https://bigquerydatatransfer.googleapis.com/",
-  "revision": "20200801",
-  "description": "Schedule queries or transfer external data from SaaS applications to Google BigQuery on a regular basis.",
-  "baseUrl": "https://bigquerydatatransfer.googleapis.com/",
-  "version": "v1",
-  "documentationLink": "https://cloud.google.com/bigquery/",
-  "mtlsRootUrl": "https://bigquerydatatransfer.mtls.googleapis.com/",
-  "version_module": true,
-  "kind": "discovery#restDescription",
-  "ownerDomain": "google.com",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/bigquery": {
-          "description": "View and manage your data in Google BigQuery"
-        },
-        "https://www.googleapis.com/auth/cloud-platform.read-only": {
-          "description": "View your data across Google Cloud Platform services"
-        },
-        "https://www.googleapis.com/auth/bigquery.readonly": {
-          "description": "View your data in Google BigQuery"
-        },
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "fullyEncodeReservedExpansion": true,
-  "protocol": "rest",
-  "canonicalName": "BigQuery Data Transfer",
-  "batchPath": "batch",
-  "parameters": {
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "location": "query",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format.",
-      "location": "query",
-      "type": "string"
-    },
-    "callback": {
-      "description": "JSONP",
-      "location": "query",
-      "type": "string"
-    },
-    "oauth_token": {
-      "location": "query",
-      "type": "string",
-      "description": "OAuth 2.0 token for the current user."
-    },
-    "alt": {
-      "description": "Data format for response.",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "default": "json",
-      "type": "string",
-      "location": "query",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ]
-    },
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "default": "true",
-      "type": "boolean"
-    },
-    "upload_protocol": {
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "location": "query"
-    },
-    "fields": {
-      "location": "query",
-      "type": "string",
-      "description": "Selector specifying which fields to include in a partial response."
-    },
-    "key": {
-      "location": "query",
-      "type": "string",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token."
-    },
-    "quotaUser": {
-      "location": "query",
-      "type": "string",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters."
-    }
-  },
-  "id": "bigquerydatatransfer:v1",
-  "servicePath": ""
-}
+    "servicePath": "",
+    "title": "BigQuery Data Transfer API",
+    "version": "v1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/classroom.v1.json b/googleapiclient/discovery_cache/documents/classroom.v1.json
index 1284fe0..fe49644 100644
--- a/googleapiclient/discovery_cache/documents/classroom.v1.json
+++ b/googleapiclient/discovery_cache/documents/classroom.v1.json
@@ -1,4036 +1,4036 @@
 {
-  "ownerName": "Google",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "discoveryVersion": "v1",
-  "version": "v1",
-  "baseUrl": "https://classroom.googleapis.com/",
-  "ownerDomain": "google.com",
-  "title": "Google Classroom API",
-  "kind": "discovery#restDescription",
-  "documentationLink": "https://developers.google.com/classroom/",
-  "parameters": {
-    "alt": {
-      "default": "json",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "location": "query",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "description": "Data format for response.",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "type": "boolean",
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "default": "true"
-    },
-    "quotaUser": {
-      "type": "string",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "location": "query"
-    },
-    "uploadType": {
-      "type": "string",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "location": "query"
-    },
-    "$.xgafv": {
-      "description": "V1 error format.",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "type": "string",
-      "enum": [
-        "1",
-        "2"
-      ]
-    },
-    "key": {
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "location": "query",
-      "type": "string"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "location": "query",
-      "type": "string"
-    },
-    "access_token": {
-      "location": "query",
-      "type": "string",
-      "description": "OAuth access token."
-    },
-    "upload_protocol": {
-      "location": "query",
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
-    },
-    "fields": {
-      "location": "query",
-      "type": "string",
-      "description": "Selector specifying which fields to include in a partial response."
-    },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "type": "string"
-    }
-  },
-  "schemas": {
-    "Date": {
-      "id": "Date",
-      "properties": {
-        "month": {
-          "description": "Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "year": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year."
-        },
-        "day": {
-          "type": "integer",
-          "description": "Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to specify a year by itself or a year and month where the day isn't significant.",
-          "format": "int32"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/classroom.announcements": {
+                    "description": "View and manage announcements in Google Classroom"
+                },
+                "https://www.googleapis.com/auth/classroom.announcements.readonly": {
+                    "description": "View announcements in Google Classroom"
+                },
+                "https://www.googleapis.com/auth/classroom.courses": {
+                    "description": "See, edit, create, and permanently delete your Google Classroom classes"
+                },
+                "https://www.googleapis.com/auth/classroom.courses.readonly": {
+                    "description": "View your Google Classroom classes"
+                },
+                "https://www.googleapis.com/auth/classroom.coursework.me": {
+                    "description": "See, create and edit coursework items including assignments, questions, and grades"
+                },
+                "https://www.googleapis.com/auth/classroom.coursework.me.readonly": {
+                    "description": "View your course work and grades in Google Classroom"
+                },
+                "https://www.googleapis.com/auth/classroom.coursework.students": {
+                    "description": "Manage course work and grades for students in the Google Classroom classes you teach and view the course work and grades for classes you administer"
+                },
+                "https://www.googleapis.com/auth/classroom.coursework.students.readonly": {
+                    "description": "View course work and grades for students in the Google Classroom classes you teach or administer"
+                },
+                "https://www.googleapis.com/auth/classroom.courseworkmaterials": {
+                    "description": "See, edit, and create classwork materials in Google Classroom"
+                },
+                "https://www.googleapis.com/auth/classroom.courseworkmaterials.readonly": {
+                    "description": "See all classwork materials for your Google Classroom classes"
+                },
+                "https://www.googleapis.com/auth/classroom.guardianlinks.me.readonly": {
+                    "description": "View your Google Classroom guardians"
+                },
+                "https://www.googleapis.com/auth/classroom.guardianlinks.students": {
+                    "description": "View and manage guardians for students in your Google Classroom classes"
+                },
+                "https://www.googleapis.com/auth/classroom.guardianlinks.students.readonly": {
+                    "description": "View guardians for students in your Google Classroom classes"
+                },
+                "https://www.googleapis.com/auth/classroom.profile.emails": {
+                    "description": "View the email addresses of people in your classes"
+                },
+                "https://www.googleapis.com/auth/classroom.profile.photos": {
+                    "description": "View the profile photos of people in your classes"
+                },
+                "https://www.googleapis.com/auth/classroom.push-notifications": {
+                    "description": "Receive notifications about your Google Classroom data"
+                },
+                "https://www.googleapis.com/auth/classroom.rosters": {
+                    "description": "Manage your Google Classroom class rosters"
+                },
+                "https://www.googleapis.com/auth/classroom.rosters.readonly": {
+                    "description": "View your Google Classroom class rosters"
+                },
+                "https://www.googleapis.com/auth/classroom.student-submissions.me.readonly": {
+                    "description": "View your course work and grades in Google Classroom"
+                },
+                "https://www.googleapis.com/auth/classroom.student-submissions.students.readonly": {
+                    "description": "View course work and grades for students in the Google Classroom classes you teach or administer"
+                },
+                "https://www.googleapis.com/auth/classroom.topics": {
+                    "description": "See, create, and edit topics in Google Classroom"
+                },
+                "https://www.googleapis.com/auth/classroom.topics.readonly": {
+                    "description": "View topics in Google Classroom"
+                }
+            }
         }
-      },
-      "description": "Represents a whole or partial calendar date, such as a birthday. The time of day and time zone are either specified elsewhere or are insignificant. The date is relative to the Gregorian Calendar. This can represent one of the following: * A full date, with non-zero year, month, and day values * A month and day value, with a zero year, such as an anniversary * A year on its own, with zero month and day values * A year and month value, with a zero day, such as a credit card expiration date Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.",
-      "type": "object"
     },
-    "Link": {
-      "type": "object",
-      "properties": {
-        "title": {
-          "type": "string",
-          "description": "Title of the target of the URL. Read-only."
-        },
-        "url": {
-          "type": "string",
-          "description": "URL to link to. This must be a valid UTF-8 string containing between 1 and 2024 characters."
-        },
-        "thumbnailUrl": {
-          "type": "string",
-          "description": "URL of a thumbnail image of the target URL. Read-only."
-        }
-      },
-      "description": "URL item.",
-      "id": "Link"
+    "basePath": "",
+    "baseUrl": "https://classroom.googleapis.com/",
+    "batchPath": "batch",
+    "description": "Manages classes, rosters, and invitations in Google Classroom.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://developers.google.com/classroom/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
     },
-    "Teacher": {
-      "properties": {
-        "profile": {
-          "description": "Global user information for the teacher. Read-only.",
-          "$ref": "UserProfile"
-        },
-        "courseId": {
-          "description": "Identifier of the course. Read-only.",
-          "type": "string"
-        },
-        "userId": {
-          "description": "Identifier of the user. When specified as a parameter of a request, this identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "Teacher",
-      "description": "Teacher of a course."
-    },
-    "StudentSubmission": {
-      "properties": {
-        "creationTime": {
-          "description": "Creation time of this submission. This may be unset if the student has not accessed this item. Read-only.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "shortAnswerSubmission": {
-          "description": "Submission content when course_work_type is SHORT_ANSWER_QUESTION.",
-          "$ref": "ShortAnswerSubmission"
-        },
-        "assignmentSubmission": {
-          "description": "Submission content when course_work_type is ASSIGNMENT. Students can modify this content using ModifyAttachments.",
-          "$ref": "AssignmentSubmission"
-        },
-        "associatedWithDeveloper": {
-          "type": "boolean",
-          "description": "Whether this student submission is associated with the Developer Console project making the request. See CreateCourseWork for more details. Read-only."
-        },
-        "assignedGrade": {
-          "description": "Optional grade. If unset, no grade was set. This value must be non-negative. Decimal (that is, non-integer) values are allowed, but are rounded to two decimal places. This may be modified only by course teachers.",
-          "type": "number",
-          "format": "double"
-        },
-        "courseWorkType": {
-          "description": "Type of course work this submission is for. Read-only.",
-          "enum": [
-            "COURSE_WORK_TYPE_UNSPECIFIED",
-            "ASSIGNMENT",
-            "SHORT_ANSWER_QUESTION",
-            "MULTIPLE_CHOICE_QUESTION"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "No work type specified. This is never returned.",
-            "An assignment.",
-            "A short answer question.",
-            "A multiple-choice question."
-          ]
-        },
-        "updateTime": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "Last update time of this submission. This may be unset if the student has not accessed this item. Read-only."
-        },
-        "state": {
-          "type": "string",
-          "description": "State of this submission. Read-only.",
-          "enumDescriptions": [
-            "No state specified. This should never be returned.",
-            "The student has never accessed this submission. Attachments are not returned and timestamps is not set.",
-            "Has been created.",
-            "Has been turned in to the teacher.",
-            "Has been returned to the student.",
-            "Student chose to \"unsubmit\" the assignment."
-          ],
-          "enum": [
-            "SUBMISSION_STATE_UNSPECIFIED",
-            "NEW",
-            "CREATED",
-            "TURNED_IN",
-            "RETURNED",
-            "RECLAIMED_BY_STUDENT"
-          ]
-        },
-        "courseWorkId": {
-          "type": "string",
-          "description": "Identifier for the course work this corresponds to. Read-only."
-        },
-        "multipleChoiceSubmission": {
-          "$ref": "MultipleChoiceSubmission",
-          "description": "Submission content when course_work_type is MULTIPLE_CHOICE_QUESTION."
-        },
-        "draftGrade": {
-          "description": "Optional pending grade. If unset, no grade was set. This value must be non-negative. Decimal (that is, non-integer) values are allowed, but are rounded to two decimal places. This is only visible to and modifiable by course teachers.",
-          "format": "double",
-          "type": "number"
-        },
-        "late": {
-          "description": "Whether this submission is late. Read-only.",
-          "type": "boolean"
-        },
-        "courseId": {
-          "type": "string",
-          "description": "Identifier of the course. Read-only."
-        },
-        "userId": {
-          "description": "Identifier for the student that owns this submission. Read-only.",
-          "type": "string"
-        },
-        "alternateLink": {
-          "description": "Absolute link to the submission in the Classroom web UI. Read-only.",
-          "type": "string"
-        },
-        "id": {
-          "description": "Classroom-assigned Identifier for the student submission. This is unique among submissions for the relevant course work. Read-only.",
-          "type": "string"
-        },
-        "submissionHistory": {
-          "type": "array",
-          "description": "The history of the submission (includes state and grade histories). Read-only.",
-          "items": {
-            "$ref": "SubmissionHistory"
-          }
-        }
-      },
-      "id": "StudentSubmission",
-      "description": "Student submission for course work. StudentSubmission items are generated when a CourseWork item is created. StudentSubmissions that have never been accessed (i.e. with `state` = NEW) may not have a creation time or update time.",
-      "type": "object"
-    },
-    "ModifyIndividualStudentsOptions": {
-      "type": "object",
-      "properties": {
-        "addStudentIds": {
-          "items": {
+    "id": "classroom:v1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://classroom.mtls.googleapis.com/",
+    "name": "classroom",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
             "type": "string"
-          },
-          "description": "IDs of students to be added as having access to this coursework/announcement.",
-          "type": "array"
         },
-        "removeStudentIds": {
-          "type": "array",
-          "description": "IDs of students to be removed from having access to this coursework/announcement.",
-          "items": {
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
             "type": "string"
-          }
-        }
-      },
-      "description": "Contains fields to add or remove students from a course work or announcement where the `assigneeMode` is set to `INDIVIDUAL_STUDENTS`.",
-      "id": "ModifyIndividualStudentsOptions"
-    },
-    "ListGuardianInvitationsResponse": {
-      "type": "object",
-      "description": "Response when listing guardian invitations.",
-      "id": "ListGuardianInvitationsResponse",
-      "properties": {
-        "guardianInvitations": {
-          "description": "Guardian invitations that matched the list request.",
-          "type": "array",
-          "items": {
-            "$ref": "GuardianInvitation"
-          }
         },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Token identifying the next page of results to return. If empty, no further results are available."
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      }
     },
-    "ListCoursesResponse": {
-      "type": "object",
-      "id": "ListCoursesResponse",
-      "description": "Response when listing courses.",
-      "properties": {
+    "protocol": "rest",
+    "resources": {
         "courses": {
-          "description": "Courses that match the list request.",
-          "items": {
-            "$ref": "Course"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Token identifying the next page of results to return. If empty, no further results are available."
-        }
-      }
-    },
-    "CourseRosterChangesInfo": {
-      "description": "Information about a `Feed` with a `feed_type` of `COURSE_ROSTER_CHANGES`.",
-      "properties": {
-        "courseId": {
-          "description": "The `course_id` of the course to subscribe to roster changes for.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "CourseRosterChangesInfo"
-    },
-    "ModifyCourseWorkAssigneesRequest": {
-      "description": "Request to modify assignee mode and options of a coursework.",
-      "id": "ModifyCourseWorkAssigneesRequest",
-      "properties": {
-        "assigneeMode": {
-          "type": "string",
-          "enumDescriptions": [
-            "No mode specified. This is never returned.",
-            "All students can see the item. This is the default state.",
-            "A subset of the students can see the item."
-          ],
-          "description": "Mode of the coursework describing whether it will be assigned to all students or specified individual students.",
-          "enum": [
-            "ASSIGNEE_MODE_UNSPECIFIED",
-            "ALL_STUDENTS",
-            "INDIVIDUAL_STUDENTS"
-          ]
-        },
-        "modifyIndividualStudentsOptions": {
-          "$ref": "ModifyIndividualStudentsOptions",
-          "description": "Set which students are assigned or not assigned to the coursework. Must be specified only when `assigneeMode` is `INDIVIDUAL_STUDENTS`."
-        }
-      },
-      "type": "object"
-    },
-    "ModifyAttachmentsRequest": {
-      "id": "ModifyAttachmentsRequest",
-      "description": "Request to modify the attachments of a student submission.",
-      "properties": {
-        "addAttachments": {
-          "description": "Attachments to add. A student submission may not have more than 20 attachments. Form attachments are not supported.",
-          "type": "array",
-          "items": {
-            "$ref": "Attachment"
-          }
-        }
-      },
-      "type": "object"
-    },
-    "ListAnnouncementsResponse": {
-      "type": "object",
-      "id": "ListAnnouncementsResponse",
-      "description": "Response when listing course work.",
-      "properties": {
-        "announcements": {
-          "description": "Announcement items that match the request.",
-          "type": "array",
-          "items": {
-            "$ref": "Announcement"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Token identifying the next page of results to return. If empty, no further results are available."
-        }
-      }
-    },
-    "SubmissionHistory": {
-      "type": "object",
-      "properties": {
-        "gradeHistory": {
-          "description": "The grade history information of the submission, if present.",
-          "$ref": "GradeHistory"
-        },
-        "stateHistory": {
-          "description": "The state history information of the submission, if present.",
-          "$ref": "StateHistory"
-        }
-      },
-      "id": "SubmissionHistory",
-      "description": "The history of the submission. This currently includes state and grade histories."
-    },
-    "ListInvitationsResponse": {
-      "properties": {
-        "invitations": {
-          "type": "array",
-          "items": {
-            "$ref": "Invitation"
-          },
-          "description": "Invitations that match the list request."
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Token identifying the next page of results to return. If empty, no further results are available."
-        }
-      },
-      "description": "Response when listing invitations.",
-      "id": "ListInvitationsResponse",
-      "type": "object"
-    },
-    "YouTubeVideo": {
-      "description": "YouTube video item.",
-      "properties": {
-        "thumbnailUrl": {
-          "description": "URL of a thumbnail image of the YouTube video. Read-only.",
-          "type": "string"
-        },
-        "alternateLink": {
-          "description": "URL that can be used to view the YouTube video. Read-only.",
-          "type": "string"
-        },
-        "title": {
-          "description": "Title of the YouTube video. Read-only.",
-          "type": "string"
-        },
-        "id": {
-          "type": "string",
-          "description": "YouTube API resource ID."
-        }
-      },
-      "type": "object",
-      "id": "YouTubeVideo"
-    },
-    "GuardianInvitation": {
-      "type": "object",
-      "id": "GuardianInvitation",
-      "description": "An invitation to become the guardian of a specified user, sent to a specified email address.",
-      "properties": {
-        "invitationId": {
-          "type": "string",
-          "description": "Unique identifier for this invitation. Read-only."
-        },
-        "creationTime": {
-          "description": "The time that this invitation was created. Read-only.",
-          "type": "string",
-          "format": "google-datetime"
-        },
-        "state": {
-          "enum": [
-            "GUARDIAN_INVITATION_STATE_UNSPECIFIED",
-            "PENDING",
-            "COMPLETE"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "Should never be returned.",
-            "The invitation is active and awaiting a response.",
-            "The invitation is no longer active. It may have been accepted, declined, withdrawn or it may have expired."
-          ],
-          "description": "The state that this invitation is in."
-        },
-        "studentId": {
-          "description": "ID of the student (in standard format)",
-          "type": "string"
-        },
-        "invitedEmailAddress": {
-          "type": "string",
-          "description": "Email address that the invitation was sent to. This field is only visible to domain administrators."
-        }
-      }
-    },
-    "DriveFile": {
-      "type": "object",
-      "description": "Representation of a Google Drive file.",
-      "properties": {
-        "thumbnailUrl": {
-          "description": "URL of a thumbnail image of the Drive item. Read-only.",
-          "type": "string"
-        },
-        "title": {
-          "description": "Title of the Drive item. Read-only.",
-          "type": "string"
-        },
-        "alternateLink": {
-          "description": "URL that can be used to access the Drive item. Read-only.",
-          "type": "string"
-        },
-        "id": {
-          "type": "string",
-          "description": "Drive API resource ID."
-        }
-      },
-      "id": "DriveFile"
-    },
-    "Registration": {
-      "description": "An instruction to Classroom to send notifications from the `feed` to the provided destination.",
-      "properties": {
-        "cloudPubsubTopic": {
-          "description": "The Cloud Pub/Sub topic that notifications are to be sent to.",
-          "$ref": "CloudPubsubTopic"
-        },
-        "expiryTime": {
-          "type": "string",
-          "description": "The time until which the `Registration` is effective. This is a read-only field assigned by the server.",
-          "format": "google-datetime"
-        },
-        "feed": {
-          "description": "Specification for the class of notifications that Classroom should deliver to the destination.",
-          "$ref": "Feed"
-        },
-        "registrationId": {
-          "type": "string",
-          "description": "A server-generated unique identifier for this `Registration`. Read-only."
-        }
-      },
-      "id": "Registration",
-      "type": "object"
-    },
-    "ListStudentsResponse": {
-      "description": "Response when listing students.",
-      "properties": {
-        "students": {
-          "description": "Students who match the list request.",
-          "type": "array",
-          "items": {
-            "$ref": "Student"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Token identifying the next page of results to return. If empty, no further results are available."
-        }
-      },
-      "type": "object",
-      "id": "ListStudentsResponse"
-    },
-    "CourseWork": {
-      "type": "object",
-      "properties": {
-        "dueTime": {
-          "$ref": "TimeOfDay",
-          "description": "Optional time of day, in UTC, that submissions for this course work are due. This must be specified if `due_date` is specified."
-        },
-        "description": {
-          "type": "string",
-          "description": "Optional description of this course work. If set, the description must be a valid UTF-8 string containing no more than 30,000 characters."
-        },
-        "assignment": {
-          "description": "Assignment details. This is populated only when `work_type` is `ASSIGNMENT`. Read-only.",
-          "$ref": "Assignment"
-        },
-        "workType": {
-          "description": "Type of this course work. The type is set when the course work is created and cannot be changed.",
-          "enum": [
-            "COURSE_WORK_TYPE_UNSPECIFIED",
-            "ASSIGNMENT",
-            "SHORT_ANSWER_QUESTION",
-            "MULTIPLE_CHOICE_QUESTION"
-          ],
-          "enumDescriptions": [
-            "No work type specified. This is never returned.",
-            "An assignment.",
-            "A short answer question.",
-            "A multiple-choice question."
-          ],
-          "type": "string"
-        },
-        "scheduledTime": {
-          "description": "Optional timestamp when this course work is scheduled to be published.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "state": {
-          "enum": [
-            "COURSE_WORK_STATE_UNSPECIFIED",
-            "PUBLISHED",
-            "DRAFT",
-            "DELETED"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "No state specified. This is never returned.",
-            "Status for work that has been published. This is the default state.",
-            "Status for work that is not yet published. Work in this state is visible only to course teachers and domain administrators.",
-            "Status for work that was published but is now deleted. Work in this state is visible only to course teachers and domain administrators. Work in this state is deleted after some time."
-          ],
-          "description": "Status of this course work. If unspecified, the default state is `DRAFT`."
-        },
-        "creationTime": {
-          "description": "Timestamp when this course work was created. Read-only.",
-          "type": "string",
-          "format": "google-datetime"
-        },
-        "associatedWithDeveloper": {
-          "type": "boolean",
-          "description": "Whether this course work item is associated with the Developer Console project making the request. See CreateCourseWork for more details. Read-only."
-        },
-        "dueDate": {
-          "description": "Optional date, in UTC, that submissions for this course work are due. This must be specified if `due_time` is specified.",
-          "$ref": "Date"
-        },
-        "individualStudentsOptions": {
-          "description": "Identifiers of students with access to the coursework. This field is set only if `assigneeMode` is `INDIVIDUAL_STUDENTS`. If the `assigneeMode` is `INDIVIDUAL_STUDENTS`, then only students specified in this field are assigned the coursework.",
-          "$ref": "IndividualStudentsOptions"
-        },
-        "submissionModificationMode": {
-          "type": "string",
-          "enum": [
-            "SUBMISSION_MODIFICATION_MODE_UNSPECIFIED",
-            "MODIFIABLE_UNTIL_TURNED_IN",
-            "MODIFIABLE"
-          ],
-          "enumDescriptions": [
-            "No modification mode specified. This is never returned.",
-            "Submissions can be modified before being turned in.",
-            "Submissions can be modified at any time."
-          ],
-          "description": "Setting to determine when students are allowed to modify submissions. If unspecified, the default value is `MODIFIABLE_UNTIL_TURNED_IN`."
-        },
-        "updateTime": {
-          "format": "google-datetime",
-          "type": "string",
-          "description": "Timestamp of the most recent change to this course work. Read-only."
-        },
-        "topicId": {
-          "description": "Identifier for the topic that this coursework is associated with. Must match an existing topic in the course.",
-          "type": "string"
-        },
-        "id": {
-          "type": "string",
-          "description": "Classroom-assigned identifier of this course work, unique per course. Read-only."
-        },
-        "materials": {
-          "description": "Additional materials. CourseWork must have no more than 20 material items.",
-          "items": {
-            "$ref": "Material"
-          },
-          "type": "array"
-        },
-        "alternateLink": {
-          "description": "Absolute link to this course work in the Classroom web UI. This is only populated if `state` is `PUBLISHED`. Read-only.",
-          "type": "string"
-        },
-        "maxPoints": {
-          "type": "number",
-          "description": "Maximum grade for this course work. If zero or unspecified, this assignment is considered ungraded. This must be a non-negative integer value.",
-          "format": "double"
-        },
-        "title": {
-          "description": "Title of this course work. The title must be a valid UTF-8 string containing between 1 and 3000 characters.",
-          "type": "string"
-        },
-        "courseId": {
-          "description": "Identifier of the course. Read-only.",
-          "type": "string"
-        },
-        "multipleChoiceQuestion": {
-          "description": "Multiple choice question details. For read operations, this field is populated only when `work_type` is `MULTIPLE_CHOICE_QUESTION`. For write operations, this field must be specified when creating course work with a `work_type` of `MULTIPLE_CHOICE_QUESTION`, and it must not be set otherwise.",
-          "$ref": "MultipleChoiceQuestion"
-        },
-        "creatorUserId": {
-          "description": "Identifier for the user that created the coursework. Read-only.",
-          "type": "string"
-        },
-        "assigneeMode": {
-          "enum": [
-            "ASSIGNEE_MODE_UNSPECIFIED",
-            "ALL_STUDENTS",
-            "INDIVIDUAL_STUDENTS"
-          ],
-          "type": "string",
-          "description": "Assignee mode of the coursework. If unspecified, the default value is `ALL_STUDENTS`.",
-          "enumDescriptions": [
-            "No mode specified. This is never returned.",
-            "All students can see the item. This is the default state.",
-            "A subset of the students can see the item."
-          ]
-        }
-      },
-      "description": "Course work created by a teacher for students of the course.",
-      "id": "CourseWork"
-    },
-    "AssignmentSubmission": {
-      "id": "AssignmentSubmission",
-      "type": "object",
-      "description": "Student work for an assignment.",
-      "properties": {
-        "attachments": {
-          "description": "Attachments added by the student. Drive files that correspond to materials with a share mode of STUDENT_COPY may not exist yet if the student has not accessed the assignment in Classroom. Some attachment metadata is only populated if the requesting user has permission to access it. Identifier and alternate_link fields are always available, but others (for example, title) may not be.",
-          "type": "array",
-          "items": {
-            "$ref": "Attachment"
-          }
-        }
-      }
-    },
-    "MultipleChoiceQuestion": {
-      "id": "MultipleChoiceQuestion",
-      "type": "object",
-      "description": "Additional details for multiple-choice questions.",
-      "properties": {
-        "choices": {
-          "items": {
-            "type": "string"
-          },
-          "description": "Possible choices.",
-          "type": "array"
-        }
-      }
-    },
-    "CourseMaterial": {
-      "type": "object",
-      "id": "CourseMaterial",
-      "description": "A material attached to a course as part of a material set.",
-      "properties": {
-        "driveFile": {
-          "description": "Google Drive file attachment.",
-          "$ref": "DriveFile"
-        },
-        "link": {
-          "$ref": "Link",
-          "description": "Link atatchment."
-        },
-        "form": {
-          "description": "Google Forms attachment.",
-          "$ref": "Form"
-        },
-        "youTubeVideo": {
-          "description": "Youtube video attachment.",
-          "$ref": "YouTubeVideo"
-        }
-      }
-    },
-    "CourseWorkChangesInfo": {
-      "type": "object",
-      "id": "CourseWorkChangesInfo",
-      "description": "Information about a `Feed` with a `feed_type` of `COURSE_WORK_CHANGES`.",
-      "properties": {
-        "courseId": {
-          "description": "The `course_id` of the course to subscribe to work changes for.",
-          "type": "string"
-        }
-      }
-    },
-    "ModifyAnnouncementAssigneesRequest": {
-      "properties": {
-        "modifyIndividualStudentsOptions": {
-          "$ref": "ModifyIndividualStudentsOptions",
-          "description": "Set which students can view or cannot view the announcement. Must be specified only when `assigneeMode` is `INDIVIDUAL_STUDENTS`."
-        },
-        "assigneeMode": {
-          "type": "string",
-          "description": "Mode of the announcement describing whether it is accessible by all students or specified individual students.",
-          "enum": [
-            "ASSIGNEE_MODE_UNSPECIFIED",
-            "ALL_STUDENTS",
-            "INDIVIDUAL_STUDENTS"
-          ],
-          "enumDescriptions": [
-            "No mode specified. This is never returned.",
-            "All students can see the item. This is the default state.",
-            "A subset of the students can see the item."
-          ]
-        }
-      },
-      "type": "object",
-      "id": "ModifyAnnouncementAssigneesRequest",
-      "description": "Request to modify assignee mode and options of an announcement."
-    },
-    "DriveFolder": {
-      "description": "Representation of a Google Drive folder.",
-      "type": "object",
-      "id": "DriveFolder",
-      "properties": {
-        "title": {
-          "description": "Title of the Drive folder. Read-only.",
-          "type": "string"
-        },
-        "id": {
-          "type": "string",
-          "description": "Drive API resource ID."
-        },
-        "alternateLink": {
-          "description": "URL that can be used to access the Drive folder. Read-only.",
-          "type": "string"
-        }
-      }
-    },
-    "ListCourseWorkMaterialResponse": {
-      "description": "Response when listing course work material.",
-      "properties": {
-        "nextPageToken": {
-          "description": "Token identifying the next page of results to return. If empty, no further results are available.",
-          "type": "string"
-        },
-        "courseWorkMaterial": {
-          "description": "Course work material items that match the request.",
-          "items": {
-            "$ref": "CourseWorkMaterial"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "id": "ListCourseWorkMaterialResponse"
-    },
-    "GlobalPermission": {
-      "description": "Global user permission description.",
-      "id": "GlobalPermission",
-      "properties": {
-        "permission": {
-          "enumDescriptions": [
-            "No permission is specified. This is not returned and is not a valid value.",
-            "User is permitted to create a course."
-          ],
-          "type": "string",
-          "enum": [
-            "PERMISSION_UNSPECIFIED",
-            "CREATE_COURSE"
-          ],
-          "description": "Permission value."
-        }
-      },
-      "type": "object"
-    },
-    "CourseMaterialSet": {
-      "id": "CourseMaterialSet",
-      "description": "A set of materials that appears on the \"About\" page of the course. These materials might include a syllabus, schedule, or other background information relating to the course as a whole.",
-      "type": "object",
-      "properties": {
-        "title": {
-          "description": "Title for this set.",
-          "type": "string"
-        },
-        "materials": {
-          "description": "Materials attached to this set.",
-          "items": {
-            "$ref": "CourseMaterial"
-          },
-          "type": "array"
-        }
-      }
-    },
-    "ReclaimStudentSubmissionRequest": {
-      "type": "object",
-      "id": "ReclaimStudentSubmissionRequest",
-      "description": "Request to reclaim a student submission.",
-      "properties": {}
-    },
-    "IndividualStudentsOptions": {
-      "id": "IndividualStudentsOptions",
-      "description": "Assignee details about a coursework/announcement. This field is set if and only if `assigneeMode` is `INDIVIDUAL_STUDENTS`.",
-      "properties": {
-        "studentIds": {
-          "description": "Identifiers for the students that have access to the coursework/announcement.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "type": "object"
-    },
-    "GradeHistory": {
-      "id": "GradeHistory",
-      "description": "The history of each grade on this submission.",
-      "type": "object",
-      "properties": {
-        "pointsEarned": {
-          "format": "double",
-          "description": "The numerator of the grade at this time in the submission grade history.",
-          "type": "number"
-        },
-        "maxPoints": {
-          "format": "double",
-          "description": "The denominator of the grade at this time in the submission grade history.",
-          "type": "number"
-        },
-        "actorUserId": {
-          "type": "string",
-          "description": "The teacher who made the grade change."
-        },
-        "gradeChangeType": {
-          "description": "The type of grade change at this time in the submission grade history.",
-          "enumDescriptions": [
-            "No grade change type specified. This should never be returned.",
-            "A change in the numerator of the draft grade.",
-            "A change in the numerator of the assigned grade.",
-            "A change in the denominator of the grade."
-          ],
-          "enum": [
-            "UNKNOWN_GRADE_CHANGE_TYPE",
-            "DRAFT_GRADE_POINTS_EARNED_CHANGE",
-            "ASSIGNED_GRADE_POINTS_EARNED_CHANGE",
-            "MAX_POINTS_CHANGE"
-          ],
-          "type": "string"
-        },
-        "gradeTimestamp": {
-          "format": "google-datetime",
-          "type": "string",
-          "description": "When the grade of the submission was changed."
-        }
-      }
-    },
-    "StateHistory": {
-      "description": "The history of each state this submission has been in.",
-      "type": "object",
-      "properties": {
-        "stateTimestamp": {
-          "type": "string",
-          "description": "When the submission entered this state.",
-          "format": "google-datetime"
-        },
-        "state": {
-          "type": "string",
-          "enum": [
-            "STATE_UNSPECIFIED",
-            "CREATED",
-            "TURNED_IN",
-            "RETURNED",
-            "RECLAIMED_BY_STUDENT",
-            "STUDENT_EDITED_AFTER_TURN_IN"
-          ],
-          "enumDescriptions": [
-            "No state specified. This should never be returned.",
-            "The Submission has been created.",
-            "The student has turned in an assigned document, which may or may not be a template.",
-            "The teacher has returned the assigned document to the student.",
-            "The student turned in the assigned document, and then chose to \"unsubmit\" the assignment, giving the student control again as the owner.",
-            "The student edited their submission after turning it in. Currently, only used by Questions, when the student edits their answer."
-          ],
-          "description": "The workflow pipeline stage."
-        },
-        "actorUserId": {
-          "type": "string",
-          "description": "The teacher or student who made the change."
-        }
-      },
-      "id": "StateHistory"
-    },
-    "TimeOfDay": {
-      "type": "object",
-      "id": "TimeOfDay",
-      "properties": {
-        "hours": {
-          "description": "Hours of day in 24 hour format. Should be from 0 to 23. An API may choose to allow the value \"24:00:00\" for scenarios like business closing time.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "nanos": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999."
-        },
-        "minutes": {
-          "format": "int32",
-          "description": "Minutes of hour of day. Must be from 0 to 59.",
-          "type": "integer"
-        },
-        "seconds": {
-          "description": "Seconds of minutes of the time. Must normally be from 0 to 59. An API may allow the value 60 if it allows leap-seconds.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "description": "Represents a time of day. The date and time zone are either not significant or are specified elsewhere. An API may choose to allow leap seconds. Related types are google.type.Date and `google.protobuf.Timestamp`."
-    },
-    "Announcement": {
-      "properties": {
-        "alternateLink": {
-          "type": "string",
-          "description": "Absolute link to this announcement in the Classroom web UI. This is only populated if `state` is `PUBLISHED`. Read-only."
-        },
-        "text": {
-          "description": "Description of this announcement. The text must be a valid UTF-8 string containing no more than 30,000 characters.",
-          "type": "string"
-        },
-        "updateTime": {
-          "format": "google-datetime",
-          "type": "string",
-          "description": "Timestamp of the most recent change to this announcement. Read-only."
-        },
-        "courseId": {
-          "description": "Identifier of the course. Read-only.",
-          "type": "string"
-        },
-        "assigneeMode": {
-          "enumDescriptions": [
-            "No mode specified. This is never returned.",
-            "All students can see the item. This is the default state.",
-            "A subset of the students can see the item."
-          ],
-          "type": "string",
-          "description": "Assignee mode of the announcement. If unspecified, the default value is `ALL_STUDENTS`.",
-          "enum": [
-            "ASSIGNEE_MODE_UNSPECIFIED",
-            "ALL_STUDENTS",
-            "INDIVIDUAL_STUDENTS"
-          ]
-        },
-        "materials": {
-          "items": {
-            "$ref": "Material"
-          },
-          "type": "array",
-          "description": "Additional materials. Announcements must have no more than 20 material items."
-        },
-        "scheduledTime": {
-          "type": "string",
-          "description": "Optional timestamp when this announcement is scheduled to be published.",
-          "format": "google-datetime"
-        },
-        "individualStudentsOptions": {
-          "$ref": "IndividualStudentsOptions",
-          "description": "Identifiers of students with access to the announcement. This field is set only if `assigneeMode` is `INDIVIDUAL_STUDENTS`. If the `assigneeMode` is `INDIVIDUAL_STUDENTS`, then only students specified in this field can see the announcement."
-        },
-        "id": {
-          "type": "string",
-          "description": "Classroom-assigned identifier of this announcement, unique per course. Read-only."
-        },
-        "creationTime": {
-          "format": "google-datetime",
-          "type": "string",
-          "description": "Timestamp when this announcement was created. Read-only."
-        },
-        "state": {
-          "enum": [
-            "ANNOUNCEMENT_STATE_UNSPECIFIED",
-            "PUBLISHED",
-            "DRAFT",
-            "DELETED"
-          ],
-          "description": "Status of this announcement. If unspecified, the default state is `DRAFT`.",
-          "type": "string",
-          "enumDescriptions": [
-            "No state specified. This is never returned.",
-            "Status for announcement that has been published. This is the default state.",
-            "Status for an announcement that is not yet published. Announcement in this state is visible only to course teachers and domain administrators.",
-            "Status for announcement that was published but is now deleted. Announcement in this state is visible only to course teachers and domain administrators. Announcement in this state is deleted after some time."
-          ]
-        },
-        "creatorUserId": {
-          "type": "string",
-          "description": "Identifier for the user that created the announcement. Read-only."
-        }
-      },
-      "id": "Announcement",
-      "type": "object",
-      "description": "Announcement created by a teacher for students of the course"
-    },
-    "ListTeachersResponse": {
-      "id": "ListTeachersResponse",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "Token identifying the next page of results to return. If empty, no further results are available."
-        },
-        "teachers": {
-          "type": "array",
-          "items": {
-            "$ref": "Teacher"
-          },
-          "description": "Teachers who match the list request."
-        }
-      },
-      "type": "object",
-      "description": "Response when listing teachers."
-    },
-    "ListStudentSubmissionsResponse": {
-      "id": "ListStudentSubmissionsResponse",
-      "properties": {
-        "studentSubmissions": {
-          "description": "Student work that matches the request.",
-          "type": "array",
-          "items": {
-            "$ref": "StudentSubmission"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Token identifying the next page of results to return. If empty, no further results are available."
-        }
-      },
-      "description": "Response when listing student submissions.",
-      "type": "object"
-    },
-    "ListCourseWorkResponse": {
-      "description": "Response when listing course work.",
-      "id": "ListCourseWorkResponse",
-      "type": "object",
-      "properties": {
-        "courseWork": {
-          "items": {
-            "$ref": "CourseWork"
-          },
-          "description": "Course work items that match the request.",
-          "type": "array"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Token identifying the next page of results to return. If empty, no further results are available."
-        }
-      }
-    },
-    "CourseAlias": {
-      "properties": {
-        "alias": {
-          "type": "string",
-          "description": "Alias string. The format of the string indicates the desired alias scoping. * `d:` indicates a domain-scoped alias. Example: `d:math_101` * `p:` indicates a project-scoped alias. Example: `p:abc123` This field has a maximum length of 256 characters."
-        }
-      },
-      "id": "CourseAlias",
-      "description": "Alternative identifier for a course. An alias uniquely identifies a course. It must be unique within one of the following scopes: * domain: A domain-scoped alias is visible to all users within the alias creator's domain and can be created only by a domain admin. A domain-scoped alias is often used when a course has an identifier external to Classroom. * project: A project-scoped alias is visible to any request from an application using the Developer Console project ID that created the alias and can be created by any project. A project-scoped alias is often used when an application has alternative identifiers. A random value can also be used to avoid duplicate courses in the event of transmission failures, as retrying a request will return `ALREADY_EXISTS` if a previous one has succeeded.",
-      "type": "object"
-    },
-    "TurnInStudentSubmissionRequest": {
-      "type": "object",
-      "properties": {},
-      "description": "Request to turn in a student submission.",
-      "id": "TurnInStudentSubmissionRequest"
-    },
-    "Guardian": {
-      "id": "Guardian",
-      "type": "object",
-      "properties": {
-        "studentId": {
-          "description": "Identifier for the student to whom the guardian relationship applies.",
-          "type": "string"
-        },
-        "guardianId": {
-          "type": "string",
-          "description": "Identifier for the guardian."
-        },
-        "guardianProfile": {
-          "$ref": "UserProfile",
-          "description": "User profile for the guardian."
-        },
-        "invitedEmailAddress": {
-          "type": "string",
-          "description": "The email address to which the initial guardian invitation was sent. This field is only visible to domain administrators."
-        }
-      },
-      "description": "Association between a student and a guardian of that student. The guardian may receive information about the student's course work."
-    },
-    "CloudPubsubTopic": {
-      "properties": {
-        "topicName": {
-          "description": "The `name` field of a Cloud Pub/Sub [Topic](https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics#Topic).",
-          "type": "string"
-        }
-      },
-      "id": "CloudPubsubTopic",
-      "description": "A reference to a Cloud Pub/Sub topic. To register for notifications, the owner of the topic must grant `classroom-notifications@system.gserviceaccount.com` the `projects.topics.publish` permission.",
-      "type": "object"
-    },
-    "Attachment": {
-      "type": "object",
-      "properties": {
-        "form": {
-          "$ref": "Form",
-          "description": "Google Forms attachment."
-        },
-        "youTubeVideo": {
-          "description": "Youtube video attachment.",
-          "$ref": "YouTubeVideo"
-        },
-        "link": {
-          "$ref": "Link",
-          "description": "Link attachment."
-        },
-        "driveFile": {
-          "description": "Google Drive file attachment.",
-          "$ref": "DriveFile"
-        }
-      },
-      "id": "Attachment",
-      "description": "Attachment added to student assignment work. When creating attachments, setting the `form` field is not supported."
-    },
-    "ShortAnswerSubmission": {
-      "id": "ShortAnswerSubmission",
-      "description": "Student work for a short answer question.",
-      "type": "object",
-      "properties": {
-        "answer": {
-          "description": "Student response to a short-answer question.",
-          "type": "string"
-        }
-      }
-    },
-    "ListTopicResponse": {
-      "description": "Response when listing topics.",
-      "properties": {
-        "topic": {
-          "type": "array",
-          "description": "Topic items that match the request.",
-          "items": {
-            "$ref": "Topic"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Token identifying the next page of results to return. If empty, no further results are available."
-        }
-      },
-      "type": "object",
-      "id": "ListTopicResponse"
-    },
-    "Feed": {
-      "properties": {
-        "courseWorkChangesInfo": {
-          "$ref": "CourseWorkChangesInfo",
-          "description": "Information about a `Feed` with a `feed_type` of `COURSE_WORK_CHANGES`. This field must be specified if `feed_type` is `COURSE_WORK_CHANGES`."
-        },
-        "feedType": {
-          "description": "The type of feed.",
-          "type": "string",
-          "enum": [
-            "FEED_TYPE_UNSPECIFIED",
-            "DOMAIN_ROSTER_CHANGES",
-            "COURSE_ROSTER_CHANGES",
-            "COURSE_WORK_CHANGES"
-          ],
-          "enumDescriptions": [
-            "Should never be returned or provided.",
-            "All roster changes for a particular domain. Notifications will be generated whenever a user joins or leaves a course. No notifications will be generated when an invitation is created or deleted, but notifications will be generated when a user joins a course by accepting an invitation.",
-            "All roster changes for a particular course. Notifications will be generated whenever a user joins or leaves a course. No notifications will be generated when an invitation is created or deleted, but notifications will be generated when a user joins a course by accepting an invitation.",
-            "All course work activity for a particular course. Notifications will be generated when a CourseWork or StudentSubmission object is created or modified. No notification will be generated when a StudentSubmission object is created in connection with the creation or modification of its parent CourseWork object (but a notification will be generated for that CourseWork object's creation or modification)."
-          ]
-        },
-        "courseRosterChangesInfo": {
-          "$ref": "CourseRosterChangesInfo",
-          "description": "Information about a `Feed` with a `feed_type` of `COURSE_ROSTER_CHANGES`. This field must be specified if `feed_type` is `COURSE_ROSTER_CHANGES`."
-        }
-      },
-      "id": "Feed",
-      "description": "A class of notifications that an application can register to receive. For example: \"all roster changes for a domain\".",
-      "type": "object"
-    },
-    "SharedDriveFile": {
-      "description": "Drive file that is used as material for course work.",
-      "properties": {
-        "driveFile": {
-          "description": "Drive file details.",
-          "$ref": "DriveFile"
-        },
-        "shareMode": {
-          "enumDescriptions": [
-            "No sharing mode specified. This should never be returned.",
-            "Students can view the shared file.",
-            "Students can edit the shared file.",
-            "Students have a personal copy of the shared file."
-          ],
-          "description": "Mechanism by which students access the Drive item.",
-          "type": "string",
-          "enum": [
-            "UNKNOWN_SHARE_MODE",
-            "VIEW",
-            "EDIT",
-            "STUDENT_COPY"
-          ]
-        }
-      },
-      "type": "object",
-      "id": "SharedDriveFile"
-    },
-    "ListGuardiansResponse": {
-      "properties": {
-        "nextPageToken": {
-          "description": "Token identifying the next page of results to return. If empty, no further results are available.",
-          "type": "string"
-        },
-        "guardians": {
-          "items": {
-            "$ref": "Guardian"
-          },
-          "description": "Guardians on this page of results that met the criteria specified in the request.",
-          "type": "array"
-        }
-      },
-      "id": "ListGuardiansResponse",
-      "description": "Response when listing guardians.",
-      "type": "object"
-    },
-    "ListCourseAliasesResponse": {
-      "id": "ListCourseAliasesResponse",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "Token identifying the next page of results to return. If empty, no further results are available."
-        },
-        "aliases": {
-          "description": "The course aliases.",
-          "items": {
-            "$ref": "CourseAlias"
-          },
-          "type": "array"
-        }
-      },
-      "description": "Response when listing course aliases.",
-      "type": "object"
-    },
-    "UserProfile": {
-      "description": "Global information for a user.",
-      "properties": {
-        "photoUrl": {
-          "description": "URL of user's profile photo. Read-only.",
-          "type": "string"
-        },
-        "permissions": {
-          "items": {
-            "$ref": "GlobalPermission"
-          },
-          "type": "array",
-          "description": "Global permissions of the user. Read-only."
-        },
-        "verifiedTeacher": {
-          "description": "Represents whether a G Suite for Education user's domain administrator has explicitly verified them as being a teacher. If the user is not a member of a G Suite for Education domain, than this field is always false. Read-only",
-          "type": "boolean"
-        },
-        "name": {
-          "description": "Name of the user. Read-only.",
-          "$ref": "Name"
-        },
-        "emailAddress": {
-          "type": "string",
-          "description": "Email address of the user. Read-only."
-        },
-        "id": {
-          "type": "string",
-          "description": "Identifier of the user. Read-only."
-        }
-      },
-      "type": "object",
-      "id": "UserProfile"
-    },
-    "Topic": {
-      "description": "Topic created by a teacher for the course",
-      "properties": {
-        "updateTime": {
-          "format": "google-datetime",
-          "description": "The time the topic was last updated by the system. Read-only.",
-          "type": "string"
-        },
-        "courseId": {
-          "description": "Identifier of the course. Read-only.",
-          "type": "string"
-        },
-        "topicId": {
-          "description": "Unique identifier for the topic. Read-only.",
-          "type": "string"
-        },
-        "name": {
-          "description": "The name of the topic, generated by the user. Leading and trailing whitespaces, if any, are trimmed. Also, multiple consecutive whitespaces are collapsed into one inside the name. The result must be a non-empty string. Topic names are case sensitive, and must be no longer than 100 characters.",
-          "type": "string"
-        }
-      },
-      "id": "Topic",
-      "type": "object"
-    },
-    "Form": {
-      "description": "Google Forms item.",
-      "id": "Form",
-      "type": "object",
-      "properties": {
-        "thumbnailUrl": {
-          "type": "string",
-          "description": "URL of a thumbnail image of the Form. Read-only."
-        },
-        "responseUrl": {
-          "description": "URL of the form responses document. Only set if respsonses have been recorded and only when the requesting user is an editor of the form. Read-only.",
-          "type": "string"
-        },
-        "formUrl": {
-          "description": "URL of the form.",
-          "type": "string"
-        },
-        "title": {
-          "description": "Title of the Form. Read-only.",
-          "type": "string"
-        }
-      }
-    },
-    "Name": {
-      "description": "Details of the user's name.",
-      "id": "Name",
-      "type": "object",
-      "properties": {
-        "fullName": {
-          "description": "The user's full name formed by concatenating the first and last name values. Read-only.",
-          "type": "string"
-        },
-        "familyName": {
-          "description": "The user's last name. Read-only.",
-          "type": "string"
-        },
-        "givenName": {
-          "type": "string",
-          "description": "The user's first name. Read-only."
-        }
-      }
-    },
-    "Assignment": {
-      "id": "Assignment",
-      "type": "object",
-      "properties": {
-        "studentWorkFolder": {
-          "description": "Drive folder where attachments from student submissions are placed. This is only populated for course teachers and administrators.",
-          "$ref": "DriveFolder"
-        }
-      },
-      "description": "Additional details for assignments."
-    },
-    "CourseWorkMaterial": {
-      "type": "object",
-      "description": "Course work material created by a teacher for students of the course",
-      "id": "CourseWorkMaterial",
-      "properties": {
-        "materials": {
-          "type": "array",
-          "description": "Additional materials. A course work material must have no more than 20 material items.",
-          "items": {
-            "$ref": "Material"
-          }
-        },
-        "creationTime": {
-          "format": "google-datetime",
-          "description": "Timestamp when this course work material was created. Read-only.",
-          "type": "string"
-        },
-        "courseId": {
-          "description": "Identifier of the course. Read-only.",
-          "type": "string"
-        },
-        "updateTime": {
-          "description": "Timestamp of the most recent change to this course work material. Read-only.",
-          "type": "string",
-          "format": "google-datetime"
-        },
-        "topicId": {
-          "description": "Identifier for the topic that this course work material is associated with. Must match an existing topic in the course.",
-          "type": "string"
-        },
-        "scheduledTime": {
-          "format": "google-datetime",
-          "type": "string",
-          "description": "Optional timestamp when this course work material is scheduled to be published."
-        },
-        "description": {
-          "type": "string",
-          "description": "Optional description of this course work material. The text must be a valid UTF-8 string containing no more than 30,000 characters."
-        },
-        "state": {
-          "description": "Status of this course work material. If unspecified, the default state is `DRAFT`.",
-          "enum": [
-            "COURSEWORK_MATERIAL_STATE_UNSPECIFIED",
-            "PUBLISHED",
-            "DRAFT",
-            "DELETED"
-          ],
-          "enumDescriptions": [
-            "No state specified. This is never returned.",
-            "Status for course work material that has been published. This is the default state.",
-            "Status for an course work material that is not yet published. Course work material in this state is visible only to course teachers and domain administrators.",
-            "Status for course work material that was published but is now deleted. Course work material in this state is visible only to course teachers and domain administrators. Course work material in this state is deleted after some time."
-          ],
-          "type": "string"
-        },
-        "creatorUserId": {
-          "type": "string",
-          "description": "Identifier for the user that created the course work material. Read-only."
-        },
-        "individualStudentsOptions": {
-          "description": "Identifiers of students with access to the course work material. This field is set only if `assigneeMode` is `INDIVIDUAL_STUDENTS`. If the `assigneeMode` is `INDIVIDUAL_STUDENTS`, then only students specified in this field can see the course work material.",
-          "$ref": "IndividualStudentsOptions"
-        },
-        "title": {
-          "description": "Title of this course work material. The title must be a valid UTF-8 string containing between 1 and 3000 characters.",
-          "type": "string"
-        },
-        "alternateLink": {
-          "description": "Absolute link to this course work material in the Classroom web UI. This is only populated if `state` is `PUBLISHED`. Read-only.",
-          "type": "string"
-        },
-        "id": {
-          "description": "Classroom-assigned identifier of this course work material, unique per course. Read-only.",
-          "type": "string"
-        },
-        "assigneeMode": {
-          "enum": [
-            "ASSIGNEE_MODE_UNSPECIFIED",
-            "ALL_STUDENTS",
-            "INDIVIDUAL_STUDENTS"
-          ],
-          "enumDescriptions": [
-            "No mode specified. This is never returned.",
-            "All students can see the item. This is the default state.",
-            "A subset of the students can see the item."
-          ],
-          "description": "Assignee mode of the course work material. If unspecified, the default value is `ALL_STUDENTS`.",
-          "type": "string"
-        }
-      }
-    },
-    "Material": {
-      "properties": {
-        "form": {
-          "description": "Google Forms material.",
-          "$ref": "Form"
-        },
-        "youtubeVideo": {
-          "description": "YouTube video material.",
-          "$ref": "YouTubeVideo"
-        },
-        "link": {
-          "description": "Link material. On creation, this is upgraded to a more appropriate type if possible, and this is reflected in the response.",
-          "$ref": "Link"
-        },
-        "driveFile": {
-          "description": "Google Drive file material.",
-          "$ref": "SharedDriveFile"
-        }
-      },
-      "id": "Material",
-      "type": "object",
-      "description": "Material attached to course work. When creating attachments, setting the `form` field is not supported."
-    },
-    "Empty": {
-      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
-      "properties": {},
-      "type": "object",
-      "id": "Empty"
-    },
-    "Student": {
-      "description": "Student in a course.",
-      "properties": {
-        "courseId": {
-          "type": "string",
-          "description": "Identifier of the course. Read-only."
-        },
-        "userId": {
-          "type": "string",
-          "description": "Identifier of the user. When specified as a parameter of a request, this identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user"
-        },
-        "studentWorkFolder": {
-          "description": "Information about a Drive Folder for this student's work in this course. Only visible to the student and domain administrators. Read-only.",
-          "$ref": "DriveFolder"
-        },
-        "profile": {
-          "description": "Global user information for the student. Read-only.",
-          "$ref": "UserProfile"
-        }
-      },
-      "id": "Student",
-      "type": "object"
-    },
-    "Invitation": {
-      "type": "object",
-      "id": "Invitation",
-      "description": "An invitation to join a course.",
-      "properties": {
-        "courseId": {
-          "type": "string",
-          "description": "Identifier of the course to invite the user to."
-        },
-        "role": {
-          "enum": [
-            "COURSE_ROLE_UNSPECIFIED",
-            "STUDENT",
-            "TEACHER",
-            "OWNER"
-          ],
-          "enumDescriptions": [
-            "No course role.",
-            "Student in the course.",
-            "Teacher of the course.",
-            "Owner of the course."
-          ],
-          "type": "string",
-          "description": "Role to invite the user to have. Must not be `COURSE_ROLE_UNSPECIFIED`."
-        },
-        "id": {
-          "type": "string",
-          "description": "Identifier assigned by Classroom. Read-only."
-        },
-        "userId": {
-          "type": "string",
-          "description": "Identifier of the invited user. When specified as a parameter of a request, this identifier can be set to one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user"
-        }
-      }
-    },
-    "ReturnStudentSubmissionRequest": {
-      "description": "Request to return a student submission.",
-      "type": "object",
-      "properties": {},
-      "id": "ReturnStudentSubmissionRequest"
-    },
-    "MultipleChoiceSubmission": {
-      "id": "MultipleChoiceSubmission",
-      "type": "object",
-      "properties": {
-        "answer": {
-          "description": "Student's select choice.",
-          "type": "string"
-        }
-      },
-      "description": "Student work for a multiple-choice question."
-    },
-    "Course": {
-      "id": "Course",
-      "properties": {
-        "teacherGroupEmail": {
-          "type": "string",
-          "description": "The email address of a Google group containing all teachers of the course. This group does not accept email and can only be used for permissions. Read-only."
-        },
-        "alternateLink": {
-          "description": "Absolute link to this course in the Classroom web UI. Read-only.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of the course. For example, \"10th Grade Biology\". The name is required. It must be between 1 and 750 characters and a valid UTF-8 string.",
-          "type": "string"
-        },
-        "courseState": {
-          "type": "string",
-          "enum": [
-            "COURSE_STATE_UNSPECIFIED",
-            "ACTIVE",
-            "ARCHIVED",
-            "PROVISIONED",
-            "DECLINED",
-            "SUSPENDED"
-          ],
-          "description": "State of the course. If unspecified, the default state is `PROVISIONED`.",
-          "enumDescriptions": [
-            "No course state. No returned Course message will use this value.",
-            "The course is active.",
-            "The course has been archived. You cannot modify it except to change it to a different state.",
-            "The course has been created, but not yet activated. It is accessible by the primary teacher and domain administrators, who may modify it or change it to the `ACTIVE` or `DECLINED` states. A course may only be changed to `PROVISIONED` if it is in the `DECLINED` state.",
-            "The course has been created, but declined. It is accessible by the course owner and domain administrators, though it will not be displayed in the web UI. You cannot modify the course except to change it to the `PROVISIONED` state. A course may only be changed to `DECLINED` if it is in the `PROVISIONED` state.",
-            "The course has been suspended. You cannot modify the course, and only the user identified by the `owner_id` can view the course. A course may be placed in this state if it potentially violates the Terms of Service."
-          ]
-        },
-        "section": {
-          "type": "string",
-          "description": "Section of the course. For example, \"Period 2\". If set, this field must be a valid UTF-8 string and no longer than 2800 characters."
-        },
-        "ownerId": {
-          "type": "string",
-          "description": "The identifier of the owner of a course. When specified as a parameter of a create course request, this field is required. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user This must be set in a create request. Admins can also specify this field in a patch course request to transfer ownership. In other contexts, it is read-only."
-        },
-        "calendarId": {
-          "description": "The Calendar ID for a calendar that all course members can see, to which Classroom adds events for course work and announcements in the course. Read-only.",
-          "type": "string"
-        },
-        "courseMaterialSets": {
-          "description": "Sets of materials that appear on the \"about\" page of this course. Read-only.",
-          "type": "array",
-          "items": {
-            "$ref": "CourseMaterialSet"
-          }
-        },
-        "guardiansEnabled": {
-          "description": "Whether or not guardian notifications are enabled for this course. Read-only.",
-          "type": "boolean"
-        },
-        "descriptionHeading": {
-          "type": "string",
-          "description": "Optional heading for the description. For example, \"Welcome to 10th Grade Biology.\" If set, this field must be a valid UTF-8 string and no longer than 3600 characters."
-        },
-        "enrollmentCode": {
-          "description": "Enrollment code to use when joining this course. Specifying this field in a course update mask results in an error. Read-only.",
-          "type": "string"
-        },
-        "description": {
-          "type": "string",
-          "description": "Optional description. For example, \"We'll be learning about the structure of living creatures from a combination of textbooks, guest lectures, and lab work. Expect to be excited!\" If set, this field must be a valid UTF-8 string and no longer than 30,000 characters."
-        },
-        "teacherFolder": {
-          "$ref": "DriveFolder",
-          "description": "Information about a Drive Folder that is shared with all teachers of the course. This field will only be set for teachers of the course and domain administrators. Read-only."
-        },
-        "creationTime": {
-          "description": "Creation time of the course. Specifying this field in a course update mask results in an error. Read-only.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "updateTime": {
-          "description": "Time of the most recent update to this course. Specifying this field in a course update mask results in an error. Read-only.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "room": {
-          "type": "string",
-          "description": "Optional room location. For example, \"301\". If set, this field must be a valid UTF-8 string and no longer than 650 characters."
-        },
-        "id": {
-          "description": "Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask results in an error.",
-          "type": "string"
-        },
-        "courseGroupEmail": {
-          "description": "The email address of a Google group containing all members of the course. This group does not accept email and can only be used for permissions. Read-only.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "A Course in Classroom."
-    }
-  },
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/classroom.rosters": {
-          "description": "Manage your Google Classroom class rosters"
-        },
-        "https://www.googleapis.com/auth/classroom.rosters.readonly": {
-          "description": "View your Google Classroom class rosters"
-        },
-        "https://www.googleapis.com/auth/classroom.profile.emails": {
-          "description": "View the email addresses of people in your classes"
-        },
-        "https://www.googleapis.com/auth/classroom.announcements.readonly": {
-          "description": "View announcements in Google Classroom"
-        },
-        "https://www.googleapis.com/auth/classroom.coursework.me": {
-          "description": "Manage your course work and view your grades in Google Classroom"
-        },
-        "https://www.googleapis.com/auth/classroom.coursework.students.readonly": {
-          "description": "View course work and grades for students in the Google Classroom classes you teach or administer"
-        },
-        "https://www.googleapis.com/auth/classroom.courses.readonly": {
-          "description": "View your Google Classroom classes"
-        },
-        "https://www.googleapis.com/auth/classroom.push-notifications": {
-          "description": "Receive notifications about your Google Classroom data"
-        },
-        "https://www.googleapis.com/auth/classroom.courseworkmaterials.readonly": {
-          "description": "See all classwork materials for your Google Classroom classes"
-        },
-        "https://www.googleapis.com/auth/classroom.student-submissions.me.readonly": {
-          "description": "View your course work and grades in Google Classroom"
-        },
-        "https://www.googleapis.com/auth/classroom.guardianlinks.me.readonly": {
-          "description": "View your Google Classroom guardians"
-        },
-        "https://www.googleapis.com/auth/classroom.coursework.students": {
-          "description": "Manage course work and grades for students in the Google Classroom classes you teach and view the course work and grades for classes you administer"
-        },
-        "https://www.googleapis.com/auth/classroom.courseworkmaterials": {
-          "description": "See, edit, and create classwork materials in Google Classroom"
-        },
-        "https://www.googleapis.com/auth/classroom.guardianlinks.students": {
-          "description": "View and manage guardians for students in your Google Classroom classes"
-        },
-        "https://www.googleapis.com/auth/classroom.topics": {
-          "description": "See, create, and edit topics in Google Classroom"
-        },
-        "https://www.googleapis.com/auth/classroom.courses": {
-          "description": "Manage your Google Classroom classes"
-        },
-        "https://www.googleapis.com/auth/classroom.guardianlinks.students.readonly": {
-          "description": "View guardians for students in your Google Classroom classes"
-        },
-        "https://www.googleapis.com/auth/classroom.student-submissions.students.readonly": {
-          "description": "View course work and grades for students in the Google Classroom classes you teach or administer"
-        },
-        "https://www.googleapis.com/auth/classroom.announcements": {
-          "description": "View and manage announcements in Google Classroom"
-        },
-        "https://www.googleapis.com/auth/classroom.topics.readonly": {
-          "description": "View topics in Google Classroom"
-        },
-        "https://www.googleapis.com/auth/classroom.coursework.me.readonly": {
-          "description": "View your course work and grades in Google Classroom"
-        },
-        "https://www.googleapis.com/auth/classroom.profile.photos": {
-          "description": "View the profile photos of people in your classes"
-        }
-      }
-    }
-  },
-  "description": "Manages classes, rosters, and invitations in Google Classroom.",
-  "servicePath": "",
-  "name": "classroom",
-  "id": "classroom:v1",
-  "basePath": "",
-  "batchPath": "batch",
-  "resources": {
-    "registrations": {
-      "methods": {
-        "create": {
-          "path": "v1/registrations",
-          "response": {
-            "$ref": "Registration"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/classroom.push-notifications"
-          ],
-          "flatPath": "v1/registrations",
-          "description": "Creates a `Registration`, causing Classroom to start sending notifications from the provided `feed` to the destination provided in `cloudPubSubTopic`. Returns the created `Registration`. Currently, this will be the same as the argument, but with server-assigned fields such as `expiry_time` and `id` filled in. Note that any value specified for the `expiry_time` or `id` fields will be ignored. While Classroom may validate the `cloudPubSubTopic` and return errors on a best effort basis, it is the caller's responsibility to ensure that it exists and that Classroom has permission to publish to it. This method may return the following error codes: * `PERMISSION_DENIED` if: * the authenticated user does not have permission to receive notifications from the requested field; or * the current user has not granted access to the current Cloud project with the appropriate scope for the requested feed. Note that domain-wide delegation of authority is not currently supported for this purpose. If the request has the appropriate scope, but no grant exists, a Request Errors is returned. * another access error is encountered. * `INVALID_ARGUMENT` if: * no `cloudPubsubTopic` is specified, or the specified `cloudPubsubTopic` is not valid; or * no `feed` is specified, or the specified `feed` is not valid. * `NOT_FOUND` if: * the specified `feed` cannot be located, or the requesting user does not have permission to determine whether or not it exists; or * the specified `cloudPubsubTopic` cannot be located, or Classroom has not been granted permission to publish to it.",
-          "request": {
-            "$ref": "Registration"
-          },
-          "httpMethod": "POST",
-          "parameters": {},
-          "id": "classroom.registrations.create",
-          "parameterOrder": []
-        },
-        "delete": {
-          "parameters": {
-            "registrationId": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "description": "The `registration_id` of the `Registration` to be deleted."
-            }
-          },
-          "response": {
-            "$ref": "Empty"
-          },
-          "id": "classroom.registrations.delete",
-          "httpMethod": "DELETE",
-          "scopes": [
-            "https://www.googleapis.com/auth/classroom.push-notifications"
-          ],
-          "flatPath": "v1/registrations/{registrationId}",
-          "parameterOrder": [
-            "registrationId"
-          ],
-          "description": "Deletes a `Registration`, causing Classroom to stop sending notifications for that `Registration`.",
-          "path": "v1/registrations/{registrationId}"
-        }
-      }
-    },
-    "userProfiles": {
-      "resources": {
-        "guardians": {
-          "methods": {
-            "get": {
-              "flatPath": "v1/userProfiles/{studentId}/guardians/{guardianId}",
-              "parameterOrder": [
-                "studentId",
-                "guardianId"
-              ],
-              "response": {
-                "$ref": "Guardian"
-              },
-              "description": "Returns a specific guardian. This method returns the following error codes: * `PERMISSION_DENIED` if no user that matches the provided `student_id` is visible to the requesting user, if the requesting user is not permitted to view guardian information for the student identified by the `student_id`, if guardians are not enabled for the domain in question, or for other access errors. * `INVALID_ARGUMENT` if a `student_id` is specified, but its format cannot be recognized (it is not an email address, nor a `student_id` from the API, nor the literal string `me`). * `NOT_FOUND` if the requesting user is permitted to view guardians for the requested `student_id`, but no `Guardian` record exists for that student that matches the provided `guardian_id`.",
-              "path": "v1/userProfiles/{studentId}/guardians/{guardianId}",
-              "id": "classroom.userProfiles.guardians.get",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.guardianlinks.me.readonly",
-                "https://www.googleapis.com/auth/classroom.guardianlinks.students",
-                "https://www.googleapis.com/auth/classroom.guardianlinks.students.readonly"
-              ],
-              "httpMethod": "GET",
-              "parameters": {
-                "guardianId": {
-                  "required": true,
-                  "description": "The `id` field from a `Guardian`.",
-                  "location": "path",
-                  "type": "string"
-                },
-                "studentId": {
-                  "required": true,
-                  "description": "The student whose guardian is being requested. One of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
-                  "type": "string",
-                  "location": "path"
-                }
-              }
-            },
-            "delete": {
-              "id": "classroom.userProfiles.guardians.delete",
-              "description": "Deletes a guardian. The guardian will no longer receive guardian notifications and the guardian will no longer be accessible via the API. This method returns the following error codes: * `PERMISSION_DENIED` if no user that matches the provided `student_id` is visible to the requesting user, if the requesting user is not permitted to manage guardians for the student identified by the `student_id`, if guardians are not enabled for the domain in question, or for other access errors. * `INVALID_ARGUMENT` if a `student_id` is specified, but its format cannot be recognized (it is not an email address, nor a `student_id` from the API). * `NOT_FOUND` if the requesting user is permitted to modify guardians for the requested `student_id`, but no `Guardian` record exists for that student with the provided `guardian_id`.",
-              "parameters": {
-                "guardianId": {
-                  "description": "The `id` field from a `Guardian`.",
-                  "type": "string",
-                  "required": true,
-                  "location": "path"
-                },
-                "studentId": {
-                  "location": "path",
-                  "description": "The student whose guardian is to be deleted. One of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "httpMethod": "DELETE",
-              "flatPath": "v1/userProfiles/{studentId}/guardians/{guardianId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.guardianlinks.students"
-              ],
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "studentId",
-                "guardianId"
-              ],
-              "path": "v1/userProfiles/{studentId}/guardians/{guardianId}"
-            },
-            "list": {
-              "response": {
-                "$ref": "ListGuardiansResponse"
-              },
-              "id": "classroom.userProfiles.guardians.list",
-              "flatPath": "v1/userProfiles/{studentId}/guardians",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.guardianlinks.me.readonly",
-                "https://www.googleapis.com/auth/classroom.guardianlinks.students",
-                "https://www.googleapis.com/auth/classroom.guardianlinks.students.readonly"
-              ],
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "studentId"
-              ],
-              "path": "v1/userProfiles/{studentId}/guardians",
-              "description": "Returns a list of guardians that the requesting user is permitted to view, restricted to those that match the request. To list guardians for any student that the requesting user may view guardians for, use the literal character `-` for the student ID. This method returns the following error codes: * `PERMISSION_DENIED` if a `student_id` is specified, and the requesting user is not permitted to view guardian information for that student, if `\"-\"` is specified as the `student_id` and the user is not a domain administrator, if guardians are not enabled for the domain in question, if the `invited_email_address` filter is set by a user who is not a domain administrator, or for other access errors. * `INVALID_ARGUMENT` if a `student_id` is specified, but its format cannot be recognized (it is not an email address, nor a `student_id` from the API, nor the literal string `me`). May also be returned if an invalid `page_token` is provided. * `NOT_FOUND` if a `student_id` is specified, and its format can be recognized, but Classroom has no record of that student.",
-              "parameters": {
-                "pageToken": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token."
-                },
-                "invitedEmailAddress": {
-                  "description": "Filter results by the email address that the original invitation was sent to, resulting in this guardian link. This filter can only be used by domain administrators.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "studentId": {
-                  "description": "Filter results by the student who the guardian is linked to. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user * the string literal `\"-\"`, indicating that results should be returned for all students that the requesting user has access to view.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                },
-                "pageSize": {
-                  "type": "integer",
-                  "format": "int32",
-                  "location": "query",
-                  "description": "Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results."
-                }
-              }
-            }
-          }
-        },
-        "guardianInvitations": {
-          "methods": {
-            "patch": {
-              "parameters": {
-                "updateMask": {
-                  "location": "query",
-                  "description": "Mask that identifies which fields on the course to update. This field is required to do an update. The update fails if invalid fields are specified. The following fields are valid: * `state` When set in a query parameter, this field should be specified as `updateMask=,,...`",
-                  "format": "google-fieldmask",
-                  "type": "string"
-                },
-                "invitationId": {
-                  "description": "The `id` field of the `GuardianInvitation` to be modified.",
-                  "required": true,
-                  "location": "path",
-                  "type": "string"
-                },
-                "studentId": {
-                  "description": "The ID of the student whose guardian invitation is to be modified.",
-                  "location": "path",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "description": "Modifies a guardian invitation. Currently, the only valid modification is to change the `state` from `PENDING` to `COMPLETE`. This has the effect of withdrawing the invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the current user does not have permission to manage guardians, if guardians are not enabled for the domain in question or for other access errors. * `FAILED_PRECONDITION` if the guardian link is not in the `PENDING` state. * `INVALID_ARGUMENT` if the format of the student ID provided cannot be recognized (it is not an email address, nor a `user_id` from this API), or if the passed `GuardianInvitation` has a `state` other than `COMPLETE`, or if it modifies fields other than `state`. * `NOT_FOUND` if the student ID provided is a valid student ID, but Classroom has no record of that student, or if the `id` field does not refer to a guardian invitation known to Classroom.",
-              "id": "classroom.userProfiles.guardianInvitations.patch",
-              "path": "v1/userProfiles/{studentId}/guardianInvitations/{invitationId}",
-              "response": {
-                "$ref": "GuardianInvitation"
-              },
-              "parameterOrder": [
-                "studentId",
-                "invitationId"
-              ],
-              "flatPath": "v1/userProfiles/{studentId}/guardianInvitations/{invitationId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.guardianlinks.students"
-              ],
-              "httpMethod": "PATCH",
-              "request": {
-                "$ref": "GuardianInvitation"
-              }
-            },
-            "get": {
-              "path": "v1/userProfiles/{studentId}/guardianInvitations/{invitationId}",
-              "parameters": {
-                "invitationId": {
-                  "description": "The `id` field of the `GuardianInvitation` being requested.",
-                  "type": "string",
-                  "required": true,
-                  "location": "path"
-                },
-                "studentId": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "description": "The ID of the student whose guardian invitation is being requested."
-                }
-              },
-              "flatPath": "v1/userProfiles/{studentId}/guardianInvitations/{invitationId}",
-              "description": "Returns a specific guardian invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to view guardian invitations for the student identified by the `student_id`, if guardians are not enabled for the domain in question, or for other access errors. * `INVALID_ARGUMENT` if a `student_id` is specified, but its format cannot be recognized (it is not an email address, nor a `student_id` from the API, nor the literal string `me`). * `NOT_FOUND` if Classroom cannot find any record of the given student or `invitation_id`. May also be returned if the student exists, but the requesting user does not have access to see that student.",
-              "id": "classroom.userProfiles.guardianInvitations.get",
-              "response": {
-                "$ref": "GuardianInvitation"
-              },
-              "parameterOrder": [
-                "studentId",
-                "invitationId"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.guardianlinks.students",
-                "https://www.googleapis.com/auth/classroom.guardianlinks.students.readonly"
-              ],
-              "httpMethod": "GET"
-            },
-            "list": {
-              "path": "v1/userProfiles/{studentId}/guardianInvitations",
-              "response": {
-                "$ref": "ListGuardianInvitationsResponse"
-              },
-              "parameters": {
-                "studentId": {
-                  "description": "The ID of the student whose guardian invitations are to be returned. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user * the string literal `\"-\"`, indicating that results should be returned for all students that the requesting user is permitted to view guardian invitations.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "invitedEmailAddress": {
-                  "location": "query",
-                  "description": "If specified, only results with the specified `invited_email_address` are returned.",
-                  "type": "string"
-                },
-                "states": {
-                  "description": "If specified, only results with the specified `state` values are returned. Otherwise, results with a `state` of `PENDING` are returned.",
-                  "repeated": true,
-                  "enumDescriptions": [
-                    "Should never be returned.",
-                    "The invitation is active and awaiting a response.",
-                    "The invitation is no longer active. It may have been accepted, declined, withdrawn or it may have expired."
-                  ],
-                  "enum": [
-                    "GUARDIAN_INVITATION_STATE_UNSPECIFIED",
-                    "PENDING",
-                    "COMPLETE"
-                  ],
-                  "location": "query",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "type": "integer",
-                  "format": "int32",
-                  "description": "Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results.",
-                  "location": "query"
-                },
-                "pageToken": {
-                  "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
-                  "type": "string",
-                  "location": "query"
-                }
-              },
-              "flatPath": "v1/userProfiles/{studentId}/guardianInvitations",
-              "description": "Returns a list of guardian invitations that the requesting user is permitted to view, filtered by the parameters provided. This method returns the following error codes: * `PERMISSION_DENIED` if a `student_id` is specified, and the requesting user is not permitted to view guardian invitations for that student, if `\"-\"` is specified as the `student_id` and the user is not a domain administrator, if guardians are not enabled for the domain in question, or for other access errors. * `INVALID_ARGUMENT` if a `student_id` is specified, but its format cannot be recognized (it is not an email address, nor a `student_id` from the API, nor the literal string `me`). May also be returned if an invalid `page_token` or `state` is provided. * `NOT_FOUND` if a `student_id` is specified, and its format can be recognized, but Classroom has no record of that student.",
-              "id": "classroom.userProfiles.guardianInvitations.list",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "studentId"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.guardianlinks.students",
-                "https://www.googleapis.com/auth/classroom.guardianlinks.students.readonly"
-              ]
-            },
-            "create": {
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.guardianlinks.students"
-              ],
-              "parameterOrder": [
-                "studentId"
-              ],
-              "description": "Creates a guardian invitation, and sends an email to the guardian asking them to confirm that they are the student's guardian. Once the guardian accepts the invitation, their `state` will change to `COMPLETED` and they will start receiving guardian notifications. A `Guardian` resource will also be created to represent the active guardian. The request object must have the `student_id` and `invited_email_address` fields set. Failing to set these fields, or setting any other fields in the request, will result in an error. This method returns the following error codes: * `PERMISSION_DENIED` if the current user does not have permission to manage guardians, if the guardian in question has already rejected too many requests for that student, if guardians are not enabled for the domain in question, or for other access errors. * `RESOURCE_EXHAUSTED` if the student or guardian has exceeded the guardian link limit. * `INVALID_ARGUMENT` if the guardian email address is not valid (for example, if it is too long), or if the format of the student ID provided cannot be recognized (it is not an email address, nor a `user_id` from this API). This error will also be returned if read-only fields are set, or if the `state` field is set to to a value other than `PENDING`. * `NOT_FOUND` if the student ID provided is a valid student ID, but Classroom has no record of that student. * `ALREADY_EXISTS` if there is already a pending guardian invitation for the student and `invited_email_address` provided, or if the provided `invited_email_address` matches the Google account of an existing `Guardian` for this user.",
-              "httpMethod": "POST",
-              "request": {
-                "$ref": "GuardianInvitation"
-              },
-              "parameters": {
-                "studentId": {
-                  "required": true,
-                  "description": "ID of the student (in standard format)",
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "path": "v1/userProfiles/{studentId}/guardianInvitations",
-              "flatPath": "v1/userProfiles/{studentId}/guardianInvitations",
-              "response": {
-                "$ref": "GuardianInvitation"
-              },
-              "id": "classroom.userProfiles.guardianInvitations.create"
-            }
-          }
-        }
-      },
-      "methods": {
-        "get": {
-          "scopes": [
-            "https://www.googleapis.com/auth/classroom.profile.emails",
-            "https://www.googleapis.com/auth/classroom.profile.photos",
-            "https://www.googleapis.com/auth/classroom.rosters",
-            "https://www.googleapis.com/auth/classroom.rosters.readonly"
-          ],
-          "flatPath": "v1/userProfiles/{userId}",
-          "parameterOrder": [
-            "userId"
-          ],
-          "response": {
-            "$ref": "UserProfile"
-          },
-          "parameters": {
-            "userId": {
-              "type": "string",
-              "description": "Identifier of the profile to return. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
-              "location": "path",
-              "required": true
-            }
-          },
-          "description": "Returns a user profile. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access this user profile, if no profile exists with the requested ID, or for access errors.",
-          "path": "v1/userProfiles/{userId}",
-          "httpMethod": "GET",
-          "id": "classroom.userProfiles.get"
-        }
-      }
-    },
-    "courses": {
-      "methods": {
-        "delete": {
-          "parameterOrder": [
-            "id"
-          ],
-          "response": {
-            "$ref": "Empty"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/classroom.courses"
-          ],
-          "parameters": {
-            "id": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "Identifier of the course to delete. This identifier can be either the Classroom-assigned identifier or an alias."
-            }
-          },
-          "description": "Deletes a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete the requested course or for access errors. * `NOT_FOUND` if no course exists with the requested ID.",
-          "path": "v1/courses/{id}",
-          "flatPath": "v1/courses/{id}",
-          "httpMethod": "DELETE",
-          "id": "classroom.courses.delete"
-        },
-        "list": {
-          "response": {
-            "$ref": "ListCoursesResponse"
-          },
-          "parameterOrder": [],
-          "path": "v1/courses",
-          "parameters": {
-            "teacherId": {
-              "description": "Restricts returned courses to those having a teacher with the specified identifier. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
-              "location": "query",
-              "type": "string"
-            },
-            "studentId": {
-              "description": "Restricts returned courses to those having a student with the specified identifier. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
-              "type": "string",
-              "location": "query"
-            },
-            "pageSize": {
-              "format": "int32",
-              "location": "query",
-              "type": "integer",
-              "description": "Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results."
-            },
-            "pageToken": {
-              "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
-              "type": "string",
-              "location": "query"
-            },
-            "courseStates": {
-              "enum": [
-                "COURSE_STATE_UNSPECIFIED",
-                "ACTIVE",
-                "ARCHIVED",
-                "PROVISIONED",
-                "DECLINED",
-                "SUSPENDED"
-              ],
-              "location": "query",
-              "type": "string",
-              "enumDescriptions": [
-                "No course state. No returned Course message will use this value.",
-                "The course is active.",
-                "The course has been archived. You cannot modify it except to change it to a different state.",
-                "The course has been created, but not yet activated. It is accessible by the primary teacher and domain administrators, who may modify it or change it to the `ACTIVE` or `DECLINED` states. A course may only be changed to `PROVISIONED` if it is in the `DECLINED` state.",
-                "The course has been created, but declined. It is accessible by the course owner and domain administrators, though it will not be displayed in the web UI. You cannot modify the course except to change it to the `PROVISIONED` state. A course may only be changed to `DECLINED` if it is in the `PROVISIONED` state.",
-                "The course has been suspended. You cannot modify the course, and only the user identified by the `owner_id` can view the course. A course may be placed in this state if it potentially violates the Terms of Service."
-              ],
-              "description": "Restricts returned courses to those in one of the specified states The default value is ACTIVE, ARCHIVED, PROVISIONED, DECLINED.",
-              "repeated": true
-            }
-          },
-          "flatPath": "v1/courses",
-          "scopes": [
-            "https://www.googleapis.com/auth/classroom.courses",
-            "https://www.googleapis.com/auth/classroom.courses.readonly"
-          ],
-          "description": "Returns a list of courses that the requesting user is permitted to view, restricted to those that match the request. Returned courses are ordered by creation time, with the most recently created coming first. This method returns the following error codes: * `PERMISSION_DENIED` for access errors. * `INVALID_ARGUMENT` if the query argument is malformed. * `NOT_FOUND` if any users specified in the query arguments do not exist.",
-          "id": "classroom.courses.list",
-          "httpMethod": "GET"
-        },
-        "create": {
-          "parameterOrder": [],
-          "id": "classroom.courses.create",
-          "request": {
-            "$ref": "Course"
-          },
-          "httpMethod": "POST",
-          "path": "v1/courses",
-          "scopes": [
-            "https://www.googleapis.com/auth/classroom.courses"
-          ],
-          "flatPath": "v1/courses",
-          "description": "Creates a course. The user specified in `ownerId` is the owner of the created course and added as a teacher. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create courses or for access errors. * `NOT_FOUND` if the primary teacher is not a valid user. * `FAILED_PRECONDITION` if the course owner's account is disabled or for the following request errors: * UserGroupsMembershipLimitReached * `ALREADY_EXISTS` if an alias was specified in the `id` and already exists.",
-          "response": {
-            "$ref": "Course"
-          },
-          "parameters": {}
-        },
-        "patch": {
-          "scopes": [
-            "https://www.googleapis.com/auth/classroom.courses"
-          ],
-          "request": {
-            "$ref": "Course"
-          },
-          "path": "v1/courses/{id}",
-          "flatPath": "v1/courses/{id}",
-          "response": {
-            "$ref": "Course"
-          },
-          "description": "Updates one or more fields in a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to modify the requested course or for access errors. * `NOT_FOUND` if no course exists with the requested ID. * `INVALID_ARGUMENT` if invalid fields are specified in the update mask or if no update mask is supplied. * `FAILED_PRECONDITION` for the following request errors: * CourseNotModifiable",
-          "parameterOrder": [
-            "id"
-          ],
-          "httpMethod": "PATCH",
-          "id": "classroom.courses.patch",
-          "parameters": {
-            "id": {
-              "description": "Identifier of the course to update. This identifier can be either the Classroom-assigned identifier or an alias.",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            },
-            "updateMask": {
-              "format": "google-fieldmask",
-              "description": "Mask that identifies which fields on the course to update. This field is required to do an update. The update will fail if invalid fields are specified. The following fields are valid: * `name` * `section` * `descriptionHeading` * `description` * `room` * `courseState` * `ownerId` Note: patches to ownerId are treated as being effective immediately, but in practice it may take some time for the ownership transfer of all affected resources to complete. When set in a query parameter, this field should be specified as `updateMask=,,...`",
-              "location": "query",
-              "type": "string"
-            }
-          }
-        },
-        "get": {
-          "parameters": {
-            "id": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "Identifier of the course to return. This identifier can be either the Classroom-assigned identifier or an alias."
-            }
-          },
-          "parameterOrder": [
-            "id"
-          ],
-          "id": "classroom.courses.get",
-          "response": {
-            "$ref": "Course"
-          },
-          "flatPath": "v1/courses/{id}",
-          "description": "Returns a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or for access errors. * `NOT_FOUND` if no course exists with the requested ID.",
-          "path": "v1/courses/{id}",
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/classroom.courses",
-            "https://www.googleapis.com/auth/classroom.courses.readonly"
-          ]
-        },
-        "update": {
-          "description": "Updates a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to modify the requested course or for access errors. * `NOT_FOUND` if no course exists with the requested ID. * `FAILED_PRECONDITION` for the following request errors: * CourseNotModifiable",
-          "scopes": [
-            "https://www.googleapis.com/auth/classroom.courses"
-          ],
-          "parameterOrder": [
-            "id"
-          ],
-          "response": {
-            "$ref": "Course"
-          },
-          "id": "classroom.courses.update",
-          "httpMethod": "PUT",
-          "parameters": {
-            "id": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "Identifier of the course to update. This identifier can be either the Classroom-assigned identifier or an alias."
-            }
-          },
-          "path": "v1/courses/{id}",
-          "request": {
-            "$ref": "Course"
-          },
-          "flatPath": "v1/courses/{id}"
-        }
-      },
-      "resources": {
-        "announcements": {
-          "methods": {
-            "delete": {
-              "path": "v1/courses/{courseId}/announcements/{id}",
-              "parameterOrder": [
-                "courseId",
-                "id"
-              ],
-              "response": {
-                "$ref": "Empty"
-              },
-              "flatPath": "v1/courses/{courseId}/announcements/{id}",
-              "description": "Deletes an announcement. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding announcement item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting developer project did not create the corresponding announcement, if the requesting user is not permitted to delete the requested course or for access errors. * `FAILED_PRECONDITION` if the requested announcement has already been deleted. * `NOT_FOUND` if no course exists with the requested ID.",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.announcements"
-              ],
-              "id": "classroom.courses.announcements.delete",
-              "parameters": {
-                "id": {
-                  "location": "path",
-                  "description": "Identifier of the announcement to delete. This identifier is a Classroom-assigned identifier.",
-                  "required": true,
-                  "type": "string"
-                },
-                "courseId": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias."
-                }
-              },
-              "httpMethod": "DELETE"
-            },
-            "patch": {
-              "parameterOrder": [
-                "courseId",
-                "id"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.announcements"
-              ],
-              "parameters": {
-                "id": {
-                  "description": "Identifier of the announcement.",
-                  "type": "string",
-                  "required": true,
-                  "location": "path"
-                },
-                "courseId": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias."
-                },
-                "updateMask": {
-                  "type": "string",
-                  "description": "Mask that identifies which fields on the announcement to update. This field is required to do an update. The update fails if invalid fields are specified. If a field supports empty values, it can be cleared by specifying it in the update mask and not in the Announcement object. If a field that does not support empty values is included in the update mask and not set in the Announcement object, an `INVALID_ARGUMENT` error is returned. The following fields may be specified by teachers: * `text` * `state` * `scheduled_time`",
-                  "location": "query",
-                  "format": "google-fieldmask"
-                }
-              },
-              "path": "v1/courses/{courseId}/announcements/{id}",
-              "response": {
-                "$ref": "Announcement"
-              },
-              "flatPath": "v1/courses/{courseId}/announcements/{id}",
-              "description": "Updates one or more fields of an announcement. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting developer project did not create the corresponding announcement or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `FAILED_PRECONDITION` if the requested announcement has already been deleted. * `NOT_FOUND` if the requested course or announcement does not exist",
-              "request": {
-                "$ref": "Announcement"
-              },
-              "httpMethod": "PATCH",
-              "id": "classroom.courses.announcements.patch"
-            },
-            "create": {
-              "flatPath": "v1/courses/{courseId}/announcements",
-              "response": {
-                "$ref": "Announcement"
-              },
-              "path": "v1/courses/{courseId}/announcements",
-              "httpMethod": "POST",
-              "id": "classroom.courses.announcements.create",
-              "request": {
-                "$ref": "Announcement"
-              },
-              "description": "Creates an announcement. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course, create announcements in the requested course, share a Drive attachment, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist. * `FAILED_PRECONDITION` for the following request error: * AttachmentNotVisible",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.announcements"
-              ],
-              "parameterOrder": [
-                "courseId"
-              ],
-              "parameters": {
-                "courseId": {
-                  "required": true,
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "type": "string",
-                  "location": "path"
-                }
-              }
-            },
-            "get": {
-              "path": "v1/courses/{courseId}/announcements/{id}",
-              "parameterOrder": [
-                "courseId",
-                "id"
-              ],
-              "flatPath": "v1/courses/{courseId}/announcements/{id}",
-              "response": {
-                "$ref": "Announcement"
-              },
-              "httpMethod": "GET",
-              "id": "classroom.courses.announcements.get",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.announcements",
-                "https://www.googleapis.com/auth/classroom.announcements.readonly"
-              ],
-              "parameters": {
-                "courseId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias."
-                },
-                "id": {
-                  "description": "Identifier of the announcement.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                }
-              },
-              "description": "Returns an announcement. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or announcement, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course or announcement does not exist."
-            },
-            "list": {
-              "response": {
-                "$ref": "ListAnnouncementsResponse"
-              },
-              "parameters": {
-                "pageSize": {
-                  "format": "int32",
-                  "location": "query",
-                  "description": "Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results.",
-                  "type": "integer"
-                },
-                "announcementStates": {
-                  "description": "Restriction on the `state` of announcements returned. If this argument is left unspecified, the default value is `PUBLISHED`.",
-                  "repeated": true,
-                  "enumDescriptions": [
-                    "No state specified. This is never returned.",
-                    "Status for announcement that has been published. This is the default state.",
-                    "Status for an announcement that is not yet published. Announcement in this state is visible only to course teachers and domain administrators.",
-                    "Status for announcement that was published but is now deleted. Announcement in this state is visible only to course teachers and domain administrators. Announcement in this state is deleted after some time."
-                  ],
-                  "type": "string",
-                  "enum": [
-                    "ANNOUNCEMENT_STATE_UNSPECIFIED",
-                    "PUBLISHED",
-                    "DRAFT",
-                    "DELETED"
-                  ],
-                  "location": "query"
-                },
-                "pageToken": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token."
-                },
-                "orderBy": {
-                  "description": "Optional sort ordering for results. A comma-separated list of fields with an optional sort direction keyword. Supported field is `updateTime`. Supported direction keywords are `asc` and `desc`. If not specified, `updateTime desc` is the default behavior. Examples: `updateTime asc`, `updateTime`",
-                  "location": "query",
-                  "type": "string"
-                },
-                "courseId": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias."
-                }
-              },
-              "flatPath": "v1/courses/{courseId}/announcements",
-              "description": "Returns a list of announcements that the requester is permitted to view. Course students may only view `PUBLISHED` announcements. Course teachers and domain administrators may view all announcements. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist.",
-              "parameterOrder": [
-                "courseId"
-              ],
-              "httpMethod": "GET",
-              "id": "classroom.courses.announcements.list",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.announcements",
-                "https://www.googleapis.com/auth/classroom.announcements.readonly"
-              ],
-              "path": "v1/courses/{courseId}/announcements"
-            },
-            "modifyAssignees": {
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.announcements"
-              ],
-              "response": {
-                "$ref": "Announcement"
-              },
-              "path": "v1/courses/{courseId}/announcements/{id}:modifyAssignees",
-              "parameters": {
-                "id": {
-                  "type": "string",
-                  "description": "Identifier of the announcement.",
-                  "required": true,
-                  "location": "path"
-                },
-                "courseId": {
-                  "type": "string",
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "location": "path",
-                  "required": true
-                }
-              },
-              "id": "classroom.courses.announcements.modifyAssignees",
-              "httpMethod": "POST",
-              "flatPath": "v1/courses/{courseId}/announcements/{id}:modifyAssignees",
-              "parameterOrder": [
-                "courseId",
-                "id"
-              ],
-              "request": {
-                "$ref": "ModifyAnnouncementAssigneesRequest"
-              },
-              "description": "Modifies assignee mode and options of an announcement. Only a teacher of the course that contains the announcement may call this method. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course or course work does not exist."
-            }
-          }
-        },
-        "students": {
-          "methods": {
-            "create": {
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "courseId"
-              ],
-              "description": "Adds a user as a student of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create students in this course or for access errors. * `NOT_FOUND` if the requested course ID does not exist. * `FAILED_PRECONDITION` if the requested user's account is disabled, for the following request errors: * CourseMemberLimitReached * CourseNotModifiable * UserGroupsMembershipLimitReached * `ALREADY_EXISTS` if the user is already a student or teacher in the course.",
-              "response": {
-                "$ref": "Student"
-              },
-              "flatPath": "v1/courses/{courseId}/students",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.profile.emails",
-                "https://www.googleapis.com/auth/classroom.profile.photos",
-                "https://www.googleapis.com/auth/classroom.rosters"
-              ],
-              "id": "classroom.courses.students.create",
-              "path": "v1/courses/{courseId}/students",
-              "parameters": {
-                "courseId": {
-                  "required": true,
-                  "description": "Identifier of the course to create the student in. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "type": "string",
-                  "location": "path"
-                },
-                "enrollmentCode": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "Enrollment code of the course to create the student in. This code is required if userId corresponds to the requesting user; it may be omitted if the requesting user has administrative permissions to create students for any user."
-                }
-              },
-              "request": {
-                "$ref": "Student"
-              }
-            },
-            "delete": {
-              "flatPath": "v1/courses/{courseId}/students/{userId}",
-              "httpMethod": "DELETE",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.rosters"
-              ],
-              "path": "v1/courses/{courseId}/students/{userId}",
-              "response": {
-                "$ref": "Empty"
-              },
-              "id": "classroom.courses.students.delete",
-              "description": "Deletes a student of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete students of this course or for access errors. * `NOT_FOUND` if no student of this course has the requested ID or if the course does not exist.",
-              "parameterOrder": [
-                "courseId",
-                "userId"
-              ],
-              "parameters": {
-                "userId": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "Identifier of the student to delete. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user"
-                },
-                "courseId": {
-                  "required": true,
-                  "location": "path",
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "type": "string"
-                }
-              }
-            },
-            "list": {
-              "path": "v1/courses/{courseId}/students",
-              "parameterOrder": [
-                "courseId"
-              ],
-              "parameters": {
-                "courseId": {
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "type": "string",
-                  "required": true,
-                  "location": "path"
-                },
-                "pageSize": {
-                  "description": "Maximum number of items to return. The default is 30 if unspecified or `0`. The server may return fewer than the specified number of results.",
-                  "location": "query",
-                  "format": "int32",
-                  "type": "integer"
-                },
-                "pageToken": {
-                  "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
-                  "type": "string",
-                  "location": "query"
-                }
-              },
-              "id": "classroom.courses.students.list",
-              "description": "Returns a list of students of this course that the requester is permitted to view. This method returns the following error codes: * `NOT_FOUND` if the course does not exist. * `PERMISSION_DENIED` for access errors.",
-              "flatPath": "v1/courses/{courseId}/students",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.profile.emails",
-                "https://www.googleapis.com/auth/classroom.profile.photos",
-                "https://www.googleapis.com/auth/classroom.rosters",
-                "https://www.googleapis.com/auth/classroom.rosters.readonly"
-              ],
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "ListStudentsResponse"
-              }
-            },
-            "get": {
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "Student"
-              },
-              "parameterOrder": [
-                "courseId",
-                "userId"
-              ],
-              "parameters": {
-                "courseId": {
-                  "required": true,
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "location": "path",
-                  "type": "string"
-                },
-                "userId": {
-                  "type": "string",
-                  "description": "Identifier of the student to return. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
-                  "location": "path",
-                  "required": true
-                }
-              },
-              "id": "classroom.courses.students.get",
-              "flatPath": "v1/courses/{courseId}/students/{userId}",
-              "description": "Returns a student of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to view students of this course or for access errors. * `NOT_FOUND` if no student of this course has the requested ID or if the course does not exist.",
-              "path": "v1/courses/{courseId}/students/{userId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.profile.emails",
-                "https://www.googleapis.com/auth/classroom.profile.photos",
-                "https://www.googleapis.com/auth/classroom.rosters",
-                "https://www.googleapis.com/auth/classroom.rosters.readonly"
-              ]
-            }
-          }
-        },
-        "topics": {
-          "methods": {
-            "create": {
-              "response": {
-                "$ref": "Topic"
-              },
-              "parameters": {
-                "courseId": {
-                  "type": "string",
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "location": "path",
-                  "required": true
-                }
-              },
-              "id": "classroom.courses.topics.create",
-              "httpMethod": "POST",
-              "path": "v1/courses/{courseId}/topics",
-              "flatPath": "v1/courses/{courseId}/topics",
-              "request": {
-                "$ref": "Topic"
-              },
-              "description": "Creates a topic. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course, create a topic in the requested course, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist.",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.topics"
-              ],
-              "parameterOrder": [
-                "courseId"
-              ]
-            },
-            "get": {
-              "path": "v1/courses/{courseId}/topics/{id}",
-              "id": "classroom.courses.topics.get",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.topics",
-                "https://www.googleapis.com/auth/classroom.topics.readonly"
-              ],
-              "parameters": {
-                "courseId": {
-                  "description": "Identifier of the course.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                },
-                "id": {
-                  "required": true,
-                  "type": "string",
-                  "description": "Identifier of the topic.",
-                  "location": "path"
-                }
-              },
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "Topic"
-              },
-              "parameterOrder": [
-                "courseId",
-                "id"
-              ],
-              "description": "Returns a topic. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or topic, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course or topic does not exist.",
-              "flatPath": "v1/courses/{courseId}/topics/{id}"
-            },
-            "patch": {
-              "flatPath": "v1/courses/{courseId}/topics/{id}",
-              "parameterOrder": [
-                "courseId",
-                "id"
-              ],
-              "description": "Updates one or more fields of a topic. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting developer project did not create the corresponding topic or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course or topic does not exist",
-              "httpMethod": "PATCH",
-              "response": {
-                "$ref": "Topic"
-              },
-              "id": "classroom.courses.topics.patch",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.topics"
-              ],
-              "request": {
-                "$ref": "Topic"
-              },
-              "path": "v1/courses/{courseId}/topics/{id}",
-              "parameters": {
-                "courseId": {
-                  "location": "path",
-                  "required": true,
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "type": "string"
-                },
-                "id": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "Identifier of the topic."
-                },
-                "updateMask": {
-                  "format": "google-fieldmask",
-                  "description": "Mask that identifies which fields on the topic to update. This field is required to do an update. The update fails if invalid fields are specified. If a field supports empty values, it can be cleared by specifying it in the update mask and not in the Topic object. If a field that does not support empty values is included in the update mask and not set in the Topic object, an `INVALID_ARGUMENT` error is returned. The following fields may be specified: * `name`",
-                  "location": "query",
-                  "type": "string"
-                }
-              }
-            },
-            "list": {
-              "description": "Returns the list of topics that the requester is permitted to view. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist.",
-              "flatPath": "v1/courses/{courseId}/topics",
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "ListTopicResponse"
-              },
-              "path": "v1/courses/{courseId}/topics",
-              "parameters": {
-                "pageSize": {
-                  "type": "integer",
-                  "format": "int32",
-                  "description": "Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results.",
-                  "location": "query"
-                },
-                "courseId": {
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                },
-                "pageToken": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token."
-                }
-              },
-              "parameterOrder": [
-                "courseId"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.topics",
-                "https://www.googleapis.com/auth/classroom.topics.readonly"
-              ],
-              "id": "classroom.courses.topics.list"
-            },
-            "delete": {
-              "id": "classroom.courses.topics.delete",
-              "description": "Deletes a topic. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not allowed to delete the requested topic or for access errors. * `FAILED_PRECONDITION` if the requested topic has already been deleted. * `NOT_FOUND` if no course or topic exists with the requested ID.",
-              "response": {
-                "$ref": "Empty"
-              },
-              "flatPath": "v1/courses/{courseId}/topics/{id}",
-              "parameters": {
-                "id": {
-                  "description": "Identifier of the topic to delete.",
-                  "location": "path",
-                  "required": true,
-                  "type": "string"
-                },
-                "courseId": {
-                  "type": "string",
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "location": "path",
-                  "required": true
-                }
-              },
-              "path": "v1/courses/{courseId}/topics/{id}",
-              "httpMethod": "DELETE",
-              "parameterOrder": [
-                "courseId",
-                "id"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.topics"
-              ]
-            }
-          }
-        },
-        "courseWorkMaterials": {
-          "methods": {
-            "delete": {
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.courseworkmaterials"
-              ],
-              "parameterOrder": [
-                "courseId",
-                "id"
-              ],
-              "parameters": {
-                "id": {
-                  "description": "Identifier of the course work material to delete. This identifier is a Classroom-assigned identifier.",
-                  "required": true,
-                  "location": "path",
-                  "type": "string"
-                },
-                "courseId": {
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "location": "path",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "description": "Deletes a course work material. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work material item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting developer project did not create the corresponding course work material, if the requesting user is not permitted to delete the requested course or for access errors. * `FAILED_PRECONDITION` if the requested course work material has already been deleted. * `NOT_FOUND` if no course exists with the requested ID.",
-              "path": "v1/courses/{courseId}/courseWorkMaterials/{id}",
-              "flatPath": "v1/courses/{courseId}/courseWorkMaterials/{id}",
-              "response": {
-                "$ref": "Empty"
-              },
-              "httpMethod": "DELETE",
-              "id": "classroom.courses.courseWorkMaterials.delete"
-            },
-            "create": {
-              "flatPath": "v1/courses/{courseId}/courseWorkMaterials",
-              "request": {
-                "$ref": "CourseWorkMaterial"
-              },
-              "description": "Creates a course work material. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course, create course work material in the requested course, share a Drive attachment, or for access errors. * `INVALID_ARGUMENT` if the request is malformed or if more than 20 * materials are provided. * `NOT_FOUND` if the requested course does not exist. * `FAILED_PRECONDITION` for the following request error: * AttachmentNotVisible",
-              "id": "classroom.courses.courseWorkMaterials.create",
-              "path": "v1/courses/{courseId}/courseWorkMaterials",
-              "parameters": {
-                "courseId": {
-                  "location": "path",
-                  "type": "string",
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "required": true
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.courseworkmaterials"
-              ],
-              "response": {
-                "$ref": "CourseWorkMaterial"
-              },
-              "parameterOrder": [
-                "courseId"
-              ],
-              "httpMethod": "POST"
-            },
-            "list": {
-              "parameterOrder": [
-                "courseId"
-              ],
-              "description": "Returns a list of course work material that the requester is permitted to view. Course students may only view `PUBLISHED` course work material. Course teachers and domain administrators may view all course work material. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist.",
-              "parameters": {
-                "courseId": {
-                  "location": "path",
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "type": "string",
-                  "required": true
-                },
-                "materialLink": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "Optional filtering for course work material with at least one link material whose URL partially matches the provided string."
-                },
-                "orderBy": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "Optional sort ordering for results. A comma-separated list of fields with an optional sort direction keyword. Supported field is `updateTime`. Supported direction keywords are `asc` and `desc`. If not specified, `updateTime desc` is the default behavior. Examples: `updateTime asc`, `updateTime`"
-                },
-                "materialDriveId": {
-                  "description": "Optional filtering for course work material with at least one Drive material whose ID matches the provided string. If `material_link` is also specified, course work material must have materials matching both filters.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "pageToken": {
-                  "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "type": "integer",
-                  "format": "int32",
-                  "location": "query",
-                  "description": "Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results."
-                },
-                "courseWorkMaterialStates": {
-                  "repeated": true,
-                  "location": "query",
-                  "description": "Restriction on the work status to return. Only course work material that matches is returned. If unspecified, items with a work status of `PUBLISHED` is returned.",
-                  "enum": [
-                    "COURSEWORK_MATERIAL_STATE_UNSPECIFIED",
-                    "PUBLISHED",
-                    "DRAFT",
-                    "DELETED"
-                  ],
-                  "enumDescriptions": [
-                    "No state specified. This is never returned.",
-                    "Status for course work material that has been published. This is the default state.",
-                    "Status for an course work material that is not yet published. Course work material in this state is visible only to course teachers and domain administrators.",
-                    "Status for course work material that was published but is now deleted. Course work material in this state is visible only to course teachers and domain administrators. Course work material in this state is deleted after some time."
-                  ],
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.courseworkmaterials",
-                "https://www.googleapis.com/auth/classroom.courseworkmaterials.readonly"
-              ],
-              "path": "v1/courses/{courseId}/courseWorkMaterials",
-              "response": {
-                "$ref": "ListCourseWorkMaterialResponse"
-              },
-              "id": "classroom.courses.courseWorkMaterials.list",
-              "httpMethod": "GET",
-              "flatPath": "v1/courses/{courseId}/courseWorkMaterials"
-            },
-            "get": {
-              "id": "classroom.courses.courseWorkMaterials.get",
-              "response": {
-                "$ref": "CourseWorkMaterial"
-              },
-              "parameters": {
-                "courseId": {
-                  "type": "string",
-                  "required": true,
-                  "location": "path",
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias."
-                },
-                "id": {
-                  "location": "path",
-                  "required": true,
-                  "description": "Identifier of the course work material.",
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1/courses/{courseId}/courseWorkMaterials/{id}",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.courseworkmaterials",
-                "https://www.googleapis.com/auth/classroom.courseworkmaterials.readonly"
-              ],
-              "description": "Returns a course work material. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work material, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course or course work material does not exist.",
-              "httpMethod": "GET",
-              "path": "v1/courses/{courseId}/courseWorkMaterials/{id}",
-              "parameterOrder": [
-                "courseId",
-                "id"
-              ]
-            },
-            "patch": {
-              "path": "v1/courses/{courseId}/courseWorkMaterials/{id}",
-              "request": {
-                "$ref": "CourseWorkMaterial"
-              },
-              "description": "Updates one or more fields of a course work material. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting developer project for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `FAILED_PRECONDITION` if the requested course work material has already been deleted. * `NOT_FOUND` if the requested course or course work material does not exist",
-              "parameterOrder": [
-                "courseId",
-                "id"
-              ],
-              "flatPath": "v1/courses/{courseId}/courseWorkMaterials/{id}",
-              "response": {
-                "$ref": "CourseWorkMaterial"
-              },
-              "id": "classroom.courses.courseWorkMaterials.patch",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.courseworkmaterials"
-              ],
-              "parameters": {
-                "courseId": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias."
-                },
-                "updateMask": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "Mask that identifies which fields on the course work material to update. This field is required to do an update. The update fails if invalid fields are specified. If a field supports empty values, it can be cleared by specifying it in the update mask and not in the course work material object. If a field that does not support empty values is included in the update mask and not set in the course work material object, an `INVALID_ARGUMENT` error is returned. The following fields may be specified by teachers: * `title` * `description` * `state` * `scheduled_time` * `topic_id`",
-                  "format": "google-fieldmask"
-                },
-                "id": {
-                  "description": "Identifier of the course work material.",
-                  "location": "path",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "httpMethod": "PATCH"
-            }
-          }
-        },
-        "courseWork": {
-          "resources": {
-            "studentSubmissions": {
-              "methods": {
-                "reclaim": {
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/classroom.coursework.me"
-                  ],
-                  "description": "Reclaims a student submission on behalf of the student that owns it. Reclaiming a student submission transfers ownership of attached Drive files to the student and updates the submission state. Only the student that owns the requested student submission may call this method, and only for a student submission that has been turned in. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, unsubmit the requested student submission, or for access errors. * `FAILED_PRECONDITION` if the student submission has not been turned in. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.",
-                  "parameters": {
-                    "id": {
-                      "description": "Identifier of the student submission.",
-                      "location": "path",
-                      "type": "string",
-                      "required": true
+            "methods": {
+                "create": {
+                    "description": "Creates a course. The user specified in `ownerId` is the owner of the created course and added as a teacher. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create courses or for access errors. * `NOT_FOUND` if the primary teacher is not a valid user. * `FAILED_PRECONDITION` if the course owner's account is disabled or for the following request errors: * UserGroupsMembershipLimitReached * `ALREADY_EXISTS` if an alias was specified in the `id` and already exists.",
+                    "flatPath": "v1/courses",
+                    "httpMethod": "POST",
+                    "id": "classroom.courses.create",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v1/courses",
+                    "request": {
+                        "$ref": "Course"
                     },
-                    "courseId": {
-                      "type": "string",
-                      "required": true,
-                      "location": "path",
-                      "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias."
+                    "response": {
+                        "$ref": "Course"
                     },
-                    "courseWorkId": {
-                      "required": true,
-                      "description": "Identifier of the course work.",
-                      "location": "path",
-                      "type": "string"
-                    }
-                  },
-                  "httpMethod": "POST",
-                  "flatPath": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:reclaim",
-                  "id": "classroom.courses.courseWork.studentSubmissions.reclaim",
-                  "parameterOrder": [
-                    "courseId",
-                    "courseWorkId",
-                    "id"
-                  ],
-                  "path": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:reclaim",
-                  "request": {
-                    "$ref": "ReclaimStudentSubmissionRequest"
-                  }
+                    "scopes": [
+                        "https://www.googleapis.com/auth/classroom.courses"
+                    ]
                 },
-                "turnIn": {
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "flatPath": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:turnIn",
-                  "description": "Turns in a student submission. Turning in a student submission transfers ownership of attached Drive files to the teacher and may also update the submission state. This may only be called by the student that owns the specified student submission. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, turn in the requested student submission, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.",
-                  "parameters": {
-                    "courseWorkId": {
-                      "type": "string",
-                      "location": "path",
-                      "description": "Identifier of the course work.",
-                      "required": true
+                "delete": {
+                    "description": "Deletes a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete the requested course or for access errors. * `NOT_FOUND` if no course exists with the requested ID.",
+                    "flatPath": "v1/courses/{id}",
+                    "httpMethod": "DELETE",
+                    "id": "classroom.courses.delete",
+                    "parameterOrder": [
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Identifier of the course to delete. This identifier can be either the Classroom-assigned identifier or an alias.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
                     },
-                    "id": {
-                      "description": "Identifier of the student submission.",
-                      "type": "string",
-                      "required": true,
-                      "location": "path"
+                    "path": "v1/courses/{id}",
+                    "response": {
+                        "$ref": "Empty"
                     },
-                    "courseId": {
-                      "type": "string",
-                      "required": true,
-                      "location": "path",
-                      "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias."
-                    }
-                  },
-                  "parameterOrder": [
-                    "courseId",
-                    "courseWorkId",
-                    "id"
-                  ],
-                  "httpMethod": "POST",
-                  "id": "classroom.courses.courseWork.studentSubmissions.turnIn",
-                  "request": {
-                    "$ref": "TurnInStudentSubmissionRequest"
-                  },
-                  "path": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:turnIn",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/classroom.coursework.me"
-                  ]
+                    "scopes": [
+                        "https://www.googleapis.com/auth/classroom.courses"
+                    ]
                 },
-                "return": {
-                  "flatPath": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:return",
-                  "request": {
-                    "$ref": "ReturnStudentSubmissionRequest"
-                  },
-                  "parameters": {
-                    "courseId": {
-                      "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                      "required": true,
-                      "location": "path",
-                      "type": "string"
+                "get": {
+                    "description": "Returns a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or for access errors. * `NOT_FOUND` if no course exists with the requested ID.",
+                    "flatPath": "v1/courses/{id}",
+                    "httpMethod": "GET",
+                    "id": "classroom.courses.get",
+                    "parameterOrder": [
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Identifier of the course to return. This identifier can be either the Classroom-assigned identifier or an alias.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
                     },
-                    "courseWorkId": {
-                      "type": "string",
-                      "location": "path",
-                      "required": true,
-                      "description": "Identifier of the course work."
+                    "path": "v1/courses/{id}",
+                    "response": {
+                        "$ref": "Course"
                     },
-                    "id": {
-                      "type": "string",
-                      "description": "Identifier of the student submission.",
-                      "required": true,
-                      "location": "path"
-                    }
-                  },
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "description": "Returns a student submission. Returning a student submission transfers ownership of attached Drive files to the student and may also update the submission state. Unlike the Classroom application, returning a student submission does not set assignedGrade to the draftGrade value. Only a teacher of the course that contains the requested student submission may call this method. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, return the requested student submission, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.",
-                  "path": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:return",
-                  "parameterOrder": [
-                    "courseId",
-                    "courseWorkId",
-                    "id"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/classroom.coursework.students"
-                  ],
-                  "httpMethod": "POST",
-                  "id": "classroom.courses.courseWork.studentSubmissions.return"
-                },
-                "modifyAttachments": {
-                  "response": {
-                    "$ref": "StudentSubmission"
-                  },
-                  "path": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:modifyAttachments",
-                  "flatPath": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:modifyAttachments",
-                  "parameters": {
-                    "id": {
-                      "description": "Identifier of the student submission.",
-                      "location": "path",
-                      "type": "string",
-                      "required": true
-                    },
-                    "courseId": {
-                      "required": true,
-                      "location": "path",
-                      "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                      "type": "string"
-                    },
-                    "courseWorkId": {
-                      "required": true,
-                      "description": "Identifier of the course work.",
-                      "type": "string",
-                      "location": "path"
-                    }
-                  },
-                  "parameterOrder": [
-                    "courseId",
-                    "courseWorkId",
-                    "id"
-                  ],
-                  "request": {
-                    "$ref": "ModifyAttachmentsRequest"
-                  },
-                  "description": "Modifies attachments of student submission. Attachments may only be added to student submissions belonging to course work objects with a `workType` of `ASSIGNMENT`. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, if the user is not permitted to modify attachments on the requested student submission, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.",
-                  "httpMethod": "POST",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/classroom.coursework.me",
-                    "https://www.googleapis.com/auth/classroom.coursework.students"
-                  ],
-                  "id": "classroom.courses.courseWork.studentSubmissions.modifyAttachments"
+                    "scopes": [
+                        "https://www.googleapis.com/auth/classroom.courses",
+                        "https://www.googleapis.com/auth/classroom.courses.readonly"
+                    ]
                 },
                 "list": {
-                  "parameters": {
-                    "pageSize": {
-                      "type": "integer",
-                      "format": "int32",
-                      "description": "Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results.",
-                      "location": "query"
+                    "description": "Returns a list of courses that the requesting user is permitted to view, restricted to those that match the request. Returned courses are ordered by creation time, with the most recently created coming first. This method returns the following error codes: * `PERMISSION_DENIED` for access errors. * `INVALID_ARGUMENT` if the query argument is malformed. * `NOT_FOUND` if any users specified in the query arguments do not exist.",
+                    "flatPath": "v1/courses",
+                    "httpMethod": "GET",
+                    "id": "classroom.courses.list",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "courseStates": {
+                            "description": "Restricts returned courses to those in one of the specified states The default value is ACTIVE, ARCHIVED, PROVISIONED, DECLINED.",
+                            "enum": [
+                                "COURSE_STATE_UNSPECIFIED",
+                                "ACTIVE",
+                                "ARCHIVED",
+                                "PROVISIONED",
+                                "DECLINED",
+                                "SUSPENDED"
+                            ],
+                            "enumDescriptions": [
+                                "No course state. No returned Course message will use this value.",
+                                "The course is active.",
+                                "The course has been archived. You cannot modify it except to change it to a different state.",
+                                "The course has been created, but not yet activated. It is accessible by the primary teacher and domain administrators, who may modify it or change it to the `ACTIVE` or `DECLINED` states. A course may only be changed to `PROVISIONED` if it is in the `DECLINED` state.",
+                                "The course has been created, but declined. It is accessible by the course owner and domain administrators, though it will not be displayed in the web UI. You cannot modify the course except to change it to the `PROVISIONED` state. A course may only be changed to `DECLINED` if it is in the `PROVISIONED` state.",
+                                "The course has been suspended. You cannot modify the course, and only the user identified by the `owner_id` can view the course. A course may be placed in this state if it potentially violates the Terms of Service."
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "pageSize": {
+                            "description": "Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "studentId": {
+                            "description": "Restricts returned courses to those having a student with the specified identifier. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "teacherId": {
+                            "description": "Restricts returned courses to those having a teacher with the specified identifier. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
+                            "location": "query",
+                            "type": "string"
+                        }
                     },
-                    "courseWorkId": {
-                      "required": true,
-                      "location": "path",
-                      "type": "string",
-                      "description": "Identifier of the student work to request. This may be set to the string literal `\"-\"` to request student work for all course work in the specified course."
+                    "path": "v1/courses",
+                    "response": {
+                        "$ref": "ListCoursesResponse"
                     },
-                    "pageToken": {
-                      "location": "query",
-                      "type": "string",
-                      "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token."
+                    "scopes": [
+                        "https://www.googleapis.com/auth/classroom.courses",
+                        "https://www.googleapis.com/auth/classroom.courses.readonly"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates one or more fields in a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to modify the requested course or for access errors. * `NOT_FOUND` if no course exists with the requested ID. * `INVALID_ARGUMENT` if invalid fields are specified in the update mask or if no update mask is supplied. * `FAILED_PRECONDITION` for the following request errors: * CourseNotModifiable",
+                    "flatPath": "v1/courses/{id}",
+                    "httpMethod": "PATCH",
+                    "id": "classroom.courses.patch",
+                    "parameterOrder": [
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Identifier of the course to update. This identifier can be either the Classroom-assigned identifier or an alias.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "updateMask": {
+                            "description": "Mask that identifies which fields on the course to update. This field is required to do an update. The update will fail if invalid fields are specified. The following fields are valid: * `name` * `section` * `descriptionHeading` * `description` * `room` * `courseState` * `ownerId` Note: patches to ownerId are treated as being effective immediately, but in practice it may take some time for the ownership transfer of all affected resources to complete. When set in a query parameter, this field should be specified as `updateMask=,,...`",
+                            "format": "google-fieldmask",
+                            "location": "query",
+                            "type": "string"
+                        }
                     },
-                    "late": {
-                      "location": "query",
-                      "type": "string",
-                      "enumDescriptions": [
-                        "No restriction on submission late values specified.",
-                        "Return StudentSubmissions where late is true.",
-                        "Return StudentSubmissions where late is false."
-                      ],
-                      "description": "Requested lateness value. If specified, returned student submissions are restricted by the requested value. If unspecified, submissions are returned regardless of `late` value.",
-                      "enum": [
-                        "LATE_VALUES_UNSPECIFIED",
-                        "LATE_ONLY",
-                        "NOT_LATE_ONLY"
-                      ]
+                    "path": "v1/courses/{id}",
+                    "request": {
+                        "$ref": "Course"
                     },
-                    "courseId": {
-                      "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
+                    "response": {
+                        "$ref": "Course"
                     },
-                    "userId": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "Optional argument to restrict returned student work to those owned by the student with the specified identifier. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user"
+                    "scopes": [
+                        "https://www.googleapis.com/auth/classroom.courses"
+                    ]
+                },
+                "update": {
+                    "description": "Updates a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to modify the requested course or for access errors. * `NOT_FOUND` if no course exists with the requested ID. * `FAILED_PRECONDITION` for the following request errors: * CourseNotModifiable",
+                    "flatPath": "v1/courses/{id}",
+                    "httpMethod": "PUT",
+                    "id": "classroom.courses.update",
+                    "parameterOrder": [
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Identifier of the course to update. This identifier can be either the Classroom-assigned identifier or an alias.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
                     },
-                    "states": {
-                      "description": "Requested submission states. If specified, returned student submissions match one of the specified submission states.",
-                      "enum": [
+                    "path": "v1/courses/{id}",
+                    "request": {
+                        "$ref": "Course"
+                    },
+                    "response": {
+                        "$ref": "Course"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/classroom.courses"
+                    ]
+                }
+            },
+            "resources": {
+                "aliases": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates an alias for a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create the alias or for access errors. * `NOT_FOUND` if the course does not exist. * `ALREADY_EXISTS` if the alias already exists. * `FAILED_PRECONDITION` if the alias requested does not make sense for the requesting user or course (for example, if a user not in a domain attempts to access a domain-scoped alias).",
+                            "flatPath": "v1/courses/{courseId}/aliases",
+                            "httpMethod": "POST",
+                            "id": "classroom.courses.aliases.create",
+                            "parameterOrder": [
+                                "courseId"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course to alias. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/aliases",
+                            "request": {
+                                "$ref": "CourseAlias"
+                            },
+                            "response": {
+                                "$ref": "CourseAlias"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.courses"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes an alias of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to remove the alias or for access errors. * `NOT_FOUND` if the alias does not exist. * `FAILED_PRECONDITION` if the alias requested does not make sense for the requesting user or course (for example, if a user not in a domain attempts to delete a domain-scoped alias).",
+                            "flatPath": "v1/courses/{courseId}/aliases/{alias}",
+                            "httpMethod": "DELETE",
+                            "id": "classroom.courses.aliases.delete",
+                            "parameterOrder": [
+                                "courseId",
+                                "alias"
+                            ],
+                            "parameters": {
+                                "alias": {
+                                    "description": "Alias to delete. This may not be the Classroom-assigned identifier.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "courseId": {
+                                    "description": "Identifier of the course whose alias should be deleted. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/aliases/{alias}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.courses"
+                            ]
+                        },
+                        "list": {
+                            "description": "Returns a list of aliases for a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the course or for access errors. * `NOT_FOUND` if the course does not exist.",
+                            "flatPath": "v1/courses/{courseId}/aliases",
+                            "httpMethod": "GET",
+                            "id": "classroom.courses.aliases.list",
+                            "parameterOrder": [
+                                "courseId"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "The identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/aliases",
+                            "response": {
+                                "$ref": "ListCourseAliasesResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.courses",
+                                "https://www.googleapis.com/auth/classroom.courses.readonly"
+                            ]
+                        }
+                    }
+                },
+                "announcements": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates an announcement. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course, create announcements in the requested course, share a Drive attachment, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist. * `FAILED_PRECONDITION` for the following request error: * AttachmentNotVisible",
+                            "flatPath": "v1/courses/{courseId}/announcements",
+                            "httpMethod": "POST",
+                            "id": "classroom.courses.announcements.create",
+                            "parameterOrder": [
+                                "courseId"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/announcements",
+                            "request": {
+                                "$ref": "Announcement"
+                            },
+                            "response": {
+                                "$ref": "Announcement"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.announcements"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes an announcement. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding announcement item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting developer project did not create the corresponding announcement, if the requesting user is not permitted to delete the requested course or for access errors. * `FAILED_PRECONDITION` if the requested announcement has already been deleted. * `NOT_FOUND` if no course exists with the requested ID.",
+                            "flatPath": "v1/courses/{courseId}/announcements/{id}",
+                            "httpMethod": "DELETE",
+                            "id": "classroom.courses.announcements.delete",
+                            "parameterOrder": [
+                                "courseId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "id": {
+                                    "description": "Identifier of the announcement to delete. This identifier is a Classroom-assigned identifier.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/announcements/{id}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.announcements"
+                            ]
+                        },
+                        "get": {
+                            "description": "Returns an announcement. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or announcement, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course or announcement does not exist.",
+                            "flatPath": "v1/courses/{courseId}/announcements/{id}",
+                            "httpMethod": "GET",
+                            "id": "classroom.courses.announcements.get",
+                            "parameterOrder": [
+                                "courseId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "id": {
+                                    "description": "Identifier of the announcement.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/announcements/{id}",
+                            "response": {
+                                "$ref": "Announcement"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.announcements",
+                                "https://www.googleapis.com/auth/classroom.announcements.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "Returns a list of announcements that the requester is permitted to view. Course students may only view `PUBLISHED` announcements. Course teachers and domain administrators may view all announcements. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist.",
+                            "flatPath": "v1/courses/{courseId}/announcements",
+                            "httpMethod": "GET",
+                            "id": "classroom.courses.announcements.list",
+                            "parameterOrder": [
+                                "courseId"
+                            ],
+                            "parameters": {
+                                "announcementStates": {
+                                    "description": "Restriction on the `state` of announcements returned. If this argument is left unspecified, the default value is `PUBLISHED`.",
+                                    "enum": [
+                                        "ANNOUNCEMENT_STATE_UNSPECIFIED",
+                                        "PUBLISHED",
+                                        "DRAFT",
+                                        "DELETED"
+                                    ],
+                                    "enumDescriptions": [
+                                        "No state specified. This is never returned.",
+                                        "Status for announcement that has been published. This is the default state.",
+                                        "Status for an announcement that is not yet published. Announcement in this state is visible only to course teachers and domain administrators.",
+                                        "Status for announcement that was published but is now deleted. Announcement in this state is visible only to course teachers and domain administrators. Announcement in this state is deleted after some time."
+                                    ],
+                                    "location": "query",
+                                    "repeated": true,
+                                    "type": "string"
+                                },
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "orderBy": {
+                                    "description": "Optional sort ordering for results. A comma-separated list of fields with an optional sort direction keyword. Supported field is `updateTime`. Supported direction keywords are `asc` and `desc`. If not specified, `updateTime desc` is the default behavior. Examples: `updateTime asc`, `updateTime`",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/announcements",
+                            "response": {
+                                "$ref": "ListAnnouncementsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.announcements",
+                                "https://www.googleapis.com/auth/classroom.announcements.readonly"
+                            ]
+                        },
+                        "modifyAssignees": {
+                            "description": "Modifies assignee mode and options of an announcement. Only a teacher of the course that contains the announcement may call this method. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course or course work does not exist.",
+                            "flatPath": "v1/courses/{courseId}/announcements/{id}:modifyAssignees",
+                            "httpMethod": "POST",
+                            "id": "classroom.courses.announcements.modifyAssignees",
+                            "parameterOrder": [
+                                "courseId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "id": {
+                                    "description": "Identifier of the announcement.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/announcements/{id}:modifyAssignees",
+                            "request": {
+                                "$ref": "ModifyAnnouncementAssigneesRequest"
+                            },
+                            "response": {
+                                "$ref": "Announcement"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.announcements"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates one or more fields of an announcement. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting developer project did not create the corresponding announcement or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `FAILED_PRECONDITION` if the requested announcement has already been deleted. * `NOT_FOUND` if the requested course or announcement does not exist",
+                            "flatPath": "v1/courses/{courseId}/announcements/{id}",
+                            "httpMethod": "PATCH",
+                            "id": "classroom.courses.announcements.patch",
+                            "parameterOrder": [
+                                "courseId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "id": {
+                                    "description": "Identifier of the announcement.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "updateMask": {
+                                    "description": "Mask that identifies which fields on the announcement to update. This field is required to do an update. The update fails if invalid fields are specified. If a field supports empty values, it can be cleared by specifying it in the update mask and not in the Announcement object. If a field that does not support empty values is included in the update mask and not set in the Announcement object, an `INVALID_ARGUMENT` error is returned. The following fields may be specified by teachers: * `text` * `state` * `scheduled_time`",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/announcements/{id}",
+                            "request": {
+                                "$ref": "Announcement"
+                            },
+                            "response": {
+                                "$ref": "Announcement"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.announcements"
+                            ]
+                        }
+                    }
+                },
+                "courseWork": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates course work. The resulting course work (and corresponding student submissions) are associated with the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to make the request. Classroom API requests to modify course work and student submissions must be made with an OAuth client ID from the associated Developer Console project. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course, create course work in the requested course, share a Drive attachment, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist. * `FAILED_PRECONDITION` for the following request error: * AttachmentNotVisible",
+                            "flatPath": "v1/courses/{courseId}/courseWork",
+                            "httpMethod": "POST",
+                            "id": "classroom.courses.courseWork.create",
+                            "parameterOrder": [
+                                "courseId"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/courseWork",
+                            "request": {
+                                "$ref": "CourseWork"
+                            },
+                            "response": {
+                                "$ref": "CourseWork"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.coursework.students"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes a course work. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting developer project did not create the corresponding course work, if the requesting user is not permitted to delete the requested course or for access errors. * `FAILED_PRECONDITION` if the requested course work has already been deleted. * `NOT_FOUND` if no course exists with the requested ID.",
+                            "flatPath": "v1/courses/{courseId}/courseWork/{id}",
+                            "httpMethod": "DELETE",
+                            "id": "classroom.courses.courseWork.delete",
+                            "parameterOrder": [
+                                "courseId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "id": {
+                                    "description": "Identifier of the course work to delete. This identifier is a Classroom-assigned identifier.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/courseWork/{id}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.coursework.students"
+                            ]
+                        },
+                        "get": {
+                            "description": "Returns course work. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course or course work does not exist.",
+                            "flatPath": "v1/courses/{courseId}/courseWork/{id}",
+                            "httpMethod": "GET",
+                            "id": "classroom.courses.courseWork.get",
+                            "parameterOrder": [
+                                "courseId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "id": {
+                                    "description": "Identifier of the course work.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/courseWork/{id}",
+                            "response": {
+                                "$ref": "CourseWork"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.coursework.me",
+                                "https://www.googleapis.com/auth/classroom.coursework.me.readonly",
+                                "https://www.googleapis.com/auth/classroom.coursework.students",
+                                "https://www.googleapis.com/auth/classroom.coursework.students.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "Returns a list of course work that the requester is permitted to view. Course students may only view `PUBLISHED` course work. Course teachers and domain administrators may view all course work. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist.",
+                            "flatPath": "v1/courses/{courseId}/courseWork",
+                            "httpMethod": "GET",
+                            "id": "classroom.courses.courseWork.list",
+                            "parameterOrder": [
+                                "courseId"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "courseWorkStates": {
+                                    "description": "Restriction on the work status to return. Only courseWork that matches is returned. If unspecified, items with a work status of `PUBLISHED` is returned.",
+                                    "enum": [
+                                        "COURSE_WORK_STATE_UNSPECIFIED",
+                                        "PUBLISHED",
+                                        "DRAFT",
+                                        "DELETED"
+                                    ],
+                                    "enumDescriptions": [
+                                        "No state specified. This is never returned.",
+                                        "Status for work that has been published. This is the default state.",
+                                        "Status for work that is not yet published. Work in this state is visible only to course teachers and domain administrators.",
+                                        "Status for work that was published but is now deleted. Work in this state is visible only to course teachers and domain administrators. Work in this state is deleted after some time."
+                                    ],
+                                    "location": "query",
+                                    "repeated": true,
+                                    "type": "string"
+                                },
+                                "orderBy": {
+                                    "description": "Optional sort ordering for results. A comma-separated list of fields with an optional sort direction keyword. Supported fields are `updateTime` and `dueDate`. Supported direction keywords are `asc` and `desc`. If not specified, `updateTime desc` is the default behavior. Examples: `dueDate asc,updateTime desc`, `updateTime,dueDate desc`",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/courseWork",
+                            "response": {
+                                "$ref": "ListCourseWorkResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.coursework.me",
+                                "https://www.googleapis.com/auth/classroom.coursework.me.readonly",
+                                "https://www.googleapis.com/auth/classroom.coursework.students",
+                                "https://www.googleapis.com/auth/classroom.coursework.students.readonly"
+                            ]
+                        },
+                        "modifyAssignees": {
+                            "description": "Modifies assignee mode and options of a coursework. Only a teacher of the course that contains the coursework may call this method. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course or course work does not exist.",
+                            "flatPath": "v1/courses/{courseId}/courseWork/{id}:modifyAssignees",
+                            "httpMethod": "POST",
+                            "id": "classroom.courses.courseWork.modifyAssignees",
+                            "parameterOrder": [
+                                "courseId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "id": {
+                                    "description": "Identifier of the coursework.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/courseWork/{id}:modifyAssignees",
+                            "request": {
+                                "$ref": "ModifyCourseWorkAssigneesRequest"
+                            },
+                            "response": {
+                                "$ref": "CourseWork"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.coursework.students"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates one or more fields of a course work. See google.classroom.v1.CourseWork for details of which fields may be updated and who may change them. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting developer project did not create the corresponding course work, if the user is not permitted to make the requested modification to the student submission, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `FAILED_PRECONDITION` if the requested course work has already been deleted. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.",
+                            "flatPath": "v1/courses/{courseId}/courseWork/{id}",
+                            "httpMethod": "PATCH",
+                            "id": "classroom.courses.courseWork.patch",
+                            "parameterOrder": [
+                                "courseId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "id": {
+                                    "description": "Identifier of the course work.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "updateMask": {
+                                    "description": "Mask that identifies which fields on the course work to update. This field is required to do an update. The update fails if invalid fields are specified. If a field supports empty values, it can be cleared by specifying it in the update mask and not in the CourseWork object. If a field that does not support empty values is included in the update mask and not set in the CourseWork object, an `INVALID_ARGUMENT` error is returned. The following fields may be specified by teachers: * `title` * `description` * `state` * `due_date` * `due_time` * `max_points` * `scheduled_time` * `submission_modification_mode` * `topic_id`",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/courseWork/{id}",
+                            "request": {
+                                "$ref": "CourseWork"
+                            },
+                            "response": {
+                                "$ref": "CourseWork"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.coursework.students"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "studentSubmissions": {
+                            "methods": {
+                                "get": {
+                                    "description": "Returns a student submission. * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course, course work, or student submission or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.",
+                                    "flatPath": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}",
+                                    "httpMethod": "GET",
+                                    "id": "classroom.courses.courseWork.studentSubmissions.get",
+                                    "parameterOrder": [
+                                        "courseId",
+                                        "courseWorkId",
+                                        "id"
+                                    ],
+                                    "parameters": {
+                                        "courseId": {
+                                            "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "courseWorkId": {
+                                            "description": "Identifier of the course work.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "id": {
+                                            "description": "Identifier of the student submission.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}",
+                                    "response": {
+                                        "$ref": "StudentSubmission"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/classroom.coursework.me",
+                                        "https://www.googleapis.com/auth/classroom.coursework.me.readonly",
+                                        "https://www.googleapis.com/auth/classroom.coursework.students",
+                                        "https://www.googleapis.com/auth/classroom.coursework.students.readonly",
+                                        "https://www.googleapis.com/auth/classroom.student-submissions.me.readonly",
+                                        "https://www.googleapis.com/auth/classroom.student-submissions.students.readonly"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Returns a list of student submissions that the requester is permitted to view, factoring in the OAuth scopes of the request. `-` may be specified as the `course_work_id` to include student submissions for multiple course work items. Course students may only view their own work. Course teachers and domain administrators may view all student submissions. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist.",
+                                    "flatPath": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions",
+                                    "httpMethod": "GET",
+                                    "id": "classroom.courses.courseWork.studentSubmissions.list",
+                                    "parameterOrder": [
+                                        "courseId",
+                                        "courseWorkId"
+                                    ],
+                                    "parameters": {
+                                        "courseId": {
+                                            "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "courseWorkId": {
+                                            "description": "Identifier of the student work to request. This may be set to the string literal `\"-\"` to request student work for all course work in the specified course.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "late": {
+                                            "description": "Requested lateness value. If specified, returned student submissions are restricted by the requested value. If unspecified, submissions are returned regardless of `late` value.",
+                                            "enum": [
+                                                "LATE_VALUES_UNSPECIFIED",
+                                                "LATE_ONLY",
+                                                "NOT_LATE_ONLY"
+                                            ],
+                                            "enumDescriptions": [
+                                                "No restriction on submission late values specified.",
+                                                "Return StudentSubmissions where late is true.",
+                                                "Return StudentSubmissions where late is false."
+                                            ],
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "states": {
+                                            "description": "Requested submission states. If specified, returned student submissions match one of the specified submission states.",
+                                            "enum": [
+                                                "SUBMISSION_STATE_UNSPECIFIED",
+                                                "NEW",
+                                                "CREATED",
+                                                "TURNED_IN",
+                                                "RETURNED",
+                                                "RECLAIMED_BY_STUDENT"
+                                            ],
+                                            "enumDescriptions": [
+                                                "No state specified. This should never be returned.",
+                                                "The student has never accessed this submission. Attachments are not returned and timestamps is not set.",
+                                                "Has been created.",
+                                                "Has been turned in to the teacher.",
+                                                "Has been returned to the student.",
+                                                "Student chose to \"unsubmit\" the assignment."
+                                            ],
+                                            "location": "query",
+                                            "repeated": true,
+                                            "type": "string"
+                                        },
+                                        "userId": {
+                                            "description": "Optional argument to restrict returned student work to those owned by the student with the specified identifier. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions",
+                                    "response": {
+                                        "$ref": "ListStudentSubmissionsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/classroom.coursework.me",
+                                        "https://www.googleapis.com/auth/classroom.coursework.me.readonly",
+                                        "https://www.googleapis.com/auth/classroom.coursework.students",
+                                        "https://www.googleapis.com/auth/classroom.coursework.students.readonly",
+                                        "https://www.googleapis.com/auth/classroom.student-submissions.me.readonly",
+                                        "https://www.googleapis.com/auth/classroom.student-submissions.students.readonly"
+                                    ]
+                                },
+                                "modifyAttachments": {
+                                    "description": "Modifies attachments of student submission. Attachments may only be added to student submissions belonging to course work objects with a `workType` of `ASSIGNMENT`. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, if the user is not permitted to modify attachments on the requested student submission, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.",
+                                    "flatPath": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:modifyAttachments",
+                                    "httpMethod": "POST",
+                                    "id": "classroom.courses.courseWork.studentSubmissions.modifyAttachments",
+                                    "parameterOrder": [
+                                        "courseId",
+                                        "courseWorkId",
+                                        "id"
+                                    ],
+                                    "parameters": {
+                                        "courseId": {
+                                            "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "courseWorkId": {
+                                            "description": "Identifier of the course work.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "id": {
+                                            "description": "Identifier of the student submission.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:modifyAttachments",
+                                    "request": {
+                                        "$ref": "ModifyAttachmentsRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "StudentSubmission"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/classroom.coursework.me",
+                                        "https://www.googleapis.com/auth/classroom.coursework.students"
+                                    ]
+                                },
+                                "patch": {
+                                    "description": "Updates one or more fields of a student submission. See google.classroom.v1.StudentSubmission for details of which fields may be updated and who may change them. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting developer project did not create the corresponding course work, if the user is not permitted to make the requested modification to the student submission, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.",
+                                    "flatPath": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}",
+                                    "httpMethod": "PATCH",
+                                    "id": "classroom.courses.courseWork.studentSubmissions.patch",
+                                    "parameterOrder": [
+                                        "courseId",
+                                        "courseWorkId",
+                                        "id"
+                                    ],
+                                    "parameters": {
+                                        "courseId": {
+                                            "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "courseWorkId": {
+                                            "description": "Identifier of the course work.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "id": {
+                                            "description": "Identifier of the student submission.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "updateMask": {
+                                            "description": "Mask that identifies which fields on the student submission to update. This field is required to do an update. The update fails if invalid fields are specified. The following fields may be specified by teachers: * `draft_grade` * `assigned_grade`",
+                                            "format": "google-fieldmask",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}",
+                                    "request": {
+                                        "$ref": "StudentSubmission"
+                                    },
+                                    "response": {
+                                        "$ref": "StudentSubmission"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/classroom.coursework.me",
+                                        "https://www.googleapis.com/auth/classroom.coursework.students"
+                                    ]
+                                },
+                                "reclaim": {
+                                    "description": "Reclaims a student submission on behalf of the student that owns it. Reclaiming a student submission transfers ownership of attached Drive files to the student and updates the submission state. Only the student that owns the requested student submission may call this method, and only for a student submission that has been turned in. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, unsubmit the requested student submission, or for access errors. * `FAILED_PRECONDITION` if the student submission has not been turned in. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.",
+                                    "flatPath": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:reclaim",
+                                    "httpMethod": "POST",
+                                    "id": "classroom.courses.courseWork.studentSubmissions.reclaim",
+                                    "parameterOrder": [
+                                        "courseId",
+                                        "courseWorkId",
+                                        "id"
+                                    ],
+                                    "parameters": {
+                                        "courseId": {
+                                            "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "courseWorkId": {
+                                            "description": "Identifier of the course work.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "id": {
+                                            "description": "Identifier of the student submission.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:reclaim",
+                                    "request": {
+                                        "$ref": "ReclaimStudentSubmissionRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/classroom.coursework.me"
+                                    ]
+                                },
+                                "return": {
+                                    "description": "Returns a student submission. Returning a student submission transfers ownership of attached Drive files to the student and may also update the submission state. Unlike the Classroom application, returning a student submission does not set assignedGrade to the draftGrade value. Only a teacher of the course that contains the requested student submission may call this method. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, return the requested student submission, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.",
+                                    "flatPath": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:return",
+                                    "httpMethod": "POST",
+                                    "id": "classroom.courses.courseWork.studentSubmissions.return",
+                                    "parameterOrder": [
+                                        "courseId",
+                                        "courseWorkId",
+                                        "id"
+                                    ],
+                                    "parameters": {
+                                        "courseId": {
+                                            "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "courseWorkId": {
+                                            "description": "Identifier of the course work.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "id": {
+                                            "description": "Identifier of the student submission.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:return",
+                                    "request": {
+                                        "$ref": "ReturnStudentSubmissionRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/classroom.coursework.students"
+                                    ]
+                                },
+                                "turnIn": {
+                                    "description": "Turns in a student submission. Turning in a student submission transfers ownership of attached Drive files to the teacher and may also update the submission state. This may only be called by the student that owns the specified student submission. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, turn in the requested student submission, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.",
+                                    "flatPath": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:turnIn",
+                                    "httpMethod": "POST",
+                                    "id": "classroom.courses.courseWork.studentSubmissions.turnIn",
+                                    "parameterOrder": [
+                                        "courseId",
+                                        "courseWorkId",
+                                        "id"
+                                    ],
+                                    "parameters": {
+                                        "courseId": {
+                                            "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "courseWorkId": {
+                                            "description": "Identifier of the course work.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "id": {
+                                            "description": "Identifier of the student submission.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}:turnIn",
+                                    "request": {
+                                        "$ref": "TurnInStudentSubmissionRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/classroom.coursework.me"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                },
+                "courseWorkMaterials": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a course work material. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course, create course work material in the requested course, share a Drive attachment, or for access errors. * `INVALID_ARGUMENT` if the request is malformed or if more than 20 * materials are provided. * `NOT_FOUND` if the requested course does not exist. * `FAILED_PRECONDITION` for the following request error: * AttachmentNotVisible",
+                            "flatPath": "v1/courses/{courseId}/courseWorkMaterials",
+                            "httpMethod": "POST",
+                            "id": "classroom.courses.courseWorkMaterials.create",
+                            "parameterOrder": [
+                                "courseId"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/courseWorkMaterials",
+                            "request": {
+                                "$ref": "CourseWorkMaterial"
+                            },
+                            "response": {
+                                "$ref": "CourseWorkMaterial"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.courseworkmaterials"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes a course work material. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work material item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting developer project did not create the corresponding course work material, if the requesting user is not permitted to delete the requested course or for access errors. * `FAILED_PRECONDITION` if the requested course work material has already been deleted. * `NOT_FOUND` if no course exists with the requested ID.",
+                            "flatPath": "v1/courses/{courseId}/courseWorkMaterials/{id}",
+                            "httpMethod": "DELETE",
+                            "id": "classroom.courses.courseWorkMaterials.delete",
+                            "parameterOrder": [
+                                "courseId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "id": {
+                                    "description": "Identifier of the course work material to delete. This identifier is a Classroom-assigned identifier.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/courseWorkMaterials/{id}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.courseworkmaterials"
+                            ]
+                        },
+                        "get": {
+                            "description": "Returns a course work material. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work material, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course or course work material does not exist.",
+                            "flatPath": "v1/courses/{courseId}/courseWorkMaterials/{id}",
+                            "httpMethod": "GET",
+                            "id": "classroom.courses.courseWorkMaterials.get",
+                            "parameterOrder": [
+                                "courseId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "id": {
+                                    "description": "Identifier of the course work material.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/courseWorkMaterials/{id}",
+                            "response": {
+                                "$ref": "CourseWorkMaterial"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.courseworkmaterials",
+                                "https://www.googleapis.com/auth/classroom.courseworkmaterials.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "Returns a list of course work material that the requester is permitted to view. Course students may only view `PUBLISHED` course work material. Course teachers and domain administrators may view all course work material. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist.",
+                            "flatPath": "v1/courses/{courseId}/courseWorkMaterials",
+                            "httpMethod": "GET",
+                            "id": "classroom.courses.courseWorkMaterials.list",
+                            "parameterOrder": [
+                                "courseId"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "courseWorkMaterialStates": {
+                                    "description": "Restriction on the work status to return. Only course work material that matches is returned. If unspecified, items with a work status of `PUBLISHED` is returned.",
+                                    "enum": [
+                                        "COURSEWORK_MATERIAL_STATE_UNSPECIFIED",
+                                        "PUBLISHED",
+                                        "DRAFT",
+                                        "DELETED"
+                                    ],
+                                    "enumDescriptions": [
+                                        "No state specified. This is never returned.",
+                                        "Status for course work material that has been published. This is the default state.",
+                                        "Status for an course work material that is not yet published. Course work material in this state is visible only to course teachers and domain administrators.",
+                                        "Status for course work material that was published but is now deleted. Course work material in this state is visible only to course teachers and domain administrators. Course work material in this state is deleted after some time."
+                                    ],
+                                    "location": "query",
+                                    "repeated": true,
+                                    "type": "string"
+                                },
+                                "materialDriveId": {
+                                    "description": "Optional filtering for course work material with at least one Drive material whose ID matches the provided string. If `material_link` is also specified, course work material must have materials matching both filters.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "materialLink": {
+                                    "description": "Optional filtering for course work material with at least one link material whose URL partially matches the provided string.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "orderBy": {
+                                    "description": "Optional sort ordering for results. A comma-separated list of fields with an optional sort direction keyword. Supported field is `updateTime`. Supported direction keywords are `asc` and `desc`. If not specified, `updateTime desc` is the default behavior. Examples: `updateTime asc`, `updateTime`",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/courseWorkMaterials",
+                            "response": {
+                                "$ref": "ListCourseWorkMaterialResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.courseworkmaterials",
+                                "https://www.googleapis.com/auth/classroom.courseworkmaterials.readonly"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates one or more fields of a course work material. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting developer project for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `FAILED_PRECONDITION` if the requested course work material has already been deleted. * `NOT_FOUND` if the requested course or course work material does not exist",
+                            "flatPath": "v1/courses/{courseId}/courseWorkMaterials/{id}",
+                            "httpMethod": "PATCH",
+                            "id": "classroom.courses.courseWorkMaterials.patch",
+                            "parameterOrder": [
+                                "courseId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "id": {
+                                    "description": "Identifier of the course work material.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "updateMask": {
+                                    "description": "Mask that identifies which fields on the course work material to update. This field is required to do an update. The update fails if invalid fields are specified. If a field supports empty values, it can be cleared by specifying it in the update mask and not in the course work material object. If a field that does not support empty values is included in the update mask and not set in the course work material object, an `INVALID_ARGUMENT` error is returned. The following fields may be specified by teachers: * `title` * `description` * `state` * `scheduled_time` * `topic_id`",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/courseWorkMaterials/{id}",
+                            "request": {
+                                "$ref": "CourseWorkMaterial"
+                            },
+                            "response": {
+                                "$ref": "CourseWorkMaterial"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.courseworkmaterials"
+                            ]
+                        }
+                    }
+                },
+                "students": {
+                    "methods": {
+                        "create": {
+                            "description": "Adds a user as a student of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create students in this course or for access errors. * `NOT_FOUND` if the requested course ID does not exist. * `FAILED_PRECONDITION` if the requested user's account is disabled, for the following request errors: * CourseMemberLimitReached * CourseNotModifiable * UserGroupsMembershipLimitReached * `ALREADY_EXISTS` if the user is already a student or teacher in the course.",
+                            "flatPath": "v1/courses/{courseId}/students",
+                            "httpMethod": "POST",
+                            "id": "classroom.courses.students.create",
+                            "parameterOrder": [
+                                "courseId"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course to create the student in. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "enrollmentCode": {
+                                    "description": "Enrollment code of the course to create the student in. This code is required if userId corresponds to the requesting user; it may be omitted if the requesting user has administrative permissions to create students for any user.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/students",
+                            "request": {
+                                "$ref": "Student"
+                            },
+                            "response": {
+                                "$ref": "Student"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.profile.emails",
+                                "https://www.googleapis.com/auth/classroom.profile.photos",
+                                "https://www.googleapis.com/auth/classroom.rosters"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes a student of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete students of this course or for access errors. * `NOT_FOUND` if no student of this course has the requested ID or if the course does not exist.",
+                            "flatPath": "v1/courses/{courseId}/students/{userId}",
+                            "httpMethod": "DELETE",
+                            "id": "classroom.courses.students.delete",
+                            "parameterOrder": [
+                                "courseId",
+                                "userId"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "description": "Identifier of the student to delete. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/students/{userId}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.rosters"
+                            ]
+                        },
+                        "get": {
+                            "description": "Returns a student of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to view students of this course or for access errors. * `NOT_FOUND` if no student of this course has the requested ID or if the course does not exist.",
+                            "flatPath": "v1/courses/{courseId}/students/{userId}",
+                            "httpMethod": "GET",
+                            "id": "classroom.courses.students.get",
+                            "parameterOrder": [
+                                "courseId",
+                                "userId"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "description": "Identifier of the student to return. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/students/{userId}",
+                            "response": {
+                                "$ref": "Student"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.profile.emails",
+                                "https://www.googleapis.com/auth/classroom.profile.photos",
+                                "https://www.googleapis.com/auth/classroom.rosters",
+                                "https://www.googleapis.com/auth/classroom.rosters.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "Returns a list of students of this course that the requester is permitted to view. This method returns the following error codes: * `NOT_FOUND` if the course does not exist. * `PERMISSION_DENIED` for access errors.",
+                            "flatPath": "v1/courses/{courseId}/students",
+                            "httpMethod": "GET",
+                            "id": "classroom.courses.students.list",
+                            "parameterOrder": [
+                                "courseId"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "Maximum number of items to return. The default is 30 if unspecified or `0`. The server may return fewer than the specified number of results.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/students",
+                            "response": {
+                                "$ref": "ListStudentsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.profile.emails",
+                                "https://www.googleapis.com/auth/classroom.profile.photos",
+                                "https://www.googleapis.com/auth/classroom.rosters",
+                                "https://www.googleapis.com/auth/classroom.rosters.readonly"
+                            ]
+                        }
+                    }
+                },
+                "teachers": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a teacher of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create teachers in this course or for access errors. * `NOT_FOUND` if the requested course ID does not exist. * `FAILED_PRECONDITION` if the requested user's account is disabled, for the following request errors: * CourseMemberLimitReached * CourseNotModifiable * CourseTeacherLimitReached * UserGroupsMembershipLimitReached * `ALREADY_EXISTS` if the user is already a teacher or student in the course.",
+                            "flatPath": "v1/courses/{courseId}/teachers",
+                            "httpMethod": "POST",
+                            "id": "classroom.courses.teachers.create",
+                            "parameterOrder": [
+                                "courseId"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/teachers",
+                            "request": {
+                                "$ref": "Teacher"
+                            },
+                            "response": {
+                                "$ref": "Teacher"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.profile.emails",
+                                "https://www.googleapis.com/auth/classroom.profile.photos",
+                                "https://www.googleapis.com/auth/classroom.rosters"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes a teacher of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete teachers of this course or for access errors. * `NOT_FOUND` if no teacher of this course has the requested ID or if the course does not exist. * `FAILED_PRECONDITION` if the requested ID belongs to the primary teacher of this course.",
+                            "flatPath": "v1/courses/{courseId}/teachers/{userId}",
+                            "httpMethod": "DELETE",
+                            "id": "classroom.courses.teachers.delete",
+                            "parameterOrder": [
+                                "courseId",
+                                "userId"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "description": "Identifier of the teacher to delete. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/teachers/{userId}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.rosters"
+                            ]
+                        },
+                        "get": {
+                            "description": "Returns a teacher of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to view teachers of this course or for access errors. * `NOT_FOUND` if no teacher of this course has the requested ID or if the course does not exist.",
+                            "flatPath": "v1/courses/{courseId}/teachers/{userId}",
+                            "httpMethod": "GET",
+                            "id": "classroom.courses.teachers.get",
+                            "parameterOrder": [
+                                "courseId",
+                                "userId"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "description": "Identifier of the teacher to return. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/teachers/{userId}",
+                            "response": {
+                                "$ref": "Teacher"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.profile.emails",
+                                "https://www.googleapis.com/auth/classroom.profile.photos",
+                                "https://www.googleapis.com/auth/classroom.rosters",
+                                "https://www.googleapis.com/auth/classroom.rosters.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "Returns a list of teachers of this course that the requester is permitted to view. This method returns the following error codes: * `NOT_FOUND` if the course does not exist. * `PERMISSION_DENIED` for access errors.",
+                            "flatPath": "v1/courses/{courseId}/teachers",
+                            "httpMethod": "GET",
+                            "id": "classroom.courses.teachers.list",
+                            "parameterOrder": [
+                                "courseId"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "Maximum number of items to return. The default is 30 if unspecified or `0`. The server may return fewer than the specified number of results.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/teachers",
+                            "response": {
+                                "$ref": "ListTeachersResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.profile.emails",
+                                "https://www.googleapis.com/auth/classroom.profile.photos",
+                                "https://www.googleapis.com/auth/classroom.rosters",
+                                "https://www.googleapis.com/auth/classroom.rosters.readonly"
+                            ]
+                        }
+                    }
+                },
+                "topics": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a topic. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course, create a topic in the requested course, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist.",
+                            "flatPath": "v1/courses/{courseId}/topics",
+                            "httpMethod": "POST",
+                            "id": "classroom.courses.topics.create",
+                            "parameterOrder": [
+                                "courseId"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/topics",
+                            "request": {
+                                "$ref": "Topic"
+                            },
+                            "response": {
+                                "$ref": "Topic"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.topics"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes a topic. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not allowed to delete the requested topic or for access errors. * `FAILED_PRECONDITION` if the requested topic has already been deleted. * `NOT_FOUND` if no course or topic exists with the requested ID.",
+                            "flatPath": "v1/courses/{courseId}/topics/{id}",
+                            "httpMethod": "DELETE",
+                            "id": "classroom.courses.topics.delete",
+                            "parameterOrder": [
+                                "courseId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "id": {
+                                    "description": "Identifier of the topic to delete.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/topics/{id}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.topics"
+                            ]
+                        },
+                        "get": {
+                            "description": "Returns a topic. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or topic, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course or topic does not exist.",
+                            "flatPath": "v1/courses/{courseId}/topics/{id}",
+                            "httpMethod": "GET",
+                            "id": "classroom.courses.topics.get",
+                            "parameterOrder": [
+                                "courseId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "id": {
+                                    "description": "Identifier of the topic.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/topics/{id}",
+                            "response": {
+                                "$ref": "Topic"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.topics",
+                                "https://www.googleapis.com/auth/classroom.topics.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "Returns the list of topics that the requester is permitted to view. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist.",
+                            "flatPath": "v1/courses/{courseId}/topics",
+                            "httpMethod": "GET",
+                            "id": "classroom.courses.topics.list",
+                            "parameterOrder": [
+                                "courseId"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/topics",
+                            "response": {
+                                "$ref": "ListTopicResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.topics",
+                                "https://www.googleapis.com/auth/classroom.topics.readonly"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates one or more fields of a topic. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting developer project did not create the corresponding topic or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course or topic does not exist",
+                            "flatPath": "v1/courses/{courseId}/topics/{id}",
+                            "httpMethod": "PATCH",
+                            "id": "classroom.courses.topics.patch",
+                            "parameterOrder": [
+                                "courseId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "courseId": {
+                                    "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "id": {
+                                    "description": "Identifier of the topic.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "updateMask": {
+                                    "description": "Mask that identifies which fields on the topic to update. This field is required to do an update. The update fails if invalid fields are specified. If a field supports empty values, it can be cleared by specifying it in the update mask and not in the Topic object. If a field that does not support empty values is included in the update mask and not set in the Topic object, an `INVALID_ARGUMENT` error is returned. The following fields may be specified: * `name`",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/courses/{courseId}/topics/{id}",
+                            "request": {
+                                "$ref": "Topic"
+                            },
+                            "response": {
+                                "$ref": "Topic"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.topics"
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "invitations": {
+            "methods": {
+                "accept": {
+                    "description": "Accepts an invitation, removing it and adding the invited user to the teachers or students (as appropriate) of the specified course. Only the invited user may accept an invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to accept the requested invitation or for access errors. * `FAILED_PRECONDITION` for the following request errors: * CourseMemberLimitReached * CourseNotModifiable * CourseTeacherLimitReached * UserGroupsMembershipLimitReached * `NOT_FOUND` if no invitation exists with the requested ID.",
+                    "flatPath": "v1/invitations/{id}:accept",
+                    "httpMethod": "POST",
+                    "id": "classroom.invitations.accept",
+                    "parameterOrder": [
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Identifier of the invitation to accept.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/invitations/{id}:accept",
+                    "response": {
+                        "$ref": "Empty"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/classroom.rosters"
+                    ]
+                },
+                "create": {
+                    "description": "Creates an invitation. Only one invitation for a user and course may exist at a time. Delete and re-create an invitation to make changes. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create invitations for this course or for access errors. * `NOT_FOUND` if the course or the user does not exist. * `FAILED_PRECONDITION` if the requested user's account is disabled or if the user already has this role or a role with greater permissions. * `ALREADY_EXISTS` if an invitation for the specified user and course already exists.",
+                    "flatPath": "v1/invitations",
+                    "httpMethod": "POST",
+                    "id": "classroom.invitations.create",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v1/invitations",
+                    "request": {
+                        "$ref": "Invitation"
+                    },
+                    "response": {
+                        "$ref": "Invitation"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/classroom.rosters"
+                    ]
+                },
+                "delete": {
+                    "description": "Deletes an invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete the requested invitation or for access errors. * `NOT_FOUND` if no invitation exists with the requested ID.",
+                    "flatPath": "v1/invitations/{id}",
+                    "httpMethod": "DELETE",
+                    "id": "classroom.invitations.delete",
+                    "parameterOrder": [
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Identifier of the invitation to delete.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/invitations/{id}",
+                    "response": {
+                        "$ref": "Empty"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/classroom.rosters"
+                    ]
+                },
+                "get": {
+                    "description": "Returns an invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to view the requested invitation or for access errors. * `NOT_FOUND` if no invitation exists with the requested ID.",
+                    "flatPath": "v1/invitations/{id}",
+                    "httpMethod": "GET",
+                    "id": "classroom.invitations.get",
+                    "parameterOrder": [
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Identifier of the invitation to return.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/invitations/{id}",
+                    "response": {
+                        "$ref": "Invitation"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/classroom.rosters",
+                        "https://www.googleapis.com/auth/classroom.rosters.readonly"
+                    ]
+                },
+                "list": {
+                    "description": "Returns a list of invitations that the requesting user is permitted to view, restricted to those that match the list request. *Note:* At least one of `user_id` or `course_id` must be supplied. Both fields can be supplied. This method returns the following error codes: * `PERMISSION_DENIED` for access errors.",
+                    "flatPath": "v1/invitations",
+                    "httpMethod": "GET",
+                    "id": "classroom.invitations.list",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "courseId": {
+                            "description": "Restricts returned invitations to those for a course with the specified identifier.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageSize": {
+                            "description": "Maximum number of items to return. The default is 500 if unspecified or `0`. The server may return fewer than the specified number of results.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "userId": {
+                            "description": "Restricts returned invitations to those for a specific user. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/invitations",
+                    "response": {
+                        "$ref": "ListInvitationsResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/classroom.rosters",
+                        "https://www.googleapis.com/auth/classroom.rosters.readonly"
+                    ]
+                }
+            }
+        },
+        "registrations": {
+            "methods": {
+                "create": {
+                    "description": "Creates a `Registration`, causing Classroom to start sending notifications from the provided `feed` to the destination provided in `cloudPubSubTopic`. Returns the created `Registration`. Currently, this will be the same as the argument, but with server-assigned fields such as `expiry_time` and `id` filled in. Note that any value specified for the `expiry_time` or `id` fields will be ignored. While Classroom may validate the `cloudPubSubTopic` and return errors on a best effort basis, it is the caller's responsibility to ensure that it exists and that Classroom has permission to publish to it. This method may return the following error codes: * `PERMISSION_DENIED` if: * the authenticated user does not have permission to receive notifications from the requested field; or * the current user has not granted access to the current Cloud project with the appropriate scope for the requested feed. Note that domain-wide delegation of authority is not currently supported for this purpose. If the request has the appropriate scope, but no grant exists, a Request Errors is returned. * another access error is encountered. * `INVALID_ARGUMENT` if: * no `cloudPubsubTopic` is specified, or the specified `cloudPubsubTopic` is not valid; or * no `feed` is specified, or the specified `feed` is not valid. * `NOT_FOUND` if: * the specified `feed` cannot be located, or the requesting user does not have permission to determine whether or not it exists; or * the specified `cloudPubsubTopic` cannot be located, or Classroom has not been granted permission to publish to it.",
+                    "flatPath": "v1/registrations",
+                    "httpMethod": "POST",
+                    "id": "classroom.registrations.create",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v1/registrations",
+                    "request": {
+                        "$ref": "Registration"
+                    },
+                    "response": {
+                        "$ref": "Registration"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/classroom.push-notifications"
+                    ]
+                },
+                "delete": {
+                    "description": "Deletes a `Registration`, causing Classroom to stop sending notifications for that `Registration`.",
+                    "flatPath": "v1/registrations/{registrationId}",
+                    "httpMethod": "DELETE",
+                    "id": "classroom.registrations.delete",
+                    "parameterOrder": [
+                        "registrationId"
+                    ],
+                    "parameters": {
+                        "registrationId": {
+                            "description": "The `registration_id` of the `Registration` to be deleted.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/registrations/{registrationId}",
+                    "response": {
+                        "$ref": "Empty"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/classroom.push-notifications"
+                    ]
+                }
+            }
+        },
+        "userProfiles": {
+            "methods": {
+                "get": {
+                    "description": "Returns a user profile. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access this user profile, if no profile exists with the requested ID, or for access errors.",
+                    "flatPath": "v1/userProfiles/{userId}",
+                    "httpMethod": "GET",
+                    "id": "classroom.userProfiles.get",
+                    "parameterOrder": [
+                        "userId"
+                    ],
+                    "parameters": {
+                        "userId": {
+                            "description": "Identifier of the profile to return. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/userProfiles/{userId}",
+                    "response": {
+                        "$ref": "UserProfile"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/classroom.profile.emails",
+                        "https://www.googleapis.com/auth/classroom.profile.photos",
+                        "https://www.googleapis.com/auth/classroom.rosters",
+                        "https://www.googleapis.com/auth/classroom.rosters.readonly"
+                    ]
+                }
+            },
+            "resources": {
+                "guardianInvitations": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a guardian invitation, and sends an email to the guardian asking them to confirm that they are the student's guardian. Once the guardian accepts the invitation, their `state` will change to `COMPLETED` and they will start receiving guardian notifications. A `Guardian` resource will also be created to represent the active guardian. The request object must have the `student_id` and `invited_email_address` fields set. Failing to set these fields, or setting any other fields in the request, will result in an error. This method returns the following error codes: * `PERMISSION_DENIED` if the current user does not have permission to manage guardians, if the guardian in question has already rejected too many requests for that student, if guardians are not enabled for the domain in question, or for other access errors. * `RESOURCE_EXHAUSTED` if the student or guardian has exceeded the guardian link limit. * `INVALID_ARGUMENT` if the guardian email address is not valid (for example, if it is too long), or if the format of the student ID provided cannot be recognized (it is not an email address, nor a `user_id` from this API). This error will also be returned if read-only fields are set, or if the `state` field is set to to a value other than `PENDING`. * `NOT_FOUND` if the student ID provided is a valid student ID, but Classroom has no record of that student. * `ALREADY_EXISTS` if there is already a pending guardian invitation for the student and `invited_email_address` provided, or if the provided `invited_email_address` matches the Google account of an existing `Guardian` for this user.",
+                            "flatPath": "v1/userProfiles/{studentId}/guardianInvitations",
+                            "httpMethod": "POST",
+                            "id": "classroom.userProfiles.guardianInvitations.create",
+                            "parameterOrder": [
+                                "studentId"
+                            ],
+                            "parameters": {
+                                "studentId": {
+                                    "description": "ID of the student (in standard format)",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/userProfiles/{studentId}/guardianInvitations",
+                            "request": {
+                                "$ref": "GuardianInvitation"
+                            },
+                            "response": {
+                                "$ref": "GuardianInvitation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.guardianlinks.students"
+                            ]
+                        },
+                        "get": {
+                            "description": "Returns a specific guardian invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to view guardian invitations for the student identified by the `student_id`, if guardians are not enabled for the domain in question, or for other access errors. * `INVALID_ARGUMENT` if a `student_id` is specified, but its format cannot be recognized (it is not an email address, nor a `student_id` from the API, nor the literal string `me`). * `NOT_FOUND` if Classroom cannot find any record of the given student or `invitation_id`. May also be returned if the student exists, but the requesting user does not have access to see that student.",
+                            "flatPath": "v1/userProfiles/{studentId}/guardianInvitations/{invitationId}",
+                            "httpMethod": "GET",
+                            "id": "classroom.userProfiles.guardianInvitations.get",
+                            "parameterOrder": [
+                                "studentId",
+                                "invitationId"
+                            ],
+                            "parameters": {
+                                "invitationId": {
+                                    "description": "The `id` field of the `GuardianInvitation` being requested.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "studentId": {
+                                    "description": "The ID of the student whose guardian invitation is being requested.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/userProfiles/{studentId}/guardianInvitations/{invitationId}",
+                            "response": {
+                                "$ref": "GuardianInvitation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.guardianlinks.students",
+                                "https://www.googleapis.com/auth/classroom.guardianlinks.students.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "Returns a list of guardian invitations that the requesting user is permitted to view, filtered by the parameters provided. This method returns the following error codes: * `PERMISSION_DENIED` if a `student_id` is specified, and the requesting user is not permitted to view guardian invitations for that student, if `\"-\"` is specified as the `student_id` and the user is not a domain administrator, if guardians are not enabled for the domain in question, or for other access errors. * `INVALID_ARGUMENT` if a `student_id` is specified, but its format cannot be recognized (it is not an email address, nor a `student_id` from the API, nor the literal string `me`). May also be returned if an invalid `page_token` or `state` is provided. * `NOT_FOUND` if a `student_id` is specified, and its format can be recognized, but Classroom has no record of that student.",
+                            "flatPath": "v1/userProfiles/{studentId}/guardianInvitations",
+                            "httpMethod": "GET",
+                            "id": "classroom.userProfiles.guardianInvitations.list",
+                            "parameterOrder": [
+                                "studentId"
+                            ],
+                            "parameters": {
+                                "invitedEmailAddress": {
+                                    "description": "If specified, only results with the specified `invited_email_address` are returned.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "states": {
+                                    "description": "If specified, only results with the specified `state` values are returned. Otherwise, results with a `state` of `PENDING` are returned.",
+                                    "enum": [
+                                        "GUARDIAN_INVITATION_STATE_UNSPECIFIED",
+                                        "PENDING",
+                                        "COMPLETE"
+                                    ],
+                                    "enumDescriptions": [
+                                        "Should never be returned.",
+                                        "The invitation is active and awaiting a response.",
+                                        "The invitation is no longer active. It may have been accepted, declined, withdrawn or it may have expired."
+                                    ],
+                                    "location": "query",
+                                    "repeated": true,
+                                    "type": "string"
+                                },
+                                "studentId": {
+                                    "description": "The ID of the student whose guardian invitations are to be returned. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user * the string literal `\"-\"`, indicating that results should be returned for all students that the requesting user is permitted to view guardian invitations.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/userProfiles/{studentId}/guardianInvitations",
+                            "response": {
+                                "$ref": "ListGuardianInvitationsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.guardianlinks.students",
+                                "https://www.googleapis.com/auth/classroom.guardianlinks.students.readonly"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Modifies a guardian invitation. Currently, the only valid modification is to change the `state` from `PENDING` to `COMPLETE`. This has the effect of withdrawing the invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the current user does not have permission to manage guardians, if guardians are not enabled for the domain in question or for other access errors. * `FAILED_PRECONDITION` if the guardian link is not in the `PENDING` state. * `INVALID_ARGUMENT` if the format of the student ID provided cannot be recognized (it is not an email address, nor a `user_id` from this API), or if the passed `GuardianInvitation` has a `state` other than `COMPLETE`, or if it modifies fields other than `state`. * `NOT_FOUND` if the student ID provided is a valid student ID, but Classroom has no record of that student, or if the `id` field does not refer to a guardian invitation known to Classroom.",
+                            "flatPath": "v1/userProfiles/{studentId}/guardianInvitations/{invitationId}",
+                            "httpMethod": "PATCH",
+                            "id": "classroom.userProfiles.guardianInvitations.patch",
+                            "parameterOrder": [
+                                "studentId",
+                                "invitationId"
+                            ],
+                            "parameters": {
+                                "invitationId": {
+                                    "description": "The `id` field of the `GuardianInvitation` to be modified.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "studentId": {
+                                    "description": "The ID of the student whose guardian invitation is to be modified.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "updateMask": {
+                                    "description": "Mask that identifies which fields on the course to update. This field is required to do an update. The update fails if invalid fields are specified. The following fields are valid: * `state` When set in a query parameter, this field should be specified as `updateMask=,,...`",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/userProfiles/{studentId}/guardianInvitations/{invitationId}",
+                            "request": {
+                                "$ref": "GuardianInvitation"
+                            },
+                            "response": {
+                                "$ref": "GuardianInvitation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.guardianlinks.students"
+                            ]
+                        }
+                    }
+                },
+                "guardians": {
+                    "methods": {
+                        "delete": {
+                            "description": "Deletes a guardian. The guardian will no longer receive guardian notifications and the guardian will no longer be accessible via the API. This method returns the following error codes: * `PERMISSION_DENIED` if no user that matches the provided `student_id` is visible to the requesting user, if the requesting user is not permitted to manage guardians for the student identified by the `student_id`, if guardians are not enabled for the domain in question, or for other access errors. * `INVALID_ARGUMENT` if a `student_id` is specified, but its format cannot be recognized (it is not an email address, nor a `student_id` from the API). * `NOT_FOUND` if the requesting user is permitted to modify guardians for the requested `student_id`, but no `Guardian` record exists for that student with the provided `guardian_id`.",
+                            "flatPath": "v1/userProfiles/{studentId}/guardians/{guardianId}",
+                            "httpMethod": "DELETE",
+                            "id": "classroom.userProfiles.guardians.delete",
+                            "parameterOrder": [
+                                "studentId",
+                                "guardianId"
+                            ],
+                            "parameters": {
+                                "guardianId": {
+                                    "description": "The `id` field from a `Guardian`.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "studentId": {
+                                    "description": "The student whose guardian is to be deleted. One of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/userProfiles/{studentId}/guardians/{guardianId}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.guardianlinks.students"
+                            ]
+                        },
+                        "get": {
+                            "description": "Returns a specific guardian. This method returns the following error codes: * `PERMISSION_DENIED` if no user that matches the provided `student_id` is visible to the requesting user, if the requesting user is not permitted to view guardian information for the student identified by the `student_id`, if guardians are not enabled for the domain in question, or for other access errors. * `INVALID_ARGUMENT` if a `student_id` is specified, but its format cannot be recognized (it is not an email address, nor a `student_id` from the API, nor the literal string `me`). * `NOT_FOUND` if the requesting user is permitted to view guardians for the requested `student_id`, but no `Guardian` record exists for that student that matches the provided `guardian_id`.",
+                            "flatPath": "v1/userProfiles/{studentId}/guardians/{guardianId}",
+                            "httpMethod": "GET",
+                            "id": "classroom.userProfiles.guardians.get",
+                            "parameterOrder": [
+                                "studentId",
+                                "guardianId"
+                            ],
+                            "parameters": {
+                                "guardianId": {
+                                    "description": "The `id` field from a `Guardian`.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "studentId": {
+                                    "description": "The student whose guardian is being requested. One of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/userProfiles/{studentId}/guardians/{guardianId}",
+                            "response": {
+                                "$ref": "Guardian"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.guardianlinks.me.readonly",
+                                "https://www.googleapis.com/auth/classroom.guardianlinks.students",
+                                "https://www.googleapis.com/auth/classroom.guardianlinks.students.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "Returns a list of guardians that the requesting user is permitted to view, restricted to those that match the request. To list guardians for any student that the requesting user may view guardians for, use the literal character `-` for the student ID. This method returns the following error codes: * `PERMISSION_DENIED` if a `student_id` is specified, and the requesting user is not permitted to view guardian information for that student, if `\"-\"` is specified as the `student_id` and the user is not a domain administrator, if guardians are not enabled for the domain in question, if the `invited_email_address` filter is set by a user who is not a domain administrator, or for other access errors. * `INVALID_ARGUMENT` if a `student_id` is specified, but its format cannot be recognized (it is not an email address, nor a `student_id` from the API, nor the literal string `me`). May also be returned if an invalid `page_token` is provided. * `NOT_FOUND` if a `student_id` is specified, and its format can be recognized, but Classroom has no record of that student.",
+                            "flatPath": "v1/userProfiles/{studentId}/guardians",
+                            "httpMethod": "GET",
+                            "id": "classroom.userProfiles.guardians.list",
+                            "parameterOrder": [
+                                "studentId"
+                            ],
+                            "parameters": {
+                                "invitedEmailAddress": {
+                                    "description": "Filter results by the email address that the original invitation was sent to, resulting in this guardian link. This filter can only be used by domain administrators.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "studentId": {
+                                    "description": "Filter results by the student who the guardian is linked to. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user * the string literal `\"-\"`, indicating that results should be returned for all students that the requesting user has access to view.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/userProfiles/{studentId}/guardians",
+                            "response": {
+                                "$ref": "ListGuardiansResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/classroom.guardianlinks.me.readonly",
+                                "https://www.googleapis.com/auth/classroom.guardianlinks.students",
+                                "https://www.googleapis.com/auth/classroom.guardianlinks.students.readonly"
+                            ]
+                        }
+                    }
+                }
+            }
+        }
+    },
+    "revision": "20210201",
+    "rootUrl": "https://classroom.googleapis.com/",
+    "schemas": {
+        "Announcement": {
+            "description": "Announcement created by a teacher for students of the course",
+            "id": "Announcement",
+            "properties": {
+                "alternateLink": {
+                    "description": "Absolute link to this announcement in the Classroom web UI. This is only populated if `state` is `PUBLISHED`. Read-only.",
+                    "type": "string"
+                },
+                "assigneeMode": {
+                    "description": "Assignee mode of the announcement. If unspecified, the default value is `ALL_STUDENTS`.",
+                    "enum": [
+                        "ASSIGNEE_MODE_UNSPECIFIED",
+                        "ALL_STUDENTS",
+                        "INDIVIDUAL_STUDENTS"
+                    ],
+                    "enumDescriptions": [
+                        "No mode specified. This is never returned.",
+                        "All students can see the item. This is the default state.",
+                        "A subset of the students can see the item."
+                    ],
+                    "type": "string"
+                },
+                "courseId": {
+                    "description": "Identifier of the course. Read-only.",
+                    "type": "string"
+                },
+                "creationTime": {
+                    "description": "Timestamp when this announcement was created. Read-only.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "creatorUserId": {
+                    "description": "Identifier for the user that created the announcement. Read-only.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Classroom-assigned identifier of this announcement, unique per course. Read-only.",
+                    "type": "string"
+                },
+                "individualStudentsOptions": {
+                    "$ref": "IndividualStudentsOptions",
+                    "description": "Identifiers of students with access to the announcement. This field is set only if `assigneeMode` is `INDIVIDUAL_STUDENTS`. If the `assigneeMode` is `INDIVIDUAL_STUDENTS`, then only students specified in this field can see the announcement."
+                },
+                "materials": {
+                    "description": "Additional materials. Announcements must have no more than 20 material items.",
+                    "items": {
+                        "$ref": "Material"
+                    },
+                    "type": "array"
+                },
+                "scheduledTime": {
+                    "description": "Optional timestamp when this announcement is scheduled to be published.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "state": {
+                    "description": "Status of this announcement. If unspecified, the default state is `DRAFT`.",
+                    "enum": [
+                        "ANNOUNCEMENT_STATE_UNSPECIFIED",
+                        "PUBLISHED",
+                        "DRAFT",
+                        "DELETED"
+                    ],
+                    "enumDescriptions": [
+                        "No state specified. This is never returned.",
+                        "Status for announcement that has been published. This is the default state.",
+                        "Status for an announcement that is not yet published. Announcement in this state is visible only to course teachers and domain administrators.",
+                        "Status for announcement that was published but is now deleted. Announcement in this state is visible only to course teachers and domain administrators. Announcement in this state is deleted after some time."
+                    ],
+                    "type": "string"
+                },
+                "text": {
+                    "description": "Description of this announcement. The text must be a valid UTF-8 string containing no more than 30,000 characters.",
+                    "type": "string"
+                },
+                "updateTime": {
+                    "description": "Timestamp of the most recent change to this announcement. Read-only.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Assignment": {
+            "description": "Additional details for assignments.",
+            "id": "Assignment",
+            "properties": {
+                "studentWorkFolder": {
+                    "$ref": "DriveFolder",
+                    "description": "Drive folder where attachments from student submissions are placed. This is only populated for course teachers and administrators."
+                }
+            },
+            "type": "object"
+        },
+        "AssignmentSubmission": {
+            "description": "Student work for an assignment.",
+            "id": "AssignmentSubmission",
+            "properties": {
+                "attachments": {
+                    "description": "Attachments added by the student. Drive files that correspond to materials with a share mode of STUDENT_COPY may not exist yet if the student has not accessed the assignment in Classroom. Some attachment metadata is only populated if the requesting user has permission to access it. Identifier and alternate_link fields are always available, but others (for example, title) may not be.",
+                    "items": {
+                        "$ref": "Attachment"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Attachment": {
+            "description": "Attachment added to student assignment work. When creating attachments, setting the `form` field is not supported.",
+            "id": "Attachment",
+            "properties": {
+                "driveFile": {
+                    "$ref": "DriveFile",
+                    "description": "Google Drive file attachment."
+                },
+                "form": {
+                    "$ref": "Form",
+                    "description": "Google Forms attachment."
+                },
+                "link": {
+                    "$ref": "Link",
+                    "description": "Link attachment."
+                },
+                "youTubeVideo": {
+                    "$ref": "YouTubeVideo",
+                    "description": "Youtube video attachment."
+                }
+            },
+            "type": "object"
+        },
+        "CloudPubsubTopic": {
+            "description": "A reference to a Cloud Pub/Sub topic. To register for notifications, the owner of the topic must grant `classroom-notifications@system.gserviceaccount.com` the `projects.topics.publish` permission.",
+            "id": "CloudPubsubTopic",
+            "properties": {
+                "topicName": {
+                    "description": "The `name` field of a Cloud Pub/Sub [Topic](https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics#Topic).",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Course": {
+            "description": "A Course in Classroom.",
+            "id": "Course",
+            "properties": {
+                "alternateLink": {
+                    "description": "Absolute link to this course in the Classroom web UI. Read-only.",
+                    "type": "string"
+                },
+                "calendarId": {
+                    "description": "The Calendar ID for a calendar that all course members can see, to which Classroom adds events for course work and announcements in the course. Read-only.",
+                    "type": "string"
+                },
+                "courseGroupEmail": {
+                    "description": "The email address of a Google group containing all members of the course. This group does not accept email and can only be used for permissions. Read-only.",
+                    "type": "string"
+                },
+                "courseMaterialSets": {
+                    "description": "Sets of materials that appear on the \"about\" page of this course. Read-only.",
+                    "items": {
+                        "$ref": "CourseMaterialSet"
+                    },
+                    "type": "array"
+                },
+                "courseState": {
+                    "description": "State of the course. If unspecified, the default state is `PROVISIONED`.",
+                    "enum": [
+                        "COURSE_STATE_UNSPECIFIED",
+                        "ACTIVE",
+                        "ARCHIVED",
+                        "PROVISIONED",
+                        "DECLINED",
+                        "SUSPENDED"
+                    ],
+                    "enumDescriptions": [
+                        "No course state. No returned Course message will use this value.",
+                        "The course is active.",
+                        "The course has been archived. You cannot modify it except to change it to a different state.",
+                        "The course has been created, but not yet activated. It is accessible by the primary teacher and domain administrators, who may modify it or change it to the `ACTIVE` or `DECLINED` states. A course may only be changed to `PROVISIONED` if it is in the `DECLINED` state.",
+                        "The course has been created, but declined. It is accessible by the course owner and domain administrators, though it will not be displayed in the web UI. You cannot modify the course except to change it to the `PROVISIONED` state. A course may only be changed to `DECLINED` if it is in the `PROVISIONED` state.",
+                        "The course has been suspended. You cannot modify the course, and only the user identified by the `owner_id` can view the course. A course may be placed in this state if it potentially violates the Terms of Service."
+                    ],
+                    "type": "string"
+                },
+                "creationTime": {
+                    "description": "Creation time of the course. Specifying this field in a course update mask results in an error. Read-only.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "description": {
+                    "description": "Optional description. For example, \"We'll be learning about the structure of living creatures from a combination of textbooks, guest lectures, and lab work. Expect to be excited!\" If set, this field must be a valid UTF-8 string and no longer than 30,000 characters.",
+                    "type": "string"
+                },
+                "descriptionHeading": {
+                    "description": "Optional heading for the description. For example, \"Welcome to 10th Grade Biology.\" If set, this field must be a valid UTF-8 string and no longer than 3600 characters.",
+                    "type": "string"
+                },
+                "enrollmentCode": {
+                    "description": "Enrollment code to use when joining this course. Specifying this field in a course update mask results in an error. Read-only.",
+                    "type": "string"
+                },
+                "guardiansEnabled": {
+                    "description": "Whether or not guardian notifications are enabled for this course. Read-only.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask results in an error.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of the course. For example, \"10th Grade Biology\". The name is required. It must be between 1 and 750 characters and a valid UTF-8 string.",
+                    "type": "string"
+                },
+                "ownerId": {
+                    "description": "The identifier of the owner of a course. When specified as a parameter of a create course request, this field is required. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user This must be set in a create request. Admins can also specify this field in a patch course request to transfer ownership. In other contexts, it is read-only.",
+                    "type": "string"
+                },
+                "room": {
+                    "description": "Optional room location. For example, \"301\". If set, this field must be a valid UTF-8 string and no longer than 650 characters.",
+                    "type": "string"
+                },
+                "section": {
+                    "description": "Section of the course. For example, \"Period 2\". If set, this field must be a valid UTF-8 string and no longer than 2800 characters.",
+                    "type": "string"
+                },
+                "teacherFolder": {
+                    "$ref": "DriveFolder",
+                    "description": "Information about a Drive Folder that is shared with all teachers of the course. This field will only be set for teachers of the course and domain administrators. Read-only."
+                },
+                "teacherGroupEmail": {
+                    "description": "The email address of a Google group containing all teachers of the course. This group does not accept email and can only be used for permissions. Read-only.",
+                    "type": "string"
+                },
+                "updateTime": {
+                    "description": "Time of the most recent update to this course. Specifying this field in a course update mask results in an error. Read-only.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CourseAlias": {
+            "description": "Alternative identifier for a course. An alias uniquely identifies a course. It must be unique within one of the following scopes: * domain: A domain-scoped alias is visible to all users within the alias creator's domain and can be created only by a domain admin. A domain-scoped alias is often used when a course has an identifier external to Classroom. * project: A project-scoped alias is visible to any request from an application using the Developer Console project ID that created the alias and can be created by any project. A project-scoped alias is often used when an application has alternative identifiers. A random value can also be used to avoid duplicate courses in the event of transmission failures, as retrying a request will return `ALREADY_EXISTS` if a previous one has succeeded.",
+            "id": "CourseAlias",
+            "properties": {
+                "alias": {
+                    "description": "Alias string. The format of the string indicates the desired alias scoping. * `d:` indicates a domain-scoped alias. Example: `d:math_101` * `p:` indicates a project-scoped alias. Example: `p:abc123` This field has a maximum length of 256 characters.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CourseMaterial": {
+            "description": "A material attached to a course as part of a material set.",
+            "id": "CourseMaterial",
+            "properties": {
+                "driveFile": {
+                    "$ref": "DriveFile",
+                    "description": "Google Drive file attachment."
+                },
+                "form": {
+                    "$ref": "Form",
+                    "description": "Google Forms attachment."
+                },
+                "link": {
+                    "$ref": "Link",
+                    "description": "Link atatchment."
+                },
+                "youTubeVideo": {
+                    "$ref": "YouTubeVideo",
+                    "description": "Youtube video attachment."
+                }
+            },
+            "type": "object"
+        },
+        "CourseMaterialSet": {
+            "description": "A set of materials that appears on the \"About\" page of the course. These materials might include a syllabus, schedule, or other background information relating to the course as a whole.",
+            "id": "CourseMaterialSet",
+            "properties": {
+                "materials": {
+                    "description": "Materials attached to this set.",
+                    "items": {
+                        "$ref": "CourseMaterial"
+                    },
+                    "type": "array"
+                },
+                "title": {
+                    "description": "Title for this set.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CourseRosterChangesInfo": {
+            "description": "Information about a `Feed` with a `feed_type` of `COURSE_ROSTER_CHANGES`.",
+            "id": "CourseRosterChangesInfo",
+            "properties": {
+                "courseId": {
+                    "description": "The `course_id` of the course to subscribe to roster changes for.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CourseWork": {
+            "description": "Course work created by a teacher for students of the course.",
+            "id": "CourseWork",
+            "properties": {
+                "alternateLink": {
+                    "description": "Absolute link to this course work in the Classroom web UI. This is only populated if `state` is `PUBLISHED`. Read-only.",
+                    "type": "string"
+                },
+                "assigneeMode": {
+                    "description": "Assignee mode of the coursework. If unspecified, the default value is `ALL_STUDENTS`.",
+                    "enum": [
+                        "ASSIGNEE_MODE_UNSPECIFIED",
+                        "ALL_STUDENTS",
+                        "INDIVIDUAL_STUDENTS"
+                    ],
+                    "enumDescriptions": [
+                        "No mode specified. This is never returned.",
+                        "All students can see the item. This is the default state.",
+                        "A subset of the students can see the item."
+                    ],
+                    "type": "string"
+                },
+                "assignment": {
+                    "$ref": "Assignment",
+                    "description": "Assignment details. This is populated only when `work_type` is `ASSIGNMENT`. Read-only."
+                },
+                "associatedWithDeveloper": {
+                    "description": "Whether this course work item is associated with the Developer Console project making the request. See CreateCourseWork for more details. Read-only.",
+                    "type": "boolean"
+                },
+                "courseId": {
+                    "description": "Identifier of the course. Read-only.",
+                    "type": "string"
+                },
+                "creationTime": {
+                    "description": "Timestamp when this course work was created. Read-only.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "creatorUserId": {
+                    "description": "Identifier for the user that created the coursework. Read-only.",
+                    "type": "string"
+                },
+                "description": {
+                    "description": "Optional description of this course work. If set, the description must be a valid UTF-8 string containing no more than 30,000 characters.",
+                    "type": "string"
+                },
+                "dueDate": {
+                    "$ref": "Date",
+                    "description": "Optional date, in UTC, that submissions for this course work are due. This must be specified if `due_time` is specified."
+                },
+                "dueTime": {
+                    "$ref": "TimeOfDay",
+                    "description": "Optional time of day, in UTC, that submissions for this course work are due. This must be specified if `due_date` is specified."
+                },
+                "id": {
+                    "description": "Classroom-assigned identifier of this course work, unique per course. Read-only.",
+                    "type": "string"
+                },
+                "individualStudentsOptions": {
+                    "$ref": "IndividualStudentsOptions",
+                    "description": "Identifiers of students with access to the coursework. This field is set only if `assigneeMode` is `INDIVIDUAL_STUDENTS`. If the `assigneeMode` is `INDIVIDUAL_STUDENTS`, then only students specified in this field are assigned the coursework."
+                },
+                "materials": {
+                    "description": "Additional materials. CourseWork must have no more than 20 material items.",
+                    "items": {
+                        "$ref": "Material"
+                    },
+                    "type": "array"
+                },
+                "maxPoints": {
+                    "description": "Maximum grade for this course work. If zero or unspecified, this assignment is considered ungraded. This must be a non-negative integer value.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "multipleChoiceQuestion": {
+                    "$ref": "MultipleChoiceQuestion",
+                    "description": "Multiple choice question details. For read operations, this field is populated only when `work_type` is `MULTIPLE_CHOICE_QUESTION`. For write operations, this field must be specified when creating course work with a `work_type` of `MULTIPLE_CHOICE_QUESTION`, and it must not be set otherwise."
+                },
+                "scheduledTime": {
+                    "description": "Optional timestamp when this course work is scheduled to be published.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "state": {
+                    "description": "Status of this course work. If unspecified, the default state is `DRAFT`.",
+                    "enum": [
+                        "COURSE_WORK_STATE_UNSPECIFIED",
+                        "PUBLISHED",
+                        "DRAFT",
+                        "DELETED"
+                    ],
+                    "enumDescriptions": [
+                        "No state specified. This is never returned.",
+                        "Status for work that has been published. This is the default state.",
+                        "Status for work that is not yet published. Work in this state is visible only to course teachers and domain administrators.",
+                        "Status for work that was published but is now deleted. Work in this state is visible only to course teachers and domain administrators. Work in this state is deleted after some time."
+                    ],
+                    "type": "string"
+                },
+                "submissionModificationMode": {
+                    "description": "Setting to determine when students are allowed to modify submissions. If unspecified, the default value is `MODIFIABLE_UNTIL_TURNED_IN`.",
+                    "enum": [
+                        "SUBMISSION_MODIFICATION_MODE_UNSPECIFIED",
+                        "MODIFIABLE_UNTIL_TURNED_IN",
+                        "MODIFIABLE"
+                    ],
+                    "enumDescriptions": [
+                        "No modification mode specified. This is never returned.",
+                        "Submissions can be modified before being turned in.",
+                        "Submissions can be modified at any time."
+                    ],
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Title of this course work. The title must be a valid UTF-8 string containing between 1 and 3000 characters.",
+                    "type": "string"
+                },
+                "topicId": {
+                    "description": "Identifier for the topic that this coursework is associated with. Must match an existing topic in the course.",
+                    "type": "string"
+                },
+                "updateTime": {
+                    "description": "Timestamp of the most recent change to this course work. Read-only.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "workType": {
+                    "description": "Type of this course work. The type is set when the course work is created and cannot be changed.",
+                    "enum": [
+                        "COURSE_WORK_TYPE_UNSPECIFIED",
+                        "ASSIGNMENT",
+                        "SHORT_ANSWER_QUESTION",
+                        "MULTIPLE_CHOICE_QUESTION"
+                    ],
+                    "enumDescriptions": [
+                        "No work type specified. This is never returned.",
+                        "An assignment.",
+                        "A short answer question.",
+                        "A multiple-choice question."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CourseWorkChangesInfo": {
+            "description": "Information about a `Feed` with a `feed_type` of `COURSE_WORK_CHANGES`.",
+            "id": "CourseWorkChangesInfo",
+            "properties": {
+                "courseId": {
+                    "description": "The `course_id` of the course to subscribe to work changes for.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CourseWorkMaterial": {
+            "description": "Course work material created by a teacher for students of the course",
+            "id": "CourseWorkMaterial",
+            "properties": {
+                "alternateLink": {
+                    "description": "Absolute link to this course work material in the Classroom web UI. This is only populated if `state` is `PUBLISHED`. Read-only.",
+                    "type": "string"
+                },
+                "assigneeMode": {
+                    "description": "Assignee mode of the course work material. If unspecified, the default value is `ALL_STUDENTS`.",
+                    "enum": [
+                        "ASSIGNEE_MODE_UNSPECIFIED",
+                        "ALL_STUDENTS",
+                        "INDIVIDUAL_STUDENTS"
+                    ],
+                    "enumDescriptions": [
+                        "No mode specified. This is never returned.",
+                        "All students can see the item. This is the default state.",
+                        "A subset of the students can see the item."
+                    ],
+                    "type": "string"
+                },
+                "courseId": {
+                    "description": "Identifier of the course. Read-only.",
+                    "type": "string"
+                },
+                "creationTime": {
+                    "description": "Timestamp when this course work material was created. Read-only.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "creatorUserId": {
+                    "description": "Identifier for the user that created the course work material. Read-only.",
+                    "type": "string"
+                },
+                "description": {
+                    "description": "Optional description of this course work material. The text must be a valid UTF-8 string containing no more than 30,000 characters.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Classroom-assigned identifier of this course work material, unique per course. Read-only.",
+                    "type": "string"
+                },
+                "individualStudentsOptions": {
+                    "$ref": "IndividualStudentsOptions",
+                    "description": "Identifiers of students with access to the course work material. This field is set only if `assigneeMode` is `INDIVIDUAL_STUDENTS`. If the `assigneeMode` is `INDIVIDUAL_STUDENTS`, then only students specified in this field can see the course work material."
+                },
+                "materials": {
+                    "description": "Additional materials. A course work material must have no more than 20 material items.",
+                    "items": {
+                        "$ref": "Material"
+                    },
+                    "type": "array"
+                },
+                "scheduledTime": {
+                    "description": "Optional timestamp when this course work material is scheduled to be published.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "state": {
+                    "description": "Status of this course work material. If unspecified, the default state is `DRAFT`.",
+                    "enum": [
+                        "COURSEWORK_MATERIAL_STATE_UNSPECIFIED",
+                        "PUBLISHED",
+                        "DRAFT",
+                        "DELETED"
+                    ],
+                    "enumDescriptions": [
+                        "No state specified. This is never returned.",
+                        "Status for course work material that has been published. This is the default state.",
+                        "Status for an course work material that is not yet published. Course work material in this state is visible only to course teachers and domain administrators.",
+                        "Status for course work material that was published but is now deleted. Course work material in this state is visible only to course teachers and domain administrators. Course work material in this state is deleted after some time."
+                    ],
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Title of this course work material. The title must be a valid UTF-8 string containing between 1 and 3000 characters.",
+                    "type": "string"
+                },
+                "topicId": {
+                    "description": "Identifier for the topic that this course work material is associated with. Must match an existing topic in the course.",
+                    "type": "string"
+                },
+                "updateTime": {
+                    "description": "Timestamp of the most recent change to this course work material. Read-only.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Date": {
+            "description": "Represents a whole or partial calendar date, such as a birthday. The time of day and time zone are either specified elsewhere or are insignificant. The date is relative to the Gregorian Calendar. This can represent one of the following: * A full date, with non-zero year, month, and day values * A month and day value, with a zero year, such as an anniversary * A year on its own, with zero month and day values * A year and month value, with a zero day, such as a credit card expiration date Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.",
+            "id": "Date",
+            "properties": {
+                "day": {
+                    "description": "Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to specify a year by itself or a year and month where the day isn't significant.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "month": {
+                    "description": "Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "year": {
+                    "description": "Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "DriveFile": {
+            "description": "Representation of a Google Drive file.",
+            "id": "DriveFile",
+            "properties": {
+                "alternateLink": {
+                    "description": "URL that can be used to access the Drive item. Read-only.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Drive API resource ID.",
+                    "type": "string"
+                },
+                "thumbnailUrl": {
+                    "description": "URL of a thumbnail image of the Drive item. Read-only.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Title of the Drive item. Read-only.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DriveFolder": {
+            "description": "Representation of a Google Drive folder.",
+            "id": "DriveFolder",
+            "properties": {
+                "alternateLink": {
+                    "description": "URL that can be used to access the Drive folder. Read-only.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Drive API resource ID.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Title of the Drive folder. Read-only.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Empty": {
+            "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
+            "id": "Empty",
+            "properties": {},
+            "type": "object"
+        },
+        "Feed": {
+            "description": "A class of notifications that an application can register to receive. For example: \"all roster changes for a domain\".",
+            "id": "Feed",
+            "properties": {
+                "courseRosterChangesInfo": {
+                    "$ref": "CourseRosterChangesInfo",
+                    "description": "Information about a `Feed` with a `feed_type` of `COURSE_ROSTER_CHANGES`. This field must be specified if `feed_type` is `COURSE_ROSTER_CHANGES`."
+                },
+                "courseWorkChangesInfo": {
+                    "$ref": "CourseWorkChangesInfo",
+                    "description": "Information about a `Feed` with a `feed_type` of `COURSE_WORK_CHANGES`. This field must be specified if `feed_type` is `COURSE_WORK_CHANGES`."
+                },
+                "feedType": {
+                    "description": "The type of feed.",
+                    "enum": [
+                        "FEED_TYPE_UNSPECIFIED",
+                        "DOMAIN_ROSTER_CHANGES",
+                        "COURSE_ROSTER_CHANGES",
+                        "COURSE_WORK_CHANGES"
+                    ],
+                    "enumDescriptions": [
+                        "Should never be returned or provided.",
+                        "All roster changes for a particular domain. Notifications will be generated whenever a user joins or leaves a course. No notifications will be generated when an invitation is created or deleted, but notifications will be generated when a user joins a course by accepting an invitation.",
+                        "All roster changes for a particular course. Notifications will be generated whenever a user joins or leaves a course. No notifications will be generated when an invitation is created or deleted, but notifications will be generated when a user joins a course by accepting an invitation.",
+                        "All course work activity for a particular course. Notifications will be generated when a CourseWork or StudentSubmission object is created or modified. No notification will be generated when a StudentSubmission object is created in connection with the creation or modification of its parent CourseWork object (but a notification will be generated for that CourseWork object's creation or modification)."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Form": {
+            "description": "Google Forms item.",
+            "id": "Form",
+            "properties": {
+                "formUrl": {
+                    "description": "URL of the form.",
+                    "type": "string"
+                },
+                "responseUrl": {
+                    "description": "URL of the form responses document. Only set if respsonses have been recorded and only when the requesting user is an editor of the form. Read-only.",
+                    "type": "string"
+                },
+                "thumbnailUrl": {
+                    "description": "URL of a thumbnail image of the Form. Read-only.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Title of the Form. Read-only.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GlobalPermission": {
+            "description": "Global user permission description.",
+            "id": "GlobalPermission",
+            "properties": {
+                "permission": {
+                    "description": "Permission value.",
+                    "enum": [
+                        "PERMISSION_UNSPECIFIED",
+                        "CREATE_COURSE"
+                    ],
+                    "enumDescriptions": [
+                        "No permission is specified. This is not returned and is not a valid value.",
+                        "User is permitted to create a course."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GradeHistory": {
+            "description": "The history of each grade on this submission.",
+            "id": "GradeHistory",
+            "properties": {
+                "actorUserId": {
+                    "description": "The teacher who made the grade change.",
+                    "type": "string"
+                },
+                "gradeChangeType": {
+                    "description": "The type of grade change at this time in the submission grade history.",
+                    "enum": [
+                        "UNKNOWN_GRADE_CHANGE_TYPE",
+                        "DRAFT_GRADE_POINTS_EARNED_CHANGE",
+                        "ASSIGNED_GRADE_POINTS_EARNED_CHANGE",
+                        "MAX_POINTS_CHANGE"
+                    ],
+                    "enumDescriptions": [
+                        "No grade change type specified. This should never be returned.",
+                        "A change in the numerator of the draft grade.",
+                        "A change in the numerator of the assigned grade.",
+                        "A change in the denominator of the grade."
+                    ],
+                    "type": "string"
+                },
+                "gradeTimestamp": {
+                    "description": "When the grade of the submission was changed.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "maxPoints": {
+                    "description": "The denominator of the grade at this time in the submission grade history.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "pointsEarned": {
+                    "description": "The numerator of the grade at this time in the submission grade history.",
+                    "format": "double",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "Guardian": {
+            "description": "Association between a student and a guardian of that student. The guardian may receive information about the student's course work.",
+            "id": "Guardian",
+            "properties": {
+                "guardianId": {
+                    "description": "Identifier for the guardian.",
+                    "type": "string"
+                },
+                "guardianProfile": {
+                    "$ref": "UserProfile",
+                    "description": "User profile for the guardian."
+                },
+                "invitedEmailAddress": {
+                    "description": "The email address to which the initial guardian invitation was sent. This field is only visible to domain administrators.",
+                    "type": "string"
+                },
+                "studentId": {
+                    "description": "Identifier for the student to whom the guardian relationship applies.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GuardianInvitation": {
+            "description": "An invitation to become the guardian of a specified user, sent to a specified email address.",
+            "id": "GuardianInvitation",
+            "properties": {
+                "creationTime": {
+                    "description": "The time that this invitation was created. Read-only.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "invitationId": {
+                    "description": "Unique identifier for this invitation. Read-only.",
+                    "type": "string"
+                },
+                "invitedEmailAddress": {
+                    "description": "Email address that the invitation was sent to. This field is only visible to domain administrators.",
+                    "type": "string"
+                },
+                "state": {
+                    "description": "The state that this invitation is in.",
+                    "enum": [
+                        "GUARDIAN_INVITATION_STATE_UNSPECIFIED",
+                        "PENDING",
+                        "COMPLETE"
+                    ],
+                    "enumDescriptions": [
+                        "Should never be returned.",
+                        "The invitation is active and awaiting a response.",
+                        "The invitation is no longer active. It may have been accepted, declined, withdrawn or it may have expired."
+                    ],
+                    "type": "string"
+                },
+                "studentId": {
+                    "description": "ID of the student (in standard format)",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "IndividualStudentsOptions": {
+            "description": "Assignee details about a coursework/announcement. This field is set if and only if `assigneeMode` is `INDIVIDUAL_STUDENTS`.",
+            "id": "IndividualStudentsOptions",
+            "properties": {
+                "studentIds": {
+                    "description": "Identifiers for the students that have access to the coursework/announcement.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Invitation": {
+            "description": "An invitation to join a course.",
+            "id": "Invitation",
+            "properties": {
+                "courseId": {
+                    "description": "Identifier of the course to invite the user to.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Identifier assigned by Classroom. Read-only.",
+                    "type": "string"
+                },
+                "role": {
+                    "description": "Role to invite the user to have. Must not be `COURSE_ROLE_UNSPECIFIED`.",
+                    "enum": [
+                        "COURSE_ROLE_UNSPECIFIED",
+                        "STUDENT",
+                        "TEACHER",
+                        "OWNER"
+                    ],
+                    "enumDescriptions": [
+                        "No course role.",
+                        "Student in the course.",
+                        "Teacher of the course.",
+                        "Owner of the course."
+                    ],
+                    "type": "string"
+                },
+                "userId": {
+                    "description": "Identifier of the invited user. When specified as a parameter of a request, this identifier can be set to one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Link": {
+            "description": "URL item.",
+            "id": "Link",
+            "properties": {
+                "thumbnailUrl": {
+                    "description": "URL of a thumbnail image of the target URL. Read-only.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Title of the target of the URL. Read-only.",
+                    "type": "string"
+                },
+                "url": {
+                    "description": "URL to link to. This must be a valid UTF-8 string containing between 1 and 2024 characters.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListAnnouncementsResponse": {
+            "description": "Response when listing course work.",
+            "id": "ListAnnouncementsResponse",
+            "properties": {
+                "announcements": {
+                    "description": "Announcement items that match the request.",
+                    "items": {
+                        "$ref": "Announcement"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Token identifying the next page of results to return. If empty, no further results are available.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListCourseAliasesResponse": {
+            "description": "Response when listing course aliases.",
+            "id": "ListCourseAliasesResponse",
+            "properties": {
+                "aliases": {
+                    "description": "The course aliases.",
+                    "items": {
+                        "$ref": "CourseAlias"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Token identifying the next page of results to return. If empty, no further results are available.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListCourseWorkMaterialResponse": {
+            "description": "Response when listing course work material.",
+            "id": "ListCourseWorkMaterialResponse",
+            "properties": {
+                "courseWorkMaterial": {
+                    "description": "Course work material items that match the request.",
+                    "items": {
+                        "$ref": "CourseWorkMaterial"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Token identifying the next page of results to return. If empty, no further results are available.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListCourseWorkResponse": {
+            "description": "Response when listing course work.",
+            "id": "ListCourseWorkResponse",
+            "properties": {
+                "courseWork": {
+                    "description": "Course work items that match the request.",
+                    "items": {
+                        "$ref": "CourseWork"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Token identifying the next page of results to return. If empty, no further results are available.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListCoursesResponse": {
+            "description": "Response when listing courses.",
+            "id": "ListCoursesResponse",
+            "properties": {
+                "courses": {
+                    "description": "Courses that match the list request.",
+                    "items": {
+                        "$ref": "Course"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Token identifying the next page of results to return. If empty, no further results are available.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListGuardianInvitationsResponse": {
+            "description": "Response when listing guardian invitations.",
+            "id": "ListGuardianInvitationsResponse",
+            "properties": {
+                "guardianInvitations": {
+                    "description": "Guardian invitations that matched the list request.",
+                    "items": {
+                        "$ref": "GuardianInvitation"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Token identifying the next page of results to return. If empty, no further results are available.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListGuardiansResponse": {
+            "description": "Response when listing guardians.",
+            "id": "ListGuardiansResponse",
+            "properties": {
+                "guardians": {
+                    "description": "Guardians on this page of results that met the criteria specified in the request.",
+                    "items": {
+                        "$ref": "Guardian"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Token identifying the next page of results to return. If empty, no further results are available.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListInvitationsResponse": {
+            "description": "Response when listing invitations.",
+            "id": "ListInvitationsResponse",
+            "properties": {
+                "invitations": {
+                    "description": "Invitations that match the list request.",
+                    "items": {
+                        "$ref": "Invitation"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Token identifying the next page of results to return. If empty, no further results are available.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListStudentSubmissionsResponse": {
+            "description": "Response when listing student submissions.",
+            "id": "ListStudentSubmissionsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "Token identifying the next page of results to return. If empty, no further results are available.",
+                    "type": "string"
+                },
+                "studentSubmissions": {
+                    "description": "Student work that matches the request.",
+                    "items": {
+                        "$ref": "StudentSubmission"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListStudentsResponse": {
+            "description": "Response when listing students.",
+            "id": "ListStudentsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "Token identifying the next page of results to return. If empty, no further results are available.",
+                    "type": "string"
+                },
+                "students": {
+                    "description": "Students who match the list request.",
+                    "items": {
+                        "$ref": "Student"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListTeachersResponse": {
+            "description": "Response when listing teachers.",
+            "id": "ListTeachersResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "Token identifying the next page of results to return. If empty, no further results are available.",
+                    "type": "string"
+                },
+                "teachers": {
+                    "description": "Teachers who match the list request.",
+                    "items": {
+                        "$ref": "Teacher"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListTopicResponse": {
+            "description": "Response when listing topics.",
+            "id": "ListTopicResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "Token identifying the next page of results to return. If empty, no further results are available.",
+                    "type": "string"
+                },
+                "topic": {
+                    "description": "Topic items that match the request.",
+                    "items": {
+                        "$ref": "Topic"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Material": {
+            "description": "Material attached to course work. When creating attachments, setting the `form` field is not supported.",
+            "id": "Material",
+            "properties": {
+                "driveFile": {
+                    "$ref": "SharedDriveFile",
+                    "description": "Google Drive file material."
+                },
+                "form": {
+                    "$ref": "Form",
+                    "description": "Google Forms material."
+                },
+                "link": {
+                    "$ref": "Link",
+                    "description": "Link material. On creation, this is upgraded to a more appropriate type if possible, and this is reflected in the response."
+                },
+                "youtubeVideo": {
+                    "$ref": "YouTubeVideo",
+                    "description": "YouTube video material."
+                }
+            },
+            "type": "object"
+        },
+        "ModifyAnnouncementAssigneesRequest": {
+            "description": "Request to modify assignee mode and options of an announcement.",
+            "id": "ModifyAnnouncementAssigneesRequest",
+            "properties": {
+                "assigneeMode": {
+                    "description": "Mode of the announcement describing whether it is accessible by all students or specified individual students.",
+                    "enum": [
+                        "ASSIGNEE_MODE_UNSPECIFIED",
+                        "ALL_STUDENTS",
+                        "INDIVIDUAL_STUDENTS"
+                    ],
+                    "enumDescriptions": [
+                        "No mode specified. This is never returned.",
+                        "All students can see the item. This is the default state.",
+                        "A subset of the students can see the item."
+                    ],
+                    "type": "string"
+                },
+                "modifyIndividualStudentsOptions": {
+                    "$ref": "ModifyIndividualStudentsOptions",
+                    "description": "Set which students can view or cannot view the announcement. Must be specified only when `assigneeMode` is `INDIVIDUAL_STUDENTS`."
+                }
+            },
+            "type": "object"
+        },
+        "ModifyAttachmentsRequest": {
+            "description": "Request to modify the attachments of a student submission.",
+            "id": "ModifyAttachmentsRequest",
+            "properties": {
+                "addAttachments": {
+                    "description": "Attachments to add. A student submission may not have more than 20 attachments. Form attachments are not supported.",
+                    "items": {
+                        "$ref": "Attachment"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ModifyCourseWorkAssigneesRequest": {
+            "description": "Request to modify assignee mode and options of a coursework.",
+            "id": "ModifyCourseWorkAssigneesRequest",
+            "properties": {
+                "assigneeMode": {
+                    "description": "Mode of the coursework describing whether it will be assigned to all students or specified individual students.",
+                    "enum": [
+                        "ASSIGNEE_MODE_UNSPECIFIED",
+                        "ALL_STUDENTS",
+                        "INDIVIDUAL_STUDENTS"
+                    ],
+                    "enumDescriptions": [
+                        "No mode specified. This is never returned.",
+                        "All students can see the item. This is the default state.",
+                        "A subset of the students can see the item."
+                    ],
+                    "type": "string"
+                },
+                "modifyIndividualStudentsOptions": {
+                    "$ref": "ModifyIndividualStudentsOptions",
+                    "description": "Set which students are assigned or not assigned to the coursework. Must be specified only when `assigneeMode` is `INDIVIDUAL_STUDENTS`."
+                }
+            },
+            "type": "object"
+        },
+        "ModifyIndividualStudentsOptions": {
+            "description": "Contains fields to add or remove students from a course work or announcement where the `assigneeMode` is set to `INDIVIDUAL_STUDENTS`.",
+            "id": "ModifyIndividualStudentsOptions",
+            "properties": {
+                "addStudentIds": {
+                    "description": "IDs of students to be added as having access to this coursework/announcement.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "removeStudentIds": {
+                    "description": "IDs of students to be removed from having access to this coursework/announcement.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "MultipleChoiceQuestion": {
+            "description": "Additional details for multiple-choice questions.",
+            "id": "MultipleChoiceQuestion",
+            "properties": {
+                "choices": {
+                    "description": "Possible choices.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "MultipleChoiceSubmission": {
+            "description": "Student work for a multiple-choice question.",
+            "id": "MultipleChoiceSubmission",
+            "properties": {
+                "answer": {
+                    "description": "Student's select choice.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Name": {
+            "description": "Details of the user's name.",
+            "id": "Name",
+            "properties": {
+                "familyName": {
+                    "description": "The user's last name. Read-only.",
+                    "type": "string"
+                },
+                "fullName": {
+                    "description": "The user's full name formed by concatenating the first and last name values. Read-only.",
+                    "type": "string"
+                },
+                "givenName": {
+                    "description": "The user's first name. Read-only.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReclaimStudentSubmissionRequest": {
+            "description": "Request to reclaim a student submission.",
+            "id": "ReclaimStudentSubmissionRequest",
+            "properties": {},
+            "type": "object"
+        },
+        "Registration": {
+            "description": "An instruction to Classroom to send notifications from the `feed` to the provided destination.",
+            "id": "Registration",
+            "properties": {
+                "cloudPubsubTopic": {
+                    "$ref": "CloudPubsubTopic",
+                    "description": "The Cloud Pub/Sub topic that notifications are to be sent to."
+                },
+                "expiryTime": {
+                    "description": "The time until which the `Registration` is effective. This is a read-only field assigned by the server.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "feed": {
+                    "$ref": "Feed",
+                    "description": "Specification for the class of notifications that Classroom should deliver to the destination."
+                },
+                "registrationId": {
+                    "description": "A server-generated unique identifier for this `Registration`. Read-only.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReturnStudentSubmissionRequest": {
+            "description": "Request to return a student submission.",
+            "id": "ReturnStudentSubmissionRequest",
+            "properties": {},
+            "type": "object"
+        },
+        "SharedDriveFile": {
+            "description": "Drive file that is used as material for course work.",
+            "id": "SharedDriveFile",
+            "properties": {
+                "driveFile": {
+                    "$ref": "DriveFile",
+                    "description": "Drive file details."
+                },
+                "shareMode": {
+                    "description": "Mechanism by which students access the Drive item.",
+                    "enum": [
+                        "UNKNOWN_SHARE_MODE",
+                        "VIEW",
+                        "EDIT",
+                        "STUDENT_COPY"
+                    ],
+                    "enumDescriptions": [
+                        "No sharing mode specified. This should never be returned.",
+                        "Students can view the shared file.",
+                        "Students can edit the shared file.",
+                        "Students have a personal copy of the shared file."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ShortAnswerSubmission": {
+            "description": "Student work for a short answer question.",
+            "id": "ShortAnswerSubmission",
+            "properties": {
+                "answer": {
+                    "description": "Student response to a short-answer question.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "StateHistory": {
+            "description": "The history of each state this submission has been in.",
+            "id": "StateHistory",
+            "properties": {
+                "actorUserId": {
+                    "description": "The teacher or student who made the change.",
+                    "type": "string"
+                },
+                "state": {
+                    "description": "The workflow pipeline stage.",
+                    "enum": [
+                        "STATE_UNSPECIFIED",
+                        "CREATED",
+                        "TURNED_IN",
+                        "RETURNED",
+                        "RECLAIMED_BY_STUDENT",
+                        "STUDENT_EDITED_AFTER_TURN_IN"
+                    ],
+                    "enumDescriptions": [
+                        "No state specified. This should never be returned.",
+                        "The Submission has been created.",
+                        "The student has turned in an assigned document, which may or may not be a template.",
+                        "The teacher has returned the assigned document to the student.",
+                        "The student turned in the assigned document, and then chose to \"unsubmit\" the assignment, giving the student control again as the owner.",
+                        "The student edited their submission after turning it in. Currently, only used by Questions, when the student edits their answer."
+                    ],
+                    "type": "string"
+                },
+                "stateTimestamp": {
+                    "description": "When the submission entered this state.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Student": {
+            "description": "Student in a course.",
+            "id": "Student",
+            "properties": {
+                "courseId": {
+                    "description": "Identifier of the course. Read-only.",
+                    "type": "string"
+                },
+                "profile": {
+                    "$ref": "UserProfile",
+                    "description": "Global user information for the student. Read-only."
+                },
+                "studentWorkFolder": {
+                    "$ref": "DriveFolder",
+                    "description": "Information about a Drive Folder for this student's work in this course. Only visible to the student and domain administrators. Read-only."
+                },
+                "userId": {
+                    "description": "Identifier of the user. When specified as a parameter of a request, this identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "StudentSubmission": {
+            "description": "Student submission for course work. StudentSubmission items are generated when a CourseWork item is created. StudentSubmissions that have never been accessed (i.e. with `state` = NEW) may not have a creation time or update time.",
+            "id": "StudentSubmission",
+            "properties": {
+                "alternateLink": {
+                    "description": "Absolute link to the submission in the Classroom web UI. Read-only.",
+                    "type": "string"
+                },
+                "assignedGrade": {
+                    "description": "Optional grade. If unset, no grade was set. This value must be non-negative. Decimal (that is, non-integer) values are allowed, but are rounded to two decimal places. This may be modified only by course teachers.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "assignmentSubmission": {
+                    "$ref": "AssignmentSubmission",
+                    "description": "Submission content when course_work_type is ASSIGNMENT. Students can modify this content using ModifyAttachments."
+                },
+                "associatedWithDeveloper": {
+                    "description": "Whether this student submission is associated with the Developer Console project making the request. See CreateCourseWork for more details. Read-only.",
+                    "type": "boolean"
+                },
+                "courseId": {
+                    "description": "Identifier of the course. Read-only.",
+                    "type": "string"
+                },
+                "courseWorkId": {
+                    "description": "Identifier for the course work this corresponds to. Read-only.",
+                    "type": "string"
+                },
+                "courseWorkType": {
+                    "description": "Type of course work this submission is for. Read-only.",
+                    "enum": [
+                        "COURSE_WORK_TYPE_UNSPECIFIED",
+                        "ASSIGNMENT",
+                        "SHORT_ANSWER_QUESTION",
+                        "MULTIPLE_CHOICE_QUESTION"
+                    ],
+                    "enumDescriptions": [
+                        "No work type specified. This is never returned.",
+                        "An assignment.",
+                        "A short answer question.",
+                        "A multiple-choice question."
+                    ],
+                    "type": "string"
+                },
+                "creationTime": {
+                    "description": "Creation time of this submission. This may be unset if the student has not accessed this item. Read-only.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "draftGrade": {
+                    "description": "Optional pending grade. If unset, no grade was set. This value must be non-negative. Decimal (that is, non-integer) values are allowed, but are rounded to two decimal places. This is only visible to and modifiable by course teachers.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "id": {
+                    "description": "Classroom-assigned Identifier for the student submission. This is unique among submissions for the relevant course work. Read-only.",
+                    "type": "string"
+                },
+                "late": {
+                    "description": "Whether this submission is late. Read-only.",
+                    "type": "boolean"
+                },
+                "multipleChoiceSubmission": {
+                    "$ref": "MultipleChoiceSubmission",
+                    "description": "Submission content when course_work_type is MULTIPLE_CHOICE_QUESTION."
+                },
+                "shortAnswerSubmission": {
+                    "$ref": "ShortAnswerSubmission",
+                    "description": "Submission content when course_work_type is SHORT_ANSWER_QUESTION."
+                },
+                "state": {
+                    "description": "State of this submission. Read-only.",
+                    "enum": [
                         "SUBMISSION_STATE_UNSPECIFIED",
                         "NEW",
                         "CREATED",
                         "TURNED_IN",
                         "RETURNED",
                         "RECLAIMED_BY_STUDENT"
-                      ],
-                      "enumDescriptions": [
+                    ],
+                    "enumDescriptions": [
                         "No state specified. This should never be returned.",
                         "The student has never accessed this submission. Attachments are not returned and timestamps is not set.",
                         "Has been created.",
                         "Has been turned in to the teacher.",
                         "Has been returned to the student.",
                         "Student chose to \"unsubmit\" the assignment."
-                      ],
-                      "repeated": true,
-                      "type": "string",
-                      "location": "query"
-                    }
-                  },
-                  "response": {
-                    "$ref": "ListStudentSubmissionsResponse"
-                  },
-                  "description": "Returns a list of student submissions that the requester is permitted to view, factoring in the OAuth scopes of the request. `-` may be specified as the `course_work_id` to include student submissions for multiple course work items. Course students may only view their own work. Course teachers and domain administrators may view all student submissions. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist.",
-                  "id": "classroom.courses.courseWork.studentSubmissions.list",
-                  "httpMethod": "GET",
-                  "parameterOrder": [
-                    "courseId",
-                    "courseWorkId"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/classroom.coursework.me",
-                    "https://www.googleapis.com/auth/classroom.coursework.me.readonly",
-                    "https://www.googleapis.com/auth/classroom.coursework.students",
-                    "https://www.googleapis.com/auth/classroom.coursework.students.readonly",
-                    "https://www.googleapis.com/auth/classroom.student-submissions.me.readonly",
-                    "https://www.googleapis.com/auth/classroom.student-submissions.students.readonly"
-                  ],
-                  "path": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions",
-                  "flatPath": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions"
+                    ],
+                    "type": "string"
                 },
-                "patch": {
-                  "parameters": {
-                    "id": {
-                      "type": "string",
-                      "required": true,
-                      "location": "path",
-                      "description": "Identifier of the student submission."
+                "submissionHistory": {
+                    "description": "The history of the submission (includes state and grade histories). Read-only.",
+                    "items": {
+                        "$ref": "SubmissionHistory"
                     },
-                    "courseId": {
-                      "type": "string",
-                      "location": "path",
-                      "required": true,
-                      "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias."
-                    },
-                    "courseWorkId": {
-                      "description": "Identifier of the course work.",
-                      "type": "string",
-                      "location": "path",
-                      "required": true
-                    },
-                    "updateMask": {
-                      "location": "query",
-                      "format": "google-fieldmask",
-                      "type": "string",
-                      "description": "Mask that identifies which fields on the student submission to update. This field is required to do an update. The update fails if invalid fields are specified. The following fields may be specified by teachers: * `draft_grade` * `assigned_grade`"
-                    }
-                  },
-                  "id": "classroom.courses.courseWork.studentSubmissions.patch",
-                  "httpMethod": "PATCH",
-                  "response": {
-                    "$ref": "StudentSubmission"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/classroom.coursework.me",
-                    "https://www.googleapis.com/auth/classroom.coursework.students"
-                  ],
-                  "parameterOrder": [
-                    "courseId",
-                    "courseWorkId",
-                    "id"
-                  ],
-                  "flatPath": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}",
-                  "request": {
-                    "$ref": "StudentSubmission"
-                  },
-                  "path": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}",
-                  "description": "Updates one or more fields of a student submission. See google.classroom.v1.StudentSubmission for details of which fields may be updated and who may change them. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting developer project did not create the corresponding course work, if the user is not permitted to make the requested modification to the student submission, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist."
+                    "type": "array"
                 },
-                "get": {
-                  "flatPath": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}",
-                  "parameterOrder": [
-                    "courseId",
-                    "courseWorkId",
-                    "id"
-                  ],
-                  "httpMethod": "GET",
-                  "description": "Returns a student submission. * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course, course work, or student submission or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/classroom.coursework.me",
-                    "https://www.googleapis.com/auth/classroom.coursework.me.readonly",
-                    "https://www.googleapis.com/auth/classroom.coursework.students",
-                    "https://www.googleapis.com/auth/classroom.coursework.students.readonly",
-                    "https://www.googleapis.com/auth/classroom.student-submissions.me.readonly",
-                    "https://www.googleapis.com/auth/classroom.student-submissions.students.readonly"
-                  ],
-                  "parameters": {
-                    "courseWorkId": {
-                      "location": "path",
-                      "description": "Identifier of the course work.",
-                      "type": "string",
-                      "required": true
-                    },
-                    "id": {
-                      "required": true,
-                      "description": "Identifier of the student submission.",
-                      "location": "path",
-                      "type": "string"
-                    },
-                    "courseId": {
-                      "required": true,
-                      "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                      "type": "string",
-                      "location": "path"
-                    }
-                  },
-                  "id": "classroom.courses.courseWork.studentSubmissions.get",
-                  "response": {
-                    "$ref": "StudentSubmission"
-                  },
-                  "path": "v1/courses/{courseId}/courseWork/{courseWorkId}/studentSubmissions/{id}"
-                }
-              }
-            }
-          },
-          "methods": {
-            "list": {
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.coursework.me",
-                "https://www.googleapis.com/auth/classroom.coursework.me.readonly",
-                "https://www.googleapis.com/auth/classroom.coursework.students",
-                "https://www.googleapis.com/auth/classroom.coursework.students.readonly"
-              ],
-              "parameterOrder": [
-                "courseId"
-              ],
-              "id": "classroom.courses.courseWork.list",
-              "path": "v1/courses/{courseId}/courseWork",
-              "flatPath": "v1/courses/{courseId}/courseWork",
-              "parameters": {
-                "pageSize": {
-                  "type": "integer",
-                  "format": "int32",
-                  "location": "query",
-                  "description": "Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results."
-                },
-                "courseId": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias."
-                },
-                "pageToken": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token."
-                },
-                "orderBy": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "Optional sort ordering for results. A comma-separated list of fields with an optional sort direction keyword. Supported fields are `updateTime` and `dueDate`. Supported direction keywords are `asc` and `desc`. If not specified, `updateTime desc` is the default behavior. Examples: `dueDate asc,updateTime desc`, `updateTime,dueDate desc`"
-                },
-                "courseWorkStates": {
-                  "enum": [
-                    "COURSE_WORK_STATE_UNSPECIFIED",
-                    "PUBLISHED",
-                    "DRAFT",
-                    "DELETED"
-                  ],
-                  "repeated": true,
-                  "location": "query",
-                  "enumDescriptions": [
-                    "No state specified. This is never returned.",
-                    "Status for work that has been published. This is the default state.",
-                    "Status for work that is not yet published. Work in this state is visible only to course teachers and domain administrators.",
-                    "Status for work that was published but is now deleted. Work in this state is visible only to course teachers and domain administrators. Work in this state is deleted after some time."
-                  ],
-                  "description": "Restriction on the work status to return. Only courseWork that matches is returned. If unspecified, items with a work status of `PUBLISHED` is returned.",
-                  "type": "string"
-                }
-              },
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "ListCourseWorkResponse"
-              },
-              "description": "Returns a list of course work that the requester is permitted to view. Course students may only view `PUBLISHED` course work. Course teachers and domain administrators may view all course work. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist."
-            },
-            "delete": {
-              "httpMethod": "DELETE",
-              "id": "classroom.courses.courseWork.delete",
-              "flatPath": "v1/courses/{courseId}/courseWork/{id}",
-              "response": {
-                "$ref": "Empty"
-              },
-              "path": "v1/courses/{courseId}/courseWork/{id}",
-              "parameterOrder": [
-                "courseId",
-                "id"
-              ],
-              "parameters": {
-                "courseId": {
-                  "required": true,
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "location": "path",
-                  "type": "string"
-                },
-                "id": {
-                  "description": "Identifier of the course work to delete. This identifier is a Classroom-assigned identifier.",
-                  "location": "path",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.coursework.students"
-              ],
-              "description": "Deletes a course work. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting developer project did not create the corresponding course work, if the requesting user is not permitted to delete the requested course or for access errors. * `FAILED_PRECONDITION` if the requested course work has already been deleted. * `NOT_FOUND` if no course exists with the requested ID."
-            },
-            "get": {
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.coursework.me",
-                "https://www.googleapis.com/auth/classroom.coursework.me.readonly",
-                "https://www.googleapis.com/auth/classroom.coursework.students",
-                "https://www.googleapis.com/auth/classroom.coursework.students.readonly"
-              ],
-              "description": "Returns course work. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course or course work does not exist.",
-              "parameterOrder": [
-                "courseId",
-                "id"
-              ],
-              "path": "v1/courses/{courseId}/courseWork/{id}",
-              "flatPath": "v1/courses/{courseId}/courseWork/{id}",
-              "response": {
-                "$ref": "CourseWork"
-              },
-              "parameters": {
-                "courseId": {
-                  "type": "string",
-                  "required": true,
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "location": "path"
-                },
-                "id": {
-                  "required": true,
-                  "type": "string",
-                  "description": "Identifier of the course work.",
-                  "location": "path"
-                }
-              },
-              "id": "classroom.courses.courseWork.get",
-              "httpMethod": "GET"
-            },
-            "patch": {
-              "parameterOrder": [
-                "courseId",
-                "id"
-              ],
-              "description": "Updates one or more fields of a course work. See google.classroom.v1.CourseWork for details of which fields may be updated and who may change them. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting developer project did not create the corresponding course work, if the user is not permitted to make the requested modification to the student submission, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `FAILED_PRECONDITION` if the requested course work has already been deleted. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.",
-              "path": "v1/courses/{courseId}/courseWork/{id}",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.coursework.students"
-              ],
-              "flatPath": "v1/courses/{courseId}/courseWork/{id}",
-              "id": "classroom.courses.courseWork.patch",
-              "httpMethod": "PATCH",
-              "request": {
-                "$ref": "CourseWork"
-              },
-              "response": {
-                "$ref": "CourseWork"
-              },
-              "parameters": {
-                "courseId": {
-                  "type": "string",
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "location": "path",
-                  "required": true
-                },
-                "id": {
-                  "type": "string",
-                  "required": true,
-                  "description": "Identifier of the course work.",
-                  "location": "path"
-                },
-                "updateMask": {
-                  "type": "string",
-                  "description": "Mask that identifies which fields on the course work to update. This field is required to do an update. The update fails if invalid fields are specified. If a field supports empty values, it can be cleared by specifying it in the update mask and not in the CourseWork object. If a field that does not support empty values is included in the update mask and not set in the CourseWork object, an `INVALID_ARGUMENT` error is returned. The following fields may be specified by teachers: * `title` * `description` * `state` * `due_date` * `due_time` * `max_points` * `scheduled_time` * `submission_modification_mode` * `topic_id`",
-                  "format": "google-fieldmask",
-                  "location": "query"
-                }
-              }
-            },
-            "modifyAssignees": {
-              "parameters": {
-                "id": {
-                  "required": true,
-                  "description": "Identifier of the coursework.",
-                  "type": "string",
-                  "location": "path"
-                },
-                "courseId": {
-                  "required": true,
-                  "type": "string",
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "location": "path"
-                }
-              },
-              "path": "v1/courses/{courseId}/courseWork/{id}:modifyAssignees",
-              "httpMethod": "POST",
-              "id": "classroom.courses.courseWork.modifyAssignees",
-              "description": "Modifies assignee mode and options of a coursework. Only a teacher of the course that contains the coursework may call this method. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course or course work does not exist.",
-              "flatPath": "v1/courses/{courseId}/courseWork/{id}:modifyAssignees",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.coursework.students"
-              ],
-              "request": {
-                "$ref": "ModifyCourseWorkAssigneesRequest"
-              },
-              "parameterOrder": [
-                "courseId",
-                "id"
-              ],
-              "response": {
-                "$ref": "CourseWork"
-              }
-            },
-            "create": {
-              "path": "v1/courses/{courseId}/courseWork",
-              "request": {
-                "$ref": "CourseWork"
-              },
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "courseId"
-              ],
-              "response": {
-                "$ref": "CourseWork"
-              },
-              "id": "classroom.courses.courseWork.create",
-              "flatPath": "v1/courses/{courseId}/courseWork",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.coursework.students"
-              ],
-              "parameters": {
-                "courseId": {
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias."
-                }
-              },
-              "description": "Creates course work. The resulting course work (and corresponding student submissions) are associated with the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to make the request. Classroom API requests to modify course work and student submissions must be made with an OAuth client ID from the associated Developer Console project. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course, create course work in the requested course, share a Drive attachment, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist. * `FAILED_PRECONDITION` for the following request error: * AttachmentNotVisible"
-            }
-          }
-        },
-        "aliases": {
-          "methods": {
-            "delete": {
-              "parameterOrder": [
-                "courseId",
-                "alias"
-              ],
-              "id": "classroom.courses.aliases.delete",
-              "flatPath": "v1/courses/{courseId}/aliases/{alias}",
-              "path": "v1/courses/{courseId}/aliases/{alias}",
-              "description": "Deletes an alias of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to remove the alias or for access errors. * `NOT_FOUND` if the alias does not exist. * `FAILED_PRECONDITION` if the alias requested does not make sense for the requesting user or course (for example, if a user not in a domain attempts to delete a domain-scoped alias).",
-              "parameters": {
-                "alias": {
-                  "type": "string",
-                  "description": "Alias to delete. This may not be the Classroom-assigned identifier.",
-                  "location": "path",
-                  "required": true
-                },
-                "courseId": {
-                  "location": "path",
-                  "type": "string",
-                  "description": "Identifier of the course whose alias should be deleted. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "required": true
-                }
-              },
-              "response": {
-                "$ref": "Empty"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.courses"
-              ],
-              "httpMethod": "DELETE"
-            },
-            "list": {
-              "parameters": {
-                "courseId": {
-                  "type": "string",
-                  "description": "The identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "location": "path",
-                  "required": true
-                },
-                "pageToken": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token."
-                },
-                "pageSize": {
-                  "type": "integer",
-                  "description": "Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results.",
-                  "format": "int32",
-                  "location": "query"
-                }
-              },
-              "parameterOrder": [
-                "courseId"
-              ],
-              "response": {
-                "$ref": "ListCourseAliasesResponse"
-              },
-              "id": "classroom.courses.aliases.list",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.courses",
-                "https://www.googleapis.com/auth/classroom.courses.readonly"
-              ],
-              "description": "Returns a list of aliases for a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the course or for access errors. * `NOT_FOUND` if the course does not exist.",
-              "httpMethod": "GET",
-              "path": "v1/courses/{courseId}/aliases",
-              "flatPath": "v1/courses/{courseId}/aliases"
-            },
-            "create": {
-              "parameters": {
-                "courseId": {
-                  "type": "string",
-                  "description": "Identifier of the course to alias. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "required": true,
-                  "location": "path"
-                }
-              },
-              "response": {
-                "$ref": "CourseAlias"
-              },
-              "id": "classroom.courses.aliases.create",
-              "path": "v1/courses/{courseId}/aliases",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.courses"
-              ],
-              "request": {
-                "$ref": "CourseAlias"
-              },
-              "flatPath": "v1/courses/{courseId}/aliases",
-              "description": "Creates an alias for a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create the alias or for access errors. * `NOT_FOUND` if the course does not exist. * `ALREADY_EXISTS` if the alias already exists. * `FAILED_PRECONDITION` if the alias requested does not make sense for the requesting user or course (for example, if a user not in a domain attempts to access a domain-scoped alias).",
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "courseId"
-              ]
-            }
-          }
-        },
-        "teachers": {
-          "methods": {
-            "create": {
-              "path": "v1/courses/{courseId}/teachers",
-              "description": "Creates a teacher of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create teachers in this course or for access errors. * `NOT_FOUND` if the requested course ID does not exist. * `FAILED_PRECONDITION` if the requested user's account is disabled, for the following request errors: * CourseMemberLimitReached * CourseNotModifiable * CourseTeacherLimitReached * UserGroupsMembershipLimitReached * `ALREADY_EXISTS` if the user is already a teacher or student in the course.",
-              "request": {
-                "$ref": "Teacher"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.profile.emails",
-                "https://www.googleapis.com/auth/classroom.profile.photos",
-                "https://www.googleapis.com/auth/classroom.rosters"
-              ],
-              "id": "classroom.courses.teachers.create",
-              "flatPath": "v1/courses/{courseId}/teachers",
-              "httpMethod": "POST",
-              "parameters": {
-                "courseId": {
-                  "required": true,
-                  "type": "string",
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "location": "path"
-                }
-              },
-              "response": {
-                "$ref": "Teacher"
-              },
-              "parameterOrder": [
-                "courseId"
-              ]
-            },
-            "list": {
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "courseId"
-              ],
-              "id": "classroom.courses.teachers.list",
-              "response": {
-                "$ref": "ListTeachersResponse"
-              },
-              "path": "v1/courses/{courseId}/teachers",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.profile.emails",
-                "https://www.googleapis.com/auth/classroom.profile.photos",
-                "https://www.googleapis.com/auth/classroom.rosters",
-                "https://www.googleapis.com/auth/classroom.rosters.readonly"
-              ],
-              "description": "Returns a list of teachers of this course that the requester is permitted to view. This method returns the following error codes: * `NOT_FOUND` if the course does not exist. * `PERMISSION_DENIED` for access errors.",
-              "flatPath": "v1/courses/{courseId}/teachers",
-              "parameters": {
-                "pageSize": {
-                  "location": "query",
-                  "description": "Maximum number of items to return. The default is 30 if unspecified or `0`. The server may return fewer than the specified number of results.",
-                  "format": "int32",
-                  "type": "integer"
-                },
-                "courseId": {
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "location": "path",
-                  "type": "string",
-                  "required": true
-                },
-                "pageToken": {
-                  "location": "query",
-                  "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
-                  "type": "string"
-                }
-              }
-            },
-            "get": {
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.profile.emails",
-                "https://www.googleapis.com/auth/classroom.profile.photos",
-                "https://www.googleapis.com/auth/classroom.rosters",
-                "https://www.googleapis.com/auth/classroom.rosters.readonly"
-              ],
-              "response": {
-                "$ref": "Teacher"
-              },
-              "httpMethod": "GET",
-              "flatPath": "v1/courses/{courseId}/teachers/{userId}",
-              "parameters": {
-                "userId": {
-                  "type": "string",
-                  "description": "Identifier of the teacher to return. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
-                  "required": true,
-                  "location": "path"
-                },
-                "courseId": {
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "location": "path",
-                  "type": "string",
-                  "required": true
-                }
-              },
-              "description": "Returns a teacher of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to view teachers of this course or for access errors. * `NOT_FOUND` if no teacher of this course has the requested ID or if the course does not exist.",
-              "path": "v1/courses/{courseId}/teachers/{userId}",
-              "id": "classroom.courses.teachers.get",
-              "parameterOrder": [
-                "courseId",
-                "userId"
-              ]
-            },
-            "delete": {
-              "description": "Deletes a teacher of a course. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete teachers of this course or for access errors. * `NOT_FOUND` if no teacher of this course has the requested ID or if the course does not exist. * `FAILED_PRECONDITION` if the requested ID belongs to the primary teacher of this course.",
-              "path": "v1/courses/{courseId}/teachers/{userId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/classroom.rosters"
-              ],
-              "parameters": {
-                "courseId": {
-                  "type": "string",
-                  "description": "Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias.",
-                  "required": true,
-                  "location": "path"
+                "updateTime": {
+                    "description": "Last update time of this submission. This may be unset if the student has not accessed this item. Read-only.",
+                    "format": "google-datetime",
+                    "type": "string"
                 },
                 "userId": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "description": "Identifier of the teacher to delete. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user"
+                    "description": "Identifier for the student that owns this submission. Read-only.",
+                    "type": "string"
                 }
-              },
-              "flatPath": "v1/courses/{courseId}/teachers/{userId}",
-              "httpMethod": "DELETE",
-              "id": "classroom.courses.teachers.delete",
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "courseId",
-                "userId"
-              ]
-            }
-          }
+            },
+            "type": "object"
+        },
+        "SubmissionHistory": {
+            "description": "The history of the submission. This currently includes state and grade histories.",
+            "id": "SubmissionHistory",
+            "properties": {
+                "gradeHistory": {
+                    "$ref": "GradeHistory",
+                    "description": "The grade history information of the submission, if present."
+                },
+                "stateHistory": {
+                    "$ref": "StateHistory",
+                    "description": "The state history information of the submission, if present."
+                }
+            },
+            "type": "object"
+        },
+        "Teacher": {
+            "description": "Teacher of a course.",
+            "id": "Teacher",
+            "properties": {
+                "courseId": {
+                    "description": "Identifier of the course. Read-only.",
+                    "type": "string"
+                },
+                "profile": {
+                    "$ref": "UserProfile",
+                    "description": "Global user information for the teacher. Read-only."
+                },
+                "userId": {
+                    "description": "Identifier of the user. When specified as a parameter of a request, this identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TimeOfDay": {
+            "description": "Represents a time of day. The date and time zone are either not significant or are specified elsewhere. An API may choose to allow leap seconds. Related types are google.type.Date and `google.protobuf.Timestamp`.",
+            "id": "TimeOfDay",
+            "properties": {
+                "hours": {
+                    "description": "Hours of day in 24 hour format. Should be from 0 to 23. An API may choose to allow the value \"24:00:00\" for scenarios like business closing time.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "minutes": {
+                    "description": "Minutes of hour of day. Must be from 0 to 59.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "nanos": {
+                    "description": "Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "seconds": {
+                    "description": "Seconds of minutes of the time. Must normally be from 0 to 59. An API may allow the value 60 if it allows leap-seconds.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "Topic": {
+            "description": "Topic created by a teacher for the course",
+            "id": "Topic",
+            "properties": {
+                "courseId": {
+                    "description": "Identifier of the course. Read-only.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The name of the topic, generated by the user. Leading and trailing whitespaces, if any, are trimmed. Also, multiple consecutive whitespaces are collapsed into one inside the name. The result must be a non-empty string. Topic names are case sensitive, and must be no longer than 100 characters.",
+                    "type": "string"
+                },
+                "topicId": {
+                    "description": "Unique identifier for the topic. Read-only.",
+                    "type": "string"
+                },
+                "updateTime": {
+                    "description": "The time the topic was last updated by the system. Read-only.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TurnInStudentSubmissionRequest": {
+            "description": "Request to turn in a student submission.",
+            "id": "TurnInStudentSubmissionRequest",
+            "properties": {},
+            "type": "object"
+        },
+        "UserProfile": {
+            "description": "Global information for a user.",
+            "id": "UserProfile",
+            "properties": {
+                "emailAddress": {
+                    "description": "Email address of the user. Read-only.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Identifier of the user. Read-only.",
+                    "type": "string"
+                },
+                "name": {
+                    "$ref": "Name",
+                    "description": "Name of the user. Read-only."
+                },
+                "permissions": {
+                    "description": "Global permissions of the user. Read-only.",
+                    "items": {
+                        "$ref": "GlobalPermission"
+                    },
+                    "type": "array"
+                },
+                "photoUrl": {
+                    "description": "URL of user's profile photo. Read-only.",
+                    "type": "string"
+                },
+                "verifiedTeacher": {
+                    "description": "Represents whether a G Suite for Education user's domain administrator has explicitly verified them as being a teacher. If the user is not a member of a G Suite for Education domain, than this field is always false. Read-only",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "YouTubeVideo": {
+            "description": "YouTube video item.",
+            "id": "YouTubeVideo",
+            "properties": {
+                "alternateLink": {
+                    "description": "URL that can be used to view the YouTube video. Read-only.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "YouTube API resource ID.",
+                    "type": "string"
+                },
+                "thumbnailUrl": {
+                    "description": "URL of a thumbnail image of the YouTube video. Read-only.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Title of the YouTube video. Read-only.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         }
-      }
     },
-    "invitations": {
-      "methods": {
-        "create": {
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/classroom.rosters"
-          ],
-          "description": "Creates an invitation. Only one invitation for a user and course may exist at a time. Delete and re-create an invitation to make changes. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to create invitations for this course or for access errors. * `NOT_FOUND` if the course or the user does not exist. * `FAILED_PRECONDITION` if the requested user's account is disabled or if the user already has this role or a role with greater permissions. * `ALREADY_EXISTS` if an invitation for the specified user and course already exists.",
-          "request": {
-            "$ref": "Invitation"
-          },
-          "parameters": {},
-          "response": {
-            "$ref": "Invitation"
-          },
-          "path": "v1/invitations",
-          "parameterOrder": [],
-          "id": "classroom.invitations.create",
-          "flatPath": "v1/invitations"
-        },
-        "accept": {
-          "scopes": [
-            "https://www.googleapis.com/auth/classroom.rosters"
-          ],
-          "path": "v1/invitations/{id}:accept",
-          "parameters": {
-            "id": {
-              "required": true,
-              "type": "string",
-              "description": "Identifier of the invitation to accept.",
-              "location": "path"
-            }
-          },
-          "parameterOrder": [
-            "id"
-          ],
-          "httpMethod": "POST",
-          "response": {
-            "$ref": "Empty"
-          },
-          "description": "Accepts an invitation, removing it and adding the invited user to the teachers or students (as appropriate) of the specified course. Only the invited user may accept an invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to accept the requested invitation or for access errors. * `FAILED_PRECONDITION` for the following request errors: * CourseMemberLimitReached * CourseNotModifiable * CourseTeacherLimitReached * UserGroupsMembershipLimitReached * `NOT_FOUND` if no invitation exists with the requested ID.",
-          "flatPath": "v1/invitations/{id}:accept",
-          "id": "classroom.invitations.accept"
-        },
-        "delete": {
-          "flatPath": "v1/invitations/{id}",
-          "parameters": {
-            "id": {
-              "description": "Identifier of the invitation to delete.",
-              "location": "path",
-              "type": "string",
-              "required": true
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/classroom.rosters"
-          ],
-          "id": "classroom.invitations.delete",
-          "response": {
-            "$ref": "Empty"
-          },
-          "path": "v1/invitations/{id}",
-          "httpMethod": "DELETE",
-          "description": "Deletes an invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to delete the requested invitation or for access errors. * `NOT_FOUND` if no invitation exists with the requested ID.",
-          "parameterOrder": [
-            "id"
-          ]
-        },
-        "get": {
-          "description": "Returns an invitation. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to view the requested invitation or for access errors. * `NOT_FOUND` if no invitation exists with the requested ID.",
-          "scopes": [
-            "https://www.googleapis.com/auth/classroom.rosters",
-            "https://www.googleapis.com/auth/classroom.rosters.readonly"
-          ],
-          "flatPath": "v1/invitations/{id}",
-          "id": "classroom.invitations.get",
-          "parameters": {
-            "id": {
-              "required": true,
-              "location": "path",
-              "description": "Identifier of the invitation to return.",
-              "type": "string"
-            }
-          },
-          "response": {
-            "$ref": "Invitation"
-          },
-          "parameterOrder": [
-            "id"
-          ],
-          "httpMethod": "GET",
-          "path": "v1/invitations/{id}"
-        },
-        "list": {
-          "parameters": {
-            "pageSize": {
-              "format": "int32",
-              "description": "Maximum number of items to return. The default is 500 if unspecified or `0`. The server may return fewer than the specified number of results.",
-              "location": "query",
-              "type": "integer"
-            },
-            "courseId": {
-              "description": "Restricts returned invitations to those for a course with the specified identifier.",
-              "type": "string",
-              "location": "query"
-            },
-            "userId": {
-              "type": "string",
-              "location": "query",
-              "description": "Restricts returned invitations to those for a specific user. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `\"me\"`, indicating the requesting user"
-            },
-            "pageToken": {
-              "description": "nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.",
-              "location": "query",
-              "type": "string"
-            }
-          },
-          "id": "classroom.invitations.list",
-          "httpMethod": "GET",
-          "flatPath": "v1/invitations",
-          "response": {
-            "$ref": "ListInvitationsResponse"
-          },
-          "description": "Returns a list of invitations that the requesting user is permitted to view, restricted to those that match the list request. *Note:* At least one of `user_id` or `course_id` must be supplied. Both fields can be supplied. This method returns the following error codes: * `PERMISSION_DENIED` for access errors.",
-          "scopes": [
-            "https://www.googleapis.com/auth/classroom.rosters",
-            "https://www.googleapis.com/auth/classroom.rosters.readonly"
-          ],
-          "path": "v1/invitations",
-          "parameterOrder": []
-        }
-      }
-    }
-  },
-  "fullyEncodeReservedExpansion": true,
-  "revision": "20201012",
-  "rootUrl": "https://classroom.googleapis.com/",
-  "mtlsRootUrl": "https://classroom.mtls.googleapis.com/",
-  "protocol": "rest"
-}
+    "servicePath": "",
+    "title": "Google Classroom API",
+    "version": "v1"
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/cloudasset.v1.json b/googleapiclient/discovery_cache/documents/cloudasset.v1.json
index 45f31bd..9f6ef6a 100644
--- a/googleapiclient/discovery_cache/documents/cloudasset.v1.json
+++ b/googleapiclient/discovery_cache/documents/cloudasset.v1.json
@@ -570,7 +570,7 @@
             }
         }
     },
-    "revision": "20210212",
+    "revision": "20210226",
     "rootUrl": "https://cloudasset.googleapis.com/",
     "schemas": {
         "AccessSelector": {
@@ -970,7 +970,7 @@
             "id": "GcsDestination",
             "properties": {
                 "uri": {
-                    "description": "The uri of the Cloud Storage object. It's the same uri that is used by gsutil. Example: \"gs://bucket_name/object_name\". See [Viewing and Editing Object Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata) for more information.",
+                    "description": "The uri of the Cloud Storage object. It's the same uri that is used by gsutil. Example: \"gs://bucket_name/object_name\". See [Viewing and Editing Object Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata) for more information. If the specified Cloud Storage object already exists and there is no [hold](https://cloud.google.com/storage/docs/object-holds), it will be overwritten with the exported result.",
                     "type": "string"
                 },
                 "uriPrefix": {
@@ -1078,7 +1078,7 @@
             "id": "GoogleCloudAssetV1GcsDestination",
             "properties": {
                 "uri": {
-                    "description": "Required. The uri of the Cloud Storage object. It's the same uri that is used by gsutil. For example: \"gs://bucket_name/object_name\". See [Quickstart: Using the gsutil tool] (https://cloud.google.com/storage/docs/quickstart-gsutil) for examples.",
+                    "description": "Required. The uri of the Cloud Storage object. It's the same uri that is used by gsutil. Example: \"gs://bucket_name/object_name\". See [Viewing and Editing Object Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata) for more information. If the specified Cloud Storage object already exists and there is no [hold](https://cloud.google.com/storage/docs/object-holds), it will be overwritten with the analysis result.",
                     "type": "string"
                 }
             },
@@ -1135,6 +1135,166 @@
             },
             "type": "object"
         },
+        "GoogleCloudAssetV1p7beta1Asset": {
+            "description": "An asset in Google Cloud. An asset can be any resource in the Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), a resource outside the Google Cloud resource hierarchy (such as Google Kubernetes Engine clusters and objects), or a policy (e.g. Cloud IAM policy). See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+            "id": "GoogleCloudAssetV1p7beta1Asset",
+            "properties": {
+                "accessLevel": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1AccessLevel",
+                    "description": "Please also refer to the [access level user guide](https://cloud.google.com/access-context-manager/docs/overview#access-levels)."
+                },
+                "accessPolicy": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1AccessPolicy",
+                    "description": "Please also refer to the [access policy user guide](https://cloud.google.com/access-context-manager/docs/overview#access-policies)."
+                },
+                "ancestors": {
+                    "description": "The ancestry path of an asset in Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), represented as a list of relative resource names. An ancestry path starts with the closest ancestor in the hierarchy and ends at root. If the asset is a project, folder, or organization, the ancestry path starts from the asset itself. Example: `[\"projects/123456789\", \"folders/5432\", \"organizations/1234\"]`",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "assetType": {
+                    "description": "The type of the asset. Example: `compute.googleapis.com/Disk` See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+                    "type": "string"
+                },
+                "iamPolicy": {
+                    "$ref": "Policy",
+                    "description": "A representation of the Cloud IAM policy set on a Google Cloud resource. There can be a maximum of one Cloud IAM policy set on any given resource. In addition, Cloud IAM policies inherit their granted access scope from any policies set on parent resources in the resource hierarchy. Therefore, the effectively policy is the union of both the policy set on this resource and each policy set on all of the resource's ancestry resource levels in the hierarchy. See [this topic](https://cloud.google.com/iam/docs/policies#inheritance) for more information."
+                },
+                "name": {
+                    "description": "The full name of the asset. Example: `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1` See [Resource names](https://cloud.google.com/apis/design/resource_names#full_resource_name) for more information.",
+                    "type": "string"
+                },
+                "orgPolicy": {
+                    "description": "A representation of an [organization policy](https://cloud.google.com/resource-manager/docs/organization-policy/overview#organization_policy). There can be more than one organization policy with different constraints set on a given resource.",
+                    "items": {
+                        "$ref": "GoogleCloudOrgpolicyV1Policy"
+                    },
+                    "type": "array"
+                },
+                "relatedAssets": {
+                    "$ref": "GoogleCloudAssetV1p7beta1RelatedAssets",
+                    "description": "The related assets of the asset of one relationship type. One asset only represents one type of relationship."
+                },
+                "resource": {
+                    "$ref": "GoogleCloudAssetV1p7beta1Resource",
+                    "description": "A representation of the resource."
+                },
+                "servicePerimeter": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1ServicePerimeter",
+                    "description": "Please also refer to the [service perimeter user guide](https://cloud.google.com/vpc-service-controls/docs/overview)."
+                },
+                "updateTime": {
+                    "description": "The last update timestamp of an asset. update_time is updated when create/update/delete operation is performed.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1RelatedAsset": {
+            "description": "An asset identify in Google Cloud which contains its name, type and ancestors. An asset can be any resource in the Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), a resource outside the Google Cloud resource hierarchy (such as Google Kubernetes Engine clusters and objects), or a policy (e.g. Cloud IAM policy). See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+            "id": "GoogleCloudAssetV1p7beta1RelatedAsset",
+            "properties": {
+                "ancestors": {
+                    "description": "The ancestors of an asset in Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), represented as a list of relative resource names. An ancestry path starts with the closest ancestor in the hierarchy and ends at root. Example: `[\"projects/123456789\", \"folders/5432\", \"organizations/1234\"]`",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "asset": {
+                    "description": "The full name of the asset. Example: `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1` See [Resource names](https://cloud.google.com/apis/design/resource_names#full_resource_name) for more information.",
+                    "type": "string"
+                },
+                "assetType": {
+                    "description": "The type of the asset. Example: `compute.googleapis.com/Disk` See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1RelatedAssets": {
+            "description": "The detailed related assets with the `relationship_type`.",
+            "id": "GoogleCloudAssetV1p7beta1RelatedAssets",
+            "properties": {
+                "assets": {
+                    "description": "The peer resources of the relationship.",
+                    "items": {
+                        "$ref": "GoogleCloudAssetV1p7beta1RelatedAsset"
+                    },
+                    "type": "array"
+                },
+                "relationshipAttributes": {
+                    "$ref": "GoogleCloudAssetV1p7beta1RelationshipAttributes",
+                    "description": "The detailed relation attributes."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1RelationshipAttributes": {
+            "description": "The relationship attributes which include `type`, `source_resource_type`, `target_resource_type` and `action`.",
+            "id": "GoogleCloudAssetV1p7beta1RelationshipAttributes",
+            "properties": {
+                "action": {
+                    "description": "The detail of the relationship, e.g. `contains`, `attaches`",
+                    "type": "string"
+                },
+                "sourceResourceType": {
+                    "description": "The source asset type. Example: `compute.googleapis.com/Instance`",
+                    "type": "string"
+                },
+                "targetResourceType": {
+                    "description": "The target asset type. Example: `compute.googleapis.com/Disk`",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "The unique identifier of the relationship type. Example: `INSTANCE_TO_INSTANCEGROUP`",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1Resource": {
+            "description": "A representation of a Google Cloud resource.",
+            "id": "GoogleCloudAssetV1p7beta1Resource",
+            "properties": {
+                "data": {
+                    "additionalProperties": {
+                        "description": "Properties of the object.",
+                        "type": "any"
+                    },
+                    "description": "The content of the resource, in which some sensitive fields are removed and may not be present.",
+                    "type": "object"
+                },
+                "discoveryDocumentUri": {
+                    "description": "The URL of the discovery document containing the resource's JSON schema. Example: `https://www.googleapis.com/discovery/v1/apis/compute/v1/rest` This value is unspecified for resources that do not have an API based on a discovery document, such as Cloud Bigtable.",
+                    "type": "string"
+                },
+                "discoveryName": {
+                    "description": "The JSON schema name listed in the discovery document. Example: `Project` This value is unspecified for resources that do not have an API based on a discovery document, such as Cloud Bigtable.",
+                    "type": "string"
+                },
+                "location": {
+                    "description": "The location of the resource in Google Cloud, such as its zone and region. For more information, see https://cloud.google.com/about/locations/.",
+                    "type": "string"
+                },
+                "parent": {
+                    "description": "The full name of the immediate parent of this resource. See [Resource Names](https://cloud.google.com/apis/design/resource_names#full_resource_name) for more information. For Google Cloud assets, this value is the parent resource defined in the [Cloud IAM policy hierarchy](https://cloud.google.com/iam/docs/overview#policy_hierarchy). Example: `//cloudresourcemanager.googleapis.com/projects/my_project_123` For third-party assets, this field may be set differently.",
+                    "type": "string"
+                },
+                "resourceUrl": {
+                    "description": "The REST URL for accessing the resource. An HTTP `GET` request using this URL returns the resource itself. Example: `https://cloudresourcemanager.googleapis.com/v1/projects/my-project-123` This value is unspecified for resources without a REST API.",
+                    "type": "string"
+                },
+                "version": {
+                    "description": "The API version. Example: `v1`",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
         "GoogleCloudOrgpolicyV1BooleanPolicy": {
             "description": "Used in `policy_type` to specify how `boolean_policy` will behave at this resource.",
             "id": "GoogleCloudOrgpolicyV1BooleanPolicy",
diff --git a/googleapiclient/discovery_cache/documents/cloudasset.v1beta1.json b/googleapiclient/discovery_cache/documents/cloudasset.v1beta1.json
index d0d45a1..37a4948 100644
--- a/googleapiclient/discovery_cache/documents/cloudasset.v1beta1.json
+++ b/googleapiclient/discovery_cache/documents/cloudasset.v1beta1.json
@@ -411,7 +411,7 @@
             }
         }
     },
-    "revision": "20201211",
+    "revision": "20210226",
     "rootUrl": "https://cloudasset.googleapis.com/",
     "schemas": {
         "Asset": {
@@ -615,6 +615,166 @@
             },
             "type": "object"
         },
+        "GoogleCloudAssetV1p7beta1Asset": {
+            "description": "An asset in Google Cloud. An asset can be any resource in the Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), a resource outside the Google Cloud resource hierarchy (such as Google Kubernetes Engine clusters and objects), or a policy (e.g. Cloud IAM policy). See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+            "id": "GoogleCloudAssetV1p7beta1Asset",
+            "properties": {
+                "accessLevel": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1AccessLevel",
+                    "description": "Please also refer to the [access level user guide](https://cloud.google.com/access-context-manager/docs/overview#access-levels)."
+                },
+                "accessPolicy": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1AccessPolicy",
+                    "description": "Please also refer to the [access policy user guide](https://cloud.google.com/access-context-manager/docs/overview#access-policies)."
+                },
+                "ancestors": {
+                    "description": "The ancestry path of an asset in Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), represented as a list of relative resource names. An ancestry path starts with the closest ancestor in the hierarchy and ends at root. If the asset is a project, folder, or organization, the ancestry path starts from the asset itself. Example: `[\"projects/123456789\", \"folders/5432\", \"organizations/1234\"]`",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "assetType": {
+                    "description": "The type of the asset. Example: `compute.googleapis.com/Disk` See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+                    "type": "string"
+                },
+                "iamPolicy": {
+                    "$ref": "Policy",
+                    "description": "A representation of the Cloud IAM policy set on a Google Cloud resource. There can be a maximum of one Cloud IAM policy set on any given resource. In addition, Cloud IAM policies inherit their granted access scope from any policies set on parent resources in the resource hierarchy. Therefore, the effectively policy is the union of both the policy set on this resource and each policy set on all of the resource's ancestry resource levels in the hierarchy. See [this topic](https://cloud.google.com/iam/docs/policies#inheritance) for more information."
+                },
+                "name": {
+                    "description": "The full name of the asset. Example: `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1` See [Resource names](https://cloud.google.com/apis/design/resource_names#full_resource_name) for more information.",
+                    "type": "string"
+                },
+                "orgPolicy": {
+                    "description": "A representation of an [organization policy](https://cloud.google.com/resource-manager/docs/organization-policy/overview#organization_policy). There can be more than one organization policy with different constraints set on a given resource.",
+                    "items": {
+                        "$ref": "GoogleCloudOrgpolicyV1Policy"
+                    },
+                    "type": "array"
+                },
+                "relatedAssets": {
+                    "$ref": "GoogleCloudAssetV1p7beta1RelatedAssets",
+                    "description": "The related assets of the asset of one relationship type. One asset only represents one type of relationship."
+                },
+                "resource": {
+                    "$ref": "GoogleCloudAssetV1p7beta1Resource",
+                    "description": "A representation of the resource."
+                },
+                "servicePerimeter": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1ServicePerimeter",
+                    "description": "Please also refer to the [service perimeter user guide](https://cloud.google.com/vpc-service-controls/docs/overview)."
+                },
+                "updateTime": {
+                    "description": "The last update timestamp of an asset. update_time is updated when create/update/delete operation is performed.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1RelatedAsset": {
+            "description": "An asset identify in Google Cloud which contains its name, type and ancestors. An asset can be any resource in the Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), a resource outside the Google Cloud resource hierarchy (such as Google Kubernetes Engine clusters and objects), or a policy (e.g. Cloud IAM policy). See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+            "id": "GoogleCloudAssetV1p7beta1RelatedAsset",
+            "properties": {
+                "ancestors": {
+                    "description": "The ancestors of an asset in Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), represented as a list of relative resource names. An ancestry path starts with the closest ancestor in the hierarchy and ends at root. Example: `[\"projects/123456789\", \"folders/5432\", \"organizations/1234\"]`",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "asset": {
+                    "description": "The full name of the asset. Example: `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1` See [Resource names](https://cloud.google.com/apis/design/resource_names#full_resource_name) for more information.",
+                    "type": "string"
+                },
+                "assetType": {
+                    "description": "The type of the asset. Example: `compute.googleapis.com/Disk` See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1RelatedAssets": {
+            "description": "The detailed related assets with the `relationship_type`.",
+            "id": "GoogleCloudAssetV1p7beta1RelatedAssets",
+            "properties": {
+                "assets": {
+                    "description": "The peer resources of the relationship.",
+                    "items": {
+                        "$ref": "GoogleCloudAssetV1p7beta1RelatedAsset"
+                    },
+                    "type": "array"
+                },
+                "relationshipAttributes": {
+                    "$ref": "GoogleCloudAssetV1p7beta1RelationshipAttributes",
+                    "description": "The detailed relation attributes."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1RelationshipAttributes": {
+            "description": "The relationship attributes which include `type`, `source_resource_type`, `target_resource_type` and `action`.",
+            "id": "GoogleCloudAssetV1p7beta1RelationshipAttributes",
+            "properties": {
+                "action": {
+                    "description": "The detail of the relationship, e.g. `contains`, `attaches`",
+                    "type": "string"
+                },
+                "sourceResourceType": {
+                    "description": "The source asset type. Example: `compute.googleapis.com/Instance`",
+                    "type": "string"
+                },
+                "targetResourceType": {
+                    "description": "The target asset type. Example: `compute.googleapis.com/Disk`",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "The unique identifier of the relationship type. Example: `INSTANCE_TO_INSTANCEGROUP`",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1Resource": {
+            "description": "A representation of a Google Cloud resource.",
+            "id": "GoogleCloudAssetV1p7beta1Resource",
+            "properties": {
+                "data": {
+                    "additionalProperties": {
+                        "description": "Properties of the object.",
+                        "type": "any"
+                    },
+                    "description": "The content of the resource, in which some sensitive fields are removed and may not be present.",
+                    "type": "object"
+                },
+                "discoveryDocumentUri": {
+                    "description": "The URL of the discovery document containing the resource's JSON schema. Example: `https://www.googleapis.com/discovery/v1/apis/compute/v1/rest` This value is unspecified for resources that do not have an API based on a discovery document, such as Cloud Bigtable.",
+                    "type": "string"
+                },
+                "discoveryName": {
+                    "description": "The JSON schema name listed in the discovery document. Example: `Project` This value is unspecified for resources that do not have an API based on a discovery document, such as Cloud Bigtable.",
+                    "type": "string"
+                },
+                "location": {
+                    "description": "The location of the resource in Google Cloud, such as its zone and region. For more information, see https://cloud.google.com/about/locations/.",
+                    "type": "string"
+                },
+                "parent": {
+                    "description": "The full name of the immediate parent of this resource. See [Resource Names](https://cloud.google.com/apis/design/resource_names#full_resource_name) for more information. For Google Cloud assets, this value is the parent resource defined in the [Cloud IAM policy hierarchy](https://cloud.google.com/iam/docs/overview#policy_hierarchy). Example: `//cloudresourcemanager.googleapis.com/projects/my_project_123` For third-party assets, this field may be set differently.",
+                    "type": "string"
+                },
+                "resourceUrl": {
+                    "description": "The REST URL for accessing the resource. An HTTP `GET` request using this URL returns the resource itself. Example: `https://cloudresourcemanager.googleapis.com/v1/projects/my-project-123` This value is unspecified for resources without a REST API.",
+                    "type": "string"
+                },
+                "version": {
+                    "description": "The API version. Example: `v1`",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
         "GoogleCloudOrgpolicyV1BooleanPolicy": {
             "description": "Used in `policy_type` to specify how `boolean_policy` will behave at this resource.",
             "id": "GoogleCloudOrgpolicyV1BooleanPolicy",
diff --git a/googleapiclient/discovery_cache/documents/cloudasset.v1p1beta1.json b/googleapiclient/discovery_cache/documents/cloudasset.v1p1beta1.json
index 3863e34..a67d98f 100644
--- a/googleapiclient/discovery_cache/documents/cloudasset.v1p1beta1.json
+++ b/googleapiclient/discovery_cache/documents/cloudasset.v1p1beta1.json
@@ -1,481 +1,1264 @@
 {
-  "parameters": {
-    "quotaUser": {
-      "location": "query",
-      "type": "string",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters."
-    },
-    "fields": {
-      "type": "string",
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response."
-    },
-    "$.xgafv": {
-      "enum": [
-        "1",
-        "2"
-      ],
-      "location": "query",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "type": "string",
-      "description": "V1 error format."
-    },
-    "prettyPrint": {
-      "default": "true",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "location": "query"
-    },
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "location": "query"
-    },
-    "key": {
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "type": "string",
-      "location": "query"
-    },
-    "alt": {
-      "default": "json",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "description": "Data format for response.",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "location": "query",
-      "type": "string"
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "type": "string"
-    },
-    "upload_protocol": {
-      "location": "query",
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
-    }
-  },
-  "ownerDomain": "google.com",
-  "servicePath": "",
-  "documentationLink": "https://cloud.google.com/asset-inventory/docs/quickstart",
-  "revision": "20201106",
-  "mtlsRootUrl": "https://cloudasset.mtls.googleapis.com/",
-  "baseUrl": "https://cloudasset.googleapis.com/",
-  "fullyEncodeReservedExpansion": true,
-  "ownerName": "Google",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "rootUrl": "https://cloudasset.googleapis.com/",
-  "canonicalName": "Cloud Asset",
-  "name": "cloudasset",
-  "version": "v1p1beta1",
-  "basePath": "",
-  "kind": "discovery#restDescription",
-  "id": "cloudasset:v1p1beta1",
-  "batchPath": "batch",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "protocol": "rest",
-  "title": "Cloud Asset API",
-  "schemas": {
-    "Expr": {
-      "properties": {
-        "description": {
-          "description": "Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.",
-          "type": "string"
-        },
-        "expression": {
-          "description": "Textual representation of an expression in Common Expression Language syntax.",
-          "type": "string"
-        },
-        "location": {
-          "type": "string",
-          "description": "Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file."
-        },
-        "title": {
-          "type": "string",
-          "description": "Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression."
-        }
-      },
-      "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() \u003c 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.",
-      "id": "Expr",
-      "type": "object"
-    },
-    "AuditLogConfig": {
-      "type": "object",
-      "properties": {
-        "exemptedMembers": {
-          "description": "Specifies the identities that do not cause logging for this type of permission. Follows the same format of Binding.members.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "logType": {
-          "enum": [
-            "LOG_TYPE_UNSPECIFIED",
-            "ADMIN_READ",
-            "DATA_WRITE",
-            "DATA_READ"
-          ],
-          "type": "string",
-          "description": "The log type that this config enables.",
-          "enumDescriptions": [
-            "Default case. Should never be this.",
-            "Admin reads. Example: CloudIAM getIamPolicy",
-            "Data writes. Example: CloudSQL Users create",
-            "Data reads. Example: CloudSQL Users list"
-          ]
-        }
-      },
-      "description": "Provides the configuration for logging a type of permissions. Example: { \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" } ] } This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting jose@example.com from DATA_READ logging.",
-      "id": "AuditLogConfig"
-    },
-    "Policy": {
-      "id": "Policy",
-      "description": "An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { \"bindings\": [ { \"role\": \"roles/resourcemanager.organizationAdmin\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\" ] }, { \"role\": \"roles/resourcemanager.organizationViewer\", \"members\": [ \"user:eve@example.com\" ], \"condition\": { \"title\": \"expirable access\", \"description\": \"Does not grant access after Sep 2020\", \"expression\": \"request.time \u003c timestamp('2020-10-01T00:00:00.000Z')\", } } ], \"etag\": \"BwWWja0YfJA=\", \"version\": 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time \u003c timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).",
-      "properties": {
-        "bindings": {
-          "description": "Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.",
-          "items": {
-            "$ref": "Binding"
-          },
-          "type": "array"
-        },
-        "auditConfigs": {
-          "type": "array",
-          "description": "Specifies cloud audit logging configuration for this policy.",
-          "items": {
-            "$ref": "AuditConfig"
-          }
-        },
-        "etag": {
-          "type": "string",
-          "description": "`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.",
-          "format": "byte"
-        },
-        "version": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)."
-        }
-      },
-      "type": "object"
-    },
-    "Permissions": {
-      "description": "IAM permissions",
-      "id": "Permissions",
-      "properties": {
-        "permissions": {
-          "items": {
-            "type": "string"
-          },
-          "description": "A list of permissions. A sample permission string: \"compute.disk.get\".",
-          "type": "array"
-        }
-      },
-      "type": "object"
-    },
-    "Explanation": {
-      "properties": {
-        "matchedPermissions": {
-          "type": "object",
-          "description": "The map from roles to their included permission matching the permission query (e.g. containing `policy.role.permissions:`). A sample role string: \"roles/compute.instanceAdmin\". The roles can also be found in the returned `policy` bindings. Note that the map is populated only if requesting with a permission query.",
-          "additionalProperties": {
-            "$ref": "Permissions"
-          }
-        }
-      },
-      "description": "Explanation about the IAM policy search result.",
-      "id": "Explanation",
-      "type": "object"
-    },
-    "SearchAllIamPoliciesResponse": {
-      "description": "Search all IAM policies response.",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "description": "Set if there are more results than those appearing in this response; to get the next set of results, call this method again, using this value as the `page_token`.",
-          "type": "string"
-        },
-        "results": {
-          "items": {
-            "$ref": "IamPolicySearchResult"
-          },
-          "type": "array",
-          "description": "A list of IamPolicy that match the search query. Related information such as the associated resource is returned along with the policy."
-        }
-      },
-      "id": "SearchAllIamPoliciesResponse"
-    },
-    "IamPolicySearchResult": {
-      "properties": {
-        "project": {
-          "description": "The project that the associated GCP resource belongs to, in the form of `projects/{project_number}`. If an IAM policy is set on a resource (like VM instance, Cloud Storage bucket), the project field will indicate the project that contains the resource. If an IAM policy is set on a folder or orgnization, the project field will be empty.",
-          "type": "string"
-        },
-        "policy": {
-          "$ref": "Policy",
-          "description": "The IAM policy directly set on the given resource. Note that the original IAM policy can contain multiple bindings. This only contains the bindings that match the given query. For queries that don't contain a constrain on policies (e.g. an empty query), this contains all the bindings."
-        },
-        "explanation": {
-          "description": "Explanation about the IAM policy search result. It contains additional information to explain why the search result matches the query.",
-          "$ref": "Explanation"
-        },
-        "resource": {
-          "type": "string",
-          "description": "The [full resource name](https://cloud.google.com/apis/design/resource_names#full_resource_name) of the resource associated with this IAM policy."
-        }
-      },
-      "type": "object",
-      "description": "The result for a IAM Policy search.",
-      "id": "IamPolicySearchResult"
-    },
-    "StandardResourceMetadata": {
-      "description": "The standard metadata of a cloud resource.",
-      "properties": {
-        "description": {
-          "description": "One or more paragraphs of text description of this resource. Maximum length could be up to 1M bytes.",
-          "type": "string"
-        },
-        "project": {
-          "description": "The project that this resource belongs to, in the form of `projects/{project_number}`.",
-          "type": "string"
-        },
-        "location": {
-          "description": "Location can be \"global\", regional like \"us-east1\", or zonal like \"us-west1-b\".",
-          "type": "string"
-        },
-        "labels": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Labels associated with this resource. See [Labelling and grouping GCP resources](https://cloud.google.com/blog/products/gcp/labelling-and-grouping-your-google-cloud-platform-resources) for more information.",
-          "type": "object"
-        },
-        "name": {
-          "type": "string",
-          "description": "The full resource name. For example: `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`. See [Resource Names](https://cloud.google.com/apis/design/resource_names#full_resource_name) for more information."
-        },
-        "displayName": {
-          "description": "The display name of this resource.",
-          "type": "string"
-        },
-        "networkTags": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "Network tags associated with this resource. Like labels, network tags are a type of annotations used to group GCP resources. See [Labelling GCP resources](lhttps://cloud.google.com/blog/products/gcp/labelling-and-grouping-your-google-cloud-platform-resources) for more information."
-        },
-        "assetType": {
-          "type": "string",
-          "description": "The type of this resource. For example: \"compute.googleapis.com/Disk\"."
-        },
-        "additionalAttributes": {
-          "description": "Additional searchable attributes of this resource. Informational only. The exact set of attributes is subject to change. For example: project id, DNS name etc.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "StandardResourceMetadata",
-      "type": "object"
-    },
-    "Binding": {
-      "description": "Associates `members` with a `role`.",
-      "type": "object",
-      "id": "Binding",
-      "properties": {
-        "condition": {
-          "$ref": "Expr",
-          "description": "The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)."
-        },
-        "members": {
-          "type": "array",
-          "description": "Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. ",
-          "items": {
-            "type": "string"
-          }
-        },
-        "role": {
-          "type": "string",
-          "description": "Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`."
-        }
-      }
-    },
-    "AuditConfig": {
-      "type": "object",
-      "id": "AuditConfig",
-      "properties": {
-        "service": {
-          "description": "Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices` is a special value that covers all services.",
-          "type": "string"
-        },
-        "auditLogConfigs": {
-          "description": "The configuration for logging of each type of permission.",
-          "type": "array",
-          "items": {
-            "$ref": "AuditLogConfig"
-          }
-        }
-      },
-      "description": "Specifies the audit configuration for a service. The configuration determines which permission types are logged, and what identities, if any, are exempted from logging. An AuditConfig must have one or more AuditLogConfigs. If there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is used for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each AuditLogConfig are exempted. Example Policy with multiple AuditConfigs: { \"audit_configs\": [ { \"service\": \"allServices\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" }, { \"log_type\": \"ADMIN_READ\" } ] }, { \"service\": \"sampleservice.googleapis.com\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\" }, { \"log_type\": \"DATA_WRITE\", \"exempted_members\": [ \"user:aliya@example.com\" ] } ] } ] } For sampleservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ logging. It also exempts jose@example.com from DATA_READ logging, and aliya@example.com from DATA_WRITE logging."
-    },
-    "SearchAllResourcesResponse": {
-      "properties": {
-        "results": {
-          "type": "array",
-          "items": {
-            "$ref": "StandardResourceMetadata"
-          },
-          "description": "A list of resource that match the search query."
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "If there are more results than those appearing in this response, then `next_page_token` is included. To get the next set of results, call this method again using the value of `next_page_token` as `page_token`."
-        }
-      },
-      "description": "Search all resources response.",
-      "id": "SearchAllResourcesResponse",
-      "type": "object"
-    }
-  },
-  "version_module": true,
-  "description": "The cloud asset API manages the history and inventory of cloud resources.",
-  "discoveryVersion": "v1",
-  "resources": {
-    "iamPolicies": {
-      "methods": {
-        "searchAll": {
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "path": "v1p1beta1/{+scope}/iamPolicies:searchAll",
-          "parameterOrder": [
-            "scope"
-          ],
-          "description": "Searches all the IAM policies within a given accessible CRM scope (project/folder/organization). This RPC gives callers especially administrators the ability to search all the IAM policies within a scope, even if they don't have `.getIamPolicy` permission of all the IAM policies. Callers should have `cloud.assets.SearchAllIamPolicies` permission on the requested scope, otherwise the request will be rejected.",
-          "id": "cloudasset.iamPolicies.searchAll",
-          "response": {
-            "$ref": "SearchAllIamPoliciesResponse"
-          },
-          "parameters": {
-            "pageSize": {
-              "format": "int32",
-              "type": "integer",
-              "location": "query",
-              "description": "Optional. The page size for search result pagination. Page size is capped at 500 even if a larger value is given. If set to zero, server will pick an appropriate default. Returned results may be fewer than requested. When this happens, there could be more results as long as `next_page_token` is returned."
-            },
-            "pageToken": {
-              "location": "query",
-              "type": "string",
-              "description": "Optional. If present, retrieve the next batch of results from the preceding call to this method. `page_token` must be the value of `next_page_token` from the previous response. The values of all other method parameters must be identical to those in the previous call."
-            },
-            "query": {
-              "location": "query",
-              "description": "Optional. The query statement. Examples: * \"policy:myuser@mydomain.com\" * \"policy:(myuser@mydomain.com viewer)\"",
-              "type": "string"
-            },
-            "scope": {
-              "location": "path",
-              "pattern": "^[^/]+/[^/]+$",
-              "description": "Required. The relative name of an asset. The search is limited to the resources within the `scope`. The allowed value must be: * Organization number (such as \"organizations/123\") * Folder number(such as \"folders/1234\") * Project number (such as \"projects/12345\") * Project id (such as \"projects/abc\")",
-              "type": "string",
-              "required": true
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
+                }
             }
-          },
-          "flatPath": "v1p1beta1/{v1p1beta1Id}/{v1p1beta1Id1}/iamPolicies:searchAll"
         }
-      }
     },
+    "basePath": "",
+    "baseUrl": "https://cloudasset.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Cloud Asset",
+    "description": "The cloud asset API manages the history and inventory of cloud resources.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/asset-inventory/docs/quickstart",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "cloudasset:v1p1beta1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://cloudasset.mtls.googleapis.com/",
+    "name": "cloudasset",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        }
+    },
+    "protocol": "rest",
     "resources": {
-      "methods": {
-        "searchAll": {
-          "httpMethod": "GET",
-          "parameters": {
-            "query": {
-              "type": "string",
-              "location": "query",
-              "description": "Optional. The query statement."
-            },
-            "scope": {
-              "type": "string",
-              "description": "Required. The relative name of an asset. The search is limited to the resources within the `scope`. The allowed value must be: * Organization number (such as \"organizations/123\") * Folder number(such as \"folders/1234\") * Project number (such as \"projects/12345\") * Project id (such as \"projects/abc\")",
-              "pattern": "^[^/]+/[^/]+$",
-              "required": true,
-              "location": "path"
-            },
-            "orderBy": {
-              "location": "query",
-              "description": "Optional. A comma separated list of fields specifying the sorting order of the results. The default order is ascending. Add ` DESC` after the field name to indicate descending order. Redundant space characters are ignored. For example, ` location DESC , name `.",
-              "type": "string"
-            },
-            "assetTypes": {
-              "description": "Optional. A list of asset types that this request searches for. If empty, it will search all the supported asset types.",
-              "location": "query",
-              "repeated": true,
-              "type": "string"
-            },
-            "pageSize": {
-              "location": "query",
-              "type": "integer",
-              "format": "int32",
-              "description": "Optional. The page size for search result pagination. Page size is capped at 500 even if a larger value is given. If set to zero, server will pick an appropriate default. Returned results may be fewer than requested. When this happens, there could be more results as long as `next_page_token` is returned."
-            },
-            "pageToken": {
-              "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. `page_token` must be the value of `next_page_token` from the previous response. The values of all other method parameters, must be identical to those in the previous call.",
-              "type": "string",
-              "location": "query"
+        "iamPolicies": {
+            "methods": {
+                "searchAll": {
+                    "description": "Searches all the IAM policies within a given accessible CRM scope (project/folder/organization). This RPC gives callers especially administrators the ability to search all the IAM policies within a scope, even if they don't have `.getIamPolicy` permission of all the IAM policies. Callers should have `cloud.assets.SearchAllIamPolicies` permission on the requested scope, otherwise the request will be rejected.",
+                    "flatPath": "v1p1beta1/{v1p1beta1Id}/{v1p1beta1Id1}/iamPolicies:searchAll",
+                    "httpMethod": "GET",
+                    "id": "cloudasset.iamPolicies.searchAll",
+                    "parameterOrder": [
+                        "scope"
+                    ],
+                    "parameters": {
+                        "pageSize": {
+                            "description": "Optional. The page size for search result pagination. Page size is capped at 500 even if a larger value is given. If set to zero, server will pick an appropriate default. Returned results may be fewer than requested. When this happens, there could be more results as long as `next_page_token` is returned.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Optional. If present, retrieve the next batch of results from the preceding call to this method. `page_token` must be the value of `next_page_token` from the previous response. The values of all other method parameters must be identical to those in the previous call.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "query": {
+                            "description": "Optional. The query statement. Examples: * \"policy:myuser@mydomain.com\" * \"policy:(myuser@mydomain.com viewer)\"",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "scope": {
+                            "description": "Required. The relative name of an asset. The search is limited to the resources within the `scope`. The allowed value must be: * Organization number (such as \"organizations/123\") * Folder number(such as \"folders/1234\") * Project number (such as \"projects/12345\") * Project id (such as \"projects/abc\")",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1p1beta1/{+scope}/iamPolicies:searchAll",
+                    "response": {
+                        "$ref": "SearchAllIamPoliciesResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                    ]
+                }
             }
-          },
-          "response": {
-            "$ref": "SearchAllResourcesResponse"
-          },
-          "flatPath": "v1p1beta1/{v1p1beta1Id}/{v1p1beta1Id1}/resources:searchAll",
-          "description": "Searches all the resources within a given accessible CRM scope (project/folder/organization). This RPC gives callers especially administrators the ability to search all the resources within a scope, even if they don't have `.get` permission of all the resources. Callers should have `cloud.assets.SearchAllResources` permission on the requested scope, otherwise the request will be rejected.",
-          "id": "cloudasset.resources.searchAll",
-          "parameterOrder": [
-            "scope"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "path": "v1p1beta1/{+scope}/resources:searchAll"
+        },
+        "resources": {
+            "methods": {
+                "searchAll": {
+                    "description": "Searches all the resources within a given accessible CRM scope (project/folder/organization). This RPC gives callers especially administrators the ability to search all the resources within a scope, even if they don't have `.get` permission of all the resources. Callers should have `cloud.assets.SearchAllResources` permission on the requested scope, otherwise the request will be rejected.",
+                    "flatPath": "v1p1beta1/{v1p1beta1Id}/{v1p1beta1Id1}/resources:searchAll",
+                    "httpMethod": "GET",
+                    "id": "cloudasset.resources.searchAll",
+                    "parameterOrder": [
+                        "scope"
+                    ],
+                    "parameters": {
+                        "assetTypes": {
+                            "description": "Optional. A list of asset types that this request searches for. If empty, it will search all the supported asset types.",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "orderBy": {
+                            "description": "Optional. A comma separated list of fields specifying the sorting order of the results. The default order is ascending. Add ` DESC` after the field name to indicate descending order. Redundant space characters are ignored. For example, ` location DESC , name `.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageSize": {
+                            "description": "Optional. The page size for search result pagination. Page size is capped at 500 even if a larger value is given. If set to zero, server will pick an appropriate default. Returned results may be fewer than requested. When this happens, there could be more results as long as `next_page_token` is returned.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. `page_token` must be the value of `next_page_token` from the previous response. The values of all other method parameters, must be identical to those in the previous call.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "query": {
+                            "description": "Optional. The query statement.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "scope": {
+                            "description": "Required. The relative name of an asset. The search is limited to the resources within the `scope`. The allowed value must be: * Organization number (such as \"organizations/123\") * Folder number(such as \"folders/1234\") * Project number (such as \"projects/12345\") * Project id (such as \"projects/abc\")",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1p1beta1/{+scope}/resources:searchAll",
+                    "response": {
+                        "$ref": "SearchAllResourcesResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                    ]
+                }
+            }
         }
-      }
-    }
-  }
-}
+    },
+    "revision": "20210226",
+    "rootUrl": "https://cloudasset.googleapis.com/",
+    "schemas": {
+        "AuditConfig": {
+            "description": "Specifies the audit configuration for a service. The configuration determines which permission types are logged, and what identities, if any, are exempted from logging. An AuditConfig must have one or more AuditLogConfigs. If there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is used for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each AuditLogConfig are exempted. Example Policy with multiple AuditConfigs: { \"audit_configs\": [ { \"service\": \"allServices\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" }, { \"log_type\": \"ADMIN_READ\" } ] }, { \"service\": \"sampleservice.googleapis.com\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\" }, { \"log_type\": \"DATA_WRITE\", \"exempted_members\": [ \"user:aliya@example.com\" ] } ] } ] } For sampleservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ logging. It also exempts jose@example.com from DATA_READ logging, and aliya@example.com from DATA_WRITE logging.",
+            "id": "AuditConfig",
+            "properties": {
+                "auditLogConfigs": {
+                    "description": "The configuration for logging of each type of permission.",
+                    "items": {
+                        "$ref": "AuditLogConfig"
+                    },
+                    "type": "array"
+                },
+                "service": {
+                    "description": "Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices` is a special value that covers all services.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AuditLogConfig": {
+            "description": "Provides the configuration for logging a type of permissions. Example: { \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" } ] } This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting jose@example.com from DATA_READ logging.",
+            "id": "AuditLogConfig",
+            "properties": {
+                "exemptedMembers": {
+                    "description": "Specifies the identities that do not cause logging for this type of permission. Follows the same format of Binding.members.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "logType": {
+                    "description": "The log type that this config enables.",
+                    "enum": [
+                        "LOG_TYPE_UNSPECIFIED",
+                        "ADMIN_READ",
+                        "DATA_WRITE",
+                        "DATA_READ"
+                    ],
+                    "enumDescriptions": [
+                        "Default case. Should never be this.",
+                        "Admin reads. Example: CloudIAM getIamPolicy",
+                        "Data writes. Example: CloudSQL Users create",
+                        "Data reads. Example: CloudSQL Users list"
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Binding": {
+            "description": "Associates `members` with a `role`.",
+            "id": "Binding",
+            "properties": {
+                "condition": {
+                    "$ref": "Expr",
+                    "description": "The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)."
+                },
+                "members": {
+                    "description": "Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. ",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "role": {
+                    "description": "Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Explanation": {
+            "description": "Explanation about the IAM policy search result.",
+            "id": "Explanation",
+            "properties": {
+                "matchedPermissions": {
+                    "additionalProperties": {
+                        "$ref": "Permissions"
+                    },
+                    "description": "The map from roles to their included permission matching the permission query (e.g. containing `policy.role.permissions:`). A sample role string: \"roles/compute.instanceAdmin\". The roles can also be found in the returned `policy` bindings. Note that the map is populated only if requesting with a permission query.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "Expr": {
+            "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.",
+            "id": "Expr",
+            "properties": {
+                "description": {
+                    "description": "Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.",
+                    "type": "string"
+                },
+                "expression": {
+                    "description": "Textual representation of an expression in Common Expression Language syntax.",
+                    "type": "string"
+                },
+                "location": {
+                    "description": "Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1Asset": {
+            "description": "An asset in Google Cloud. An asset can be any resource in the Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), a resource outside the Google Cloud resource hierarchy (such as Google Kubernetes Engine clusters and objects), or a policy (e.g. Cloud IAM policy). See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+            "id": "GoogleCloudAssetV1p7beta1Asset",
+            "properties": {
+                "accessLevel": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1AccessLevel",
+                    "description": "Please also refer to the [access level user guide](https://cloud.google.com/access-context-manager/docs/overview#access-levels)."
+                },
+                "accessPolicy": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1AccessPolicy",
+                    "description": "Please also refer to the [access policy user guide](https://cloud.google.com/access-context-manager/docs/overview#access-policies)."
+                },
+                "ancestors": {
+                    "description": "The ancestry path of an asset in Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), represented as a list of relative resource names. An ancestry path starts with the closest ancestor in the hierarchy and ends at root. If the asset is a project, folder, or organization, the ancestry path starts from the asset itself. Example: `[\"projects/123456789\", \"folders/5432\", \"organizations/1234\"]`",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "assetType": {
+                    "description": "The type of the asset. Example: `compute.googleapis.com/Disk` See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+                    "type": "string"
+                },
+                "iamPolicy": {
+                    "$ref": "Policy",
+                    "description": "A representation of the Cloud IAM policy set on a Google Cloud resource. There can be a maximum of one Cloud IAM policy set on any given resource. In addition, Cloud IAM policies inherit their granted access scope from any policies set on parent resources in the resource hierarchy. Therefore, the effectively policy is the union of both the policy set on this resource and each policy set on all of the resource's ancestry resource levels in the hierarchy. See [this topic](https://cloud.google.com/iam/docs/policies#inheritance) for more information."
+                },
+                "name": {
+                    "description": "The full name of the asset. Example: `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1` See [Resource names](https://cloud.google.com/apis/design/resource_names#full_resource_name) for more information.",
+                    "type": "string"
+                },
+                "orgPolicy": {
+                    "description": "A representation of an [organization policy](https://cloud.google.com/resource-manager/docs/organization-policy/overview#organization_policy). There can be more than one organization policy with different constraints set on a given resource.",
+                    "items": {
+                        "$ref": "GoogleCloudOrgpolicyV1Policy"
+                    },
+                    "type": "array"
+                },
+                "relatedAssets": {
+                    "$ref": "GoogleCloudAssetV1p7beta1RelatedAssets",
+                    "description": "The related assets of the asset of one relationship type. One asset only represents one type of relationship."
+                },
+                "resource": {
+                    "$ref": "GoogleCloudAssetV1p7beta1Resource",
+                    "description": "A representation of the resource."
+                },
+                "servicePerimeter": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1ServicePerimeter",
+                    "description": "Please also refer to the [service perimeter user guide](https://cloud.google.com/vpc-service-controls/docs/overview)."
+                },
+                "updateTime": {
+                    "description": "The last update timestamp of an asset. update_time is updated when create/update/delete operation is performed.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1RelatedAsset": {
+            "description": "An asset identify in Google Cloud which contains its name, type and ancestors. An asset can be any resource in the Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), a resource outside the Google Cloud resource hierarchy (such as Google Kubernetes Engine clusters and objects), or a policy (e.g. Cloud IAM policy). See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+            "id": "GoogleCloudAssetV1p7beta1RelatedAsset",
+            "properties": {
+                "ancestors": {
+                    "description": "The ancestors of an asset in Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), represented as a list of relative resource names. An ancestry path starts with the closest ancestor in the hierarchy and ends at root. Example: `[\"projects/123456789\", \"folders/5432\", \"organizations/1234\"]`",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "asset": {
+                    "description": "The full name of the asset. Example: `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1` See [Resource names](https://cloud.google.com/apis/design/resource_names#full_resource_name) for more information.",
+                    "type": "string"
+                },
+                "assetType": {
+                    "description": "The type of the asset. Example: `compute.googleapis.com/Disk` See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1RelatedAssets": {
+            "description": "The detailed related assets with the `relationship_type`.",
+            "id": "GoogleCloudAssetV1p7beta1RelatedAssets",
+            "properties": {
+                "assets": {
+                    "description": "The peer resources of the relationship.",
+                    "items": {
+                        "$ref": "GoogleCloudAssetV1p7beta1RelatedAsset"
+                    },
+                    "type": "array"
+                },
+                "relationshipAttributes": {
+                    "$ref": "GoogleCloudAssetV1p7beta1RelationshipAttributes",
+                    "description": "The detailed relation attributes."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1RelationshipAttributes": {
+            "description": "The relationship attributes which include `type`, `source_resource_type`, `target_resource_type` and `action`.",
+            "id": "GoogleCloudAssetV1p7beta1RelationshipAttributes",
+            "properties": {
+                "action": {
+                    "description": "The detail of the relationship, e.g. `contains`, `attaches`",
+                    "type": "string"
+                },
+                "sourceResourceType": {
+                    "description": "The source asset type. Example: `compute.googleapis.com/Instance`",
+                    "type": "string"
+                },
+                "targetResourceType": {
+                    "description": "The target asset type. Example: `compute.googleapis.com/Disk`",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "The unique identifier of the relationship type. Example: `INSTANCE_TO_INSTANCEGROUP`",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1Resource": {
+            "description": "A representation of a Google Cloud resource.",
+            "id": "GoogleCloudAssetV1p7beta1Resource",
+            "properties": {
+                "data": {
+                    "additionalProperties": {
+                        "description": "Properties of the object.",
+                        "type": "any"
+                    },
+                    "description": "The content of the resource, in which some sensitive fields are removed and may not be present.",
+                    "type": "object"
+                },
+                "discoveryDocumentUri": {
+                    "description": "The URL of the discovery document containing the resource's JSON schema. Example: `https://www.googleapis.com/discovery/v1/apis/compute/v1/rest` This value is unspecified for resources that do not have an API based on a discovery document, such as Cloud Bigtable.",
+                    "type": "string"
+                },
+                "discoveryName": {
+                    "description": "The JSON schema name listed in the discovery document. Example: `Project` This value is unspecified for resources that do not have an API based on a discovery document, such as Cloud Bigtable.",
+                    "type": "string"
+                },
+                "location": {
+                    "description": "The location of the resource in Google Cloud, such as its zone and region. For more information, see https://cloud.google.com/about/locations/.",
+                    "type": "string"
+                },
+                "parent": {
+                    "description": "The full name of the immediate parent of this resource. See [Resource Names](https://cloud.google.com/apis/design/resource_names#full_resource_name) for more information. For Google Cloud assets, this value is the parent resource defined in the [Cloud IAM policy hierarchy](https://cloud.google.com/iam/docs/overview#policy_hierarchy). Example: `//cloudresourcemanager.googleapis.com/projects/my_project_123` For third-party assets, this field may be set differently.",
+                    "type": "string"
+                },
+                "resourceUrl": {
+                    "description": "The REST URL for accessing the resource. An HTTP `GET` request using this URL returns the resource itself. Example: `https://cloudresourcemanager.googleapis.com/v1/projects/my-project-123` This value is unspecified for resources without a REST API.",
+                    "type": "string"
+                },
+                "version": {
+                    "description": "The API version. Example: `v1`",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudOrgpolicyV1BooleanPolicy": {
+            "description": "Used in `policy_type` to specify how `boolean_policy` will behave at this resource.",
+            "id": "GoogleCloudOrgpolicyV1BooleanPolicy",
+            "properties": {
+                "enforced": {
+                    "description": "If `true`, then the `Policy` is enforced. If `false`, then any configuration is acceptable. Suppose you have a `Constraint` `constraints/compute.disableSerialPortAccess` with `constraint_default` set to `ALLOW`. A `Policy` for that `Constraint` exhibits the following behavior: - If the `Policy` at this resource has enforced set to `false`, serial port connection attempts will be allowed. - If the `Policy` at this resource has enforced set to `true`, serial port connection attempts will be refused. - If the `Policy` at this resource is `RestoreDefault`, serial port connection attempts will be allowed. - If no `Policy` is set at this resource or anywhere higher in the resource hierarchy, serial port connection attempts will be allowed. - If no `Policy` is set at this resource, but one exists higher in the resource hierarchy, the behavior is as if the`Policy` were set at this resource. The following examples demonstrate the different possible layerings: Example 1 (nearest `Constraint` wins): `organizations/foo` has a `Policy` with: {enforced: false} `projects/bar` has no `Policy` set. The constraint at `projects/bar` and `organizations/foo` will not be enforced. Example 2 (enforcement gets replaced): `organizations/foo` has a `Policy` with: {enforced: false} `projects/bar` has a `Policy` with: {enforced: true} The constraint at `organizations/foo` is not enforced. The constraint at `projects/bar` is enforced. Example 3 (RestoreDefault): `organizations/foo` has a `Policy` with: {enforced: true} `projects/bar` has a `Policy` with: {RestoreDefault: {}} The constraint at `organizations/foo` is enforced. The constraint at `projects/bar` is not enforced, because `constraint_default` for the `Constraint` is `ALLOW`.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudOrgpolicyV1ListPolicy": {
+            "description": "Used in `policy_type` to specify how `list_policy` behaves at this resource. `ListPolicy` can define specific values and subtrees of Cloud Resource Manager resource hierarchy (`Organizations`, `Folders`, `Projects`) that are allowed or denied by setting the `allowed_values` and `denied_values` fields. This is achieved by using the `under:` and optional `is:` prefixes. The `under:` prefix is used to denote resource subtree values. The `is:` prefix is used to denote specific values, and is required only if the value contains a \":\". Values prefixed with \"is:\" are treated the same as values with no prefix. Ancestry subtrees must be in one of the following formats: - \"projects/\", e.g. \"projects/tokyo-rain-123\" - \"folders/\", e.g. \"folders/1234\" - \"organizations/\", e.g. \"organizations/1234\" The `supports_under` field of the associated `Constraint` defines whether ancestry prefixes can be used. You can set `allowed_values` and `denied_values` in the same `Policy` if `all_values` is `ALL_VALUES_UNSPECIFIED`. `ALLOW` or `DENY` are used to allow or deny all values. If `all_values` is set to either `ALLOW` or `DENY`, `allowed_values` and `denied_values` must be unset.",
+            "id": "GoogleCloudOrgpolicyV1ListPolicy",
+            "properties": {
+                "allValues": {
+                    "description": "The policy all_values state.",
+                    "enum": [
+                        "ALL_VALUES_UNSPECIFIED",
+                        "ALLOW",
+                        "DENY"
+                    ],
+                    "enumDescriptions": [
+                        "Indicates that allowed_values or denied_values must be set.",
+                        "A policy with this set allows all values.",
+                        "A policy with this set denies all values."
+                    ],
+                    "type": "string"
+                },
+                "allowedValues": {
+                    "description": "List of values allowed at this resource. Can only be set if `all_values` is set to `ALL_VALUES_UNSPECIFIED`.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "deniedValues": {
+                    "description": "List of values denied at this resource. Can only be set if `all_values` is set to `ALL_VALUES_UNSPECIFIED`.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "inheritFromParent": {
+                    "description": "Determines the inheritance behavior for this `Policy`. By default, a `ListPolicy` set at a resource supersedes any `Policy` set anywhere up the resource hierarchy. However, if `inherit_from_parent` is set to `true`, then the values from the effective `Policy` of the parent resource are inherited, meaning the values set in this `Policy` are added to the values inherited up the hierarchy. Setting `Policy` hierarchies that inherit both allowed values and denied values isn't recommended in most circumstances to keep the configuration simple and understandable. However, it is possible to set a `Policy` with `allowed_values` set that inherits a `Policy` with `denied_values` set. In this case, the values that are allowed must be in `allowed_values` and not present in `denied_values`. For example, suppose you have a `Constraint` `constraints/serviceuser.services`, which has a `constraint_type` of `list_constraint`, and with `constraint_default` set to `ALLOW`. Suppose that at the Organization level, a `Policy` is applied that restricts the allowed API activations to {`E1`, `E2`}. Then, if a `Policy` is applied to a project below the Organization that has `inherit_from_parent` set to `false` and field all_values set to DENY, then an attempt to activate any API will be denied. The following examples demonstrate different possible layerings for `projects/bar` parented by `organizations/foo`: Example 1 (no inherited values): `organizations/foo` has a `Policy` with values: {allowed_values: \"E1\" allowed_values:\"E2\"} `projects/bar` has `inherit_from_parent` `false` and values: {allowed_values: \"E3\" allowed_values: \"E4\"} The accepted values at `organizations/foo` are `E1`, `E2`. The accepted values at `projects/bar` are `E3`, and `E4`. Example 2 (inherited values): `organizations/foo` has a `Policy` with values: {allowed_values: \"E1\" allowed_values:\"E2\"} `projects/bar` has a `Policy` with values: {value: \"E3\" value: \"E4\" inherit_from_parent: true} The accepted values at `organizations/foo` are `E1`, `E2`. The accepted values at `projects/bar` are `E1`, `E2`, `E3`, and `E4`. Example 3 (inheriting both allowed and denied values): `organizations/foo` has a `Policy` with values: {allowed_values: \"E1\" allowed_values: \"E2\"} `projects/bar` has a `Policy` with: {denied_values: \"E1\"} The accepted values at `organizations/foo` are `E1`, `E2`. The value accepted at `projects/bar` is `E2`. Example 4 (RestoreDefault): `organizations/foo` has a `Policy` with values: {allowed_values: \"E1\" allowed_values:\"E2\"} `projects/bar` has a `Policy` with values: {RestoreDefault: {}} The accepted values at `organizations/foo` are `E1`, `E2`. The accepted values at `projects/bar` are either all or none depending on the value of `constraint_default` (if `ALLOW`, all; if `DENY`, none). Example 5 (no policy inherits parent policy): `organizations/foo` has no `Policy` set. `projects/bar` has no `Policy` set. The accepted values at both levels are either all or none depending on the value of `constraint_default` (if `ALLOW`, all; if `DENY`, none). Example 6 (ListConstraint allowing all): `organizations/foo` has a `Policy` with values: {allowed_values: \"E1\" allowed_values: \"E2\"} `projects/bar` has a `Policy` with: {all: ALLOW} The accepted values at `organizations/foo` are `E1`, E2`. Any value is accepted at `projects/bar`. Example 7 (ListConstraint allowing none): `organizations/foo` has a `Policy` with values: {allowed_values: \"E1\" allowed_values: \"E2\"} `projects/bar` has a `Policy` with: {all: DENY} The accepted values at `organizations/foo` are `E1`, E2`. No value is accepted at `projects/bar`. Example 10 (allowed and denied subtrees of Resource Manager hierarchy): Given the following resource hierarchy O1->{F1, F2}; F1->{P1}; F2->{P2, P3}, `organizations/foo` has a `Policy` with values: {allowed_values: \"under:organizations/O1\"} `projects/bar` has a `Policy` with: {allowed_values: \"under:projects/P3\"} {denied_values: \"under:folders/F2\"} The accepted values at `organizations/foo` are `organizations/O1`, `folders/F1`, `folders/F2`, `projects/P1`, `projects/P2`, `projects/P3`. The accepted values at `projects/bar` are `organizations/O1`, `folders/F1`, `projects/P1`.",
+                    "type": "boolean"
+                },
+                "suggestedValue": {
+                    "description": "Optional. The Google Cloud Console will try to default to a configuration that matches the value specified in this `Policy`. If `suggested_value` is not set, it will inherit the value specified higher in the hierarchy, unless `inherit_from_parent` is `false`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudOrgpolicyV1Policy": {
+            "description": "Defines a Cloud Organization `Policy` which is used to specify `Constraints` for configurations of Cloud Platform resources.",
+            "id": "GoogleCloudOrgpolicyV1Policy",
+            "properties": {
+                "booleanPolicy": {
+                    "$ref": "GoogleCloudOrgpolicyV1BooleanPolicy",
+                    "description": "For boolean `Constraints`, whether to enforce the `Constraint` or not."
+                },
+                "constraint": {
+                    "description": "The name of the `Constraint` the `Policy` is configuring, for example, `constraints/serviceuser.services`. A [list of available constraints](/resource-manager/docs/organization-policy/org-policy-constraints) is available. Immutable after creation.",
+                    "type": "string"
+                },
+                "etag": {
+                    "description": "An opaque tag indicating the current version of the `Policy`, used for concurrency control. When the `Policy` is returned from either a `GetPolicy` or a `ListOrgPolicy` request, this `etag` indicates the version of the current `Policy` to use when executing a read-modify-write loop. When the `Policy` is returned from a `GetEffectivePolicy` request, the `etag` will be unset. When the `Policy` is used in a `SetOrgPolicy` method, use the `etag` value that was returned from a `GetOrgPolicy` request as part of a read-modify-write loop for concurrency control. Not setting the `etag`in a `SetOrgPolicy` request will result in an unconditional write of the `Policy`.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "listPolicy": {
+                    "$ref": "GoogleCloudOrgpolicyV1ListPolicy",
+                    "description": "List of values either allowed or disallowed."
+                },
+                "restoreDefault": {
+                    "$ref": "GoogleCloudOrgpolicyV1RestoreDefault",
+                    "description": "Restores the default behavior of the constraint; independent of `Constraint` type."
+                },
+                "updateTime": {
+                    "description": "The time stamp the `Policy` was previously updated. This is set by the server, not specified by the caller, and represents the last time a call to `SetOrgPolicy` was made for that `Policy`. Any value set by the client will be ignored.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "version": {
+                    "description": "Version of the `Policy`. Default version is 0;",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudOrgpolicyV1RestoreDefault": {
+            "description": "Ignores policies set above this resource and restores the `constraint_default` enforcement behavior of the specific `Constraint` at this resource. Suppose that `constraint_default` is set to `ALLOW` for the `Constraint` `constraints/serviceuser.services`. Suppose that organization foo.com sets a `Policy` at their Organization resource node that restricts the allowed service activations to deny all service activations. They could then set a `Policy` with the `policy_type` `restore_default` on several experimental projects, restoring the `constraint_default` enforcement of the `Constraint` for only those projects, allowing those projects to have all services activated.",
+            "id": "GoogleCloudOrgpolicyV1RestoreDefault",
+            "properties": {},
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1AccessLevel": {
+            "description": "An `AccessLevel` is a label that can be applied to requests to Google Cloud services, along with a list of requirements necessary for the label to be applied.",
+            "id": "GoogleIdentityAccesscontextmanagerV1AccessLevel",
+            "properties": {
+                "basic": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1BasicLevel",
+                    "description": "A `BasicLevel` composed of `Conditions`."
+                },
+                "custom": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1CustomLevel",
+                    "description": "A `CustomLevel` written in the Common Expression Language."
+                },
+                "description": {
+                    "description": "Description of the `AccessLevel` and its use. Does not affect behavior.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Required. Resource name for the Access Level. The `short_name` component must begin with a letter and only include alphanumeric and '_'. Format: `accessPolicies/{policy_id}/accessLevels/{short_name}`. The maximum length of the `short_name` component is 50 characters.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Human readable title. Must be unique within the Policy.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1AccessPolicy": {
+            "description": "`AccessPolicy` is a container for `AccessLevels` (which define the necessary attributes to use Google Cloud services) and `ServicePerimeters` (which define regions of services able to freely pass data within a perimeter). An access policy is globally visible within an organization, and the restrictions it specifies apply to all projects within an organization.",
+            "id": "GoogleIdentityAccesscontextmanagerV1AccessPolicy",
+            "properties": {
+                "etag": {
+                    "description": "Output only. An opaque identifier for the current version of the `AccessPolicy`. This will always be a strongly validated etag, meaning that two Access Polices will be identical if and only if their etags are identical. Clients should not expect this to be in any specific format.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Output only. Resource name of the `AccessPolicy`. Format: `accessPolicies/{policy_id}`",
+                    "type": "string"
+                },
+                "parent": {
+                    "description": "Required. The parent of this `AccessPolicy` in the Cloud Resource Hierarchy. Currently immutable once created. Format: `organizations/{organization_id}`",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Required. Human readable title. Does not affect behavior.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1ApiOperation": {
+            "description": "Identification for an API Operation.",
+            "id": "GoogleIdentityAccesscontextmanagerV1ApiOperation",
+            "properties": {
+                "methodSelectors": {
+                    "description": "API methods or permissions to allow. Method or permission must belong to the service specified by `service_name` field. A single MethodSelector entry with `*` specified for the `method` field will allow all methods AND permissions for the service specified in `service_name`.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1MethodSelector"
+                    },
+                    "type": "array"
+                },
+                "serviceName": {
+                    "description": "The name of the API whose methods or permissions the IngressPolicy or EgressPolicy want to allow. A single ApiOperation with `service_name` field set to `*` will allow all methods AND permissions for all services.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1BasicLevel": {
+            "description": "`BasicLevel` is an `AccessLevel` using a set of recommended features.",
+            "id": "GoogleIdentityAccesscontextmanagerV1BasicLevel",
+            "properties": {
+                "combiningFunction": {
+                    "description": "How the `conditions` list should be combined to determine if a request is granted this `AccessLevel`. If AND is used, each `Condition` in `conditions` must be satisfied for the `AccessLevel` to be applied. If OR is used, at least one `Condition` in `conditions` must be satisfied for the `AccessLevel` to be applied. Default behavior is AND.",
+                    "enum": [
+                        "AND",
+                        "OR"
+                    ],
+                    "enumDescriptions": [
+                        "All `Conditions` must be true for the `BasicLevel` to be true.",
+                        "If at least one `Condition` is true, then the `BasicLevel` is true."
+                    ],
+                    "type": "string"
+                },
+                "conditions": {
+                    "description": "Required. A list of requirements for the `AccessLevel` to be granted.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1Condition"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1Condition": {
+            "description": "A condition necessary for an `AccessLevel` to be granted. The Condition is an AND over its fields. So a Condition is true if: 1) the request IP is from one of the listed subnetworks AND 2) the originating device complies with the listed device policy AND 3) all listed access levels are granted AND 4) the request was sent at a time allowed by the DateTimeRestriction.",
+            "id": "GoogleIdentityAccesscontextmanagerV1Condition",
+            "properties": {
+                "devicePolicy": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1DevicePolicy",
+                    "description": "Device specific restrictions, all restrictions must hold for the Condition to be true. If not specified, all devices are allowed."
+                },
+                "ipSubnetworks": {
+                    "description": "CIDR block IP subnetwork specification. May be IPv4 or IPv6. Note that for a CIDR IP address block, the specified IP address portion must be properly truncated (i.e. all the host bits must be zero) or the input is considered malformed. For example, \"192.0.2.0/24\" is accepted but \"192.0.2.1/24\" is not. Similarly, for IPv6, \"2001:db8::/32\" is accepted whereas \"2001:db8::1/32\" is not. The originating IP of a request must be in one of the listed subnets in order for this Condition to be true. If empty, all IP addresses are allowed.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "members": {
+                    "description": "The request must be made by one of the provided user or service accounts. Groups are not supported. Syntax: `user:{emailid}` `serviceAccount:{emailid}` If not specified, a request may come from any user.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "negate": {
+                    "description": "Whether to negate the Condition. If true, the Condition becomes a NAND over its non-empty fields, each field must be false for the Condition overall to be satisfied. Defaults to false.",
+                    "type": "boolean"
+                },
+                "regions": {
+                    "description": "The request must originate from one of the provided countries/regions. Must be valid ISO 3166-1 alpha-2 codes.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "requiredAccessLevels": {
+                    "description": "A list of other access levels defined in the same `Policy`, referenced by resource name. Referencing an `AccessLevel` which does not exist is an error. All access levels listed must be granted for the Condition to be true. Example: \"`accessPolicies/MY_POLICY/accessLevels/LEVEL_NAME\"`",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1CustomLevel": {
+            "description": "`CustomLevel` is an `AccessLevel` using the Cloud Common Expression Language to represent the necessary conditions for the level to apply to a request. See CEL spec at: https://github.com/google/cel-spec",
+            "id": "GoogleIdentityAccesscontextmanagerV1CustomLevel",
+            "properties": {
+                "expr": {
+                    "$ref": "Expr",
+                    "description": "Required. A Cloud CEL expression evaluating to a boolean."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1DevicePolicy": {
+            "description": "`DevicePolicy` specifies device specific restrictions necessary to acquire a given access level. A `DevicePolicy` specifies requirements for requests from devices to be granted access levels, it does not do any enforcement on the device. `DevicePolicy` acts as an AND over all specified fields, and each repeated field is an OR over its elements. Any unset fields are ignored. For example, if the proto is { os_type : DESKTOP_WINDOWS, os_type : DESKTOP_LINUX, encryption_status: ENCRYPTED}, then the DevicePolicy will be true for requests originating from encrypted Linux desktops and encrypted Windows desktops.",
+            "id": "GoogleIdentityAccesscontextmanagerV1DevicePolicy",
+            "properties": {
+                "allowedDeviceManagementLevels": {
+                    "description": "Allowed device management levels, an empty list allows all management levels.",
+                    "items": {
+                        "enum": [
+                            "MANAGEMENT_UNSPECIFIED",
+                            "NONE",
+                            "BASIC",
+                            "COMPLETE"
+                        ],
+                        "enumDescriptions": [
+                            "The device's management level is not specified or not known.",
+                            "The device is not managed.",
+                            "Basic management is enabled, which is generally limited to monitoring and wiping the corporate account.",
+                            "Complete device management. This includes more thorough monitoring and the ability to directly manage the device (such as remote wiping). This can be enabled through the Android Enterprise Platform."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "allowedEncryptionStatuses": {
+                    "description": "Allowed encryptions statuses, an empty list allows all statuses.",
+                    "items": {
+                        "enum": [
+                            "ENCRYPTION_UNSPECIFIED",
+                            "ENCRYPTION_UNSUPPORTED",
+                            "UNENCRYPTED",
+                            "ENCRYPTED"
+                        ],
+                        "enumDescriptions": [
+                            "The encryption status of the device is not specified or not known.",
+                            "The device does not support encryption.",
+                            "The device supports encryption, but is currently unencrypted.",
+                            "The device is encrypted."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "osConstraints": {
+                    "description": "Allowed OS versions, an empty list allows all types and all versions.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1OsConstraint"
+                    },
+                    "type": "array"
+                },
+                "requireAdminApproval": {
+                    "description": "Whether the device needs to be approved by the customer admin.",
+                    "type": "boolean"
+                },
+                "requireCorpOwned": {
+                    "description": "Whether the device needs to be corp owned.",
+                    "type": "boolean"
+                },
+                "requireScreenlock": {
+                    "description": "Whether or not screenlock is required for the DevicePolicy to be true. Defaults to `false`.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1EgressFrom": {
+            "description": "Defines the conditions under which an EgressPolicy matches a request. Conditions based on information about the source of the request. Note that if the destination of the request is protected by a ServicePerimeter, then that ServicePerimeter must have an IngressPolicy which allows access in order for this request to succeed.",
+            "id": "GoogleIdentityAccesscontextmanagerV1EgressFrom",
+            "properties": {
+                "identities": {
+                    "description": "A list of identities that are allowed access through this [EgressPolicy]. Should be in the format of email address. The email address should represent individual user or service account only.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "identityType": {
+                    "description": "Specifies the type of identities that are allowed access to outside the perimeter. If left unspecified, then members of `identities` field will be allowed access.",
+                    "enum": [
+                        "IDENTITY_TYPE_UNSPECIFIED",
+                        "ANY_IDENTITY",
+                        "ANY_USER_ACCOUNT",
+                        "ANY_SERVICE_ACCOUNT"
+                    ],
+                    "enumDescriptions": [
+                        "No blanket identity group specified.",
+                        "Authorize access from all identities outside the perimeter.",
+                        "Authorize access from all human users outside the perimeter.",
+                        "Authorize access from all service accounts outside the perimeter."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1EgressPolicy": {
+            "description": "Policy for egress from perimeter. EgressPolicies match requests based on `egress_from` and `egress_to` stanzas. For an EgressPolicy to match, both `egress_from` and `egress_to` stanzas must be matched. If an EgressPolicy matches a request, the request is allowed to span the ServicePerimeter boundary. For example, an EgressPolicy can be used to allow VMs on networks within the ServicePerimeter to access a defined set of projects outside the perimeter in certain contexts (e.g. to read data from a Cloud Storage bucket or query against a BigQuery dataset). EgressPolicies are concerned with the *resources* that a request relates as well as the API services and API actions being used. They do not related to the direction of data movement. More detailed documentation for this concept can be found in the descriptions of EgressFrom and EgressTo.",
+            "id": "GoogleIdentityAccesscontextmanagerV1EgressPolicy",
+            "properties": {
+                "egressFrom": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1EgressFrom",
+                    "description": "Defines conditions on the source of a request causing this EgressPolicy to apply."
+                },
+                "egressTo": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1EgressTo",
+                    "description": "Defines the conditions on the ApiOperation and destination resources that cause this EgressPolicy to apply."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1EgressTo": {
+            "description": "Defines the conditions under which an EgressPolicy matches a request. Conditions are based on information about the ApiOperation intended to be performed on the `resources` specified. Note that if the destination of the request is protected by a ServicePerimeter, then that ServicePerimeter must have an IngressPolicy which allows access in order for this request to succeed.",
+            "id": "GoogleIdentityAccesscontextmanagerV1EgressTo",
+            "properties": {
+                "operations": {
+                    "description": "A list of ApiOperations that this egress rule applies to. A request matches if it contains an operation/service in this list.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1ApiOperation"
+                    },
+                    "type": "array"
+                },
+                "resources": {
+                    "description": "A list of resources, currently only projects in the form `projects/`, that match this to stanza. A request matches if it contains a resource in this list. If `*` is specified for resources, then this EgressTo rule will authorize access to all resources outside the perimeter.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1IngressFrom": {
+            "description": "Defines the conditions under which an IngressPolicy matches a request. Conditions are based on information about the source of the request.",
+            "id": "GoogleIdentityAccesscontextmanagerV1IngressFrom",
+            "properties": {
+                "identities": {
+                    "description": "A list of identities that are allowed access through this ingress policy. Should be in the format of email address. The email address should represent individual user or service account only.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "identityType": {
+                    "description": "Specifies the type of identities that are allowed access from outside the perimeter. If left unspecified, then members of `identities` field will be allowed access.",
+                    "enum": [
+                        "IDENTITY_TYPE_UNSPECIFIED",
+                        "ANY_IDENTITY",
+                        "ANY_USER_ACCOUNT",
+                        "ANY_SERVICE_ACCOUNT"
+                    ],
+                    "enumDescriptions": [
+                        "No blanket identity group specified.",
+                        "Authorize access from all identities outside the perimeter.",
+                        "Authorize access from all human users outside the perimeter.",
+                        "Authorize access from all service accounts outside the perimeter."
+                    ],
+                    "type": "string"
+                },
+                "sources": {
+                    "description": "Sources that this IngressPolicy authorizes access from.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1IngressSource"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1IngressPolicy": {
+            "description": "Policy for ingress into ServicePerimeter. IngressPolicies match requests based on `ingress_from` and `ingress_to` stanzas. For an ingress policy to match, both the `ingress_from` and `ingress_to` stanzas must be matched. If an IngressPolicy matches a request, the request is allowed through the perimeter boundary from outside the perimeter. For example, access from the internet can be allowed either based on an AccessLevel or, for traffic hosted on Google Cloud, the project of the source network. For access from private networks, using the project of the hosting network is required. Individual ingress policies can be limited by restricting which services and/or actions they match using the `ingress_to` field.",
+            "id": "GoogleIdentityAccesscontextmanagerV1IngressPolicy",
+            "properties": {
+                "ingressFrom": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1IngressFrom",
+                    "description": "Defines the conditions on the source of a request causing this IngressPolicy to apply."
+                },
+                "ingressTo": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1IngressTo",
+                    "description": "Defines the conditions on the ApiOperation and request destination that cause this IngressPolicy to apply."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1IngressSource": {
+            "description": "The source that IngressPolicy authorizes access from.",
+            "id": "GoogleIdentityAccesscontextmanagerV1IngressSource",
+            "properties": {
+                "accessLevel": {
+                    "description": "An AccessLevel resource name that allow resources within the ServicePerimeters to be accessed from the internet. AccessLevels listed must be in the same policy as this ServicePerimeter. Referencing a nonexistent AccessLevel will cause an error. If no AccessLevel names are listed, resources within the perimeter can only be accessed via Google Cloud calls with request origins within the perimeter. Example: `accessPolicies/MY_POLICY/accessLevels/MY_LEVEL`. If `*` is specified, then all IngressSources will be allowed.",
+                    "type": "string"
+                },
+                "resource": {
+                    "description": "A Google Cloud resource that is allowed to ingress the perimeter. Requests from these resources will be allowed to access perimeter data. Currently only projects are allowed. Format: `projects/{project_number}` The project may be in any Google Cloud organization, not just the organization that the perimeter is defined in. `*` is not allowed, the case of allowing all Google Cloud resources only is not supported.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1IngressTo": {
+            "description": "Defines the conditions under which an IngressPolicy matches a request. Conditions are based on information about the ApiOperation intended to be performed on the destination of the request.",
+            "id": "GoogleIdentityAccesscontextmanagerV1IngressTo",
+            "properties": {
+                "operations": {
+                    "description": "A list of ApiOperations the sources specified in corresponding IngressFrom are allowed to perform in this ServicePerimeter.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1ApiOperation"
+                    },
+                    "type": "array"
+                },
+                "resources": {
+                    "description": "A list of resources, currently only projects in the form `projects/`, protected by this ServicePerimeter that are allowed to be accessed by sources defined in the corresponding IngressFrom. A request matches if it contains a resource in this list. If `*` is specified for resources, then this IngressTo rule will authorize access to all resources inside the perimeter, provided that the request also matches the `operations` field.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1MethodSelector": {
+            "description": "An allowed method or permission of a service specified in ApiOperation.",
+            "id": "GoogleIdentityAccesscontextmanagerV1MethodSelector",
+            "properties": {
+                "method": {
+                    "description": "Value for `method` should be a valid method name for the corresponding `service_name` in ApiOperation. If `*` used as value for `method`, then ALL methods and permissions are allowed.",
+                    "type": "string"
+                },
+                "permission": {
+                    "description": "Value for `permission` should be a valid Cloud IAM permission for the corresponding `service_name` in ApiOperation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1OsConstraint": {
+            "description": "A restriction on the OS type and version of devices making requests.",
+            "id": "GoogleIdentityAccesscontextmanagerV1OsConstraint",
+            "properties": {
+                "minimumVersion": {
+                    "description": "The minimum allowed OS version. If not set, any version of this OS satisfies the constraint. Format: `\"major.minor.patch\"`. Examples: `\"10.5.301\"`, `\"9.2.1\"`.",
+                    "type": "string"
+                },
+                "osType": {
+                    "description": "Required. The allowed OS type.",
+                    "enum": [
+                        "OS_UNSPECIFIED",
+                        "DESKTOP_MAC",
+                        "DESKTOP_WINDOWS",
+                        "DESKTOP_LINUX",
+                        "DESKTOP_CHROME_OS",
+                        "ANDROID",
+                        "IOS"
+                    ],
+                    "enumDescriptions": [
+                        "The operating system of the device is not specified or not known.",
+                        "A desktop Mac operating system.",
+                        "A desktop Windows operating system.",
+                        "A desktop Linux operating system.",
+                        "A desktop ChromeOS operating system.",
+                        "An Android operating system.",
+                        "An iOS operating system."
+                    ],
+                    "type": "string"
+                },
+                "requireVerifiedChromeOs": {
+                    "description": "Only allows requests from devices with a verified Chrome OS. Verifications includes requirements that the device is enterprise-managed, conformant to domain policies, and the caller has permission to call the API targeted by the request.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1ServicePerimeter": {
+            "description": "`ServicePerimeter` describes a set of Google Cloud resources which can freely import and export data amongst themselves, but not export outside of the `ServicePerimeter`. If a request with a source within this `ServicePerimeter` has a target outside of the `ServicePerimeter`, the request will be blocked. Otherwise the request is allowed. There are two types of Service Perimeter - Regular and Bridge. Regular Service Perimeters cannot overlap, a single Google Cloud project can only belong to a single regular Service Perimeter. Service Perimeter Bridges can contain only Google Cloud projects as members, a single Google Cloud project may belong to multiple Service Perimeter Bridges.",
+            "id": "GoogleIdentityAccesscontextmanagerV1ServicePerimeter",
+            "properties": {
+                "description": {
+                    "description": "Description of the `ServicePerimeter` and its use. Does not affect behavior.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Required. Resource name for the ServicePerimeter. The `short_name` component must begin with a letter and only include alphanumeric and '_'. Format: `accessPolicies/{policy_id}/servicePerimeters/{short_name}`",
+                    "type": "string"
+                },
+                "perimeterType": {
+                    "description": "Perimeter type indicator. A single project is allowed to be a member of single regular perimeter, but multiple service perimeter bridges. A project cannot be a included in a perimeter bridge without being included in regular perimeter. For perimeter bridges, the restricted service list as well as access level lists must be empty.",
+                    "enum": [
+                        "PERIMETER_TYPE_REGULAR",
+                        "PERIMETER_TYPE_BRIDGE"
+                    ],
+                    "enumDescriptions": [
+                        "Regular Perimeter.",
+                        "Perimeter Bridge."
+                    ],
+                    "type": "string"
+                },
+                "spec": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig",
+                    "description": "Proposed (or dry run) ServicePerimeter configuration. This configuration allows to specify and test ServicePerimeter configuration without enforcing actual access restrictions. Only allowed to be set when the \"use_explicit_dry_run_spec\" flag is set."
+                },
+                "status": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig",
+                    "description": "Current ServicePerimeter configuration. Specifies sets of resources, restricted services and access levels that determine perimeter content and boundaries."
+                },
+                "title": {
+                    "description": "Human readable title. Must be unique within the Policy.",
+                    "type": "string"
+                },
+                "useExplicitDryRunSpec": {
+                    "description": "Use explicit dry run spec flag. Ordinarily, a dry-run spec implicitly exists for all Service Perimeters, and that spec is identical to the status for those Service Perimeters. When this flag is set, it inhibits the generation of the implicit spec, thereby allowing the user to explicitly provide a configuration (\"spec\") to use in a dry-run version of the Service Perimeter. This allows the user to test changes to the enforced config (\"status\") without actually enforcing them. This testing is done through analyzing the differences between currently enforced and suggested restrictions. use_explicit_dry_run_spec must bet set to True if any of the fields in the spec are set to non-default values.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig": {
+            "description": "`ServicePerimeterConfig` specifies a set of Google Cloud resources that describe specific Service Perimeter configuration.",
+            "id": "GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig",
+            "properties": {
+                "accessLevels": {
+                    "description": "A list of `AccessLevel` resource names that allow resources within the `ServicePerimeter` to be accessed from the internet. `AccessLevels` listed must be in the same policy as this `ServicePerimeter`. Referencing a nonexistent `AccessLevel` is a syntax error. If no `AccessLevel` names are listed, resources within the perimeter can only be accessed via Google Cloud calls with request origins within the perimeter. Example: `\"accessPolicies/MY_POLICY/accessLevels/MY_LEVEL\"`. For Service Perimeter Bridge, must be empty.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "egressPolicies": {
+                    "description": "List of EgressPolicies to apply to the perimeter. A perimeter may have multiple EgressPolicies, each of which is evaluated separately. Access is granted if any EgressPolicy grants it. Must be empty for a perimeter bridge.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1EgressPolicy"
+                    },
+                    "type": "array"
+                },
+                "ingressPolicies": {
+                    "description": "List of IngressPolicies to apply to the perimeter. A perimeter may have multiple IngressPolicies, each of which is evaluated separately. Access is granted if any Ingress Policy grants it. Must be empty for a perimeter bridge.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1IngressPolicy"
+                    },
+                    "type": "array"
+                },
+                "resources": {
+                    "description": "A list of Google Cloud resources that are inside of the service perimeter. Currently only projects are allowed. Format: `projects/{project_number}`",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "restrictedServices": {
+                    "description": "Google Cloud services that are subject to the Service Perimeter restrictions. For example, if `storage.googleapis.com` is specified, access to the storage buckets inside the perimeter must meet the perimeter's access restrictions.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "vpcAccessibleServices": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1VpcAccessibleServices",
+                    "description": "Configuration for APIs allowed within Perimeter."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1VpcAccessibleServices": {
+            "description": "Specifies how APIs are allowed to communicate within the Service Perimeter.",
+            "id": "GoogleIdentityAccesscontextmanagerV1VpcAccessibleServices",
+            "properties": {
+                "allowedServices": {
+                    "description": "The list of APIs usable within the Service Perimeter. Must be empty unless 'enable_restriction' is True. You can specify a list of individual services, as well as include the 'RESTRICTED-SERVICES' value, which automatically includes all of the services protected by the perimeter.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "enableRestriction": {
+                    "description": "Whether to restrict API calls within the Service Perimeter to the list of APIs specified in 'allowed_services'.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "IamPolicySearchResult": {
+            "description": "The result for a IAM Policy search.",
+            "id": "IamPolicySearchResult",
+            "properties": {
+                "explanation": {
+                    "$ref": "Explanation",
+                    "description": "Explanation about the IAM policy search result. It contains additional information to explain why the search result matches the query."
+                },
+                "policy": {
+                    "$ref": "Policy",
+                    "description": "The IAM policy directly set on the given resource. Note that the original IAM policy can contain multiple bindings. This only contains the bindings that match the given query. For queries that don't contain a constrain on policies (e.g. an empty query), this contains all the bindings."
+                },
+                "project": {
+                    "description": "The project that the associated GCP resource belongs to, in the form of `projects/{project_number}`. If an IAM policy is set on a resource (like VM instance, Cloud Storage bucket), the project field will indicate the project that contains the resource. If an IAM policy is set on a folder or orgnization, the project field will be empty.",
+                    "type": "string"
+                },
+                "resource": {
+                    "description": "The [full resource name](https://cloud.google.com/apis/design/resource_names#full_resource_name) of the resource associated with this IAM policy.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Permissions": {
+            "description": "IAM permissions",
+            "id": "Permissions",
+            "properties": {
+                "permissions": {
+                    "description": "A list of permissions. A sample permission string: \"compute.disk.get\".",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Policy": {
+            "description": "An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { \"bindings\": [ { \"role\": \"roles/resourcemanager.organizationAdmin\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\" ] }, { \"role\": \"roles/resourcemanager.organizationViewer\", \"members\": [ \"user:eve@example.com\" ], \"condition\": { \"title\": \"expirable access\", \"description\": \"Does not grant access after Sep 2020\", \"expression\": \"request.time < timestamp('2020-10-01T00:00:00.000Z')\", } } ], \"etag\": \"BwWWja0YfJA=\", \"version\": 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).",
+            "id": "Policy",
+            "properties": {
+                "auditConfigs": {
+                    "description": "Specifies cloud audit logging configuration for this policy.",
+                    "items": {
+                        "$ref": "AuditConfig"
+                    },
+                    "type": "array"
+                },
+                "bindings": {
+                    "description": "Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.",
+                    "items": {
+                        "$ref": "Binding"
+                    },
+                    "type": "array"
+                },
+                "etag": {
+                    "description": "`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "version": {
+                    "description": "Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "SearchAllIamPoliciesResponse": {
+            "description": "Search all IAM policies response.",
+            "id": "SearchAllIamPoliciesResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "Set if there are more results than those appearing in this response; to get the next set of results, call this method again, using this value as the `page_token`.",
+                    "type": "string"
+                },
+                "results": {
+                    "description": "A list of IamPolicy that match the search query. Related information such as the associated resource is returned along with the policy.",
+                    "items": {
+                        "$ref": "IamPolicySearchResult"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "SearchAllResourcesResponse": {
+            "description": "Search all resources response.",
+            "id": "SearchAllResourcesResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "If there are more results than those appearing in this response, then `next_page_token` is included. To get the next set of results, call this method again using the value of `next_page_token` as `page_token`.",
+                    "type": "string"
+                },
+                "results": {
+                    "description": "A list of resource that match the search query.",
+                    "items": {
+                        "$ref": "StandardResourceMetadata"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "StandardResourceMetadata": {
+            "description": "The standard metadata of a cloud resource.",
+            "id": "StandardResourceMetadata",
+            "properties": {
+                "additionalAttributes": {
+                    "description": "Additional searchable attributes of this resource. Informational only. The exact set of attributes is subject to change. For example: project id, DNS name etc.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "assetType": {
+                    "description": "The type of this resource. For example: \"compute.googleapis.com/Disk\".",
+                    "type": "string"
+                },
+                "description": {
+                    "description": "One or more paragraphs of text description of this resource. Maximum length could be up to 1M bytes.",
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "The display name of this resource.",
+                    "type": "string"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Labels associated with this resource. See [Labelling and grouping GCP resources](https://cloud.google.com/blog/products/gcp/labelling-and-grouping-your-google-cloud-platform-resources) for more information.",
+                    "type": "object"
+                },
+                "location": {
+                    "description": "Location can be \"global\", regional like \"us-east1\", or zonal like \"us-west1-b\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The full resource name. For example: `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1`. See [Resource Names](https://cloud.google.com/apis/design/resource_names#full_resource_name) for more information.",
+                    "type": "string"
+                },
+                "networkTags": {
+                    "description": "Network tags associated with this resource. Like labels, network tags are a type of annotations used to group GCP resources. See [Labelling GCP resources](lhttps://cloud.google.com/blog/products/gcp/labelling-and-grouping-your-google-cloud-platform-resources) for more information.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "project": {
+                    "description": "The project that this resource belongs to, in the form of `projects/{project_number}`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        }
+    },
+    "servicePath": "",
+    "title": "Cloud Asset API",
+    "version": "v1p1beta1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/cloudasset.v1p4beta1.json b/googleapiclient/discovery_cache/documents/cloudasset.v1p4beta1.json
index 9fea21e..bb389b4 100644
--- a/googleapiclient/discovery_cache/documents/cloudasset.v1p4beta1.json
+++ b/googleapiclient/discovery_cache/documents/cloudasset.v1p4beta1.json
@@ -1,723 +1,1585 @@
 {
-  "fullyEncodeReservedExpansion": true,
-  "schemas": {
-    "GoogleCloudAssetV1p4beta1Edge": {
-      "description": "A directional edge.",
-      "type": "object",
-      "id": "GoogleCloudAssetV1p4beta1Edge",
-      "properties": {
-        "sourceNode": {
-          "type": "string",
-          "description": "The source node of the edge."
-        },
-        "targetNode": {
-          "description": "The target node of the edge.",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleCloudAssetV1p4beta1AnalysisState": {
-      "id": "GoogleCloudAssetV1p4beta1AnalysisState",
-      "type": "object",
-      "properties": {
-        "code": {
-          "enumDescriptions": [
-            "Not an error; returned on success HTTP Mapping: 200 OK",
-            "The operation was cancelled, typically by the caller. HTTP Mapping: 499 Client Closed Request",
-            "Unknown error. For example, this error may be returned when a `Status` value received from another address space belongs to an error space that is not known in this address space. Also errors raised by APIs that do not return enough error information may be converted to this error. HTTP Mapping: 500 Internal Server Error",
-            "The client specified an invalid argument. Note that this differs from `FAILED_PRECONDITION`. `INVALID_ARGUMENT` indicates arguments that are problematic regardless of the state of the system (e.g., a malformed file name). HTTP Mapping: 400 Bad Request",
-            "The deadline expired before the operation could complete. For operations that change the state of the system, this error may be returned even if the operation has completed successfully. For example, a successful response from a server could have been delayed long enough for the deadline to expire. HTTP Mapping: 504 Gateway Timeout",
-            "Some requested entity (e.g., file or directory) was not found. Note to server developers: if a request is denied for an entire class of users, such as gradual feature rollout or undocumented allowlist, `NOT_FOUND` may be used. If a request is denied for some users within a class of users, such as user-based access control, `PERMISSION_DENIED` must be used. HTTP Mapping: 404 Not Found",
-            "The entity that a client attempted to create (e.g., file or directory) already exists. HTTP Mapping: 409 Conflict",
-            "The caller does not have permission to execute the specified operation. `PERMISSION_DENIED` must not be used for rejections caused by exhausting some resource (use `RESOURCE_EXHAUSTED` instead for those errors). `PERMISSION_DENIED` must not be used if the caller can not be identified (use `UNAUTHENTICATED` instead for those errors). This error code does not imply the request is valid or the requested entity exists or satisfies other pre-conditions. HTTP Mapping: 403 Forbidden",
-            "The request does not have valid authentication credentials for the operation. HTTP Mapping: 401 Unauthorized",
-            "Some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system is out of space. HTTP Mapping: 429 Too Many Requests",
-            "The operation was rejected because the system is not in a state required for the operation's execution. For example, the directory to be deleted is non-empty, an rmdir operation is applied to a non-directory, etc. Service implementors can use the following guidelines to decide between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`: (a) Use `UNAVAILABLE` if the client can retry just the failing call. (b) Use `ABORTED` if the client should retry at a higher level (e.g., when a client-specified test-and-set fails, indicating the client should restart a read-modify-write sequence). (c) Use `FAILED_PRECONDITION` if the client should not retry until the system state has been explicitly fixed. E.g., if an \"rmdir\" fails because the directory is non-empty, `FAILED_PRECONDITION` should be returned since the client should not retry unless the files are deleted from the directory. HTTP Mapping: 400 Bad Request",
-            "The operation was aborted, typically due to a concurrency issue such as a sequencer check failure or transaction abort. See the guidelines above for deciding between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`. HTTP Mapping: 409 Conflict",
-            "The operation was attempted past the valid range. E.g., seeking or reading past end-of-file. Unlike `INVALID_ARGUMENT`, this error indicates a problem that may be fixed if the system state changes. For example, a 32-bit file system will generate `INVALID_ARGUMENT` if asked to read at an offset that is not in the range [0,2^32-1], but it will generate `OUT_OF_RANGE` if asked to read from an offset past the current file size. There is a fair bit of overlap between `FAILED_PRECONDITION` and `OUT_OF_RANGE`. We recommend using `OUT_OF_RANGE` (the more specific error) when it applies so that callers who are iterating through a space can easily look for an `OUT_OF_RANGE` error to detect when they are done. HTTP Mapping: 400 Bad Request",
-            "The operation is not implemented or is not supported/enabled in this service. HTTP Mapping: 501 Not Implemented",
-            "Internal errors. This means that some invariants expected by the underlying system have been broken. This error code is reserved for serious errors. HTTP Mapping: 500 Internal Server Error",
-            "The service is currently unavailable. This is most likely a transient condition, which can be corrected by retrying with a backoff. Note that it is not always safe to retry non-idempotent operations. See the guidelines above for deciding between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`. HTTP Mapping: 503 Service Unavailable",
-            "Unrecoverable data loss or corruption. HTTP Mapping: 500 Internal Server Error"
-          ],
-          "description": "The Google standard error code that best describes the state. For example: - OK means the analysis on this entity has been successfully finished; - PERMISSION_DENIED means an access denied error is encountered; - DEADLINE_EXCEEDED means the analysis on this entity hasn't been started in time;",
-          "type": "string",
-          "enum": [
-            "OK",
-            "CANCELLED",
-            "UNKNOWN",
-            "INVALID_ARGUMENT",
-            "DEADLINE_EXCEEDED",
-            "NOT_FOUND",
-            "ALREADY_EXISTS",
-            "PERMISSION_DENIED",
-            "UNAUTHENTICATED",
-            "RESOURCE_EXHAUSTED",
-            "FAILED_PRECONDITION",
-            "ABORTED",
-            "OUT_OF_RANGE",
-            "UNIMPLEMENTED",
-            "INTERNAL",
-            "UNAVAILABLE",
-            "DATA_LOSS"
-          ]
-        },
-        "cause": {
-          "description": "The human-readable description of the cause of failure.",
-          "type": "string"
-        }
-      },
-      "description": "Represents the detailed state of an entity under analysis, such as a resource, an identity or an access."
-    },
-    "IamPolicyAnalysisResult": {
-      "type": "object",
-      "description": "IAM Policy analysis result, consisting of one IAM policy binding and derived access control lists.",
-      "properties": {
-        "fullyExplored": {
-          "type": "boolean",
-          "description": "Represents whether all analyses on the iam_binding have successfully finished."
-        },
-        "identityList": {
-          "$ref": "GoogleCloudAssetV1p4beta1IdentityList",
-          "description": "The identity list derived from members of the iam_binding that match or potentially match identity selector specified in the request."
-        },
-        "attachedResourceFullName": {
-          "description": "The [full resource name](https://cloud.google.com/asset-inventory/docs/resource-name-format) of the resource to which the iam_binding policy attaches.",
-          "type": "string"
-        },
-        "accessControlLists": {
-          "items": {
-            "$ref": "GoogleCloudAssetV1p4beta1AccessControlList"
-          },
-          "description": "The access control lists derived from the iam_binding that match or potentially match resource and access selectors specified in the request.",
-          "type": "array"
-        },
-        "iamBinding": {
-          "description": "The Cloud IAM policy binding under analysis.",
-          "$ref": "Binding"
-        }
-      },
-      "id": "IamPolicyAnalysisResult"
-    },
-    "GoogleCloudAssetV1p4beta1Access": {
-      "type": "object",
-      "id": "GoogleCloudAssetV1p4beta1Access",
-      "description": "An IAM role or permission under analysis.",
-      "properties": {
-        "role": {
-          "description": "The role.",
-          "type": "string"
-        },
-        "analysisState": {
-          "description": "The analysis state of this access.",
-          "$ref": "GoogleCloudAssetV1p4beta1AnalysisState"
-        },
-        "permission": {
-          "description": "The permission.",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleCloudAssetV1p4beta1IdentityList": {
-      "type": "object",
-      "id": "GoogleCloudAssetV1p4beta1IdentityList",
-      "properties": {
-        "groupEdges": {
-          "description": "Group identity edges of the graph starting from the binding's group members to any node of the identities. The Edge.source_node contains a group, such as \"group:parent@google.com\". The Edge.target_node contains a member of the group, such as \"group:child@google.com\" or \"user:foo@google.com\". This field is present only if the output_group_edges option is enabled in request.",
-          "items": {
-            "$ref": "GoogleCloudAssetV1p4beta1Edge"
-          },
-          "type": "array"
-        },
-        "identities": {
-          "description": "Only the identities that match one of the following conditions will be presented: - The identity_selector, if it is specified in request; - Otherwise, identities reachable from the policy binding's members.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudAssetV1p4beta1Identity"
-          }
-        }
-      }
-    },
-    "IamPolicyAnalysisOutputConfig": {
-      "id": "IamPolicyAnalysisOutputConfig",
-      "type": "object",
-      "description": "Output configuration for export IAM policy analysis destination.",
-      "properties": {
-        "gcsDestination": {
-          "$ref": "GcsDestination",
-          "description": "Destination on Cloud Storage."
-        }
-      }
-    },
-    "IdentitySelector": {
-      "id": "IdentitySelector",
-      "description": "Specifies an identity for which to determine resource access, based on roles assigned either directly to them or to the groups they belong to, directly or indirectly.",
-      "type": "object",
-      "properties": {
-        "identity": {
-          "type": "string",
-          "description": "Required. The identity appear in the form of members in [IAM policy binding](https://cloud.google.com/iam/reference/rest/v1/Binding). The examples of supported forms are: \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\". Notice that wildcard characters (such as * and ?) are not supported. You must give a specific identity."
-        }
-      }
-    },
-    "AnalyzeIamPolicyResponse": {
-      "properties": {
-        "mainAnalysis": {
-          "$ref": "IamPolicyAnalysis",
-          "description": "The main analysis that matches the original request."
-        },
-        "fullyExplored": {
-          "type": "boolean",
-          "description": "Represents whether all entries in the main_analysis and service_account_impersonation_analysis have been fully explored to answer the query in the request."
-        },
-        "serviceAccountImpersonationAnalysis": {
-          "type": "array",
-          "description": "The service account impersonation analysis if AnalyzeIamPolicyRequest.analyze_service_account_impersonation is enabled.",
-          "items": {
-            "$ref": "IamPolicyAnalysis"
-          }
-        },
-        "nonCriticalErrors": {
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudAssetV1p4beta1AnalysisState"
-          },
-          "description": "A list of non-critical errors happened during the request handling to explain why `fully_explored` is false, or empty if no error happened."
-        }
-      },
-      "id": "AnalyzeIamPolicyResponse",
-      "description": "A response message for AssetService.AnalyzeIamPolicy.",
-      "type": "object"
-    },
-    "Options": {
-      "properties": {
-        "expandRoles": {
-          "type": "boolean",
-          "description": "Optional. If true, the access section of result will expand any roles appearing in IAM policy bindings to include their permissions. If access_selector is specified, the access section of the result will be determined by the selector, and this flag will have no effect. Default is false."
-        },
-        "expandResources": {
-          "description": "Optional. If true, the resource section of the result will expand any resource attached to an IAM policy to include resources lower in the resource hierarchy. For example, if the request analyzes for which resources user A has permission P, and the results include an IAM policy with P on a GCP folder, the results will also include resources in that folder with permission P. If resource_selector is specified, the resource section of the result will be determined by the selector, and this flag will have no effect. Default is false.",
-          "type": "boolean"
-        },
-        "expandGroups": {
-          "type": "boolean",
-          "description": "Optional. If true, the identities section of the result will expand any Google groups appearing in an IAM policy binding. If identity_selector is specified, the identity in the result will be determined by the selector, and this flag will have no effect. Default is false."
-        },
-        "outputGroupEdges": {
-          "type": "boolean",
-          "description": "Optional. If true, the result will output group identity edges, starting from the binding's group members, to any expanded identities. Default is false."
-        },
-        "analyzeServiceAccountImpersonation": {
-          "type": "boolean",
-          "description": "Optional. If true, the response will include access analysis from identities to resources via service account impersonation. This is a very expensive operation, because many derived queries will be executed. For example, if the request analyzes for which resources user A has permission P, and there's an IAM policy states user A has iam.serviceAccounts.getAccessToken permission to a service account SA, and there's another IAM policy states service account SA has permission P to a GCP folder F, then user A potentially has access to the GCP folder F. And those advanced analysis results will be included in AnalyzeIamPolicyResponse.service_account_impersonation_analysis. Another example, if the request analyzes for who has permission P to a GCP folder F, and there's an IAM policy states user A has iam.serviceAccounts.actAs permission to a service account SA, and there's another IAM policy states service account SA has permission P to the GCP folder F, then user A potentially has access to the GCP folder F. And those advanced analysis results will be included in AnalyzeIamPolicyResponse.service_account_impersonation_analysis. Default is false."
-        },
-        "outputResourceEdges": {
-          "description": "Optional. If true, the result will output resource edges, starting from the policy attached resource, to any expanded resources. Default is false.",
-          "type": "boolean"
-        }
-      },
-      "id": "Options",
-      "type": "object",
-      "description": "Contains request options."
-    },
-    "Operation": {
-      "description": "This resource represents a long-running operation that is the result of a network API call.",
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`."
-        },
-        "done": {
-          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
-          "type": "boolean"
-        },
-        "response": {
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
-          "type": "object"
-        },
-        "error": {
-          "$ref": "Status",
-          "description": "The error result of the operation in case of failure or cancellation."
-        },
-        "metadata": {
-          "type": "object",
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any."
-        }
-      },
-      "id": "Operation"
-    },
-    "GoogleCloudAssetV1p4beta1Resource": {
-      "id": "GoogleCloudAssetV1p4beta1Resource",
-      "type": "object",
-      "description": "A Google Cloud resource under analysis.",
-      "properties": {
-        "analysisState": {
-          "$ref": "GoogleCloudAssetV1p4beta1AnalysisState",
-          "description": "The analysis state of this resource."
-        },
-        "fullResourceName": {
-          "description": "The [full resource name](https://cloud.google.com/asset-inventory/docs/resource-name-format)",
-          "type": "string"
-        }
-      }
-    },
-    "IamPolicyAnalysisQuery": {
-      "id": "IamPolicyAnalysisQuery",
-      "type": "object",
-      "description": "IAM policy analysis query message.",
-      "properties": {
-        "accessSelector": {
-          "$ref": "AccessSelector",
-          "description": "Optional. Specifies roles or permissions for analysis. This is optional."
-        },
-        "identitySelector": {
-          "description": "Optional. Specifies an identity for analysis.",
-          "$ref": "IdentitySelector"
-        },
-        "parent": {
-          "description": "Required. The relative name of the root asset. Only resources and IAM policies within the parent will be analyzed. This can only be an organization number (such as \"organizations/123\"), a folder number (such as \"folders/123\"), a project ID (such as \"projects/my-project-id\"), or a project number (such as \"projects/12345\"). To know how to get organization id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id). To know how to get folder or project id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-folders#viewing_or_listing_folders_and_projects).",
-          "type": "string"
-        },
-        "resourceSelector": {
-          "description": "Optional. Specifies a resource for analysis.",
-          "$ref": "ResourceSelector"
-        }
-      }
-    },
-    "ResourceSelector": {
-      "id": "ResourceSelector",
-      "type": "object",
-      "properties": {
-        "fullResourceName": {
-          "type": "string",
-          "description": "Required. The [full resource name](https://cloud.google.com/asset-inventory/docs/resource-name-format) of a resource of [supported resource types](https://cloud.google.com/asset-inventory/docs/supported-asset-types#analyzable_asset_types)."
-        }
-      },
-      "description": "Specifies the resource to analyze for access policies, which may be set directly on the resource, or on ancestors such as organizations, folders or projects."
-    },
-    "Status": {
-      "properties": {
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
-          "type": "string"
-        },
-        "code": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The status code, which should be an enum value of google.rpc.Code."
-        },
-        "details": {
-          "items": {
-            "type": "object",
-            "additionalProperties": {
-              "type": "any",
-              "description": "Properties of the object. Contains field @type with type URL."
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
+                }
             }
-          },
-          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
-          "type": "array"
         }
-      },
-      "id": "Status",
-      "type": "object",
-      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors)."
     },
-    "GcsDestination": {
-      "type": "object",
-      "description": "A Cloud Storage location.",
-      "id": "GcsDestination",
-      "properties": {
-        "uri": {
-          "description": "Required. The uri of the Cloud Storage object. It's the same uri that is used by gsutil. For example: \"gs://bucket_name/object_name\". See [Quickstart: Using the gsutil tool] (https://cloud.google.com/storage/docs/quickstart-gsutil) for examples.",
-          "type": "string"
-        }
-      }
+    "basePath": "",
+    "baseUrl": "https://cloudasset.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Cloud Asset",
+    "description": "The cloud asset API manages the history and inventory of cloud resources.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/asset-inventory/docs/quickstart",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
     },
-    "GoogleCloudAssetV1p4beta1Identity": {
-      "description": "An identity under analysis.",
-      "type": "object",
-      "id": "GoogleCloudAssetV1p4beta1Identity",
-      "properties": {
-        "name": {
-          "description": "The identity name in any form of members appear in [IAM policy binding](https://cloud.google.com/iam/reference/rest/v1/Binding), such as: - user:foo@google.com - group:group1@google.com - serviceAccount:s1@prj1.iam.gserviceaccount.com - projectOwner:some_project_id - domain:google.com - allUsers - etc.",
-          "type": "string"
-        },
-        "analysisState": {
-          "description": "The analysis state of this identity.",
-          "$ref": "GoogleCloudAssetV1p4beta1AnalysisState"
-        }
-      }
-    },
-    "GoogleCloudAssetV1p4beta1AccessControlList": {
-      "id": "GoogleCloudAssetV1p4beta1AccessControlList",
-      "properties": {
-        "resources": {
-          "items": {
-            "$ref": "GoogleCloudAssetV1p4beta1Resource"
-          },
-          "description": "The resources that match one of the following conditions: - The resource_selector, if it is specified in request; - Otherwise, resources reachable from the policy attached resource.",
-          "type": "array"
-        },
-        "resourceEdges": {
-          "type": "array",
-          "description": "Resource edges of the graph starting from the policy attached resource to any descendant resources. The Edge.source_node contains the full resource name of a parent resource and Edge.target_node contains the full resource name of a child resource. This field is present only if the output_resource_edges option is enabled in request.",
-          "items": {
-            "$ref": "GoogleCloudAssetV1p4beta1Edge"
-          }
-        },
-        "accesses": {
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudAssetV1p4beta1Access"
-          },
-          "description": "The accesses that match one of the following conditions: - The access_selector, if it is specified in request; - Otherwise, access specifiers reachable from the policy binding's role."
-        }
-      },
-      "type": "object",
-      "description": "An access control list, derived from the above IAM policy binding, which contains a set of resources and accesses. May include one item from each set to compose an access control entry. NOTICE that there could be multiple access control lists for one IAM policy binding. The access control lists are created based on resource and access combinations. For example, assume we have the following cases in one IAM policy binding: - Permission P1 and P2 apply to resource R1 and R2; - Permission P3 applies to resource R2 and R3; This will result in the following access control lists: - AccessControlList 1: [R1, R2], [P1, P2] - AccessControlList 2: [R2, R3], [P3]"
-    },
-    "ExportIamPolicyAnalysisRequest": {
-      "type": "object",
-      "properties": {
-        "outputConfig": {
-          "description": "Required. Output configuration indicating where the results will be output to.",
-          "$ref": "IamPolicyAnalysisOutputConfig"
-        },
-        "analysisQuery": {
-          "$ref": "IamPolicyAnalysisQuery",
-          "description": "Required. The request query."
-        },
-        "options": {
-          "description": "Optional. The request options.",
-          "$ref": "Options"
-        }
-      },
-      "id": "ExportIamPolicyAnalysisRequest",
-      "description": "A request message for AssetService.ExportIamPolicyAnalysis."
-    },
-    "IamPolicyAnalysis": {
-      "properties": {
-        "analysisQuery": {
-          "description": "The analysis query.",
-          "$ref": "IamPolicyAnalysisQuery"
-        },
-        "analysisResults": {
-          "items": {
-            "$ref": "IamPolicyAnalysisResult"
-          },
-          "description": "A list of IamPolicyAnalysisResult that matches the analysis query, or empty if no result is found.",
-          "type": "array"
-        },
-        "fullyExplored": {
-          "description": "Represents whether all entries in the analysis_results have been fully explored to answer the query.",
-          "type": "boolean"
-        }
-      },
-      "id": "IamPolicyAnalysis",
-      "type": "object",
-      "description": "An analysis message to group the query and results."
-    },
-    "AccessSelector": {
-      "id": "AccessSelector",
-      "properties": {
-        "roles": {
-          "type": "array",
-          "description": "Optional. The roles to appear in result.",
-          "items": {
+    "id": "cloudasset:v1p4beta1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://cloudasset.mtls.googleapis.com/",
+    "name": "cloudasset",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
             "type": "string"
-          }
         },
-        "permissions": {
-          "items": {
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
             "type": "string"
-          },
-          "description": "Optional. The permissions to appear in result.",
-          "type": "array"
-        }
-      },
-      "description": "Specifies roles and/or permissions to analyze, to determine both the identities possessing them and the resources they control. If multiple values are specified, results will include identities and resources matching any of them. The total number of roles and permissions should be equal or less than 10.",
-      "type": "object"
-    },
-    "Binding": {
-      "properties": {
-        "members": {
-          "type": "array",
-          "description": "Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. ",
-          "items": {
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
             "type": "string"
-          }
         },
-        "role": {
-          "description": "Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.",
-          "type": "string"
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
         },
-        "condition": {
-          "description": "The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
-          "$ref": "Expr"
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      },
-      "id": "Binding",
-      "type": "object",
-      "description": "Associates `members` with a `role`."
     },
-    "Expr": {
-      "id": "Expr",
-      "type": "object",
-      "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() \u003c 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.",
-      "properties": {
-        "description": {
-          "description": "Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.",
-          "type": "string"
-        },
-        "location": {
-          "type": "string",
-          "description": "Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file."
-        },
-        "title": {
-          "type": "string",
-          "description": "Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression."
-        },
-        "expression": {
-          "type": "string",
-          "description": "Textual representation of an expression in Common Expression Language syntax."
-        }
-      }
-    }
-  },
-  "documentationLink": "https://cloud.google.com/asset-inventory/docs/quickstart",
-  "version": "v1p4beta1",
-  "baseUrl": "https://cloudasset.googleapis.com/",
-  "servicePath": "",
-  "version_module": true,
-  "basePath": "",
-  "ownerDomain": "google.com",
-  "canonicalName": "Cloud Asset",
-  "title": "Cloud Asset API",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "discoveryVersion": "v1",
-  "batchPath": "batch",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "parameters": {
-    "upload_protocol": {
-      "location": "query",
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "key": {
-      "type": "string",
-      "location": "query",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token."
-    },
-    "$.xgafv": {
-      "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ]
-    },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "type": "string"
-    },
-    "alt": {
-      "location": "query",
-      "type": "string",
-      "description": "Data format for response.",
-      "default": "json",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ]
-    },
-    "access_token": {
-      "location": "query",
-      "description": "OAuth access token.",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "default": "true",
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean"
-    },
-    "quotaUser": {
-      "location": "query",
-      "type": "string",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters."
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    }
-  },
-  "ownerName": "Google",
-  "rootUrl": "https://cloudasset.googleapis.com/",
-  "description": "The cloud asset API manages the history and inventory of cloud resources.",
-  "revision": "20201106",
-  "mtlsRootUrl": "https://cloudasset.mtls.googleapis.com/",
-  "kind": "discovery#restDescription",
-  "id": "cloudasset:v1p4beta1",
-  "protocol": "rest",
-  "resources": {
-    "v1p4beta1": {
-      "methods": {
-        "exportIamPolicyAnalysis": {
-          "path": "v1p4beta1/{+parent}:exportIamPolicyAnalysis",
-          "response": {
-            "$ref": "Operation"
-          },
-          "parameterOrder": [
-            "parent"
-          ],
-          "flatPath": "v1p4beta1/{v1p4beta1Id}/{v1p4beta1Id1}:exportIamPolicyAnalysis",
-          "id": "cloudasset.exportIamPolicyAnalysis",
-          "description": "Exports the answers of which identities have what accesses on which resources to a Google Cloud Storage destination. The output format is the JSON format that represents a AnalyzeIamPolicyResponse in the JSON format. This method implements the google.longrunning.Operation, which allows you to keep track of the export. We recommend intervals of at least 2 seconds with exponential retry to poll the export operation result. The metadata contains the request to help callers to map responses to requests.",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "request": {
-            "$ref": "ExportIamPolicyAnalysisRequest"
-          },
-          "httpMethod": "POST",
-          "parameters": {
-            "parent": {
-              "type": "string",
-              "required": true,
-              "description": "Required. The relative name of the root asset. Only resources and IAM policies within the parent will be analyzed. This can only be an organization number (such as \"organizations/123\"), a folder number (such as \"folders/123\"), a project ID (such as \"projects/my-project-id\"), or a project number (such as \"projects/12345\"). To know how to get organization id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id). To know how to get folder or project id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-folders#viewing_or_listing_folders_and_projects).",
-              "pattern": "^[^/]+/[^/]+$",
-              "location": "path"
+    "protocol": "rest",
+    "resources": {
+        "v1p4beta1": {
+            "methods": {
+                "analyzeIamPolicy": {
+                    "description": "Analyzes IAM policies to answer which identities have what accesses on which resources.",
+                    "flatPath": "v1p4beta1/{v1p4beta1Id}/{v1p4beta1Id1}:analyzeIamPolicy",
+                    "httpMethod": "GET",
+                    "id": "cloudasset.analyzeIamPolicy",
+                    "parameterOrder": [
+                        "parent"
+                    ],
+                    "parameters": {
+                        "analysisQuery.accessSelector.permissions": {
+                            "description": "Optional. The permissions to appear in result.",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "analysisQuery.accessSelector.roles": {
+                            "description": "Optional. The roles to appear in result.",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "analysisQuery.identitySelector.identity": {
+                            "description": "Required. The identity appear in the form of members in [IAM policy binding](https://cloud.google.com/iam/reference/rest/v1/Binding). The examples of supported forms are: \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\". Notice that wildcard characters (such as * and ?) are not supported. You must give a specific identity.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "analysisQuery.resourceSelector.fullResourceName": {
+                            "description": "Required. The [full resource name](https://cloud.google.com/asset-inventory/docs/resource-name-format) of a resource of [supported resource types](https://cloud.google.com/asset-inventory/docs/supported-asset-types#analyzable_asset_types).",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "options.analyzeServiceAccountImpersonation": {
+                            "description": "Optional. If true, the response will include access analysis from identities to resources via service account impersonation. This is a very expensive operation, because many derived queries will be executed. We highly recommend you use AssetService.ExportIamPolicyAnalysis rpc instead. For example, if the request analyzes for which resources user A has permission P, and there's an IAM policy states user A has iam.serviceAccounts.getAccessToken permission to a service account SA, and there's another IAM policy states service account SA has permission P to a GCP folder F, then user A potentially has access to the GCP folder F. And those advanced analysis results will be included in AnalyzeIamPolicyResponse.service_account_impersonation_analysis. Another example, if the request analyzes for who has permission P to a GCP folder F, and there's an IAM policy states user A has iam.serviceAccounts.actAs permission to a service account SA, and there's another IAM policy states service account SA has permission P to the GCP folder F, then user A potentially has access to the GCP folder F. And those advanced analysis results will be included in AnalyzeIamPolicyResponse.service_account_impersonation_analysis. Default is false.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "options.executionTimeout": {
+                            "description": "Optional. Amount of time executable has to complete. See JSON representation of [Duration](https://developers.google.com/protocol-buffers/docs/proto3#json). If this field is set with a value less than the RPC deadline, and the execution of your query hasn't finished in the specified execution timeout, you will get a response with partial result. Otherwise, your query's execution will continue until the RPC deadline. If it's not finished until then, you will get a DEADLINE_EXCEEDED error. Default is empty.",
+                            "format": "google-duration",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "options.expandGroups": {
+                            "description": "Optional. If true, the identities section of the result will expand any Google groups appearing in an IAM policy binding. If identity_selector is specified, the identity in the result will be determined by the selector, and this flag will have no effect. Default is false.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "options.expandResources": {
+                            "description": "Optional. If true, the resource section of the result will expand any resource attached to an IAM policy to include resources lower in the resource hierarchy. For example, if the request analyzes for which resources user A has permission P, and the results include an IAM policy with P on a GCP folder, the results will also include resources in that folder with permission P. If resource_selector is specified, the resource section of the result will be determined by the selector, and this flag will have no effect. Default is false.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "options.expandRoles": {
+                            "description": "Optional. If true, the access section of result will expand any roles appearing in IAM policy bindings to include their permissions. If access_selector is specified, the access section of the result will be determined by the selector, and this flag will have no effect. Default is false.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "options.outputGroupEdges": {
+                            "description": "Optional. If true, the result will output group identity edges, starting from the binding's group members, to any expanded identities. Default is false.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "options.outputResourceEdges": {
+                            "description": "Optional. If true, the result will output resource edges, starting from the policy attached resource, to any expanded resources. Default is false.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "parent": {
+                            "description": "Required. The relative name of the root asset. Only resources and IAM policies within the parent will be analyzed. This can only be an organization number (such as \"organizations/123\"), a folder number (such as \"folders/123\"), a project ID (such as \"projects/my-project-id\"), or a project number (such as \"projects/12345\"). To know how to get organization id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id). To know how to get folder or project id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-folders#viewing_or_listing_folders_and_projects).",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1p4beta1/{+parent}:analyzeIamPolicy",
+                    "response": {
+                        "$ref": "AnalyzeIamPolicyResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                    ]
+                },
+                "exportIamPolicyAnalysis": {
+                    "description": "Exports the answers of which identities have what accesses on which resources to a Google Cloud Storage destination. The output format is the JSON format that represents a AnalyzeIamPolicyResponse in the JSON format. This method implements the google.longrunning.Operation, which allows you to keep track of the export. We recommend intervals of at least 2 seconds with exponential retry to poll the export operation result. The metadata contains the request to help callers to map responses to requests.",
+                    "flatPath": "v1p4beta1/{v1p4beta1Id}/{v1p4beta1Id1}:exportIamPolicyAnalysis",
+                    "httpMethod": "POST",
+                    "id": "cloudasset.exportIamPolicyAnalysis",
+                    "parameterOrder": [
+                        "parent"
+                    ],
+                    "parameters": {
+                        "parent": {
+                            "description": "Required. The relative name of the root asset. Only resources and IAM policies within the parent will be analyzed. This can only be an organization number (such as \"organizations/123\"), a folder number (such as \"folders/123\"), a project ID (such as \"projects/my-project-id\"), or a project number (such as \"projects/12345\"). To know how to get organization id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id). To know how to get folder or project id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-folders#viewing_or_listing_folders_and_projects).",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1p4beta1/{+parent}:exportIamPolicyAnalysis",
+                    "request": {
+                        "$ref": "ExportIamPolicyAnalysisRequest"
+                    },
+                    "response": {
+                        "$ref": "Operation"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                    ]
+                }
             }
-          }
-        },
-        "analyzeIamPolicy": {
-          "flatPath": "v1p4beta1/{v1p4beta1Id}/{v1p4beta1Id1}:analyzeIamPolicy",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "description": "Analyzes IAM policies to answer which identities have what accesses on which resources.",
-          "response": {
-            "$ref": "AnalyzeIamPolicyResponse"
-          },
-          "path": "v1p4beta1/{+parent}:analyzeIamPolicy",
-          "parameterOrder": [
-            "parent"
-          ],
-          "httpMethod": "GET",
-          "parameters": {
-            "analysisQuery.accessSelector.permissions": {
-              "repeated": true,
-              "description": "Optional. The permissions to appear in result.",
-              "type": "string",
-              "location": "query"
-            },
-            "options.expandRoles": {
-              "description": "Optional. If true, the access section of result will expand any roles appearing in IAM policy bindings to include their permissions. If access_selector is specified, the access section of the result will be determined by the selector, and this flag will have no effect. Default is false.",
-              "type": "boolean",
-              "location": "query"
-            },
-            "analysisQuery.identitySelector.identity": {
-              "type": "string",
-              "description": "Required. The identity appear in the form of members in [IAM policy binding](https://cloud.google.com/iam/reference/rest/v1/Binding). The examples of supported forms are: \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\". Notice that wildcard characters (such as * and ?) are not supported. You must give a specific identity.",
-              "location": "query"
-            },
-            "options.expandGroups": {
-              "location": "query",
-              "description": "Optional. If true, the identities section of the result will expand any Google groups appearing in an IAM policy binding. If identity_selector is specified, the identity in the result will be determined by the selector, and this flag will have no effect. Default is false.",
-              "type": "boolean"
-            },
-            "analysisQuery.resourceSelector.fullResourceName": {
-              "description": "Required. The [full resource name](https://cloud.google.com/asset-inventory/docs/resource-name-format) of a resource of [supported resource types](https://cloud.google.com/asset-inventory/docs/supported-asset-types#analyzable_asset_types).",
-              "type": "string",
-              "location": "query"
-            },
-            "analysisQuery.accessSelector.roles": {
-              "description": "Optional. The roles to appear in result.",
-              "type": "string",
-              "location": "query",
-              "repeated": true
-            },
-            "options.outputGroupEdges": {
-              "description": "Optional. If true, the result will output group identity edges, starting from the binding's group members, to any expanded identities. Default is false.",
-              "type": "boolean",
-              "location": "query"
-            },
-            "options.expandResources": {
-              "description": "Optional. If true, the resource section of the result will expand any resource attached to an IAM policy to include resources lower in the resource hierarchy. For example, if the request analyzes for which resources user A has permission P, and the results include an IAM policy with P on a GCP folder, the results will also include resources in that folder with permission P. If resource_selector is specified, the resource section of the result will be determined by the selector, and this flag will have no effect. Default is false.",
-              "type": "boolean",
-              "location": "query"
-            },
-            "parent": {
-              "required": true,
-              "pattern": "^[^/]+/[^/]+$",
-              "description": "Required. The relative name of the root asset. Only resources and IAM policies within the parent will be analyzed. This can only be an organization number (such as \"organizations/123\"), a folder number (such as \"folders/123\"), a project ID (such as \"projects/my-project-id\"), or a project number (such as \"projects/12345\"). To know how to get organization id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id). To know how to get folder or project id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-folders#viewing_or_listing_folders_and_projects).",
-              "type": "string",
-              "location": "path"
-            },
-            "options.analyzeServiceAccountImpersonation": {
-              "description": "Optional. If true, the response will include access analysis from identities to resources via service account impersonation. This is a very expensive operation, because many derived queries will be executed. We highly recommend you use AssetService.ExportIamPolicyAnalysis rpc instead. For example, if the request analyzes for which resources user A has permission P, and there's an IAM policy states user A has iam.serviceAccounts.getAccessToken permission to a service account SA, and there's another IAM policy states service account SA has permission P to a GCP folder F, then user A potentially has access to the GCP folder F. And those advanced analysis results will be included in AnalyzeIamPolicyResponse.service_account_impersonation_analysis. Another example, if the request analyzes for who has permission P to a GCP folder F, and there's an IAM policy states user A has iam.serviceAccounts.actAs permission to a service account SA, and there's another IAM policy states service account SA has permission P to the GCP folder F, then user A potentially has access to the GCP folder F. And those advanced analysis results will be included in AnalyzeIamPolicyResponse.service_account_impersonation_analysis. Default is false.",
-              "type": "boolean",
-              "location": "query"
-            },
-            "options.outputResourceEdges": {
-              "description": "Optional. If true, the result will output resource edges, starting from the policy attached resource, to any expanded resources. Default is false.",
-              "location": "query",
-              "type": "boolean"
-            },
-            "options.executionTimeout": {
-              "location": "query",
-              "description": "Optional. Amount of time executable has to complete. See JSON representation of [Duration](https://developers.google.com/protocol-buffers/docs/proto3#json). If this field is set with a value less than the RPC deadline, and the execution of your query hasn't finished in the specified execution timeout, you will get a response with partial result. Otherwise, your query's execution will continue until the RPC deadline. If it's not finished until then, you will get a DEADLINE_EXCEEDED error. Default is empty.",
-              "type": "string",
-              "format": "google-duration"
-            }
-          },
-          "id": "cloudasset.analyzeIamPolicy"
         }
-      }
-    }
-  },
-  "name": "cloudasset"
-}
+    },
+    "revision": "20210226",
+    "rootUrl": "https://cloudasset.googleapis.com/",
+    "schemas": {
+        "AccessSelector": {
+            "description": "Specifies roles and/or permissions to analyze, to determine both the identities possessing them and the resources they control. If multiple values are specified, results will include identities and resources matching any of them. The total number of roles and permissions should be equal or less than 10.",
+            "id": "AccessSelector",
+            "properties": {
+                "permissions": {
+                    "description": "Optional. The permissions to appear in result.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "roles": {
+                    "description": "Optional. The roles to appear in result.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "AnalyzeIamPolicyResponse": {
+            "description": "A response message for AssetService.AnalyzeIamPolicy.",
+            "id": "AnalyzeIamPolicyResponse",
+            "properties": {
+                "fullyExplored": {
+                    "description": "Represents whether all entries in the main_analysis and service_account_impersonation_analysis have been fully explored to answer the query in the request.",
+                    "type": "boolean"
+                },
+                "mainAnalysis": {
+                    "$ref": "IamPolicyAnalysis",
+                    "description": "The main analysis that matches the original request."
+                },
+                "nonCriticalErrors": {
+                    "description": "A list of non-critical errors happened during the request handling to explain why `fully_explored` is false, or empty if no error happened.",
+                    "items": {
+                        "$ref": "GoogleCloudAssetV1p4beta1AnalysisState"
+                    },
+                    "type": "array"
+                },
+                "serviceAccountImpersonationAnalysis": {
+                    "description": "The service account impersonation analysis if AnalyzeIamPolicyRequest.analyze_service_account_impersonation is enabled.",
+                    "items": {
+                        "$ref": "IamPolicyAnalysis"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "AuditConfig": {
+            "description": "Specifies the audit configuration for a service. The configuration determines which permission types are logged, and what identities, if any, are exempted from logging. An AuditConfig must have one or more AuditLogConfigs. If there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is used for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each AuditLogConfig are exempted. Example Policy with multiple AuditConfigs: { \"audit_configs\": [ { \"service\": \"allServices\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" }, { \"log_type\": \"ADMIN_READ\" } ] }, { \"service\": \"sampleservice.googleapis.com\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\" }, { \"log_type\": \"DATA_WRITE\", \"exempted_members\": [ \"user:aliya@example.com\" ] } ] } ] } For sampleservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ logging. It also exempts jose@example.com from DATA_READ logging, and aliya@example.com from DATA_WRITE logging.",
+            "id": "AuditConfig",
+            "properties": {
+                "auditLogConfigs": {
+                    "description": "The configuration for logging of each type of permission.",
+                    "items": {
+                        "$ref": "AuditLogConfig"
+                    },
+                    "type": "array"
+                },
+                "service": {
+                    "description": "Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices` is a special value that covers all services.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AuditLogConfig": {
+            "description": "Provides the configuration for logging a type of permissions. Example: { \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" } ] } This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting jose@example.com from DATA_READ logging.",
+            "id": "AuditLogConfig",
+            "properties": {
+                "exemptedMembers": {
+                    "description": "Specifies the identities that do not cause logging for this type of permission. Follows the same format of Binding.members.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "logType": {
+                    "description": "The log type that this config enables.",
+                    "enum": [
+                        "LOG_TYPE_UNSPECIFIED",
+                        "ADMIN_READ",
+                        "DATA_WRITE",
+                        "DATA_READ"
+                    ],
+                    "enumDescriptions": [
+                        "Default case. Should never be this.",
+                        "Admin reads. Example: CloudIAM getIamPolicy",
+                        "Data writes. Example: CloudSQL Users create",
+                        "Data reads. Example: CloudSQL Users list"
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Binding": {
+            "description": "Associates `members` with a `role`.",
+            "id": "Binding",
+            "properties": {
+                "condition": {
+                    "$ref": "Expr",
+                    "description": "The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)."
+                },
+                "members": {
+                    "description": "Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. ",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "role": {
+                    "description": "Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ExportIamPolicyAnalysisRequest": {
+            "description": "A request message for AssetService.ExportIamPolicyAnalysis.",
+            "id": "ExportIamPolicyAnalysisRequest",
+            "properties": {
+                "analysisQuery": {
+                    "$ref": "IamPolicyAnalysisQuery",
+                    "description": "Required. The request query."
+                },
+                "options": {
+                    "$ref": "Options",
+                    "description": "Optional. The request options."
+                },
+                "outputConfig": {
+                    "$ref": "IamPolicyAnalysisOutputConfig",
+                    "description": "Required. Output configuration indicating where the results will be output to."
+                }
+            },
+            "type": "object"
+        },
+        "Expr": {
+            "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.",
+            "id": "Expr",
+            "properties": {
+                "description": {
+                    "description": "Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.",
+                    "type": "string"
+                },
+                "expression": {
+                    "description": "Textual representation of an expression in Common Expression Language syntax.",
+                    "type": "string"
+                },
+                "location": {
+                    "description": "Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GcsDestination": {
+            "description": "A Cloud Storage location.",
+            "id": "GcsDestination",
+            "properties": {
+                "uri": {
+                    "description": "Required. The uri of the Cloud Storage object. It's the same uri that is used by gsutil. For example: \"gs://bucket_name/object_name\". See [Quickstart: Using the gsutil tool] (https://cloud.google.com/storage/docs/quickstart-gsutil) for examples.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p4beta1Access": {
+            "description": "An IAM role or permission under analysis.",
+            "id": "GoogleCloudAssetV1p4beta1Access",
+            "properties": {
+                "analysisState": {
+                    "$ref": "GoogleCloudAssetV1p4beta1AnalysisState",
+                    "description": "The analysis state of this access."
+                },
+                "permission": {
+                    "description": "The permission.",
+                    "type": "string"
+                },
+                "role": {
+                    "description": "The role.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p4beta1AccessControlList": {
+            "description": "An access control list, derived from the above IAM policy binding, which contains a set of resources and accesses. May include one item from each set to compose an access control entry. NOTICE that there could be multiple access control lists for one IAM policy binding. The access control lists are created based on resource and access combinations. For example, assume we have the following cases in one IAM policy binding: - Permission P1 and P2 apply to resource R1 and R2; - Permission P3 applies to resource R2 and R3; This will result in the following access control lists: - AccessControlList 1: [R1, R2], [P1, P2] - AccessControlList 2: [R2, R3], [P3]",
+            "id": "GoogleCloudAssetV1p4beta1AccessControlList",
+            "properties": {
+                "accesses": {
+                    "description": "The accesses that match one of the following conditions: - The access_selector, if it is specified in request; - Otherwise, access specifiers reachable from the policy binding's role.",
+                    "items": {
+                        "$ref": "GoogleCloudAssetV1p4beta1Access"
+                    },
+                    "type": "array"
+                },
+                "resourceEdges": {
+                    "description": "Resource edges of the graph starting from the policy attached resource to any descendant resources. The Edge.source_node contains the full resource name of a parent resource and Edge.target_node contains the full resource name of a child resource. This field is present only if the output_resource_edges option is enabled in request.",
+                    "items": {
+                        "$ref": "GoogleCloudAssetV1p4beta1Edge"
+                    },
+                    "type": "array"
+                },
+                "resources": {
+                    "description": "The resources that match one of the following conditions: - The resource_selector, if it is specified in request; - Otherwise, resources reachable from the policy attached resource.",
+                    "items": {
+                        "$ref": "GoogleCloudAssetV1p4beta1Resource"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p4beta1AnalysisState": {
+            "description": "Represents the detailed state of an entity under analysis, such as a resource, an identity or an access.",
+            "id": "GoogleCloudAssetV1p4beta1AnalysisState",
+            "properties": {
+                "cause": {
+                    "description": "The human-readable description of the cause of failure.",
+                    "type": "string"
+                },
+                "code": {
+                    "description": "The Google standard error code that best describes the state. For example: - OK means the analysis on this entity has been successfully finished; - PERMISSION_DENIED means an access denied error is encountered; - DEADLINE_EXCEEDED means the analysis on this entity hasn't been started in time;",
+                    "enum": [
+                        "OK",
+                        "CANCELLED",
+                        "UNKNOWN",
+                        "INVALID_ARGUMENT",
+                        "DEADLINE_EXCEEDED",
+                        "NOT_FOUND",
+                        "ALREADY_EXISTS",
+                        "PERMISSION_DENIED",
+                        "UNAUTHENTICATED",
+                        "RESOURCE_EXHAUSTED",
+                        "FAILED_PRECONDITION",
+                        "ABORTED",
+                        "OUT_OF_RANGE",
+                        "UNIMPLEMENTED",
+                        "INTERNAL",
+                        "UNAVAILABLE",
+                        "DATA_LOSS"
+                    ],
+                    "enumDescriptions": [
+                        "Not an error; returned on success HTTP Mapping: 200 OK",
+                        "The operation was cancelled, typically by the caller. HTTP Mapping: 499 Client Closed Request",
+                        "Unknown error. For example, this error may be returned when a `Status` value received from another address space belongs to an error space that is not known in this address space. Also errors raised by APIs that do not return enough error information may be converted to this error. HTTP Mapping: 500 Internal Server Error",
+                        "The client specified an invalid argument. Note that this differs from `FAILED_PRECONDITION`. `INVALID_ARGUMENT` indicates arguments that are problematic regardless of the state of the system (e.g., a malformed file name). HTTP Mapping: 400 Bad Request",
+                        "The deadline expired before the operation could complete. For operations that change the state of the system, this error may be returned even if the operation has completed successfully. For example, a successful response from a server could have been delayed long enough for the deadline to expire. HTTP Mapping: 504 Gateway Timeout",
+                        "Some requested entity (e.g., file or directory) was not found. Note to server developers: if a request is denied for an entire class of users, such as gradual feature rollout or undocumented allowlist, `NOT_FOUND` may be used. If a request is denied for some users within a class of users, such as user-based access control, `PERMISSION_DENIED` must be used. HTTP Mapping: 404 Not Found",
+                        "The entity that a client attempted to create (e.g., file or directory) already exists. HTTP Mapping: 409 Conflict",
+                        "The caller does not have permission to execute the specified operation. `PERMISSION_DENIED` must not be used for rejections caused by exhausting some resource (use `RESOURCE_EXHAUSTED` instead for those errors). `PERMISSION_DENIED` must not be used if the caller can not be identified (use `UNAUTHENTICATED` instead for those errors). This error code does not imply the request is valid or the requested entity exists or satisfies other pre-conditions. HTTP Mapping: 403 Forbidden",
+                        "The request does not have valid authentication credentials for the operation. HTTP Mapping: 401 Unauthorized",
+                        "Some resource has been exhausted, perhaps a per-user quota, or perhaps the entire file system is out of space. HTTP Mapping: 429 Too Many Requests",
+                        "The operation was rejected because the system is not in a state required for the operation's execution. For example, the directory to be deleted is non-empty, an rmdir operation is applied to a non-directory, etc. Service implementors can use the following guidelines to decide between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`: (a) Use `UNAVAILABLE` if the client can retry just the failing call. (b) Use `ABORTED` if the client should retry at a higher level (e.g., when a client-specified test-and-set fails, indicating the client should restart a read-modify-write sequence). (c) Use `FAILED_PRECONDITION` if the client should not retry until the system state has been explicitly fixed. E.g., if an \"rmdir\" fails because the directory is non-empty, `FAILED_PRECONDITION` should be returned since the client should not retry unless the files are deleted from the directory. HTTP Mapping: 400 Bad Request",
+                        "The operation was aborted, typically due to a concurrency issue such as a sequencer check failure or transaction abort. See the guidelines above for deciding between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`. HTTP Mapping: 409 Conflict",
+                        "The operation was attempted past the valid range. E.g., seeking or reading past end-of-file. Unlike `INVALID_ARGUMENT`, this error indicates a problem that may be fixed if the system state changes. For example, a 32-bit file system will generate `INVALID_ARGUMENT` if asked to read at an offset that is not in the range [0,2^32-1], but it will generate `OUT_OF_RANGE` if asked to read from an offset past the current file size. There is a fair bit of overlap between `FAILED_PRECONDITION` and `OUT_OF_RANGE`. We recommend using `OUT_OF_RANGE` (the more specific error) when it applies so that callers who are iterating through a space can easily look for an `OUT_OF_RANGE` error to detect when they are done. HTTP Mapping: 400 Bad Request",
+                        "The operation is not implemented or is not supported/enabled in this service. HTTP Mapping: 501 Not Implemented",
+                        "Internal errors. This means that some invariants expected by the underlying system have been broken. This error code is reserved for serious errors. HTTP Mapping: 500 Internal Server Error",
+                        "The service is currently unavailable. This is most likely a transient condition, which can be corrected by retrying with a backoff. Note that it is not always safe to retry non-idempotent operations. See the guidelines above for deciding between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`. HTTP Mapping: 503 Service Unavailable",
+                        "Unrecoverable data loss or corruption. HTTP Mapping: 500 Internal Server Error"
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p4beta1Edge": {
+            "description": "A directional edge.",
+            "id": "GoogleCloudAssetV1p4beta1Edge",
+            "properties": {
+                "sourceNode": {
+                    "description": "The source node of the edge.",
+                    "type": "string"
+                },
+                "targetNode": {
+                    "description": "The target node of the edge.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p4beta1Identity": {
+            "description": "An identity under analysis.",
+            "id": "GoogleCloudAssetV1p4beta1Identity",
+            "properties": {
+                "analysisState": {
+                    "$ref": "GoogleCloudAssetV1p4beta1AnalysisState",
+                    "description": "The analysis state of this identity."
+                },
+                "name": {
+                    "description": "The identity name in any form of members appear in [IAM policy binding](https://cloud.google.com/iam/reference/rest/v1/Binding), such as: - user:foo@google.com - group:group1@google.com - serviceAccount:s1@prj1.iam.gserviceaccount.com - projectOwner:some_project_id - domain:google.com - allUsers - etc.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p4beta1IdentityList": {
+            "id": "GoogleCloudAssetV1p4beta1IdentityList",
+            "properties": {
+                "groupEdges": {
+                    "description": "Group identity edges of the graph starting from the binding's group members to any node of the identities. The Edge.source_node contains a group, such as \"group:parent@google.com\". The Edge.target_node contains a member of the group, such as \"group:child@google.com\" or \"user:foo@google.com\". This field is present only if the output_group_edges option is enabled in request.",
+                    "items": {
+                        "$ref": "GoogleCloudAssetV1p4beta1Edge"
+                    },
+                    "type": "array"
+                },
+                "identities": {
+                    "description": "Only the identities that match one of the following conditions will be presented: - The identity_selector, if it is specified in request; - Otherwise, identities reachable from the policy binding's members.",
+                    "items": {
+                        "$ref": "GoogleCloudAssetV1p4beta1Identity"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p4beta1Resource": {
+            "description": "A Google Cloud resource under analysis.",
+            "id": "GoogleCloudAssetV1p4beta1Resource",
+            "properties": {
+                "analysisState": {
+                    "$ref": "GoogleCloudAssetV1p4beta1AnalysisState",
+                    "description": "The analysis state of this resource."
+                },
+                "fullResourceName": {
+                    "description": "The [full resource name](https://cloud.google.com/asset-inventory/docs/resource-name-format)",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1Asset": {
+            "description": "An asset in Google Cloud. An asset can be any resource in the Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), a resource outside the Google Cloud resource hierarchy (such as Google Kubernetes Engine clusters and objects), or a policy (e.g. Cloud IAM policy). See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+            "id": "GoogleCloudAssetV1p7beta1Asset",
+            "properties": {
+                "accessLevel": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1AccessLevel",
+                    "description": "Please also refer to the [access level user guide](https://cloud.google.com/access-context-manager/docs/overview#access-levels)."
+                },
+                "accessPolicy": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1AccessPolicy",
+                    "description": "Please also refer to the [access policy user guide](https://cloud.google.com/access-context-manager/docs/overview#access-policies)."
+                },
+                "ancestors": {
+                    "description": "The ancestry path of an asset in Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), represented as a list of relative resource names. An ancestry path starts with the closest ancestor in the hierarchy and ends at root. If the asset is a project, folder, or organization, the ancestry path starts from the asset itself. Example: `[\"projects/123456789\", \"folders/5432\", \"organizations/1234\"]`",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "assetType": {
+                    "description": "The type of the asset. Example: `compute.googleapis.com/Disk` See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+                    "type": "string"
+                },
+                "iamPolicy": {
+                    "$ref": "Policy",
+                    "description": "A representation of the Cloud IAM policy set on a Google Cloud resource. There can be a maximum of one Cloud IAM policy set on any given resource. In addition, Cloud IAM policies inherit their granted access scope from any policies set on parent resources in the resource hierarchy. Therefore, the effectively policy is the union of both the policy set on this resource and each policy set on all of the resource's ancestry resource levels in the hierarchy. See [this topic](https://cloud.google.com/iam/docs/policies#inheritance) for more information."
+                },
+                "name": {
+                    "description": "The full name of the asset. Example: `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1` See [Resource names](https://cloud.google.com/apis/design/resource_names#full_resource_name) for more information.",
+                    "type": "string"
+                },
+                "orgPolicy": {
+                    "description": "A representation of an [organization policy](https://cloud.google.com/resource-manager/docs/organization-policy/overview#organization_policy). There can be more than one organization policy with different constraints set on a given resource.",
+                    "items": {
+                        "$ref": "GoogleCloudOrgpolicyV1Policy"
+                    },
+                    "type": "array"
+                },
+                "relatedAssets": {
+                    "$ref": "GoogleCloudAssetV1p7beta1RelatedAssets",
+                    "description": "The related assets of the asset of one relationship type. One asset only represents one type of relationship."
+                },
+                "resource": {
+                    "$ref": "GoogleCloudAssetV1p7beta1Resource",
+                    "description": "A representation of the resource."
+                },
+                "servicePerimeter": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1ServicePerimeter",
+                    "description": "Please also refer to the [service perimeter user guide](https://cloud.google.com/vpc-service-controls/docs/overview)."
+                },
+                "updateTime": {
+                    "description": "The last update timestamp of an asset. update_time is updated when create/update/delete operation is performed.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1RelatedAsset": {
+            "description": "An asset identify in Google Cloud which contains its name, type and ancestors. An asset can be any resource in the Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), a resource outside the Google Cloud resource hierarchy (such as Google Kubernetes Engine clusters and objects), or a policy (e.g. Cloud IAM policy). See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+            "id": "GoogleCloudAssetV1p7beta1RelatedAsset",
+            "properties": {
+                "ancestors": {
+                    "description": "The ancestors of an asset in Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), represented as a list of relative resource names. An ancestry path starts with the closest ancestor in the hierarchy and ends at root. Example: `[\"projects/123456789\", \"folders/5432\", \"organizations/1234\"]`",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "asset": {
+                    "description": "The full name of the asset. Example: `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1` See [Resource names](https://cloud.google.com/apis/design/resource_names#full_resource_name) for more information.",
+                    "type": "string"
+                },
+                "assetType": {
+                    "description": "The type of the asset. Example: `compute.googleapis.com/Disk` See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1RelatedAssets": {
+            "description": "The detailed related assets with the `relationship_type`.",
+            "id": "GoogleCloudAssetV1p7beta1RelatedAssets",
+            "properties": {
+                "assets": {
+                    "description": "The peer resources of the relationship.",
+                    "items": {
+                        "$ref": "GoogleCloudAssetV1p7beta1RelatedAsset"
+                    },
+                    "type": "array"
+                },
+                "relationshipAttributes": {
+                    "$ref": "GoogleCloudAssetV1p7beta1RelationshipAttributes",
+                    "description": "The detailed relation attributes."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1RelationshipAttributes": {
+            "description": "The relationship attributes which include `type`, `source_resource_type`, `target_resource_type` and `action`.",
+            "id": "GoogleCloudAssetV1p7beta1RelationshipAttributes",
+            "properties": {
+                "action": {
+                    "description": "The detail of the relationship, e.g. `contains`, `attaches`",
+                    "type": "string"
+                },
+                "sourceResourceType": {
+                    "description": "The source asset type. Example: `compute.googleapis.com/Instance`",
+                    "type": "string"
+                },
+                "targetResourceType": {
+                    "description": "The target asset type. Example: `compute.googleapis.com/Disk`",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "The unique identifier of the relationship type. Example: `INSTANCE_TO_INSTANCEGROUP`",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1Resource": {
+            "description": "A representation of a Google Cloud resource.",
+            "id": "GoogleCloudAssetV1p7beta1Resource",
+            "properties": {
+                "data": {
+                    "additionalProperties": {
+                        "description": "Properties of the object.",
+                        "type": "any"
+                    },
+                    "description": "The content of the resource, in which some sensitive fields are removed and may not be present.",
+                    "type": "object"
+                },
+                "discoveryDocumentUri": {
+                    "description": "The URL of the discovery document containing the resource's JSON schema. Example: `https://www.googleapis.com/discovery/v1/apis/compute/v1/rest` This value is unspecified for resources that do not have an API based on a discovery document, such as Cloud Bigtable.",
+                    "type": "string"
+                },
+                "discoveryName": {
+                    "description": "The JSON schema name listed in the discovery document. Example: `Project` This value is unspecified for resources that do not have an API based on a discovery document, such as Cloud Bigtable.",
+                    "type": "string"
+                },
+                "location": {
+                    "description": "The location of the resource in Google Cloud, such as its zone and region. For more information, see https://cloud.google.com/about/locations/.",
+                    "type": "string"
+                },
+                "parent": {
+                    "description": "The full name of the immediate parent of this resource. See [Resource Names](https://cloud.google.com/apis/design/resource_names#full_resource_name) for more information. For Google Cloud assets, this value is the parent resource defined in the [Cloud IAM policy hierarchy](https://cloud.google.com/iam/docs/overview#policy_hierarchy). Example: `//cloudresourcemanager.googleapis.com/projects/my_project_123` For third-party assets, this field may be set differently.",
+                    "type": "string"
+                },
+                "resourceUrl": {
+                    "description": "The REST URL for accessing the resource. An HTTP `GET` request using this URL returns the resource itself. Example: `https://cloudresourcemanager.googleapis.com/v1/projects/my-project-123` This value is unspecified for resources without a REST API.",
+                    "type": "string"
+                },
+                "version": {
+                    "description": "The API version. Example: `v1`",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudOrgpolicyV1BooleanPolicy": {
+            "description": "Used in `policy_type` to specify how `boolean_policy` will behave at this resource.",
+            "id": "GoogleCloudOrgpolicyV1BooleanPolicy",
+            "properties": {
+                "enforced": {
+                    "description": "If `true`, then the `Policy` is enforced. If `false`, then any configuration is acceptable. Suppose you have a `Constraint` `constraints/compute.disableSerialPortAccess` with `constraint_default` set to `ALLOW`. A `Policy` for that `Constraint` exhibits the following behavior: - If the `Policy` at this resource has enforced set to `false`, serial port connection attempts will be allowed. - If the `Policy` at this resource has enforced set to `true`, serial port connection attempts will be refused. - If the `Policy` at this resource is `RestoreDefault`, serial port connection attempts will be allowed. - If no `Policy` is set at this resource or anywhere higher in the resource hierarchy, serial port connection attempts will be allowed. - If no `Policy` is set at this resource, but one exists higher in the resource hierarchy, the behavior is as if the`Policy` were set at this resource. The following examples demonstrate the different possible layerings: Example 1 (nearest `Constraint` wins): `organizations/foo` has a `Policy` with: {enforced: false} `projects/bar` has no `Policy` set. The constraint at `projects/bar` and `organizations/foo` will not be enforced. Example 2 (enforcement gets replaced): `organizations/foo` has a `Policy` with: {enforced: false} `projects/bar` has a `Policy` with: {enforced: true} The constraint at `organizations/foo` is not enforced. The constraint at `projects/bar` is enforced. Example 3 (RestoreDefault): `organizations/foo` has a `Policy` with: {enforced: true} `projects/bar` has a `Policy` with: {RestoreDefault: {}} The constraint at `organizations/foo` is enforced. The constraint at `projects/bar` is not enforced, because `constraint_default` for the `Constraint` is `ALLOW`.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudOrgpolicyV1ListPolicy": {
+            "description": "Used in `policy_type` to specify how `list_policy` behaves at this resource. `ListPolicy` can define specific values and subtrees of Cloud Resource Manager resource hierarchy (`Organizations`, `Folders`, `Projects`) that are allowed or denied by setting the `allowed_values` and `denied_values` fields. This is achieved by using the `under:` and optional `is:` prefixes. The `under:` prefix is used to denote resource subtree values. The `is:` prefix is used to denote specific values, and is required only if the value contains a \":\". Values prefixed with \"is:\" are treated the same as values with no prefix. Ancestry subtrees must be in one of the following formats: - \"projects/\", e.g. \"projects/tokyo-rain-123\" - \"folders/\", e.g. \"folders/1234\" - \"organizations/\", e.g. \"organizations/1234\" The `supports_under` field of the associated `Constraint` defines whether ancestry prefixes can be used. You can set `allowed_values` and `denied_values` in the same `Policy` if `all_values` is `ALL_VALUES_UNSPECIFIED`. `ALLOW` or `DENY` are used to allow or deny all values. If `all_values` is set to either `ALLOW` or `DENY`, `allowed_values` and `denied_values` must be unset.",
+            "id": "GoogleCloudOrgpolicyV1ListPolicy",
+            "properties": {
+                "allValues": {
+                    "description": "The policy all_values state.",
+                    "enum": [
+                        "ALL_VALUES_UNSPECIFIED",
+                        "ALLOW",
+                        "DENY"
+                    ],
+                    "enumDescriptions": [
+                        "Indicates that allowed_values or denied_values must be set.",
+                        "A policy with this set allows all values.",
+                        "A policy with this set denies all values."
+                    ],
+                    "type": "string"
+                },
+                "allowedValues": {
+                    "description": "List of values allowed at this resource. Can only be set if `all_values` is set to `ALL_VALUES_UNSPECIFIED`.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "deniedValues": {
+                    "description": "List of values denied at this resource. Can only be set if `all_values` is set to `ALL_VALUES_UNSPECIFIED`.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "inheritFromParent": {
+                    "description": "Determines the inheritance behavior for this `Policy`. By default, a `ListPolicy` set at a resource supersedes any `Policy` set anywhere up the resource hierarchy. However, if `inherit_from_parent` is set to `true`, then the values from the effective `Policy` of the parent resource are inherited, meaning the values set in this `Policy` are added to the values inherited up the hierarchy. Setting `Policy` hierarchies that inherit both allowed values and denied values isn't recommended in most circumstances to keep the configuration simple and understandable. However, it is possible to set a `Policy` with `allowed_values` set that inherits a `Policy` with `denied_values` set. In this case, the values that are allowed must be in `allowed_values` and not present in `denied_values`. For example, suppose you have a `Constraint` `constraints/serviceuser.services`, which has a `constraint_type` of `list_constraint`, and with `constraint_default` set to `ALLOW`. Suppose that at the Organization level, a `Policy` is applied that restricts the allowed API activations to {`E1`, `E2`}. Then, if a `Policy` is applied to a project below the Organization that has `inherit_from_parent` set to `false` and field all_values set to DENY, then an attempt to activate any API will be denied. The following examples demonstrate different possible layerings for `projects/bar` parented by `organizations/foo`: Example 1 (no inherited values): `organizations/foo` has a `Policy` with values: {allowed_values: \"E1\" allowed_values:\"E2\"} `projects/bar` has `inherit_from_parent` `false` and values: {allowed_values: \"E3\" allowed_values: \"E4\"} The accepted values at `organizations/foo` are `E1`, `E2`. The accepted values at `projects/bar` are `E3`, and `E4`. Example 2 (inherited values): `organizations/foo` has a `Policy` with values: {allowed_values: \"E1\" allowed_values:\"E2\"} `projects/bar` has a `Policy` with values: {value: \"E3\" value: \"E4\" inherit_from_parent: true} The accepted values at `organizations/foo` are `E1`, `E2`. The accepted values at `projects/bar` are `E1`, `E2`, `E3`, and `E4`. Example 3 (inheriting both allowed and denied values): `organizations/foo` has a `Policy` with values: {allowed_values: \"E1\" allowed_values: \"E2\"} `projects/bar` has a `Policy` with: {denied_values: \"E1\"} The accepted values at `organizations/foo` are `E1`, `E2`. The value accepted at `projects/bar` is `E2`. Example 4 (RestoreDefault): `organizations/foo` has a `Policy` with values: {allowed_values: \"E1\" allowed_values:\"E2\"} `projects/bar` has a `Policy` with values: {RestoreDefault: {}} The accepted values at `organizations/foo` are `E1`, `E2`. The accepted values at `projects/bar` are either all or none depending on the value of `constraint_default` (if `ALLOW`, all; if `DENY`, none). Example 5 (no policy inherits parent policy): `organizations/foo` has no `Policy` set. `projects/bar` has no `Policy` set. The accepted values at both levels are either all or none depending on the value of `constraint_default` (if `ALLOW`, all; if `DENY`, none). Example 6 (ListConstraint allowing all): `organizations/foo` has a `Policy` with values: {allowed_values: \"E1\" allowed_values: \"E2\"} `projects/bar` has a `Policy` with: {all: ALLOW} The accepted values at `organizations/foo` are `E1`, E2`. Any value is accepted at `projects/bar`. Example 7 (ListConstraint allowing none): `organizations/foo` has a `Policy` with values: {allowed_values: \"E1\" allowed_values: \"E2\"} `projects/bar` has a `Policy` with: {all: DENY} The accepted values at `organizations/foo` are `E1`, E2`. No value is accepted at `projects/bar`. Example 10 (allowed and denied subtrees of Resource Manager hierarchy): Given the following resource hierarchy O1->{F1, F2}; F1->{P1}; F2->{P2, P3}, `organizations/foo` has a `Policy` with values: {allowed_values: \"under:organizations/O1\"} `projects/bar` has a `Policy` with: {allowed_values: \"under:projects/P3\"} {denied_values: \"under:folders/F2\"} The accepted values at `organizations/foo` are `organizations/O1`, `folders/F1`, `folders/F2`, `projects/P1`, `projects/P2`, `projects/P3`. The accepted values at `projects/bar` are `organizations/O1`, `folders/F1`, `projects/P1`.",
+                    "type": "boolean"
+                },
+                "suggestedValue": {
+                    "description": "Optional. The Google Cloud Console will try to default to a configuration that matches the value specified in this `Policy`. If `suggested_value` is not set, it will inherit the value specified higher in the hierarchy, unless `inherit_from_parent` is `false`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudOrgpolicyV1Policy": {
+            "description": "Defines a Cloud Organization `Policy` which is used to specify `Constraints` for configurations of Cloud Platform resources.",
+            "id": "GoogleCloudOrgpolicyV1Policy",
+            "properties": {
+                "booleanPolicy": {
+                    "$ref": "GoogleCloudOrgpolicyV1BooleanPolicy",
+                    "description": "For boolean `Constraints`, whether to enforce the `Constraint` or not."
+                },
+                "constraint": {
+                    "description": "The name of the `Constraint` the `Policy` is configuring, for example, `constraints/serviceuser.services`. A [list of available constraints](/resource-manager/docs/organization-policy/org-policy-constraints) is available. Immutable after creation.",
+                    "type": "string"
+                },
+                "etag": {
+                    "description": "An opaque tag indicating the current version of the `Policy`, used for concurrency control. When the `Policy` is returned from either a `GetPolicy` or a `ListOrgPolicy` request, this `etag` indicates the version of the current `Policy` to use when executing a read-modify-write loop. When the `Policy` is returned from a `GetEffectivePolicy` request, the `etag` will be unset. When the `Policy` is used in a `SetOrgPolicy` method, use the `etag` value that was returned from a `GetOrgPolicy` request as part of a read-modify-write loop for concurrency control. Not setting the `etag`in a `SetOrgPolicy` request will result in an unconditional write of the `Policy`.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "listPolicy": {
+                    "$ref": "GoogleCloudOrgpolicyV1ListPolicy",
+                    "description": "List of values either allowed or disallowed."
+                },
+                "restoreDefault": {
+                    "$ref": "GoogleCloudOrgpolicyV1RestoreDefault",
+                    "description": "Restores the default behavior of the constraint; independent of `Constraint` type."
+                },
+                "updateTime": {
+                    "description": "The time stamp the `Policy` was previously updated. This is set by the server, not specified by the caller, and represents the last time a call to `SetOrgPolicy` was made for that `Policy`. Any value set by the client will be ignored.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "version": {
+                    "description": "Version of the `Policy`. Default version is 0;",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudOrgpolicyV1RestoreDefault": {
+            "description": "Ignores policies set above this resource and restores the `constraint_default` enforcement behavior of the specific `Constraint` at this resource. Suppose that `constraint_default` is set to `ALLOW` for the `Constraint` `constraints/serviceuser.services`. Suppose that organization foo.com sets a `Policy` at their Organization resource node that restricts the allowed service activations to deny all service activations. They could then set a `Policy` with the `policy_type` `restore_default` on several experimental projects, restoring the `constraint_default` enforcement of the `Constraint` for only those projects, allowing those projects to have all services activated.",
+            "id": "GoogleCloudOrgpolicyV1RestoreDefault",
+            "properties": {},
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1AccessLevel": {
+            "description": "An `AccessLevel` is a label that can be applied to requests to Google Cloud services, along with a list of requirements necessary for the label to be applied.",
+            "id": "GoogleIdentityAccesscontextmanagerV1AccessLevel",
+            "properties": {
+                "basic": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1BasicLevel",
+                    "description": "A `BasicLevel` composed of `Conditions`."
+                },
+                "custom": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1CustomLevel",
+                    "description": "A `CustomLevel` written in the Common Expression Language."
+                },
+                "description": {
+                    "description": "Description of the `AccessLevel` and its use. Does not affect behavior.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Required. Resource name for the Access Level. The `short_name` component must begin with a letter and only include alphanumeric and '_'. Format: `accessPolicies/{policy_id}/accessLevels/{short_name}`. The maximum length of the `short_name` component is 50 characters.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Human readable title. Must be unique within the Policy.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1AccessPolicy": {
+            "description": "`AccessPolicy` is a container for `AccessLevels` (which define the necessary attributes to use Google Cloud services) and `ServicePerimeters` (which define regions of services able to freely pass data within a perimeter). An access policy is globally visible within an organization, and the restrictions it specifies apply to all projects within an organization.",
+            "id": "GoogleIdentityAccesscontextmanagerV1AccessPolicy",
+            "properties": {
+                "etag": {
+                    "description": "Output only. An opaque identifier for the current version of the `AccessPolicy`. This will always be a strongly validated etag, meaning that two Access Polices will be identical if and only if their etags are identical. Clients should not expect this to be in any specific format.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Output only. Resource name of the `AccessPolicy`. Format: `accessPolicies/{policy_id}`",
+                    "type": "string"
+                },
+                "parent": {
+                    "description": "Required. The parent of this `AccessPolicy` in the Cloud Resource Hierarchy. Currently immutable once created. Format: `organizations/{organization_id}`",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Required. Human readable title. Does not affect behavior.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1ApiOperation": {
+            "description": "Identification for an API Operation.",
+            "id": "GoogleIdentityAccesscontextmanagerV1ApiOperation",
+            "properties": {
+                "methodSelectors": {
+                    "description": "API methods or permissions to allow. Method or permission must belong to the service specified by `service_name` field. A single MethodSelector entry with `*` specified for the `method` field will allow all methods AND permissions for the service specified in `service_name`.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1MethodSelector"
+                    },
+                    "type": "array"
+                },
+                "serviceName": {
+                    "description": "The name of the API whose methods or permissions the IngressPolicy or EgressPolicy want to allow. A single ApiOperation with `service_name` field set to `*` will allow all methods AND permissions for all services.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1BasicLevel": {
+            "description": "`BasicLevel` is an `AccessLevel` using a set of recommended features.",
+            "id": "GoogleIdentityAccesscontextmanagerV1BasicLevel",
+            "properties": {
+                "combiningFunction": {
+                    "description": "How the `conditions` list should be combined to determine if a request is granted this `AccessLevel`. If AND is used, each `Condition` in `conditions` must be satisfied for the `AccessLevel` to be applied. If OR is used, at least one `Condition` in `conditions` must be satisfied for the `AccessLevel` to be applied. Default behavior is AND.",
+                    "enum": [
+                        "AND",
+                        "OR"
+                    ],
+                    "enumDescriptions": [
+                        "All `Conditions` must be true for the `BasicLevel` to be true.",
+                        "If at least one `Condition` is true, then the `BasicLevel` is true."
+                    ],
+                    "type": "string"
+                },
+                "conditions": {
+                    "description": "Required. A list of requirements for the `AccessLevel` to be granted.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1Condition"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1Condition": {
+            "description": "A condition necessary for an `AccessLevel` to be granted. The Condition is an AND over its fields. So a Condition is true if: 1) the request IP is from one of the listed subnetworks AND 2) the originating device complies with the listed device policy AND 3) all listed access levels are granted AND 4) the request was sent at a time allowed by the DateTimeRestriction.",
+            "id": "GoogleIdentityAccesscontextmanagerV1Condition",
+            "properties": {
+                "devicePolicy": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1DevicePolicy",
+                    "description": "Device specific restrictions, all restrictions must hold for the Condition to be true. If not specified, all devices are allowed."
+                },
+                "ipSubnetworks": {
+                    "description": "CIDR block IP subnetwork specification. May be IPv4 or IPv6. Note that for a CIDR IP address block, the specified IP address portion must be properly truncated (i.e. all the host bits must be zero) or the input is considered malformed. For example, \"192.0.2.0/24\" is accepted but \"192.0.2.1/24\" is not. Similarly, for IPv6, \"2001:db8::/32\" is accepted whereas \"2001:db8::1/32\" is not. The originating IP of a request must be in one of the listed subnets in order for this Condition to be true. If empty, all IP addresses are allowed.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "members": {
+                    "description": "The request must be made by one of the provided user or service accounts. Groups are not supported. Syntax: `user:{emailid}` `serviceAccount:{emailid}` If not specified, a request may come from any user.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "negate": {
+                    "description": "Whether to negate the Condition. If true, the Condition becomes a NAND over its non-empty fields, each field must be false for the Condition overall to be satisfied. Defaults to false.",
+                    "type": "boolean"
+                },
+                "regions": {
+                    "description": "The request must originate from one of the provided countries/regions. Must be valid ISO 3166-1 alpha-2 codes.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "requiredAccessLevels": {
+                    "description": "A list of other access levels defined in the same `Policy`, referenced by resource name. Referencing an `AccessLevel` which does not exist is an error. All access levels listed must be granted for the Condition to be true. Example: \"`accessPolicies/MY_POLICY/accessLevels/LEVEL_NAME\"`",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1CustomLevel": {
+            "description": "`CustomLevel` is an `AccessLevel` using the Cloud Common Expression Language to represent the necessary conditions for the level to apply to a request. See CEL spec at: https://github.com/google/cel-spec",
+            "id": "GoogleIdentityAccesscontextmanagerV1CustomLevel",
+            "properties": {
+                "expr": {
+                    "$ref": "Expr",
+                    "description": "Required. A Cloud CEL expression evaluating to a boolean."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1DevicePolicy": {
+            "description": "`DevicePolicy` specifies device specific restrictions necessary to acquire a given access level. A `DevicePolicy` specifies requirements for requests from devices to be granted access levels, it does not do any enforcement on the device. `DevicePolicy` acts as an AND over all specified fields, and each repeated field is an OR over its elements. Any unset fields are ignored. For example, if the proto is { os_type : DESKTOP_WINDOWS, os_type : DESKTOP_LINUX, encryption_status: ENCRYPTED}, then the DevicePolicy will be true for requests originating from encrypted Linux desktops and encrypted Windows desktops.",
+            "id": "GoogleIdentityAccesscontextmanagerV1DevicePolicy",
+            "properties": {
+                "allowedDeviceManagementLevels": {
+                    "description": "Allowed device management levels, an empty list allows all management levels.",
+                    "items": {
+                        "enum": [
+                            "MANAGEMENT_UNSPECIFIED",
+                            "NONE",
+                            "BASIC",
+                            "COMPLETE"
+                        ],
+                        "enumDescriptions": [
+                            "The device's management level is not specified or not known.",
+                            "The device is not managed.",
+                            "Basic management is enabled, which is generally limited to monitoring and wiping the corporate account.",
+                            "Complete device management. This includes more thorough monitoring and the ability to directly manage the device (such as remote wiping). This can be enabled through the Android Enterprise Platform."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "allowedEncryptionStatuses": {
+                    "description": "Allowed encryptions statuses, an empty list allows all statuses.",
+                    "items": {
+                        "enum": [
+                            "ENCRYPTION_UNSPECIFIED",
+                            "ENCRYPTION_UNSUPPORTED",
+                            "UNENCRYPTED",
+                            "ENCRYPTED"
+                        ],
+                        "enumDescriptions": [
+                            "The encryption status of the device is not specified or not known.",
+                            "The device does not support encryption.",
+                            "The device supports encryption, but is currently unencrypted.",
+                            "The device is encrypted."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "osConstraints": {
+                    "description": "Allowed OS versions, an empty list allows all types and all versions.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1OsConstraint"
+                    },
+                    "type": "array"
+                },
+                "requireAdminApproval": {
+                    "description": "Whether the device needs to be approved by the customer admin.",
+                    "type": "boolean"
+                },
+                "requireCorpOwned": {
+                    "description": "Whether the device needs to be corp owned.",
+                    "type": "boolean"
+                },
+                "requireScreenlock": {
+                    "description": "Whether or not screenlock is required for the DevicePolicy to be true. Defaults to `false`.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1EgressFrom": {
+            "description": "Defines the conditions under which an EgressPolicy matches a request. Conditions based on information about the source of the request. Note that if the destination of the request is protected by a ServicePerimeter, then that ServicePerimeter must have an IngressPolicy which allows access in order for this request to succeed.",
+            "id": "GoogleIdentityAccesscontextmanagerV1EgressFrom",
+            "properties": {
+                "identities": {
+                    "description": "A list of identities that are allowed access through this [EgressPolicy]. Should be in the format of email address. The email address should represent individual user or service account only.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "identityType": {
+                    "description": "Specifies the type of identities that are allowed access to outside the perimeter. If left unspecified, then members of `identities` field will be allowed access.",
+                    "enum": [
+                        "IDENTITY_TYPE_UNSPECIFIED",
+                        "ANY_IDENTITY",
+                        "ANY_USER_ACCOUNT",
+                        "ANY_SERVICE_ACCOUNT"
+                    ],
+                    "enumDescriptions": [
+                        "No blanket identity group specified.",
+                        "Authorize access from all identities outside the perimeter.",
+                        "Authorize access from all human users outside the perimeter.",
+                        "Authorize access from all service accounts outside the perimeter."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1EgressPolicy": {
+            "description": "Policy for egress from perimeter. EgressPolicies match requests based on `egress_from` and `egress_to` stanzas. For an EgressPolicy to match, both `egress_from` and `egress_to` stanzas must be matched. If an EgressPolicy matches a request, the request is allowed to span the ServicePerimeter boundary. For example, an EgressPolicy can be used to allow VMs on networks within the ServicePerimeter to access a defined set of projects outside the perimeter in certain contexts (e.g. to read data from a Cloud Storage bucket or query against a BigQuery dataset). EgressPolicies are concerned with the *resources* that a request relates as well as the API services and API actions being used. They do not related to the direction of data movement. More detailed documentation for this concept can be found in the descriptions of EgressFrom and EgressTo.",
+            "id": "GoogleIdentityAccesscontextmanagerV1EgressPolicy",
+            "properties": {
+                "egressFrom": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1EgressFrom",
+                    "description": "Defines conditions on the source of a request causing this EgressPolicy to apply."
+                },
+                "egressTo": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1EgressTo",
+                    "description": "Defines the conditions on the ApiOperation and destination resources that cause this EgressPolicy to apply."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1EgressTo": {
+            "description": "Defines the conditions under which an EgressPolicy matches a request. Conditions are based on information about the ApiOperation intended to be performed on the `resources` specified. Note that if the destination of the request is protected by a ServicePerimeter, then that ServicePerimeter must have an IngressPolicy which allows access in order for this request to succeed.",
+            "id": "GoogleIdentityAccesscontextmanagerV1EgressTo",
+            "properties": {
+                "operations": {
+                    "description": "A list of ApiOperations that this egress rule applies to. A request matches if it contains an operation/service in this list.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1ApiOperation"
+                    },
+                    "type": "array"
+                },
+                "resources": {
+                    "description": "A list of resources, currently only projects in the form `projects/`, that match this to stanza. A request matches if it contains a resource in this list. If `*` is specified for resources, then this EgressTo rule will authorize access to all resources outside the perimeter.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1IngressFrom": {
+            "description": "Defines the conditions under which an IngressPolicy matches a request. Conditions are based on information about the source of the request.",
+            "id": "GoogleIdentityAccesscontextmanagerV1IngressFrom",
+            "properties": {
+                "identities": {
+                    "description": "A list of identities that are allowed access through this ingress policy. Should be in the format of email address. The email address should represent individual user or service account only.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "identityType": {
+                    "description": "Specifies the type of identities that are allowed access from outside the perimeter. If left unspecified, then members of `identities` field will be allowed access.",
+                    "enum": [
+                        "IDENTITY_TYPE_UNSPECIFIED",
+                        "ANY_IDENTITY",
+                        "ANY_USER_ACCOUNT",
+                        "ANY_SERVICE_ACCOUNT"
+                    ],
+                    "enumDescriptions": [
+                        "No blanket identity group specified.",
+                        "Authorize access from all identities outside the perimeter.",
+                        "Authorize access from all human users outside the perimeter.",
+                        "Authorize access from all service accounts outside the perimeter."
+                    ],
+                    "type": "string"
+                },
+                "sources": {
+                    "description": "Sources that this IngressPolicy authorizes access from.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1IngressSource"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1IngressPolicy": {
+            "description": "Policy for ingress into ServicePerimeter. IngressPolicies match requests based on `ingress_from` and `ingress_to` stanzas. For an ingress policy to match, both the `ingress_from` and `ingress_to` stanzas must be matched. If an IngressPolicy matches a request, the request is allowed through the perimeter boundary from outside the perimeter. For example, access from the internet can be allowed either based on an AccessLevel or, for traffic hosted on Google Cloud, the project of the source network. For access from private networks, using the project of the hosting network is required. Individual ingress policies can be limited by restricting which services and/or actions they match using the `ingress_to` field.",
+            "id": "GoogleIdentityAccesscontextmanagerV1IngressPolicy",
+            "properties": {
+                "ingressFrom": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1IngressFrom",
+                    "description": "Defines the conditions on the source of a request causing this IngressPolicy to apply."
+                },
+                "ingressTo": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1IngressTo",
+                    "description": "Defines the conditions on the ApiOperation and request destination that cause this IngressPolicy to apply."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1IngressSource": {
+            "description": "The source that IngressPolicy authorizes access from.",
+            "id": "GoogleIdentityAccesscontextmanagerV1IngressSource",
+            "properties": {
+                "accessLevel": {
+                    "description": "An AccessLevel resource name that allow resources within the ServicePerimeters to be accessed from the internet. AccessLevels listed must be in the same policy as this ServicePerimeter. Referencing a nonexistent AccessLevel will cause an error. If no AccessLevel names are listed, resources within the perimeter can only be accessed via Google Cloud calls with request origins within the perimeter. Example: `accessPolicies/MY_POLICY/accessLevels/MY_LEVEL`. If `*` is specified, then all IngressSources will be allowed.",
+                    "type": "string"
+                },
+                "resource": {
+                    "description": "A Google Cloud resource that is allowed to ingress the perimeter. Requests from these resources will be allowed to access perimeter data. Currently only projects are allowed. Format: `projects/{project_number}` The project may be in any Google Cloud organization, not just the organization that the perimeter is defined in. `*` is not allowed, the case of allowing all Google Cloud resources only is not supported.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1IngressTo": {
+            "description": "Defines the conditions under which an IngressPolicy matches a request. Conditions are based on information about the ApiOperation intended to be performed on the destination of the request.",
+            "id": "GoogleIdentityAccesscontextmanagerV1IngressTo",
+            "properties": {
+                "operations": {
+                    "description": "A list of ApiOperations the sources specified in corresponding IngressFrom are allowed to perform in this ServicePerimeter.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1ApiOperation"
+                    },
+                    "type": "array"
+                },
+                "resources": {
+                    "description": "A list of resources, currently only projects in the form `projects/`, protected by this ServicePerimeter that are allowed to be accessed by sources defined in the corresponding IngressFrom. A request matches if it contains a resource in this list. If `*` is specified for resources, then this IngressTo rule will authorize access to all resources inside the perimeter, provided that the request also matches the `operations` field.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1MethodSelector": {
+            "description": "An allowed method or permission of a service specified in ApiOperation.",
+            "id": "GoogleIdentityAccesscontextmanagerV1MethodSelector",
+            "properties": {
+                "method": {
+                    "description": "Value for `method` should be a valid method name for the corresponding `service_name` in ApiOperation. If `*` used as value for `method`, then ALL methods and permissions are allowed.",
+                    "type": "string"
+                },
+                "permission": {
+                    "description": "Value for `permission` should be a valid Cloud IAM permission for the corresponding `service_name` in ApiOperation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1OsConstraint": {
+            "description": "A restriction on the OS type and version of devices making requests.",
+            "id": "GoogleIdentityAccesscontextmanagerV1OsConstraint",
+            "properties": {
+                "minimumVersion": {
+                    "description": "The minimum allowed OS version. If not set, any version of this OS satisfies the constraint. Format: `\"major.minor.patch\"`. Examples: `\"10.5.301\"`, `\"9.2.1\"`.",
+                    "type": "string"
+                },
+                "osType": {
+                    "description": "Required. The allowed OS type.",
+                    "enum": [
+                        "OS_UNSPECIFIED",
+                        "DESKTOP_MAC",
+                        "DESKTOP_WINDOWS",
+                        "DESKTOP_LINUX",
+                        "DESKTOP_CHROME_OS",
+                        "ANDROID",
+                        "IOS"
+                    ],
+                    "enumDescriptions": [
+                        "The operating system of the device is not specified or not known.",
+                        "A desktop Mac operating system.",
+                        "A desktop Windows operating system.",
+                        "A desktop Linux operating system.",
+                        "A desktop ChromeOS operating system.",
+                        "An Android operating system.",
+                        "An iOS operating system."
+                    ],
+                    "type": "string"
+                },
+                "requireVerifiedChromeOs": {
+                    "description": "Only allows requests from devices with a verified Chrome OS. Verifications includes requirements that the device is enterprise-managed, conformant to domain policies, and the caller has permission to call the API targeted by the request.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1ServicePerimeter": {
+            "description": "`ServicePerimeter` describes a set of Google Cloud resources which can freely import and export data amongst themselves, but not export outside of the `ServicePerimeter`. If a request with a source within this `ServicePerimeter` has a target outside of the `ServicePerimeter`, the request will be blocked. Otherwise the request is allowed. There are two types of Service Perimeter - Regular and Bridge. Regular Service Perimeters cannot overlap, a single Google Cloud project can only belong to a single regular Service Perimeter. Service Perimeter Bridges can contain only Google Cloud projects as members, a single Google Cloud project may belong to multiple Service Perimeter Bridges.",
+            "id": "GoogleIdentityAccesscontextmanagerV1ServicePerimeter",
+            "properties": {
+                "description": {
+                    "description": "Description of the `ServicePerimeter` and its use. Does not affect behavior.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Required. Resource name for the ServicePerimeter. The `short_name` component must begin with a letter and only include alphanumeric and '_'. Format: `accessPolicies/{policy_id}/servicePerimeters/{short_name}`",
+                    "type": "string"
+                },
+                "perimeterType": {
+                    "description": "Perimeter type indicator. A single project is allowed to be a member of single regular perimeter, but multiple service perimeter bridges. A project cannot be a included in a perimeter bridge without being included in regular perimeter. For perimeter bridges, the restricted service list as well as access level lists must be empty.",
+                    "enum": [
+                        "PERIMETER_TYPE_REGULAR",
+                        "PERIMETER_TYPE_BRIDGE"
+                    ],
+                    "enumDescriptions": [
+                        "Regular Perimeter.",
+                        "Perimeter Bridge."
+                    ],
+                    "type": "string"
+                },
+                "spec": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig",
+                    "description": "Proposed (or dry run) ServicePerimeter configuration. This configuration allows to specify and test ServicePerimeter configuration without enforcing actual access restrictions. Only allowed to be set when the \"use_explicit_dry_run_spec\" flag is set."
+                },
+                "status": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig",
+                    "description": "Current ServicePerimeter configuration. Specifies sets of resources, restricted services and access levels that determine perimeter content and boundaries."
+                },
+                "title": {
+                    "description": "Human readable title. Must be unique within the Policy.",
+                    "type": "string"
+                },
+                "useExplicitDryRunSpec": {
+                    "description": "Use explicit dry run spec flag. Ordinarily, a dry-run spec implicitly exists for all Service Perimeters, and that spec is identical to the status for those Service Perimeters. When this flag is set, it inhibits the generation of the implicit spec, thereby allowing the user to explicitly provide a configuration (\"spec\") to use in a dry-run version of the Service Perimeter. This allows the user to test changes to the enforced config (\"status\") without actually enforcing them. This testing is done through analyzing the differences between currently enforced and suggested restrictions. use_explicit_dry_run_spec must bet set to True if any of the fields in the spec are set to non-default values.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig": {
+            "description": "`ServicePerimeterConfig` specifies a set of Google Cloud resources that describe specific Service Perimeter configuration.",
+            "id": "GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig",
+            "properties": {
+                "accessLevels": {
+                    "description": "A list of `AccessLevel` resource names that allow resources within the `ServicePerimeter` to be accessed from the internet. `AccessLevels` listed must be in the same policy as this `ServicePerimeter`. Referencing a nonexistent `AccessLevel` is a syntax error. If no `AccessLevel` names are listed, resources within the perimeter can only be accessed via Google Cloud calls with request origins within the perimeter. Example: `\"accessPolicies/MY_POLICY/accessLevels/MY_LEVEL\"`. For Service Perimeter Bridge, must be empty.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "egressPolicies": {
+                    "description": "List of EgressPolicies to apply to the perimeter. A perimeter may have multiple EgressPolicies, each of which is evaluated separately. Access is granted if any EgressPolicy grants it. Must be empty for a perimeter bridge.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1EgressPolicy"
+                    },
+                    "type": "array"
+                },
+                "ingressPolicies": {
+                    "description": "List of IngressPolicies to apply to the perimeter. A perimeter may have multiple IngressPolicies, each of which is evaluated separately. Access is granted if any Ingress Policy grants it. Must be empty for a perimeter bridge.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1IngressPolicy"
+                    },
+                    "type": "array"
+                },
+                "resources": {
+                    "description": "A list of Google Cloud resources that are inside of the service perimeter. Currently only projects are allowed. Format: `projects/{project_number}`",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "restrictedServices": {
+                    "description": "Google Cloud services that are subject to the Service Perimeter restrictions. For example, if `storage.googleapis.com` is specified, access to the storage buckets inside the perimeter must meet the perimeter's access restrictions.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "vpcAccessibleServices": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1VpcAccessibleServices",
+                    "description": "Configuration for APIs allowed within Perimeter."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1VpcAccessibleServices": {
+            "description": "Specifies how APIs are allowed to communicate within the Service Perimeter.",
+            "id": "GoogleIdentityAccesscontextmanagerV1VpcAccessibleServices",
+            "properties": {
+                "allowedServices": {
+                    "description": "The list of APIs usable within the Service Perimeter. Must be empty unless 'enable_restriction' is True. You can specify a list of individual services, as well as include the 'RESTRICTED-SERVICES' value, which automatically includes all of the services protected by the perimeter.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "enableRestriction": {
+                    "description": "Whether to restrict API calls within the Service Perimeter to the list of APIs specified in 'allowed_services'.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "IamPolicyAnalysis": {
+            "description": "An analysis message to group the query and results.",
+            "id": "IamPolicyAnalysis",
+            "properties": {
+                "analysisQuery": {
+                    "$ref": "IamPolicyAnalysisQuery",
+                    "description": "The analysis query."
+                },
+                "analysisResults": {
+                    "description": "A list of IamPolicyAnalysisResult that matches the analysis query, or empty if no result is found.",
+                    "items": {
+                        "$ref": "IamPolicyAnalysisResult"
+                    },
+                    "type": "array"
+                },
+                "fullyExplored": {
+                    "description": "Represents whether all entries in the analysis_results have been fully explored to answer the query.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "IamPolicyAnalysisOutputConfig": {
+            "description": "Output configuration for export IAM policy analysis destination.",
+            "id": "IamPolicyAnalysisOutputConfig",
+            "properties": {
+                "gcsDestination": {
+                    "$ref": "GcsDestination",
+                    "description": "Destination on Cloud Storage."
+                }
+            },
+            "type": "object"
+        },
+        "IamPolicyAnalysisQuery": {
+            "description": "IAM policy analysis query message.",
+            "id": "IamPolicyAnalysisQuery",
+            "properties": {
+                "accessSelector": {
+                    "$ref": "AccessSelector",
+                    "description": "Optional. Specifies roles or permissions for analysis. This is optional."
+                },
+                "identitySelector": {
+                    "$ref": "IdentitySelector",
+                    "description": "Optional. Specifies an identity for analysis."
+                },
+                "parent": {
+                    "description": "Required. The relative name of the root asset. Only resources and IAM policies within the parent will be analyzed. This can only be an organization number (such as \"organizations/123\"), a folder number (such as \"folders/123\"), a project ID (such as \"projects/my-project-id\"), or a project number (such as \"projects/12345\"). To know how to get organization id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id). To know how to get folder or project id, visit [here ](https://cloud.google.com/resource-manager/docs/creating-managing-folders#viewing_or_listing_folders_and_projects).",
+                    "type": "string"
+                },
+                "resourceSelector": {
+                    "$ref": "ResourceSelector",
+                    "description": "Optional. Specifies a resource for analysis."
+                }
+            },
+            "type": "object"
+        },
+        "IamPolicyAnalysisResult": {
+            "description": "IAM Policy analysis result, consisting of one IAM policy binding and derived access control lists.",
+            "id": "IamPolicyAnalysisResult",
+            "properties": {
+                "accessControlLists": {
+                    "description": "The access control lists derived from the iam_binding that match or potentially match resource and access selectors specified in the request.",
+                    "items": {
+                        "$ref": "GoogleCloudAssetV1p4beta1AccessControlList"
+                    },
+                    "type": "array"
+                },
+                "attachedResourceFullName": {
+                    "description": "The [full resource name](https://cloud.google.com/asset-inventory/docs/resource-name-format) of the resource to which the iam_binding policy attaches.",
+                    "type": "string"
+                },
+                "fullyExplored": {
+                    "description": "Represents whether all analyses on the iam_binding have successfully finished.",
+                    "type": "boolean"
+                },
+                "iamBinding": {
+                    "$ref": "Binding",
+                    "description": "The Cloud IAM policy binding under analysis."
+                },
+                "identityList": {
+                    "$ref": "GoogleCloudAssetV1p4beta1IdentityList",
+                    "description": "The identity list derived from members of the iam_binding that match or potentially match identity selector specified in the request."
+                }
+            },
+            "type": "object"
+        },
+        "IdentitySelector": {
+            "description": "Specifies an identity for which to determine resource access, based on roles assigned either directly to them or to the groups they belong to, directly or indirectly.",
+            "id": "IdentitySelector",
+            "properties": {
+                "identity": {
+                    "description": "Required. The identity appear in the form of members in [IAM policy binding](https://cloud.google.com/iam/reference/rest/v1/Binding). The examples of supported forms are: \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\". Notice that wildcard characters (such as * and ?) are not supported. You must give a specific identity.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Operation": {
+            "description": "This resource represents a long-running operation that is the result of a network API call.",
+            "id": "Operation",
+            "properties": {
+                "done": {
+                    "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
+                    "type": "boolean"
+                },
+                "error": {
+                    "$ref": "Status",
+                    "description": "The error result of the operation in case of failure or cancellation."
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
+                    "type": "string"
+                },
+                "response": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "Options": {
+            "description": "Contains request options.",
+            "id": "Options",
+            "properties": {
+                "analyzeServiceAccountImpersonation": {
+                    "description": "Optional. If true, the response will include access analysis from identities to resources via service account impersonation. This is a very expensive operation, because many derived queries will be executed. For example, if the request analyzes for which resources user A has permission P, and there's an IAM policy states user A has iam.serviceAccounts.getAccessToken permission to a service account SA, and there's another IAM policy states service account SA has permission P to a GCP folder F, then user A potentially has access to the GCP folder F. And those advanced analysis results will be included in AnalyzeIamPolicyResponse.service_account_impersonation_analysis. Another example, if the request analyzes for who has permission P to a GCP folder F, and there's an IAM policy states user A has iam.serviceAccounts.actAs permission to a service account SA, and there's another IAM policy states service account SA has permission P to the GCP folder F, then user A potentially has access to the GCP folder F. And those advanced analysis results will be included in AnalyzeIamPolicyResponse.service_account_impersonation_analysis. Default is false.",
+                    "type": "boolean"
+                },
+                "expandGroups": {
+                    "description": "Optional. If true, the identities section of the result will expand any Google groups appearing in an IAM policy binding. If identity_selector is specified, the identity in the result will be determined by the selector, and this flag will have no effect. Default is false.",
+                    "type": "boolean"
+                },
+                "expandResources": {
+                    "description": "Optional. If true, the resource section of the result will expand any resource attached to an IAM policy to include resources lower in the resource hierarchy. For example, if the request analyzes for which resources user A has permission P, and the results include an IAM policy with P on a GCP folder, the results will also include resources in that folder with permission P. If resource_selector is specified, the resource section of the result will be determined by the selector, and this flag will have no effect. Default is false.",
+                    "type": "boolean"
+                },
+                "expandRoles": {
+                    "description": "Optional. If true, the access section of result will expand any roles appearing in IAM policy bindings to include their permissions. If access_selector is specified, the access section of the result will be determined by the selector, and this flag will have no effect. Default is false.",
+                    "type": "boolean"
+                },
+                "outputGroupEdges": {
+                    "description": "Optional. If true, the result will output group identity edges, starting from the binding's group members, to any expanded identities. Default is false.",
+                    "type": "boolean"
+                },
+                "outputResourceEdges": {
+                    "description": "Optional. If true, the result will output resource edges, starting from the policy attached resource, to any expanded resources. Default is false.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "Policy": {
+            "description": "An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { \"bindings\": [ { \"role\": \"roles/resourcemanager.organizationAdmin\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\" ] }, { \"role\": \"roles/resourcemanager.organizationViewer\", \"members\": [ \"user:eve@example.com\" ], \"condition\": { \"title\": \"expirable access\", \"description\": \"Does not grant access after Sep 2020\", \"expression\": \"request.time < timestamp('2020-10-01T00:00:00.000Z')\", } } ], \"etag\": \"BwWWja0YfJA=\", \"version\": 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).",
+            "id": "Policy",
+            "properties": {
+                "auditConfigs": {
+                    "description": "Specifies cloud audit logging configuration for this policy.",
+                    "items": {
+                        "$ref": "AuditConfig"
+                    },
+                    "type": "array"
+                },
+                "bindings": {
+                    "description": "Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.",
+                    "items": {
+                        "$ref": "Binding"
+                    },
+                    "type": "array"
+                },
+                "etag": {
+                    "description": "`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "version": {
+                    "description": "Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "ResourceSelector": {
+            "description": "Specifies the resource to analyze for access policies, which may be set directly on the resource, or on ancestors such as organizations, folders or projects.",
+            "id": "ResourceSelector",
+            "properties": {
+                "fullResourceName": {
+                    "description": "Required. The [full resource name](https://cloud.google.com/asset-inventory/docs/resource-name-format) of a resource of [supported resource types](https://cloud.google.com/asset-inventory/docs/supported-asset-types#analyzable_asset_types).",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Status": {
+            "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
+            "id": "Status",
+            "properties": {
+                "code": {
+                    "description": "The status code, which should be an enum value of google.rpc.Code.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        }
+    },
+    "servicePath": "",
+    "title": "Cloud Asset API",
+    "version": "v1p4beta1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/cloudasset.v1p5beta1.json b/googleapiclient/discovery_cache/documents/cloudasset.v1p5beta1.json
index f901dfc..e84686b 100644
--- a/googleapiclient/discovery_cache/documents/cloudasset.v1p5beta1.json
+++ b/googleapiclient/discovery_cache/documents/cloudasset.v1p5beta1.json
@@ -177,7 +177,7 @@
             }
         }
     },
-    "revision": "20210119",
+    "revision": "20210226",
     "rootUrl": "https://cloudasset.googleapis.com/",
     "schemas": {
         "Asset": {
@@ -322,6 +322,166 @@
             },
             "type": "object"
         },
+        "GoogleCloudAssetV1p7beta1Asset": {
+            "description": "An asset in Google Cloud. An asset can be any resource in the Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), a resource outside the Google Cloud resource hierarchy (such as Google Kubernetes Engine clusters and objects), or a policy (e.g. Cloud IAM policy). See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+            "id": "GoogleCloudAssetV1p7beta1Asset",
+            "properties": {
+                "accessLevel": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1AccessLevel",
+                    "description": "Please also refer to the [access level user guide](https://cloud.google.com/access-context-manager/docs/overview#access-levels)."
+                },
+                "accessPolicy": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1AccessPolicy",
+                    "description": "Please also refer to the [access policy user guide](https://cloud.google.com/access-context-manager/docs/overview#access-policies)."
+                },
+                "ancestors": {
+                    "description": "The ancestry path of an asset in Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), represented as a list of relative resource names. An ancestry path starts with the closest ancestor in the hierarchy and ends at root. If the asset is a project, folder, or organization, the ancestry path starts from the asset itself. Example: `[\"projects/123456789\", \"folders/5432\", \"organizations/1234\"]`",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "assetType": {
+                    "description": "The type of the asset. Example: `compute.googleapis.com/Disk` See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+                    "type": "string"
+                },
+                "iamPolicy": {
+                    "$ref": "Policy",
+                    "description": "A representation of the Cloud IAM policy set on a Google Cloud resource. There can be a maximum of one Cloud IAM policy set on any given resource. In addition, Cloud IAM policies inherit their granted access scope from any policies set on parent resources in the resource hierarchy. Therefore, the effectively policy is the union of both the policy set on this resource and each policy set on all of the resource's ancestry resource levels in the hierarchy. See [this topic](https://cloud.google.com/iam/docs/policies#inheritance) for more information."
+                },
+                "name": {
+                    "description": "The full name of the asset. Example: `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1` See [Resource names](https://cloud.google.com/apis/design/resource_names#full_resource_name) for more information.",
+                    "type": "string"
+                },
+                "orgPolicy": {
+                    "description": "A representation of an [organization policy](https://cloud.google.com/resource-manager/docs/organization-policy/overview#organization_policy). There can be more than one organization policy with different constraints set on a given resource.",
+                    "items": {
+                        "$ref": "GoogleCloudOrgpolicyV1Policy"
+                    },
+                    "type": "array"
+                },
+                "relatedAssets": {
+                    "$ref": "GoogleCloudAssetV1p7beta1RelatedAssets",
+                    "description": "The related assets of the asset of one relationship type. One asset only represents one type of relationship."
+                },
+                "resource": {
+                    "$ref": "GoogleCloudAssetV1p7beta1Resource",
+                    "description": "A representation of the resource."
+                },
+                "servicePerimeter": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1ServicePerimeter",
+                    "description": "Please also refer to the [service perimeter user guide](https://cloud.google.com/vpc-service-controls/docs/overview)."
+                },
+                "updateTime": {
+                    "description": "The last update timestamp of an asset. update_time is updated when create/update/delete operation is performed.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1RelatedAsset": {
+            "description": "An asset identify in Google Cloud which contains its name, type and ancestors. An asset can be any resource in the Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), a resource outside the Google Cloud resource hierarchy (such as Google Kubernetes Engine clusters and objects), or a policy (e.g. Cloud IAM policy). See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+            "id": "GoogleCloudAssetV1p7beta1RelatedAsset",
+            "properties": {
+                "ancestors": {
+                    "description": "The ancestors of an asset in Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), represented as a list of relative resource names. An ancestry path starts with the closest ancestor in the hierarchy and ends at root. Example: `[\"projects/123456789\", \"folders/5432\", \"organizations/1234\"]`",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "asset": {
+                    "description": "The full name of the asset. Example: `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1` See [Resource names](https://cloud.google.com/apis/design/resource_names#full_resource_name) for more information.",
+                    "type": "string"
+                },
+                "assetType": {
+                    "description": "The type of the asset. Example: `compute.googleapis.com/Disk` See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1RelatedAssets": {
+            "description": "The detailed related assets with the `relationship_type`.",
+            "id": "GoogleCloudAssetV1p7beta1RelatedAssets",
+            "properties": {
+                "assets": {
+                    "description": "The peer resources of the relationship.",
+                    "items": {
+                        "$ref": "GoogleCloudAssetV1p7beta1RelatedAsset"
+                    },
+                    "type": "array"
+                },
+                "relationshipAttributes": {
+                    "$ref": "GoogleCloudAssetV1p7beta1RelationshipAttributes",
+                    "description": "The detailed relation attributes."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1RelationshipAttributes": {
+            "description": "The relationship attributes which include `type`, `source_resource_type`, `target_resource_type` and `action`.",
+            "id": "GoogleCloudAssetV1p7beta1RelationshipAttributes",
+            "properties": {
+                "action": {
+                    "description": "The detail of the relationship, e.g. `contains`, `attaches`",
+                    "type": "string"
+                },
+                "sourceResourceType": {
+                    "description": "The source asset type. Example: `compute.googleapis.com/Instance`",
+                    "type": "string"
+                },
+                "targetResourceType": {
+                    "description": "The target asset type. Example: `compute.googleapis.com/Disk`",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "The unique identifier of the relationship type. Example: `INSTANCE_TO_INSTANCEGROUP`",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1Resource": {
+            "description": "A representation of a Google Cloud resource.",
+            "id": "GoogleCloudAssetV1p7beta1Resource",
+            "properties": {
+                "data": {
+                    "additionalProperties": {
+                        "description": "Properties of the object.",
+                        "type": "any"
+                    },
+                    "description": "The content of the resource, in which some sensitive fields are removed and may not be present.",
+                    "type": "object"
+                },
+                "discoveryDocumentUri": {
+                    "description": "The URL of the discovery document containing the resource's JSON schema. Example: `https://www.googleapis.com/discovery/v1/apis/compute/v1/rest` This value is unspecified for resources that do not have an API based on a discovery document, such as Cloud Bigtable.",
+                    "type": "string"
+                },
+                "discoveryName": {
+                    "description": "The JSON schema name listed in the discovery document. Example: `Project` This value is unspecified for resources that do not have an API based on a discovery document, such as Cloud Bigtable.",
+                    "type": "string"
+                },
+                "location": {
+                    "description": "The location of the resource in Google Cloud, such as its zone and region. For more information, see https://cloud.google.com/about/locations/.",
+                    "type": "string"
+                },
+                "parent": {
+                    "description": "The full name of the immediate parent of this resource. See [Resource Names](https://cloud.google.com/apis/design/resource_names#full_resource_name) for more information. For Google Cloud assets, this value is the parent resource defined in the [Cloud IAM policy hierarchy](https://cloud.google.com/iam/docs/overview#policy_hierarchy). Example: `//cloudresourcemanager.googleapis.com/projects/my_project_123` For third-party assets, this field may be set differently.",
+                    "type": "string"
+                },
+                "resourceUrl": {
+                    "description": "The REST URL for accessing the resource. An HTTP `GET` request using this URL returns the resource itself. Example: `https://cloudresourcemanager.googleapis.com/v1/projects/my-project-123` This value is unspecified for resources without a REST API.",
+                    "type": "string"
+                },
+                "version": {
+                    "description": "The API version. Example: `v1`",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
         "GoogleCloudOrgpolicyV1BooleanPolicy": {
             "description": "Used in `policy_type` to specify how `boolean_policy` will behave at this resource.",
             "id": "GoogleCloudOrgpolicyV1BooleanPolicy",
diff --git a/googleapiclient/discovery_cache/documents/cloudasset.v1p7beta1.json b/googleapiclient/discovery_cache/documents/cloudasset.v1p7beta1.json
index 1157fb3..ee0a2a4 100644
--- a/googleapiclient/discovery_cache/documents/cloudasset.v1p7beta1.json
+++ b/googleapiclient/discovery_cache/documents/cloudasset.v1p7beta1.json
@@ -1,339 +1,1246 @@
 {
-  "id": "cloudasset:v1p7beta1",
-  "ownerName": "Google",
-  "documentationLink": "https://cloud.google.com/asset-inventory/docs/quickstart",
-  "baseUrl": "https://cloudasset.googleapis.com/",
-  "resources": {
-    "v1p7beta1": {
-      "methods": {
-        "exportAssets": {
-          "id": "cloudasset.exportAssets",
-          "flatPath": "v1p7beta1/{v1p7beta1Id}/{v1p7beta1Id1}:exportAssets",
-          "httpMethod": "POST",
-          "description": "Exports assets with time and resource types to a given Cloud Storage location/BigQuery table. For Cloud Storage location destinations, the output format is newline-delimited JSON. Each line represents a google.cloud.asset.v1p7beta1.Asset in the JSON format; for BigQuery table destinations, the output table stores the fields in asset proto as columns. This API implements the google.longrunning.Operation API , which allows you to keep track of the export. We recommend intervals of at least 2 seconds with exponential retry to poll the export operation result. For regular-size resource parent, the export operation usually finishes within 5 minutes.",
-          "path": "v1p7beta1/{+parent}:exportAssets",
-          "parameters": {
-            "parent": {
-              "description": "Required. The relative name of the root asset. This can only be an organization number (such as \"organizations/123\"), a project ID (such as \"projects/my-project-id\"), or a project number (such as \"projects/12345\"), or a folder number (such as \"folders/123\").",
-              "pattern": "^[^/]+/[^/]+$",
-              "type": "string",
-              "location": "path",
-              "required": true
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
+                }
             }
-          },
-          "parameterOrder": [
-            "parent"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "request": {
-            "$ref": "ExportAssetsRequest"
-          },
-          "response": {
-            "$ref": "Operation"
-          }
         }
-      }
-    }
-  },
-  "canonicalName": "Cloud Asset",
-  "title": "Cloud Asset API",
-  "description": "The cloud asset API manages the history and inventory of cloud resources.",
-  "name": "cloudasset",
-  "version": "v1p7beta1",
-  "basePath": "",
-  "ownerDomain": "google.com",
-  "parameters": {
-    "$.xgafv": {
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "description": "V1 error format.",
-      "type": "string",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "location": "query"
     },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
+    "basePath": "",
+    "baseUrl": "https://cloudasset.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Cloud Asset",
+    "description": "The cloud asset API manages the history and inventory of cloud resources.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/asset-inventory/docs/quickstart",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
     },
-    "fields": {
-      "location": "query",
-      "type": "string",
-      "description": "Selector specifying which fields to include in a partial response."
-    },
-    "upload_protocol": {
-      "location": "query",
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
-    },
-    "callback": {
-      "type": "string",
-      "location": "query",
-      "description": "JSONP"
-    },
-    "oauth_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user."
-    },
-    "key": {
-      "type": "string",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "location": "query"
-    },
-    "quotaUser": {
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "location": "query",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "location": "query",
-      "default": "true",
-      "type": "boolean"
-    },
-    "access_token": {
-      "location": "query",
-      "type": "string",
-      "description": "OAuth access token."
-    },
-    "alt": {
-      "location": "query",
-      "type": "string",
-      "description": "Data format for response.",
-      "default": "json",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ]
-    }
-  },
-  "batchPath": "batch",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "servicePath": "",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "revision": "20210209",
-  "protocol": "rest",
-  "mtlsRootUrl": "https://cloudasset.mtls.googleapis.com/",
-  "version_module": true,
-  "discoveryVersion": "v1",
-  "rootUrl": "https://cloudasset.googleapis.com/",
-  "fullyEncodeReservedExpansion": true,
-  "kind": "discovery#restDescription",
-  "schemas": {
-    "PartitionSpec": {
-      "type": "object",
-      "id": "PartitionSpec",
-      "description": "Specifications of BigQuery partitioned table as export destination.",
-      "properties": {
-        "partitionKey": {
-          "enum": [
-            "PARTITION_KEY_UNSPECIFIED",
-            "READ_TIME",
-            "REQUEST_TIME"
-          ],
-          "enumDescriptions": [
-            "Unspecified partition key. If used, it means using non-partitioned table.",
-            "The time when the snapshot is taken. If specified as partition key, the result table(s) is partitoned by the additional timestamp column, readTime. If [read_time] in ExportAssetsRequest is specified, the readTime column's value will be the same as it. Otherwise, its value will be the current time that is used to take the snapshot.",
-            "The time when the request is received and started to be processed. If specified as partition key, the result table(s) is partitoned by the requestTime column, an additional timestamp column representing when the request was received."
-          ],
-          "description": "The partition key for BigQuery partitioned table.",
-          "type": "string"
-        }
-      }
-    },
-    "OutputConfig": {
-      "type": "object",
-      "properties": {
-        "bigqueryDestination": {
-          "$ref": "BigQueryDestination",
-          "description": "Destination on BigQuery. The output table stores the fields in asset proto as columns in BigQuery."
-        },
-        "gcsDestination": {
-          "$ref": "GcsDestination",
-          "description": "Destination on Cloud Storage."
-        }
-      },
-      "description": "Output configuration for export assets destination.",
-      "id": "OutputConfig"
-    },
-    "GcsDestination": {
-      "properties": {
-        "uri": {
-          "description": "The uri of the Cloud Storage object. It's the same uri that is used by gsutil. Example: \"gs://bucket_name/object_name\". See [Viewing and Editing Object Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata) for more information.",
-          "type": "string"
-        },
-        "uriPrefix": {
-          "type": "string",
-          "description": "The uri prefix of all generated Cloud Storage objects. Example: \"gs://bucket_name/object_name_prefix\". Each object uri is in format: \"gs://bucket_name/object_name_prefix/{ASSET_TYPE}/{SHARD_NUMBER} and only contains assets for that type. starts from 0. Example: \"gs://bucket_name/object_name_prefix/compute.googleapis.com/Disk/0\" is the first shard of output objects containing all compute.googleapis.com/Disk assets. An INVALID_ARGUMENT error will be returned if file with the same name \"gs://bucket_name/object_name_prefix\" already exists."
-        }
-      },
-      "description": "A Cloud Storage location.",
-      "id": "GcsDestination",
-      "type": "object"
-    },
-    "Operation": {
-      "description": "This resource represents a long-running operation that is the result of a network API call.",
-      "id": "Operation",
-      "properties": {
-        "error": {
-          "description": "The error result of the operation in case of failure or cancellation.",
-          "$ref": "Status"
-        },
-        "name": {
-          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
-          "type": "string"
-        },
-        "metadata": {
-          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "type": "object"
-        },
-        "response": {
-          "type": "object",
-          "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          }
-        },
-        "done": {
-          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
-          "type": "boolean"
-        }
-      },
-      "type": "object"
-    },
-    "ExportAssetsRequest": {
-      "type": "object",
-      "properties": {
-        "assetTypes": {
-          "description": "A list of asset types to take a snapshot for. For example: \"compute.googleapis.com/Disk\". Regular expressions are also supported. For example: * \"compute.googleapis.com.*\" snapshots resources whose asset type starts with \"compute.googleapis.com\". * \".*Instance\" snapshots resources whose asset type ends with \"Instance\". * \".*Instance.*\" snapshots resources whose asset type contains \"Instance\". See [RE2](https://github.com/google/re2/wiki/Syntax) for all supported regular expression syntax. If the regular expression does not match any supported asset type, an INVALID_ARGUMENT error will be returned. If specified, only matching assets will be returned, otherwise, it will snapshot all asset types. See [Introduction to Cloud Asset Inventory](https://cloud.google.com/asset-inventory/docs/overview) for all supported asset types.",
-          "items": {
+    "id": "cloudasset:v1p7beta1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://cloudasset.mtls.googleapis.com/",
+    "name": "cloudasset",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
             "type": "string"
-          },
-          "type": "array"
         },
-        "relationshipTypes": {
-          "description": "A list of relationship types to export, for example: `INSTANCE_TO_INSTANCEGROUP`. This field should only be specified if content_type=RELATIONSHIP. If specified, it will snapshot [asset_types]' specified relationships, or give errors if any relationship_types' supported types are not in [asset_types]. If not specified, it will snapshot all [asset_types]' supported relationships. An unspecified [asset_types] field means all supported asset_types. See [Introduction to Cloud Asset Inventory](https://cloud.google.com/asset-inventory/docs/overview) for all supported asset types and relationship types.",
-          "items": {
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
             "type": "string"
-          },
-          "type": "array"
         },
-        "contentType": {
-          "enum": [
-            "CONTENT_TYPE_UNSPECIFIED",
-            "RESOURCE",
-            "IAM_POLICY",
-            "ORG_POLICY",
-            "ACCESS_POLICY",
-            "RELATIONSHIP"
-          ],
-          "description": "Asset content type. If not specified, no content but the asset name will be returned.",
-          "enumDescriptions": [
-            "Unspecified content type.",
-            "Resource metadata.",
-            "The actual IAM policy set on a resource.",
-            "The Cloud Organization Policy set on an asset.",
-            "The Cloud Access context manager Policy set on an asset.",
-            "The related resources."
-          ],
-          "type": "string"
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "readTime": {
-          "type": "string",
-          "description": "Timestamp to take an asset snapshot. This can only be set to a timestamp between the current time and the current time minus 35 days (inclusive). If not specified, the current time will be used. Due to delays in resource data collection and indexing, there is a volatile window during which running the same query may get different results.",
-          "format": "google-datetime"
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
         },
-        "outputConfig": {
-          "$ref": "OutputConfig",
-          "description": "Required. Output configuration indicating where the results will be output to."
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      },
-      "id": "ExportAssetsRequest",
-      "description": "Export asset request."
     },
-    "BigQueryDestination": {
-      "properties": {
-        "separateTablesPerAssetType": {
-          "description": "If this flag is `TRUE`, the snapshot results will be written to one or multiple tables, each of which contains results of one asset type. The [force] and [partition_spec] fields will apply to each of them. Field [table] will be concatenated with \"_\" and the asset type names (see https://cloud.google.com/asset-inventory/docs/supported-asset-types for supported asset types) to construct per-asset-type table names, in which all non-alphanumeric characters like \".\" and \"/\" will be substituted by \"_\". Example: if field [table] is \"mytable\" and snapshot results contain \"storage.googleapis.com/Bucket\" assets, the corresponding table name will be \"mytable_storage_googleapis_com_Bucket\". If any of these tables does not exist, a new table with the concatenated name will be created. When [content_type] in the ExportAssetsRequest is `RESOURCE`, the schema of each table will include RECORD-type columns mapped to the nested fields in the Asset.resource.data field of that asset type (up to the 15 nested level BigQuery supports (https://cloud.google.com/bigquery/docs/nested-repeated#limitations)). The fields in \u003e15 nested levels will be stored in JSON format string as a child column of its parent RECORD column. If error occurs when exporting to any table, the whole export call will return an error but the export results that already succeed will persist. Example: if exporting to table_type_A succeeds when exporting to table_type_B fails during one export call, the results in table_type_A will persist and there will not be partial results persisting in a table.",
-          "type": "boolean"
-        },
-        "partitionSpec": {
-          "description": "[partition_spec] determines whether to export to partitioned table(s) and how to partition the data. If [partition_spec] is unset or [partition_spec.partition_key] is unset or `PARTITION_KEY_UNSPECIFIED`, the snapshot results will be exported to non-partitioned table(s). [force] will decide whether to overwrite existing table(s). If [partition_spec] is specified. First, the snapshot results will be written to partitioned table(s) with two additional timestamp columns, readTime and requestTime, one of which will be the partition key. Secondly, in the case when any destination table already exists, it will first try to update existing table's schema as necessary by appending additional columns. Then, if [force] is `TRUE`, the corresponding partition will be overwritten by the snapshot results (data in different partitions will remain intact); if [force] is unset or `FALSE`, it will append the data. An error will be returned if the schema update or data appension fails.",
-          "$ref": "PartitionSpec"
-        },
-        "table": {
-          "description": "Required. The BigQuery table to which the snapshot result should be written. If this table does not exist, a new table with the given name will be created.",
-          "type": "string"
-        },
-        "force": {
-          "type": "boolean",
-          "description": "If the destination table already exists and this flag is `TRUE`, the table will be overwritten by the contents of assets snapshot. If the flag is `FALSE` or unset and the destination table already exists, the export call returns an INVALID_ARGUMEMT error."
-        },
-        "dataset": {
-          "type": "string",
-          "description": "Required. The BigQuery dataset in format \"projects/projectId/datasets/datasetId\", to which the snapshot result should be exported. If this dataset does not exist, the export call returns an INVALID_ARGUMENT error."
+    "protocol": "rest",
+    "resources": {
+        "v1p7beta1": {
+            "methods": {
+                "exportAssets": {
+                    "description": "Exports assets with time and resource types to a given Cloud Storage location/BigQuery table. For Cloud Storage location destinations, the output format is newline-delimited JSON. Each line represents a google.cloud.asset.v1p7beta1.Asset in the JSON format; for BigQuery table destinations, the output table stores the fields in asset proto as columns. This API implements the google.longrunning.Operation API , which allows you to keep track of the export. We recommend intervals of at least 2 seconds with exponential retry to poll the export operation result. For regular-size resource parent, the export operation usually finishes within 5 minutes.",
+                    "flatPath": "v1p7beta1/{v1p7beta1Id}/{v1p7beta1Id1}:exportAssets",
+                    "httpMethod": "POST",
+                    "id": "cloudasset.exportAssets",
+                    "parameterOrder": [
+                        "parent"
+                    ],
+                    "parameters": {
+                        "parent": {
+                            "description": "Required. The relative name of the root asset. This can only be an organization number (such as \"organizations/123\"), a project ID (such as \"projects/my-project-id\"), or a project number (such as \"projects/12345\"), or a folder number (such as \"folders/123\").",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1p7beta1/{+parent}:exportAssets",
+                    "request": {
+                        "$ref": "GoogleCloudAssetV1p7beta1ExportAssetsRequest"
+                    },
+                    "response": {
+                        "$ref": "Operation"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                    ]
+                }
+            }
         }
-      },
-      "id": "BigQueryDestination",
-      "description": "A BigQuery destination for exporting assets to.",
-      "type": "object"
     },
-    "Status": {
-      "type": "object",
-      "properties": {
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
-          "type": "string"
-        },
-        "code": {
-          "type": "integer",
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "format": "int32"
-        },
-        "details": {
-          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
-          "items": {
-            "additionalProperties": {
-              "type": "any",
-              "description": "Properties of the object. Contains field @type with type URL."
+    "revision": "20210226",
+    "rootUrl": "https://cloudasset.googleapis.com/",
+    "schemas": {
+        "AuditConfig": {
+            "description": "Specifies the audit configuration for a service. The configuration determines which permission types are logged, and what identities, if any, are exempted from logging. An AuditConfig must have one or more AuditLogConfigs. If there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is used for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each AuditLogConfig are exempted. Example Policy with multiple AuditConfigs: { \"audit_configs\": [ { \"service\": \"allServices\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" }, { \"log_type\": \"ADMIN_READ\" } ] }, { \"service\": \"sampleservice.googleapis.com\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\" }, { \"log_type\": \"DATA_WRITE\", \"exempted_members\": [ \"user:aliya@example.com\" ] } ] } ] } For sampleservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ logging. It also exempts jose@example.com from DATA_READ logging, and aliya@example.com from DATA_WRITE logging.",
+            "id": "AuditConfig",
+            "properties": {
+                "auditLogConfigs": {
+                    "description": "The configuration for logging of each type of permission.",
+                    "items": {
+                        "$ref": "AuditLogConfig"
+                    },
+                    "type": "array"
+                },
+                "service": {
+                    "description": "Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices` is a special value that covers all services.",
+                    "type": "string"
+                }
             },
             "type": "object"
-          },
-          "type": "array"
+        },
+        "AuditLogConfig": {
+            "description": "Provides the configuration for logging a type of permissions. Example: { \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" } ] } This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting jose@example.com from DATA_READ logging.",
+            "id": "AuditLogConfig",
+            "properties": {
+                "exemptedMembers": {
+                    "description": "Specifies the identities that do not cause logging for this type of permission. Follows the same format of Binding.members.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "logType": {
+                    "description": "The log type that this config enables.",
+                    "enum": [
+                        "LOG_TYPE_UNSPECIFIED",
+                        "ADMIN_READ",
+                        "DATA_WRITE",
+                        "DATA_READ"
+                    ],
+                    "enumDescriptions": [
+                        "Default case. Should never be this.",
+                        "Admin reads. Example: CloudIAM getIamPolicy",
+                        "Data writes. Example: CloudSQL Users create",
+                        "Data reads. Example: CloudSQL Users list"
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Binding": {
+            "description": "Associates `members` with a `role`.",
+            "id": "Binding",
+            "properties": {
+                "condition": {
+                    "$ref": "Expr",
+                    "description": "The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)."
+                },
+                "members": {
+                    "description": "Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. ",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "role": {
+                    "description": "Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Expr": {
+            "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.",
+            "id": "Expr",
+            "properties": {
+                "description": {
+                    "description": "Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.",
+                    "type": "string"
+                },
+                "expression": {
+                    "description": "Textual representation of an expression in Common Expression Language syntax.",
+                    "type": "string"
+                },
+                "location": {
+                    "description": "Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1Asset": {
+            "description": "An asset in Google Cloud. An asset can be any resource in the Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), a resource outside the Google Cloud resource hierarchy (such as Google Kubernetes Engine clusters and objects), or a policy (e.g. Cloud IAM policy). See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+            "id": "GoogleCloudAssetV1p7beta1Asset",
+            "properties": {
+                "accessLevel": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1AccessLevel",
+                    "description": "Please also refer to the [access level user guide](https://cloud.google.com/access-context-manager/docs/overview#access-levels)."
+                },
+                "accessPolicy": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1AccessPolicy",
+                    "description": "Please also refer to the [access policy user guide](https://cloud.google.com/access-context-manager/docs/overview#access-policies)."
+                },
+                "ancestors": {
+                    "description": "The ancestry path of an asset in Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), represented as a list of relative resource names. An ancestry path starts with the closest ancestor in the hierarchy and ends at root. If the asset is a project, folder, or organization, the ancestry path starts from the asset itself. Example: `[\"projects/123456789\", \"folders/5432\", \"organizations/1234\"]`",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "assetType": {
+                    "description": "The type of the asset. Example: `compute.googleapis.com/Disk` See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+                    "type": "string"
+                },
+                "iamPolicy": {
+                    "$ref": "Policy",
+                    "description": "A representation of the Cloud IAM policy set on a Google Cloud resource. There can be a maximum of one Cloud IAM policy set on any given resource. In addition, Cloud IAM policies inherit their granted access scope from any policies set on parent resources in the resource hierarchy. Therefore, the effectively policy is the union of both the policy set on this resource and each policy set on all of the resource's ancestry resource levels in the hierarchy. See [this topic](https://cloud.google.com/iam/docs/policies#inheritance) for more information."
+                },
+                "name": {
+                    "description": "The full name of the asset. Example: `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1` See [Resource names](https://cloud.google.com/apis/design/resource_names#full_resource_name) for more information.",
+                    "type": "string"
+                },
+                "orgPolicy": {
+                    "description": "A representation of an [organization policy](https://cloud.google.com/resource-manager/docs/organization-policy/overview#organization_policy). There can be more than one organization policy with different constraints set on a given resource.",
+                    "items": {
+                        "$ref": "GoogleCloudOrgpolicyV1Policy"
+                    },
+                    "type": "array"
+                },
+                "relatedAssets": {
+                    "$ref": "GoogleCloudAssetV1p7beta1RelatedAssets",
+                    "description": "The related assets of the asset of one relationship type. One asset only represents one type of relationship."
+                },
+                "resource": {
+                    "$ref": "GoogleCloudAssetV1p7beta1Resource",
+                    "description": "A representation of the resource."
+                },
+                "servicePerimeter": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1ServicePerimeter",
+                    "description": "Please also refer to the [service perimeter user guide](https://cloud.google.com/vpc-service-controls/docs/overview)."
+                },
+                "updateTime": {
+                    "description": "The last update timestamp of an asset. update_time is updated when create/update/delete operation is performed.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1BigQueryDestination": {
+            "description": "A BigQuery destination for exporting assets to.",
+            "id": "GoogleCloudAssetV1p7beta1BigQueryDestination",
+            "properties": {
+                "dataset": {
+                    "description": "Required. The BigQuery dataset in format \"projects/projectId/datasets/datasetId\", to which the snapshot result should be exported. If this dataset does not exist, the export call returns an INVALID_ARGUMENT error.",
+                    "type": "string"
+                },
+                "force": {
+                    "description": "If the destination table already exists and this flag is `TRUE`, the table will be overwritten by the contents of assets snapshot. If the flag is `FALSE` or unset and the destination table already exists, the export call returns an INVALID_ARGUMEMT error.",
+                    "type": "boolean"
+                },
+                "partitionSpec": {
+                    "$ref": "GoogleCloudAssetV1p7beta1PartitionSpec",
+                    "description": "[partition_spec] determines whether to export to partitioned table(s) and how to partition the data. If [partition_spec] is unset or [partition_spec.partition_key] is unset or `PARTITION_KEY_UNSPECIFIED`, the snapshot results will be exported to non-partitioned table(s). [force] will decide whether to overwrite existing table(s). If [partition_spec] is specified. First, the snapshot results will be written to partitioned table(s) with two additional timestamp columns, readTime and requestTime, one of which will be the partition key. Secondly, in the case when any destination table already exists, it will first try to update existing table's schema as necessary by appending additional columns. Then, if [force] is `TRUE`, the corresponding partition will be overwritten by the snapshot results (data in different partitions will remain intact); if [force] is unset or `FALSE`, it will append the data. An error will be returned if the schema update or data appension fails."
+                },
+                "separateTablesPerAssetType": {
+                    "description": "If this flag is `TRUE`, the snapshot results will be written to one or multiple tables, each of which contains results of one asset type. The [force] and [partition_spec] fields will apply to each of them. Field [table] will be concatenated with \"_\" and the asset type names (see https://cloud.google.com/asset-inventory/docs/supported-asset-types for supported asset types) to construct per-asset-type table names, in which all non-alphanumeric characters like \".\" and \"/\" will be substituted by \"_\". Example: if field [table] is \"mytable\" and snapshot results contain \"storage.googleapis.com/Bucket\" assets, the corresponding table name will be \"mytable_storage_googleapis_com_Bucket\". If any of these tables does not exist, a new table with the concatenated name will be created. When [content_type] in the ExportAssetsRequest is `RESOURCE`, the schema of each table will include RECORD-type columns mapped to the nested fields in the Asset.resource.data field of that asset type (up to the 15 nested level BigQuery supports (https://cloud.google.com/bigquery/docs/nested-repeated#limitations)). The fields in >15 nested levels will be stored in JSON format string as a child column of its parent RECORD column. If error occurs when exporting to any table, the whole export call will return an error but the export results that already succeed will persist. Example: if exporting to table_type_A succeeds when exporting to table_type_B fails during one export call, the results in table_type_A will persist and there will not be partial results persisting in a table.",
+                    "type": "boolean"
+                },
+                "table": {
+                    "description": "Required. The BigQuery table to which the snapshot result should be written. If this table does not exist, a new table with the given name will be created.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1ExportAssetsRequest": {
+            "description": "Export asset request.",
+            "id": "GoogleCloudAssetV1p7beta1ExportAssetsRequest",
+            "properties": {
+                "assetTypes": {
+                    "description": "A list of asset types to take a snapshot for. For example: \"compute.googleapis.com/Disk\". Regular expressions are also supported. For example: * \"compute.googleapis.com.*\" snapshots resources whose asset type starts with \"compute.googleapis.com\". * \".*Instance\" snapshots resources whose asset type ends with \"Instance\". * \".*Instance.*\" snapshots resources whose asset type contains \"Instance\". See [RE2](https://github.com/google/re2/wiki/Syntax) for all supported regular expression syntax. If the regular expression does not match any supported asset type, an INVALID_ARGUMENT error will be returned. If specified, only matching assets will be returned, otherwise, it will snapshot all asset types. See [Introduction to Cloud Asset Inventory](https://cloud.google.com/asset-inventory/docs/overview) for all supported asset types.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "contentType": {
+                    "description": "Asset content type. If not specified, no content but the asset name will be returned.",
+                    "enum": [
+                        "CONTENT_TYPE_UNSPECIFIED",
+                        "RESOURCE",
+                        "IAM_POLICY",
+                        "ORG_POLICY",
+                        "ACCESS_POLICY",
+                        "RELATIONSHIP"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified content type.",
+                        "Resource metadata.",
+                        "The actual IAM policy set on a resource.",
+                        "The Cloud Organization Policy set on an asset.",
+                        "The Cloud Access context manager Policy set on an asset.",
+                        "The related resources."
+                    ],
+                    "type": "string"
+                },
+                "outputConfig": {
+                    "$ref": "GoogleCloudAssetV1p7beta1OutputConfig",
+                    "description": "Required. Output configuration indicating where the results will be output to."
+                },
+                "readTime": {
+                    "description": "Timestamp to take an asset snapshot. This can only be set to a timestamp between the current time and the current time minus 35 days (inclusive). If not specified, the current time will be used. Due to delays in resource data collection and indexing, there is a volatile window during which running the same query may get different results.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "relationshipTypes": {
+                    "description": "A list of relationship types to export, for example: `INSTANCE_TO_INSTANCEGROUP`. This field should only be specified if content_type=RELATIONSHIP. If specified, it will snapshot [asset_types]' specified relationships, or give errors if any relationship_types' supported types are not in [asset_types]. If not specified, it will snapshot all [asset_types]' supported relationships. An unspecified [asset_types] field means all supported asset_types. See [Introduction to Cloud Asset Inventory](https://cloud.google.com/asset-inventory/docs/overview) for all supported asset types and relationship types.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1GcsDestination": {
+            "description": "A Cloud Storage location.",
+            "id": "GoogleCloudAssetV1p7beta1GcsDestination",
+            "properties": {
+                "uri": {
+                    "description": "The uri of the Cloud Storage object. It's the same uri that is used by gsutil. Example: \"gs://bucket_name/object_name\". See [Viewing and Editing Object Metadata](https://cloud.google.com/storage/docs/viewing-editing-metadata) for more information.",
+                    "type": "string"
+                },
+                "uriPrefix": {
+                    "description": "The uri prefix of all generated Cloud Storage objects. Example: \"gs://bucket_name/object_name_prefix\". Each object uri is in format: \"gs://bucket_name/object_name_prefix/{ASSET_TYPE}/{SHARD_NUMBER} and only contains assets for that type. starts from 0. Example: \"gs://bucket_name/object_name_prefix/compute.googleapis.com/Disk/0\" is the first shard of output objects containing all compute.googleapis.com/Disk assets. An INVALID_ARGUMENT error will be returned if file with the same name \"gs://bucket_name/object_name_prefix\" already exists.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1OutputConfig": {
+            "description": "Output configuration for export assets destination.",
+            "id": "GoogleCloudAssetV1p7beta1OutputConfig",
+            "properties": {
+                "bigqueryDestination": {
+                    "$ref": "GoogleCloudAssetV1p7beta1BigQueryDestination",
+                    "description": "Destination on BigQuery. The output table stores the fields in asset proto as columns in BigQuery."
+                },
+                "gcsDestination": {
+                    "$ref": "GoogleCloudAssetV1p7beta1GcsDestination",
+                    "description": "Destination on Cloud Storage."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1PartitionSpec": {
+            "description": "Specifications of BigQuery partitioned table as export destination.",
+            "id": "GoogleCloudAssetV1p7beta1PartitionSpec",
+            "properties": {
+                "partitionKey": {
+                    "description": "The partition key for BigQuery partitioned table.",
+                    "enum": [
+                        "PARTITION_KEY_UNSPECIFIED",
+                        "READ_TIME",
+                        "REQUEST_TIME"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified partition key. If used, it means using non-partitioned table.",
+                        "The time when the snapshot is taken. If specified as partition key, the result table(s) is partitoned by the additional timestamp column, readTime. If [read_time] in ExportAssetsRequest is specified, the readTime column's value will be the same as it. Otherwise, its value will be the current time that is used to take the snapshot.",
+                        "The time when the request is received and started to be processed. If specified as partition key, the result table(s) is partitoned by the requestTime column, an additional timestamp column representing when the request was received."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1RelatedAsset": {
+            "description": "An asset identify in Google Cloud which contains its name, type and ancestors. An asset can be any resource in the Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), a resource outside the Google Cloud resource hierarchy (such as Google Kubernetes Engine clusters and objects), or a policy (e.g. Cloud IAM policy). See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+            "id": "GoogleCloudAssetV1p7beta1RelatedAsset",
+            "properties": {
+                "ancestors": {
+                    "description": "The ancestors of an asset in Google Cloud [resource hierarchy](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), represented as a list of relative resource names. An ancestry path starts with the closest ancestor in the hierarchy and ends at root. Example: `[\"projects/123456789\", \"folders/5432\", \"organizations/1234\"]`",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "asset": {
+                    "description": "The full name of the asset. Example: `//compute.googleapis.com/projects/my_project_123/zones/zone1/instances/instance1` See [Resource names](https://cloud.google.com/apis/design/resource_names#full_resource_name) for more information.",
+                    "type": "string"
+                },
+                "assetType": {
+                    "description": "The type of the asset. Example: `compute.googleapis.com/Disk` See [Supported asset types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) for more information.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1RelatedAssets": {
+            "description": "The detailed related assets with the `relationship_type`.",
+            "id": "GoogleCloudAssetV1p7beta1RelatedAssets",
+            "properties": {
+                "assets": {
+                    "description": "The peer resources of the relationship.",
+                    "items": {
+                        "$ref": "GoogleCloudAssetV1p7beta1RelatedAsset"
+                    },
+                    "type": "array"
+                },
+                "relationshipAttributes": {
+                    "$ref": "GoogleCloudAssetV1p7beta1RelationshipAttributes",
+                    "description": "The detailed relation attributes."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1RelationshipAttributes": {
+            "description": "The relationship attributes which include `type`, `source_resource_type`, `target_resource_type` and `action`.",
+            "id": "GoogleCloudAssetV1p7beta1RelationshipAttributes",
+            "properties": {
+                "action": {
+                    "description": "The detail of the relationship, e.g. `contains`, `attaches`",
+                    "type": "string"
+                },
+                "sourceResourceType": {
+                    "description": "The source asset type. Example: `compute.googleapis.com/Instance`",
+                    "type": "string"
+                },
+                "targetResourceType": {
+                    "description": "The target asset type. Example: `compute.googleapis.com/Disk`",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "The unique identifier of the relationship type. Example: `INSTANCE_TO_INSTANCEGROUP`",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudAssetV1p7beta1Resource": {
+            "description": "A representation of a Google Cloud resource.",
+            "id": "GoogleCloudAssetV1p7beta1Resource",
+            "properties": {
+                "data": {
+                    "additionalProperties": {
+                        "description": "Properties of the object.",
+                        "type": "any"
+                    },
+                    "description": "The content of the resource, in which some sensitive fields are removed and may not be present.",
+                    "type": "object"
+                },
+                "discoveryDocumentUri": {
+                    "description": "The URL of the discovery document containing the resource's JSON schema. Example: `https://www.googleapis.com/discovery/v1/apis/compute/v1/rest` This value is unspecified for resources that do not have an API based on a discovery document, such as Cloud Bigtable.",
+                    "type": "string"
+                },
+                "discoveryName": {
+                    "description": "The JSON schema name listed in the discovery document. Example: `Project` This value is unspecified for resources that do not have an API based on a discovery document, such as Cloud Bigtable.",
+                    "type": "string"
+                },
+                "location": {
+                    "description": "The location of the resource in Google Cloud, such as its zone and region. For more information, see https://cloud.google.com/about/locations/.",
+                    "type": "string"
+                },
+                "parent": {
+                    "description": "The full name of the immediate parent of this resource. See [Resource Names](https://cloud.google.com/apis/design/resource_names#full_resource_name) for more information. For Google Cloud assets, this value is the parent resource defined in the [Cloud IAM policy hierarchy](https://cloud.google.com/iam/docs/overview#policy_hierarchy). Example: `//cloudresourcemanager.googleapis.com/projects/my_project_123` For third-party assets, this field may be set differently.",
+                    "type": "string"
+                },
+                "resourceUrl": {
+                    "description": "The REST URL for accessing the resource. An HTTP `GET` request using this URL returns the resource itself. Example: `https://cloudresourcemanager.googleapis.com/v1/projects/my-project-123` This value is unspecified for resources without a REST API.",
+                    "type": "string"
+                },
+                "version": {
+                    "description": "The API version. Example: `v1`",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudOrgpolicyV1BooleanPolicy": {
+            "description": "Used in `policy_type` to specify how `boolean_policy` will behave at this resource.",
+            "id": "GoogleCloudOrgpolicyV1BooleanPolicy",
+            "properties": {
+                "enforced": {
+                    "description": "If `true`, then the `Policy` is enforced. If `false`, then any configuration is acceptable. Suppose you have a `Constraint` `constraints/compute.disableSerialPortAccess` with `constraint_default` set to `ALLOW`. A `Policy` for that `Constraint` exhibits the following behavior: - If the `Policy` at this resource has enforced set to `false`, serial port connection attempts will be allowed. - If the `Policy` at this resource has enforced set to `true`, serial port connection attempts will be refused. - If the `Policy` at this resource is `RestoreDefault`, serial port connection attempts will be allowed. - If no `Policy` is set at this resource or anywhere higher in the resource hierarchy, serial port connection attempts will be allowed. - If no `Policy` is set at this resource, but one exists higher in the resource hierarchy, the behavior is as if the`Policy` were set at this resource. The following examples demonstrate the different possible layerings: Example 1 (nearest `Constraint` wins): `organizations/foo` has a `Policy` with: {enforced: false} `projects/bar` has no `Policy` set. The constraint at `projects/bar` and `organizations/foo` will not be enforced. Example 2 (enforcement gets replaced): `organizations/foo` has a `Policy` with: {enforced: false} `projects/bar` has a `Policy` with: {enforced: true} The constraint at `organizations/foo` is not enforced. The constraint at `projects/bar` is enforced. Example 3 (RestoreDefault): `organizations/foo` has a `Policy` with: {enforced: true} `projects/bar` has a `Policy` with: {RestoreDefault: {}} The constraint at `organizations/foo` is enforced. The constraint at `projects/bar` is not enforced, because `constraint_default` for the `Constraint` is `ALLOW`.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudOrgpolicyV1ListPolicy": {
+            "description": "Used in `policy_type` to specify how `list_policy` behaves at this resource. `ListPolicy` can define specific values and subtrees of Cloud Resource Manager resource hierarchy (`Organizations`, `Folders`, `Projects`) that are allowed or denied by setting the `allowed_values` and `denied_values` fields. This is achieved by using the `under:` and optional `is:` prefixes. The `under:` prefix is used to denote resource subtree values. The `is:` prefix is used to denote specific values, and is required only if the value contains a \":\". Values prefixed with \"is:\" are treated the same as values with no prefix. Ancestry subtrees must be in one of the following formats: - \"projects/\", e.g. \"projects/tokyo-rain-123\" - \"folders/\", e.g. \"folders/1234\" - \"organizations/\", e.g. \"organizations/1234\" The `supports_under` field of the associated `Constraint` defines whether ancestry prefixes can be used. You can set `allowed_values` and `denied_values` in the same `Policy` if `all_values` is `ALL_VALUES_UNSPECIFIED`. `ALLOW` or `DENY` are used to allow or deny all values. If `all_values` is set to either `ALLOW` or `DENY`, `allowed_values` and `denied_values` must be unset.",
+            "id": "GoogleCloudOrgpolicyV1ListPolicy",
+            "properties": {
+                "allValues": {
+                    "description": "The policy all_values state.",
+                    "enum": [
+                        "ALL_VALUES_UNSPECIFIED",
+                        "ALLOW",
+                        "DENY"
+                    ],
+                    "enumDescriptions": [
+                        "Indicates that allowed_values or denied_values must be set.",
+                        "A policy with this set allows all values.",
+                        "A policy with this set denies all values."
+                    ],
+                    "type": "string"
+                },
+                "allowedValues": {
+                    "description": "List of values allowed at this resource. Can only be set if `all_values` is set to `ALL_VALUES_UNSPECIFIED`.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "deniedValues": {
+                    "description": "List of values denied at this resource. Can only be set if `all_values` is set to `ALL_VALUES_UNSPECIFIED`.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "inheritFromParent": {
+                    "description": "Determines the inheritance behavior for this `Policy`. By default, a `ListPolicy` set at a resource supersedes any `Policy` set anywhere up the resource hierarchy. However, if `inherit_from_parent` is set to `true`, then the values from the effective `Policy` of the parent resource are inherited, meaning the values set in this `Policy` are added to the values inherited up the hierarchy. Setting `Policy` hierarchies that inherit both allowed values and denied values isn't recommended in most circumstances to keep the configuration simple and understandable. However, it is possible to set a `Policy` with `allowed_values` set that inherits a `Policy` with `denied_values` set. In this case, the values that are allowed must be in `allowed_values` and not present in `denied_values`. For example, suppose you have a `Constraint` `constraints/serviceuser.services`, which has a `constraint_type` of `list_constraint`, and with `constraint_default` set to `ALLOW`. Suppose that at the Organization level, a `Policy` is applied that restricts the allowed API activations to {`E1`, `E2`}. Then, if a `Policy` is applied to a project below the Organization that has `inherit_from_parent` set to `false` and field all_values set to DENY, then an attempt to activate any API will be denied. The following examples demonstrate different possible layerings for `projects/bar` parented by `organizations/foo`: Example 1 (no inherited values): `organizations/foo` has a `Policy` with values: {allowed_values: \"E1\" allowed_values:\"E2\"} `projects/bar` has `inherit_from_parent` `false` and values: {allowed_values: \"E3\" allowed_values: \"E4\"} The accepted values at `organizations/foo` are `E1`, `E2`. The accepted values at `projects/bar` are `E3`, and `E4`. Example 2 (inherited values): `organizations/foo` has a `Policy` with values: {allowed_values: \"E1\" allowed_values:\"E2\"} `projects/bar` has a `Policy` with values: {value: \"E3\" value: \"E4\" inherit_from_parent: true} The accepted values at `organizations/foo` are `E1`, `E2`. The accepted values at `projects/bar` are `E1`, `E2`, `E3`, and `E4`. Example 3 (inheriting both allowed and denied values): `organizations/foo` has a `Policy` with values: {allowed_values: \"E1\" allowed_values: \"E2\"} `projects/bar` has a `Policy` with: {denied_values: \"E1\"} The accepted values at `organizations/foo` are `E1`, `E2`. The value accepted at `projects/bar` is `E2`. Example 4 (RestoreDefault): `organizations/foo` has a `Policy` with values: {allowed_values: \"E1\" allowed_values:\"E2\"} `projects/bar` has a `Policy` with values: {RestoreDefault: {}} The accepted values at `organizations/foo` are `E1`, `E2`. The accepted values at `projects/bar` are either all or none depending on the value of `constraint_default` (if `ALLOW`, all; if `DENY`, none). Example 5 (no policy inherits parent policy): `organizations/foo` has no `Policy` set. `projects/bar` has no `Policy` set. The accepted values at both levels are either all or none depending on the value of `constraint_default` (if `ALLOW`, all; if `DENY`, none). Example 6 (ListConstraint allowing all): `organizations/foo` has a `Policy` with values: {allowed_values: \"E1\" allowed_values: \"E2\"} `projects/bar` has a `Policy` with: {all: ALLOW} The accepted values at `organizations/foo` are `E1`, E2`. Any value is accepted at `projects/bar`. Example 7 (ListConstraint allowing none): `organizations/foo` has a `Policy` with values: {allowed_values: \"E1\" allowed_values: \"E2\"} `projects/bar` has a `Policy` with: {all: DENY} The accepted values at `organizations/foo` are `E1`, E2`. No value is accepted at `projects/bar`. Example 10 (allowed and denied subtrees of Resource Manager hierarchy): Given the following resource hierarchy O1->{F1, F2}; F1->{P1}; F2->{P2, P3}, `organizations/foo` has a `Policy` with values: {allowed_values: \"under:organizations/O1\"} `projects/bar` has a `Policy` with: {allowed_values: \"under:projects/P3\"} {denied_values: \"under:folders/F2\"} The accepted values at `organizations/foo` are `organizations/O1`, `folders/F1`, `folders/F2`, `projects/P1`, `projects/P2`, `projects/P3`. The accepted values at `projects/bar` are `organizations/O1`, `folders/F1`, `projects/P1`.",
+                    "type": "boolean"
+                },
+                "suggestedValue": {
+                    "description": "Optional. The Google Cloud Console will try to default to a configuration that matches the value specified in this `Policy`. If `suggested_value` is not set, it will inherit the value specified higher in the hierarchy, unless `inherit_from_parent` is `false`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudOrgpolicyV1Policy": {
+            "description": "Defines a Cloud Organization `Policy` which is used to specify `Constraints` for configurations of Cloud Platform resources.",
+            "id": "GoogleCloudOrgpolicyV1Policy",
+            "properties": {
+                "booleanPolicy": {
+                    "$ref": "GoogleCloudOrgpolicyV1BooleanPolicy",
+                    "description": "For boolean `Constraints`, whether to enforce the `Constraint` or not."
+                },
+                "constraint": {
+                    "description": "The name of the `Constraint` the `Policy` is configuring, for example, `constraints/serviceuser.services`. A [list of available constraints](/resource-manager/docs/organization-policy/org-policy-constraints) is available. Immutable after creation.",
+                    "type": "string"
+                },
+                "etag": {
+                    "description": "An opaque tag indicating the current version of the `Policy`, used for concurrency control. When the `Policy` is returned from either a `GetPolicy` or a `ListOrgPolicy` request, this `etag` indicates the version of the current `Policy` to use when executing a read-modify-write loop. When the `Policy` is returned from a `GetEffectivePolicy` request, the `etag` will be unset. When the `Policy` is used in a `SetOrgPolicy` method, use the `etag` value that was returned from a `GetOrgPolicy` request as part of a read-modify-write loop for concurrency control. Not setting the `etag`in a `SetOrgPolicy` request will result in an unconditional write of the `Policy`.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "listPolicy": {
+                    "$ref": "GoogleCloudOrgpolicyV1ListPolicy",
+                    "description": "List of values either allowed or disallowed."
+                },
+                "restoreDefault": {
+                    "$ref": "GoogleCloudOrgpolicyV1RestoreDefault",
+                    "description": "Restores the default behavior of the constraint; independent of `Constraint` type."
+                },
+                "updateTime": {
+                    "description": "The time stamp the `Policy` was previously updated. This is set by the server, not specified by the caller, and represents the last time a call to `SetOrgPolicy` was made for that `Policy`. Any value set by the client will be ignored.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "version": {
+                    "description": "Version of the `Policy`. Default version is 0;",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudOrgpolicyV1RestoreDefault": {
+            "description": "Ignores policies set above this resource and restores the `constraint_default` enforcement behavior of the specific `Constraint` at this resource. Suppose that `constraint_default` is set to `ALLOW` for the `Constraint` `constraints/serviceuser.services`. Suppose that organization foo.com sets a `Policy` at their Organization resource node that restricts the allowed service activations to deny all service activations. They could then set a `Policy` with the `policy_type` `restore_default` on several experimental projects, restoring the `constraint_default` enforcement of the `Constraint` for only those projects, allowing those projects to have all services activated.",
+            "id": "GoogleCloudOrgpolicyV1RestoreDefault",
+            "properties": {},
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1AccessLevel": {
+            "description": "An `AccessLevel` is a label that can be applied to requests to Google Cloud services, along with a list of requirements necessary for the label to be applied.",
+            "id": "GoogleIdentityAccesscontextmanagerV1AccessLevel",
+            "properties": {
+                "basic": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1BasicLevel",
+                    "description": "A `BasicLevel` composed of `Conditions`."
+                },
+                "custom": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1CustomLevel",
+                    "description": "A `CustomLevel` written in the Common Expression Language."
+                },
+                "description": {
+                    "description": "Description of the `AccessLevel` and its use. Does not affect behavior.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Required. Resource name for the Access Level. The `short_name` component must begin with a letter and only include alphanumeric and '_'. Format: `accessPolicies/{policy_id}/accessLevels/{short_name}`. The maximum length of the `short_name` component is 50 characters.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Human readable title. Must be unique within the Policy.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1AccessPolicy": {
+            "description": "`AccessPolicy` is a container for `AccessLevels` (which define the necessary attributes to use Google Cloud services) and `ServicePerimeters` (which define regions of services able to freely pass data within a perimeter). An access policy is globally visible within an organization, and the restrictions it specifies apply to all projects within an organization.",
+            "id": "GoogleIdentityAccesscontextmanagerV1AccessPolicy",
+            "properties": {
+                "etag": {
+                    "description": "Output only. An opaque identifier for the current version of the `AccessPolicy`. This will always be a strongly validated etag, meaning that two Access Polices will be identical if and only if their etags are identical. Clients should not expect this to be in any specific format.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Output only. Resource name of the `AccessPolicy`. Format: `accessPolicies/{policy_id}`",
+                    "type": "string"
+                },
+                "parent": {
+                    "description": "Required. The parent of this `AccessPolicy` in the Cloud Resource Hierarchy. Currently immutable once created. Format: `organizations/{organization_id}`",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Required. Human readable title. Does not affect behavior.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1ApiOperation": {
+            "description": "Identification for an API Operation.",
+            "id": "GoogleIdentityAccesscontextmanagerV1ApiOperation",
+            "properties": {
+                "methodSelectors": {
+                    "description": "API methods or permissions to allow. Method or permission must belong to the service specified by `service_name` field. A single MethodSelector entry with `*` specified for the `method` field will allow all methods AND permissions for the service specified in `service_name`.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1MethodSelector"
+                    },
+                    "type": "array"
+                },
+                "serviceName": {
+                    "description": "The name of the API whose methods or permissions the IngressPolicy or EgressPolicy want to allow. A single ApiOperation with `service_name` field set to `*` will allow all methods AND permissions for all services.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1BasicLevel": {
+            "description": "`BasicLevel` is an `AccessLevel` using a set of recommended features.",
+            "id": "GoogleIdentityAccesscontextmanagerV1BasicLevel",
+            "properties": {
+                "combiningFunction": {
+                    "description": "How the `conditions` list should be combined to determine if a request is granted this `AccessLevel`. If AND is used, each `Condition` in `conditions` must be satisfied for the `AccessLevel` to be applied. If OR is used, at least one `Condition` in `conditions` must be satisfied for the `AccessLevel` to be applied. Default behavior is AND.",
+                    "enum": [
+                        "AND",
+                        "OR"
+                    ],
+                    "enumDescriptions": [
+                        "All `Conditions` must be true for the `BasicLevel` to be true.",
+                        "If at least one `Condition` is true, then the `BasicLevel` is true."
+                    ],
+                    "type": "string"
+                },
+                "conditions": {
+                    "description": "Required. A list of requirements for the `AccessLevel` to be granted.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1Condition"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1Condition": {
+            "description": "A condition necessary for an `AccessLevel` to be granted. The Condition is an AND over its fields. So a Condition is true if: 1) the request IP is from one of the listed subnetworks AND 2) the originating device complies with the listed device policy AND 3) all listed access levels are granted AND 4) the request was sent at a time allowed by the DateTimeRestriction.",
+            "id": "GoogleIdentityAccesscontextmanagerV1Condition",
+            "properties": {
+                "devicePolicy": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1DevicePolicy",
+                    "description": "Device specific restrictions, all restrictions must hold for the Condition to be true. If not specified, all devices are allowed."
+                },
+                "ipSubnetworks": {
+                    "description": "CIDR block IP subnetwork specification. May be IPv4 or IPv6. Note that for a CIDR IP address block, the specified IP address portion must be properly truncated (i.e. all the host bits must be zero) or the input is considered malformed. For example, \"192.0.2.0/24\" is accepted but \"192.0.2.1/24\" is not. Similarly, for IPv6, \"2001:db8::/32\" is accepted whereas \"2001:db8::1/32\" is not. The originating IP of a request must be in one of the listed subnets in order for this Condition to be true. If empty, all IP addresses are allowed.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "members": {
+                    "description": "The request must be made by one of the provided user or service accounts. Groups are not supported. Syntax: `user:{emailid}` `serviceAccount:{emailid}` If not specified, a request may come from any user.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "negate": {
+                    "description": "Whether to negate the Condition. If true, the Condition becomes a NAND over its non-empty fields, each field must be false for the Condition overall to be satisfied. Defaults to false.",
+                    "type": "boolean"
+                },
+                "regions": {
+                    "description": "The request must originate from one of the provided countries/regions. Must be valid ISO 3166-1 alpha-2 codes.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "requiredAccessLevels": {
+                    "description": "A list of other access levels defined in the same `Policy`, referenced by resource name. Referencing an `AccessLevel` which does not exist is an error. All access levels listed must be granted for the Condition to be true. Example: \"`accessPolicies/MY_POLICY/accessLevels/LEVEL_NAME\"`",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1CustomLevel": {
+            "description": "`CustomLevel` is an `AccessLevel` using the Cloud Common Expression Language to represent the necessary conditions for the level to apply to a request. See CEL spec at: https://github.com/google/cel-spec",
+            "id": "GoogleIdentityAccesscontextmanagerV1CustomLevel",
+            "properties": {
+                "expr": {
+                    "$ref": "Expr",
+                    "description": "Required. A Cloud CEL expression evaluating to a boolean."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1DevicePolicy": {
+            "description": "`DevicePolicy` specifies device specific restrictions necessary to acquire a given access level. A `DevicePolicy` specifies requirements for requests from devices to be granted access levels, it does not do any enforcement on the device. `DevicePolicy` acts as an AND over all specified fields, and each repeated field is an OR over its elements. Any unset fields are ignored. For example, if the proto is { os_type : DESKTOP_WINDOWS, os_type : DESKTOP_LINUX, encryption_status: ENCRYPTED}, then the DevicePolicy will be true for requests originating from encrypted Linux desktops and encrypted Windows desktops.",
+            "id": "GoogleIdentityAccesscontextmanagerV1DevicePolicy",
+            "properties": {
+                "allowedDeviceManagementLevels": {
+                    "description": "Allowed device management levels, an empty list allows all management levels.",
+                    "items": {
+                        "enum": [
+                            "MANAGEMENT_UNSPECIFIED",
+                            "NONE",
+                            "BASIC",
+                            "COMPLETE"
+                        ],
+                        "enumDescriptions": [
+                            "The device's management level is not specified or not known.",
+                            "The device is not managed.",
+                            "Basic management is enabled, which is generally limited to monitoring and wiping the corporate account.",
+                            "Complete device management. This includes more thorough monitoring and the ability to directly manage the device (such as remote wiping). This can be enabled through the Android Enterprise Platform."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "allowedEncryptionStatuses": {
+                    "description": "Allowed encryptions statuses, an empty list allows all statuses.",
+                    "items": {
+                        "enum": [
+                            "ENCRYPTION_UNSPECIFIED",
+                            "ENCRYPTION_UNSUPPORTED",
+                            "UNENCRYPTED",
+                            "ENCRYPTED"
+                        ],
+                        "enumDescriptions": [
+                            "The encryption status of the device is not specified or not known.",
+                            "The device does not support encryption.",
+                            "The device supports encryption, but is currently unencrypted.",
+                            "The device is encrypted."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "osConstraints": {
+                    "description": "Allowed OS versions, an empty list allows all types and all versions.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1OsConstraint"
+                    },
+                    "type": "array"
+                },
+                "requireAdminApproval": {
+                    "description": "Whether the device needs to be approved by the customer admin.",
+                    "type": "boolean"
+                },
+                "requireCorpOwned": {
+                    "description": "Whether the device needs to be corp owned.",
+                    "type": "boolean"
+                },
+                "requireScreenlock": {
+                    "description": "Whether or not screenlock is required for the DevicePolicy to be true. Defaults to `false`.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1EgressFrom": {
+            "description": "Defines the conditions under which an EgressPolicy matches a request. Conditions based on information about the source of the request. Note that if the destination of the request is protected by a ServicePerimeter, then that ServicePerimeter must have an IngressPolicy which allows access in order for this request to succeed.",
+            "id": "GoogleIdentityAccesscontextmanagerV1EgressFrom",
+            "properties": {
+                "identities": {
+                    "description": "A list of identities that are allowed access through this [EgressPolicy]. Should be in the format of email address. The email address should represent individual user or service account only.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "identityType": {
+                    "description": "Specifies the type of identities that are allowed access to outside the perimeter. If left unspecified, then members of `identities` field will be allowed access.",
+                    "enum": [
+                        "IDENTITY_TYPE_UNSPECIFIED",
+                        "ANY_IDENTITY",
+                        "ANY_USER_ACCOUNT",
+                        "ANY_SERVICE_ACCOUNT"
+                    ],
+                    "enumDescriptions": [
+                        "No blanket identity group specified.",
+                        "Authorize access from all identities outside the perimeter.",
+                        "Authorize access from all human users outside the perimeter.",
+                        "Authorize access from all service accounts outside the perimeter."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1EgressPolicy": {
+            "description": "Policy for egress from perimeter. EgressPolicies match requests based on `egress_from` and `egress_to` stanzas. For an EgressPolicy to match, both `egress_from` and `egress_to` stanzas must be matched. If an EgressPolicy matches a request, the request is allowed to span the ServicePerimeter boundary. For example, an EgressPolicy can be used to allow VMs on networks within the ServicePerimeter to access a defined set of projects outside the perimeter in certain contexts (e.g. to read data from a Cloud Storage bucket or query against a BigQuery dataset). EgressPolicies are concerned with the *resources* that a request relates as well as the API services and API actions being used. They do not related to the direction of data movement. More detailed documentation for this concept can be found in the descriptions of EgressFrom and EgressTo.",
+            "id": "GoogleIdentityAccesscontextmanagerV1EgressPolicy",
+            "properties": {
+                "egressFrom": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1EgressFrom",
+                    "description": "Defines conditions on the source of a request causing this EgressPolicy to apply."
+                },
+                "egressTo": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1EgressTo",
+                    "description": "Defines the conditions on the ApiOperation and destination resources that cause this EgressPolicy to apply."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1EgressTo": {
+            "description": "Defines the conditions under which an EgressPolicy matches a request. Conditions are based on information about the ApiOperation intended to be performed on the `resources` specified. Note that if the destination of the request is protected by a ServicePerimeter, then that ServicePerimeter must have an IngressPolicy which allows access in order for this request to succeed.",
+            "id": "GoogleIdentityAccesscontextmanagerV1EgressTo",
+            "properties": {
+                "operations": {
+                    "description": "A list of ApiOperations that this egress rule applies to. A request matches if it contains an operation/service in this list.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1ApiOperation"
+                    },
+                    "type": "array"
+                },
+                "resources": {
+                    "description": "A list of resources, currently only projects in the form `projects/`, that match this to stanza. A request matches if it contains a resource in this list. If `*` is specified for resources, then this EgressTo rule will authorize access to all resources outside the perimeter.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1IngressFrom": {
+            "description": "Defines the conditions under which an IngressPolicy matches a request. Conditions are based on information about the source of the request.",
+            "id": "GoogleIdentityAccesscontextmanagerV1IngressFrom",
+            "properties": {
+                "identities": {
+                    "description": "A list of identities that are allowed access through this ingress policy. Should be in the format of email address. The email address should represent individual user or service account only.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "identityType": {
+                    "description": "Specifies the type of identities that are allowed access from outside the perimeter. If left unspecified, then members of `identities` field will be allowed access.",
+                    "enum": [
+                        "IDENTITY_TYPE_UNSPECIFIED",
+                        "ANY_IDENTITY",
+                        "ANY_USER_ACCOUNT",
+                        "ANY_SERVICE_ACCOUNT"
+                    ],
+                    "enumDescriptions": [
+                        "No blanket identity group specified.",
+                        "Authorize access from all identities outside the perimeter.",
+                        "Authorize access from all human users outside the perimeter.",
+                        "Authorize access from all service accounts outside the perimeter."
+                    ],
+                    "type": "string"
+                },
+                "sources": {
+                    "description": "Sources that this IngressPolicy authorizes access from.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1IngressSource"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1IngressPolicy": {
+            "description": "Policy for ingress into ServicePerimeter. IngressPolicies match requests based on `ingress_from` and `ingress_to` stanzas. For an ingress policy to match, both the `ingress_from` and `ingress_to` stanzas must be matched. If an IngressPolicy matches a request, the request is allowed through the perimeter boundary from outside the perimeter. For example, access from the internet can be allowed either based on an AccessLevel or, for traffic hosted on Google Cloud, the project of the source network. For access from private networks, using the project of the hosting network is required. Individual ingress policies can be limited by restricting which services and/or actions they match using the `ingress_to` field.",
+            "id": "GoogleIdentityAccesscontextmanagerV1IngressPolicy",
+            "properties": {
+                "ingressFrom": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1IngressFrom",
+                    "description": "Defines the conditions on the source of a request causing this IngressPolicy to apply."
+                },
+                "ingressTo": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1IngressTo",
+                    "description": "Defines the conditions on the ApiOperation and request destination that cause this IngressPolicy to apply."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1IngressSource": {
+            "description": "The source that IngressPolicy authorizes access from.",
+            "id": "GoogleIdentityAccesscontextmanagerV1IngressSource",
+            "properties": {
+                "accessLevel": {
+                    "description": "An AccessLevel resource name that allow resources within the ServicePerimeters to be accessed from the internet. AccessLevels listed must be in the same policy as this ServicePerimeter. Referencing a nonexistent AccessLevel will cause an error. If no AccessLevel names are listed, resources within the perimeter can only be accessed via Google Cloud calls with request origins within the perimeter. Example: `accessPolicies/MY_POLICY/accessLevels/MY_LEVEL`. If `*` is specified, then all IngressSources will be allowed.",
+                    "type": "string"
+                },
+                "resource": {
+                    "description": "A Google Cloud resource that is allowed to ingress the perimeter. Requests from these resources will be allowed to access perimeter data. Currently only projects are allowed. Format: `projects/{project_number}` The project may be in any Google Cloud organization, not just the organization that the perimeter is defined in. `*` is not allowed, the case of allowing all Google Cloud resources only is not supported.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1IngressTo": {
+            "description": "Defines the conditions under which an IngressPolicy matches a request. Conditions are based on information about the ApiOperation intended to be performed on the destination of the request.",
+            "id": "GoogleIdentityAccesscontextmanagerV1IngressTo",
+            "properties": {
+                "operations": {
+                    "description": "A list of ApiOperations the sources specified in corresponding IngressFrom are allowed to perform in this ServicePerimeter.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1ApiOperation"
+                    },
+                    "type": "array"
+                },
+                "resources": {
+                    "description": "A list of resources, currently only projects in the form `projects/`, protected by this ServicePerimeter that are allowed to be accessed by sources defined in the corresponding IngressFrom. A request matches if it contains a resource in this list. If `*` is specified for resources, then this IngressTo rule will authorize access to all resources inside the perimeter, provided that the request also matches the `operations` field.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1MethodSelector": {
+            "description": "An allowed method or permission of a service specified in ApiOperation.",
+            "id": "GoogleIdentityAccesscontextmanagerV1MethodSelector",
+            "properties": {
+                "method": {
+                    "description": "Value for `method` should be a valid method name for the corresponding `service_name` in ApiOperation. If `*` used as value for `method`, then ALL methods and permissions are allowed.",
+                    "type": "string"
+                },
+                "permission": {
+                    "description": "Value for `permission` should be a valid Cloud IAM permission for the corresponding `service_name` in ApiOperation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1OsConstraint": {
+            "description": "A restriction on the OS type and version of devices making requests.",
+            "id": "GoogleIdentityAccesscontextmanagerV1OsConstraint",
+            "properties": {
+                "minimumVersion": {
+                    "description": "The minimum allowed OS version. If not set, any version of this OS satisfies the constraint. Format: `\"major.minor.patch\"`. Examples: `\"10.5.301\"`, `\"9.2.1\"`.",
+                    "type": "string"
+                },
+                "osType": {
+                    "description": "Required. The allowed OS type.",
+                    "enum": [
+                        "OS_UNSPECIFIED",
+                        "DESKTOP_MAC",
+                        "DESKTOP_WINDOWS",
+                        "DESKTOP_LINUX",
+                        "DESKTOP_CHROME_OS",
+                        "ANDROID",
+                        "IOS"
+                    ],
+                    "enumDescriptions": [
+                        "The operating system of the device is not specified or not known.",
+                        "A desktop Mac operating system.",
+                        "A desktop Windows operating system.",
+                        "A desktop Linux operating system.",
+                        "A desktop ChromeOS operating system.",
+                        "An Android operating system.",
+                        "An iOS operating system."
+                    ],
+                    "type": "string"
+                },
+                "requireVerifiedChromeOs": {
+                    "description": "Only allows requests from devices with a verified Chrome OS. Verifications includes requirements that the device is enterprise-managed, conformant to domain policies, and the caller has permission to call the API targeted by the request.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1ServicePerimeter": {
+            "description": "`ServicePerimeter` describes a set of Google Cloud resources which can freely import and export data amongst themselves, but not export outside of the `ServicePerimeter`. If a request with a source within this `ServicePerimeter` has a target outside of the `ServicePerimeter`, the request will be blocked. Otherwise the request is allowed. There are two types of Service Perimeter - Regular and Bridge. Regular Service Perimeters cannot overlap, a single Google Cloud project can only belong to a single regular Service Perimeter. Service Perimeter Bridges can contain only Google Cloud projects as members, a single Google Cloud project may belong to multiple Service Perimeter Bridges.",
+            "id": "GoogleIdentityAccesscontextmanagerV1ServicePerimeter",
+            "properties": {
+                "description": {
+                    "description": "Description of the `ServicePerimeter` and its use. Does not affect behavior.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Required. Resource name for the ServicePerimeter. The `short_name` component must begin with a letter and only include alphanumeric and '_'. Format: `accessPolicies/{policy_id}/servicePerimeters/{short_name}`",
+                    "type": "string"
+                },
+                "perimeterType": {
+                    "description": "Perimeter type indicator. A single project is allowed to be a member of single regular perimeter, but multiple service perimeter bridges. A project cannot be a included in a perimeter bridge without being included in regular perimeter. For perimeter bridges, the restricted service list as well as access level lists must be empty.",
+                    "enum": [
+                        "PERIMETER_TYPE_REGULAR",
+                        "PERIMETER_TYPE_BRIDGE"
+                    ],
+                    "enumDescriptions": [
+                        "Regular Perimeter.",
+                        "Perimeter Bridge."
+                    ],
+                    "type": "string"
+                },
+                "spec": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig",
+                    "description": "Proposed (or dry run) ServicePerimeter configuration. This configuration allows to specify and test ServicePerimeter configuration without enforcing actual access restrictions. Only allowed to be set when the \"use_explicit_dry_run_spec\" flag is set."
+                },
+                "status": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig",
+                    "description": "Current ServicePerimeter configuration. Specifies sets of resources, restricted services and access levels that determine perimeter content and boundaries."
+                },
+                "title": {
+                    "description": "Human readable title. Must be unique within the Policy.",
+                    "type": "string"
+                },
+                "useExplicitDryRunSpec": {
+                    "description": "Use explicit dry run spec flag. Ordinarily, a dry-run spec implicitly exists for all Service Perimeters, and that spec is identical to the status for those Service Perimeters. When this flag is set, it inhibits the generation of the implicit spec, thereby allowing the user to explicitly provide a configuration (\"spec\") to use in a dry-run version of the Service Perimeter. This allows the user to test changes to the enforced config (\"status\") without actually enforcing them. This testing is done through analyzing the differences between currently enforced and suggested restrictions. use_explicit_dry_run_spec must bet set to True if any of the fields in the spec are set to non-default values.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig": {
+            "description": "`ServicePerimeterConfig` specifies a set of Google Cloud resources that describe specific Service Perimeter configuration.",
+            "id": "GoogleIdentityAccesscontextmanagerV1ServicePerimeterConfig",
+            "properties": {
+                "accessLevels": {
+                    "description": "A list of `AccessLevel` resource names that allow resources within the `ServicePerimeter` to be accessed from the internet. `AccessLevels` listed must be in the same policy as this `ServicePerimeter`. Referencing a nonexistent `AccessLevel` is a syntax error. If no `AccessLevel` names are listed, resources within the perimeter can only be accessed via Google Cloud calls with request origins within the perimeter. Example: `\"accessPolicies/MY_POLICY/accessLevels/MY_LEVEL\"`. For Service Perimeter Bridge, must be empty.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "egressPolicies": {
+                    "description": "List of EgressPolicies to apply to the perimeter. A perimeter may have multiple EgressPolicies, each of which is evaluated separately. Access is granted if any EgressPolicy grants it. Must be empty for a perimeter bridge.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1EgressPolicy"
+                    },
+                    "type": "array"
+                },
+                "ingressPolicies": {
+                    "description": "List of IngressPolicies to apply to the perimeter. A perimeter may have multiple IngressPolicies, each of which is evaluated separately. Access is granted if any Ingress Policy grants it. Must be empty for a perimeter bridge.",
+                    "items": {
+                        "$ref": "GoogleIdentityAccesscontextmanagerV1IngressPolicy"
+                    },
+                    "type": "array"
+                },
+                "resources": {
+                    "description": "A list of Google Cloud resources that are inside of the service perimeter. Currently only projects are allowed. Format: `projects/{project_number}`",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "restrictedServices": {
+                    "description": "Google Cloud services that are subject to the Service Perimeter restrictions. For example, if `storage.googleapis.com` is specified, access to the storage buckets inside the perimeter must meet the perimeter's access restrictions.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "vpcAccessibleServices": {
+                    "$ref": "GoogleIdentityAccesscontextmanagerV1VpcAccessibleServices",
+                    "description": "Configuration for APIs allowed within Perimeter."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleIdentityAccesscontextmanagerV1VpcAccessibleServices": {
+            "description": "Specifies how APIs are allowed to communicate within the Service Perimeter.",
+            "id": "GoogleIdentityAccesscontextmanagerV1VpcAccessibleServices",
+            "properties": {
+                "allowedServices": {
+                    "description": "The list of APIs usable within the Service Perimeter. Must be empty unless 'enable_restriction' is True. You can specify a list of individual services, as well as include the 'RESTRICTED-SERVICES' value, which automatically includes all of the services protected by the perimeter.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "enableRestriction": {
+                    "description": "Whether to restrict API calls within the Service Perimeter to the list of APIs specified in 'allowed_services'.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "Operation": {
+            "description": "This resource represents a long-running operation that is the result of a network API call.",
+            "id": "Operation",
+            "properties": {
+                "done": {
+                    "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
+                    "type": "boolean"
+                },
+                "error": {
+                    "$ref": "Status",
+                    "description": "The error result of the operation in case of failure or cancellation."
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
+                    "type": "string"
+                },
+                "response": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "Policy": {
+            "description": "An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { \"bindings\": [ { \"role\": \"roles/resourcemanager.organizationAdmin\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\" ] }, { \"role\": \"roles/resourcemanager.organizationViewer\", \"members\": [ \"user:eve@example.com\" ], \"condition\": { \"title\": \"expirable access\", \"description\": \"Does not grant access after Sep 2020\", \"expression\": \"request.time < timestamp('2020-10-01T00:00:00.000Z')\", } } ], \"etag\": \"BwWWja0YfJA=\", \"version\": 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).",
+            "id": "Policy",
+            "properties": {
+                "auditConfigs": {
+                    "description": "Specifies cloud audit logging configuration for this policy.",
+                    "items": {
+                        "$ref": "AuditConfig"
+                    },
+                    "type": "array"
+                },
+                "bindings": {
+                    "description": "Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.",
+                    "items": {
+                        "$ref": "Binding"
+                    },
+                    "type": "array"
+                },
+                "etag": {
+                    "description": "`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "version": {
+                    "description": "Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "Status": {
+            "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
+            "id": "Status",
+            "properties": {
+                "code": {
+                    "description": "The status code, which should be an enum value of google.rpc.Code.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         }
-      },
-      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
-      "id": "Status"
-    }
-  }
-}
+    },
+    "servicePath": "",
+    "title": "Cloud Asset API",
+    "version": "v1p7beta1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/clouderrorreporting.v1beta1.json b/googleapiclient/discovery_cache/documents/clouderrorreporting.v1beta1.json
index 91d9ae5..627d89a 100644
--- a/googleapiclient/discovery_cache/documents/clouderrorreporting.v1beta1.json
+++ b/googleapiclient/discovery_cache/documents/clouderrorreporting.v1beta1.json
@@ -1,786 +1,786 @@
 {
-  "revision": "20200827",
-  "mtlsRootUrl": "https://clouderrorreporting.mtls.googleapis.com/",
-  "batchPath": "batch",
-  "version": "v1beta1",
-  "id": "clouderrorreporting:v1beta1",
-  "canonicalName": "Clouderrorreporting",
-  "name": "clouderrorreporting",
-  "discoveryVersion": "v1",
-  "protocol": "rest",
-  "schemas": {
-    "SourceLocation": {
-      "properties": {
-        "filePath": {
-          "type": "string",
-          "description": "The source code filename, which can include a truncated relative path, or a full path from a production machine."
-        },
-        "lineNumber": {
-          "format": "int32",
-          "type": "integer",
-          "description": "1-based. 0 indicates that the line number is unknown."
-        },
-        "functionName": {
-          "description": "Human-readable name of a function or method. The value can include optional context like the class or package name. For example, `my.package.MyClass.method` in case of Java.",
-          "type": "string"
-        }
-      },
-      "description": "Indicates a location in the source code of the service for which errors are reported. `functionName` must be provided by the application when reporting an error, unless the error report contains a `message` with a supported exception stack trace. All fields are optional for the later case.",
-      "id": "SourceLocation",
-      "type": "object"
-    },
-    "ReportedErrorEvent": {
-      "description": "An error event which is reported to the Error Reporting system.",
-      "id": "ReportedErrorEvent",
-      "type": "object",
-      "properties": {
-        "eventTime": {
-          "description": "Optional. Time when the event occurred. If not provided, the time when the event was received by the Error Reporting system will be used.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "message": {
-          "description": "Required. The error message. If no `context.reportLocation` is provided, the message must contain a header (typically consisting of the exception type name and an error message) and an exception stack trace in one of the supported programming languages and formats. Supported languages are Java, Python, JavaScript, Ruby, C#, PHP, and Go. Supported stack trace formats are: * **Java**: Must be the return value of [`Throwable.printStackTrace()`](https://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html#printStackTrace%28%29). * **Python**: Must be the return value of [`traceback.format_exc()`](https://docs.python.org/2/library/traceback.html#traceback.format_exc). * **JavaScript**: Must be the value of [`error.stack`](https://github.com/v8/v8/wiki/Stack-Trace-API) as returned by V8. * **Ruby**: Must contain frames returned by [`Exception.backtrace`](https://ruby-doc.org/core-2.2.0/Exception.html#method-i-backtrace). * **C#**: Must be the return value of [`Exception.ToString()`](https://msdn.microsoft.com/en-us/library/system.exception.tostring.aspx). * **PHP**: Must start with `PHP (Notice|Parse error|Fatal error|Warning)` and contain the result of [`(string)$exception`](http://php.net/manual/en/exception.tostring.php). * **Go**: Must be the return value of [`runtime.Stack()`](https://golang.org/pkg/runtime/debug/#Stack).",
-          "type": "string"
-        },
-        "context": {
-          "$ref": "ErrorContext",
-          "description": "Optional. A description of the context in which the error occurred."
-        },
-        "serviceContext": {
-          "description": "Required. The service context in which this error has occurred.",
-          "$ref": "ServiceContext"
-        }
-      }
-    },
-    "TimedCount": {
-      "type": "object",
-      "description": "The number of errors in a given time period. All numbers are approximate since the error events are sampled before counting them.",
-      "properties": {
-        "count": {
-          "type": "string",
-          "description": "Approximate number of occurrences in the given time period.",
-          "format": "int64"
-        },
-        "startTime": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "Start of the time period to which `count` refers (included)."
-        },
-        "endTime": {
-          "format": "google-datetime",
-          "type": "string",
-          "description": "End of the time period to which `count` refers (excluded)."
-        }
-      },
-      "id": "TimedCount"
-    },
-    "ReportErrorEventResponse": {
-      "properties": {},
-      "id": "ReportErrorEventResponse",
-      "type": "object",
-      "description": "Response for reporting an individual error event. Data may be added to this message in the future."
-    },
-    "DeleteEventsResponse": {
-      "properties": {},
-      "type": "object",
-      "description": "Response message for deleting error events.",
-      "id": "DeleteEventsResponse"
-    },
-    "ServiceContext": {
-      "id": "ServiceContext",
-      "properties": {
-        "service": {
-          "type": "string",
-          "description": "An identifier of the service, such as the name of the executable, job, or Google App Engine service name. This field is expected to have a low number of values that are relatively stable over time, as opposed to `version`, which can be changed whenever new code is deployed. Contains the service name for error reports extracted from Google App Engine logs or `default` if the App Engine default service is used."
-        },
-        "resourceType": {
-          "type": "string",
-          "description": "Type of the MonitoredResource. List of possible values: https://cloud.google.com/monitoring/api/resources Value is set automatically for incoming errors and must not be set when reporting errors."
-        },
-        "version": {
-          "description": "Represents the source code version that the developer provided, which could represent a version label or a Git SHA-1 hash, for example. For App Engine standard environment, the version is set to the version of the app.",
-          "type": "string"
-        }
-      },
-      "description": "Describes a running service that sends errors. Its version changes over time and multiple versions can run in parallel.",
-      "type": "object"
-    },
-    "HttpRequestContext": {
-      "id": "HttpRequestContext",
-      "description": "HTTP request data that is related to a reported error. This data should be provided by the application when reporting an error, unless the error report has been generated automatically from Google App Engine logs.",
-      "properties": {
-        "responseStatusCode": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The HTTP response status code for the request."
-        },
-        "method": {
-          "type": "string",
-          "description": "The type of HTTP request, such as `GET`, `POST`, etc."
-        },
-        "url": {
-          "description": "The URL of the request.",
-          "type": "string"
-        },
-        "remoteIp": {
-          "description": "The IP address from which the request originated. This can be IPv4, IPv6, or a token which is derived from the IP address, depending on the data that has been provided in the error report.",
-          "type": "string"
-        },
-        "referrer": {
-          "type": "string",
-          "description": "The referrer information that is provided with the request."
-        },
-        "userAgent": {
-          "type": "string",
-          "description": "The user agent information that is provided with the request."
-        }
-      },
-      "type": "object"
-    },
-    "TrackingIssue": {
-      "properties": {
-        "url": {
-          "description": "A URL pointing to a related entry in an issue tracking system. Example: `https://github.com/user/project/issues/4`",
-          "type": "string"
-        }
-      },
-      "id": "TrackingIssue",
-      "description": "Information related to tracking the progress on resolving the error.",
-      "type": "object"
-    },
-    "ErrorGroupStats": {
-      "description": "Data extracted for a specific group based on certain filter criteria, such as a given time period and/or service filter.",
-      "id": "ErrorGroupStats",
-      "properties": {
-        "count": {
-          "type": "string",
-          "format": "int64",
-          "description": "Approximate total number of events in the given group that match the filter criteria."
-        },
-        "group": {
-          "description": "Group data that is independent of the filter criteria.",
-          "$ref": "ErrorGroup"
-        },
-        "affectedServices": {
-          "type": "array",
-          "description": "Service contexts with a non-zero error count for the given filter criteria. This list can be truncated if multiple services are affected. Refer to `num_affected_services` for the total count.",
-          "items": {
-            "$ref": "ServiceContext"
-          }
-        },
-        "representative": {
-          "$ref": "ErrorEvent",
-          "description": "An arbitrary event that is chosen as representative for the whole group. The representative event is intended to be used as a quick preview for the whole group. Events in the group are usually sufficiently similar to each other such that showing an arbitrary representative provides insight into the characteristics of the group as a whole."
-        },
-        "affectedUsersCount": {
-          "type": "string",
-          "description": "Approximate number of affected users in the given group that match the filter criteria. Users are distinguished by data in the `ErrorContext` of the individual error events, such as their login name or their remote IP address in case of HTTP requests. The number of affected users can be zero even if the number of errors is non-zero if no data was provided from which the affected user could be deduced. Users are counted based on data in the request context that was provided in the error report. If more users are implicitly affected, such as due to a crash of the whole service, this is not reflected here.",
-          "format": "int64"
-        },
-        "numAffectedServices": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The total number of services with a non-zero error count for the given filter criteria."
-        },
-        "firstSeenTime": {
-          "format": "google-datetime",
-          "description": "Approximate first occurrence that was ever seen for this group and which matches the given filter criteria, ignoring the time_range that was specified in the request.",
-          "type": "string"
-        },
-        "timedCounts": {
-          "type": "array",
-          "description": "Approximate number of occurrences over time. Timed counts returned by ListGroups are guaranteed to be: - Inside the requested time interval - Non-overlapping, and - Ordered by ascending time.",
-          "items": {
-            "$ref": "TimedCount"
-          }
-        },
-        "lastSeenTime": {
-          "format": "google-datetime",
-          "description": "Approximate last occurrence that was ever seen for this group and which matches the given filter criteria, ignoring the time_range that was specified in the request.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "ErrorGroup": {
-      "id": "ErrorGroup",
-      "description": "Description of a group of similar error events.",
-      "type": "object",
-      "properties": {
-        "trackingIssues": {
-          "type": "array",
-          "description": "Associated tracking issues.",
-          "items": {
-            "$ref": "TrackingIssue"
-          }
-        },
-        "resolutionStatus": {
-          "type": "string",
-          "enumDescriptions": [
-            "Status is unknown.",
-            "The error group is not being addressed. This is the default for new groups. It is also used for errors re-occurring after marked RESOLVED.",
-            "Error Group manually acknowledged, it can have an issue link attached.",
-            "Error Group manually resolved, more events for this group are not expected to occur.",
-            "The error group is muted and excluded by default on group stats requests."
-          ],
-          "enum": [
-            "RESOLUTION_STATUS_UNSPECIFIED",
-            "OPEN",
-            "ACKNOWLEDGED",
-            "RESOLVED",
-            "MUTED"
-          ],
-          "description": "Error group's resolution status. An unspecified resolution status will be interpreted as OPEN"
-        },
-        "name": {
-          "description": "The group resource name. Example: projects/my-project-123/groups/CNSgkpnppqKCUw",
-          "type": "string"
-        },
-        "groupId": {
-          "description": "Group IDs are unique for a given project. If the same kind of error occurs in different service contexts, it will receive the same group ID.",
-          "type": "string"
-        }
-      }
-    },
-    "ErrorEvent": {
-      "id": "ErrorEvent",
-      "description": "An error event which is returned by the Error Reporting system.",
-      "type": "object",
-      "properties": {
-        "context": {
-          "$ref": "ErrorContext",
-          "description": "Data about the context in which the error occurred."
-        },
-        "eventTime": {
-          "type": "string",
-          "description": "Time when the event occurred as provided in the error report. If the report did not contain a timestamp, the time the error was received by the Error Reporting system is used.",
-          "format": "google-datetime"
-        },
-        "serviceContext": {
-          "description": "The `ServiceContext` for which this error was reported.",
-          "$ref": "ServiceContext"
-        },
-        "message": {
-          "description": "The stack trace that was reported or logged by the service.",
-          "type": "string"
-        }
-      }
-    },
-    "ErrorContext": {
-      "id": "ErrorContext",
-      "properties": {
-        "httpRequest": {
-          "$ref": "HttpRequestContext",
-          "description": "The HTTP request which was processed when the error was triggered."
-        },
-        "reportLocation": {
-          "description": "The location in the source code where the decision was made to report the error, usually the place where it was logged. For a logged exception this would be the source line where the exception is logged, usually close to the place where it was caught.",
-          "$ref": "SourceLocation"
-        },
-        "user": {
-          "description": "The user who caused or was affected by the crash. This can be a user ID, an email address, or an arbitrary token that uniquely identifies the user. When sending an error report, leave this field empty if the user was not logged in. In this case the Error Reporting system will use other data, such as remote IP address, to distinguish affected users. See `affected_users_count` in `ErrorGroupStats`.",
-          "type": "string"
-        },
-        "sourceReferences": {
-          "items": {
-            "$ref": "SourceReference"
-          },
-          "type": "array",
-          "description": "Source code that was used to build the executable which has caused the given error message."
-        }
-      },
-      "type": "object",
-      "description": "A description of the context in which an error occurred. This data should be provided by the application when reporting an error, unless the error report has been generated automatically from Google App Engine logs."
-    },
-    "ListEventsResponse": {
-      "description": "Contains a set of requested error events.",
-      "type": "object",
-      "properties": {
-        "timeRangeBegin": {
-          "type": "string",
-          "description": "The timestamp specifies the start time to which the request was restricted.",
-          "format": "google-datetime"
-        },
-        "errorEvents": {
-          "description": "The error events which match the given request.",
-          "items": {
-            "$ref": "ErrorEvent"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "description": "If non-empty, more results are available. Pass this token, along with the same query parameters as the first request, to view the next page of results.",
-          "type": "string"
-        }
-      },
-      "id": "ListEventsResponse"
-    },
-    "SourceReference": {
-      "type": "object",
-      "id": "SourceReference",
-      "description": "A reference to a particular snapshot of the source tree used to build and deploy an application.",
-      "properties": {
-        "revisionId": {
-          "type": "string",
-          "description": "The canonical and persistent identifier of the deployed revision. Example (git): \"0035781c50ec7aa23385dc841529ce8a4b70db1b\""
-        },
-        "repository": {
-          "type": "string",
-          "description": "Optional. A URI string identifying the repository. Example: \"https://github.com/GoogleCloudPlatform/kubernetes.git\""
-        }
-      }
-    },
-    "ListGroupStatsResponse": {
-      "id": "ListGroupStatsResponse",
-      "description": "Contains a set of requested error group stats.",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "If non-empty, more results are available. Pass this token, along with the same query parameters as the first request, to view the next page of results."
-        },
-        "errorGroupStats": {
-          "items": {
-            "$ref": "ErrorGroupStats"
-          },
-          "type": "array",
-          "description": "The error group stats which match the given request."
-        },
-        "timeRangeBegin": {
-          "format": "google-datetime",
-          "description": "The timestamp specifies the start time to which the request was restricted. The start time is set based on the requested time range. It may be adjusted to a later time if a project has exceeded the storage quota and older data has been deleted.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    }
-  },
-  "rootUrl": "https://clouderrorreporting.googleapis.com/",
-  "kind": "discovery#restDescription",
-  "servicePath": "",
-  "resources": {
-    "projects": {
-      "resources": {
-        "groups": {
-          "methods": {
-            "get": {
-              "path": "v1beta1/{+groupName}",
-              "description": "Get the specified group.",
-              "parameters": {
-                "groupName": {
-                  "type": "string",
-                  "location": "path",
-                  "pattern": "^projects/[^/]+/groups/[^/]+$",
-                  "description": "Required. The group resource name. Written as `projects/{projectID}/groups/{group_name}`. Call [`groupStats.list`](https://cloud.google.com/error-reporting/reference/rest/v1beta1/projects.groupStats/list) to return a list of groups belonging to this project. Example: `projects/my-project-123/groups/my-group`",
-                  "required": true
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
                 }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "response": {
-                "$ref": "ErrorGroup"
-              },
-              "id": "clouderrorreporting.projects.groups.get",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "groupName"
-              ],
-              "flatPath": "v1beta1/projects/{projectsId}/groups/{groupsId}"
+            }
+        }
+    },
+    "basePath": "",
+    "baseUrl": "https://clouderrorreporting.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Clouderrorreporting",
+    "description": "Groups and counts similar errors from cloud services and applications, reports new errors, and provides access to error groups and their associated errors. ",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/error-reporting/",
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "clouderrorreporting:v1beta1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://clouderrorreporting.mtls.googleapis.com/",
+    "name": "clouderrorreporting",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        }
+    },
+    "protocol": "rest",
+    "resources": {
+        "projects": {
+            "methods": {
+                "deleteEvents": {
+                    "description": "Deletes all error events of a given project.",
+                    "flatPath": "v1beta1/projects/{projectsId}/events",
+                    "httpMethod": "DELETE",
+                    "id": "clouderrorreporting.projects.deleteEvents",
+                    "parameterOrder": [
+                        "projectName"
+                    ],
+                    "parameters": {
+                        "projectName": {
+                            "description": "Required. The resource name of the Google Cloud Platform project. Written as `projects/{projectID}`, where `{projectID}` is the [Google Cloud Platform project ID](https://support.google.com/cloud/answer/6158840). Example: `projects/my-project-123`.",
+                            "location": "path",
+                            "pattern": "^projects/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1beta1/{+projectName}/events",
+                    "response": {
+                        "$ref": "DeleteEventsResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                    ]
+                }
             },
-            "update": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1beta1/projects/{projectsId}/groups/{groupsId}",
-              "response": {
-                "$ref": "ErrorGroup"
-              },
-              "parameters": {
+            "resources": {
+                "events": {
+                    "methods": {
+                        "list": {
+                            "description": "Lists the specified events.",
+                            "flatPath": "v1beta1/projects/{projectsId}/events",
+                            "httpMethod": "GET",
+                            "id": "clouderrorreporting.projects.events.list",
+                            "parameterOrder": [
+                                "projectName"
+                            ],
+                            "parameters": {
+                                "groupId": {
+                                    "description": "Required. The group for which events shall be returned.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "Optional. The maximum number of results to return per response.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. A `next_page_token` provided by a previous response.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "projectName": {
+                                    "description": "Required. The resource name of the Google Cloud Platform project. Written as `projects/{projectID}`, where `{projectID}` is the [Google Cloud Platform project ID](https://support.google.com/cloud/answer/6158840). Example: `projects/my-project-123`.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "serviceFilter.resourceType": {
+                                    "description": "Optional. The exact value to match against [`ServiceContext.resource_type`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.resource_type).",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "serviceFilter.service": {
+                                    "description": "Optional. The exact value to match against [`ServiceContext.service`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.service).",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "serviceFilter.version": {
+                                    "description": "Optional. The exact value to match against [`ServiceContext.version`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.version).",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "timeRange.period": {
+                                    "description": "Restricts the query to the specified time range.",
+                                    "enum": [
+                                        "PERIOD_UNSPECIFIED",
+                                        "PERIOD_1_HOUR",
+                                        "PERIOD_6_HOURS",
+                                        "PERIOD_1_DAY",
+                                        "PERIOD_1_WEEK",
+                                        "PERIOD_30_DAYS"
+                                    ],
+                                    "enumDescriptions": [
+                                        "Do not use.",
+                                        "Retrieve data for the last hour. Recommended minimum timed count duration: 1 min.",
+                                        "Retrieve data for the last 6 hours. Recommended minimum timed count duration: 10 min.",
+                                        "Retrieve data for the last day. Recommended minimum timed count duration: 1 hour.",
+                                        "Retrieve data for the last week. Recommended minimum timed count duration: 6 hours.",
+                                        "Retrieve data for the last 30 days. Recommended minimum timed count duration: 1 day."
+                                    ],
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+projectName}/events",
+                            "response": {
+                                "$ref": "ListEventsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "report": {
+                            "description": "Report an individual error event and record the event to a log. This endpoint accepts **either** an OAuth token, **or** an [API key](https://support.google.com/cloud/answer/6158862) for authentication. To use an API key, append it to the URL as the value of a `key` parameter. For example: `POST https://clouderrorreporting.googleapis.com/v1beta1/{projectName}/events:report?key=123ABC456` **Note:** [Error Reporting](/error-reporting) is a global service built on Cloud Logging and doesn't analyze logs stored in regional log buckets or logs routed to other Google Cloud projects. For more information, see [Using Error Reporting with regionalized logs](/error-reporting/docs/regionalization).",
+                            "flatPath": "v1beta1/projects/{projectsId}/events:report",
+                            "httpMethod": "POST",
+                            "id": "clouderrorreporting.projects.events.report",
+                            "parameterOrder": [
+                                "projectName"
+                            ],
+                            "parameters": {
+                                "projectName": {
+                                    "description": "Required. The resource name of the Google Cloud Platform project. Written as `projects/{projectId}`, where `{projectId}` is the [Google Cloud Platform project ID](https://support.google.com/cloud/answer/6158840). Example: // `projects/my-project-123`.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+projectName}/events:report",
+                            "request": {
+                                "$ref": "ReportedErrorEvent"
+                            },
+                            "response": {
+                                "$ref": "ReportErrorEventResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        }
+                    }
+                },
+                "groupStats": {
+                    "methods": {
+                        "list": {
+                            "description": "Lists the specified groups.",
+                            "flatPath": "v1beta1/projects/{projectsId}/groupStats",
+                            "httpMethod": "GET",
+                            "id": "clouderrorreporting.projects.groupStats.list",
+                            "parameterOrder": [
+                                "projectName"
+                            ],
+                            "parameters": {
+                                "alignment": {
+                                    "description": "Optional. The alignment of the timed counts to be returned. Default is `ALIGNMENT_EQUAL_AT_END`.",
+                                    "enum": [
+                                        "ERROR_COUNT_ALIGNMENT_UNSPECIFIED",
+                                        "ALIGNMENT_EQUAL_ROUNDED",
+                                        "ALIGNMENT_EQUAL_AT_END"
+                                    ],
+                                    "enumDescriptions": [
+                                        "No alignment specified.",
+                                        "The time periods shall be consecutive, have width equal to the requested duration, and be aligned at the `alignment_time` provided in the request. The `alignment_time` does not have to be inside the query period but even if it is outside, only time periods are returned which overlap with the query period. A rounded alignment will typically result in a different size of the first or the last time period.",
+                                        "The time periods shall be consecutive, have width equal to the requested duration, and be aligned at the end of the requested time period. This can result in a different size of the first time period."
+                                    ],
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "alignmentTime": {
+                                    "description": "Optional. Time where the timed counts shall be aligned if rounded alignment is chosen. Default is 00:00 UTC.",
+                                    "format": "google-datetime",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "groupId": {
+                                    "description": "Optional. List all ErrorGroupStats with these IDs.",
+                                    "location": "query",
+                                    "repeated": true,
+                                    "type": "string"
+                                },
+                                "order": {
+                                    "description": "Optional. The sort order in which the results are returned. Default is `COUNT_DESC`.",
+                                    "enum": [
+                                        "GROUP_ORDER_UNSPECIFIED",
+                                        "COUNT_DESC",
+                                        "LAST_SEEN_DESC",
+                                        "CREATED_DESC",
+                                        "AFFECTED_USERS_DESC"
+                                    ],
+                                    "enumDescriptions": [
+                                        "No group order specified.",
+                                        "Total count of errors in the given time window in descending order.",
+                                        "Timestamp when the group was last seen in the given time window in descending order.",
+                                        "Timestamp when the group was created in descending order.",
+                                        "Number of affected users in the given time window in descending order."
+                                    ],
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "Optional. The maximum number of results to return per response. Default is 20.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. A `next_page_token` provided by a previous response. To view additional results, pass this token along with the identical query parameters as the first request.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "projectName": {
+                                    "description": "Required. The resource name of the Google Cloud Platform project. Written as `projects/{projectID}` or `projects/{projectNumber}`, where `{projectID}` and `{projectNumber}` can be found in the [Google Cloud Console](https://support.google.com/cloud/answer/6158840). Examples: `projects/my-project-123`, `projects/5551234`.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "serviceFilter.resourceType": {
+                                    "description": "Optional. The exact value to match against [`ServiceContext.resource_type`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.resource_type).",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "serviceFilter.service": {
+                                    "description": "Optional. The exact value to match against [`ServiceContext.service`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.service).",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "serviceFilter.version": {
+                                    "description": "Optional. The exact value to match against [`ServiceContext.version`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.version).",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "timeRange.period": {
+                                    "description": "Restricts the query to the specified time range.",
+                                    "enum": [
+                                        "PERIOD_UNSPECIFIED",
+                                        "PERIOD_1_HOUR",
+                                        "PERIOD_6_HOURS",
+                                        "PERIOD_1_DAY",
+                                        "PERIOD_1_WEEK",
+                                        "PERIOD_30_DAYS"
+                                    ],
+                                    "enumDescriptions": [
+                                        "Do not use.",
+                                        "Retrieve data for the last hour. Recommended minimum timed count duration: 1 min.",
+                                        "Retrieve data for the last 6 hours. Recommended minimum timed count duration: 10 min.",
+                                        "Retrieve data for the last day. Recommended minimum timed count duration: 1 hour.",
+                                        "Retrieve data for the last week. Recommended minimum timed count duration: 6 hours.",
+                                        "Retrieve data for the last 30 days. Recommended minimum timed count duration: 1 day."
+                                    ],
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "timedCountDuration": {
+                                    "description": "Optional. The preferred duration for a single returned `TimedCount`. If not set, no timed counts are returned.",
+                                    "format": "google-duration",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+projectName}/groupStats",
+                            "response": {
+                                "$ref": "ListGroupStatsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        }
+                    }
+                },
+                "groups": {
+                    "methods": {
+                        "get": {
+                            "description": "Get the specified group.",
+                            "flatPath": "v1beta1/projects/{projectsId}/groups/{groupsId}",
+                            "httpMethod": "GET",
+                            "id": "clouderrorreporting.projects.groups.get",
+                            "parameterOrder": [
+                                "groupName"
+                            ],
+                            "parameters": {
+                                "groupName": {
+                                    "description": "Required. The group resource name. Written as `projects/{projectID}/groups/{group_name}`. Call [`groupStats.list`](https://cloud.google.com/error-reporting/reference/rest/v1beta1/projects.groupStats/list) to return a list of groups belonging to this project. Example: `projects/my-project-123/groups/my-group`",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/groups/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+groupName}",
+                            "response": {
+                                "$ref": "ErrorGroup"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "update": {
+                            "description": "Replace the data for the specified group. Fails if the group does not exist.",
+                            "flatPath": "v1beta1/projects/{projectsId}/groups/{groupsId}",
+                            "httpMethod": "PUT",
+                            "id": "clouderrorreporting.projects.groups.update",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "The group resource name. Example: projects/my-project-123/groups/CNSgkpnppqKCUw",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/groups/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "request": {
+                                "$ref": "ErrorGroup"
+                            },
+                            "response": {
+                                "$ref": "ErrorGroup"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        }
+                    }
+                }
+            }
+        }
+    },
+    "revision": "20210210",
+    "rootUrl": "https://clouderrorreporting.googleapis.com/",
+    "schemas": {
+        "DeleteEventsResponse": {
+            "description": "Response message for deleting error events.",
+            "id": "DeleteEventsResponse",
+            "properties": {},
+            "type": "object"
+        },
+        "ErrorContext": {
+            "description": "A description of the context in which an error occurred. This data should be provided by the application when reporting an error, unless the error report has been generated automatically from Google App Engine logs.",
+            "id": "ErrorContext",
+            "properties": {
+                "httpRequest": {
+                    "$ref": "HttpRequestContext",
+                    "description": "The HTTP request which was processed when the error was triggered."
+                },
+                "reportLocation": {
+                    "$ref": "SourceLocation",
+                    "description": "The location in the source code where the decision was made to report the error, usually the place where it was logged. For a logged exception this would be the source line where the exception is logged, usually close to the place where it was caught."
+                },
+                "sourceReferences": {
+                    "description": "Source code that was used to build the executable which has caused the given error message.",
+                    "items": {
+                        "$ref": "SourceReference"
+                    },
+                    "type": "array"
+                },
+                "user": {
+                    "description": "The user who caused or was affected by the crash. This can be a user ID, an email address, or an arbitrary token that uniquely identifies the user. When sending an error report, leave this field empty if the user was not logged in. In this case the Error Reporting system will use other data, such as remote IP address, to distinguish affected users. See `affected_users_count` in `ErrorGroupStats`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ErrorEvent": {
+            "description": "An error event which is returned by the Error Reporting system.",
+            "id": "ErrorEvent",
+            "properties": {
+                "context": {
+                    "$ref": "ErrorContext",
+                    "description": "Data about the context in which the error occurred."
+                },
+                "eventTime": {
+                    "description": "Time when the event occurred as provided in the error report. If the report did not contain a timestamp, the time the error was received by the Error Reporting system is used.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "message": {
+                    "description": "The stack trace that was reported or logged by the service.",
+                    "type": "string"
+                },
+                "serviceContext": {
+                    "$ref": "ServiceContext",
+                    "description": "The `ServiceContext` for which this error was reported."
+                }
+            },
+            "type": "object"
+        },
+        "ErrorGroup": {
+            "description": "Description of a group of similar error events.",
+            "id": "ErrorGroup",
+            "properties": {
+                "groupId": {
+                    "description": "Group IDs are unique for a given project. If the same kind of error occurs in different service contexts, it will receive the same group ID.",
+                    "type": "string"
+                },
                 "name": {
-                  "type": "string",
-                  "location": "path",
-                  "pattern": "^projects/[^/]+/groups/[^/]+$",
-                  "description": "The group resource name. Example: projects/my-project-123/groups/CNSgkpnppqKCUw",
-                  "required": true
+                    "description": "The group resource name. Example: projects/my-project-123/groups/CNSgkpnppqKCUw",
+                    "type": "string"
+                },
+                "resolutionStatus": {
+                    "description": "Error group's resolution status. An unspecified resolution status will be interpreted as OPEN",
+                    "enum": [
+                        "RESOLUTION_STATUS_UNSPECIFIED",
+                        "OPEN",
+                        "ACKNOWLEDGED",
+                        "RESOLVED",
+                        "MUTED"
+                    ],
+                    "enumDescriptions": [
+                        "Status is unknown. When left unspecified in requests, it is treated like OPEN.",
+                        "The error group is not being addressed. This is the default for new groups. It is also used for errors re-occurring after marked RESOLVED.",
+                        "Error Group manually acknowledged, it can have an issue link attached.",
+                        "Error Group manually resolved, more events for this group are not expected to occur.",
+                        "The error group is muted and excluded by default on group stats requests."
+                    ],
+                    "type": "string"
+                },
+                "trackingIssues": {
+                    "description": "Associated tracking issues.",
+                    "items": {
+                        "$ref": "TrackingIssue"
+                    },
+                    "type": "array"
                 }
-              },
-              "id": "clouderrorreporting.projects.groups.update",
-              "description": "Replace the data for the specified group. Fails if the group does not exist.",
-              "request": {
-                "$ref": "ErrorGroup"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "PUT",
-              "path": "v1beta1/{+name}"
-            }
-          }
-        },
-        "events": {
-          "methods": {
-            "list": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "path": "v1beta1/{+projectName}/events",
-              "flatPath": "v1beta1/projects/{projectsId}/events",
-              "httpMethod": "GET",
-              "parameters": {
-                "pageToken": {
-                  "description": "Optional. A `next_page_token` provided by a previous response.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "location": "query",
-                  "format": "int32",
-                  "type": "integer",
-                  "description": "Optional. The maximum number of results to return per response."
-                },
-                "groupId": {
-                  "location": "query",
-                  "description": "Required. The group for which events shall be returned.",
-                  "type": "string"
-                },
-                "serviceFilter.service": {
-                  "type": "string",
-                  "description": "Optional. The exact value to match against [`ServiceContext.service`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.service).",
-                  "location": "query"
-                },
-                "serviceFilter.version": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "Optional. The exact value to match against [`ServiceContext.version`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.version)."
-                },
-                "serviceFilter.resourceType": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "Optional. The exact value to match against [`ServiceContext.resource_type`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.resource_type)."
-                },
-                "timeRange.period": {
-                  "description": "Restricts the query to the specified time range.",
-                  "enumDescriptions": [
-                    "Do not use.",
-                    "Retrieve data for the last hour. Recommended minimum timed count duration: 1 min.",
-                    "Retrieve data for the last 6 hours. Recommended minimum timed count duration: 10 min.",
-                    "Retrieve data for the last day. Recommended minimum timed count duration: 1 hour.",
-                    "Retrieve data for the last week. Recommended minimum timed count duration: 6 hours.",
-                    "Retrieve data for the last 30 days. Recommended minimum timed count duration: 1 day."
-                  ],
-                  "enum": [
-                    "PERIOD_UNSPECIFIED",
-                    "PERIOD_1_HOUR",
-                    "PERIOD_6_HOURS",
-                    "PERIOD_1_DAY",
-                    "PERIOD_1_WEEK",
-                    "PERIOD_30_DAYS"
-                  ],
-                  "location": "query",
-                  "type": "string"
-                },
-                "projectName": {
-                  "pattern": "^projects/[^/]+$",
-                  "required": true,
-                  "description": "Required. The resource name of the Google Cloud Platform project. Written as `projects/{projectID}`, where `{projectID}` is the [Google Cloud Platform project ID](https://support.google.com/cloud/answer/6158840). Example: `projects/my-project-123`.",
-                  "location": "path",
-                  "type": "string"
-                }
-              },
-              "id": "clouderrorreporting.projects.events.list",
-              "response": {
-                "$ref": "ListEventsResponse"
-              },
-              "parameterOrder": [
-                "projectName"
-              ],
-              "description": "Lists the specified events."
             },
-            "report": {
-              "parameterOrder": [
-                "projectName"
-              ],
-              "response": {
-                "$ref": "ReportErrorEventResponse"
-              },
-              "flatPath": "v1beta1/projects/{projectsId}/events:report",
-              "id": "clouderrorreporting.projects.events.report",
-              "path": "v1beta1/{+projectName}/events:report",
-              "request": {
-                "$ref": "ReportedErrorEvent"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "httpMethod": "POST",
-              "parameters": {
-                "projectName": {
-                  "location": "path",
-                  "description": "Required. The resource name of the Google Cloud Platform project. Written as `projects/{projectId}`, where `{projectId}` is the [Google Cloud Platform project ID](https://support.google.com/cloud/answer/6158840). Example: // `projects/my-project-123`.",
-                  "type": "string",
-                  "required": true,
-                  "pattern": "^projects/[^/]+$"
-                }
-              },
-              "description": "Report an individual error event. This endpoint accepts **either** an OAuth token, **or** an [API key](https://support.google.com/cloud/answer/6158862) for authentication. To use an API key, append it to the URL as the value of a `key` parameter. For example: `POST https://clouderrorreporting.googleapis.com/v1beta1/{projectName}/events:report?key=123ABC456`"
-            }
-          }
+            "type": "object"
         },
-        "groupStats": {
-          "methods": {
-            "list": {
-              "path": "v1beta1/{+projectName}/groupStats",
-              "flatPath": "v1beta1/projects/{projectsId}/groupStats",
-              "parameters": {
-                "pageToken": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "Optional. A `next_page_token` provided by a previous response. To view additional results, pass this token along with the identical query parameters as the first request."
+        "ErrorGroupStats": {
+            "description": "Data extracted for a specific group based on certain filter criteria, such as a given time period and/or service filter.",
+            "id": "ErrorGroupStats",
+            "properties": {
+                "affectedServices": {
+                    "description": "Service contexts with a non-zero error count for the given filter criteria. This list can be truncated if multiple services are affected. Refer to `num_affected_services` for the total count.",
+                    "items": {
+                        "$ref": "ServiceContext"
+                    },
+                    "type": "array"
                 },
-                "alignmentTime": {
-                  "location": "query",
-                  "type": "string",
-                  "format": "google-datetime",
-                  "description": "Optional. Time where the timed counts shall be aligned if rounded alignment is chosen. Default is 00:00 UTC."
+                "affectedUsersCount": {
+                    "description": "Approximate number of affected users in the given group that match the filter criteria. Users are distinguished by data in the `ErrorContext` of the individual error events, such as their login name or their remote IP address in case of HTTP requests. The number of affected users can be zero even if the number of errors is non-zero if no data was provided from which the affected user could be deduced. Users are counted based on data in the request context that was provided in the error report. If more users are implicitly affected, such as due to a crash of the whole service, this is not reflected here.",
+                    "format": "int64",
+                    "type": "string"
                 },
-                "order": {
-                  "enum": [
-                    "GROUP_ORDER_UNSPECIFIED",
-                    "COUNT_DESC",
-                    "LAST_SEEN_DESC",
-                    "CREATED_DESC",
-                    "AFFECTED_USERS_DESC"
-                  ],
-                  "type": "string",
-                  "enumDescriptions": [
-                    "No group order specified.",
-                    "Total count of errors in the given time window in descending order.",
-                    "Timestamp when the group was last seen in the given time window in descending order.",
-                    "Timestamp when the group was created in descending order.",
-                    "Number of affected users in the given time window in descending order."
-                  ],
-                  "description": "Optional. The sort order in which the results are returned. Default is `COUNT_DESC`.",
-                  "location": "query"
+                "count": {
+                    "description": "Approximate total number of events in the given group that match the filter criteria.",
+                    "format": "int64",
+                    "type": "string"
                 },
-                "serviceFilter.resourceType": {
-                  "description": "Optional. The exact value to match against [`ServiceContext.resource_type`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.resource_type).",
-                  "type": "string",
-                  "location": "query"
+                "firstSeenTime": {
+                    "description": "Approximate first occurrence that was ever seen for this group and which matches the given filter criteria, ignoring the time_range that was specified in the request.",
+                    "format": "google-datetime",
+                    "type": "string"
                 },
-                "projectName": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "pattern": "^projects/[^/]+$",
-                  "description": "Required. The resource name of the Google Cloud Platform project. Written as `projects/{projectID}`, where `{projectID}` is the [Google Cloud Platform project ID](https://support.google.com/cloud/answer/6158840). Example: `projects/my-project-123`."
+                "group": {
+                    "$ref": "ErrorGroup",
+                    "description": "Group data that is independent of the filter criteria."
                 },
-                "pageSize": {
-                  "description": "Optional. The maximum number of results to return per response. Default is 20.",
-                  "type": "integer",
-                  "format": "int32",
-                  "location": "query"
+                "lastSeenTime": {
+                    "description": "Approximate last occurrence that was ever seen for this group and which matches the given filter criteria, ignoring the time_range that was specified in the request.",
+                    "format": "google-datetime",
+                    "type": "string"
                 },
-                "groupId": {
-                  "repeated": true,
-                  "description": "Optional. List all ErrorGroupStats with these IDs.",
-                  "location": "query",
-                  "type": "string"
+                "numAffectedServices": {
+                    "description": "The total number of services with a non-zero error count for the given filter criteria.",
+                    "format": "int32",
+                    "type": "integer"
                 },
-                "serviceFilter.version": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "Optional. The exact value to match against [`ServiceContext.version`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.version)."
+                "representative": {
+                    "$ref": "ErrorEvent",
+                    "description": "An arbitrary event that is chosen as representative for the whole group. The representative event is intended to be used as a quick preview for the whole group. Events in the group are usually sufficiently similar to each other such that showing an arbitrary representative provides insight into the characteristics of the group as a whole."
                 },
-                "serviceFilter.service": {
-                  "type": "string",
-                  "description": "Optional. The exact value to match against [`ServiceContext.service`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.service).",
-                  "location": "query"
-                },
-                "timedCountDuration": {
-                  "format": "google-duration",
-                  "location": "query",
-                  "type": "string",
-                  "description": "Optional. The preferred duration for a single returned `TimedCount`. If not set, no timed counts are returned."
-                },
-                "timeRange.period": {
-                  "location": "query",
-                  "description": "Restricts the query to the specified time range.",
-                  "type": "string",
-                  "enumDescriptions": [
-                    "Do not use.",
-                    "Retrieve data for the last hour. Recommended minimum timed count duration: 1 min.",
-                    "Retrieve data for the last 6 hours. Recommended minimum timed count duration: 10 min.",
-                    "Retrieve data for the last day. Recommended minimum timed count duration: 1 hour.",
-                    "Retrieve data for the last week. Recommended minimum timed count duration: 6 hours.",
-                    "Retrieve data for the last 30 days. Recommended minimum timed count duration: 1 day."
-                  ],
-                  "enum": [
-                    "PERIOD_UNSPECIFIED",
-                    "PERIOD_1_HOUR",
-                    "PERIOD_6_HOURS",
-                    "PERIOD_1_DAY",
-                    "PERIOD_1_WEEK",
-                    "PERIOD_30_DAYS"
-                  ]
-                },
-                "alignment": {
-                  "description": "Optional. The alignment of the timed counts to be returned. Default is `ALIGNMENT_EQUAL_AT_END`.",
-                  "location": "query",
-                  "enumDescriptions": [
-                    "No alignment specified.",
-                    "The time periods shall be consecutive, have width equal to the requested duration, and be aligned at the `alignment_time` provided in the request. The `alignment_time` does not have to be inside the query period but even if it is outside, only time periods are returned which overlap with the query period. A rounded alignment will typically result in a different size of the first or the last time period.",
-                    "The time periods shall be consecutive, have width equal to the requested duration, and be aligned at the end of the requested time period. This can result in a different size of the first time period."
-                  ],
-                  "type": "string",
-                  "enum": [
-                    "ERROR_COUNT_ALIGNMENT_UNSPECIFIED",
-                    "ALIGNMENT_EQUAL_ROUNDED",
-                    "ALIGNMENT_EQUAL_AT_END"
-                  ]
+                "timedCounts": {
+                    "description": "Approximate number of occurrences over time. Timed counts returned by ListGroups are guaranteed to be: - Inside the requested time interval - Non-overlapping, and - Ordered by ascending time.",
+                    "items": {
+                        "$ref": "TimedCount"
+                    },
+                    "type": "array"
                 }
-              },
-              "response": {
-                "$ref": "ListGroupStatsResponse"
-              },
-              "id": "clouderrorreporting.projects.groupStats.list",
-              "parameterOrder": [
-                "projectName"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "httpMethod": "GET",
-              "description": "Lists the specified groups."
-            }
-          }
+            },
+            "type": "object"
+        },
+        "HttpRequestContext": {
+            "description": "HTTP request data that is related to a reported error. This data should be provided by the application when reporting an error, unless the error report has been generated automatically from Google App Engine logs.",
+            "id": "HttpRequestContext",
+            "properties": {
+                "method": {
+                    "description": "The type of HTTP request, such as `GET`, `POST`, etc.",
+                    "type": "string"
+                },
+                "referrer": {
+                    "description": "The referrer information that is provided with the request.",
+                    "type": "string"
+                },
+                "remoteIp": {
+                    "description": "The IP address from which the request originated. This can be IPv4, IPv6, or a token which is derived from the IP address, depending on the data that has been provided in the error report.",
+                    "type": "string"
+                },
+                "responseStatusCode": {
+                    "description": "The HTTP response status code for the request.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "url": {
+                    "description": "The URL of the request.",
+                    "type": "string"
+                },
+                "userAgent": {
+                    "description": "The user agent information that is provided with the request.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListEventsResponse": {
+            "description": "Contains a set of requested error events.",
+            "id": "ListEventsResponse",
+            "properties": {
+                "errorEvents": {
+                    "description": "The error events which match the given request.",
+                    "items": {
+                        "$ref": "ErrorEvent"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "If non-empty, more results are available. Pass this token, along with the same query parameters as the first request, to view the next page of results.",
+                    "type": "string"
+                },
+                "timeRangeBegin": {
+                    "description": "The timestamp specifies the start time to which the request was restricted.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListGroupStatsResponse": {
+            "description": "Contains a set of requested error group stats.",
+            "id": "ListGroupStatsResponse",
+            "properties": {
+                "errorGroupStats": {
+                    "description": "The error group stats which match the given request.",
+                    "items": {
+                        "$ref": "ErrorGroupStats"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "If non-empty, more results are available. Pass this token, along with the same query parameters as the first request, to view the next page of results.",
+                    "type": "string"
+                },
+                "timeRangeBegin": {
+                    "description": "The timestamp specifies the start time to which the request was restricted. The start time is set based on the requested time range. It may be adjusted to a later time if a project has exceeded the storage quota and older data has been deleted.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReportErrorEventResponse": {
+            "description": "Response for reporting an individual error event. Data may be added to this message in the future.",
+            "id": "ReportErrorEventResponse",
+            "properties": {},
+            "type": "object"
+        },
+        "ReportedErrorEvent": {
+            "description": "An error event which is reported to the Error Reporting system.",
+            "id": "ReportedErrorEvent",
+            "properties": {
+                "context": {
+                    "$ref": "ErrorContext",
+                    "description": "Optional. A description of the context in which the error occurred."
+                },
+                "eventTime": {
+                    "description": "Optional. Time when the event occurred. If not provided, the time when the event was received by the Error Reporting system will be used.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "message": {
+                    "description": "Required. The error message. If no `context.reportLocation` is provided, the message must contain a header (typically consisting of the exception type name and an error message) and an exception stack trace in one of the supported programming languages and formats. Supported languages are Java, Python, JavaScript, Ruby, C#, PHP, and Go. Supported stack trace formats are: * **Java**: Must be the return value of [`Throwable.printStackTrace()`](https://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html#printStackTrace%28%29). * **Python**: Must be the return value of [`traceback.format_exc()`](https://docs.python.org/2/library/traceback.html#traceback.format_exc). * **JavaScript**: Must be the value of [`error.stack`](https://github.com/v8/v8/wiki/Stack-Trace-API) as returned by V8. * **Ruby**: Must contain frames returned by [`Exception.backtrace`](https://ruby-doc.org/core-2.2.0/Exception.html#method-i-backtrace). * **C#**: Must be the return value of [`Exception.ToString()`](https://msdn.microsoft.com/en-us/library/system.exception.tostring.aspx). * **PHP**: Must start with `PHP (Notice|Parse error|Fatal error|Warning)` and contain the result of [`(string)$exception`](http://php.net/manual/en/exception.tostring.php). * **Go**: Must be the return value of [`runtime.Stack()`](https://golang.org/pkg/runtime/debug/#Stack).",
+                    "type": "string"
+                },
+                "serviceContext": {
+                    "$ref": "ServiceContext",
+                    "description": "Required. The service context in which this error has occurred."
+                }
+            },
+            "type": "object"
+        },
+        "ServiceContext": {
+            "description": "Describes a running service that sends errors. Its version changes over time and multiple versions can run in parallel.",
+            "id": "ServiceContext",
+            "properties": {
+                "resourceType": {
+                    "description": "Type of the MonitoredResource. List of possible values: https://cloud.google.com/monitoring/api/resources Value is set automatically for incoming errors and must not be set when reporting errors.",
+                    "type": "string"
+                },
+                "service": {
+                    "description": "An identifier of the service, such as the name of the executable, job, or Google App Engine service name. This field is expected to have a low number of values that are relatively stable over time, as opposed to `version`, which can be changed whenever new code is deployed. Contains the service name for error reports extracted from Google App Engine logs or `default` if the App Engine default service is used.",
+                    "type": "string"
+                },
+                "version": {
+                    "description": "Represents the source code version that the developer provided, which could represent a version label or a Git SHA-1 hash, for example. For App Engine standard environment, the version is set to the version of the app.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SourceLocation": {
+            "description": "Indicates a location in the source code of the service for which errors are reported. `functionName` must be provided by the application when reporting an error, unless the error report contains a `message` with a supported exception stack trace. All fields are optional for the later case.",
+            "id": "SourceLocation",
+            "properties": {
+                "filePath": {
+                    "description": "The source code filename, which can include a truncated relative path, or a full path from a production machine.",
+                    "type": "string"
+                },
+                "functionName": {
+                    "description": "Human-readable name of a function or method. The value can include optional context like the class or package name. For example, `my.package.MyClass.method` in case of Java.",
+                    "type": "string"
+                },
+                "lineNumber": {
+                    "description": "1-based. 0 indicates that the line number is unknown.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "SourceReference": {
+            "description": "A reference to a particular snapshot of the source tree used to build and deploy an application.",
+            "id": "SourceReference",
+            "properties": {
+                "repository": {
+                    "description": "Optional. A URI string identifying the repository. Example: \"https://github.com/GoogleCloudPlatform/kubernetes.git\"",
+                    "type": "string"
+                },
+                "revisionId": {
+                    "description": "The canonical and persistent identifier of the deployed revision. Example (git): \"0035781c50ec7aa23385dc841529ce8a4b70db1b\"",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TimedCount": {
+            "description": "The number of errors in a given time period. All numbers are approximate since the error events are sampled before counting them.",
+            "id": "TimedCount",
+            "properties": {
+                "count": {
+                    "description": "Approximate number of occurrences in the given time period.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "endTime": {
+                    "description": "End of the time period to which `count` refers (excluded).",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "startTime": {
+                    "description": "Start of the time period to which `count` refers (included).",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TrackingIssue": {
+            "description": "Information related to tracking the progress on resolving the error.",
+            "id": "TrackingIssue",
+            "properties": {
+                "url": {
+                    "description": "A URL pointing to a related entry in an issue tracking system. Example: `https://github.com/user/project/issues/4`",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         }
-      },
-      "methods": {
-        "deleteEvents": {
-          "flatPath": "v1beta1/projects/{projectsId}/events",
-          "path": "v1beta1/{+projectName}/events",
-          "id": "clouderrorreporting.projects.deleteEvents",
-          "response": {
-            "$ref": "DeleteEventsResponse"
-          },
-          "parameters": {
-            "projectName": {
-              "description": "Required. The resource name of the Google Cloud Platform project. Written as `projects/{projectID}`, where `{projectID}` is the [Google Cloud Platform project ID](https://support.google.com/cloud/answer/6158840). Example: `projects/my-project-123`.",
-              "pattern": "^projects/[^/]+$",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "description": "Deletes all error events of a given project.",
-          "parameterOrder": [
-            "projectName"
-          ],
-          "httpMethod": "DELETE"
-        }
-      }
-    }
-  },
-  "description": "Groups and counts similar errors from cloud services and applications, reports new errors, and provides access to error groups and their associated errors. ",
-  "title": "Error Reporting API",
-  "ownerName": "Google",
-  "parameters": {
-    "$.xgafv": {
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "type": "string",
-      "description": "V1 error format.",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ]
     },
-    "prettyPrint": {
-      "type": "boolean",
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "default": "true"
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
-    },
-    "fields": {
-      "location": "query",
-      "type": "string",
-      "description": "Selector specifying which fields to include in a partial response."
-    },
-    "alt": {
-      "default": "json",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "type": "string",
-      "location": "query",
-      "description": "Data format for response."
-    },
-    "upload_protocol": {
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
-    },
-    "key": {
-      "type": "string",
-      "location": "query",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token."
-    },
-    "uploadType": {
-      "type": "string",
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
-    },
-    "access_token": {
-      "location": "query",
-      "type": "string",
-      "description": "OAuth access token."
-    },
-    "quotaUser": {
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "type": "string",
-      "location": "query"
-    }
-  },
-  "baseUrl": "https://clouderrorreporting.googleapis.com/",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "basePath": "",
-  "documentationLink": "https://cloud.google.com/error-reporting/",
-  "ownerDomain": "google.com",
-  "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
-  },
-  "version_module": true
-}
+    "servicePath": "",
+    "title": "Error Reporting API",
+    "version": "v1beta1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/cloudiot.v1.json b/googleapiclient/discovery_cache/documents/cloudiot.v1.json
index 40c9ec6..6d7b8ed 100644
--- a/googleapiclient/discovery_cache/documents/cloudiot.v1.json
+++ b/googleapiclient/discovery_cache/documents/cloudiot.v1.json
@@ -1,1693 +1,1693 @@
 {
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloudiot": {
-          "description": "Register and manage devices in the Google Cloud IoT service"
-        },
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
+                },
+                "https://www.googleapis.com/auth/cloudiot": {
+                    "description": "Register and manage devices in the Google Cloud IoT service"
+                }
+            }
         }
-      }
-    }
-  },
-  "protocol": "rest",
-  "id": "cloudiot:v1",
-  "ownerName": "Google",
-  "schemas": {
-    "Empty": {
-      "properties": {},
-      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
-      "id": "Empty",
-      "type": "object"
     },
-    "DeviceCredential": {
-      "properties": {
-        "expirationTime": {
-          "format": "google-datetime",
-          "description": "[Optional] The time at which this credential becomes invalid. This credential will be ignored for new client authentication requests after this timestamp; however, it will not be automatically deleted.",
-          "type": "string"
-        },
-        "publicKey": {
-          "$ref": "PublicKeyCredential",
-          "description": "A public key used to verify the signature of JSON Web Tokens (JWTs). When adding a new device credential, either via device creation or via modifications, this public key credential may be required to be signed by one of the registry level certificates. More specifically, if the registry contains at least one certificate, any new device credential must be signed by one of the registry certificates. As a result, when the registry contains certificates, only X.509 certificates are accepted as device credentials. However, if the registry does not contain a certificate, self-signed certificates and public keys will be accepted. New device credentials must be different from every registry-level certificate."
-        }
-      },
-      "id": "DeviceCredential",
-      "description": "A server-stored device credential used for authentication.",
-      "type": "object"
+    "basePath": "",
+    "baseUrl": "https://cloudiot.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Cloud Iot",
+    "description": "Registers and manages IoT (Internet of Things) devices that connect to the Google Cloud Platform. ",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/iot",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
     },
-    "Binding": {
-      "description": "Associates `members` with a `role`.",
-      "type": "object",
-      "properties": {
-        "role": {
-          "type": "string",
-          "description": "Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`."
-        },
-        "condition": {
-          "description": "The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
-          "$ref": "Expr"
-        },
-        "members": {
-          "description": "Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. ",
-          "items": {
+    "id": "cloudiot:v1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://cloudiot.mtls.googleapis.com/",
+    "name": "cloudiot",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
             "type": "string"
-          },
-          "type": "array"
-        }
-      },
-      "id": "Binding"
-    },
-    "GetPolicyOptions": {
-      "type": "object",
-      "id": "GetPolicyOptions",
-      "properties": {
-        "requestedPolicyVersion": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Optional. The policy format version to be returned. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional bindings must specify version 3. Policies without any conditional bindings may specify any valid value or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)."
-        }
-      },
-      "description": "Encapsulates settings provided to GetIamPolicy."
-    },
-    "X509CertificateDetails": {
-      "properties": {
-        "publicKeyType": {
-          "type": "string",
-          "description": "The type of public key in the certificate."
         },
-        "issuer": {
-          "type": "string",
-          "description": "The entity that signed the certificate."
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
         },
-        "subject": {
-          "description": "The entity the certificate and public key belong to.",
-          "type": "string"
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "signatureAlgorithm": {
-          "type": "string",
-          "description": "The algorithm used to sign the certificate."
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
         },
-        "expiryTime": {
-          "format": "google-datetime",
-          "description": "The time the certificate becomes invalid.",
-          "type": "string"
-        },
-        "startTime": {
-          "description": "The time the certificate becomes valid.",
-          "type": "string",
-          "format": "google-datetime"
-        }
-      },
-      "id": "X509CertificateDetails",
-      "type": "object",
-      "description": "Details of an X.509 certificate. For informational purposes only."
-    },
-    "PublicKeyCredential": {
-      "description": "A public key format and data.",
-      "id": "PublicKeyCredential",
-      "type": "object",
-      "properties": {
-        "format": {
-          "enumDescriptions": [
-            "The format has not been specified. This is an invalid default value and must not be used.",
-            "An RSA public key encoded in base64, and wrapped by `-----BEGIN PUBLIC KEY-----` and `-----END PUBLIC KEY-----`. This can be used to verify `RS256` signatures in JWT tokens ([RFC7518]( https://www.ietf.org/rfc/rfc7518.txt)).",
-            "As RSA_PEM, but wrapped in an X.509v3 certificate ([RFC5280]( https://www.ietf.org/rfc/rfc5280.txt)), encoded in base64, and wrapped by `-----BEGIN CERTIFICATE-----` and `-----END CERTIFICATE-----`.",
-            "Public key for the ECDSA algorithm using P-256 and SHA-256, encoded in base64, and wrapped by `-----BEGIN PUBLIC KEY-----` and `-----END PUBLIC KEY-----`. This can be used to verify JWT tokens with the `ES256` algorithm ([RFC7518](https://www.ietf.org/rfc/rfc7518.txt)). This curve is defined in [OpenSSL](https://www.openssl.org/) as the `prime256v1` curve.",
-            "As ES256_PEM, but wrapped in an X.509v3 certificate ([RFC5280]( https://www.ietf.org/rfc/rfc5280.txt)), encoded in base64, and wrapped by `-----BEGIN CERTIFICATE-----` and `-----END CERTIFICATE-----`."
-          ],
-          "type": "string",
-          "description": "The format of the key.",
-          "enum": [
-            "UNSPECIFIED_PUBLIC_KEY_FORMAT",
-            "RSA_PEM",
-            "RSA_X509_PEM",
-            "ES256_PEM",
-            "ES256_X509_PEM"
-          ]
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
         },
         "key": {
-          "description": "The key data.",
-          "type": "string"
-        }
-      }
-    },
-    "Policy": {
-      "description": "An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { \"bindings\": [ { \"role\": \"roles/resourcemanager.organizationAdmin\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\" ] }, { \"role\": \"roles/resourcemanager.organizationViewer\", \"members\": [ \"user:eve@example.com\" ], \"condition\": { \"title\": \"expirable access\", \"description\": \"Does not grant access after Sep 2020\", \"expression\": \"request.time \u003c timestamp('2020-10-01T00:00:00.000Z')\", } } ], \"etag\": \"BwWWja0YfJA=\", \"version\": 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time \u003c timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).",
-      "type": "object",
-      "properties": {
-        "etag": {
-          "type": "string",
-          "description": "`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.",
-          "format": "byte"
-        },
-        "bindings": {
-          "items": {
-            "$ref": "Binding"
-          },
-          "description": "Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.",
-          "type": "array"
-        },
-        "version": {
-          "description": "Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "Policy"
-    },
-    "HttpConfig": {
-      "properties": {
-        "httpEnabledState": {
-          "type": "string",
-          "description": "If enabled, allows devices to use DeviceService via the HTTP protocol. Otherwise, any requests to DeviceService will fail for this registry.",
-          "enumDescriptions": [
-            "No HTTP state specified. If not specified, DeviceService will be enabled by default.",
-            "Enables DeviceService (HTTP) service for the registry.",
-            "Disables DeviceService (HTTP) service for the registry."
-          ],
-          "enum": [
-            "HTTP_STATE_UNSPECIFIED",
-            "HTTP_ENABLED",
-            "HTTP_DISABLED"
-          ]
-        }
-      },
-      "type": "object",
-      "description": "The configuration of the HTTP bridge for a device registry.",
-      "id": "HttpConfig"
-    },
-    "DeviceState": {
-      "properties": {
-        "binaryData": {
-          "type": "string",
-          "description": "The device state data.",
-          "format": "byte"
-        },
-        "updateTime": {
-          "description": "[Output only] The time at which this state version was updated in Cloud IoT Core.",
-          "type": "string",
-          "format": "google-datetime"
-        }
-      },
-      "description": "The device state, as reported by the device.",
-      "type": "object",
-      "id": "DeviceState"
-    },
-    "PublicKeyCertificate": {
-      "properties": {
-        "format": {
-          "enumDescriptions": [
-            "The format has not been specified. This is an invalid default value and must not be used.",
-            "An X.509v3 certificate ([RFC5280](https://www.ietf.org/rfc/rfc5280.txt)), encoded in base64, and wrapped by `-----BEGIN CERTIFICATE-----` and `-----END CERTIFICATE-----`."
-          ],
-          "type": "string",
-          "description": "The certificate format.",
-          "enum": [
-            "UNSPECIFIED_PUBLIC_KEY_CERTIFICATE_FORMAT",
-            "X509_CERTIFICATE_PEM"
-          ]
-        },
-        "x509Details": {
-          "$ref": "X509CertificateDetails",
-          "description": "[Output only] The certificate details. Used only for X.509 certificates."
-        },
-        "certificate": {
-          "type": "string",
-          "description": "The certificate data."
-        }
-      },
-      "id": "PublicKeyCertificate",
-      "description": "A public key certificate format and data.",
-      "type": "object"
-    },
-    "Expr": {
-      "id": "Expr",
-      "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() \u003c 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.",
-      "type": "object",
-      "properties": {
-        "expression": {
-          "type": "string",
-          "description": "Textual representation of an expression in Common Expression Language syntax."
-        },
-        "title": {
-          "description": "Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.",
-          "type": "string"
-        },
-        "location": {
-          "description": "Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.",
-          "type": "string"
-        },
-        "description": {
-          "type": "string",
-          "description": "Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI."
-        }
-      }
-    },
-    "BindDeviceToGatewayResponse": {
-      "description": "Response for `BindDeviceToGateway`.",
-      "id": "BindDeviceToGatewayResponse",
-      "properties": {},
-      "type": "object"
-    },
-    "StateNotificationConfig": {
-      "id": "StateNotificationConfig",
-      "description": "The configuration for notification of new states received from the device.",
-      "type": "object",
-      "properties": {
-        "pubsubTopicName": {
-          "description": "A Cloud Pub/Sub topic name. For example, `projects/myProject/topics/deviceEvents`.",
-          "type": "string"
-        }
-      }
-    },
-    "GatewayConfig": {
-      "type": "object",
-      "properties": {
-        "lastAccessedGatewayTime": {
-          "type": "string",
-          "description": "[Output only] The most recent time at which the device accessed the gateway specified in `last_accessed_gateway`.",
-          "format": "google-datetime"
-        },
-        "gatewayAuthMethod": {
-          "enum": [
-            "GATEWAY_AUTH_METHOD_UNSPECIFIED",
-            "ASSOCIATION_ONLY",
-            "DEVICE_AUTH_TOKEN_ONLY",
-            "ASSOCIATION_AND_DEVICE_AUTH_TOKEN"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "No authentication/authorization method specified. No devices are allowed to access the gateway.",
-            "The device is authenticated through the gateway association only. Device credentials are ignored even if provided.",
-            "The device is authenticated through its own credentials. Gateway association is not checked.",
-            "The device is authenticated through both device credentials and gateway association. The device must be bound to the gateway and must provide its own credentials."
-          ],
-          "description": "Indicates how to authorize and/or authenticate devices to access the gateway."
-        },
-        "gatewayType": {
-          "enum": [
-            "GATEWAY_TYPE_UNSPECIFIED",
-            "GATEWAY",
-            "NON_GATEWAY"
-          ],
-          "type": "string",
-          "description": "Indicates whether the device is a gateway.",
-          "enumDescriptions": [
-            "If unspecified, the device is considered a non-gateway device.",
-            "The device is a gateway.",
-            "The device is not a gateway."
-          ]
-        },
-        "lastAccessedGatewayId": {
-          "type": "string",
-          "description": "[Output only] The ID of the gateway the device accessed most recently."
-        }
-      },
-      "description": "Gateway-related configuration and state.",
-      "id": "GatewayConfig"
-    },
-    "EventNotificationConfig": {
-      "description": "The configuration for forwarding telemetry events.",
-      "type": "object",
-      "id": "EventNotificationConfig",
-      "properties": {
-        "subfolderMatches": {
-          "type": "string",
-          "description": "If the subfolder name matches this string exactly, this configuration will be used. The string must not include the leading '/' character. If empty, all strings are matched. This field is used only for telemetry events; subfolders are not supported for state changes."
-        },
-        "pubsubTopicName": {
-          "type": "string",
-          "description": "A Cloud Pub/Sub topic name. For example, `projects/myProject/topics/deviceEvents`."
-        }
-      }
-    },
-    "ListDeviceStatesResponse": {
-      "id": "ListDeviceStatesResponse",
-      "properties": {
-        "deviceStates": {
-          "type": "array",
-          "items": {
-            "$ref": "DeviceState"
-          },
-          "description": "The last few device states. States are listed in descending order of server update time, starting from the most recent one."
-        }
-      },
-      "type": "object",
-      "description": "Response for `ListDeviceStates`."
-    },
-    "DeviceConfig": {
-      "properties": {
-        "deviceAckTime": {
-          "type": "string",
-          "description": "[Output only] The time at which Cloud IoT Core received the acknowledgment from the device, indicating that the device has received this configuration version. If this field is not present, the device has not yet acknowledged that it received this version. Note that when the config was sent to the device, many config versions may have been available in Cloud IoT Core while the device was disconnected, and on connection, only the latest version is sent to the device. Some versions may never be sent to the device, and therefore are never acknowledged. This timestamp is set by Cloud IoT Core.",
-          "format": "google-datetime"
-        },
-        "version": {
-          "format": "int64",
-          "type": "string",
-          "description": "[Output only] The version of this update. The version number is assigned by the server, and is always greater than 0 after device creation. The version must be 0 on the `CreateDevice` request if a `config` is specified; the response of `CreateDevice` will always have a value of 1."
-        },
-        "cloudUpdateTime": {
-          "description": "[Output only] The time at which this configuration version was updated in Cloud IoT Core. This timestamp is set by the server.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "binaryData": {
-          "format": "byte",
-          "description": "The device configuration data.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "The device configuration. Eventually delivered to devices.",
-      "id": "DeviceConfig"
-    },
-    "BindDeviceToGatewayRequest": {
-      "description": "Request for `BindDeviceToGateway`.",
-      "type": "object",
-      "properties": {
-        "gatewayId": {
-          "type": "string",
-          "description": "Required. The value of `gateway_id` can be either the device numeric ID or the user-defined device identifier."
-        },
-        "deviceId": {
-          "description": "Required. The device to associate with the specified gateway. The value of `device_id` can be either the device numeric ID or the user-defined device identifier.",
-          "type": "string"
-        }
-      },
-      "id": "BindDeviceToGatewayRequest"
-    },
-    "ModifyCloudToDeviceConfigRequest": {
-      "description": "Request for `ModifyCloudToDeviceConfig`.",
-      "properties": {
-        "versionToUpdate": {
-          "format": "int64",
-          "type": "string",
-          "description": "The version number to update. If this value is zero, it will not check the version number of the server and will always update the current version; otherwise, this update will fail if the version number found on the server does not match this version number. This is used to support multiple simultaneous updates without losing data."
-        },
-        "binaryData": {
-          "type": "string",
-          "description": "Required. The configuration data for the device.",
-          "format": "byte"
-        }
-      },
-      "id": "ModifyCloudToDeviceConfigRequest",
-      "type": "object"
-    },
-    "Device": {
-      "type": "object",
-      "id": "Device",
-      "properties": {
-        "logLevel": {
-          "description": "**Beta Feature** The logging verbosity for device activity. If unspecified, DeviceRegistry.log_level will be used.",
-          "enumDescriptions": [
-            "No logging specified. If not specified, logging will be disabled.",
-            "Disables logging.",
-            "Error events will be logged.",
-            "Informational events will be logged, such as connections and disconnections.",
-            "All events will be logged."
-          ],
-          "enum": [
-            "LOG_LEVEL_UNSPECIFIED",
-            "NONE",
-            "ERROR",
-            "INFO",
-            "DEBUG"
-          ],
-          "type": "string"
-        },
-        "id": {
-          "type": "string",
-          "description": "The user-defined device identifier. The device ID must be unique within a device registry."
-        },
-        "name": {
-          "description": "The resource path name. For example, `projects/p1/locations/us-central1/registries/registry0/devices/dev0` or `projects/p1/locations/us-central1/registries/registry0/devices/{num_id}`. When `name` is populated as a response from the service, it always ends in the device numeric ID.",
-          "type": "string"
-        },
-        "config": {
-          "description": "The most recent device configuration, which is eventually sent from Cloud IoT Core to the device. If not present on creation, the configuration will be initialized with an empty payload and version value of `1`. To update this field after creation, use the `DeviceManager.ModifyCloudToDeviceConfig` method.",
-          "$ref": "DeviceConfig"
-        },
-        "lastConfigAckTime": {
-          "format": "google-datetime",
-          "type": "string",
-          "description": "[Output only] The last time a cloud-to-device config version acknowledgment was received from the device. This field is only for configurations sent through MQTT."
-        },
-        "lastErrorStatus": {
-          "description": "[Output only] The error message of the most recent error, such as a failure to publish to Cloud Pub/Sub. 'last_error_time' is the timestamp of this field. If no errors have occurred, this field has an empty message and the status code 0 == OK. Otherwise, this field is expected to have a status code other than OK.",
-          "$ref": "Status"
-        },
-        "state": {
-          "description": "[Output only] The state most recently received from the device. If no state has been reported, this field is not present.",
-          "$ref": "DeviceState"
-        },
-        "credentials": {
-          "type": "array",
-          "description": "The credentials used to authenticate this device. To allow credential rotation without interruption, multiple device credentials can be bound to this device. No more than 3 credentials can be bound to a single device at a time. When new credentials are added to a device, they are verified against the registry credentials. For details, see the description of the `DeviceRegistry.credentials` field.",
-          "items": {
-            "$ref": "DeviceCredential"
-          }
-        },
-        "numId": {
-          "type": "string",
-          "format": "uint64",
-          "description": "[Output only] A server-defined unique numeric ID for the device. This is a more compact way to identify devices, and it is globally unique."
-        },
-        "lastErrorTime": {
-          "description": "[Output only] The time the most recent error occurred, such as a failure to publish to Cloud Pub/Sub. This field is the timestamp of 'last_error_status'.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "blocked": {
-          "type": "boolean",
-          "description": "If a device is blocked, connections or requests from this device will fail. Can be used to temporarily prevent the device from connecting if, for example, the sensor is generating bad data and needs maintenance."
-        },
-        "lastStateTime": {
-          "format": "google-datetime",
-          "description": "[Output only] The last time a state event was received. Timestamps are periodically collected and written to storage; they may be stale by a few minutes.",
-          "type": "string"
-        },
-        "lastHeartbeatTime": {
-          "format": "google-datetime",
-          "type": "string",
-          "description": "[Output only] The last time an MQTT `PINGREQ` was received. This field applies only to devices connecting through MQTT. MQTT clients usually only send `PINGREQ` messages if the connection is idle, and no other messages have been sent. Timestamps are periodically collected and written to storage; they may be stale by a few minutes."
-        },
-        "lastConfigSendTime": {
-          "type": "string",
-          "description": "[Output only] The last time a cloud-to-device config version was sent to the device.",
-          "format": "google-datetime"
-        },
-        "metadata": {
-          "description": "The metadata key-value pairs assigned to the device. This metadata is not interpreted or indexed by Cloud IoT Core. It can be used to add contextual information for the device. Keys must conform to the regular expression a-zA-Z+ and be less than 128 bytes in length. Values are free-form strings. Each value must be less than or equal to 32 KB in size. The total size of all keys and values must be less than 256 KB, and the maximum number of key-value pairs is 500.",
-          "additionalProperties": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
             "type": "string"
-          },
-          "type": "object"
         },
-        "gatewayConfig": {
-          "description": "Gateway-related configuration and state.",
-          "$ref": "GatewayConfig"
-        },
-        "lastEventTime": {
-          "format": "google-datetime",
-          "description": "[Output only] The last time a telemetry event was received. Timestamps are periodically collected and written to storage; they may be stale by a few minutes.",
-          "type": "string"
-        }
-      },
-      "description": "The device resource."
-    },
-    "RegistryCredential": {
-      "properties": {
-        "publicKeyCertificate": {
-          "$ref": "PublicKeyCertificate",
-          "description": "A public key certificate used to verify the device credentials."
-        }
-      },
-      "description": "A server-stored registry credential used to validate device credentials.",
-      "type": "object",
-      "id": "RegistryCredential"
-    },
-    "UnbindDeviceFromGatewayResponse": {
-      "id": "UnbindDeviceFromGatewayResponse",
-      "type": "object",
-      "description": "Response for `UnbindDeviceFromGateway`.",
-      "properties": {}
-    },
-    "SetIamPolicyRequest": {
-      "description": "Request message for `SetIamPolicy` method.",
-      "type": "object",
-      "properties": {
-        "policy": {
-          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them.",
-          "$ref": "Policy"
-        }
-      },
-      "id": "SetIamPolicyRequest"
-    },
-    "Status": {
-      "id": "Status",
-      "properties": {
-        "details": {
-          "items": {
-            "type": "object",
-            "additionalProperties": {
-              "type": "any",
-              "description": "Properties of the object. Contains field @type with type URL."
-            }
-          },
-          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
-          "type": "array"
-        },
-        "code": {
-          "format": "int32",
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "type": "integer"
-        },
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
-          "type": "string"
-        }
-      },
-      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
-      "type": "object"
-    },
-    "MqttConfig": {
-      "properties": {
-        "mqttEnabledState": {
-          "enum": [
-            "MQTT_STATE_UNSPECIFIED",
-            "MQTT_ENABLED",
-            "MQTT_DISABLED"
-          ],
-          "description": "If enabled, allows connections using the MQTT protocol. Otherwise, MQTT connections to this registry will fail.",
-          "enumDescriptions": [
-            "No MQTT state specified. If not specified, MQTT will be enabled by default.",
-            "Enables a MQTT connection.",
-            "Disables a MQTT connection."
-          ],
-          "type": "string"
-        }
-      },
-      "id": "MqttConfig",
-      "type": "object",
-      "description": "The configuration of MQTT for a device registry."
-    },
-    "TestIamPermissionsRequest": {
-      "type": "object",
-      "id": "TestIamPermissionsRequest",
-      "description": "Request message for `TestIamPermissions` method.",
-      "properties": {
-        "permissions": {
-          "type": "array",
-          "items": {
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
             "type": "string"
-          },
-          "description": "The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or 'storage.*') are not allowed. For more information see [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions)."
-        }
-      }
-    },
-    "TestIamPermissionsResponse": {
-      "properties": {
-        "permissions": {
-          "items": {
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
             "type": "string"
-          },
-          "type": "array",
-          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is allowed."
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      },
-      "type": "object",
-      "id": "TestIamPermissionsResponse",
-      "description": "Response message for `TestIamPermissions` method."
     },
-    "ListDeviceConfigVersionsResponse": {
-      "properties": {
-        "deviceConfigs": {
-          "items": {
-            "$ref": "DeviceConfig"
-          },
-          "type": "array",
-          "description": "The device configuration for the last few versions. Versions are listed in decreasing order, starting from the most recent one."
-        }
-      },
-      "description": "Response for `ListDeviceConfigVersions`.",
-      "type": "object",
-      "id": "ListDeviceConfigVersionsResponse"
-    },
-    "DeviceRegistry": {
-      "id": "DeviceRegistry",
-      "description": "A container for a group of devices.",
-      "properties": {
-        "eventNotificationConfigs": {
-          "items": {
-            "$ref": "EventNotificationConfig"
-          },
-          "description": "The configuration for notification of telemetry events received from the device. All telemetry events that were successfully published by the device and acknowledged by Cloud IoT Core are guaranteed to be delivered to Cloud Pub/Sub. If multiple configurations match a message, only the first matching configuration is used. If you try to publish a device telemetry event using MQTT without specifying a Cloud Pub/Sub topic for the device's registry, the connection closes automatically. If you try to do so using an HTTP connection, an error is returned. Up to 10 configurations may be provided.",
-          "type": "array"
-        },
-        "mqttConfig": {
-          "description": "The MQTT configuration for this device registry.",
-          "$ref": "MqttConfig"
-        },
-        "id": {
-          "description": "The identifier of this device registry. For example, `myRegistry`.",
-          "type": "string"
-        },
-        "stateNotificationConfig": {
-          "$ref": "StateNotificationConfig",
-          "description": "The configuration for notification of new states received from the device. State updates are guaranteed to be stored in the state history, but notifications to Cloud Pub/Sub are not guaranteed. For example, if permissions are misconfigured or the specified topic doesn't exist, no notification will be published but the state will still be stored in Cloud IoT Core."
-        },
-        "name": {
-          "description": "The resource path name. For example, `projects/example-project/locations/us-central1/registries/my-registry`.",
-          "type": "string"
-        },
-        "credentials": {
-          "type": "array",
-          "description": "The credentials used to verify the device credentials. No more than 10 credentials can be bound to a single registry at a time. The verification process occurs at the time of device creation or update. If this field is empty, no verification is performed. Otherwise, the credentials of a newly created device or added credentials of an updated device should be signed with one of these registry credentials. Note, however, that existing devices will never be affected by modifications to this list of credentials: after a device has been successfully created in a registry, it should be able to connect even if its registry credentials are revoked, deleted, or modified.",
-          "items": {
-            "$ref": "RegistryCredential"
-          }
-        },
-        "logLevel": {
-          "enum": [
-            "LOG_LEVEL_UNSPECIFIED",
-            "NONE",
-            "ERROR",
-            "INFO",
-            "DEBUG"
-          ],
-          "description": "**Beta Feature** The default logging verbosity for activity from devices in this registry. The verbosity level can be overridden by Device.log_level.",
-          "enumDescriptions": [
-            "No logging specified. If not specified, logging will be disabled.",
-            "Disables logging.",
-            "Error events will be logged.",
-            "Informational events will be logged, such as connections and disconnections.",
-            "All events will be logged."
-          ],
-          "type": "string"
-        },
-        "httpConfig": {
-          "$ref": "HttpConfig",
-          "description": "The DeviceService (HTTP) configuration for this device registry."
-        }
-      },
-      "type": "object"
-    },
-    "UnbindDeviceFromGatewayRequest": {
-      "id": "UnbindDeviceFromGatewayRequest",
-      "properties": {
-        "deviceId": {
-          "description": "Required. The device to disassociate from the specified gateway. The value of `device_id` can be either the device numeric ID or the user-defined device identifier.",
-          "type": "string"
-        },
-        "gatewayId": {
-          "type": "string",
-          "description": "Required. The value of `gateway_id` can be either the device numeric ID or the user-defined device identifier."
-        }
-      },
-      "type": "object",
-      "description": "Request for `UnbindDeviceFromGateway`."
-    },
-    "GetIamPolicyRequest": {
-      "properties": {
-        "options": {
-          "$ref": "GetPolicyOptions",
-          "description": "OPTIONAL: A `GetPolicyOptions` object for specifying options to `GetIamPolicy`."
-        }
-      },
-      "id": "GetIamPolicyRequest",
-      "type": "object",
-      "description": "Request message for `GetIamPolicy` method."
-    },
-    "ListDevicesResponse": {
-      "id": "ListDevicesResponse",
-      "type": "object",
-      "description": "Response for `ListDevices`.",
-      "properties": {
-        "devices": {
-          "description": "The devices that match the request.",
-          "items": {
-            "$ref": "Device"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "description": "If not empty, indicates that there may be more devices that match the request; this value should be passed in a new `ListDevicesRequest`.",
-          "type": "string"
-        }
-      }
-    },
-    "ListDeviceRegistriesResponse": {
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "If not empty, indicates that there may be more registries that match the request; this value should be passed in a new `ListDeviceRegistriesRequest`."
-        },
-        "deviceRegistries": {
-          "description": "The registries that matched the query.",
-          "items": {
-            "$ref": "DeviceRegistry"
-          },
-          "type": "array"
-        }
-      },
-      "description": "Response for `ListDeviceRegistries`.",
-      "type": "object",
-      "id": "ListDeviceRegistriesResponse"
-    },
-    "SendCommandToDeviceResponse": {
-      "id": "SendCommandToDeviceResponse",
-      "properties": {},
-      "type": "object",
-      "description": "Response for `SendCommandToDevice`."
-    },
-    "SendCommandToDeviceRequest": {
-      "properties": {
-        "subfolder": {
-          "type": "string",
-          "description": "Optional subfolder for the command. If empty, the command will be delivered to the /devices/{device-id}/commands topic, otherwise it will be delivered to the /devices/{device-id}/commands/{subfolder} topic. Multi-level subfolders are allowed. This field must not have more than 256 characters, and must not contain any MQTT wildcards (\"+\" or \"#\") or null characters."
-        },
-        "binaryData": {
-          "format": "byte",
-          "description": "Required. The command data to send to the device.",
-          "type": "string"
-        }
-      },
-      "id": "SendCommandToDeviceRequest",
-      "description": "Request for `SendCommandToDevice`.",
-      "type": "object"
-    }
-  },
-  "description": "Registers and manages IoT (Internet of Things) devices that connect to the Google Cloud Platform. ",
-  "parameters": {
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "location": "query"
-    },
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
-    },
-    "key": {
-      "location": "query",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "type": "boolean",
-      "description": "Returns response with indentations and line breaks.",
-      "location": "query",
-      "default": "true"
-    },
-    "alt": {
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "type": "string",
-      "location": "query",
-      "default": "json",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "description": "Data format for response."
-    },
-    "quotaUser": {
-      "location": "query",
-      "type": "string",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters."
-    },
-    "$.xgafv": {
-      "type": "string",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "location": "query",
-      "description": "V1 error format.",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ]
-    },
-    "access_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth access token."
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "location": "query",
-      "type": "string"
-    },
-    "fields": {
-      "type": "string",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "location": "query"
-    }
-  },
-  "mtlsRootUrl": "https://cloudiot.mtls.googleapis.com/",
-  "resources": {
-    "projects": {
-      "resources": {
-        "locations": {
-          "resources": {
-            "registries": {
-              "resources": {
-                "groups": {
-                  "methods": {
-                    "testIamPermissions": {
-                      "path": "v1/{+resource}:testIamPermissions",
-                      "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a NOT_FOUND error.",
-                      "parameterOrder": [
-                        "resource"
-                      ],
-                      "httpMethod": "POST",
-                      "response": {
-                        "$ref": "TestIamPermissionsResponse"
-                      },
-                      "request": {
-                        "$ref": "TestIamPermissionsRequest"
-                      },
-                      "parameters": {
-                        "resource": {
-                          "description": "REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field.",
-                          "required": true,
-                          "location": "path",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/groups/[^/]+$",
-                          "type": "string"
-                        }
-                      },
-                      "id": "cloudiot.projects.locations.registries.groups.testIamPermissions",
-                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}:testIamPermissions",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloudiot"
-                      ]
-                    },
-                    "getIamPolicy": {
-                      "id": "cloudiot.projects.locations.registries.groups.getIamPolicy",
-                      "parameterOrder": [
-                        "resource"
-                      ],
-                      "parameters": {
-                        "resource": {
-                          "type": "string",
-                          "location": "path",
-                          "required": true,
-                          "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/groups/[^/]+$",
-                          "description": "REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field."
-                        }
-                      },
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloudiot"
-                      ],
-                      "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.",
-                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}:getIamPolicy",
-                      "response": {
-                        "$ref": "Policy"
-                      },
-                      "request": {
-                        "$ref": "GetIamPolicyRequest"
-                      },
-                      "path": "v1/{+resource}:getIamPolicy",
-                      "httpMethod": "POST"
-                    },
-                    "setIamPolicy": {
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloudiot"
-                      ],
-                      "request": {
-                        "$ref": "SetIamPolicyRequest"
-                      },
-                      "response": {
-                        "$ref": "Policy"
-                      },
-                      "id": "cloudiot.projects.locations.registries.groups.setIamPolicy",
-                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}:setIamPolicy",
-                      "parameters": {
-                        "resource": {
-                          "type": "string",
-                          "description": "REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field.",
-                          "required": true,
-                          "location": "path",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/groups/[^/]+$"
-                        }
-                      },
-                      "path": "v1/{+resource}:setIamPolicy",
-                      "description": "Sets the access control policy on the specified resource. Replaces any existing policy.",
-                      "parameterOrder": [
-                        "resource"
-                      ],
-                      "httpMethod": "POST"
-                    }
-                  },
-                  "resources": {
-                    "devices": {
-                      "methods": {
-                        "list": {
-                          "description": "List devices in a device registry.",
-                          "path": "v1/{+parent}/devices",
-                          "response": {
-                            "$ref": "ListDevicesResponse"
-                          },
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform",
-                            "https://www.googleapis.com/auth/cloudiot"
-                          ],
-                          "id": "cloudiot.projects.locations.registries.groups.devices.list",
-                          "parameters": {
-                            "deviceIds": {
-                              "description": "A list of device string IDs. For example, `['device0', 'device12']`. If empty, this field is ignored. Maximum IDs: 10,000",
-                              "location": "query",
-                              "repeated": true,
-                              "type": "string"
+    "protocol": "rest",
+    "resources": {
+        "projects": {
+            "resources": {
+                "locations": {
+                    "resources": {
+                        "registries": {
+                            "methods": {
+                                "bindDeviceToGateway": {
+                                    "description": "Associates the device with the gateway.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}:bindDeviceToGateway",
+                                    "httpMethod": "POST",
+                                    "id": "cloudiot.projects.locations.registries.bindDeviceToGateway",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "parent": {
+                                            "description": "Required. The name of the registry. For example, `projects/example-project/locations/us-central1/registries/my-registry`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+parent}:bindDeviceToGateway",
+                                    "request": {
+                                        "$ref": "BindDeviceToGatewayRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "BindDeviceToGatewayResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloudiot"
+                                    ]
+                                },
+                                "create": {
+                                    "description": "Creates a device registry that contains devices.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries",
+                                    "httpMethod": "POST",
+                                    "id": "cloudiot.projects.locations.registries.create",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "parent": {
+                                            "description": "Required. The project and cloud region where this device registry must be created. For example, `projects/example-project/locations/us-central1`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+parent}/registries",
+                                    "request": {
+                                        "$ref": "DeviceRegistry"
+                                    },
+                                    "response": {
+                                        "$ref": "DeviceRegistry"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloudiot"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a device registry configuration.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "cloudiot.projects.locations.registries.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The name of the device registry. For example, `projects/example-project/locations/us-central1/registries/my-registry`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}",
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloudiot"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets a device registry configuration.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}",
+                                    "httpMethod": "GET",
+                                    "id": "cloudiot.projects.locations.registries.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The name of the device registry. For example, `projects/example-project/locations/us-central1/registries/my-registry`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}",
+                                    "response": {
+                                        "$ref": "DeviceRegistry"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloudiot"
+                                    ]
+                                },
+                                "getIamPolicy": {
+                                    "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}:getIamPolicy",
+                                    "httpMethod": "POST",
+                                    "id": "cloudiot.projects.locations.registries.getIamPolicy",
+                                    "parameterOrder": [
+                                        "resource"
+                                    ],
+                                    "parameters": {
+                                        "resource": {
+                                            "description": "REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+resource}:getIamPolicy",
+                                    "request": {
+                                        "$ref": "GetIamPolicyRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Policy"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloudiot"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists device registries.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries",
+                                    "httpMethod": "GET",
+                                    "id": "cloudiot.projects.locations.registries.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "pageSize": {
+                                            "description": "The maximum number of registries to return in the response. If this value is zero, the service will select a default size. A call may return fewer objects than requested. A non-empty `next_page_token` in the response indicates that more data is available.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "The value returned by the last `ListDeviceRegistriesResponse`; indicates that this is a continuation of a prior `ListDeviceRegistries` call and the system should return the next page of data.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The project and cloud region path. For example, `projects/example-project/locations/us-central1`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+parent}/registries",
+                                    "response": {
+                                        "$ref": "ListDeviceRegistriesResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloudiot"
+                                    ]
+                                },
+                                "patch": {
+                                    "description": "Updates a device registry configuration.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}",
+                                    "httpMethod": "PATCH",
+                                    "id": "cloudiot.projects.locations.registries.patch",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The resource path name. For example, `projects/example-project/locations/us-central1/registries/my-registry`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "updateMask": {
+                                            "description": "Required. Only updates the `device_registry` fields indicated by this mask. The field mask must not be empty, and it must not contain fields that are immutable or only set by the server. Mutable top-level fields: `event_notification_config`, `http_config`, `mqtt_config`, and `state_notification_config`.",
+                                            "format": "google-fieldmask",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}",
+                                    "request": {
+                                        "$ref": "DeviceRegistry"
+                                    },
+                                    "response": {
+                                        "$ref": "DeviceRegistry"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloudiot"
+                                    ]
+                                },
+                                "setIamPolicy": {
+                                    "description": "Sets the access control policy on the specified resource. Replaces any existing policy.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}:setIamPolicy",
+                                    "httpMethod": "POST",
+                                    "id": "cloudiot.projects.locations.registries.setIamPolicy",
+                                    "parameterOrder": [
+                                        "resource"
+                                    ],
+                                    "parameters": {
+                                        "resource": {
+                                            "description": "REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+resource}:setIamPolicy",
+                                    "request": {
+                                        "$ref": "SetIamPolicyRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Policy"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloudiot"
+                                    ]
+                                },
+                                "testIamPermissions": {
+                                    "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a NOT_FOUND error.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}:testIamPermissions",
+                                    "httpMethod": "POST",
+                                    "id": "cloudiot.projects.locations.registries.testIamPermissions",
+                                    "parameterOrder": [
+                                        "resource"
+                                    ],
+                                    "parameters": {
+                                        "resource": {
+                                            "description": "REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+resource}:testIamPermissions",
+                                    "request": {
+                                        "$ref": "TestIamPermissionsRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "TestIamPermissionsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloudiot"
+                                    ]
+                                },
+                                "unbindDeviceFromGateway": {
+                                    "description": "Deletes the association between the device and the gateway.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}:unbindDeviceFromGateway",
+                                    "httpMethod": "POST",
+                                    "id": "cloudiot.projects.locations.registries.unbindDeviceFromGateway",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "parent": {
+                                            "description": "Required. The name of the registry. For example, `projects/example-project/locations/us-central1/registries/my-registry`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+parent}:unbindDeviceFromGateway",
+                                    "request": {
+                                        "$ref": "UnbindDeviceFromGatewayRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "UnbindDeviceFromGatewayResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloudiot"
+                                    ]
+                                }
                             },
-                            "parent": {
-                              "description": "Required. The device registry path. Required. For example, `projects/my-project/locations/us-central1/registries/my-registry`.",
-                              "location": "path",
-                              "type": "string",
-                              "required": true,
-                              "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/groups/[^/]+$"
-                            },
-                            "gatewayListOptions.associationsDeviceId": {
-                              "location": "query",
-                              "description": "If set, returns only the gateways with which the specified device is associated. The device ID can be numeric (`num_id`) or the user-defined string (`id`). For example, if `456` is specified, returns only the gateways to which the device with `num_id` 456 is bound.",
-                              "type": "string"
-                            },
-                            "pageToken": {
-                              "type": "string",
-                              "location": "query",
-                              "description": "The value returned by the last `ListDevicesResponse`; indicates that this is a continuation of a prior `ListDevices` call and the system should return the next page of data."
-                            },
-                            "fieldMask": {
-                              "type": "string",
-                              "description": "The fields of the `Device` resource to be returned in the response. The fields `id` and `num_id` are always returned, along with any other fields specified.",
-                              "format": "google-fieldmask",
-                              "location": "query"
-                            },
-                            "gatewayListOptions.associationsGatewayId": {
-                              "description": "If set, only devices associated with the specified gateway are returned. The gateway ID can be numeric (`num_id`) or the user-defined string (`id`). For example, if `123` is specified, only devices bound to the gateway with `num_id` 123 are returned.",
-                              "location": "query",
-                              "type": "string"
-                            },
-                            "gatewayListOptions.gatewayType": {
-                              "enumDescriptions": [
-                                "If unspecified, the device is considered a non-gateway device.",
-                                "The device is a gateway.",
-                                "The device is not a gateway."
-                              ],
-                              "description": "If `GATEWAY` is specified, only gateways are returned. If `NON_GATEWAY` is specified, only non-gateway devices are returned. If `GATEWAY_TYPE_UNSPECIFIED` is specified, all devices are returned.",
-                              "location": "query",
-                              "type": "string",
-                              "enum": [
-                                "GATEWAY_TYPE_UNSPECIFIED",
-                                "GATEWAY",
-                                "NON_GATEWAY"
-                              ]
-                            },
-                            "deviceNumIds": {
-                              "description": "A list of device numeric IDs. If empty, this field is ignored. Maximum IDs: 10,000.",
-                              "repeated": true,
-                              "format": "uint64",
-                              "type": "string",
-                              "location": "query"
-                            },
-                            "pageSize": {
-                              "format": "int32",
-                              "type": "integer",
-                              "description": "The maximum number of devices to return in the response. If this value is zero, the service will select a default size. A call may return fewer objects than requested. A non-empty `next_page_token` in the response indicates that more data is available.",
-                              "location": "query"
+                            "resources": {
+                                "devices": {
+                                    "methods": {
+                                        "create": {
+                                            "description": "Creates a device in a device registry.",
+                                            "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices",
+                                            "httpMethod": "POST",
+                                            "id": "cloudiot.projects.locations.registries.devices.create",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "parent": {
+                                                    "description": "Required. The name of the device registry where this device should be created. For example, `projects/example-project/locations/us-central1/registries/my-registry`.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1/{+parent}/devices",
+                                            "request": {
+                                                "$ref": "Device"
+                                            },
+                                            "response": {
+                                                "$ref": "Device"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloudiot"
+                                            ]
+                                        },
+                                        "delete": {
+                                            "description": "Deletes a device.",
+                                            "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}",
+                                            "httpMethod": "DELETE",
+                                            "id": "cloudiot.projects.locations.registries.devices.delete",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. The name of the device. For example, `projects/p0/locations/us-central1/registries/registry0/devices/device0` or `projects/p0/locations/us-central1/registries/registry0/devices/{num_id}`.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/devices/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1/{+name}",
+                                            "response": {
+                                                "$ref": "Empty"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloudiot"
+                                            ]
+                                        },
+                                        "get": {
+                                            "description": "Gets details about a device.",
+                                            "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}",
+                                            "httpMethod": "GET",
+                                            "id": "cloudiot.projects.locations.registries.devices.get",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "fieldMask": {
+                                                    "description": "The fields of the `Device` resource to be returned in the response. If the field mask is unset or empty, all fields are returned. Fields have to be provided in snake_case format, for example: `last_heartbeat_time`.",
+                                                    "format": "google-fieldmask",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "name": {
+                                                    "description": "Required. The name of the device. For example, `projects/p0/locations/us-central1/registries/registry0/devices/device0` or `projects/p0/locations/us-central1/registries/registry0/devices/{num_id}`.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/devices/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1/{+name}",
+                                            "response": {
+                                                "$ref": "Device"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloudiot"
+                                            ]
+                                        },
+                                        "list": {
+                                            "description": "List devices in a device registry.",
+                                            "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices",
+                                            "httpMethod": "GET",
+                                            "id": "cloudiot.projects.locations.registries.devices.list",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "deviceIds": {
+                                                    "description": "A list of device string IDs. For example, `['device0', 'device12']`. If empty, this field is ignored. Maximum IDs: 10,000",
+                                                    "location": "query",
+                                                    "repeated": true,
+                                                    "type": "string"
+                                                },
+                                                "deviceNumIds": {
+                                                    "description": "A list of device numeric IDs. If empty, this field is ignored. Maximum IDs: 10,000.",
+                                                    "format": "uint64",
+                                                    "location": "query",
+                                                    "repeated": true,
+                                                    "type": "string"
+                                                },
+                                                "fieldMask": {
+                                                    "description": "The fields of the `Device` resource to be returned in the response. The fields `id` and `num_id` are always returned, along with any other fields specified in snake_case format, for example: `last_heartbeat_time`.",
+                                                    "format": "google-fieldmask",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "gatewayListOptions.associationsDeviceId": {
+                                                    "description": "If set, returns only the gateways with which the specified device is associated. The device ID can be numeric (`num_id`) or the user-defined string (`id`). For example, if `456` is specified, returns only the gateways to which the device with `num_id` 456 is bound.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "gatewayListOptions.associationsGatewayId": {
+                                                    "description": "If set, only devices associated with the specified gateway are returned. The gateway ID can be numeric (`num_id`) or the user-defined string (`id`). For example, if `123` is specified, only devices bound to the gateway with `num_id` 123 are returned.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "gatewayListOptions.gatewayType": {
+                                                    "description": "If `GATEWAY` is specified, only gateways are returned. If `NON_GATEWAY` is specified, only non-gateway devices are returned. If `GATEWAY_TYPE_UNSPECIFIED` is specified, all devices are returned.",
+                                                    "enum": [
+                                                        "GATEWAY_TYPE_UNSPECIFIED",
+                                                        "GATEWAY",
+                                                        "NON_GATEWAY"
+                                                    ],
+                                                    "enumDescriptions": [
+                                                        "If unspecified, the device is considered a non-gateway device.",
+                                                        "The device is a gateway.",
+                                                        "The device is not a gateway."
+                                                    ],
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "pageSize": {
+                                                    "description": "The maximum number of devices to return in the response. If this value is zero, the service will select a default size. A call may return fewer objects than requested. A non-empty `next_page_token` in the response indicates that more data is available.",
+                                                    "format": "int32",
+                                                    "location": "query",
+                                                    "type": "integer"
+                                                },
+                                                "pageToken": {
+                                                    "description": "The value returned by the last `ListDevicesResponse`; indicates that this is a continuation of a prior `ListDevices` call and the system should return the next page of data.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "parent": {
+                                                    "description": "Required. The device registry path. Required. For example, `projects/my-project/locations/us-central1/registries/my-registry`.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1/{+parent}/devices",
+                                            "response": {
+                                                "$ref": "ListDevicesResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloudiot"
+                                            ]
+                                        },
+                                        "modifyCloudToDeviceConfig": {
+                                            "description": "Modifies the configuration for the device, which is eventually sent from the Cloud IoT Core servers. Returns the modified configuration version and its metadata.",
+                                            "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}:modifyCloudToDeviceConfig",
+                                            "httpMethod": "POST",
+                                            "id": "cloudiot.projects.locations.registries.devices.modifyCloudToDeviceConfig",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. The name of the device. For example, `projects/p0/locations/us-central1/registries/registry0/devices/device0` or `projects/p0/locations/us-central1/registries/registry0/devices/{num_id}`.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/devices/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1/{+name}:modifyCloudToDeviceConfig",
+                                            "request": {
+                                                "$ref": "ModifyCloudToDeviceConfigRequest"
+                                            },
+                                            "response": {
+                                                "$ref": "DeviceConfig"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloudiot"
+                                            ]
+                                        },
+                                        "patch": {
+                                            "description": "Updates a device.",
+                                            "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}",
+                                            "httpMethod": "PATCH",
+                                            "id": "cloudiot.projects.locations.registries.devices.patch",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "The resource path name. For example, `projects/p1/locations/us-central1/registries/registry0/devices/dev0` or `projects/p1/locations/us-central1/registries/registry0/devices/{num_id}`. When `name` is populated as a response from the service, it always ends in the device numeric ID.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/devices/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "updateMask": {
+                                                    "description": "Required. Only updates the `device` fields indicated by this mask. The field mask must not be empty, and it must not contain fields that are immutable or only set by the server. Mutable top-level fields: `credentials`, `blocked`, and `metadata`",
+                                                    "format": "google-fieldmask",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1/{+name}",
+                                            "request": {
+                                                "$ref": "Device"
+                                            },
+                                            "response": {
+                                                "$ref": "Device"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloudiot"
+                                            ]
+                                        },
+                                        "sendCommandToDevice": {
+                                            "description": "Sends a command to the specified device. In order for a device to be able to receive commands, it must: 1) be connected to Cloud IoT Core using the MQTT protocol, and 2) be subscribed to the group of MQTT topics specified by /devices/{device-id}/commands/#. This subscription will receive commands at the top-level topic /devices/{device-id}/commands as well as commands for subfolders, like /devices/{device-id}/commands/subfolder. Note that subscribing to specific subfolders is not supported. If the command could not be delivered to the device, this method will return an error; in particular, if the device is not subscribed, this method will return FAILED_PRECONDITION. Otherwise, this method will return OK. If the subscription is QoS 1, at least once delivery will be guaranteed; for QoS 0, no acknowledgment will be expected from the device.",
+                                            "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}:sendCommandToDevice",
+                                            "httpMethod": "POST",
+                                            "id": "cloudiot.projects.locations.registries.devices.sendCommandToDevice",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. The name of the device. For example, `projects/p0/locations/us-central1/registries/registry0/devices/device0` or `projects/p0/locations/us-central1/registries/registry0/devices/{num_id}`.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/devices/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1/{+name}:sendCommandToDevice",
+                                            "request": {
+                                                "$ref": "SendCommandToDeviceRequest"
+                                            },
+                                            "response": {
+                                                "$ref": "SendCommandToDeviceResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloudiot"
+                                            ]
+                                        }
+                                    },
+                                    "resources": {
+                                        "configVersions": {
+                                            "methods": {
+                                                "list": {
+                                                    "description": "Lists the last few versions of the device configuration in descending order (i.e.: newest first).",
+                                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}/configVersions",
+                                                    "httpMethod": "GET",
+                                                    "id": "cloudiot.projects.locations.registries.devices.configVersions.list",
+                                                    "parameterOrder": [
+                                                        "name"
+                                                    ],
+                                                    "parameters": {
+                                                        "name": {
+                                                            "description": "Required. The name of the device. For example, `projects/p0/locations/us-central1/registries/registry0/devices/device0` or `projects/p0/locations/us-central1/registries/registry0/devices/{num_id}`.",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/devices/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        },
+                                                        "numVersions": {
+                                                            "description": "The number of versions to list. Versions are listed in decreasing order of the version number. The maximum number of versions retained is 10. If this value is zero, it will return all the versions available.",
+                                                            "format": "int32",
+                                                            "location": "query",
+                                                            "type": "integer"
+                                                        }
+                                                    },
+                                                    "path": "v1/{+name}/configVersions",
+                                                    "response": {
+                                                        "$ref": "ListDeviceConfigVersionsResponse"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform",
+                                                        "https://www.googleapis.com/auth/cloudiot"
+                                                    ]
+                                                }
+                                            }
+                                        },
+                                        "states": {
+                                            "methods": {
+                                                "list": {
+                                                    "description": "Lists the last few versions of the device state in descending order (i.e.: newest first).",
+                                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}/states",
+                                                    "httpMethod": "GET",
+                                                    "id": "cloudiot.projects.locations.registries.devices.states.list",
+                                                    "parameterOrder": [
+                                                        "name"
+                                                    ],
+                                                    "parameters": {
+                                                        "name": {
+                                                            "description": "Required. The name of the device. For example, `projects/p0/locations/us-central1/registries/registry0/devices/device0` or `projects/p0/locations/us-central1/registries/registry0/devices/{num_id}`.",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/devices/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        },
+                                                        "numStates": {
+                                                            "description": "The number of states to list. States are listed in descending order of update time. The maximum number of states retained is 10. If this value is zero, it will return all the states available.",
+                                                            "format": "int32",
+                                                            "location": "query",
+                                                            "type": "integer"
+                                                        }
+                                                    },
+                                                    "path": "v1/{+name}/states",
+                                                    "response": {
+                                                        "$ref": "ListDeviceStatesResponse"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform",
+                                                        "https://www.googleapis.com/auth/cloudiot"
+                                                    ]
+                                                }
+                                            }
+                                        }
+                                    }
+                                },
+                                "groups": {
+                                    "methods": {
+                                        "getIamPolicy": {
+                                            "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.",
+                                            "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}:getIamPolicy",
+                                            "httpMethod": "POST",
+                                            "id": "cloudiot.projects.locations.registries.groups.getIamPolicy",
+                                            "parameterOrder": [
+                                                "resource"
+                                            ],
+                                            "parameters": {
+                                                "resource": {
+                                                    "description": "REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/groups/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1/{+resource}:getIamPolicy",
+                                            "request": {
+                                                "$ref": "GetIamPolicyRequest"
+                                            },
+                                            "response": {
+                                                "$ref": "Policy"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloudiot"
+                                            ]
+                                        },
+                                        "setIamPolicy": {
+                                            "description": "Sets the access control policy on the specified resource. Replaces any existing policy.",
+                                            "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}:setIamPolicy",
+                                            "httpMethod": "POST",
+                                            "id": "cloudiot.projects.locations.registries.groups.setIamPolicy",
+                                            "parameterOrder": [
+                                                "resource"
+                                            ],
+                                            "parameters": {
+                                                "resource": {
+                                                    "description": "REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/groups/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1/{+resource}:setIamPolicy",
+                                            "request": {
+                                                "$ref": "SetIamPolicyRequest"
+                                            },
+                                            "response": {
+                                                "$ref": "Policy"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloudiot"
+                                            ]
+                                        },
+                                        "testIamPermissions": {
+                                            "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a NOT_FOUND error.",
+                                            "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}:testIamPermissions",
+                                            "httpMethod": "POST",
+                                            "id": "cloudiot.projects.locations.registries.groups.testIamPermissions",
+                                            "parameterOrder": [
+                                                "resource"
+                                            ],
+                                            "parameters": {
+                                                "resource": {
+                                                    "description": "REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/groups/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1/{+resource}:testIamPermissions",
+                                            "request": {
+                                                "$ref": "TestIamPermissionsRequest"
+                                            },
+                                            "response": {
+                                                "$ref": "TestIamPermissionsResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloudiot"
+                                            ]
+                                        }
+                                    },
+                                    "resources": {
+                                        "devices": {
+                                            "methods": {
+                                                "list": {
+                                                    "description": "List devices in a device registry.",
+                                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}/devices",
+                                                    "httpMethod": "GET",
+                                                    "id": "cloudiot.projects.locations.registries.groups.devices.list",
+                                                    "parameterOrder": [
+                                                        "parent"
+                                                    ],
+                                                    "parameters": {
+                                                        "deviceIds": {
+                                                            "description": "A list of device string IDs. For example, `['device0', 'device12']`. If empty, this field is ignored. Maximum IDs: 10,000",
+                                                            "location": "query",
+                                                            "repeated": true,
+                                                            "type": "string"
+                                                        },
+                                                        "deviceNumIds": {
+                                                            "description": "A list of device numeric IDs. If empty, this field is ignored. Maximum IDs: 10,000.",
+                                                            "format": "uint64",
+                                                            "location": "query",
+                                                            "repeated": true,
+                                                            "type": "string"
+                                                        },
+                                                        "fieldMask": {
+                                                            "description": "The fields of the `Device` resource to be returned in the response. The fields `id` and `num_id` are always returned, along with any other fields specified in snake_case format, for example: `last_heartbeat_time`.",
+                                                            "format": "google-fieldmask",
+                                                            "location": "query",
+                                                            "type": "string"
+                                                        },
+                                                        "gatewayListOptions.associationsDeviceId": {
+                                                            "description": "If set, returns only the gateways with which the specified device is associated. The device ID can be numeric (`num_id`) or the user-defined string (`id`). For example, if `456` is specified, returns only the gateways to which the device with `num_id` 456 is bound.",
+                                                            "location": "query",
+                                                            "type": "string"
+                                                        },
+                                                        "gatewayListOptions.associationsGatewayId": {
+                                                            "description": "If set, only devices associated with the specified gateway are returned. The gateway ID can be numeric (`num_id`) or the user-defined string (`id`). For example, if `123` is specified, only devices bound to the gateway with `num_id` 123 are returned.",
+                                                            "location": "query",
+                                                            "type": "string"
+                                                        },
+                                                        "gatewayListOptions.gatewayType": {
+                                                            "description": "If `GATEWAY` is specified, only gateways are returned. If `NON_GATEWAY` is specified, only non-gateway devices are returned. If `GATEWAY_TYPE_UNSPECIFIED` is specified, all devices are returned.",
+                                                            "enum": [
+                                                                "GATEWAY_TYPE_UNSPECIFIED",
+                                                                "GATEWAY",
+                                                                "NON_GATEWAY"
+                                                            ],
+                                                            "enumDescriptions": [
+                                                                "If unspecified, the device is considered a non-gateway device.",
+                                                                "The device is a gateway.",
+                                                                "The device is not a gateway."
+                                                            ],
+                                                            "location": "query",
+                                                            "type": "string"
+                                                        },
+                                                        "pageSize": {
+                                                            "description": "The maximum number of devices to return in the response. If this value is zero, the service will select a default size. A call may return fewer objects than requested. A non-empty `next_page_token` in the response indicates that more data is available.",
+                                                            "format": "int32",
+                                                            "location": "query",
+                                                            "type": "integer"
+                                                        },
+                                                        "pageToken": {
+                                                            "description": "The value returned by the last `ListDevicesResponse`; indicates that this is a continuation of a prior `ListDevices` call and the system should return the next page of data.",
+                                                            "location": "query",
+                                                            "type": "string"
+                                                        },
+                                                        "parent": {
+                                                            "description": "Required. The device registry path. Required. For example, `projects/my-project/locations/us-central1/registries/my-registry`.",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/groups/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1/{+parent}/devices",
+                                                    "response": {
+                                                        "$ref": "ListDevicesResponse"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform",
+                                                        "https://www.googleapis.com/auth/cloudiot"
+                                                    ]
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
                             }
-                          },
-                          "httpMethod": "GET",
-                          "parameterOrder": [
-                            "parent"
-                          ],
-                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/groups/{groupsId}/devices"
                         }
-                      }
                     }
-                  }
+                }
+            }
+        }
+    },
+    "revision": "20210209",
+    "rootUrl": "https://cloudiot.googleapis.com/",
+    "schemas": {
+        "BindDeviceToGatewayRequest": {
+            "description": "Request for `BindDeviceToGateway`.",
+            "id": "BindDeviceToGatewayRequest",
+            "properties": {
+                "deviceId": {
+                    "description": "Required. The device to associate with the specified gateway. The value of `device_id` can be either the device numeric ID or the user-defined device identifier.",
+                    "type": "string"
                 },
-                "devices": {
-                  "methods": {
-                    "get": {
-                      "response": {
-                        "$ref": "Device"
-                      },
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "httpMethod": "GET",
-                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}",
-                      "path": "v1/{+name}",
-                      "description": "Gets details about a device.",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloudiot"
-                      ],
-                      "parameters": {
-                        "fieldMask": {
-                          "format": "google-fieldmask",
-                          "location": "query",
-                          "type": "string",
-                          "description": "The fields of the `Device` resource to be returned in the response. If the field mask is unset or empty, all fields are returned."
-                        },
-                        "name": {
-                          "required": true,
-                          "description": "Required. The name of the device. For example, `projects/p0/locations/us-central1/registries/registry0/devices/device0` or `projects/p0/locations/us-central1/registries/registry0/devices/{num_id}`.",
-                          "type": "string",
-                          "location": "path",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/devices/[^/]+$"
-                        }
-                      },
-                      "id": "cloudiot.projects.locations.registries.devices.get"
+                "gatewayId": {
+                    "description": "Required. The value of `gateway_id` can be either the device numeric ID or the user-defined device identifier.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "BindDeviceToGatewayResponse": {
+            "description": "Response for `BindDeviceToGateway`.",
+            "id": "BindDeviceToGatewayResponse",
+            "properties": {},
+            "type": "object"
+        },
+        "Binding": {
+            "description": "Associates `members` with a `role`.",
+            "id": "Binding",
+            "properties": {
+                "condition": {
+                    "$ref": "Expr",
+                    "description": "The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)."
+                },
+                "members": {
+                    "description": "Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. ",
+                    "items": {
+                        "type": "string"
                     },
-                    "create": {
-                      "response": {
-                        "$ref": "Device"
-                      },
-                      "parameters": {
-                        "parent": {
-                          "type": "string",
-                          "required": true,
-                          "location": "path",
-                          "description": "Required. The name of the device registry where this device should be created. For example, `projects/example-project/locations/us-central1/registries/my-registry`.",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$"
-                        }
-                      },
-                      "description": "Creates a device in a device registry.",
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "path": "v1/{+parent}/devices",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloudiot"
-                      ],
-                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices",
-                      "httpMethod": "POST",
-                      "id": "cloudiot.projects.locations.registries.devices.create",
-                      "request": {
-                        "$ref": "Device"
-                      }
+                    "type": "array"
+                },
+                "role": {
+                    "description": "Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Device": {
+            "description": "The device resource.",
+            "id": "Device",
+            "properties": {
+                "blocked": {
+                    "description": "If a device is blocked, connections or requests from this device will fail. Can be used to temporarily prevent the device from connecting if, for example, the sensor is generating bad data and needs maintenance.",
+                    "type": "boolean"
+                },
+                "config": {
+                    "$ref": "DeviceConfig",
+                    "description": "The most recent device configuration, which is eventually sent from Cloud IoT Core to the device. If not present on creation, the configuration will be initialized with an empty payload and version value of `1`. To update this field after creation, use the `DeviceManager.ModifyCloudToDeviceConfig` method."
+                },
+                "credentials": {
+                    "description": "The credentials used to authenticate this device. To allow credential rotation without interruption, multiple device credentials can be bound to this device. No more than 3 credentials can be bound to a single device at a time. When new credentials are added to a device, they are verified against the registry credentials. For details, see the description of the `DeviceRegistry.credentials` field.",
+                    "items": {
+                        "$ref": "DeviceCredential"
                     },
-                    "delete": {
-                      "path": "v1/{+name}",
-                      "description": "Deletes a device.",
-                      "id": "cloudiot.projects.locations.registries.devices.delete",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloudiot"
-                      ],
-                      "httpMethod": "DELETE",
-                      "response": {
-                        "$ref": "Empty"
-                      },
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}",
-                      "parameters": {
-                        "name": {
-                          "location": "path",
-                          "type": "string",
-                          "description": "Required. The name of the device. For example, `projects/p0/locations/us-central1/registries/registry0/devices/device0` or `projects/p0/locations/us-central1/registries/registry0/devices/{num_id}`.",
-                          "required": true,
-                          "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/devices/[^/]+$"
-                        }
-                      }
+                    "type": "array"
+                },
+                "gatewayConfig": {
+                    "$ref": "GatewayConfig",
+                    "description": "Gateway-related configuration and state."
+                },
+                "id": {
+                    "description": "The user-defined device identifier. The device ID must be unique within a device registry.",
+                    "type": "string"
+                },
+                "lastConfigAckTime": {
+                    "description": "[Output only] The last time a cloud-to-device config version acknowledgment was received from the device. This field is only for configurations sent through MQTT.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "lastConfigSendTime": {
+                    "description": "[Output only] The last time a cloud-to-device config version was sent to the device.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "lastErrorStatus": {
+                    "$ref": "Status",
+                    "description": "[Output only] The error message of the most recent error, such as a failure to publish to Cloud Pub/Sub. 'last_error_time' is the timestamp of this field. If no errors have occurred, this field has an empty message and the status code 0 == OK. Otherwise, this field is expected to have a status code other than OK."
+                },
+                "lastErrorTime": {
+                    "description": "[Output only] The time the most recent error occurred, such as a failure to publish to Cloud Pub/Sub. This field is the timestamp of 'last_error_status'.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "lastEventTime": {
+                    "description": "[Output only] The last time a telemetry event was received. Timestamps are periodically collected and written to storage; they may be stale by a few minutes.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "lastHeartbeatTime": {
+                    "description": "[Output only] The last time an MQTT `PINGREQ` was received. This field applies only to devices connecting through MQTT. MQTT clients usually only send `PINGREQ` messages if the connection is idle, and no other messages have been sent. Timestamps are periodically collected and written to storage; they may be stale by a few minutes.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "lastStateTime": {
+                    "description": "[Output only] The last time a state event was received. Timestamps are periodically collected and written to storage; they may be stale by a few minutes.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "logLevel": {
+                    "description": "**Beta Feature** The logging verbosity for device activity. If unspecified, DeviceRegistry.log_level will be used.",
+                    "enum": [
+                        "LOG_LEVEL_UNSPECIFIED",
+                        "NONE",
+                        "ERROR",
+                        "INFO",
+                        "DEBUG"
+                    ],
+                    "enumDescriptions": [
+                        "No logging specified. If not specified, logging will be disabled.",
+                        "Disables logging.",
+                        "Error events will be logged.",
+                        "Informational events will be logged, such as connections and disconnections.",
+                        "All events will be logged."
+                    ],
+                    "type": "string"
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "type": "string"
                     },
-                    "sendCommandToDevice": {
-                      "request": {
-                        "$ref": "SendCommandToDeviceRequest"
-                      },
-                      "description": "Sends a command to the specified device. In order for a device to be able to receive commands, it must: 1) be connected to Cloud IoT Core using the MQTT protocol, and 2) be subscribed to the group of MQTT topics specified by /devices/{device-id}/commands/#. This subscription will receive commands at the top-level topic /devices/{device-id}/commands as well as commands for subfolders, like /devices/{device-id}/commands/subfolder. Note that subscribing to specific subfolders is not supported. If the command could not be delivered to the device, this method will return an error; in particular, if the device is not subscribed, this method will return FAILED_PRECONDITION. Otherwise, this method will return OK. If the subscription is QoS 1, at least once delivery will be guaranteed; for QoS 0, no acknowledgment will be expected from the device.",
-                      "path": "v1/{+name}:sendCommandToDevice",
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "parameters": {
-                        "name": {
-                          "location": "path",
-                          "description": "Required. The name of the device. For example, `projects/p0/locations/us-central1/registries/registry0/devices/device0` or `projects/p0/locations/us-central1/registries/registry0/devices/{num_id}`.",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/devices/[^/]+$",
-                          "required": true,
-                          "type": "string"
-                        }
-                      },
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloudiot"
-                      ],
-                      "id": "cloudiot.projects.locations.registries.devices.sendCommandToDevice",
-                      "response": {
-                        "$ref": "SendCommandToDeviceResponse"
-                      },
-                      "httpMethod": "POST",
-                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}:sendCommandToDevice"
+                    "description": "The metadata key-value pairs assigned to the device. This metadata is not interpreted or indexed by Cloud IoT Core. It can be used to add contextual information for the device. Keys must conform to the regular expression a-zA-Z+ and be less than 128 bytes in length. Values are free-form strings. Each value must be less than or equal to 32 KB in size. The total size of all keys and values must be less than 256 KB, and the maximum number of key-value pairs is 500.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "The resource path name. For example, `projects/p1/locations/us-central1/registries/registry0/devices/dev0` or `projects/p1/locations/us-central1/registries/registry0/devices/{num_id}`. When `name` is populated as a response from the service, it always ends in the device numeric ID.",
+                    "type": "string"
+                },
+                "numId": {
+                    "description": "[Output only] A server-defined unique numeric ID for the device. This is a more compact way to identify devices, and it is globally unique.",
+                    "format": "uint64",
+                    "type": "string"
+                },
+                "state": {
+                    "$ref": "DeviceState",
+                    "description": "[Output only] The state most recently received from the device. If no state has been reported, this field is not present."
+                }
+            },
+            "type": "object"
+        },
+        "DeviceConfig": {
+            "description": "The device configuration. Eventually delivered to devices.",
+            "id": "DeviceConfig",
+            "properties": {
+                "binaryData": {
+                    "description": "The device configuration data.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "cloudUpdateTime": {
+                    "description": "[Output only] The time at which this configuration version was updated in Cloud IoT Core. This timestamp is set by the server.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "deviceAckTime": {
+                    "description": "[Output only] The time at which Cloud IoT Core received the acknowledgment from the device, indicating that the device has received this configuration version. If this field is not present, the device has not yet acknowledged that it received this version. Note that when the config was sent to the device, many config versions may have been available in Cloud IoT Core while the device was disconnected, and on connection, only the latest version is sent to the device. Some versions may never be sent to the device, and therefore are never acknowledged. This timestamp is set by Cloud IoT Core.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "version": {
+                    "description": "[Output only] The version of this update. The version number is assigned by the server, and is always greater than 0 after device creation. The version must be 0 on the `CreateDevice` request if a `config` is specified; the response of `CreateDevice` will always have a value of 1.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DeviceCredential": {
+            "description": "A server-stored device credential used for authentication.",
+            "id": "DeviceCredential",
+            "properties": {
+                "expirationTime": {
+                    "description": "[Optional] The time at which this credential becomes invalid. This credential will be ignored for new client authentication requests after this timestamp; however, it will not be automatically deleted.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "publicKey": {
+                    "$ref": "PublicKeyCredential",
+                    "description": "A public key used to verify the signature of JSON Web Tokens (JWTs). When adding a new device credential, either via device creation or via modifications, this public key credential may be required to be signed by one of the registry level certificates. More specifically, if the registry contains at least one certificate, any new device credential must be signed by one of the registry certificates. As a result, when the registry contains certificates, only X.509 certificates are accepted as device credentials. However, if the registry does not contain a certificate, self-signed certificates and public keys will be accepted. New device credentials must be different from every registry-level certificate."
+                }
+            },
+            "type": "object"
+        },
+        "DeviceRegistry": {
+            "description": "A container for a group of devices.",
+            "id": "DeviceRegistry",
+            "properties": {
+                "credentials": {
+                    "description": "The credentials used to verify the device credentials. No more than 10 credentials can be bound to a single registry at a time. The verification process occurs at the time of device creation or update. If this field is empty, no verification is performed. Otherwise, the credentials of a newly created device or added credentials of an updated device should be signed with one of these registry credentials. Note, however, that existing devices will never be affected by modifications to this list of credentials: after a device has been successfully created in a registry, it should be able to connect even if its registry credentials are revoked, deleted, or modified.",
+                    "items": {
+                        "$ref": "RegistryCredential"
                     },
-                    "modifyCloudToDeviceConfig": {
-                      "path": "v1/{+name}:modifyCloudToDeviceConfig",
-                      "request": {
-                        "$ref": "ModifyCloudToDeviceConfigRequest"
-                      },
-                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}:modifyCloudToDeviceConfig",
-                      "id": "cloudiot.projects.locations.registries.devices.modifyCloudToDeviceConfig",
-                      "httpMethod": "POST",
-                      "parameters": {
-                        "name": {
-                          "required": true,
-                          "location": "path",
-                          "type": "string",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/devices/[^/]+$",
-                          "description": "Required. The name of the device. For example, `projects/p0/locations/us-central1/registries/registry0/devices/device0` or `projects/p0/locations/us-central1/registries/registry0/devices/{num_id}`."
-                        }
-                      },
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloudiot"
-                      ],
-                      "description": "Modifies the configuration for the device, which is eventually sent from the Cloud IoT Core servers. Returns the modified configuration version and its metadata.",
-                      "response": {
+                    "type": "array"
+                },
+                "eventNotificationConfigs": {
+                    "description": "The configuration for notification of telemetry events received from the device. All telemetry events that were successfully published by the device and acknowledged by Cloud IoT Core are guaranteed to be delivered to Cloud Pub/Sub. If multiple configurations match a message, only the first matching configuration is used. If you try to publish a device telemetry event using MQTT without specifying a Cloud Pub/Sub topic for the device's registry, the connection closes automatically. If you try to do so using an HTTP connection, an error is returned. Up to 10 configurations may be provided.",
+                    "items": {
+                        "$ref": "EventNotificationConfig"
+                    },
+                    "type": "array"
+                },
+                "httpConfig": {
+                    "$ref": "HttpConfig",
+                    "description": "The DeviceService (HTTP) configuration for this device registry."
+                },
+                "id": {
+                    "description": "The identifier of this device registry. For example, `myRegistry`.",
+                    "type": "string"
+                },
+                "logLevel": {
+                    "description": "**Beta Feature** The default logging verbosity for activity from devices in this registry. The verbosity level can be overridden by Device.log_level.",
+                    "enum": [
+                        "LOG_LEVEL_UNSPECIFIED",
+                        "NONE",
+                        "ERROR",
+                        "INFO",
+                        "DEBUG"
+                    ],
+                    "enumDescriptions": [
+                        "No logging specified. If not specified, logging will be disabled.",
+                        "Disables logging.",
+                        "Error events will be logged.",
+                        "Informational events will be logged, such as connections and disconnections.",
+                        "All events will be logged."
+                    ],
+                    "type": "string"
+                },
+                "mqttConfig": {
+                    "$ref": "MqttConfig",
+                    "description": "The MQTT configuration for this device registry."
+                },
+                "name": {
+                    "description": "The resource path name. For example, `projects/example-project/locations/us-central1/registries/my-registry`.",
+                    "type": "string"
+                },
+                "stateNotificationConfig": {
+                    "$ref": "StateNotificationConfig",
+                    "description": "The configuration for notification of new states received from the device. State updates are guaranteed to be stored in the state history, but notifications to Cloud Pub/Sub are not guaranteed. For example, if permissions are misconfigured or the specified topic doesn't exist, no notification will be published but the state will still be stored in Cloud IoT Core."
+                }
+            },
+            "type": "object"
+        },
+        "DeviceState": {
+            "description": "The device state, as reported by the device.",
+            "id": "DeviceState",
+            "properties": {
+                "binaryData": {
+                    "description": "The device state data.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "updateTime": {
+                    "description": "[Output only] The time at which this state version was updated in Cloud IoT Core.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Empty": {
+            "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
+            "id": "Empty",
+            "properties": {},
+            "type": "object"
+        },
+        "EventNotificationConfig": {
+            "description": "The configuration for forwarding telemetry events.",
+            "id": "EventNotificationConfig",
+            "properties": {
+                "pubsubTopicName": {
+                    "description": "A Cloud Pub/Sub topic name. For example, `projects/myProject/topics/deviceEvents`.",
+                    "type": "string"
+                },
+                "subfolderMatches": {
+                    "description": "If the subfolder name matches this string exactly, this configuration will be used. The string must not include the leading '/' character. If empty, all strings are matched. This field is used only for telemetry events; subfolders are not supported for state changes.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Expr": {
+            "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.",
+            "id": "Expr",
+            "properties": {
+                "description": {
+                    "description": "Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.",
+                    "type": "string"
+                },
+                "expression": {
+                    "description": "Textual representation of an expression in Common Expression Language syntax.",
+                    "type": "string"
+                },
+                "location": {
+                    "description": "Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GatewayConfig": {
+            "description": "Gateway-related configuration and state.",
+            "id": "GatewayConfig",
+            "properties": {
+                "gatewayAuthMethod": {
+                    "description": "Indicates how to authorize and/or authenticate devices to access the gateway.",
+                    "enum": [
+                        "GATEWAY_AUTH_METHOD_UNSPECIFIED",
+                        "ASSOCIATION_ONLY",
+                        "DEVICE_AUTH_TOKEN_ONLY",
+                        "ASSOCIATION_AND_DEVICE_AUTH_TOKEN"
+                    ],
+                    "enumDescriptions": [
+                        "No authentication/authorization method specified. No devices are allowed to access the gateway.",
+                        "The device is authenticated through the gateway association only. Device credentials are ignored even if provided.",
+                        "The device is authenticated through its own credentials. Gateway association is not checked.",
+                        "The device is authenticated through both device credentials and gateway association. The device must be bound to the gateway and must provide its own credentials."
+                    ],
+                    "type": "string"
+                },
+                "gatewayType": {
+                    "description": "Indicates whether the device is a gateway.",
+                    "enum": [
+                        "GATEWAY_TYPE_UNSPECIFIED",
+                        "GATEWAY",
+                        "NON_GATEWAY"
+                    ],
+                    "enumDescriptions": [
+                        "If unspecified, the device is considered a non-gateway device.",
+                        "The device is a gateway.",
+                        "The device is not a gateway."
+                    ],
+                    "type": "string"
+                },
+                "lastAccessedGatewayId": {
+                    "description": "[Output only] The ID of the gateway the device accessed most recently.",
+                    "type": "string"
+                },
+                "lastAccessedGatewayTime": {
+                    "description": "[Output only] The most recent time at which the device accessed the gateway specified in `last_accessed_gateway`.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GetIamPolicyRequest": {
+            "description": "Request message for `GetIamPolicy` method.",
+            "id": "GetIamPolicyRequest",
+            "properties": {
+                "options": {
+                    "$ref": "GetPolicyOptions",
+                    "description": "OPTIONAL: A `GetPolicyOptions` object for specifying options to `GetIamPolicy`."
+                }
+            },
+            "type": "object"
+        },
+        "GetPolicyOptions": {
+            "description": "Encapsulates settings provided to GetIamPolicy.",
+            "id": "GetPolicyOptions",
+            "properties": {
+                "requestedPolicyVersion": {
+                    "description": "Optional. The policy format version to be returned. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional bindings must specify version 3. Policies without any conditional bindings may specify any valid value or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "HttpConfig": {
+            "description": "The configuration of the HTTP bridge for a device registry.",
+            "id": "HttpConfig",
+            "properties": {
+                "httpEnabledState": {
+                    "description": "If enabled, allows devices to use DeviceService via the HTTP protocol. Otherwise, any requests to DeviceService will fail for this registry.",
+                    "enum": [
+                        "HTTP_STATE_UNSPECIFIED",
+                        "HTTP_ENABLED",
+                        "HTTP_DISABLED"
+                    ],
+                    "enumDescriptions": [
+                        "No HTTP state specified. If not specified, DeviceService will be enabled by default.",
+                        "Enables DeviceService (HTTP) service for the registry.",
+                        "Disables DeviceService (HTTP) service for the registry."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListDeviceConfigVersionsResponse": {
+            "description": "Response for `ListDeviceConfigVersions`.",
+            "id": "ListDeviceConfigVersionsResponse",
+            "properties": {
+                "deviceConfigs": {
+                    "description": "The device configuration for the last few versions. Versions are listed in decreasing order, starting from the most recent one.",
+                    "items": {
                         "$ref": "DeviceConfig"
-                      }
                     },
-                    "patch": {
-                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}",
-                      "parameters": {
-                        "updateMask": {
-                          "type": "string",
-                          "location": "query",
-                          "format": "google-fieldmask",
-                          "description": "Required. Only updates the `device` fields indicated by this mask. The field mask must not be empty, and it must not contain fields that are immutable or only set by the server. Mutable top-level fields: `credentials`, `blocked`, and `metadata`"
-                        },
-                        "name": {
-                          "location": "path",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/devices/[^/]+$",
-                          "description": "The resource path name. For example, `projects/p1/locations/us-central1/registries/registry0/devices/dev0` or `projects/p1/locations/us-central1/registries/registry0/devices/{num_id}`. When `name` is populated as a response from the service, it always ends in the device numeric ID.",
-                          "required": true,
-                          "type": "string"
-                        }
-                      },
-                      "id": "cloudiot.projects.locations.registries.devices.patch",
-                      "path": "v1/{+name}",
-                      "response": {
-                        "$ref": "Device"
-                      },
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloudiot"
-                      ],
-                      "httpMethod": "PATCH",
-                      "description": "Updates a device.",
-                      "request": {
-                        "$ref": "Device"
-                      }
-                    },
-                    "list": {
-                      "path": "v1/{+parent}/devices",
-                      "response": {
-                        "$ref": "ListDevicesResponse"
-                      },
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloudiot"
-                      ],
-                      "description": "List devices in a device registry.",
-                      "httpMethod": "GET",
-                      "parameters": {
-                        "pageToken": {
-                          "location": "query",
-                          "description": "The value returned by the last `ListDevicesResponse`; indicates that this is a continuation of a prior `ListDevices` call and the system should return the next page of data.",
-                          "type": "string"
-                        },
-                        "pageSize": {
-                          "location": "query",
-                          "description": "The maximum number of devices to return in the response. If this value is zero, the service will select a default size. A call may return fewer objects than requested. A non-empty `next_page_token` in the response indicates that more data is available.",
-                          "type": "integer",
-                          "format": "int32"
-                        },
-                        "gatewayListOptions.gatewayType": {
-                          "type": "string",
-                          "location": "query",
-                          "enum": [
-                            "GATEWAY_TYPE_UNSPECIFIED",
-                            "GATEWAY",
-                            "NON_GATEWAY"
-                          ],
-                          "description": "If `GATEWAY` is specified, only gateways are returned. If `NON_GATEWAY` is specified, only non-gateway devices are returned. If `GATEWAY_TYPE_UNSPECIFIED` is specified, all devices are returned.",
-                          "enumDescriptions": [
-                            "If unspecified, the device is considered a non-gateway device.",
-                            "The device is a gateway.",
-                            "The device is not a gateway."
-                          ]
-                        },
-                        "deviceIds": {
-                          "repeated": true,
-                          "location": "query",
-                          "description": "A list of device string IDs. For example, `['device0', 'device12']`. If empty, this field is ignored. Maximum IDs: 10,000",
-                          "type": "string"
-                        },
-                        "gatewayListOptions.associationsDeviceId": {
-                          "location": "query",
-                          "description": "If set, returns only the gateways with which the specified device is associated. The device ID can be numeric (`num_id`) or the user-defined string (`id`). For example, if `456` is specified, returns only the gateways to which the device with `num_id` 456 is bound.",
-                          "type": "string"
-                        },
-                        "deviceNumIds": {
-                          "format": "uint64",
-                          "description": "A list of device numeric IDs. If empty, this field is ignored. Maximum IDs: 10,000.",
-                          "repeated": true,
-                          "location": "query",
-                          "type": "string"
-                        },
-                        "gatewayListOptions.associationsGatewayId": {
-                          "type": "string",
-                          "description": "If set, only devices associated with the specified gateway are returned. The gateway ID can be numeric (`num_id`) or the user-defined string (`id`). For example, if `123` is specified, only devices bound to the gateway with `num_id` 123 are returned.",
-                          "location": "query"
-                        },
-                        "fieldMask": {
-                          "format": "google-fieldmask",
-                          "location": "query",
-                          "type": "string",
-                          "description": "The fields of the `Device` resource to be returned in the response. The fields `id` and `num_id` are always returned, along with any other fields specified."
-                        },
-                        "parent": {
-                          "description": "Required. The device registry path. Required. For example, `projects/my-project/locations/us-central1/registries/my-registry`.",
-                          "required": true,
-                          "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
-                          "location": "path",
-                          "type": "string"
-                        }
-                      },
-                      "id": "cloudiot.projects.locations.registries.devices.list",
-                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices",
-                      "parameterOrder": [
-                        "parent"
-                      ]
-                    }
-                  },
-                  "resources": {
-                    "configVersions": {
-                      "methods": {
-                        "list": {
-                          "httpMethod": "GET",
-                          "parameters": {
-                            "name": {
-                              "required": true,
-                              "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/devices/[^/]+$",
-                              "description": "Required. The name of the device. For example, `projects/p0/locations/us-central1/registries/registry0/devices/device0` or `projects/p0/locations/us-central1/registries/registry0/devices/{num_id}`.",
-                              "type": "string",
-                              "location": "path"
-                            },
-                            "numVersions": {
-                              "description": "The number of versions to list. Versions are listed in decreasing order of the version number. The maximum number of versions retained is 10. If this value is zero, it will return all the versions available.",
-                              "format": "int32",
-                              "type": "integer",
-                              "location": "query"
-                            }
-                          },
-                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}/configVersions",
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform",
-                            "https://www.googleapis.com/auth/cloudiot"
-                          ],
-                          "id": "cloudiot.projects.locations.registries.devices.configVersions.list",
-                          "path": "v1/{+name}/configVersions",
-                          "parameterOrder": [
-                            "name"
-                          ],
-                          "response": {
-                            "$ref": "ListDeviceConfigVersionsResponse"
-                          },
-                          "description": "Lists the last few versions of the device configuration in descending order (i.e.: newest first)."
-                        }
-                      }
-                    },
-                    "states": {
-                      "methods": {
-                        "list": {
-                          "parameters": {
-                            "name": {
-                              "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+/devices/[^/]+$",
-                              "required": true,
-                              "location": "path",
-                              "description": "Required. The name of the device. For example, `projects/p0/locations/us-central1/registries/registry0/devices/device0` or `projects/p0/locations/us-central1/registries/registry0/devices/{num_id}`.",
-                              "type": "string"
-                            },
-                            "numStates": {
-                              "location": "query",
-                              "format": "int32",
-                              "description": "The number of states to list. States are listed in descending order of update time. The maximum number of states retained is 10. If this value is zero, it will return all the states available.",
-                              "type": "integer"
-                            }
-                          },
-                          "path": "v1/{+name}/states",
-                          "response": {
-                            "$ref": "ListDeviceStatesResponse"
-                          },
-                          "parameterOrder": [
-                            "name"
-                          ],
-                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}/devices/{devicesId}/states",
-                          "description": "Lists the last few versions of the device state in descending order (i.e.: newest first).",
-                          "id": "cloudiot.projects.locations.registries.devices.states.list",
-                          "httpMethod": "GET",
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform",
-                            "https://www.googleapis.com/auth/cloudiot"
-                          ]
-                        }
-                      }
-                    }
-                  }
+                    "type": "array"
                 }
-              },
-              "methods": {
-                "setIamPolicy": {
-                  "description": "Sets the access control policy on the specified resource. Replaces any existing policy.",
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}:setIamPolicy",
-                  "httpMethod": "POST",
-                  "path": "v1/{+resource}:setIamPolicy",
-                  "parameters": {
-                    "resource": {
-                      "required": true,
-                      "location": "path",
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
-                      "description": "REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field."
-                    }
-                  },
-                  "id": "cloudiot.projects.locations.registries.setIamPolicy",
-                  "request": {
-                    "$ref": "SetIamPolicyRequest"
-                  },
-                  "parameterOrder": [
-                    "resource"
-                  ],
-                  "response": {
-                    "$ref": "Policy"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloudiot"
-                  ]
-                },
-                "unbindDeviceFromGateway": {
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "path": "v1/{+parent}:unbindDeviceFromGateway",
-                  "response": {
-                    "$ref": "UnbindDeviceFromGatewayResponse"
-                  },
-                  "id": "cloudiot.projects.locations.registries.unbindDeviceFromGateway",
-                  "description": "Deletes the association between the device and the gateway.",
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}:unbindDeviceFromGateway",
-                  "request": {
-                    "$ref": "UnbindDeviceFromGatewayRequest"
-                  },
-                  "parameters": {
-                    "parent": {
-                      "required": true,
-                      "description": "Required. The name of the registry. For example, `projects/example-project/locations/us-central1/registries/my-registry`.",
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
-                      "type": "string"
-                    }
-                  },
-                  "httpMethod": "POST",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloudiot"
-                  ]
-                },
-                "delete": {
-                  "httpMethod": "DELETE",
-                  "description": "Deletes a device registry configuration.",
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "path": "v1/{+name}",
-                  "id": "cloudiot.projects.locations.registries.delete",
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloudiot"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "description": "Required. The name of the device registry. For example, `projects/example-project/locations/us-central1/registries/my-registry`.",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
-                      "type": "string",
-                      "location": "path",
-                      "required": true
-                    }
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ]
-                },
-                "testIamPermissions": {
-                  "httpMethod": "POST",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloudiot"
-                  ],
-                  "path": "v1/{+resource}:testIamPermissions",
-                  "request": {
-                    "$ref": "TestIamPermissionsRequest"
-                  },
-                  "response": {
-                    "$ref": "TestIamPermissionsResponse"
-                  },
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}:testIamPermissions",
-                  "parameterOrder": [
-                    "resource"
-                  ],
-                  "parameters": {
-                    "resource": {
-                      "description": "REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field.",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
-                      "location": "path",
-                      "required": true,
-                      "type": "string"
-                    }
-                  },
-                  "id": "cloudiot.projects.locations.registries.testIamPermissions",
-                  "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a NOT_FOUND error."
-                },
-                "list": {
-                  "path": "v1/{+parent}/registries",
-                  "response": {
-                    "$ref": "ListDeviceRegistriesResponse"
-                  },
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries",
-                  "id": "cloudiot.projects.locations.registries.list",
-                  "parameters": {
-                    "pageSize": {
-                      "description": "The maximum number of registries to return in the response. If this value is zero, the service will select a default size. A call may return fewer objects than requested. A non-empty `next_page_token` in the response indicates that more data is available.",
-                      "type": "integer",
-                      "format": "int32",
-                      "location": "query"
+            },
+            "type": "object"
+        },
+        "ListDeviceRegistriesResponse": {
+            "description": "Response for `ListDeviceRegistries`.",
+            "id": "ListDeviceRegistriesResponse",
+            "properties": {
+                "deviceRegistries": {
+                    "description": "The registries that matched the query.",
+                    "items": {
+                        "$ref": "DeviceRegistry"
                     },
-                    "parent": {
-                      "type": "string",
-                      "location": "path",
-                      "description": "Required. The project and cloud region path. For example, `projects/example-project/locations/us-central1`.",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+$"
-                    },
-                    "pageToken": {
-                      "type": "string",
-                      "description": "The value returned by the last `ListDeviceRegistriesResponse`; indicates that this is a continuation of a prior `ListDeviceRegistries` call and the system should return the next page of data.",
-                      "location": "query"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloudiot"
-                  ],
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "httpMethod": "GET",
-                  "description": "Lists device registries."
+                    "type": "array"
                 },
-                "getIamPolicy": {
-                  "response": {
-                    "$ref": "Policy"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloudiot"
-                  ],
-                  "id": "cloudiot.projects.locations.registries.getIamPolicy",
-                  "request": {
-                    "$ref": "GetIamPolicyRequest"
-                  },
-                  "path": "v1/{+resource}:getIamPolicy",
-                  "httpMethod": "POST",
-                  "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.",
-                  "parameters": {
-                    "resource": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
-                      "description": "REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field.",
-                      "location": "path",
-                      "required": true,
-                      "type": "string"
-                    }
-                  },
-                  "parameterOrder": [
-                    "resource"
-                  ],
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}:getIamPolicy"
-                },
-                "get": {
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
-                      "required": true,
-                      "description": "Required. The name of the device registry. For example, `projects/example-project/locations/us-central1/registries/my-registry`.",
-                      "location": "path"
-                    }
-                  },
-                  "path": "v1/{+name}",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloudiot"
-                  ],
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}",
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "DeviceRegistry"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "description": "Gets a device registry configuration.",
-                  "id": "cloudiot.projects.locations.registries.get"
-                },
-                "bindDeviceToGateway": {
-                  "id": "cloudiot.projects.locations.registries.bindDeviceToGateway",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloudiot"
-                  ],
-                  "response": {
-                    "$ref": "BindDeviceToGatewayResponse"
-                  },
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}:bindDeviceToGateway",
-                  "path": "v1/{+parent}:bindDeviceToGateway",
-                  "httpMethod": "POST",
-                  "parameters": {
-                    "parent": {
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
-                      "type": "string",
-                      "required": true,
-                      "description": "Required. The name of the registry. For example, `projects/example-project/locations/us-central1/registries/my-registry`."
-                    }
-                  },
-                  "request": {
-                    "$ref": "BindDeviceToGatewayRequest"
-                  },
-                  "description": "Associates the device with the gateway."
-                },
-                "create": {
-                  "httpMethod": "POST",
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "parameters": {
-                    "parent": {
-                      "description": "Required. The project and cloud region where this device registry must be created. For example, `projects/example-project/locations/us-central1`.",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "type": "string",
-                      "location": "path"
-                    }
-                  },
-                  "request": {
-                    "$ref": "DeviceRegistry"
-                  },
-                  "response": {
-                    "$ref": "DeviceRegistry"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloudiot"
-                  ],
-                  "id": "cloudiot.projects.locations.registries.create",
-                  "description": "Creates a device registry that contains devices.",
-                  "path": "v1/{+parent}/registries"
-                },
-                "patch": {
-                  "httpMethod": "PATCH",
-                  "response": {
-                    "$ref": "DeviceRegistry"
-                  },
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/registries/{registriesId}",
-                  "request": {
-                    "$ref": "DeviceRegistry"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "parameters": {
-                    "updateMask": {
-                      "location": "query",
-                      "format": "google-fieldmask",
-                      "description": "Required. Only updates the `device_registry` fields indicated by this mask. The field mask must not be empty, and it must not contain fields that are immutable or only set by the server. Mutable top-level fields: `event_notification_config`, `http_config`, `mqtt_config`, and `state_notification_config`.",
-                      "type": "string"
-                    },
-                    "name": {
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registries/[^/]+$",
-                      "location": "path",
-                      "description": "The resource path name. For example, `projects/example-project/locations/us-central1/registries/my-registry`."
-                    }
-                  },
-                  "description": "Updates a device registry configuration.",
-                  "id": "cloudiot.projects.locations.registries.patch",
-                  "path": "v1/{+name}",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloudiot"
-                  ]
+                "nextPageToken": {
+                    "description": "If not empty, indicates that there may be more registries that match the request; this value should be passed in a new `ListDeviceRegistriesRequest`.",
+                    "type": "string"
                 }
-              }
-            }
-          }
+            },
+            "type": "object"
+        },
+        "ListDeviceStatesResponse": {
+            "description": "Response for `ListDeviceStates`.",
+            "id": "ListDeviceStatesResponse",
+            "properties": {
+                "deviceStates": {
+                    "description": "The last few device states. States are listed in descending order of server update time, starting from the most recent one.",
+                    "items": {
+                        "$ref": "DeviceState"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListDevicesResponse": {
+            "description": "Response for `ListDevices`.",
+            "id": "ListDevicesResponse",
+            "properties": {
+                "devices": {
+                    "description": "The devices that match the request.",
+                    "items": {
+                        "$ref": "Device"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "If not empty, indicates that there may be more devices that match the request; this value should be passed in a new `ListDevicesRequest`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ModifyCloudToDeviceConfigRequest": {
+            "description": "Request for `ModifyCloudToDeviceConfig`.",
+            "id": "ModifyCloudToDeviceConfigRequest",
+            "properties": {
+                "binaryData": {
+                    "description": "Required. The configuration data for the device.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "versionToUpdate": {
+                    "description": "The version number to update. If this value is zero, it will not check the version number of the server and will always update the current version; otherwise, this update will fail if the version number found on the server does not match this version number. This is used to support multiple simultaneous updates without losing data.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MqttConfig": {
+            "description": "The configuration of MQTT for a device registry.",
+            "id": "MqttConfig",
+            "properties": {
+                "mqttEnabledState": {
+                    "description": "If enabled, allows connections using the MQTT protocol. Otherwise, MQTT connections to this registry will fail.",
+                    "enum": [
+                        "MQTT_STATE_UNSPECIFIED",
+                        "MQTT_ENABLED",
+                        "MQTT_DISABLED"
+                    ],
+                    "enumDescriptions": [
+                        "No MQTT state specified. If not specified, MQTT will be enabled by default.",
+                        "Enables a MQTT connection.",
+                        "Disables a MQTT connection."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Policy": {
+            "description": "An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { \"bindings\": [ { \"role\": \"roles/resourcemanager.organizationAdmin\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\" ] }, { \"role\": \"roles/resourcemanager.organizationViewer\", \"members\": [ \"user:eve@example.com\" ], \"condition\": { \"title\": \"expirable access\", \"description\": \"Does not grant access after Sep 2020\", \"expression\": \"request.time < timestamp('2020-10-01T00:00:00.000Z')\", } } ], \"etag\": \"BwWWja0YfJA=\", \"version\": 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).",
+            "id": "Policy",
+            "properties": {
+                "bindings": {
+                    "description": "Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.",
+                    "items": {
+                        "$ref": "Binding"
+                    },
+                    "type": "array"
+                },
+                "etag": {
+                    "description": "`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "version": {
+                    "description": "Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "PublicKeyCertificate": {
+            "description": "A public key certificate format and data.",
+            "id": "PublicKeyCertificate",
+            "properties": {
+                "certificate": {
+                    "description": "The certificate data.",
+                    "type": "string"
+                },
+                "format": {
+                    "description": "The certificate format.",
+                    "enum": [
+                        "UNSPECIFIED_PUBLIC_KEY_CERTIFICATE_FORMAT",
+                        "X509_CERTIFICATE_PEM"
+                    ],
+                    "enumDescriptions": [
+                        "The format has not been specified. This is an invalid default value and must not be used.",
+                        "An X.509v3 certificate ([RFC5280](https://www.ietf.org/rfc/rfc5280.txt)), encoded in base64, and wrapped by `-----BEGIN CERTIFICATE-----` and `-----END CERTIFICATE-----`."
+                    ],
+                    "type": "string"
+                },
+                "x509Details": {
+                    "$ref": "X509CertificateDetails",
+                    "description": "[Output only] The certificate details. Used only for X.509 certificates."
+                }
+            },
+            "type": "object"
+        },
+        "PublicKeyCredential": {
+            "description": "A public key format and data.",
+            "id": "PublicKeyCredential",
+            "properties": {
+                "format": {
+                    "description": "The format of the key.",
+                    "enum": [
+                        "UNSPECIFIED_PUBLIC_KEY_FORMAT",
+                        "RSA_PEM",
+                        "RSA_X509_PEM",
+                        "ES256_PEM",
+                        "ES256_X509_PEM"
+                    ],
+                    "enumDescriptions": [
+                        "The format has not been specified. This is an invalid default value and must not be used.",
+                        "An RSA public key encoded in base64, and wrapped by `-----BEGIN PUBLIC KEY-----` and `-----END PUBLIC KEY-----`. This can be used to verify `RS256` signatures in JWT tokens ([RFC7518]( https://www.ietf.org/rfc/rfc7518.txt)).",
+                        "As RSA_PEM, but wrapped in an X.509v3 certificate ([RFC5280]( https://www.ietf.org/rfc/rfc5280.txt)), encoded in base64, and wrapped by `-----BEGIN CERTIFICATE-----` and `-----END CERTIFICATE-----`.",
+                        "Public key for the ECDSA algorithm using P-256 and SHA-256, encoded in base64, and wrapped by `-----BEGIN PUBLIC KEY-----` and `-----END PUBLIC KEY-----`. This can be used to verify JWT tokens with the `ES256` algorithm ([RFC7518](https://www.ietf.org/rfc/rfc7518.txt)). This curve is defined in [OpenSSL](https://www.openssl.org/) as the `prime256v1` curve.",
+                        "As ES256_PEM, but wrapped in an X.509v3 certificate ([RFC5280]( https://www.ietf.org/rfc/rfc5280.txt)), encoded in base64, and wrapped by `-----BEGIN CERTIFICATE-----` and `-----END CERTIFICATE-----`."
+                    ],
+                    "type": "string"
+                },
+                "key": {
+                    "description": "The key data.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RegistryCredential": {
+            "description": "A server-stored registry credential used to validate device credentials.",
+            "id": "RegistryCredential",
+            "properties": {
+                "publicKeyCertificate": {
+                    "$ref": "PublicKeyCertificate",
+                    "description": "A public key certificate used to verify the device credentials."
+                }
+            },
+            "type": "object"
+        },
+        "SendCommandToDeviceRequest": {
+            "description": "Request for `SendCommandToDevice`.",
+            "id": "SendCommandToDeviceRequest",
+            "properties": {
+                "binaryData": {
+                    "description": "Required. The command data to send to the device.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "subfolder": {
+                    "description": "Optional subfolder for the command. If empty, the command will be delivered to the /devices/{device-id}/commands topic, otherwise it will be delivered to the /devices/{device-id}/commands/{subfolder} topic. Multi-level subfolders are allowed. This field must not have more than 256 characters, and must not contain any MQTT wildcards (\"+\" or \"#\") or null characters.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SendCommandToDeviceResponse": {
+            "description": "Response for `SendCommandToDevice`.",
+            "id": "SendCommandToDeviceResponse",
+            "properties": {},
+            "type": "object"
+        },
+        "SetIamPolicyRequest": {
+            "description": "Request message for `SetIamPolicy` method.",
+            "id": "SetIamPolicyRequest",
+            "properties": {
+                "policy": {
+                    "$ref": "Policy",
+                    "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them."
+                }
+            },
+            "type": "object"
+        },
+        "StateNotificationConfig": {
+            "description": "The configuration for notification of new states received from the device.",
+            "id": "StateNotificationConfig",
+            "properties": {
+                "pubsubTopicName": {
+                    "description": "A Cloud Pub/Sub topic name. For example, `projects/myProject/topics/deviceEvents`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Status": {
+            "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
+            "id": "Status",
+            "properties": {
+                "code": {
+                    "description": "The status code, which should be an enum value of google.rpc.Code.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TestIamPermissionsRequest": {
+            "description": "Request message for `TestIamPermissions` method.",
+            "id": "TestIamPermissionsRequest",
+            "properties": {
+                "permissions": {
+                    "description": "The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or 'storage.*') are not allowed. For more information see [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "TestIamPermissionsResponse": {
+            "description": "Response message for `TestIamPermissions` method.",
+            "id": "TestIamPermissionsResponse",
+            "properties": {
+                "permissions": {
+                    "description": "A subset of `TestPermissionsRequest.permissions` that the caller is allowed.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "UnbindDeviceFromGatewayRequest": {
+            "description": "Request for `UnbindDeviceFromGateway`.",
+            "id": "UnbindDeviceFromGatewayRequest",
+            "properties": {
+                "deviceId": {
+                    "description": "Required. The device to disassociate from the specified gateway. The value of `device_id` can be either the device numeric ID or the user-defined device identifier.",
+                    "type": "string"
+                },
+                "gatewayId": {
+                    "description": "Required. The value of `gateway_id` can be either the device numeric ID or the user-defined device identifier.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UnbindDeviceFromGatewayResponse": {
+            "description": "Response for `UnbindDeviceFromGateway`.",
+            "id": "UnbindDeviceFromGatewayResponse",
+            "properties": {},
+            "type": "object"
+        },
+        "X509CertificateDetails": {
+            "description": "Details of an X.509 certificate. For informational purposes only.",
+            "id": "X509CertificateDetails",
+            "properties": {
+                "expiryTime": {
+                    "description": "The time the certificate becomes invalid.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "issuer": {
+                    "description": "The entity that signed the certificate.",
+                    "type": "string"
+                },
+                "publicKeyType": {
+                    "description": "The type of public key in the certificate.",
+                    "type": "string"
+                },
+                "signatureAlgorithm": {
+                    "description": "The algorithm used to sign the certificate.",
+                    "type": "string"
+                },
+                "startTime": {
+                    "description": "The time the certificate becomes valid.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "subject": {
+                    "description": "The entity the certificate and public key belong to.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         }
-      }
-    }
-  },
-  "kind": "discovery#restDescription",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "name": "cloudiot",
-  "servicePath": "",
-  "canonicalName": "Cloud Iot",
-  "basePath": "",
-  "rootUrl": "https://cloudiot.googleapis.com/",
-  "revision": "20201110",
-  "discoveryVersion": "v1",
-  "batchPath": "batch",
-  "fullyEncodeReservedExpansion": true,
-  "version_module": true,
-  "baseUrl": "https://cloudiot.googleapis.com/",
-  "documentationLink": "https://cloud.google.com/iot",
-  "ownerDomain": "google.com",
-  "title": "Cloud IoT API",
-  "version": "v1"
-}
+    },
+    "servicePath": "",
+    "title": "Cloud IoT API",
+    "version": "v1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/cloudsearch.v1.json b/googleapiclient/discovery_cache/documents/cloudsearch.v1.json
index ec4d6ac..9b7a6e2 100644
--- a/googleapiclient/discovery_cache/documents/cloudsearch.v1.json
+++ b/googleapiclient/discovery_cache/documents/cloudsearch.v1.json
@@ -1,5106 +1,5106 @@
 {
-  "fullyEncodeReservedExpansion": true,
-  "schemas": {
-    "ResultDisplayField": {
-      "id": "ResultDisplayField",
-      "properties": {
-        "operatorName": {
-          "type": "string",
-          "description": "The operator name of the property."
-        },
-        "property": {
-          "description": "The name value pair for the property.",
-          "$ref": "NamedProperty"
-        },
-        "label": {
-          "type": "string",
-          "description": "The display label for the property."
-        }
-      },
-      "type": "object",
-      "description": "Display Fields for Search Results"
-    },
-    "DebugOptions": {
-      "description": "Shared request debug options for all cloudsearch RPC methods.",
-      "properties": {
-        "enableDebugging": {
-          "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
-          "type": "boolean"
-        }
-      },
-      "id": "DebugOptions",
-      "type": "object"
-    },
-    "SourceScoringConfig": {
-      "description": "Set the scoring configuration. This allows modifying the ranking of results for a source.",
-      "id": "SourceScoringConfig",
-      "type": "object",
-      "properties": {
-        "sourceImportance": {
-          "type": "string",
-          "description": "Importance of the source.",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "DEFAULT",
-            "LOW",
-            "HIGH"
-          ]
-        }
-      }
-    },
-    "TextValues": {
-      "type": "object",
-      "properties": {
-        "values": {
-          "description": "The maximum allowable length for text values is 2048 characters.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        }
-      },
-      "id": "TextValues",
-      "description": "List of text values."
-    },
-    "IntegerPropertyOptions": {
-      "id": "IntegerPropertyOptions",
-      "description": "Options for integer properties.",
-      "properties": {
-        "maximumValue": {
-          "type": "string",
-          "description": "The maximum value of the property. The minimum and maximum values for the property are used to rank results according to the ordered ranking. Indexing requests with values greater than the maximum are accepted and ranked with the same weight as items indexed with the maximum value.",
-          "format": "int64"
-        },
-        "orderedRanking": {
-          "type": "string",
-          "enumDescriptions": [
-            "There is no ranking order for the property. Results are not adjusted by this property's value.",
-            "This property is ranked in ascending order. Lower values indicate lower ranking.",
-            "This property is ranked in descending order. Lower values indicate higher ranking."
-          ],
-          "description": "Used to specify the ordered ranking for the integer. Can only be used if isRepeatable is false.",
-          "enum": [
-            "NO_ORDER",
-            "ASCENDING",
-            "DESCENDING"
-          ]
-        },
-        "operatorOptions": {
-          "description": "If set, describes how the integer should be used as a search operator.",
-          "$ref": "IntegerOperatorOptions"
-        },
-        "minimumValue": {
-          "description": "The minimum value of the property. The minimum and maximum values for the property are used to rank results according to the ordered ranking. Indexing requests with values less than the minimum are accepted and ranked with the same weight as items indexed with the minimum value.",
-          "format": "int64",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "SuggestRequest": {
-      "id": "SuggestRequest",
-      "description": "Request of suggest API.",
-      "properties": {
-        "query": {
-          "description": "Partial query for which autocomplete suggestions will be shown. For example, if the query is \"sea\", then the server might return \"season\", \"search\", \"seagull\" and so on.",
-          "type": "string"
-        },
-        "requestOptions": {
-          "description": "Request options, such as the search application and user timezone.",
-          "$ref": "RequestOptions"
-        },
-        "dataSourceRestrictions": {
-          "type": "array",
-          "description": "The sources to use for suggestions. If not specified, the data sources are taken from the current search application. NOTE: Suggestions are supported only for third party data sources and people (i.e. PredefinedSource.PERSON).",
-          "items": {
-            "$ref": "DataSourceRestriction"
-          }
-        }
-      },
-      "type": "object"
-    },
-    "GSuitePrincipal": {
-      "type": "object",
-      "id": "GSuitePrincipal",
-      "properties": {
-        "gsuiteDomain": {
-          "type": "boolean",
-          "description": "This principal represents all users of the G Suite domain of the customer."
-        },
-        "gsuiteGroupEmail": {
-          "type": "string",
-          "description": "This principal references a G Suite group account"
-        },
-        "gsuiteUserEmail": {
-          "type": "string",
-          "description": "This principal references a G Suite user account"
-        }
-      }
-    },
-    "ResponseDebugInfo": {
-      "properties": {
-        "formattedDebugInfo": {
-          "description": "General debug info formatted for display.",
-          "type": "string"
-        }
-      },
-      "id": "ResponseDebugInfo",
-      "type": "object",
-      "description": "Debugging information about the response."
-    },
-    "SearchApplicationUserStats": {
-      "id": "SearchApplicationUserStats",
-      "type": "object",
-      "properties": {
-        "thirtyDaysActiveUsersCount": {
-          "description": "The count of unique active users in the past thirty days",
-          "type": "string",
-          "format": "int64"
-        },
-        "oneDayActiveUsersCount": {
-          "description": "The count of unique active users in the past one day",
-          "type": "string",
-          "format": "int64"
-        },
-        "sevenDaysActiveUsersCount": {
-          "format": "int64",
-          "description": "The count of unique active users in the past seven days",
-          "type": "string"
-        },
-        "date": {
-          "$ref": "Date",
-          "description": "Date for which session stats were calculated. Stats calculated on the next day close to midnight are returned."
-        }
-      }
-    },
-    "DatePropertyOptions": {
-      "description": "Options for date properties.",
-      "id": "DatePropertyOptions",
-      "properties": {
-        "operatorOptions": {
-          "$ref": "DateOperatorOptions",
-          "description": "If set, describes how the date should be used as a search operator."
-        }
-      },
-      "type": "object"
-    },
-    "SourceConfig": {
-      "id": "SourceConfig",
-      "properties": {
-        "scoringConfig": {
-          "$ref": "SourceScoringConfig",
-          "description": "The scoring configuration for the source."
-        },
-        "source": {
-          "description": "The source for which this configuration is to be used.",
-          "$ref": "Source"
-        },
-        "crowdingConfig": {
-          "description": "The crowding configuration for the source.",
-          "$ref": "SourceCrowdingConfig"
-        }
-      },
-      "description": "Configurations for a source while processing a Search or Suggest request.",
-      "type": "object"
-    },
-    "ResetSearchApplicationRequest": {
-      "type": "object",
-      "properties": {
-        "debugOptions": {
-          "description": "Common debug options.",
-          "$ref": "DebugOptions"
-        }
-      },
-      "id": "ResetSearchApplicationRequest"
-    },
-    "PushItem": {
-      "description": "Represents an item to be pushed to the indexing queue.",
-      "type": "object",
-      "id": "PushItem",
-      "properties": {
-        "type": {
-          "description": "The type of the push operation that defines the push behavior.",
-          "enum": [
-            "UNSPECIFIED",
-            "MODIFIED",
-            "NOT_MODIFIED",
-            "REPOSITORY_ERROR",
-            "REQUEUE"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "Default UNSPECIFIED. Specifies that the push operation should not modify ItemStatus",
-            "Indicates that the repository document has been modified or updated since the previous update call. This changes status to MODIFIED state for an existing item. If this is called on a non existing item, the status is changed to NEW_ITEM.",
-            "Item in the repository has not been modified since the last update call. This push operation will set status to ACCEPTED state.",
-            "Connector is facing a repository error regarding this item. Change status to REPOSITORY_ERROR state. Item is unreserved and rescheduled at a future time determined by exponential backoff.",
-            "Call push with REQUEUE only for items that have been reserved. This action unreserves the item and resets its available time to the wall clock time."
-          ]
-        },
-        "queue": {
-          "description": "Queue to which this item belongs to. The default queue is chosen if this field is not specified. The maximum length is 512 characters.",
-          "type": "string"
-        },
-        "contentHash": {
-          "description": "Content hash of the item according to the repository. If specified, this is used to determine how to modify this item's status. Setting this field and the type field results in argument error. The maximum length is 2048 characters.",
-          "type": "string"
-        },
-        "repositoryError": {
-          "description": "Populate this field to store Connector or repository error details. This information is displayed in the Admin Console. This field may only be populated when the Type is REPOSITORY_ERROR.",
-          "$ref": "RepositoryError"
-        },
-        "metadataHash": {
-          "description": "Metadata hash of the item according to the repository. If specified, this is used to determine how to modify this item's status. Setting this field and the type field results in argument error. The maximum length is 2048 characters.",
-          "type": "string"
-        },
-        "structuredDataHash": {
-          "type": "string",
-          "description": "Structured data hash of the item according to the repository. If specified, this is used to determine how to modify this item's status. Setting this field and the type field results in argument error. The maximum length is 2048 characters."
-        },
-        "payload": {
-          "description": "Provides additional document state information for the connector, such as an alternate repository ID and other metadata. The maximum length is 8192 bytes.",
-          "format": "byte",
-          "type": "string"
-        }
-      }
-    },
-    "MatchRange": {
-      "properties": {
-        "end": {
-          "type": "integer",
-          "description": "End of the match in the snippet.",
-          "format": "int32"
-        },
-        "start": {
-          "description": "Starting position of the match in the snippet.",
-          "type": "integer",
-          "format": "int32"
-        }
-      },
-      "description": "Matched range of a snippet [start, end).",
-      "id": "MatchRange",
-      "type": "object"
-    },
-    "CustomerQueryStats": {
-      "id": "CustomerQueryStats",
-      "type": "object",
-      "properties": {
-        "queryCountByStatus": {
-          "items": {
-            "$ref": "QueryCountByStatus"
-          },
-          "type": "array"
-        },
-        "date": {
-          "$ref": "Date",
-          "description": "Date for which query stats were calculated. Stats calculated on the next day close to midnight are returned."
-        }
-      }
-    },
-    "PollItemsRequest": {
-      "properties": {
-        "limit": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Maximum number of items to return. The maximum value is 100 and the default value is 20."
-        },
-        "debugOptions": {
-          "$ref": "DebugOptions",
-          "description": "Common debug options."
-        },
-        "connectorName": {
-          "description": "Name of connector making this call. Format: datasources/{source_id}/connectors/{ID}",
-          "type": "string"
-        },
-        "queue": {
-          "description": "Queue name to fetch items from. If unspecified, PollItems will fetch from 'default' queue. The maximum length is 100 characters.",
-          "type": "string"
-        },
-        "statusCodes": {
-          "type": "array",
-          "items": {
-            "enumDescriptions": [
-              "Input-only value. Used with Items.list to list all items in the queue, regardless of status.",
-              "Error encountered by Cloud Search while processing this item. Details of the error are in repositoryError.",
-              "Item has been modified in the repository, and is out of date with the version previously accepted into Cloud Search.",
-              "Item is known to exist in the repository, but is not yet accepted by Cloud Search. An item can be in this state when Items.push has been called for an item of this name that did not exist previously.",
-              "API has accepted the up-to-date data of this item."
-            ],
-            "type": "string",
-            "enum": [
-              "CODE_UNSPECIFIED",
-              "ERROR",
-              "MODIFIED",
-              "NEW_ITEM",
-              "ACCEPTED"
-            ]
-          },
-          "description": "Limit the items polled to the ones with these statuses."
-        }
-      },
-      "type": "object",
-      "id": "PollItemsRequest"
-    },
-    "FacetBucket": {
-      "properties": {
-        "count": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Number of results that match the bucket value. Counts are only returned for searches when count accuracy is ensured. Can be empty."
-        },
-        "percentage": {
-          "type": "integer",
-          "description": "Percent of results that match the bucket value. The returned value is between (0-100], and is rounded down to an integer if fractional. If the value is not explicitly returned, it represents a percentage value that rounds to 0. Percentages are returned for all searches, but are an estimate. Because percentages are always returned, you should render percentages instead of counts.",
-          "format": "int32"
-        },
-        "value": {
-          "$ref": "Value"
-        }
-      },
-      "type": "object",
-      "description": "A bucket in a facet is the basic unit of operation. A bucket can comprise either a single value OR a contiguous range of values, depending on the type of the field bucketed. FacetBucket is currently used only for returning the response object.",
-      "id": "FacetBucket"
-    },
-    "ItemMetadata": {
-      "description": "Available metadata fields for the item.",
-      "type": "object",
-      "properties": {
-        "keywords": {
-          "description": "Additional keywords or phrases that should match the item. Used internally for user generated content. The maximum number of elements is 100. The maximum length is 8192 characters.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "interactions": {
-          "items": {
-            "$ref": "Interaction"
-          },
-          "type": "array",
-          "description": "A list of interactions for the item. Interactions are used to improve Search quality, but are not exposed to end users. The maximum number of elements is 1000."
-        },
-        "hash": {
-          "type": "string",
-          "description": "Hashing value provided by the API caller. This can be used with the items.push method to calculate modified state. The maximum length is 2048 characters."
-        },
-        "sourceRepositoryUrl": {
-          "type": "string",
-          "description": "Link to the source repository serving the data. Search results apply this link to the title. Whitespace or special characters may cause Cloud Search result links to trigger a redirect notice; to avoid this, encode the URL. The maximum length is 2048 characters."
-        },
-        "createTime": {
-          "format": "google-datetime",
-          "description": "The time when the item was created in the source repository.",
-          "type": "string"
-        },
-        "contentLanguage": {
-          "type": "string",
-          "description": "The BCP-47 language code for the item, such as \"en-US\" or \"sr-Latn\". For more information, see http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. The maximum length is 32 characters."
-        },
-        "title": {
-          "type": "string",
-          "description": "The title of the item. If given, this will be the displayed title of the Search result. The maximum length is 2048 characters."
-        },
-        "searchQualityMetadata": {
-          "description": "Additional search quality metadata of the item",
-          "$ref": "SearchQualityMetadata"
-        },
-        "objectType": {
-          "description": "The type of the item. This should correspond to the name of an object definition in the schema registered for the data source. For example, if the schema for the data source contains an object definition with name 'document', then item indexing requests for objects of that type should set objectType to 'document'. The maximum length is 256 characters.",
-          "type": "string"
-        },
-        "mimeType": {
-          "description": "The original mime-type of ItemContent.content in the source repository. The maximum length is 256 characters.",
-          "type": "string"
-        },
-        "updateTime": {
-          "description": "The time when the item was last modified in the source repository.",
-          "type": "string",
-          "format": "google-datetime"
-        },
-        "containerName": {
-          "type": "string",
-          "description": "The name of the container for this item. Deletion of the container item leads to automatic deletion of this item. Note: ACLs are not inherited from a container item. To provide ACL inheritance for an item, use the inheritAclFrom field. The maximum length is 1536 characters."
-        }
-      },
-      "id": "ItemMetadata"
-    },
-    "QueryInterpretationOptions": {
-      "type": "object",
-      "id": "QueryInterpretationOptions",
-      "properties": {
-        "disableNlInterpretation": {
-          "description": "Flag to disable natural language (NL) interpretation of queries. Default is false, Set to true to disable natural language interpretation. NL interpretation only applies to predefined datasources.",
-          "type": "boolean"
-        },
-        "enableVerbatimMode": {
-          "type": "boolean",
-          "description": "Enable this flag to turn off all internal optimizations like natural language (NL) interpretation of queries, supplemental result retrieval, and usage of synonyms including custom ones. Nl interpretation will be disabled if either one of the two flags is true."
-        }
-      },
-      "description": "Options to interpret user query."
-    },
-    "SearchApplicationQueryStats": {
-      "type": "object",
-      "id": "SearchApplicationQueryStats",
-      "properties": {
-        "date": {
-          "description": "Date for which query stats were calculated. Stats calculated on the next day close to midnight are returned.",
-          "$ref": "Date"
-        },
-        "queryCountByStatus": {
-          "type": "array",
-          "items": {
-            "$ref": "QueryCountByStatus"
-          }
-        }
-      }
-    },
-    "BooleanPropertyOptions": {
-      "type": "object",
-      "properties": {
-        "operatorOptions": {
-          "$ref": "BooleanOperatorOptions",
-          "description": "If set, describes how the boolean should be used as a search operator."
-        }
-      },
-      "id": "BooleanPropertyOptions",
-      "description": "Options for boolean properties."
-    },
-    "PropertyDisplayOptions": {
-      "properties": {
-        "displayLabel": {
-          "description": "The user friendly label for the property that is used if the property is specified to be displayed in ObjectDisplayOptions. If provided, the display label is shown in front of the property values when the property is part of the object display options. For example, if the property value is '1', the value by itself may not be useful context for the user. If the display name given was 'priority', then the user sees 'priority : 1' in the search results which provides clear context to search users. This is OPTIONAL; if not given, only the property values are displayed. The maximum length is 64 characters.",
-          "type": "string"
-        }
-      },
-      "description": "The display options for a property.",
-      "type": "object",
-      "id": "PropertyDisplayOptions"
-    },
-    "TimestampPropertyOptions": {
-      "type": "object",
-      "id": "TimestampPropertyOptions",
-      "properties": {
-        "operatorOptions": {
-          "$ref": "TimestampOperatorOptions",
-          "description": "If set, describes how the timestamp should be used as a search operator."
-        }
-      },
-      "description": "Options for timestamp properties."
-    },
-    "ObjectOptions": {
-      "type": "object",
-      "description": "The options for an object.",
-      "id": "ObjectOptions",
-      "properties": {
-        "displayOptions": {
-          "description": "Options that determine how the object is displayed in the Cloud Search results page.",
-          "$ref": "ObjectDisplayOptions"
-        },
-        "freshnessOptions": {
-          "description": "The freshness options for an object.",
-          "$ref": "FreshnessOptions"
-        }
-      }
-    },
-    "ErrorMessage": {
-      "type": "object",
-      "properties": {
-        "errorMessage": {
-          "type": "string"
-        },
-        "source": {
-          "$ref": "Source"
-        }
-      },
-      "description": "Error message per source response.",
-      "id": "ErrorMessage"
-    },
-    "GetSearchApplicationSessionStatsResponse": {
-      "properties": {
-        "stats": {
-          "type": "array",
-          "items": {
-            "$ref": "SearchApplicationSessionStats"
-          }
-        }
-      },
-      "id": "GetSearchApplicationSessionStatsResponse",
-      "type": "object"
-    },
-    "DoubleOperatorOptions": {
-      "type": "object",
-      "id": "DoubleOperatorOptions",
-      "properties": {
-        "operatorName": {
-          "description": "Indicates the operator name required in the query in order to use the double property in sorting or as a facet. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.",
-          "type": "string"
-        }
-      },
-      "description": "Used to provide a search operator for double properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched."
-    },
-    "RestrictItem": {
-      "id": "RestrictItem",
-      "properties": {
-        "searchOperator": {
-          "type": "string",
-          "description": "The search restrict (e.g. \"after:2017-09-11 before:2017-09-12\")."
-        },
-        "driveFollowUpRestrict": {
-          "description": "LINT.ThenChange(//depot/google3/java/com/google/apps/search/quality/itemsuggest/utils/SubtypeRerankingUtils.java)",
-          "$ref": "DriveFollowUpRestrict"
-        },
-        "driveTimeSpanRestrict": {
-          "$ref": "DriveTimeSpanRestrict"
-        },
-        "driveMimeTypeRestrict": {
-          "description": "LINT.IfChange Drive Types.",
-          "$ref": "DriveMimeTypeRestrict"
-        },
-        "driveLocationRestrict": {
-          "$ref": "DriveLocationRestrict"
-        }
-      },
-      "description": "Information relevant only to a restrict entry. NextId: 12",
-      "type": "object"
-    },
-    "GetSearchApplicationUserStatsResponse": {
-      "type": "object",
-      "id": "GetSearchApplicationUserStatsResponse",
-      "properties": {
-        "stats": {
-          "items": {
-            "$ref": "SearchApplicationUserStats"
-          },
-          "type": "array"
-        }
-      }
-    },
-    "GetCustomerIndexStatsResponse": {
-      "properties": {
-        "stats": {
-          "description": "Summary of indexed item counts, one for each day in the requested range.",
-          "type": "array",
-          "items": {
-            "$ref": "CustomerIndexStats"
-          }
-        }
-      },
-      "type": "object",
-      "id": "GetCustomerIndexStatsResponse"
-    },
-    "ListQuerySourcesResponse": {
-      "description": "List sources response.",
-      "type": "object",
-      "id": "ListQuerySourcesResponse",
-      "properties": {
-        "nextPageToken": {
-          "type": "string"
-        },
-        "sources": {
-          "type": "array",
-          "items": {
-            "$ref": "QuerySource"
-          }
-        }
-      }
-    },
-    "ObjectValues": {
-      "properties": {
-        "values": {
-          "items": {
-            "$ref": "StructuredDataObject"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "id": "ObjectValues",
-      "description": "List of object values."
-    },
-    "UploadItemRef": {
-      "type": "object",
-      "description": "Represents an upload session reference. This reference is created via upload method. Updating of item content may refer to this uploaded content via contentDataRef.",
-      "id": "UploadItemRef",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Name of the content reference. The maximum length is 2048 characters."
-        }
-      }
-    },
-    "IndexItemOptions": {
-      "id": "IndexItemOptions",
-      "properties": {
-        "allowUnknownGsuitePrincipals": {
-          "type": "boolean",
-          "description": "Specifies if the index request should allow gsuite principals that do not exist or are deleted in the index request."
-        }
-      },
-      "type": "object"
-    },
-    "IndexItemRequest": {
-      "type": "object",
-      "id": "IndexItemRequest",
-      "properties": {
-        "indexItemOptions": {
-          "$ref": "IndexItemOptions"
-        },
-        "debugOptions": {
-          "description": "Common debug options.",
-          "$ref": "DebugOptions"
-        },
-        "connectorName": {
-          "type": "string",
-          "description": "Name of connector making this call. Format: datasources/{source_id}/connectors/{ID}"
-        },
-        "mode": {
-          "enumDescriptions": [
-            "Priority is not specified in the update request. Leaving priority unspecified results in an update failure.",
-            "For real-time updates.",
-            "For changes that are executed after the response is sent back to the caller."
-          ],
-          "enum": [
-            "UNSPECIFIED",
-            "SYNCHRONOUS",
-            "ASYNCHRONOUS"
-          ],
-          "description": "Required. The RequestMode for this request.",
-          "type": "string"
-        },
-        "item": {
-          "$ref": "Item",
-          "description": "Name of the item. Format: datasources/{source_id}/items/{item_id}"
-        }
-      }
-    },
-    "DoublePropertyOptions": {
-      "id": "DoublePropertyOptions",
-      "description": "Options for double properties.",
-      "type": "object",
-      "properties": {
-        "operatorOptions": {
-          "$ref": "DoubleOperatorOptions",
-          "description": "If set, describes how the double should be used as a search operator."
-        }
-      }
-    },
-    "BooleanOperatorOptions": {
-      "properties": {
-        "operatorName": {
-          "description": "Indicates the operator name required in the query in order to isolate the boolean property. For example, if operatorName is *closed* and the property's name is *isClosed*, then queries like *closed:\u003cvalue\u003e* show results only where the value of the property named *isClosed* matches *\u003cvalue\u003e*. By contrast, a search that uses the same *\u003cvalue\u003e* without an operator returns all items where *\u003cvalue\u003e* matches the value of any String properties or text within the content field for the item. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Used to provide a search operator for boolean properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched.",
-      "id": "BooleanOperatorOptions"
-    },
-    "ScoringConfig": {
-      "type": "object",
-      "id": "ScoringConfig",
-      "description": "Scoring configurations for a source while processing a Search or Suggest request.",
-      "properties": {
-        "disablePersonalization": {
-          "type": "boolean",
-          "description": "Whether to personalize the results. By default, personal signals will be used to boost results."
-        },
-        "disableFreshness": {
-          "description": "Whether to use freshness as a ranking signal. By default, freshness is used as a ranking signal. Note that this setting is not available in the Admin UI.",
-          "type": "boolean"
-        }
-      }
-    },
-    "CustomerIndexStats": {
-      "type": "object",
-      "description": "Aggregation of items by status code as of the specified date.",
-      "properties": {
-        "itemCountByStatus": {
-          "type": "array",
-          "items": {
-            "$ref": "ItemCountByStatus"
-          },
-          "description": "Number of items aggregrated by status code."
-        },
-        "date": {
-          "description": "Date for which statistics were calculated.",
-          "$ref": "Date"
-        }
-      },
-      "id": "CustomerIndexStats"
-    },
-    "RequestOptions": {
-      "description": "Shared request options for all RPC methods.",
-      "id": "RequestOptions",
-      "properties": {
-        "debugOptions": {
-          "description": "Debug options of the request",
-          "$ref": "DebugOptions"
-        },
-        "languageCode": {
-          "description": "The BCP-47 language code, such as \"en-US\" or \"sr-Latn\". For more information, see http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. For translations. Set this field using the language set in browser or for the page. In the event that the user's language preference is known, set this field to the known user language. When specified, the documents in search results are biased towards the specified language. The suggest API does not use this parameter. Instead, suggest autocompletes only based on characters in the query.",
-          "type": "string"
-        },
-        "searchApplicationId": {
-          "description": "The ID generated when you create a search application using the [admin console](https://support.google.com/a/answer/9043922).",
-          "type": "string"
-        },
-        "timeZone": {
-          "type": "string",
-          "description": "Current user's time zone id, such as \"America/Los_Angeles\" or \"Australia/Sydney\". These IDs are defined by [Unicode Common Locale Data Repository (CLDR)](http://cldr.unicode.org/) project, and currently available in the file [timezone.xml](http://unicode.org/repos/cldr/trunk/common/bcp47/timezone.xml). This field is used to correctly interpret date and time queries. If this field is not specified, the default time zone (UTC) is used."
-        }
-      },
-      "type": "object"
-    },
-    "ValueFilter": {
-      "properties": {
-        "value": {
-          "description": "The value to be compared with.",
-          "$ref": "Value"
-        },
-        "operatorName": {
-          "description": "The `operator_name` applied to the query, such as *price_greater_than*. The filter can work against both types of filters defined in the schema for your data source: 1. `operator_name`, where the query filters results by the property that matches the value. 2. `greater_than_operator_name` or `less_than_operator_name` in your schema. The query filters the results for the property values that are greater than or less than the supplied value in the query.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "ValueFilter"
-    },
-    "Status": {
-      "id": "Status",
-      "properties": {
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
-          "type": "string"
-        },
-        "code": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The status code, which should be an enum value of google.rpc.Code."
-        },
-        "details": {
-          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
-          "items": {
-            "type": "object",
-            "additionalProperties": {
-              "type": "any",
-              "description": "Properties of the object. Contains field @type with type URL."
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud_search": {
+                    "description": "Index and serve your organization's data with Cloud Search"
+                },
+                "https://www.googleapis.com/auth/cloud_search.debug": {
+                    "description": "Index and serve your organization's data with Cloud Search"
+                },
+                "https://www.googleapis.com/auth/cloud_search.indexing": {
+                    "description": "Index and serve your organization's data with Cloud Search"
+                },
+                "https://www.googleapis.com/auth/cloud_search.query": {
+                    "description": "Search your organization's data in the Cloud Search index"
+                },
+                "https://www.googleapis.com/auth/cloud_search.settings": {
+                    "description": "Index and serve your organization's data with Cloud Search"
+                },
+                "https://www.googleapis.com/auth/cloud_search.settings.indexing": {
+                    "description": "Index and serve your organization's data with Cloud Search"
+                },
+                "https://www.googleapis.com/auth/cloud_search.settings.query": {
+                    "description": "Index and serve your organization's data with Cloud Search"
+                },
+                "https://www.googleapis.com/auth/cloud_search.stats": {
+                    "description": "Index and serve your organization's data with Cloud Search"
+                },
+                "https://www.googleapis.com/auth/cloud_search.stats.indexing": {
+                    "description": "Index and serve your organization's data with Cloud Search"
+                }
             }
-          },
-          "type": "array"
         }
-      },
-      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
-      "type": "object"
     },
-    "Person": {
-      "id": "Person",
-      "type": "object",
-      "description": "Object to represent a person.",
-      "properties": {
-        "photos": {
-          "type": "array",
-          "description": "A person's read-only photo. A picture shown next to the person's name to help others recognize the person in search results.",
-          "items": {
-            "$ref": "Photo"
-          }
-        },
-        "emailAddresses": {
-          "description": "The person's email addresses",
-          "type": "array",
-          "items": {
-            "$ref": "EmailAddress"
-          }
-        },
-        "obfuscatedId": {
-          "type": "string",
-          "description": "Obfuscated ID of a person."
-        },
-        "name": {
-          "description": "The resource name of the person to provide information about. See People.get from Google People API.",
-          "type": "string"
-        },
-        "personNames": {
-          "items": {
-            "$ref": "Name"
-          },
-          "description": "The person's name",
-          "type": "array"
-        }
-      }
+    "basePath": "",
+    "baseUrl": "https://cloudsearch.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Cloud Search",
+    "description": "Cloud Search provides cloud-based search capabilities over G Suite data. The Cloud Search API allows indexing of non-G Suite data into Cloud Search.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://developers.google.com/cloud-search/docs/guides/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
     },
-    "Interaction": {
-      "properties": {
-        "principal": {
-          "$ref": "Principal",
-          "description": "The user that acted on the item."
+    "id": "cloudsearch:v1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://cloudsearch.mtls.googleapis.com/",
+    "name": "cloudsearch",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "type": {
-          "enumDescriptions": [
-            "Invalid value.",
-            "This interaction indicates the user viewed the item.",
-            "This interaction indicates the user edited the item."
-          ],
-          "enum": [
-            "UNSPECIFIED",
-            "VIEW",
-            "EDIT"
-          ],
-          "type": "string"
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
         },
-        "interactionTime": {
-          "description": "The time when the user acted on the item. If multiple actions of the same type exist for a single user, only the most recent action is recorded.",
-          "type": "string",
-          "format": "google-datetime"
-        }
-      },
-      "id": "Interaction",
-      "type": "object",
-      "description": "Represents an interaction between a user and an item."
-    },
-    "GetCustomerSessionStatsResponse": {
-      "id": "GetCustomerSessionStatsResponse",
-      "properties": {
-        "stats": {
-          "type": "array",
-          "items": {
-            "$ref": "CustomerSessionStats"
-          }
-        }
-      },
-      "type": "object"
-    },
-    "SearchQualityMetadata": {
-      "description": "Additional search quality metadata of the item.",
-      "id": "SearchQualityMetadata",
-      "properties": {
-        "quality": {
-          "type": "number",
-          "format": "double",
-          "description": "An indication of the quality of the item, used to influence search quality. Value should be between 0.0 (lowest quality) and 1.0 (highest quality). The default value is 0.0."
-        }
-      },
-      "type": "object"
-    },
-    "FacetOptions": {
-      "type": "object",
-      "id": "FacetOptions",
-      "description": "Specifies operators to return facet results for. There will be one FacetResult for every source_name/object_type/operator_name combination.",
-      "properties": {
-        "operatorName": {
-          "description": "Name of the operator chosen for faceting. @see cloudsearch.SchemaPropertyOptions",
-          "type": "string"
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "objectType": {
-          "description": "If object_type is set, only those objects of that type will be used to compute facets. If empty, then all objects will be used to compute facets.",
-          "type": "string"
-        },
-        "sourceName": {
-          "type": "string",
-          "description": "Source name to facet on. Format: datasources/{source_id} If empty, all data sources will be used."
-        },
-        "numFacetBuckets": {
-          "description": "Maximum number of facet buckets that should be returned for this facet. Defaults to 10. Maximum value is 100.",
-          "format": "int32",
-          "type": "integer"
-        }
-      }
-    },
-    "Metadata": {
-      "type": "object",
-      "description": "Metadata of a matched search result.",
-      "properties": {
-        "objectType": {
-          "description": "Object type of the search result.",
-          "type": "string"
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
         },
         "fields": {
-          "items": {
-            "$ref": "NamedProperty"
-          },
-          "type": "array",
-          "description": "Indexed fields in structured data, returned as a generic named property."
-        },
-        "updateTime": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "The last modified date for the object in the search result. If not set in the item, the value returned here is empty. When `updateTime` is used for calculating freshness and is not set, this value defaults to 2 years from the current time."
-        },
-        "owner": {
-          "$ref": "Person",
-          "description": "Owner (usually creator) of the document or object of the search result."
-        },
-        "source": {
-          "description": "The named source for the result, such as Gmail.",
-          "$ref": "Source"
-        },
-        "createTime": {
-          "description": "The creation time for this document or object in the search result.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "mimeType": {
-          "description": "Mime type of the search result.",
-          "type": "string"
-        },
-        "displayOptions": {
-          "$ref": "ResultDisplayMetadata",
-          "description": "Options that specify how to display a structured data search result."
-        }
-      },
-      "id": "Metadata"
-    },
-    "StructuredResult": {
-      "type": "object",
-      "properties": {
-        "person": {
-          "description": "Representation of a person",
-          "$ref": "Person"
-        }
-      },
-      "id": "StructuredResult",
-      "description": "Structured results that are returned as part of search request."
-    },
-    "NamedProperty": {
-      "properties": {
-        "integerValues": {
-          "$ref": "IntegerValues"
-        },
-        "name": {
-          "type": "string",
-          "description": "The name of the property. This name should correspond to the name of the property that was registered for object definition in the schema. The maximum allowable length for this property is 256 characters."
-        },
-        "dateValues": {
-          "$ref": "DateValues"
-        },
-        "enumValues": {
-          "$ref": "EnumValues"
-        },
-        "htmlValues": {
-          "$ref": "HtmlValues"
-        },
-        "objectValues": {
-          "$ref": "ObjectValues"
-        },
-        "booleanValue": {
-          "type": "boolean"
-        },
-        "timestampValues": {
-          "$ref": "TimestampValues"
-        },
-        "textValues": {
-          "$ref": "TextValues"
-        },
-        "doubleValues": {
-          "$ref": "DoubleValues"
-        }
-      },
-      "description": "A typed name-value pair for structured data. The type of the value should be the same as the registered type for the `name` property in the object definition of `objectType`.",
-      "id": "NamedProperty",
-      "type": "object"
-    },
-    "ListUnmappedIdentitiesResponse": {
-      "properties": {
-        "nextPageToken": {
-          "description": "Token to retrieve the next page of results, or empty if there are no more results in the list.",
-          "type": "string"
-        },
-        "unmappedIdentities": {
-          "items": {
-            "$ref": "UnmappedIdentity"
-          },
-          "type": "array"
-        }
-      },
-      "id": "ListUnmappedIdentitiesResponse",
-      "type": "object"
-    },
-    "StructuredDataObject": {
-      "type": "object",
-      "id": "StructuredDataObject",
-      "properties": {
-        "properties": {
-          "items": {
-            "$ref": "NamedProperty"
-          },
-          "type": "array",
-          "description": "The properties for the object. The maximum number of elements is 1000."
-        }
-      },
-      "description": "A structured data object consisting of named properties."
-    },
-    "TimestampOperatorOptions": {
-      "id": "TimestampOperatorOptions",
-      "type": "object",
-      "properties": {
-        "operatorName": {
-          "type": "string",
-          "description": "Indicates the operator name required in the query in order to isolate the timestamp property. For example, if operatorName is *closedon* and the property's name is *closeDate*, then queries like *closedon:\u003cvalue\u003e* show results only where the value of the property named *closeDate* matches *\u003cvalue\u003e*. By contrast, a search that uses the same *\u003cvalue\u003e* without an operator returns all items where *\u003cvalue\u003e* matches the value of any String properties or text within the content field for the item. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters."
-        },
-        "lessThanOperatorName": {
-          "type": "string",
-          "description": "Indicates the operator name required in the query in order to isolate the timestamp property using the less-than operator. For example, if lessThanOperatorName is *closedbefore* and the property's name is *closeDate*, then queries like *closedbefore:\u003cvalue\u003e* show results only where the value of the property named *closeDate* is earlier than *\u003cvalue\u003e*. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters."
-        },
-        "greaterThanOperatorName": {
-          "type": "string",
-          "description": "Indicates the operator name required in the query in order to isolate the timestamp property using the greater-than operator. For example, if greaterThanOperatorName is *closedafter* and the property's name is *closeDate*, then queries like *closedafter:\u003cvalue\u003e* show results only where the value of the property named *closeDate* is later than *\u003cvalue\u003e*. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters."
-        }
-      },
-      "description": "Used to provide a search operator for timestamp properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched."
-    },
-    "UpdateSchemaRequest": {
-      "id": "UpdateSchemaRequest",
-      "properties": {
-        "schema": {
-          "description": "The new schema for the source.",
-          "$ref": "Schema"
-        },
-        "validateOnly": {
-          "type": "boolean",
-          "description": "If true, the schema will be checked for validity, but will not be registered with the data source, even if valid."
-        },
-        "debugOptions": {
-          "description": "Common debug options.",
-          "$ref": "DebugOptions"
-        }
-      },
-      "type": "object"
-    },
-    "Value": {
-      "description": "Definition of a single value with generic type.",
-      "type": "object",
-      "id": "Value",
-      "properties": {
-        "dateValue": {
-          "$ref": "Date"
-        },
-        "integerValue": {
-          "format": "int64",
-          "type": "string"
-        },
-        "timestampValue": {
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "stringValue": {
-          "type": "string"
-        },
-        "doubleValue": {
-          "type": "number",
-          "format": "double"
-        },
-        "booleanValue": {
-          "type": "boolean"
-        }
-      }
-    },
-    "ListSearchApplicationsResponse": {
-      "type": "object",
-      "id": "ListSearchApplicationsResponse",
-      "properties": {
-        "searchApplications": {
-          "type": "array",
-          "items": {
-            "$ref": "SearchApplication"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Token to retrieve the next page of results, or empty if there are no more results in the list."
-        }
-      }
-    },
-    "CustomerSessionStats": {
-      "properties": {
-        "searchSessionsCount": {
-          "type": "string",
-          "format": "int64",
-          "description": "The count of search sessions on the day"
-        },
-        "date": {
-          "description": "Date for which session stats were calculated. Stats calculated on the next day close to midnight are returned.",
-          "$ref": "Date"
-        }
-      },
-      "type": "object",
-      "id": "CustomerSessionStats"
-    },
-    "GetDataSourceIndexStatsResponse": {
-      "properties": {
-        "stats": {
-          "type": "array",
-          "items": {
-            "$ref": "DataSourceIndexStats"
-          },
-          "description": "Summary of indexed item counts, one for each day in the requested range."
-        }
-      },
-      "type": "object",
-      "id": "GetDataSourceIndexStatsResponse"
-    },
-    "EnumPropertyOptions": {
-      "type": "object",
-      "description": "Options for enum properties, which allow you to define a restricted set of strings to match user queries, set rankings for those string values, and define an operator name to be paired with those strings so that users can narrow results to only items with a specific value. For example, for items in a request tracking system with priority information, you could define *p0* as an allowable enum value and tie this enum to the operator name *priority* so that search users could add *priority:p0* to their query to restrict the set of results to only those items indexed with the value *p0*.",
-      "id": "EnumPropertyOptions",
-      "properties": {
-        "orderedRanking": {
-          "description": "Used to specify the ordered ranking for the enumeration that determines how the integer values provided in the possible EnumValuePairs are used to rank results. If specified, integer values must be provided for all possible EnumValuePair values given for this property. Can only be used if isRepeatable is false.",
-          "enum": [
-            "NO_ORDER",
-            "ASCENDING",
-            "DESCENDING"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "There is no ranking order for the property. Results aren't adjusted by this property's value.",
-            "This property is ranked in ascending order. Lower values indicate lower ranking.",
-            "This property is ranked in descending order. Lower values indicate higher ranking."
-          ]
-        },
-        "possibleValues": {
-          "items": {
-            "$ref": "EnumValuePair"
-          },
-          "description": "The list of possible values for the enumeration property. All EnumValuePairs must provide a string value. If you specify an integer value for one EnumValuePair, then all possible EnumValuePairs must provide an integer value. Both the string value and integer value must be unique over all possible values. Once set, possible values cannot be removed or modified. If you supply an ordered ranking and think you might insert additional enum values in the future, leave gaps in the initial integer values to allow adding a value in between previously registered values. The maximum number of elements is 100.",
-          "type": "array"
-        },
-        "operatorOptions": {
-          "description": "If set, describes how the enum should be used as a search operator.",
-          "$ref": "EnumOperatorOptions"
-        }
-      }
-    },
-    "DriveLocationRestrict": {
-      "description": "Drive location search restricts (e.g. \"is:starred\").",
-      "type": "object",
-      "properties": {
-        "type": {
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "enum": [
-            "UNSPECIFIED",
-            "TRASHED",
-            "STARRED"
-          ]
-        }
-      },
-      "id": "DriveLocationRestrict"
-    },
-    "SuggestResponse": {
-      "properties": {
-        "suggestResults": {
-          "type": "array",
-          "description": "List of suggestions.",
-          "items": {
-            "$ref": "SuggestResult"
-          }
-        }
-      },
-      "type": "object",
-      "id": "SuggestResponse",
-      "description": "Response of the suggest API."
-    },
-    "HtmlPropertyOptions": {
-      "properties": {
-        "retrievalImportance": {
-          "description": "Indicates the search quality importance of the tokens within the field when used for retrieval. Can only be set to DEFAULT or NONE.",
-          "$ref": "RetrievalImportance"
-        },
-        "operatorOptions": {
-          "description": "If set, describes how the property should be used as a search operator.",
-          "$ref": "HtmlOperatorOptions"
-        }
-      },
-      "type": "object",
-      "id": "HtmlPropertyOptions",
-      "description": "Options for html properties."
-    },
-    "PollItemsResponse": {
-      "properties": {
-        "items": {
-          "items": {
-            "$ref": "Item"
-          },
-          "description": "Set of items from the queue available for connector to process. These items have the following subset of fields populated: version metadata.hash structured_data.hash content.hash payload status queue",
-          "type": "array"
-        }
-      },
-      "id": "PollItemsResponse",
-      "type": "object"
-    },
-    "CheckAccessResponse": {
-      "properties": {
-        "hasAccess": {
-          "description": "Returns true if principal has access. Returns false otherwise.",
-          "type": "boolean"
-        }
-      },
-      "type": "object",
-      "id": "CheckAccessResponse"
-    },
-    "RepositoryError": {
-      "type": "object",
-      "description": "Errors when the connector is communicating to the source repository.",
-      "properties": {
-        "type": {
-          "description": "Type of error.",
-          "enumDescriptions": [
-            "Unknown error.",
-            "Unknown or unreachable host.",
-            "DNS problem, such as the DNS server is not responding.",
-            "Cannot connect to the repository server.",
-            "Failed authentication due to incorrect credentials.",
-            "Service account is not authorized for the repository.",
-            "Repository server error.",
-            "Quota exceeded.",
-            "Server temporarily unavailable.",
-            "Client-related error, such as an invalid request from the connector to the repository server."
-          ],
-          "type": "string",
-          "enum": [
-            "UNKNOWN",
-            "NETWORK_ERROR",
-            "DNS_ERROR",
-            "CONNECTION_ERROR",
-            "AUTHENTICATION_ERROR",
-            "AUTHORIZATION_ERROR",
-            "SERVER_ERROR",
-            "QUOTA_EXCEEDED",
-            "SERVICE_UNAVAILABLE",
-            "CLIENT_ERROR"
-          ]
-        },
-        "httpStatusCode": {
-          "format": "int32",
-          "description": "Error codes. Matches the definition of HTTP status codes.",
-          "type": "integer"
-        },
-        "errorMessage": {
-          "type": "string",
-          "description": "Message that describes the error. The maximum allowable length of the message is 8192 characters."
-        }
-      },
-      "id": "RepositoryError"
-    },
-    "ResultDebugInfo": {
-      "properties": {
-        "formattedDebugInfo": {
-          "type": "string",
-          "description": "General debug info formatted for display."
-        }
-      },
-      "description": "Debugging information about the result.",
-      "id": "ResultDebugInfo",
-      "type": "object"
-    },
-    "Name": {
-      "properties": {
-        "displayName": {
-          "description": "The read-only display name formatted according to the locale specified by the viewer's account or the Accept-Language HTTP header.",
-          "type": "string"
-        }
-      },
-      "description": "A person's name.",
-      "id": "Name",
-      "type": "object"
-    },
-    "Metaline": {
-      "properties": {
-        "properties": {
-          "items": {
-            "$ref": "DisplayedProperty"
-          },
-          "description": "The list of displayed properties for the metaline. The maximum number of properties is 5.",
-          "type": "array"
-        }
-      },
-      "description": "A metaline is a list of properties that are displayed along with the search result to provide context.",
-      "type": "object",
-      "id": "Metaline"
-    },
-    "FilterOptions": {
-      "id": "FilterOptions",
-      "type": "object",
-      "description": "Filter options to be applied on query.",
-      "properties": {
-        "filter": {
-          "$ref": "Filter",
-          "description": "Generic filter to restrict the search, such as `lang:en`, `site:xyz`."
-        },
-        "objectType": {
-          "type": "string",
-          "description": "If object_type is set, only objects of that type are returned. This should correspond to the name of the object that was registered within the definition of schema. The maximum length is 256 characters."
-        }
-      }
-    },
-    "Schema": {
-      "type": "object",
-      "id": "Schema",
-      "description": "The schema definition for a data source.",
-      "properties": {
-        "objectDefinitions": {
-          "description": "The list of top-level objects for the data source. The maximum number of elements is 10.",
-          "items": {
-            "$ref": "ObjectDefinition"
-          },
-          "type": "array"
-        },
-        "operationIds": {
-          "items": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
             "type": "string"
-          },
-          "description": "IDs of the Long Running Operations (LROs) currently running for this schema. After modifying the schema, wait for operations to complete before indexing additional content.",
-          "type": "array"
-        }
-      }
-    },
-    "PeopleSuggestion": {
-      "type": "object",
-      "description": "This field contains information about the person being suggested.",
-      "properties": {
-        "person": {
-          "$ref": "Person",
-          "description": "Suggested person. All fields of the person object might not be populated."
-        }
-      },
-      "id": "PeopleSuggestion"
-    },
-    "DisplayedProperty": {
-      "type": "object",
-      "properties": {
-        "propertyName": {
-          "description": "The name of the top-level property as defined in a property definition for the object. If the name is not a defined property in the schema, an error is given when attempting to update the schema.",
-          "type": "string"
-        }
-      },
-      "description": "A reference to a top-level property within the object that should be displayed in search results. The values of the chosen properties is displayed in the search results along with the display label for that property if one is specified. If a display label is not specified, only the values is shown.",
-      "id": "DisplayedProperty"
-    },
-    "DataSourceRestriction": {
-      "type": "object",
-      "id": "DataSourceRestriction",
-      "description": "Restriction on Datasource.",
-      "properties": {
-        "source": {
-          "$ref": "Source",
-          "description": "The source of restriction."
         },
-        "filterOptions": {
-          "type": "array",
-          "description": "Filter options restricting the results. If multiple filters are present, they are grouped by object type before joining. Filters with the same object type are joined conjunctively, then the resulting expressions are joined disjunctively. The maximum number of elements is 20. NOTE: Suggest API supports only few filters at the moment: \"objecttype\", \"type\" and \"mimetype\". For now, schema specific filters cannot be used to filter suggestions.",
-          "items": {
-            "$ref": "FilterOptions"
-          }
-        }
-      }
-    },
-    "ItemAcl": {
-      "properties": {
-        "readers": {
-          "items": {
-            "$ref": "Principal"
-          },
-          "description": "List of principals who are allowed to see the item in search results. Optional if inheriting permissions from another item or if the item is not intended to be visible, such as virtual containers. The maximum number of elements is 1000.",
-          "type": "array"
-        },
-        "aclInheritanceType": {
-          "enumDescriptions": [
-            "The default value when this item does not inherit an ACL. Use NOT_APPLICABLE when inheritAclFrom is empty. An item without ACL inheritance can still have ACLs supplied by its own readers and deniedReaders fields.",
-            "During an authorization conflict, the ACL of the child item determines its read access.",
-            "During an authorization conflict, the ACL of the parent item specified in the inheritAclFrom field determines read access.",
-            "Access is granted only if this item and the parent item specified in the inheritAclFrom field both permit read access."
-          ],
-          "enum": [
-            "NOT_APPLICABLE",
-            "CHILD_OVERRIDE",
-            "PARENT_OVERRIDE",
-            "BOTH_PERMIT"
-          ],
-          "description": "Sets the type of access rules to apply when an item inherits its ACL from a parent. This should always be set in tandem with the inheritAclFrom field. Also, when the inheritAclFrom field is set, this field should be set to a valid AclInheritanceType.",
-          "type": "string"
-        },
-        "owners": {
-          "description": "Optional. List of owners for the item. This field has no bearing on document access permissions. It does, however, offer a slight ranking boosts items where the querying user is an owner. The maximum number of elements is 5.",
-          "type": "array",
-          "items": {
-            "$ref": "Principal"
-          }
-        },
-        "deniedReaders": {
-          "items": {
-            "$ref": "Principal"
-          },
-          "description": "List of principals who are explicitly denied access to the item in search results. While principals are denied access by default, use denied readers to handle exceptions and override the list allowed readers. The maximum number of elements is 100.",
-          "type": "array"
-        },
-        "inheritAclFrom": {
-          "type": "string",
-          "description": "Name of the item to inherit the Access Permission List (ACL) from. Note: ACL inheritance *only* provides access permissions to child items and does not define structural relationships, nor does it provide convenient ways to delete large groups of items. Deleting an ACL parent from the index only alters the access permissions of child items that reference the parent in the inheritAclFrom field. The item is still in the index, but may not visible in search results. By contrast, deletion of a container item also deletes all items that reference the container via the containerName field. The maximum length for this field is 1536 characters."
-        }
-      },
-      "type": "object",
-      "id": "ItemAcl",
-      "description": "Access control list information for the item. For more information see [Map ACLs](/cloud-search/docs/guides/acls)."
-    },
-    "DateValues": {
-      "type": "object",
-      "properties": {
-        "values": {
-          "items": {
-            "$ref": "Date"
-          },
-          "type": "array"
-        }
-      },
-      "id": "DateValues",
-      "description": "List of date values."
-    },
-    "StartUploadItemRequest": {
-      "properties": {
-        "connectorName": {
-          "description": "Name of connector making this call. Format: datasources/{source_id}/connectors/{ID}",
-          "type": "string"
-        },
-        "debugOptions": {
-          "$ref": "DebugOptions",
-          "description": "Common debug options."
-        }
-      },
-      "type": "object",
-      "id": "StartUploadItemRequest",
-      "description": "Start upload file request."
-    },
-    "EnumValuePair": {
-      "properties": {
-        "integerValue": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The integer value of the EnumValuePair which must be non-negative. Optional."
-        },
-        "stringValue": {
-          "type": "string",
-          "description": "The string value of the EnumValuePair. The maximum length is 32 characters."
-        }
-      },
-      "type": "object",
-      "description": "The enumeration value pair defines two things: a required string value and an optional integer value. The string value defines the necessary query term required to retrieve that item, such as *p0* for a priority item. The integer value determines the ranking of that string value relative to other enumerated values for the same property. For example, you might associate *p0* with *0* and define another enum pair such as *p1* and *1*. You must use the integer value in combination with ordered ranking to set the ranking of a given value relative to other enumerated values for the same property name. Here, a ranking order of DESCENDING for *priority* properties results in a ranking boost for items indexed with a value of *p0* compared to items indexed with a value of *p1*. Without a specified ranking order, the integer value has no effect on item ranking.",
-      "id": "EnumValuePair"
-    },
-    "ListItemNamesForUnmappedIdentityResponse": {
-      "id": "ListItemNamesForUnmappedIdentityResponse",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "description": "Token to retrieve the next page of results, or empty if there are no more results in the list.",
-          "type": "string"
-        },
-        "itemNames": {
-          "type": "array",
-          "items": {
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
             "type": "string"
-          }
-        }
-      }
-    },
-    "ErrorInfo": {
-      "description": "Error information about the response.",
-      "properties": {
-        "errorMessages": {
-          "type": "array",
-          "items": {
-            "$ref": "ErrorMessage"
-          }
-        }
-      },
-      "id": "ErrorInfo",
-      "type": "object"
-    },
-    "SearchApplicationSessionStats": {
-      "properties": {
-        "date": {
-          "description": "Date for which session stats were calculated. Stats calculated on the next day close to midnight are returned.",
-          "$ref": "Date"
         },
-        "searchSessionsCount": {
-          "type": "string",
-          "format": "int64",
-          "description": "The count of search sessions on the day"
-        }
-      },
-      "id": "SearchApplicationSessionStats",
-      "type": "object"
-    },
-    "SearchItemsByViewUrlResponse": {
-      "id": "SearchItemsByViewUrlResponse",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "Token to retrieve the next page of results, or empty if there are no more results in the list."
-        },
-        "items": {
-          "type": "array",
-          "items": {
-            "$ref": "Item"
-          }
-        }
-      }
-    },
-    "GetCustomerQueryStatsResponse": {
-      "properties": {
-        "stats": {
-          "type": "array",
-          "items": {
-            "$ref": "CustomerQueryStats"
-          }
-        }
-      },
-      "type": "object",
-      "id": "GetCustomerQueryStatsResponse"
-    },
-    "EnumValues": {
-      "id": "EnumValues",
-      "description": "List of enum values.",
-      "type": "object",
-      "properties": {
-        "values": {
-          "description": "The maximum allowable length for string values is 32 characters.",
-          "items": {
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
             "type": "string"
-          },
-          "type": "array"
-        }
-      }
-    },
-    "EmailAddress": {
-      "description": "A person's email address.",
-      "id": "EmailAddress",
-      "type": "object",
-      "properties": {
-        "emailAddress": {
-          "description": "The email address.",
-          "type": "string"
-        }
-      }
-    },
-    "GetSearchApplicationQueryStatsResponse": {
-      "id": "GetSearchApplicationQueryStatsResponse",
-      "properties": {
-        "stats": {
-          "type": "array",
-          "items": {
-            "$ref": "SearchApplicationQueryStats"
-          }
-        }
-      },
-      "type": "object"
-    },
-    "QueryCountByStatus": {
-      "properties": {
-        "statusCode": {
-          "description": "This represents the http status code.",
-          "type": "integer",
-          "format": "int32"
         },
-        "count": {
-          "type": "string",
-          "format": "int64"
-        }
-      },
-      "type": "object",
-      "id": "QueryCountByStatus"
-    },
-    "TimestampValues": {
-      "id": "TimestampValues",
-      "type": "object",
-      "description": "List of timestamp values.",
-      "properties": {
-        "values": {
-          "type": "array",
-          "items": {
-            "format": "google-datetime",
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
             "type": "string"
-          }
-        }
-      }
-    },
-    "IntegerOperatorOptions": {
-      "description": "Used to provide a search operator for integer properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched.",
-      "id": "IntegerOperatorOptions",
-      "type": "object",
-      "properties": {
-        "operatorName": {
-          "type": "string",
-          "description": "Indicates the operator name required in the query in order to isolate the integer property. For example, if operatorName is *priority* and the property's name is *priorityVal*, then queries like *priority:\u003cvalue\u003e* show results only where the value of the property named *priorityVal* matches *\u003cvalue\u003e*. By contrast, a search that uses the same *\u003cvalue\u003e* without an operator returns all items where *\u003cvalue\u003e* matches the value of any String properties or text within the content field for the item. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters."
         },
-        "lessThanOperatorName": {
-          "type": "string",
-          "description": "Indicates the operator name required in the query in order to isolate the integer property using the less-than operator. For example, if lessThanOperatorName is *prioritybelow* and the property's name is *priorityVal*, then queries like *prioritybelow:\u003cvalue\u003e* show results only where the value of the property named *priorityVal* is less than *\u003cvalue\u003e*. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters."
-        },
-        "greaterThanOperatorName": {
-          "description": "Indicates the operator name required in the query in order to isolate the integer property using the greater-than operator. For example, if greaterThanOperatorName is *priorityabove* and the property's name is *priorityVal*, then queries like *priorityabove:\u003cvalue\u003e* show results only where the value of the property named *priorityVal* is greater than *\u003cvalue\u003e*. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.",
-          "type": "string"
-        }
-      }
-    },
-    "DriveFollowUpRestrict": {
-      "id": "DriveFollowUpRestrict",
-      "type": "object",
-      "description": "Drive follow-up search restricts (e.g. \"followup:suggestions\").",
-      "properties": {
-        "type": {
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "enum": [
-            "UNSPECIFIED",
-            "FOLLOWUP_SUGGESTIONS",
-            "FOLLOWUP_ACTION_ITEMS"
-          ]
-        }
-      }
-    },
-    "UpdateDataSourceRequest": {
-      "type": "object",
-      "properties": {
-        "debugOptions": {
-          "$ref": "DebugOptions",
-          "description": "Common debug options."
-        },
-        "source": {
-          "$ref": "DataSource"
-        }
-      },
-      "id": "UpdateDataSourceRequest"
-    },
-    "UnreserveItemsRequest": {
-      "type": "object",
-      "properties": {
-        "queue": {
-          "description": "Name of a queue to unreserve items from.",
-          "type": "string"
-        },
-        "debugOptions": {
-          "description": "Common debug options.",
-          "$ref": "DebugOptions"
-        },
-        "connectorName": {
-          "description": "Name of connector making this call. Format: datasources/{source_id}/connectors/{ID}",
-          "type": "string"
-        }
-      },
-      "id": "UnreserveItemsRequest"
-    },
-    "SearchItemsByViewUrlRequest": {
-      "properties": {
-        "debugOptions": {
-          "description": "Common debug options.",
-          "$ref": "DebugOptions"
-        },
-        "pageToken": {
-          "type": "string",
-          "description": "The next_page_token value returned from a previous request, if any."
-        },
-        "viewUrl": {
-          "description": "Specify the full view URL to find the corresponding item. The maximum length is 2048 characters.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "SearchItemsByViewUrlRequest"
-    },
-    "SortOptions": {
-      "type": "object",
-      "properties": {
-        "sortOrder": {
-          "enum": [
-            "ASCENDING",
-            "DESCENDING"
-          ],
-          "description": "Ascending is the default sort order",
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string"
-        },
-        "operatorName": {
-          "type": "string",
-          "description": "Name of the operator corresponding to the field to sort on. The corresponding property must be marked as sortable."
-        }
-      },
-      "id": "SortOptions"
-    },
-    "UnmappedIdentity": {
-      "type": "object",
-      "id": "UnmappedIdentity",
-      "properties": {
-        "resolutionStatusCode": {
-          "enumDescriptions": [
-            "Input-only value. Used to list all unmapped identities regardless of status.",
-            "The unmapped identity was not found in IDaaS, and needs to be provided by the user.",
-            "The identity source associated with the identity was either not found or deleted.",
-            "IDaaS does not understand the identity source, probably because the schema was modified in a non compatible way.",
-            "The number of users associated with the external identity is too large.",
-            "Internal error."
-          ],
-          "type": "string",
-          "description": "The resolution status for the external identity.",
-          "enum": [
-            "CODE_UNSPECIFIED",
-            "NOT_FOUND",
-            "IDENTITY_SOURCE_NOT_FOUND",
-            "IDENTITY_SOURCE_MISCONFIGURED",
-            "TOO_MANY_MAPPINGS_FOUND",
-            "INTERNAL_ERROR"
-          ]
-        },
-        "externalIdentity": {
-          "$ref": "Principal",
-          "description": "The resource name for an external user."
-        }
-      }
-    },
-    "CompositeFilter": {
-      "id": "CompositeFilter",
-      "properties": {
-        "subFilters": {
-          "items": {
-            "$ref": "Filter"
-          },
-          "description": "Sub filters.",
-          "type": "array"
-        },
-        "logicOperator": {
-          "enumDescriptions": [
-            "Logical operators, which can only be applied to sub filters.",
-            "",
-            "NOT can only be applied on a single sub filter."
-          ],
-          "type": "string",
-          "description": "The logic operator of the sub filter.",
-          "enum": [
-            "AND",
-            "OR",
-            "NOT"
-          ]
-        }
-      },
-      "type": "object"
-    },
-    "ObjectDisplayOptions": {
-      "properties": {
-        "objectDisplayLabel": {
-          "type": "string",
-          "description": "The user friendly label to display in the search result to indicate the type of the item. This is OPTIONAL; if not provided, an object label isn't displayed on the context line of the search results. The maximum length is 64 characters."
-        },
-        "metalines": {
-          "type": "array",
-          "description": "Defines the properties that are displayed in the metalines of the search results. The property values are displayed in the order given here. If a property holds multiple values, all of the values are displayed before the next properties. For this reason, it is a good practice to specify singular properties before repeated properties in this list. All of the properties must set is_returnable to true. The maximum number of metalines is 3.",
-          "items": {
-            "$ref": "Metaline"
-          }
-        }
-      },
-      "type": "object",
-      "description": "The display options for an object.",
-      "id": "ObjectDisplayOptions"
-    },
-    "Snippet": {
-      "properties": {
-        "snippet": {
-          "type": "string",
-          "description": "The snippet of the document. The snippet of the document. May contain escaped HTML character that should be unescaped prior to rendering."
-        },
-        "matchRanges": {
-          "items": {
-            "$ref": "MatchRange"
-          },
-          "description": "The matched ranges in the snippet.",
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "description": "Snippet of the search result, which summarizes the content of the resulting page.",
-      "id": "Snippet"
-    },
-    "DataSourceIndexStats": {
-      "description": "Aggregation of items by status code as of the specified date.",
-      "id": "DataSourceIndexStats",
-      "type": "object",
-      "properties": {
-        "itemCountByStatus": {
-          "type": "array",
-          "description": "Number of items aggregrated by status code.",
-          "items": {
-            "$ref": "ItemCountByStatus"
-          }
-        },
-        "date": {
-          "description": "Date for which index stats were calculated. If the date of request is not the current date then stats calculated on the next day are returned. Stats are calculated close to mid night in this case. If date of request is current date, then real time stats are returned.",
-          "$ref": "Date"
-        }
-      }
-    },
-    "DataSource": {
-      "id": "DataSource",
-      "properties": {
-        "indexingServiceAccounts": {
-          "type": "array",
-          "items": {
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
             "type": "string"
-          },
-          "description": "List of service accounts that have indexing access."
         },
-        "disableServing": {
-          "description": "Disable serving any search or assist results.",
-          "type": "boolean"
-        },
-        "itemsVisibility": {
-          "items": {
-            "$ref": "GSuitePrincipal"
-          },
-          "description": "This field restricts visibility to items at the datasource level. Items within the datasource are restricted to the union of users and groups included in this field. Note that, this does not ensure access to a specific item, as users need to have ACL permissions on the contained items. This ensures a high level access on the entire datasource, and that the individual items are not shared outside this visibility.",
-          "type": "array"
-        },
-        "operationIds": {
-          "type": "array",
-          "items": {
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
             "type": "string"
-          },
-          "description": "IDs of the Long Running Operations (LROs) currently running for this schema."
-        },
-        "displayName": {
-          "description": "Required. Display name of the datasource The maximum length is 300 characters.",
-          "type": "string"
-        },
-        "shortName": {
-          "description": "A short name or alias for the source. This value will be used to match the 'source' operator. For example, if the short name is *\u003cvalue\u003e* then queries like *source:\u003cvalue\u003e* will only return results for this source. The value must be unique across all datasources. The value must only contain alphanumeric characters (a-zA-Z0-9). The value cannot start with 'google' and cannot be one of the following: mail, gmail, docs, drive, groups, sites, calendar, hangouts, gplus, keep, people, teams. Its maximum length is 32 characters.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of the datasource resource. Format: datasources/{source_id}. The name is ignored when creating a datasource."
-        },
-        "disableModifications": {
-          "type": "boolean",
-          "description": "If true, sets the datasource to read-only mode. In read-only mode, the Indexing API rejects any requests to index or delete items in this source. Enabling read-only mode does not stop the processing of previously accepted data."
         }
-      },
-      "type": "object",
-      "description": "Datasource is a logical namespace for items to be indexed. All items must belong to a datasource. This is the prerequisite before items can be indexed into Cloud Search."
     },
-    "PropertyDefinition": {
-      "id": "PropertyDefinition",
-      "description": "The definition of a property within an object.",
-      "properties": {
-        "isReturnable": {
-          "type": "boolean",
-          "description": "Indicates that the property identifies data that should be returned in search results via the Query API. If set to *true*, indicates that Query API users can use matching property fields in results. However, storing fields requires more space allocation and uses more bandwidth for search queries, which impacts performance over large datasets. Set to *true* here only if the field is needed for search results. Cannot be true for properties whose type is an object."
+    "protocol": "rest",
+    "resources": {
+        "debug": {
+            "resources": {
+                "datasources": {
+                    "resources": {
+                        "items": {
+                            "methods": {
+                                "checkAccess": {
+                                    "description": "Checks whether an item is accessible by specified principal. **Note:** This API requires an admin account to execute.",
+                                    "flatPath": "v1/debug/datasources/{datasourcesId}/items/{itemsId}:checkAccess",
+                                    "httpMethod": "POST",
+                                    "id": "cloudsearch.debug.datasources.items.checkAccess",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "debugOptions.enableDebugging": {
+                                            "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
+                                            "location": "query",
+                                            "type": "boolean"
+                                        },
+                                        "name": {
+                                            "description": "Item name, format: datasources/{source_id}/items/{item_id}",
+                                            "location": "path",
+                                            "pattern": "^datasources/[^/]+/items/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/debug/{+name}:checkAccess",
+                                    "request": {
+                                        "$ref": "Principal"
+                                    },
+                                    "response": {
+                                        "$ref": "CheckAccessResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud_search",
+                                        "https://www.googleapis.com/auth/cloud_search.debug"
+                                    ]
+                                },
+                                "searchByViewUrl": {
+                                    "description": "Fetches the item whose viewUrl exactly matches that of the URL provided in the request. **Note:** This API requires an admin account to execute.",
+                                    "flatPath": "v1/debug/datasources/{datasourcesId}/items:searchByViewUrl",
+                                    "httpMethod": "POST",
+                                    "id": "cloudsearch.debug.datasources.items.searchByViewUrl",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Source name, format: datasources/{source_id}",
+                                            "location": "path",
+                                            "pattern": "^datasources/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/debug/{+name}/items:searchByViewUrl",
+                                    "request": {
+                                        "$ref": "SearchItemsByViewUrlRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "SearchItemsByViewUrlResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud_search",
+                                        "https://www.googleapis.com/auth/cloud_search.debug"
+                                    ]
+                                }
+                            },
+                            "resources": {
+                                "unmappedids": {
+                                    "methods": {
+                                        "list": {
+                                            "description": "List all unmapped identities for a specific item. **Note:** This API requires an admin account to execute.",
+                                            "flatPath": "v1/debug/datasources/{datasourcesId}/items/{itemsId}/unmappedids",
+                                            "httpMethod": "GET",
+                                            "id": "cloudsearch.debug.datasources.items.unmappedids.list",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "debugOptions.enableDebugging": {
+                                                    "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
+                                                    "location": "query",
+                                                    "type": "boolean"
+                                                },
+                                                "pageSize": {
+                                                    "description": "Maximum number of items to fetch in a request. Defaults to 100.",
+                                                    "format": "int32",
+                                                    "location": "query",
+                                                    "type": "integer"
+                                                },
+                                                "pageToken": {
+                                                    "description": "The next_page_token value returned from a previous List request, if any.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "parent": {
+                                                    "description": "The name of the item, in the following format: datasources/{source_id}/items/{ID}",
+                                                    "location": "path",
+                                                    "pattern": "^datasources/[^/]+/items/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1/debug/{+parent}/unmappedids",
+                                            "response": {
+                                                "$ref": "ListUnmappedIdentitiesResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud_search",
+                                                "https://www.googleapis.com/auth/cloud_search.debug"
+                                            ]
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                },
+                "identitysources": {
+                    "resources": {
+                        "items": {
+                            "methods": {
+                                "listForunmappedidentity": {
+                                    "description": "Lists names of items associated with an unmapped identity. **Note:** This API requires an admin account to execute.",
+                                    "flatPath": "v1/debug/identitysources/{identitysourcesId}/items:forunmappedidentity",
+                                    "httpMethod": "GET",
+                                    "id": "cloudsearch.debug.identitysources.items.listForunmappedidentity",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "debugOptions.enableDebugging": {
+                                            "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
+                                            "location": "query",
+                                            "type": "boolean"
+                                        },
+                                        "groupResourceName": {
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "Maximum number of items to fetch in a request. Defaults to 100.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "The next_page_token value returned from a previous List request, if any.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "The name of the identity source, in the following format: identitysources/{source_id}}",
+                                            "location": "path",
+                                            "pattern": "^identitysources/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "userResourceName": {
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/debug/{+parent}/items:forunmappedidentity",
+                                    "response": {
+                                        "$ref": "ListItemNamesForUnmappedIdentityResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud_search",
+                                        "https://www.googleapis.com/auth/cloud_search.debug"
+                                    ]
+                                }
+                            }
+                        },
+                        "unmappedids": {
+                            "methods": {
+                                "list": {
+                                    "description": "Lists unmapped user identities for an identity source. **Note:** This API requires an admin account to execute.",
+                                    "flatPath": "v1/debug/identitysources/{identitysourcesId}/unmappedids",
+                                    "httpMethod": "GET",
+                                    "id": "cloudsearch.debug.identitysources.unmappedids.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "debugOptions.enableDebugging": {
+                                            "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
+                                            "location": "query",
+                                            "type": "boolean"
+                                        },
+                                        "pageSize": {
+                                            "description": "Maximum number of items to fetch in a request. Defaults to 100.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "The next_page_token value returned from a previous List request, if any.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "The name of the identity source, in the following format: identitysources/{source_id}",
+                                            "location": "path",
+                                            "pattern": "^identitysources/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "resolutionStatusCode": {
+                                            "description": "Limit users selection to this status.",
+                                            "enum": [
+                                                "CODE_UNSPECIFIED",
+                                                "NOT_FOUND",
+                                                "IDENTITY_SOURCE_NOT_FOUND",
+                                                "IDENTITY_SOURCE_MISCONFIGURED",
+                                                "TOO_MANY_MAPPINGS_FOUND",
+                                                "INTERNAL_ERROR"
+                                            ],
+                                            "enumDescriptions": [
+                                                "Input-only value. Used to list all unmapped identities regardless of status.",
+                                                "The unmapped identity was not found in IDaaS, and needs to be provided by the user.",
+                                                "The identity source associated with the identity was either not found or deleted.",
+                                                "IDaaS does not understand the identity source, probably because the schema was modified in a non compatible way.",
+                                                "The number of users associated with the external identity is too large.",
+                                                "Internal error."
+                                            ],
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/debug/{+parent}/unmappedids",
+                                    "response": {
+                                        "$ref": "ListUnmappedIdentitiesResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud_search",
+                                        "https://www.googleapis.com/auth/cloud_search.debug"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                }
+            }
         },
-        "name": {
-          "type": "string",
-          "description": "The name of the property. Item indexing requests sent to the Indexing API should set the property name equal to this value. For example, if name is *subject_line*, then indexing requests for document items with subject fields should set the name for that field equal to *subject_line*. Use the name as the identifier for the object property. Once registered as a property for an object, you cannot re-use this name for another property within that object. The name must start with a letter and can only contain letters (A-Z, a-z) or numbers (0-9). The maximum length is 256 characters."
+        "indexing": {
+            "resources": {
+                "datasources": {
+                    "methods": {
+                        "deleteSchema": {
+                            "description": "Deletes the schema of a data source. **Note:** This API requires an admin or service account to execute.",
+                            "flatPath": "v1/indexing/datasources/{datasourcesId}/schema",
+                            "httpMethod": "DELETE",
+                            "id": "cloudsearch.indexing.datasources.deleteSchema",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "debugOptions.enableDebugging": {
+                                    "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "name": {
+                                    "description": "Name of the data source to delete Schema. Format: datasources/{source_id}",
+                                    "location": "path",
+                                    "pattern": "^datasources/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/indexing/{+name}/schema",
+                            "response": {
+                                "$ref": "Operation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud_search",
+                                "https://www.googleapis.com/auth/cloud_search.settings",
+                                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+                            ]
+                        },
+                        "getSchema": {
+                            "description": "Gets the schema of a data source. **Note:** This API requires an admin or service account to execute.",
+                            "flatPath": "v1/indexing/datasources/{datasourcesId}/schema",
+                            "httpMethod": "GET",
+                            "id": "cloudsearch.indexing.datasources.getSchema",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "debugOptions.enableDebugging": {
+                                    "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "name": {
+                                    "description": "Name of the data source to get Schema. Format: datasources/{source_id}",
+                                    "location": "path",
+                                    "pattern": "^datasources/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/indexing/{+name}/schema",
+                            "response": {
+                                "$ref": "Schema"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud_search",
+                                "https://www.googleapis.com/auth/cloud_search.settings",
+                                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+                            ]
+                        },
+                        "updateSchema": {
+                            "description": "Updates the schema of a data source. This method does not perform incremental updates to the schema. Instead, this method updates the schema by overwriting the entire schema. **Note:** This API requires an admin or service account to execute.",
+                            "flatPath": "v1/indexing/datasources/{datasourcesId}/schema",
+                            "httpMethod": "PUT",
+                            "id": "cloudsearch.indexing.datasources.updateSchema",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Name of the data source to update Schema. Format: datasources/{source_id}",
+                                    "location": "path",
+                                    "pattern": "^datasources/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/indexing/{+name}/schema",
+                            "request": {
+                                "$ref": "UpdateSchemaRequest"
+                            },
+                            "response": {
+                                "$ref": "Operation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud_search",
+                                "https://www.googleapis.com/auth/cloud_search.settings",
+                                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "items": {
+                            "methods": {
+                                "delete": {
+                                    "description": "Deletes Item resource for the specified resource name. This API requires an admin or service account to execute. The service account used is the one whitelisted in the corresponding data source.",
+                                    "flatPath": "v1/indexing/datasources/{datasourcesId}/items/{itemsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "cloudsearch.indexing.datasources.items.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "connectorName": {
+                                            "description": "Name of connector making this call. Format: datasources/{source_id}/connectors/{ID}",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "debugOptions.enableDebugging": {
+                                            "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
+                                            "location": "query",
+                                            "type": "boolean"
+                                        },
+                                        "mode": {
+                                            "description": "Required. The RequestMode for this request.",
+                                            "enum": [
+                                                "UNSPECIFIED",
+                                                "SYNCHRONOUS",
+                                                "ASYNCHRONOUS"
+                                            ],
+                                            "enumDescriptions": [
+                                                "Priority is not specified in the update request. Leaving priority unspecified results in an update failure.",
+                                                "For real-time updates.",
+                                                "For changes that are executed after the response is sent back to the caller."
+                                            ],
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "name": {
+                                            "description": "Required. Name of the item to delete. Format: datasources/{source_id}/items/{item_id}",
+                                            "location": "path",
+                                            "pattern": "^datasources/[^/]+/items/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "version": {
+                                            "description": "Required. The incremented version of the item to delete from the index. The indexing system stores the version from the datasource as a byte string and compares the Item version in the index to the version of the queued Item using lexical ordering. Cloud Search Indexing won't delete any queued item with a version value that is less than or equal to the version of the currently indexed item. The maximum length for this field is 1024 bytes.",
+                                            "format": "byte",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/indexing/{+name}",
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud_search",
+                                        "https://www.googleapis.com/auth/cloud_search.indexing"
+                                    ]
+                                },
+                                "deleteQueueItems": {
+                                    "description": "Deletes all items in a queue. This method is useful for deleting stale items. This API requires an admin or service account to execute. The service account used is the one whitelisted in the corresponding data source.",
+                                    "flatPath": "v1/indexing/datasources/{datasourcesId}/items:deleteQueueItems",
+                                    "httpMethod": "POST",
+                                    "id": "cloudsearch.indexing.datasources.items.deleteQueueItems",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Name of the Data Source to delete items in a queue. Format: datasources/{source_id}",
+                                            "location": "path",
+                                            "pattern": "^datasources/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/indexing/{+name}/items:deleteQueueItems",
+                                    "request": {
+                                        "$ref": "DeleteQueueItemsRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud_search",
+                                        "https://www.googleapis.com/auth/cloud_search.indexing"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets Item resource by item name. This API requires an admin or service account to execute. The service account used is the one whitelisted in the corresponding data source.",
+                                    "flatPath": "v1/indexing/datasources/{datasourcesId}/items/{itemsId}",
+                                    "httpMethod": "GET",
+                                    "id": "cloudsearch.indexing.datasources.items.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "connectorName": {
+                                            "description": "Name of connector making this call. Format: datasources/{source_id}/connectors/{ID}",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "debugOptions.enableDebugging": {
+                                            "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
+                                            "location": "query",
+                                            "type": "boolean"
+                                        },
+                                        "name": {
+                                            "description": "Name of the item to get info. Format: datasources/{source_id}/items/{item_id}",
+                                            "location": "path",
+                                            "pattern": "^datasources/[^/]+/items/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/indexing/{+name}",
+                                    "response": {
+                                        "$ref": "Item"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud_search",
+                                        "https://www.googleapis.com/auth/cloud_search.indexing"
+                                    ]
+                                },
+                                "index": {
+                                    "description": "Updates Item ACL, metadata, and content. It will insert the Item if it does not exist. This method does not support partial updates. Fields with no provided values are cleared out in the Cloud Search index. This API requires an admin or service account to execute. The service account used is the one whitelisted in the corresponding data source.",
+                                    "flatPath": "v1/indexing/datasources/{datasourcesId}/items/{itemsId}:index",
+                                    "httpMethod": "POST",
+                                    "id": "cloudsearch.indexing.datasources.items.index",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Name of the Item. Format: datasources/{source_id}/items/{item_id} This is a required field. The maximum length is 1536 characters.",
+                                            "location": "path",
+                                            "pattern": "^datasources/[^/]+/items/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/indexing/{+name}:index",
+                                    "request": {
+                                        "$ref": "IndexItemRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud_search",
+                                        "https://www.googleapis.com/auth/cloud_search.indexing"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists all or a subset of Item resources. This API requires an admin or service account to execute. The service account used is the one whitelisted in the corresponding data source.",
+                                    "flatPath": "v1/indexing/datasources/{datasourcesId}/items",
+                                    "httpMethod": "GET",
+                                    "id": "cloudsearch.indexing.datasources.items.list",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "brief": {
+                                            "description": "When set to true, the indexing system only populates the following fields: name, version, queue. metadata.hash, metadata.title, metadata.sourceRepositoryURL, metadata.objectType, metadata.createTime, metadata.updateTime, metadata.contentLanguage, metadata.mimeType, structured_data.hash, content.hash, itemType, itemStatus.code, itemStatus.processingError.code, itemStatus.repositoryError.type, If this value is false, then all the fields are populated in Item.",
+                                            "location": "query",
+                                            "type": "boolean"
+                                        },
+                                        "connectorName": {
+                                            "description": "Name of connector making this call. Format: datasources/{source_id}/connectors/{ID}",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "debugOptions.enableDebugging": {
+                                            "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
+                                            "location": "query",
+                                            "type": "boolean"
+                                        },
+                                        "name": {
+                                            "description": "Name of the Data Source to list Items. Format: datasources/{source_id}",
+                                            "location": "path",
+                                            "pattern": "^datasources/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "Maximum number of items to fetch in a request. The max value is 1000 when brief is true. The max value is 10 if brief is false. The default value is 10",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "The next_page_token value returned from a previous List request, if any.",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/indexing/{+name}/items",
+                                    "response": {
+                                        "$ref": "ListItemsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud_search",
+                                        "https://www.googleapis.com/auth/cloud_search.indexing"
+                                    ]
+                                },
+                                "poll": {
+                                    "description": "Polls for unreserved items from the indexing queue and marks a set as reserved, starting with items that have the oldest timestamp from the highest priority ItemStatus. The priority order is as follows: ERROR MODIFIED NEW_ITEM ACCEPTED Reserving items ensures that polling from other threads cannot create overlapping sets. After handling the reserved items, the client should put items back into the unreserved state, either by calling index, or by calling push with the type REQUEUE. Items automatically become available (unreserved) after 4 hours even if no update or push method is called. This API requires an admin or service account to execute. The service account used is the one whitelisted in the corresponding data source.",
+                                    "flatPath": "v1/indexing/datasources/{datasourcesId}/items:poll",
+                                    "httpMethod": "POST",
+                                    "id": "cloudsearch.indexing.datasources.items.poll",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Name of the Data Source to poll items. Format: datasources/{source_id}",
+                                            "location": "path",
+                                            "pattern": "^datasources/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/indexing/{+name}/items:poll",
+                                    "request": {
+                                        "$ref": "PollItemsRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "PollItemsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud_search",
+                                        "https://www.googleapis.com/auth/cloud_search.indexing"
+                                    ]
+                                },
+                                "push": {
+                                    "description": "Pushes an item onto a queue for later polling and updating. This API requires an admin or service account to execute. The service account used is the one whitelisted in the corresponding data source.",
+                                    "flatPath": "v1/indexing/datasources/{datasourcesId}/items/{itemsId}:push",
+                                    "httpMethod": "POST",
+                                    "id": "cloudsearch.indexing.datasources.items.push",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Name of the item to push into the indexing queue. Format: datasources/{source_id}/items/{ID} This is a required field. The maximum length is 1536 characters.",
+                                            "location": "path",
+                                            "pattern": "^datasources/[^/]+/items/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/indexing/{+name}:push",
+                                    "request": {
+                                        "$ref": "PushItemRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Item"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud_search",
+                                        "https://www.googleapis.com/auth/cloud_search.indexing"
+                                    ]
+                                },
+                                "unreserve": {
+                                    "description": "Unreserves all items from a queue, making them all eligible to be polled. This method is useful for resetting the indexing queue after a connector has been restarted. This API requires an admin or service account to execute. The service account used is the one whitelisted in the corresponding data source.",
+                                    "flatPath": "v1/indexing/datasources/{datasourcesId}/items:unreserve",
+                                    "httpMethod": "POST",
+                                    "id": "cloudsearch.indexing.datasources.items.unreserve",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Name of the Data Source to unreserve all items. Format: datasources/{source_id}",
+                                            "location": "path",
+                                            "pattern": "^datasources/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/indexing/{+name}/items:unreserve",
+                                    "request": {
+                                        "$ref": "UnreserveItemsRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud_search",
+                                        "https://www.googleapis.com/auth/cloud_search.indexing"
+                                    ]
+                                },
+                                "upload": {
+                                    "description": "Creates an upload session for uploading item content. For items smaller than 100 KB, it's easier to embed the content inline within an index request. This API requires an admin or service account to execute. The service account used is the one whitelisted in the corresponding data source.",
+                                    "flatPath": "v1/indexing/datasources/{datasourcesId}/items/{itemsId}:upload",
+                                    "httpMethod": "POST",
+                                    "id": "cloudsearch.indexing.datasources.items.upload",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Name of the Item to start a resumable upload. Format: datasources/{source_id}/items/{item_id}. The maximum length is 1536 bytes.",
+                                            "location": "path",
+                                            "pattern": "^datasources/[^/]+/items/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/indexing/{+name}:upload",
+                                    "request": {
+                                        "$ref": "StartUploadItemRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "UploadItemRef"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud_search",
+                                        "https://www.googleapis.com/auth/cloud_search.indexing"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                }
+            }
         },
-        "displayOptions": {
-          "description": "Options that determine how the property is displayed in the Cloud Search results page if it is specified to be displayed in the object's display options .",
-          "$ref": "PropertyDisplayOptions"
-        },
-        "isSuggestable": {
-          "description": "Indicates that the property can be used for generating query suggestions.",
-          "type": "boolean"
-        },
-        "timestampPropertyOptions": {
-          "$ref": "TimestampPropertyOptions"
-        },
-        "htmlPropertyOptions": {
-          "$ref": "HtmlPropertyOptions"
-        },
-        "isFacetable": {
-          "description": "Indicates that the property can be used for generating facets. Cannot be true for properties whose type is object. IsReturnable must be true to set this option. Only supported for Boolean, Enum, and Text properties.",
-          "type": "boolean"
-        },
-        "isSortable": {
-          "type": "boolean",
-          "description": "Indicates that the property can be used for sorting. Cannot be true for properties that are repeatable. Cannot be true for properties whose type is object or user identifier. IsReturnable must be true to set this option. Only supported for Boolean, Date, Double, Integer, and Timestamp properties."
-        },
-        "datePropertyOptions": {
-          "$ref": "DatePropertyOptions"
-        },
-        "textPropertyOptions": {
-          "$ref": "TextPropertyOptions"
-        },
-        "isWildcardSearchable": {
-          "description": "Indicates that users can perform wildcard search for this property. Only supported for Text properties. IsReturnable must be true to set this option. In a given datasource maximum of 5 properties can be marked as is_wildcard_searchable.",
-          "type": "boolean"
-        },
-        "doublePropertyOptions": {
-          "$ref": "DoublePropertyOptions"
-        },
-        "booleanPropertyOptions": {
-          "$ref": "BooleanPropertyOptions"
-        },
-        "isRepeatable": {
-          "type": "boolean",
-          "description": "Indicates that multiple values are allowed for the property. For example, a document only has one description but can have multiple comments. Cannot be true for properties whose type is a boolean. If set to false, properties that contain more than one value cause the indexing request for that item to be rejected."
-        },
-        "enumPropertyOptions": {
-          "$ref": "EnumPropertyOptions"
-        },
-        "objectPropertyOptions": {
-          "$ref": "ObjectPropertyOptions"
-        },
-        "integerPropertyOptions": {
-          "$ref": "IntegerPropertyOptions"
-        }
-      },
-      "type": "object"
-    },
-    "Item": {
-      "id": "Item",
-      "description": "Represents a single object that is an item in the search index, such as a file, folder, or a database record.",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "Name of the Item. Format: datasources/{source_id}/items/{item_id} This is a required field. The maximum length is 1536 characters.",
-          "type": "string"
-        },
-        "itemType": {
-          "description": "Type for this item.",
-          "enumDescriptions": [
-            "",
-            "An item that is indexed for the only purpose of serving information. These items cannot be referred in containerName or inheritAclFrom fields.",
-            "An item that gets indexed and whose purpose is to supply other items with ACLs and/or contain other items.",
-            "An item that does not get indexed, but otherwise has the same purpose as CONTAINER_ITEM."
-          ],
-          "enum": [
-            "UNSPECIFIED",
-            "CONTENT_ITEM",
-            "CONTAINER_ITEM",
-            "VIRTUAL_CONTAINER_ITEM"
-          ],
-          "type": "string"
-        },
-        "structuredData": {
-          "$ref": "ItemStructuredData",
-          "description": "The structured data for the item that should conform to a registered object definition in the schema for the data source."
-        },
-        "version": {
-          "format": "byte",
-          "description": "Required. The indexing system stores the version from the datasource as a byte string and compares the Item version in the index to the version of the queued Item using lexical ordering. Cloud Search Indexing won't index or delete any queued item with a version value that is less than or equal to the version of the currently indexed item. The maximum length for this field is 1024 bytes.",
-          "type": "string"
-        },
-        "metadata": {
-          "description": "Metadata information.",
-          "$ref": "ItemMetadata"
-        },
-        "payload": {
-          "format": "byte",
-          "description": "Additional state connector can store for this item. The maximum length is 10000 bytes.",
-          "type": "string"
-        },
-        "status": {
-          "$ref": "ItemStatus",
-          "description": "Status of the item. Output only field."
-        },
-        "acl": {
-          "$ref": "ItemAcl",
-          "description": "Access control list for this item."
-        },
-        "queue": {
-          "description": "Queue this item belongs to. The maximum length is 100 characters.",
-          "type": "string"
-        },
-        "content": {
-          "$ref": "ItemContent",
-          "description": "Item content to be indexed and made text searchable."
-        }
-      }
-    },
-    "ItemStatus": {
-      "description": "This contains item's status and any errors.",
-      "properties": {
-        "repositoryErrors": {
-          "items": {
-            "$ref": "RepositoryError"
-          },
-          "type": "array",
-          "description": "Repository error reported by connector."
-        },
-        "processingErrors": {
-          "description": "Error details in case the item is in ERROR state.",
-          "items": {
-            "$ref": "ProcessingError"
-          },
-          "type": "array"
-        },
-        "code": {
-          "type": "string",
-          "description": "Status code.",
-          "enum": [
-            "CODE_UNSPECIFIED",
-            "ERROR",
-            "MODIFIED",
-            "NEW_ITEM",
-            "ACCEPTED"
-          ],
-          "enumDescriptions": [
-            "Input-only value. Used with Items.list to list all items in the queue, regardless of status.",
-            "Error encountered by Cloud Search while processing this item. Details of the error are in repositoryError.",
-            "Item has been modified in the repository, and is out of date with the version previously accepted into Cloud Search.",
-            "Item is known to exist in the repository, but is not yet accepted by Cloud Search. An item can be in this state when Items.push has been called for an item of this name that did not exist previously.",
-            "API has accepted the up-to-date data of this item."
-          ]
-        }
-      },
-      "type": "object",
-      "id": "ItemStatus"
-    },
-    "FreshnessOptions": {
-      "description": "Indicates which freshness property to use when adjusting search ranking for an item. Fresher, more recent dates indicate higher quality. Use the freshness option property that best works with your data. For fileshare documents, last modified time is most relevant. For calendar event data, the time when the event occurs is a more relevant freshness indicator. In this way, calendar events that occur closer to the time of the search query are considered higher quality and ranked accordingly.",
-      "id": "FreshnessOptions",
-      "type": "object",
-      "properties": {
-        "freshnessDuration": {
-          "format": "google-duration",
-          "type": "string",
-          "description": "The duration after which an object should be considered stale. The default value is 180 days (in seconds)."
-        },
-        "freshnessProperty": {
-          "description": "This property indicates the freshness level of the object in the index. If set, this property must be a top-level property within the property definitions and it must be a timestamp type or date type. Otherwise, the Indexing API uses updateTime as the freshness indicator. The maximum length is 256 characters. When a property is used to calculate freshness, the value defaults to 2 years from the current time.",
-          "type": "string"
-        }
-      }
-    },
-    "SearchRequest": {
-      "id": "SearchRequest",
-      "properties": {
-        "query": {
-          "description": "The raw query string. See supported search operators in the [Cloud search Cheat Sheet](https://support.google.com/a/users/answer/9299929)",
-          "type": "string"
-        },
-        "sortOptions": {
-          "$ref": "SortOptions",
-          "description": "The options for sorting the search results"
-        },
-        "requestOptions": {
-          "$ref": "RequestOptions",
-          "description": "Request options, such as the search application and user timezone."
-        },
-        "start": {
-          "description": "Starting index of the results.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "queryInterpretationOptions": {
-          "description": "Options to interpret the user query.",
-          "$ref": "QueryInterpretationOptions"
-        },
-        "pageSize": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Maximum number of search results to return in one page. Valid values are between 1 and 100, inclusive. Default value is 10. Minimum value is 50 when results beyond 2000 are requested."
-        },
-        "dataSourceRestrictions": {
-          "items": {
-            "$ref": "DataSourceRestriction"
-          },
-          "type": "array",
-          "description": "The sources to use for querying. If not specified, all data sources from the current search application are used."
-        },
-        "facetOptions": {
-          "items": {
-            "$ref": "FacetOptions"
-          },
-          "type": "array"
-        }
-      },
-      "description": "The search API request.",
-      "type": "object"
-    },
-    "FacetResult": {
-      "type": "object",
-      "description": "Source specific facet response",
-      "id": "FacetResult",
-      "properties": {
-        "operatorName": {
-          "description": "Name of the operator chosen for faceting. @see cloudsearch.SchemaPropertyOptions",
-          "type": "string"
-        },
-        "sourceName": {
-          "type": "string",
-          "description": "Source name for which facet results are returned. Will not be empty."
-        },
-        "buckets": {
-          "type": "array",
-          "items": {
-            "$ref": "FacetBucket"
-          },
-          "description": "FacetBuckets for values in response containing at least a single result."
-        },
-        "objectType": {
-          "description": "Object type for which facet results are returned. Can be empty.",
-          "type": "string"
-        }
-      }
-    },
-    "SuggestResult": {
-      "type": "object",
-      "id": "SuggestResult",
-      "description": "One suggestion result.",
-      "properties": {
-        "querySuggestion": {
-          "$ref": "QuerySuggestion",
-          "description": "This field will be present if the suggested query is a word/phrase completion."
-        },
-        "suggestedQuery": {
-          "description": "The suggested query that will be used for search, when the user clicks on the suggestion",
-          "type": "string"
-        },
-        "peopleSuggestion": {
-          "description": "This is present when the suggestion indicates a person. It contains more information about the person - like their email ID, name etc.",
-          "$ref": "PeopleSuggestion"
-        },
-        "source": {
-          "$ref": "Source",
-          "description": "The source of the suggestion."
-        }
-      }
-    },
-    "SourceCrowdingConfig": {
-      "type": "object",
-      "properties": {
-        "numSuggestions": {
-          "type": "integer",
-          "description": "Maximum number of suggestions allowed from a source. No limits will be set on results if this value is less than or equal to 0.",
-          "format": "int32"
-        },
-        "numResults": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Maximum number of results allowed from a source. No limits will be set on results if this value is less than or equal to 0."
-        }
-      },
-      "description": "Set search results crowding limits. Crowding is a situation in which multiple results from the same source or host \"crowd out\" other results, diminishing the quality of search for users. To foster better search quality and source diversity in search results, you can set a condition to reduce repetitive results by source.",
-      "id": "SourceCrowdingConfig"
-    },
-    "SearchResponse": {
-      "id": "SearchResponse",
-      "type": "object",
-      "properties": {
-        "debugInfo": {
-          "description": "Debugging information about the response.",
-          "$ref": "ResponseDebugInfo"
-        },
-        "spellResults": {
-          "description": "Suggested spelling for the query.",
-          "type": "array",
-          "items": {
-            "$ref": "SpellResult"
-          }
-        },
-        "structuredResults": {
-          "type": "array",
-          "items": {
-            "$ref": "StructuredResult"
-          },
-          "description": "Structured results for the user query. These results are not counted against the page_size."
-        },
-        "hasMoreResults": {
-          "description": "Whether there are more search results matching the query.",
-          "type": "boolean"
-        },
-        "resultCounts": {
-          "$ref": "ResultCounts",
-          "description": "Expanded result count information."
-        },
-        "facetResults": {
-          "items": {
-            "$ref": "FacetResult"
-          },
-          "description": "Repeated facet results.",
-          "type": "array"
-        },
-        "resultCountExact": {
-          "type": "string",
-          "format": "int64",
-          "description": "The exact result count for this query."
-        },
-        "errorInfo": {
-          "description": "Error information about the response.",
-          "$ref": "ErrorInfo"
-        },
-        "resultCountEstimate": {
-          "type": "string",
-          "description": "The estimated result count for this query.",
-          "format": "int64"
-        },
-        "results": {
-          "type": "array",
-          "description": "Results from a search query.",
-          "items": {
-            "$ref": "SearchResult"
-          }
-        },
-        "queryInterpretation": {
-          "$ref": "QueryInterpretation",
-          "description": "Query interpretation result for user query. Empty if query interpretation is disabled."
-        }
-      },
-      "description": "The search API response."
-    },
-    "EnumOperatorOptions": {
-      "properties": {
-        "operatorName": {
-          "type": "string",
-          "description": "Indicates the operator name required in the query in order to isolate the enum property. For example, if operatorName is *priority* and the property's name is *priorityVal*, then queries like *priority:\u003cvalue\u003e* show results only where the value of the property named *priorityVal* matches *\u003cvalue\u003e*. By contrast, a search that uses the same *\u003cvalue\u003e* without an operator returns all items where *\u003cvalue\u003e* matches the value of any String properties or text within the content field for the item. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters."
-        }
-      },
-      "type": "object",
-      "id": "EnumOperatorOptions",
-      "description": "Used to provide a search operator for enum properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched. For example, if you provide no operator for a *priority* enum property with possible values *p0* and *p1*, a query that contains the term *p0* returns items that have *p0* as the value of the *priority* property, as well as any items that contain the string *p0* in other fields. If you provide an operator name for the enum, such as *priority*, then search users can use that operator to refine results to only items that have *p0* as this property's value, with the query *priority:p0*."
-    },
-    "QuerySource": {
-      "description": "List of sources that the user can search using the query API.",
-      "properties": {
-        "source": {
-          "description": "Name of the source",
-          "$ref": "Source"
-        },
-        "shortName": {
-          "type": "string",
-          "description": "A short name or alias for the source. This value can be used with the 'source' operator."
-        },
-        "operators": {
-          "items": {
-            "$ref": "QueryOperator"
-          },
-          "type": "array",
-          "description": "List of all operators applicable for this source."
-        },
-        "displayName": {
-          "description": "Display name of the data source.",
-          "type": "string"
-        }
-      },
-      "id": "QuerySource",
-      "type": "object"
-    },
-    "RetrievalImportance": {
-      "id": "RetrievalImportance",
-      "properties": {
-        "importance": {
-          "description": "Indicates the ranking importance given to property when it is matched during retrieval. Once set, the token importance of a property cannot be changed.",
-          "enumDescriptions": [
-            "Treat the match like a body text match.",
-            "Treat the match like a match against title of the item.",
-            "Treat the match with higher importance than body text.",
-            "Treat the match with lower importance than body text.",
-            "Do not match against this field during retrieval. The property can still be used for operator matching, faceting, and suggest if desired."
-          ],
-          "type": "string",
-          "enum": [
-            "DEFAULT",
-            "HIGHEST",
-            "HIGH",
-            "LOW",
-            "NONE"
-          ]
-        }
-      },
-      "type": "object"
-    },
-    "QueryOperator": {
-      "properties": {
-        "isSuggestable": {
-          "type": "boolean",
-          "description": "Can get suggestions for this field."
-        },
-        "isSortable": {
-          "description": "Can this operator be used to sort results.",
-          "type": "boolean"
-        },
-        "isReturnable": {
-          "description": "Will the property associated with this facet be returned as part of search results.",
-          "type": "boolean"
-        },
-        "lessThanOperatorName": {
-          "type": "string",
-          "description": "Indicates the operator name that can be used to isolate the property using the less-than operator."
-        },
-        "greaterThanOperatorName": {
-          "description": "Indicates the operator name that can be used to isolate the property using the greater-than operator.",
-          "type": "string"
-        },
-        "isFacetable": {
-          "description": "Can this operator be used to get facets.",
-          "type": "boolean"
-        },
-        "isRepeatable": {
-          "type": "boolean",
-          "description": "Indicates if multiple values can be set for this property."
-        },
-        "type": {
-          "type": "string",
-          "enum": [
-            "UNKNOWN",
-            "INTEGER",
-            "DOUBLE",
-            "TIMESTAMP",
-            "BOOLEAN",
-            "ENUM",
-            "DATE",
-            "TEXT",
-            "HTML"
-          ],
-          "description": "Type of the operator.",
-          "enumDescriptions": [
-            "Invalid value.",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "operatorName": {
-          "type": "string",
-          "description": "The name of the operator."
-        },
-        "objectType": {
-          "description": "Name of the object corresponding to the operator. This field is only filled for schema-specific operators, and is unset for common operators.",
-          "type": "string"
-        },
-        "enumValues": {
-          "description": "Potential list of values for the opeatror field. This field is only filled when we can safely enumerate all the possible values of this operator.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "displayName": {
-          "description": "Display name of the operator",
-          "type": "string"
-        }
-      },
-      "description": "The definition of a operator that can be used in a Search/Suggest request.",
-      "type": "object",
-      "id": "QueryOperator"
-    },
-    "ObjectPropertyOptions": {
-      "properties": {
-        "subobjectProperties": {
-          "description": "The properties of the sub-object. These properties represent a nested object. For example, if this property represents a postal address, the subobjectProperties might be named *street*, *city*, and *state*. The maximum number of elements is 1000.",
-          "items": {
-            "$ref": "PropertyDefinition"
-          },
-          "type": "array"
-        }
-      },
-      "description": "Options for object properties.",
-      "id": "ObjectPropertyOptions",
-      "type": "object"
-    },
-    "TextOperatorOptions": {
-      "id": "TextOperatorOptions",
-      "description": "Used to provide a search operator for text properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched.",
-      "type": "object",
-      "properties": {
-        "operatorName": {
-          "description": "Indicates the operator name required in the query in order to isolate the text property. For example, if operatorName is *subject* and the property's name is *subjectLine*, then queries like *subject:\u003cvalue\u003e* show results only where the value of the property named *subjectLine* matches *\u003cvalue\u003e*. By contrast, a search that uses the same *\u003cvalue\u003e* without an operator returns all items where *\u003cvalue\u003e* matches the value of any text properties or text within the content field for the item. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.",
-          "type": "string"
-        },
-        "exactMatchWithOperator": {
-          "description": "If true, the text value is tokenized as one atomic value in operator searches and facet matches. For example, if the operator name is \"genre\" and the value is \"science-fiction\" the query restrictions \"genre:science\" and \"genre:fiction\" doesn't match the item; \"genre:science-fiction\" does. Value matching is case-sensitive and does not remove special characters. If false, the text is tokenized. For example, if the value is \"science-fiction\" the queries \"genre:science\" and \"genre:fiction\" matches the item.",
-          "type": "boolean"
-        }
-      }
-    },
-    "DriveMimeTypeRestrict": {
-      "id": "DriveMimeTypeRestrict",
-      "description": "Drive mime-type search restricts (e.g. \"type:pdf\").",
-      "properties": {
-        "type": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "UNSPECIFIED",
-            "PDF",
-            "DOCUMENT",
-            "PRESENTATION",
-            "SPREADSHEET",
-            "FORM",
-            "DRAWING",
-            "SCRIPT",
-            "MAP",
-            "IMAGE",
-            "AUDIO",
-            "VIDEO",
-            "FOLDER",
-            "ARCHIVE",
-            "SITE"
-          ]
-        }
-      },
-      "type": "object"
-    },
-    "PushItemRequest": {
-      "id": "PushItemRequest",
-      "type": "object",
-      "properties": {
-        "item": {
-          "description": "Item to push onto the queue.",
-          "$ref": "PushItem"
-        },
-        "connectorName": {
-          "description": "Name of connector making this call. Format: datasources/{source_id}/connectors/{ID}",
-          "type": "string"
-        },
-        "debugOptions": {
-          "description": "Common debug options.",
-          "$ref": "DebugOptions"
-        }
-      }
-    },
-    "DoubleValues": {
-      "id": "DoubleValues",
-      "description": "List of double values.",
-      "properties": {
-        "values": {
-          "items": {
-            "format": "double",
-            "type": "number"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object"
-    },
-    "IntegerValues": {
-      "id": "IntegerValues",
-      "properties": {
-        "values": {
-          "items": {
-            "type": "string",
-            "format": "int64"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "description": "List of integer values."
-    },
-    "ProcessingError": {
-      "id": "ProcessingError",
-      "properties": {
-        "errorMessage": {
-          "description": "Description of the error.",
-          "type": "string"
-        },
-        "fieldViolations": {
-          "items": {
-            "$ref": "FieldViolation"
-          },
-          "type": "array",
-          "description": "In case the item fields are invalid, this field contains the details about the validation errors."
-        },
-        "code": {
-          "description": "Error code indicating the nature of the error.",
-          "type": "string",
-          "enumDescriptions": [
-            "Input only value. Use this value in Items.",
-            "Item's ACL, metadata, or content is malformed or in invalid state. FieldViolations contains more details on where the problem is.",
-            "Countent format is unsupported.",
-            "Items with incomplete ACL information due to inheriting other items with broken ACL or having groups with unmapped descendants.",
-            "ACL inheritance graph formed a cycle."
-          ],
-          "enum": [
-            "PROCESSING_ERROR_CODE_UNSPECIFIED",
-            "MALFORMED_REQUEST",
-            "UNSUPPORTED_CONTENT_FORMAT",
-            "INDIRECT_BROKEN_ACL",
-            "ACL_CYCLE"
-          ]
-        }
-      },
-      "type": "object"
-    },
-    "FieldViolation": {
-      "id": "FieldViolation",
-      "properties": {
-        "description": {
-          "description": "Description of the error.",
-          "type": "string"
-        },
-        "field": {
-          "type": "string",
-          "description": "Path of field with violation."
-        }
-      },
-      "type": "object"
-    },
-    "ListOperationsResponse": {
-      "id": "ListOperationsResponse",
-      "type": "object",
-      "description": "The response message for Operations.ListOperations.",
-      "properties": {
-        "nextPageToken": {
-          "description": "The standard List next-page token.",
-          "type": "string"
+        "media": {
+            "methods": {
+                "upload": {
+                    "description": "Uploads media for indexing. The upload endpoint supports direct and resumable upload protocols and is intended for large items that can not be [inlined during index requests](https://developers.google.com/cloud-search/docs/reference/rest/v1/indexing.datasources.items#itemcontent). To index large content: 1. Call indexing.datasources.items.upload with the item name to begin an upload session and retrieve the UploadItemRef. 1. Call media.upload to upload the content, as a streaming request, using the same resource name from the UploadItemRef from step 1. 1. Call indexing.datasources.items.index to index the item. Populate the [ItemContent](/cloud-search/docs/reference/rest/v1/indexing.datasources.items#ItemContent) with the UploadItemRef from step 1. For additional information, see [Create a content connector using the REST API](https://developers.google.com/cloud-search/docs/guides/content-connector#rest). **Note:** This API requires a service account to execute.",
+                    "flatPath": "v1/media/{mediaId}",
+                    "httpMethod": "POST",
+                    "id": "cloudsearch.media.upload",
+                    "mediaUpload": {
+                        "accept": [
+                            "*/*"
+                        ],
+                        "protocols": {
+                            "simple": {
+                                "multipart": true,
+                                "path": "/upload/v1/media/{+resourceName}"
+                            }
+                        }
+                    },
+                    "parameterOrder": [
+                        "resourceName"
+                    ],
+                    "parameters": {
+                        "resourceName": {
+                            "description": "Name of the media that is being downloaded. See ReadRequest.resource_name.",
+                            "location": "path",
+                            "pattern": "^.*$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/media/{+resourceName}",
+                    "request": {
+                        "$ref": "Media"
+                    },
+                    "response": {
+                        "$ref": "Media"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud_search",
+                        "https://www.googleapis.com/auth/cloud_search.indexing"
+                    ],
+                    "supportsMediaUpload": true
+                }
+            }
         },
         "operations": {
-          "type": "array",
-          "items": {
-            "$ref": "Operation"
-          },
-          "description": "A list of operations that matches the specified filter in the request."
-        }
-      }
-    },
-    "DeleteQueueItemsRequest": {
-      "type": "object",
-      "id": "DeleteQueueItemsRequest",
-      "properties": {
-        "debugOptions": {
-          "$ref": "DebugOptions",
-          "description": "Common debug options."
-        },
-        "queue": {
-          "type": "string",
-          "description": "Name of a queue to delete items from."
-        },
-        "connectorName": {
-          "description": "Name of connector making this call. Format: datasources/{source_id}/connectors/{ID}",
-          "type": "string"
-        }
-      }
-    },
-    "HtmlOperatorOptions": {
-      "description": "Used to provide a search operator for html properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched.",
-      "id": "HtmlOperatorOptions",
-      "properties": {
-        "operatorName": {
-          "type": "string",
-          "description": "Indicates the operator name required in the query in order to isolate the html property. For example, if operatorName is *subject* and the property's name is *subjectLine*, then queries like *subject:\u003cvalue\u003e* show results only where the value of the property named *subjectLine* matches *\u003cvalue\u003e*. By contrast, a search that uses the same *\u003cvalue\u003e* without an operator return all items where *\u003cvalue\u003e* matches the value of any html properties or text within the content field for the item. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters."
-        }
-      },
-      "type": "object"
-    },
-    "Filter": {
-      "type": "object",
-      "description": "A generic way of expressing filters in a query, which supports two approaches: **1. Setting a ValueFilter.** The name must match an operator_name defined in the schema for your data source. **2. Setting a CompositeFilter.** The filters are evaluated using the logical operator. The top-level operators can only be either an AND or a NOT. AND can appear only at the top-most level. OR can appear only under a top-level AND.",
-      "properties": {
-        "valueFilter": {
-          "$ref": "ValueFilter"
-        },
-        "compositeFilter": {
-          "$ref": "CompositeFilter"
-        }
-      },
-      "id": "Filter"
-    },
-    "ListDataSourceResponse": {
-      "properties": {
-        "sources": {
-          "items": {
-            "$ref": "DataSource"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Token to retrieve the next page of results, or empty if there are no more results in the list."
-        }
-      },
-      "type": "object",
-      "id": "ListDataSourceResponse"
-    },
-    "SpellResult": {
-      "properties": {
-        "suggestedQuery": {
-          "type": "string",
-          "description": "The suggested spelling of the query."
-        }
-      },
-      "id": "SpellResult",
-      "type": "object"
-    },
-    "CustomerUserStats": {
-      "id": "CustomerUserStats",
-      "properties": {
-        "thirtyDaysActiveUsersCount": {
-          "format": "int64",
-          "description": "The count of unique active users in the past thirty days",
-          "type": "string"
-        },
-        "sevenDaysActiveUsersCount": {
-          "description": "The count of unique active users in the past seven days",
-          "type": "string",
-          "format": "int64"
-        },
-        "date": {
-          "$ref": "Date",
-          "description": "Date for which session stats were calculated. Stats calculated on the next day close to midnight are returned."
-        },
-        "oneDayActiveUsersCount": {
-          "description": "The count of unique active users in the past one day",
-          "type": "string",
-          "format": "int64"
-        }
-      },
-      "type": "object"
-    },
-    "ItemContent": {
-      "description": "Content of an item to be indexed and surfaced by Cloud Search. Only UTF-8 encoded strings are allowed as inlineContent. If the content is uploaded and not binary, it must be UTF-8 encoded.",
-      "properties": {
-        "contentDataRef": {
-          "description": "Upload reference ID of a previously uploaded content via write method.",
-          "$ref": "UploadItemRef"
-        },
-        "inlineContent": {
-          "type": "string",
-          "description": "Content that is supplied inlined within the update method. The maximum length is 102400 bytes (100 KiB).",
-          "format": "byte"
-        },
-        "hash": {
-          "description": "Hashing info calculated and provided by the API client for content. Can be used with the items.push method to calculate modified state. The maximum length is 2048 characters.",
-          "type": "string"
-        },
-        "contentFormat": {
-          "enumDescriptions": [
-            "Invalid value.",
-            "contentFormat is HTML.",
-            "contentFormat is free text.",
-            "contentFormat is raw bytes."
-          ],
-          "type": "string",
-          "enum": [
-            "UNSPECIFIED",
-            "HTML",
-            "TEXT",
-            "RAW"
-          ]
-        }
-      },
-      "type": "object",
-      "id": "ItemContent"
-    },
-    "Source": {
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Source name for content indexed by the Indexing API."
-        },
-        "predefinedSource": {
-          "enumDescriptions": [
-            "",
-            "Suggests queries issued by the user in the past. Only valid when used with the suggest API. Ignored when used in the query API.",
-            "Suggests people in the organization. Only valid when used with the suggest API. Results in an error when used in the query API.",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "Predefined content source for Google Apps.",
-          "type": "string",
-          "enum": [
-            "NONE",
-            "QUERY_HISTORY",
-            "PERSON",
-            "GOOGLE_DRIVE",
-            "GOOGLE_GMAIL",
-            "GOOGLE_SITES",
-            "GOOGLE_GROUPS",
-            "GOOGLE_CALENDAR",
-            "GOOGLE_KEEP"
-          ]
-        }
-      },
-      "id": "Source",
-      "type": "object",
-      "description": "Defines sources for the suggest/search APIs."
-    },
-    "Principal": {
-      "description": "Reference to a user, group, or domain.",
-      "id": "Principal",
-      "properties": {
-        "userResourceName": {
-          "type": "string",
-          "description": "This principal is a user identified using an external identity. The name field must specify the user resource name with this format: identitysources/{source_id}/users/{ID}"
-        },
-        "gsuitePrincipal": {
-          "description": "This principal is a GSuite user, group or domain.",
-          "$ref": "GSuitePrincipal"
-        },
-        "groupResourceName": {
-          "type": "string",
-          "description": "This principal is a group identified using an external identity. The name field must specify the group resource name with this format: identitysources/{source_id}/groups/{ID}"
-        }
-      },
-      "type": "object"
-    },
-    "SearchResult": {
-      "description": "Results containing indexed information for a document.",
-      "id": "SearchResult",
-      "properties": {
-        "snippet": {
-          "description": "The concatenation of all snippets (summaries) available for this result.",
-          "$ref": "Snippet"
-        },
-        "url": {
-          "type": "string",
-          "description": "The URL of the search result. The URL contains a Google redirect to the actual item. This URL is signed and shouldn't be changed."
-        },
-        "debugInfo": {
-          "$ref": "ResultDebugInfo",
-          "description": "Debugging information about this search result."
-        },
-        "metadata": {
-          "description": "Metadata of the search result.",
-          "$ref": "Metadata"
-        },
-        "title": {
-          "type": "string",
-          "description": "Title of the search result."
-        },
-        "clusteredResults": {
-          "description": "If source is clustered, provide list of clustered results. There will only be one level of clustered results. If current source is not enabled for clustering, this field will be empty.",
-          "type": "array",
-          "items": {
-            "$ref": "SearchResult"
-          }
-        }
-      },
-      "type": "object"
-    },
-    "ResultDisplayLine": {
-      "type": "object",
-      "id": "ResultDisplayLine",
-      "properties": {
-        "fields": {
-          "items": {
-            "$ref": "ResultDisplayField"
-          },
-          "type": "array"
-        }
-      },
-      "description": "The collection of fields that make up a displayed line"
-    },
-    "Media": {
-      "type": "object",
-      "id": "Media",
-      "description": "Media resource.",
-      "properties": {
-        "resourceName": {
-          "type": "string",
-          "description": "Name of the media resource."
-        }
-      }
-    },
-    "TextPropertyOptions": {
-      "type": "object",
-      "description": "Options for text properties.",
-      "id": "TextPropertyOptions",
-      "properties": {
-        "operatorOptions": {
-          "description": "If set, describes how the property should be used as a search operator.",
-          "$ref": "TextOperatorOptions"
-        },
-        "retrievalImportance": {
-          "$ref": "RetrievalImportance",
-          "description": "Indicates the search quality importance of the tokens within the field when used for retrieval."
-        }
-      }
-    },
-    "ItemCountByStatus": {
-      "properties": {
-        "count": {
-          "description": "Number of items matching the status code.",
-          "format": "int64",
-          "type": "string"
-        },
-        "statusCode": {
-          "type": "string",
-          "description": "Status of the items.",
-          "enumDescriptions": [
-            "Input-only value. Used with Items.list to list all items in the queue, regardless of status.",
-            "Error encountered by Cloud Search while processing this item. Details of the error are in repositoryError.",
-            "Item has been modified in the repository, and is out of date with the version previously accepted into Cloud Search.",
-            "Item is known to exist in the repository, but is not yet accepted by Cloud Search. An item can be in this state when Items.push has been called for an item of this name that did not exist previously.",
-            "API has accepted the up-to-date data of this item."
-          ],
-          "enum": [
-            "CODE_UNSPECIFIED",
-            "ERROR",
-            "MODIFIED",
-            "NEW_ITEM",
-            "ACCEPTED"
-          ]
-        }
-      },
-      "type": "object",
-      "id": "ItemCountByStatus"
-    },
-    "Date": {
-      "properties": {
-        "year": {
-          "format": "int32",
-          "description": "Year of date. Must be from 1 to 9999.",
-          "type": "integer"
-        },
-        "month": {
-          "description": "Month of date. Must be from 1 to 12.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "day": {
-          "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "type": "object",
-      "id": "Date",
-      "description": "Represents a whole calendar date, for example a date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the [Proleptic Gregorian Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar). The date must be a valid calendar date between the year 1 and 9999."
-    },
-    "DriveTimeSpanRestrict": {
-      "description": "The time span search restrict (e.g. \"after:2017-09-11 before:2017-09-12\").",
-      "id": "DriveTimeSpanRestrict",
-      "type": "object",
-      "properties": {
-        "type": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "Not Enabled",
-            "Not Enabled"
-          ],
-          "type": "string",
-          "enum": [
-            "UNSPECIFIED",
-            "TODAY",
-            "YESTERDAY",
-            "LAST_7_DAYS",
-            "LAST_30_DAYS",
-            "LAST_90_DAYS"
-          ]
-        }
-      }
-    },
-    "ItemStructuredData": {
-      "properties": {
-        "object": {
-          "description": "The structured data object that should conform to a registered object definition in the schema for the data source.",
-          "$ref": "StructuredDataObject"
-        },
-        "hash": {
-          "description": "Hashing value provided by the API caller. This can be used with the items.push method to calculate modified state. The maximum length is 2048 characters.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "ItemStructuredData",
-      "description": "Available structured data fields for the item."
-    },
-    "SourceResultCount": {
-      "description": "Per source result count information.",
-      "id": "SourceResultCount",
-      "properties": {
-        "resultCountExact": {
-          "type": "string",
-          "format": "int64",
-          "description": "The exact result count for this source."
-        },
-        "hasMoreResults": {
-          "description": "Whether there are more search results for this source.",
-          "type": "boolean"
-        },
-        "resultCountEstimate": {
-          "description": "The estimated result count for this source.",
-          "type": "string",
-          "format": "int64"
-        },
-        "source": {
-          "description": "The source the result count information is associated with.",
-          "$ref": "Source"
-        }
-      },
-      "type": "object"
-    },
-    "ResultCounts": {
-      "type": "object",
-      "id": "ResultCounts",
-      "description": "Result count information",
-      "properties": {
-        "sourceResultCounts": {
-          "items": {
-            "$ref": "SourceResultCount"
-          },
-          "type": "array",
-          "description": "Result count information for each source with results."
-        }
-      }
-    },
-    "Photo": {
-      "type": "object",
-      "id": "Photo",
-      "properties": {
-        "url": {
-          "description": "The URL of the photo.",
-          "type": "string"
-        }
-      },
-      "description": "A person's photo."
-    },
-    "ListItemsResponse": {
-      "type": "object",
-      "properties": {
-        "items": {
-          "items": {
-            "$ref": "Item"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "description": "Token to retrieve the next page of results, or empty if there are no more results in the list.",
-          "type": "string"
-        }
-      },
-      "id": "ListItemsResponse"
-    },
-    "Operation": {
-      "description": "This resource represents a long-running operation that is the result of a network API call.",
-      "id": "Operation",
-      "type": "object",
-      "properties": {
-        "error": {
-          "description": "The error result of the operation in case of failure or cancellation.",
-          "$ref": "Status"
-        },
-        "name": {
-          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
-          "type": "string"
-        },
-        "done": {
-          "type": "boolean",
-          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available."
-        },
-        "metadata": {
-          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "type": "object"
-        },
-        "response": {
-          "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
-          "type": "object",
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          }
-        }
-      }
-    },
-    "GetCustomerUserStatsResponse": {
-      "type": "object",
-      "id": "GetCustomerUserStatsResponse",
-      "properties": {
-        "stats": {
-          "type": "array",
-          "items": {
-            "$ref": "CustomerUserStats"
-          }
-        }
-      }
-    },
-    "QueryInterpretation": {
-      "type": "object",
-      "id": "QueryInterpretation",
-      "properties": {
-        "interpretationType": {
-          "enum": [
-            "NONE",
-            "BLEND",
-            "REPLACE"
-          ],
-          "enumDescriptions": [
-            "Neither the natural language interpretation, nor a broader version of the query is used to fetch the search results.",
-            "The results from original query are blended with other results. The reason for blending these other results with the results from original query is populated in the 'Reason' field below.",
-            "The results from original query are replaced. The reason for replacing the results from original query is populated in the 'Reason' field below."
-          ],
-          "type": "string"
-        },
-        "reason": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "Natural language interpretation of the query is used to fetch the search results.",
-            "Query and document terms similarity is used to selectively broaden the query to retrieve additional search results since enough results were not found for the user query. Interpreted query will be empty for this case."
-          ],
-          "enum": [
-            "UNSPECIFIED",
-            "QUERY_HAS_NATURAL_LANGUAGE_INTENT",
-            "NOT_ENOUGH_RESULTS_FOUND_FOR_USER_QUERY"
-          ],
-          "description": "The reason for interpretation of the query. This field will not be UNSPECIFIED if the interpretation type is not NONE."
-        },
-        "interpretedQuery": {
-          "type": "string",
-          "description": "The interpretation of the query used in search. For example, queries with natural language intent like \"email from john\" will be interpreted as \"from:john source:mail\". This field will not be filled when the reason is NOT_ENOUGH_RESULTS_FOUND_FOR_USER_QUERY."
-        }
-      }
-    },
-    "QuerySuggestion": {
-      "properties": {},
-      "type": "object",
-      "description": "This field does not contain anything as of now and is just used as an indicator that the suggest result was a phrase completion.",
-      "id": "QuerySuggestion"
-    },
-    "HtmlValues": {
-      "type": "object",
-      "id": "HtmlValues",
-      "properties": {
-        "values": {
-          "description": "The maximum allowable length for html values is 2048 characters.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        }
-      },
-      "description": "List of html values."
-    },
-    "ObjectDefinition": {
-      "description": "The definition for an object within a data source.",
-      "properties": {
-        "options": {
-          "description": "The optional object-specific options.",
-          "$ref": "ObjectOptions"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name for the object, which then defines its type. Item indexing requests should set the objectType field equal to this value. For example, if *name* is *Document*, then indexing requests for items of type Document should set objectType equal to *Document*. Each object definition must be uniquely named within a schema. The name must start with a letter and can only contain letters (A-Z, a-z) or numbers (0-9). The maximum length is 256 characters."
-        },
-        "propertyDefinitions": {
-          "type": "array",
-          "description": "The property definitions for the object. The maximum number of elements is 1000.",
-          "items": {
-            "$ref": "PropertyDefinition"
-          }
-        }
-      },
-      "type": "object",
-      "id": "ObjectDefinition"
-    },
-    "SearchApplication": {
-      "properties": {
-        "name": {
-          "description": "Name of the Search Application. Format: searchapplications/{application_id}.",
-          "type": "string"
-        },
-        "defaultFacetOptions": {
-          "type": "array",
-          "description": "The default fields for returning facet results. The sources specified here also have been included in data_source_restrictions above.",
-          "items": {
-            "$ref": "FacetOptions"
-          }
-        },
-        "displayName": {
-          "description": "Display name of the Search Application. The maximum length is 300 characters.",
-          "type": "string"
-        },
-        "sourceConfig": {
-          "items": {
-            "$ref": "SourceConfig"
-          },
-          "description": "Configuration for a sources specified in data_source_restrictions.",
-          "type": "array"
-        },
-        "operationIds": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "Output only. IDs of the Long Running Operations (LROs) currently running for this schema. Output only field.",
-          "readOnly": true
-        },
-        "defaultSortOptions": {
-          "$ref": "SortOptions",
-          "description": "The default options for sorting the search results"
-        },
-        "dataSourceRestrictions": {
-          "type": "array",
-          "items": {
-            "$ref": "DataSourceRestriction"
-          },
-          "description": "Retrictions applied to the configurations. The maximum number of elements is 10."
-        },
-        "scoringConfig": {
-          "description": "Configuration for ranking results.",
-          "$ref": "ScoringConfig"
-        }
-      },
-      "description": "SearchApplication",
-      "type": "object",
-      "id": "SearchApplication"
-    },
-    "QueryItem": {
-      "type": "object",
-      "description": "Information relevant only to a query entry.",
-      "id": "QueryItem",
-      "properties": {
-        "isSynthetic": {
-          "description": "True if the text was generated by means other than a previous user search.",
-          "type": "boolean"
-        }
-      }
-    },
-    "ResultDisplayMetadata": {
-      "type": "object",
-      "properties": {
-        "metalines": {
-          "type": "array",
-          "description": "The metalines content to be displayed with the result.",
-          "items": {
-            "$ref": "ResultDisplayLine"
-          }
-        },
-        "objectTypeLabel": {
-          "type": "string",
-          "description": "The display label for the object."
-        }
-      },
-      "id": "ResultDisplayMetadata"
-    },
-    "DateOperatorOptions": {
-      "description": "Optional. Provides a search operator for date properties. Search operators let users restrict the query to specific fields relevant to the type of item being searched.",
-      "type": "object",
-      "properties": {
-        "lessThanOperatorName": {
-          "type": "string",
-          "description": "Indicates the operator name required in the query in order to isolate the date property using the less-than operator. For example, if lessThanOperatorName is *closedbefore* and the property's name is *closeDate*, then queries like *closedbefore:\u003cvalue\u003e* show results only where the value of the property named *closeDate* is earlier than *\u003cvalue\u003e*. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters."
-        },
-        "greaterThanOperatorName": {
-          "description": "Indicates the operator name required in the query in order to isolate the date property using the greater-than operator. For example, if greaterThanOperatorName is *closedafter* and the property's name is *closeDate*, then queries like *closedafter:\u003cvalue\u003e* show results only where the value of the property named *closeDate* is later than *\u003cvalue\u003e*. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.",
-          "type": "string"
-        },
-        "operatorName": {
-          "type": "string",
-          "description": "Indicates the actual string required in the query in order to isolate the date property. For example, suppose an issue tracking schema object has a property named *closeDate* that specifies an operator with an operatorName of *closedon*. For searches on that data, queries like *closedon:\u003cvalue\u003e* show results only where the value of the *closeDate* property matches *\u003cvalue\u003e*. By contrast, a search that uses the same *\u003cvalue\u003e* without an operator returns all items where *\u003cvalue\u003e* matches the value of any String properties or text within the content field for the indexed datasource. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters."
-        }
-      },
-      "id": "DateOperatorOptions"
-    }
-  },
-  "protocol": "rest",
-  "basePath": "",
-  "rootUrl": "https://cloudsearch.googleapis.com/",
-  "name": "cloudsearch",
-  "kind": "discovery#restDescription",
-  "servicePath": "",
-  "ownerName": "Google",
-  "documentationLink": "https://developers.google.com/cloud-search/docs/guides/",
-  "title": "Cloud Search API",
-  "parameters": {
-    "prettyPrint": {
-      "default": "true",
-      "description": "Returns response with indentations and line breaks.",
-      "location": "query",
-      "type": "boolean"
-    },
-    "$.xgafv": {
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "type": "string",
-      "description": "V1 error format.",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ]
-    },
-    "key": {
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "type": "string",
-      "location": "query"
-    },
-    "alt": {
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "location": "query",
-      "type": "string",
-      "default": "json",
-      "description": "Data format for response.",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ]
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "location": "query",
-      "type": "string"
-    },
-    "oauth_token": {
-      "location": "query",
-      "type": "string",
-      "description": "OAuth 2.0 token for the current user."
-    },
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "location": "query",
-      "type": "string"
-    },
-    "uploadType": {
-      "location": "query",
-      "type": "string",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
-    },
-    "callback": {
-      "type": "string",
-      "location": "query",
-      "description": "JSONP"
-    },
-    "access_token": {
-      "location": "query",
-      "type": "string",
-      "description": "OAuth access token."
-    },
-    "quotaUser": {
-      "location": "query",
-      "type": "string",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters."
-    }
-  },
-  "revision": "20201110",
-  "id": "cloudsearch:v1",
-  "canonicalName": "Cloud Search",
-  "resources": {
-    "settings": {
-      "resources": {
-        "searchapplications": {
-          "methods": {
-            "create": {
-              "flatPath": "v1/settings/searchapplications",
-              "id": "cloudsearch.settings.searchapplications.create",
-              "path": "v1/settings/searchapplications",
-              "parameterOrder": [],
-              "response": {
-                "$ref": "Operation"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud_search",
-                "https://www.googleapis.com/auth/cloud_search.settings",
-                "https://www.googleapis.com/auth/cloud_search.settings.query"
-              ],
-              "request": {
-                "$ref": "SearchApplication"
-              },
-              "description": "Creates a search application. **Note:** This API requires an admin account to execute.",
-              "httpMethod": "POST",
-              "parameters": {}
-            },
-            "reset": {
-              "response": {
-                "$ref": "Operation"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "description": "Resets a search application to default settings. This will return an empty response. **Note:** This API requires an admin account to execute.",
-              "httpMethod": "POST",
-              "flatPath": "v1/settings/searchapplications/{searchapplicationsId}:reset",
-              "parameters": {
-                "name": {
-                  "required": true,
-                  "location": "path",
-                  "pattern": "^searchapplications/[^/]+$",
-                  "type": "string",
-                  "description": "The name of the search application to be reset. Format: applications/{application_id}."
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud_search",
-                "https://www.googleapis.com/auth/cloud_search.settings",
-                "https://www.googleapis.com/auth/cloud_search.settings.query"
-              ],
-              "path": "v1/settings/{+name}:reset",
-              "id": "cloudsearch.settings.searchapplications.reset",
-              "request": {
-                "$ref": "ResetSearchApplicationRequest"
-              }
-            },
-            "delete": {
-              "response": {
-                "$ref": "Operation"
-              },
-              "path": "v1/settings/{+name}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud_search",
-                "https://www.googleapis.com/auth/cloud_search.settings",
-                "https://www.googleapis.com/auth/cloud_search.settings.query"
-              ],
-              "flatPath": "v1/settings/searchapplications/{searchapplicationsId}",
-              "httpMethod": "DELETE",
-              "description": "Deletes a search application. **Note:** This API requires an admin account to execute.",
-              "parameters": {
-                "debugOptions.enableDebugging": {
-                  "type": "boolean",
-                  "location": "query",
-                  "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field."
-                },
-                "name": {
-                  "pattern": "^searchapplications/[^/]+$",
-                  "type": "string",
-                  "location": "path",
-                  "description": "The name of the search application to be deleted. Format: applications/{application_id}.",
-                  "required": true
-                }
-              },
-              "id": "cloudsearch.settings.searchapplications.delete",
-              "parameterOrder": [
-                "name"
-              ]
-            },
-            "list": {
-              "parameters": {
-                "pageToken": {
-                  "location": "query",
-                  "description": "The next_page_token value returned from a previous List request, if any. The default value is 10",
-                  "type": "string"
-                },
-                "debugOptions.enableDebugging": {
-                  "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
-                  "type": "boolean",
-                  "location": "query"
-                },
-                "pageSize": {
-                  "type": "integer",
-                  "location": "query",
-                  "format": "int32",
-                  "description": "The maximum number of items to return."
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud_search",
-                "https://www.googleapis.com/auth/cloud_search.settings",
-                "https://www.googleapis.com/auth/cloud_search.settings.query"
-              ],
-              "response": {
-                "$ref": "ListSearchApplicationsResponse"
-              },
-              "httpMethod": "GET",
-              "flatPath": "v1/settings/searchapplications",
-              "parameterOrder": [],
-              "id": "cloudsearch.settings.searchapplications.list",
-              "path": "v1/settings/searchapplications",
-              "description": "Lists all search applications. **Note:** This API requires an admin account to execute."
-            },
-            "get": {
-              "httpMethod": "GET",
-              "path": "v1/settings/{+name}",
-              "response": {
-                "$ref": "SearchApplication"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud_search",
-                "https://www.googleapis.com/auth/cloud_search.settings",
-                "https://www.googleapis.com/auth/cloud_search.settings.query"
-              ],
-              "flatPath": "v1/settings/searchapplications/{searchapplicationsId}",
-              "id": "cloudsearch.settings.searchapplications.get",
-              "parameters": {
-                "name": {
-                  "type": "string",
-                  "pattern": "^searchapplications/[^/]+$",
-                  "location": "path",
-                  "description": "Name of the search application. Format: searchapplications/{application_id}.",
-                  "required": true
-                },
-                "debugOptions.enableDebugging": {
-                  "location": "query",
-                  "type": "boolean",
-                  "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field."
-                }
-              },
-              "description": "Gets the specified search application. **Note:** This API requires an admin account to execute.",
-              "parameterOrder": [
-                "name"
-              ]
-            },
-            "update": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud_search",
-                "https://www.googleapis.com/auth/cloud_search.settings",
-                "https://www.googleapis.com/auth/cloud_search.settings.query"
-              ],
-              "parameterOrder": [
-                "name"
-              ],
-              "parameters": {
-                "name": {
-                  "type": "string",
-                  "description": "Name of the Search Application. Format: searchapplications/{application_id}.",
-                  "pattern": "^searchapplications/[^/]+$",
-                  "required": true,
-                  "location": "path"
-                }
-              },
-              "description": "Updates a search application. **Note:** This API requires an admin account to execute.",
-              "id": "cloudsearch.settings.searchapplications.update",
-              "httpMethod": "PUT",
-              "path": "v1/settings/{+name}",
-              "response": {
-                "$ref": "Operation"
-              },
-              "flatPath": "v1/settings/searchapplications/{searchapplicationsId}",
-              "request": {
-                "$ref": "SearchApplication"
-              }
-            }
-          }
-        },
-        "datasources": {
-          "methods": {
-            "create": {
-              "description": "Creates a datasource. **Note:** This API requires an admin account to execute.",
-              "parameters": {},
-              "request": {
-                "$ref": "DataSource"
-              },
-              "response": {
-                "$ref": "Operation"
-              },
-              "path": "v1/settings/datasources",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud_search",
-                "https://www.googleapis.com/auth/cloud_search.settings",
-                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
-              ],
-              "flatPath": "v1/settings/datasources",
-              "httpMethod": "POST",
-              "id": "cloudsearch.settings.datasources.create",
-              "parameterOrder": []
-            },
-            "list": {
-              "httpMethod": "GET",
-              "id": "cloudsearch.settings.datasources.list",
-              "response": {
-                "$ref": "ListDataSourceResponse"
-              },
-              "path": "v1/settings/datasources",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud_search",
-                "https://www.googleapis.com/auth/cloud_search.settings",
-                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
-              ],
-              "parameterOrder": [],
-              "parameters": {
-                "pageToken": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "Starting index of the results."
-                },
-                "debugOptions.enableDebugging": {
-                  "type": "boolean",
-                  "location": "query",
-                  "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field."
-                },
-                "pageSize": {
-                  "location": "query",
-                  "description": "Maximum number of datasources to fetch in a request. The max value is 100. The default value is 10",
-                  "format": "int32",
-                  "type": "integer"
-                }
-              },
-              "description": "Lists datasources. **Note:** This API requires an admin account to execute.",
-              "flatPath": "v1/settings/datasources"
-            },
-            "get": {
-              "httpMethod": "GET",
-              "parameters": {
-                "name": {
-                  "description": "Name of the datasource resource. Format: datasources/{source_id}.",
-                  "location": "path",
-                  "pattern": "^datasources/[^/]+$",
-                  "required": true,
-                  "type": "string"
-                },
-                "debugOptions.enableDebugging": {
-                  "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
-                  "location": "query",
-                  "type": "boolean"
-                }
-              },
-              "path": "v1/settings/{+name}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud_search",
-                "https://www.googleapis.com/auth/cloud_search.settings",
-                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
-              ],
-              "response": {
-                "$ref": "DataSource"
-              },
-              "id": "cloudsearch.settings.datasources.get",
-              "flatPath": "v1/settings/datasources/{datasourcesId}",
-              "description": "Gets a datasource. **Note:** This API requires an admin account to execute.",
-              "parameterOrder": [
-                "name"
-              ]
-            },
-            "update": {
-              "parameterOrder": [
-                "name"
-              ],
-              "parameters": {
-                "name": {
-                  "description": "Name of the datasource resource. Format: datasources/{source_id}. The name is ignored when creating a datasource.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^datasources/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v1/settings/datasources/{datasourcesId}",
-              "httpMethod": "PUT",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud_search",
-                "https://www.googleapis.com/auth/cloud_search.settings",
-                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
-              ],
-              "id": "cloudsearch.settings.datasources.update",
-              "response": {
-                "$ref": "Operation"
-              },
-              "path": "v1/settings/{+name}",
-              "description": "Updates a datasource. **Note:** This API requires an admin account to execute.",
-              "request": {
-                "$ref": "UpdateDataSourceRequest"
-              }
-            },
-            "delete": {
-              "description": "Deletes a datasource. **Note:** This API requires an admin account to execute.",
-              "parameterOrder": [
-                "name"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud_search",
-                "https://www.googleapis.com/auth/cloud_search.settings",
-                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
-              ],
-              "httpMethod": "DELETE",
-              "path": "v1/settings/{+name}",
-              "flatPath": "v1/settings/datasources/{datasourcesId}",
-              "response": {
-                "$ref": "Operation"
-              },
-              "id": "cloudsearch.settings.datasources.delete",
-              "parameters": {
-                "name": {
-                  "pattern": "^datasources/[^/]+$",
-                  "required": true,
-                  "description": "Name of the datasource. Format: datasources/{source_id}.",
-                  "type": "string",
-                  "location": "path"
-                },
-                "debugOptions.enableDebugging": {
-                  "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
-                  "type": "boolean",
-                  "location": "query"
-                }
-              }
-            }
-          }
-        }
-      }
-    },
-    "query": {
-      "resources": {
-        "sources": {
-          "methods": {
-            "list": {
-              "path": "v1/query/sources",
-              "parameters": {
-                "requestOptions.debugOptions.enableDebugging": {
-                  "type": "boolean",
-                  "location": "query",
-                  "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field."
-                },
-                "pageToken": {
-                  "description": "Number of sources to return in the response.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "requestOptions.searchApplicationId": {
-                  "type": "string",
-                  "description": "The ID generated when you create a search application using the [admin console](https://support.google.com/a/answer/9043922).",
-                  "location": "query"
-                },
-                "requestOptions.timeZone": {
-                  "description": "Current user's time zone id, such as \"America/Los_Angeles\" or \"Australia/Sydney\". These IDs are defined by [Unicode Common Locale Data Repository (CLDR)](http://cldr.unicode.org/) project, and currently available in the file [timezone.xml](http://unicode.org/repos/cldr/trunk/common/bcp47/timezone.xml). This field is used to correctly interpret date and time queries. If this field is not specified, the default time zone (UTC) is used.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "requestOptions.languageCode": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "The BCP-47 language code, such as \"en-US\" or \"sr-Latn\". For more information, see http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. For translations. Set this field using the language set in browser or for the page. In the event that the user's language preference is known, set this field to the known user language. When specified, the documents in search results are biased towards the specified language. The suggest API does not use this parameter. Instead, suggest autocompletes only based on characters in the query."
-                }
-              },
-              "response": {
-                "$ref": "ListQuerySourcesResponse"
-              },
-              "parameterOrder": [],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud_search",
-                "https://www.googleapis.com/auth/cloud_search.query"
-              ],
-              "description": "Returns list of sources that user can use for Search and Suggest APIs. **Note:** This API requires a standard end user account to execute. A service account can't perform Query API requests directly; to use a service account to perform queries, set up [G Suite domain-wide delegation of authority](https://developers.google.com/cloud-search/docs/guides/delegation/).",
-              "httpMethod": "GET",
-              "flatPath": "v1/query/sources",
-              "id": "cloudsearch.query.sources.list"
-            }
-          }
-        }
-      },
-      "methods": {
-        "suggest": {
-          "parameters": {},
-          "description": "Provides suggestions for autocompleting the query. **Note:** This API requires a standard end user account to execute. A service account can't perform Query API requests directly; to use a service account to perform queries, set up [G Suite domain-wide delegation of authority](https://developers.google.com/cloud-search/docs/guides/delegation/).",
-          "httpMethod": "POST",
-          "flatPath": "v1/query/suggest",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud_search",
-            "https://www.googleapis.com/auth/cloud_search.query"
-          ],
-          "response": {
-            "$ref": "SuggestResponse"
-          },
-          "parameterOrder": [],
-          "id": "cloudsearch.query.suggest",
-          "request": {
-            "$ref": "SuggestRequest"
-          },
-          "path": "v1/query/suggest"
-        },
-        "search": {
-          "id": "cloudsearch.query.search",
-          "flatPath": "v1/query/search",
-          "parameterOrder": [],
-          "description": "The Cloud Search Query API provides the search method, which returns the most relevant results from a user query. The results can come from G Suite Apps, such as Gmail or Google Drive, or they can come from data that you have indexed from a third party. **Note:** This API requires a standard end user account to execute. A service account can't perform Query API requests directly; to use a service account to perform queries, set up [G Suite domain-wide delegation of authority](https://developers.google.com/cloud-search/docs/guides/delegation/).",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud_search",
-            "https://www.googleapis.com/auth/cloud_search.query"
-          ],
-          "httpMethod": "POST",
-          "request": {
-            "$ref": "SearchRequest"
-          },
-          "path": "v1/query/search",
-          "response": {
-            "$ref": "SearchResponse"
-          },
-          "parameters": {}
-        }
-      }
-    },
-    "stats": {
-      "resources": {
-        "index": {
-          "resources": {
-            "datasources": {
-              "methods": {
+            "methods": {
                 "get": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud_search",
-                    "https://www.googleapis.com/auth/cloud_search.stats",
-                    "https://www.googleapis.com/auth/cloud_search.stats.indexing"
-                  ],
-                  "description": "Gets indexed item statistics for a single data source. **Note:** This API requires a standard end user account to execute.",
-                  "path": "v1/stats/index/{+name}",
-                  "id": "cloudsearch.stats.index.datasources.get",
-                  "parameters": {
-                    "toDate.month": {
-                      "description": "Month of date. Must be from 1 to 12.",
-                      "location": "query",
-                      "format": "int32",
-                      "type": "integer"
+                    "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
+                    "flatPath": "v1/operations/{operationsId}",
+                    "httpMethod": "GET",
+                    "id": "cloudsearch.operations.get",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "The name of the operation resource.",
+                            "location": "path",
+                            "pattern": "^operations/.*$",
+                            "required": true,
+                            "type": "string"
+                        }
                     },
-                    "name": {
-                      "description": "The resource id of the data source to retrieve statistics for, in the following format: \"datasources/{source_id}\"",
-                      "location": "path",
-                      "type": "string",
-                      "required": true,
-                      "pattern": "^datasources/[^/]+$"
+                    "path": "v1/{+name}",
+                    "response": {
+                        "$ref": "Operation"
                     },
-                    "fromDate.month": {
-                      "description": "Month of date. Must be from 1 to 12.",
-                      "location": "query",
-                      "format": "int32",
-                      "type": "integer"
-                    },
-                    "toDate.year": {
-                      "description": "Year of date. Must be from 1 to 9999.",
-                      "type": "integer",
-                      "format": "int32",
-                      "location": "query"
-                    },
-                    "fromDate.year": {
-                      "type": "integer",
-                      "format": "int32",
-                      "location": "query",
-                      "description": "Year of date. Must be from 1 to 9999."
-                    },
-                    "fromDate.day": {
-                      "location": "query",
-                      "type": "integer",
-                      "format": "int32",
-                      "description": "Day of month. Must be from 1 to 31 and valid for the year and month."
-                    },
-                    "toDate.day": {
-                      "location": "query",
-                      "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
-                      "format": "int32",
-                      "type": "integer"
-                    }
-                  },
-                  "flatPath": "v1/stats/index/datasources/{datasourcesId}",
-                  "httpMethod": "GET",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "response": {
-                    "$ref": "GetDataSourceIndexStatsResponse"
-                  }
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud_search",
+                        "https://www.googleapis.com/auth/cloud_search.debug",
+                        "https://www.googleapis.com/auth/cloud_search.indexing",
+                        "https://www.googleapis.com/auth/cloud_search.settings",
+                        "https://www.googleapis.com/auth/cloud_search.settings.indexing",
+                        "https://www.googleapis.com/auth/cloud_search.settings.query"
+                    ]
                 }
-              }
-            }
-          }
-        },
-        "user": {
-          "resources": {
-            "searchapplications": {
-              "methods": {
-                "get": {
-                  "description": "Get the users statistics for search application. **Note:** This API requires a standard end user account to execute.",
-                  "parameters": {
-                    "toDate.day": {
-                      "location": "query",
-                      "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
-                      "type": "integer",
-                      "format": "int32"
-                    },
-                    "toDate.month": {
-                      "description": "Month of date. Must be from 1 to 12.",
-                      "location": "query",
-                      "format": "int32",
-                      "type": "integer"
-                    },
-                    "fromDate.day": {
-                      "type": "integer",
-                      "location": "query",
-                      "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
-                      "format": "int32"
-                    },
-                    "name": {
-                      "description": "The resource id of the search application session stats, in the following format: searchapplications/{application_id}",
-                      "pattern": "^searchapplications/[^/]+$",
-                      "location": "path",
-                      "type": "string",
-                      "required": true
-                    },
-                    "fromDate.year": {
-                      "location": "query",
-                      "type": "integer",
-                      "format": "int32",
-                      "description": "Year of date. Must be from 1 to 9999."
-                    },
-                    "fromDate.month": {
-                      "format": "int32",
-                      "location": "query",
-                      "description": "Month of date. Must be from 1 to 12.",
-                      "type": "integer"
-                    },
-                    "toDate.year": {
-                      "description": "Year of date. Must be from 1 to 9999.",
-                      "type": "integer",
-                      "format": "int32",
-                      "location": "query"
+            },
+            "resources": {
+                "lro": {
+                    "methods": {
+                        "list": {
+                            "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
+                            "flatPath": "v1/operations/{operationsId}/lro",
+                            "httpMethod": "GET",
+                            "id": "cloudsearch.operations.lro.list",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "The standard list filter.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "name": {
+                                    "description": "The name of the operation's parent resource.",
+                                    "location": "path",
+                                    "pattern": "^operations/.*$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "The standard list page size.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The standard list page token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+name}/lro",
+                            "response": {
+                                "$ref": "ListOperationsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud_search",
+                                "https://www.googleapis.com/auth/cloud_search.debug",
+                                "https://www.googleapis.com/auth/cloud_search.indexing",
+                                "https://www.googleapis.com/auth/cloud_search.settings",
+                                "https://www.googleapis.com/auth/cloud_search.settings.indexing",
+                                "https://www.googleapis.com/auth/cloud_search.settings.query"
+                            ]
+                        }
                     }
-                  },
-                  "flatPath": "v1/stats/user/searchapplications/{searchapplicationsId}",
-                  "id": "cloudsearch.stats.user.searchapplications.get",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud_search",
-                    "https://www.googleapis.com/auth/cloud_search.stats",
-                    "https://www.googleapis.com/auth/cloud_search.stats.indexing"
-                  ],
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "GetSearchApplicationUserStatsResponse"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "path": "v1/stats/user/{+name}"
                 }
-              }
             }
-          }
-        },
-        "session": {
-          "resources": {
-            "searchapplications": {
-              "methods": {
-                "get": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud_search",
-                    "https://www.googleapis.com/auth/cloud_search.stats",
-                    "https://www.googleapis.com/auth/cloud_search.stats.indexing"
-                  ],
-                  "parameters": {
-                    "toDate.day": {
-                      "location": "query",
-                      "type": "integer",
-                      "format": "int32",
-                      "description": "Day of month. Must be from 1 to 31 and valid for the year and month."
-                    },
-                    "name": {
-                      "type": "string",
-                      "required": true,
-                      "location": "path",
-                      "description": "The resource id of the search application session stats, in the following format: searchapplications/{application_id}",
-                      "pattern": "^searchapplications/[^/]+$"
-                    },
-                    "toDate.month": {
-                      "description": "Month of date. Must be from 1 to 12.",
-                      "format": "int32",
-                      "location": "query",
-                      "type": "integer"
-                    },
-                    "fromDate.day": {
-                      "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
-                      "format": "int32",
-                      "location": "query",
-                      "type": "integer"
-                    },
-                    "fromDate.month": {
-                      "format": "int32",
-                      "type": "integer",
-                      "description": "Month of date. Must be from 1 to 12.",
-                      "location": "query"
-                    },
-                    "fromDate.year": {
-                      "location": "query",
-                      "description": "Year of date. Must be from 1 to 9999.",
-                      "type": "integer",
-                      "format": "int32"
-                    },
-                    "toDate.year": {
-                      "type": "integer",
-                      "description": "Year of date. Must be from 1 to 9999.",
-                      "location": "query",
-                      "format": "int32"
-                    }
-                  },
-                  "description": "Get the # of search sessions, % of successful sessions with a click query statistics for search application. **Note:** This API requires a standard end user account to execute.",
-                  "response": {
-                    "$ref": "GetSearchApplicationSessionStatsResponse"
-                  },
-                  "flatPath": "v1/stats/session/searchapplications/{searchapplicationsId}",
-                  "path": "v1/stats/session/{+name}",
-                  "id": "cloudsearch.stats.session.searchapplications.get",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "GET"
-                }
-              }
-            }
-          }
         },
         "query": {
-          "resources": {
-            "searchapplications": {
-              "methods": {
-                "get": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud_search",
-                    "https://www.googleapis.com/auth/cloud_search.stats",
-                    "https://www.googleapis.com/auth/cloud_search.stats.indexing"
-                  ],
-                  "flatPath": "v1/stats/query/searchapplications/{searchapplicationsId}",
-                  "parameters": {
-                    "fromDate.day": {
-                      "location": "query",
-                      "type": "integer",
-                      "format": "int32",
-                      "description": "Day of month. Must be from 1 to 31 and valid for the year and month."
+            "methods": {
+                "search": {
+                    "description": "The Cloud Search Query API provides the search method, which returns the most relevant results from a user query. The results can come from G Suite Apps, such as Gmail or Google Drive, or they can come from data that you have indexed from a third party. **Note:** This API requires a standard end user account to execute. A service account can't perform Query API requests directly; to use a service account to perform queries, set up [G Suite domain-wide delegation of authority](https://developers.google.com/cloud-search/docs/guides/delegation/).",
+                    "flatPath": "v1/query/search",
+                    "httpMethod": "POST",
+                    "id": "cloudsearch.query.search",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v1/query/search",
+                    "request": {
+                        "$ref": "SearchRequest"
                     },
-                    "toDate.year": {
-                      "type": "integer",
-                      "description": "Year of date. Must be from 1 to 9999.",
-                      "location": "query",
-                      "format": "int32"
+                    "response": {
+                        "$ref": "SearchResponse"
                     },
-                    "name": {
-                      "pattern": "^searchapplications/[^/]+$",
-                      "description": "The resource id of the search application query stats, in the following format: searchapplications/{application_id}",
-                      "required": true,
-                      "location": "path",
-                      "type": "string"
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud_search",
+                        "https://www.googleapis.com/auth/cloud_search.query"
+                    ]
+                },
+                "suggest": {
+                    "description": "Provides suggestions for autocompleting the query. **Note:** This API requires a standard end user account to execute. A service account can't perform Query API requests directly; to use a service account to perform queries, set up [G Suite domain-wide delegation of authority](https://developers.google.com/cloud-search/docs/guides/delegation/).",
+                    "flatPath": "v1/query/suggest",
+                    "httpMethod": "POST",
+                    "id": "cloudsearch.query.suggest",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v1/query/suggest",
+                    "request": {
+                        "$ref": "SuggestRequest"
                     },
-                    "toDate.day": {
-                      "type": "integer",
-                      "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
-                      "location": "query",
-                      "format": "int32"
+                    "response": {
+                        "$ref": "SuggestResponse"
                     },
-                    "fromDate.year": {
-                      "description": "Year of date. Must be from 1 to 9999.",
-                      "format": "int32",
-                      "location": "query",
-                      "type": "integer"
-                    },
-                    "fromDate.month": {
-                      "type": "integer",
-                      "format": "int32",
-                      "description": "Month of date. Must be from 1 to 12.",
-                      "location": "query"
-                    },
-                    "toDate.month": {
-                      "location": "query",
-                      "type": "integer",
-                      "format": "int32",
-                      "description": "Month of date. Must be from 1 to 12."
-                    }
-                  },
-                  "httpMethod": "GET",
-                  "path": "v1/stats/query/{+name}",
-                  "description": "Get the query statistics for search application. **Note:** This API requires a standard end user account to execute.",
-                  "id": "cloudsearch.stats.query.searchapplications.get",
-                  "response": {
-                    "$ref": "GetSearchApplicationQueryStatsResponse"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ]
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud_search",
+                        "https://www.googleapis.com/auth/cloud_search.query"
+                    ]
                 }
-              }
-            }
-          }
-        }
-      },
-      "methods": {
-        "getSession": {
-          "id": "cloudsearch.stats.getSession",
-          "parameterOrder": [],
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud_search",
-            "https://www.googleapis.com/auth/cloud_search.stats",
-            "https://www.googleapis.com/auth/cloud_search.stats.indexing"
-          ],
-          "path": "v1/stats/session",
-          "flatPath": "v1/stats/session",
-          "response": {
-            "$ref": "GetCustomerSessionStatsResponse"
-          },
-          "parameters": {
-            "fromDate.month": {
-              "type": "integer",
-              "description": "Month of date. Must be from 1 to 12.",
-              "location": "query",
-              "format": "int32"
             },
-            "toDate.month": {
-              "description": "Month of date. Must be from 1 to 12.",
-              "type": "integer",
-              "location": "query",
-              "format": "int32"
-            },
-            "toDate.day": {
-              "location": "query",
-              "format": "int32",
-              "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
-              "type": "integer"
-            },
-            "fromDate.day": {
-              "location": "query",
-              "format": "int32",
-              "type": "integer",
-              "description": "Day of month. Must be from 1 to 31 and valid for the year and month."
-            },
-            "toDate.year": {
-              "format": "int32",
-              "location": "query",
-              "type": "integer",
-              "description": "Year of date. Must be from 1 to 9999."
-            },
-            "fromDate.year": {
-              "format": "int32",
-              "location": "query",
-              "type": "integer",
-              "description": "Year of date. Must be from 1 to 9999."
-            }
-          },
-          "description": "Get the # of search sessions, % of successful sessions with a click query statistics for customer. **Note:** This API requires a standard end user account to execute.",
-          "httpMethod": "GET"
-        },
-        "getIndex": {
-          "description": "Gets indexed item statistics aggreggated across all data sources. This API only returns statistics for previous dates; it doesn't return statistics for the current day. **Note:** This API requires a standard end user account to execute.",
-          "parameters": {
-            "toDate.month": {
-              "format": "int32",
-              "description": "Month of date. Must be from 1 to 12.",
-              "location": "query",
-              "type": "integer"
-            },
-            "fromDate.month": {
-              "format": "int32",
-              "type": "integer",
-              "location": "query",
-              "description": "Month of date. Must be from 1 to 12."
-            },
-            "fromDate.year": {
-              "location": "query",
-              "description": "Year of date. Must be from 1 to 9999.",
-              "format": "int32",
-              "type": "integer"
-            },
-            "fromDate.day": {
-              "location": "query",
-              "format": "int32",
-              "type": "integer",
-              "description": "Day of month. Must be from 1 to 31 and valid for the year and month."
-            },
-            "toDate.day": {
-              "type": "integer",
-              "location": "query",
-              "format": "int32",
-              "description": "Day of month. Must be from 1 to 31 and valid for the year and month."
-            },
-            "toDate.year": {
-              "description": "Year of date. Must be from 1 to 9999.",
-              "location": "query",
-              "format": "int32",
-              "type": "integer"
-            }
-          },
-          "id": "cloudsearch.stats.getIndex",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud_search",
-            "https://www.googleapis.com/auth/cloud_search.stats",
-            "https://www.googleapis.com/auth/cloud_search.stats.indexing"
-          ],
-          "flatPath": "v1/stats/index",
-          "response": {
-            "$ref": "GetCustomerIndexStatsResponse"
-          },
-          "parameterOrder": [],
-          "path": "v1/stats/index",
-          "httpMethod": "GET"
-        },
-        "getQuery": {
-          "flatPath": "v1/stats/query",
-          "description": "Get the query statistics for customer. **Note:** This API requires a standard end user account to execute.",
-          "parameters": {
-            "fromDate.month": {
-              "description": "Month of date. Must be from 1 to 12.",
-              "location": "query",
-              "type": "integer",
-              "format": "int32"
-            },
-            "fromDate.year": {
-              "format": "int32",
-              "type": "integer",
-              "location": "query",
-              "description": "Year of date. Must be from 1 to 9999."
-            },
-            "toDate.year": {
-              "location": "query",
-              "format": "int32",
-              "type": "integer",
-              "description": "Year of date. Must be from 1 to 9999."
-            },
-            "toDate.month": {
-              "type": "integer",
-              "format": "int32",
-              "description": "Month of date. Must be from 1 to 12.",
-              "location": "query"
-            },
-            "fromDate.day": {
-              "location": "query",
-              "format": "int32",
-              "type": "integer",
-              "description": "Day of month. Must be from 1 to 31 and valid for the year and month."
-            },
-            "toDate.day": {
-              "format": "int32",
-              "type": "integer",
-              "location": "query",
-              "description": "Day of month. Must be from 1 to 31 and valid for the year and month."
-            }
-          },
-          "path": "v1/stats/query",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud_search",
-            "https://www.googleapis.com/auth/cloud_search.stats",
-            "https://www.googleapis.com/auth/cloud_search.stats.indexing"
-          ],
-          "id": "cloudsearch.stats.getQuery",
-          "response": {
-            "$ref": "GetCustomerQueryStatsResponse"
-          },
-          "parameterOrder": [],
-          "httpMethod": "GET"
-        },
-        "getUser": {
-          "description": "Get the users statistics for customer. **Note:** This API requires a standard end user account to execute.",
-          "path": "v1/stats/user",
-          "httpMethod": "GET",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "GetCustomerUserStatsResponse"
-          },
-          "flatPath": "v1/stats/user",
-          "id": "cloudsearch.stats.getUser",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud_search",
-            "https://www.googleapis.com/auth/cloud_search.stats",
-            "https://www.googleapis.com/auth/cloud_search.stats.indexing"
-          ],
-          "parameters": {
-            "fromDate.month": {
-              "description": "Month of date. Must be from 1 to 12.",
-              "format": "int32",
-              "location": "query",
-              "type": "integer"
-            },
-            "toDate.month": {
-              "type": "integer",
-              "format": "int32",
-              "location": "query",
-              "description": "Month of date. Must be from 1 to 12."
-            },
-            "fromDate.year": {
-              "location": "query",
-              "type": "integer",
-              "format": "int32",
-              "description": "Year of date. Must be from 1 to 9999."
-            },
-            "toDate.year": {
-              "type": "integer",
-              "location": "query",
-              "format": "int32",
-              "description": "Year of date. Must be from 1 to 9999."
-            },
-            "toDate.day": {
-              "format": "int32",
-              "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
-              "type": "integer",
-              "location": "query"
-            },
-            "fromDate.day": {
-              "format": "int32",
-              "type": "integer",
-              "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
-              "location": "query"
-            }
-          }
-        }
-      }
-    },
-    "media": {
-      "methods": {
-        "upload": {
-          "response": {
-            "$ref": "Media"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud_search",
-            "https://www.googleapis.com/auth/cloud_search.indexing"
-          ],
-          "supportsMediaUpload": true,
-          "id": "cloudsearch.media.upload",
-          "flatPath": "v1/media/{mediaId}",
-          "parameterOrder": [
-            "resourceName"
-          ],
-          "request": {
-            "$ref": "Media"
-          },
-          "path": "v1/media/{+resourceName}",
-          "parameters": {
-            "resourceName": {
-              "pattern": "^.*$",
-              "type": "string",
-              "description": "Name of the media that is being downloaded. See ReadRequest.resource_name.",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "description": "Uploads media for indexing. The upload endpoint supports direct and resumable upload protocols and is intended for large items that can not be [inlined during index requests](https://developers.google.com/cloud-search/docs/reference/rest/v1/indexing.datasources.items#itemcontent). To index large content: 1. Call indexing.datasources.items.upload with the item name to begin an upload session and retrieve the UploadItemRef. 1. Call media.upload to upload the content, as a streaming request, using the same resource name from the UploadItemRef from step 1. 1. Call indexing.datasources.items.index to index the item. Populate the [ItemContent](/cloud-search/docs/reference/rest/v1/indexing.datasources.items#ItemContent) with the UploadItemRef from step 1. For additional information, see [Create a content connector using the REST API](https://developers.google.com/cloud-search/docs/guides/content-connector#rest). **Note:** This API requires a service account to execute.",
-          "mediaUpload": {
-            "protocols": {
-              "simple": {
-                "multipart": true,
-                "path": "/upload/v1/media/{+resourceName}"
-              }
-            },
-            "accept": [
-              "*/*"
-            ]
-          },
-          "httpMethod": "POST"
-        }
-      }
-    },
-    "indexing": {
-      "resources": {
-        "datasources": {
-          "resources": {
-            "items": {
-              "methods": {
-                "deleteQueueItems": {
-                  "description": "Deletes all items in a queue. This method is useful for deleting stale items. This API requires an admin or service account to execute. The service account used is the one whitelisted in the corresponding data source.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud_search",
-                    "https://www.googleapis.com/auth/cloud_search.indexing"
-                  ],
-                  "path": "v1/indexing/{+name}/items:deleteQueueItems",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "request": {
-                    "$ref": "DeleteQueueItemsRequest"
-                  },
-                  "parameters": {
-                    "name": {
-                      "description": "Name of the Data Source to delete items in a queue. Format: datasources/{source_id}",
-                      "type": "string",
-                      "pattern": "^datasources/[^/]+$",
-                      "required": true,
-                      "location": "path"
+            "resources": {
+                "sources": {
+                    "methods": {
+                        "list": {
+                            "description": "Returns list of sources that user can use for Search and Suggest APIs. **Note:** This API requires a standard end user account to execute. A service account can't perform Query API requests directly; to use a service account to perform queries, set up [G Suite domain-wide delegation of authority](https://developers.google.com/cloud-search/docs/guides/delegation/).",
+                            "flatPath": "v1/query/sources",
+                            "httpMethod": "GET",
+                            "id": "cloudsearch.query.sources.list",
+                            "parameterOrder": [],
+                            "parameters": {
+                                "pageToken": {
+                                    "description": "Number of sources to return in the response.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "requestOptions.debugOptions.enableDebugging": {
+                                    "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "requestOptions.languageCode": {
+                                    "description": "The BCP-47 language code, such as \"en-US\" or \"sr-Latn\". For more information, see http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. For translations. Set this field using the language set in browser or for the page. In the event that the user's language preference is known, set this field to the known user language. When specified, the documents in search results are biased towards the specified language. The suggest API does not use this parameter. Instead, suggest autocompletes only based on characters in the query.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "requestOptions.searchApplicationId": {
+                                    "description": "The ID generated when you create a search application using the [admin console](https://support.google.com/a/answer/9043922).",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "requestOptions.timeZone": {
+                                    "description": "Current user's time zone id, such as \"America/Los_Angeles\" or \"Australia/Sydney\". These IDs are defined by [Unicode Common Locale Data Repository (CLDR)](http://cldr.unicode.org/) project, and currently available in the file [timezone.xml](http://unicode.org/repos/cldr/trunk/common/bcp47/timezone.xml). This field is used to correctly interpret date and time queries. If this field is not specified, the default time zone (UTC) is used.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/query/sources",
+                            "response": {
+                                "$ref": "ListQuerySourcesResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud_search",
+                                "https://www.googleapis.com/auth/cloud_search.query"
+                            ]
+                        }
                     }
-                  },
-                  "flatPath": "v1/indexing/datasources/{datasourcesId}/items:deleteQueueItems",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "id": "cloudsearch.indexing.datasources.items.deleteQueueItems",
-                  "httpMethod": "POST"
-                },
-                "poll": {
-                  "response": {
-                    "$ref": "PollItemsResponse"
-                  },
-                  "path": "v1/indexing/{+name}/items:poll",
-                  "flatPath": "v1/indexing/datasources/{datasourcesId}/items:poll",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud_search",
-                    "https://www.googleapis.com/auth/cloud_search.indexing"
-                  ],
-                  "description": "Polls for unreserved items from the indexing queue and marks a set as reserved, starting with items that have the oldest timestamp from the highest priority ItemStatus. The priority order is as follows: ERROR MODIFIED NEW_ITEM ACCEPTED Reserving items ensures that polling from other threads cannot create overlapping sets. After handling the reserved items, the client should put items back into the unreserved state, either by calling index, or by calling push with the type REQUEUE. Items automatically become available (unreserved) after 4 hours even if no update or push method is called. This API requires an admin or service account to execute. The service account used is the one whitelisted in the corresponding data source.",
-                  "id": "cloudsearch.indexing.datasources.items.poll",
-                  "request": {
-                    "$ref": "PollItemsRequest"
-                  },
-                  "parameters": {
-                    "name": {
-                      "location": "path",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^datasources/[^/]+$",
-                      "description": "Name of the Data Source to poll items. Format: datasources/{source_id}"
+                }
+            }
+        },
+        "settings": {
+            "resources": {
+                "datasources": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a datasource. **Note:** This API requires an admin account to execute.",
+                            "flatPath": "v1/settings/datasources",
+                            "httpMethod": "POST",
+                            "id": "cloudsearch.settings.datasources.create",
+                            "parameterOrder": [],
+                            "parameters": {},
+                            "path": "v1/settings/datasources",
+                            "request": {
+                                "$ref": "DataSource"
+                            },
+                            "response": {
+                                "$ref": "Operation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud_search",
+                                "https://www.googleapis.com/auth/cloud_search.settings",
+                                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes a datasource. **Note:** This API requires an admin account to execute.",
+                            "flatPath": "v1/settings/datasources/{datasourcesId}",
+                            "httpMethod": "DELETE",
+                            "id": "cloudsearch.settings.datasources.delete",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "debugOptions.enableDebugging": {
+                                    "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "name": {
+                                    "description": "Name of the datasource. Format: datasources/{source_id}.",
+                                    "location": "path",
+                                    "pattern": "^datasources/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/settings/{+name}",
+                            "response": {
+                                "$ref": "Operation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud_search",
+                                "https://www.googleapis.com/auth/cloud_search.settings",
+                                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets a datasource. **Note:** This API requires an admin account to execute.",
+                            "flatPath": "v1/settings/datasources/{datasourcesId}",
+                            "httpMethod": "GET",
+                            "id": "cloudsearch.settings.datasources.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "debugOptions.enableDebugging": {
+                                    "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "name": {
+                                    "description": "Name of the datasource resource. Format: datasources/{source_id}.",
+                                    "location": "path",
+                                    "pattern": "^datasources/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/settings/{+name}",
+                            "response": {
+                                "$ref": "DataSource"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud_search",
+                                "https://www.googleapis.com/auth/cloud_search.settings",
+                                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists datasources. **Note:** This API requires an admin account to execute.",
+                            "flatPath": "v1/settings/datasources",
+                            "httpMethod": "GET",
+                            "id": "cloudsearch.settings.datasources.list",
+                            "parameterOrder": [],
+                            "parameters": {
+                                "debugOptions.enableDebugging": {
+                                    "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "pageSize": {
+                                    "description": "Maximum number of datasources to fetch in a request. The max value is 100. The default value is 10",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Starting index of the results.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/settings/datasources",
+                            "response": {
+                                "$ref": "ListDataSourceResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud_search",
+                                "https://www.googleapis.com/auth/cloud_search.settings",
+                                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates a datasource. **Note:** This API requires an admin account to execute.",
+                            "flatPath": "v1/settings/datasources/{datasourcesId}",
+                            "httpMethod": "PUT",
+                            "id": "cloudsearch.settings.datasources.update",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Name of the datasource resource. Format: datasources/{source_id}. The name is ignored when creating a datasource.",
+                                    "location": "path",
+                                    "pattern": "^datasources/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/settings/{+name}",
+                            "request": {
+                                "$ref": "UpdateDataSourceRequest"
+                            },
+                            "response": {
+                                "$ref": "Operation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud_search",
+                                "https://www.googleapis.com/auth/cloud_search.settings",
+                                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+                            ]
+                        }
                     }
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "POST"
                 },
-                "unreserve": {
-                  "id": "cloudsearch.indexing.datasources.items.unreserve",
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "location": "path",
-                      "pattern": "^datasources/[^/]+$",
-                      "description": "Name of the Data Source to unreserve all items. Format: datasources/{source_id}",
-                      "required": true,
-                      "type": "string"
+                "searchapplications": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a search application. **Note:** This API requires an admin account to execute.",
+                            "flatPath": "v1/settings/searchapplications",
+                            "httpMethod": "POST",
+                            "id": "cloudsearch.settings.searchapplications.create",
+                            "parameterOrder": [],
+                            "parameters": {},
+                            "path": "v1/settings/searchapplications",
+                            "request": {
+                                "$ref": "SearchApplication"
+                            },
+                            "response": {
+                                "$ref": "Operation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud_search",
+                                "https://www.googleapis.com/auth/cloud_search.settings",
+                                "https://www.googleapis.com/auth/cloud_search.settings.query"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes a search application. **Note:** This API requires an admin account to execute.",
+                            "flatPath": "v1/settings/searchapplications/{searchapplicationsId}",
+                            "httpMethod": "DELETE",
+                            "id": "cloudsearch.settings.searchapplications.delete",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "debugOptions.enableDebugging": {
+                                    "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "name": {
+                                    "description": "The name of the search application to be deleted. Format: applications/{application_id}.",
+                                    "location": "path",
+                                    "pattern": "^searchapplications/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/settings/{+name}",
+                            "response": {
+                                "$ref": "Operation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud_search",
+                                "https://www.googleapis.com/auth/cloud_search.settings",
+                                "https://www.googleapis.com/auth/cloud_search.settings.query"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets the specified search application. **Note:** This API requires an admin account to execute.",
+                            "flatPath": "v1/settings/searchapplications/{searchapplicationsId}",
+                            "httpMethod": "GET",
+                            "id": "cloudsearch.settings.searchapplications.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "debugOptions.enableDebugging": {
+                                    "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "name": {
+                                    "description": "Name of the search application. Format: searchapplications/{application_id}.",
+                                    "location": "path",
+                                    "pattern": "^searchapplications/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/settings/{+name}",
+                            "response": {
+                                "$ref": "SearchApplication"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud_search",
+                                "https://www.googleapis.com/auth/cloud_search.settings",
+                                "https://www.googleapis.com/auth/cloud_search.settings.query"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists all search applications. **Note:** This API requires an admin account to execute.",
+                            "flatPath": "v1/settings/searchapplications",
+                            "httpMethod": "GET",
+                            "id": "cloudsearch.settings.searchapplications.list",
+                            "parameterOrder": [],
+                            "parameters": {
+                                "debugOptions.enableDebugging": {
+                                    "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "pageSize": {
+                                    "description": "The maximum number of items to return.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The next_page_token value returned from a previous List request, if any. The default value is 10",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/settings/searchapplications",
+                            "response": {
+                                "$ref": "ListSearchApplicationsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud_search",
+                                "https://www.googleapis.com/auth/cloud_search.settings",
+                                "https://www.googleapis.com/auth/cloud_search.settings.query"
+                            ]
+                        },
+                        "reset": {
+                            "description": "Resets a search application to default settings. This will return an empty response. **Note:** This API requires an admin account to execute.",
+                            "flatPath": "v1/settings/searchapplications/{searchapplicationsId}:reset",
+                            "httpMethod": "POST",
+                            "id": "cloudsearch.settings.searchapplications.reset",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "The name of the search application to be reset. Format: applications/{application_id}.",
+                                    "location": "path",
+                                    "pattern": "^searchapplications/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/settings/{+name}:reset",
+                            "request": {
+                                "$ref": "ResetSearchApplicationRequest"
+                            },
+                            "response": {
+                                "$ref": "Operation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud_search",
+                                "https://www.googleapis.com/auth/cloud_search.settings",
+                                "https://www.googleapis.com/auth/cloud_search.settings.query"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates a search application. **Note:** This API requires an admin account to execute.",
+                            "flatPath": "v1/settings/searchapplications/{searchapplicationsId}",
+                            "httpMethod": "PUT",
+                            "id": "cloudsearch.settings.searchapplications.update",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Name of the Search Application. Format: searchapplications/{application_id}.",
+                                    "location": "path",
+                                    "pattern": "^searchapplications/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/settings/{+name}",
+                            "request": {
+                                "$ref": "SearchApplication"
+                            },
+                            "response": {
+                                "$ref": "Operation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud_search",
+                                "https://www.googleapis.com/auth/cloud_search.settings",
+                                "https://www.googleapis.com/auth/cloud_search.settings.query"
+                            ]
+                        }
                     }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud_search",
-                    "https://www.googleapis.com/auth/cloud_search.indexing"
-                  ],
-                  "flatPath": "v1/indexing/datasources/{datasourcesId}/items:unreserve",
-                  "path": "v1/indexing/{+name}/items:unreserve",
-                  "request": {
-                    "$ref": "UnreserveItemsRequest"
-                  },
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "description": "Unreserves all items from a queue, making them all eligible to be polled. This method is useful for resetting the indexing queue after a connector has been restarted. This API requires an admin or service account to execute. The service account used is the one whitelisted in the corresponding data source."
-                },
-                "get": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud_search",
-                    "https://www.googleapis.com/auth/cloud_search.indexing"
-                  ],
-                  "parameters": {
-                    "debugOptions.enableDebugging": {
-                      "location": "query",
-                      "type": "boolean",
-                      "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field."
+                }
+            }
+        },
+        "stats": {
+            "methods": {
+                "getIndex": {
+                    "description": "Gets indexed item statistics aggreggated across all data sources. This API only returns statistics for previous dates; it doesn't return statistics for the current day. **Note:** This API requires a standard end user account to execute.",
+                    "flatPath": "v1/stats/index",
+                    "httpMethod": "GET",
+                    "id": "cloudsearch.stats.getIndex",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "fromDate.day": {
+                            "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "fromDate.month": {
+                            "description": "Month of date. Must be from 1 to 12.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "fromDate.year": {
+                            "description": "Year of date. Must be from 1 to 9999.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "toDate.day": {
+                            "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "toDate.month": {
+                            "description": "Month of date. Must be from 1 to 12.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "toDate.year": {
+                            "description": "Year of date. Must be from 1 to 9999.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        }
                     },
-                    "connectorName": {
-                      "description": "Name of connector making this call. Format: datasources/{source_id}/connectors/{ID}",
-                      "location": "query",
-                      "type": "string"
+                    "path": "v1/stats/index",
+                    "response": {
+                        "$ref": "GetCustomerIndexStatsResponse"
                     },
-                    "name": {
-                      "description": "Name of the item to get info. Format: datasources/{source_id}/items/{item_id}",
-                      "pattern": "^datasources/[^/]+/items/[^/]+$",
-                      "required": true,
-                      "location": "path",
-                      "type": "string"
-                    }
-                  },
-                  "flatPath": "v1/indexing/datasources/{datasourcesId}/items/{itemsId}",
-                  "id": "cloudsearch.indexing.datasources.items.get",
-                  "description": "Gets Item resource by item name. This API requires an admin or service account to execute. The service account used is the one whitelisted in the corresponding data source.",
-                  "httpMethod": "GET",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "path": "v1/indexing/{+name}",
-                  "response": {
-                    "$ref": "Item"
-                  }
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud_search",
+                        "https://www.googleapis.com/auth/cloud_search.stats",
+                        "https://www.googleapis.com/auth/cloud_search.stats.indexing"
+                    ]
                 },
-                "delete": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud_search",
-                    "https://www.googleapis.com/auth/cloud_search.indexing"
-                  ],
-                  "id": "cloudsearch.indexing.datasources.items.delete",
-                  "flatPath": "v1/indexing/datasources/{datasourcesId}/items/{itemsId}",
-                  "parameters": {
-                    "mode": {
-                      "type": "string",
-                      "enum": [
+                "getQuery": {
+                    "description": "Get the query statistics for customer. **Note:** This API requires a standard end user account to execute.",
+                    "flatPath": "v1/stats/query",
+                    "httpMethod": "GET",
+                    "id": "cloudsearch.stats.getQuery",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "fromDate.day": {
+                            "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "fromDate.month": {
+                            "description": "Month of date. Must be from 1 to 12.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "fromDate.year": {
+                            "description": "Year of date. Must be from 1 to 9999.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "toDate.day": {
+                            "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "toDate.month": {
+                            "description": "Month of date. Must be from 1 to 12.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "toDate.year": {
+                            "description": "Year of date. Must be from 1 to 9999.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        }
+                    },
+                    "path": "v1/stats/query",
+                    "response": {
+                        "$ref": "GetCustomerQueryStatsResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud_search",
+                        "https://www.googleapis.com/auth/cloud_search.stats",
+                        "https://www.googleapis.com/auth/cloud_search.stats.indexing"
+                    ]
+                },
+                "getSession": {
+                    "description": "Get the # of search sessions, % of successful sessions with a click query statistics for customer. **Note:** This API requires a standard end user account to execute.",
+                    "flatPath": "v1/stats/session",
+                    "httpMethod": "GET",
+                    "id": "cloudsearch.stats.getSession",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "fromDate.day": {
+                            "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "fromDate.month": {
+                            "description": "Month of date. Must be from 1 to 12.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "fromDate.year": {
+                            "description": "Year of date. Must be from 1 to 9999.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "toDate.day": {
+                            "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "toDate.month": {
+                            "description": "Month of date. Must be from 1 to 12.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "toDate.year": {
+                            "description": "Year of date. Must be from 1 to 9999.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        }
+                    },
+                    "path": "v1/stats/session",
+                    "response": {
+                        "$ref": "GetCustomerSessionStatsResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud_search",
+                        "https://www.googleapis.com/auth/cloud_search.stats",
+                        "https://www.googleapis.com/auth/cloud_search.stats.indexing"
+                    ]
+                },
+                "getUser": {
+                    "description": "Get the users statistics for customer. **Note:** This API requires a standard end user account to execute.",
+                    "flatPath": "v1/stats/user",
+                    "httpMethod": "GET",
+                    "id": "cloudsearch.stats.getUser",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "fromDate.day": {
+                            "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "fromDate.month": {
+                            "description": "Month of date. Must be from 1 to 12.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "fromDate.year": {
+                            "description": "Year of date. Must be from 1 to 9999.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "toDate.day": {
+                            "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "toDate.month": {
+                            "description": "Month of date. Must be from 1 to 12.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "toDate.year": {
+                            "description": "Year of date. Must be from 1 to 9999.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        }
+                    },
+                    "path": "v1/stats/user",
+                    "response": {
+                        "$ref": "GetCustomerUserStatsResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud_search",
+                        "https://www.googleapis.com/auth/cloud_search.stats",
+                        "https://www.googleapis.com/auth/cloud_search.stats.indexing"
+                    ]
+                }
+            },
+            "resources": {
+                "index": {
+                    "resources": {
+                        "datasources": {
+                            "methods": {
+                                "get": {
+                                    "description": "Gets indexed item statistics for a single data source. **Note:** This API requires a standard end user account to execute.",
+                                    "flatPath": "v1/stats/index/datasources/{datasourcesId}",
+                                    "httpMethod": "GET",
+                                    "id": "cloudsearch.stats.index.datasources.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "fromDate.day": {
+                                            "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "fromDate.month": {
+                                            "description": "Month of date. Must be from 1 to 12.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "fromDate.year": {
+                                            "description": "Year of date. Must be from 1 to 9999.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "name": {
+                                            "description": "The resource id of the data source to retrieve statistics for, in the following format: \"datasources/{source_id}\"",
+                                            "location": "path",
+                                            "pattern": "^datasources/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "toDate.day": {
+                                            "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "toDate.month": {
+                                            "description": "Month of date. Must be from 1 to 12.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "toDate.year": {
+                                            "description": "Year of date. Must be from 1 to 9999.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        }
+                                    },
+                                    "path": "v1/stats/index/{+name}",
+                                    "response": {
+                                        "$ref": "GetDataSourceIndexStatsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud_search",
+                                        "https://www.googleapis.com/auth/cloud_search.stats",
+                                        "https://www.googleapis.com/auth/cloud_search.stats.indexing"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                },
+                "query": {
+                    "resources": {
+                        "searchapplications": {
+                            "methods": {
+                                "get": {
+                                    "description": "Get the query statistics for search application. **Note:** This API requires a standard end user account to execute.",
+                                    "flatPath": "v1/stats/query/searchapplications/{searchapplicationsId}",
+                                    "httpMethod": "GET",
+                                    "id": "cloudsearch.stats.query.searchapplications.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "fromDate.day": {
+                                            "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "fromDate.month": {
+                                            "description": "Month of date. Must be from 1 to 12.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "fromDate.year": {
+                                            "description": "Year of date. Must be from 1 to 9999.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "name": {
+                                            "description": "The resource id of the search application query stats, in the following format: searchapplications/{application_id}",
+                                            "location": "path",
+                                            "pattern": "^searchapplications/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "toDate.day": {
+                                            "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "toDate.month": {
+                                            "description": "Month of date. Must be from 1 to 12.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "toDate.year": {
+                                            "description": "Year of date. Must be from 1 to 9999.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        }
+                                    },
+                                    "path": "v1/stats/query/{+name}",
+                                    "response": {
+                                        "$ref": "GetSearchApplicationQueryStatsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud_search",
+                                        "https://www.googleapis.com/auth/cloud_search.stats",
+                                        "https://www.googleapis.com/auth/cloud_search.stats.indexing"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                },
+                "session": {
+                    "resources": {
+                        "searchapplications": {
+                            "methods": {
+                                "get": {
+                                    "description": "Get the # of search sessions, % of successful sessions with a click query statistics for search application. **Note:** This API requires a standard end user account to execute.",
+                                    "flatPath": "v1/stats/session/searchapplications/{searchapplicationsId}",
+                                    "httpMethod": "GET",
+                                    "id": "cloudsearch.stats.session.searchapplications.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "fromDate.day": {
+                                            "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "fromDate.month": {
+                                            "description": "Month of date. Must be from 1 to 12.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "fromDate.year": {
+                                            "description": "Year of date. Must be from 1 to 9999.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "name": {
+                                            "description": "The resource id of the search application session stats, in the following format: searchapplications/{application_id}",
+                                            "location": "path",
+                                            "pattern": "^searchapplications/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "toDate.day": {
+                                            "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "toDate.month": {
+                                            "description": "Month of date. Must be from 1 to 12.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "toDate.year": {
+                                            "description": "Year of date. Must be from 1 to 9999.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        }
+                                    },
+                                    "path": "v1/stats/session/{+name}",
+                                    "response": {
+                                        "$ref": "GetSearchApplicationSessionStatsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud_search",
+                                        "https://www.googleapis.com/auth/cloud_search.stats",
+                                        "https://www.googleapis.com/auth/cloud_search.stats.indexing"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                },
+                "user": {
+                    "resources": {
+                        "searchapplications": {
+                            "methods": {
+                                "get": {
+                                    "description": "Get the users statistics for search application. **Note:** This API requires a standard end user account to execute.",
+                                    "flatPath": "v1/stats/user/searchapplications/{searchapplicationsId}",
+                                    "httpMethod": "GET",
+                                    "id": "cloudsearch.stats.user.searchapplications.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "fromDate.day": {
+                                            "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "fromDate.month": {
+                                            "description": "Month of date. Must be from 1 to 12.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "fromDate.year": {
+                                            "description": "Year of date. Must be from 1 to 9999.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "name": {
+                                            "description": "The resource id of the search application session stats, in the following format: searchapplications/{application_id}",
+                                            "location": "path",
+                                            "pattern": "^searchapplications/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "toDate.day": {
+                                            "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "toDate.month": {
+                                            "description": "Month of date. Must be from 1 to 12.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "toDate.year": {
+                                            "description": "Year of date. Must be from 1 to 9999.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        }
+                                    },
+                                    "path": "v1/stats/user/{+name}",
+                                    "response": {
+                                        "$ref": "GetSearchApplicationUserStatsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud_search",
+                                        "https://www.googleapis.com/auth/cloud_search.stats",
+                                        "https://www.googleapis.com/auth/cloud_search.stats.indexing"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    },
+    "revision": "20201231",
+    "rootUrl": "https://cloudsearch.googleapis.com/",
+    "schemas": {
+        "BooleanOperatorOptions": {
+            "description": "Used to provide a search operator for boolean properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched.",
+            "id": "BooleanOperatorOptions",
+            "properties": {
+                "operatorName": {
+                    "description": "Indicates the operator name required in the query in order to isolate the boolean property. For example, if operatorName is *closed* and the property's name is *isClosed*, then queries like *closed:<value>* show results only where the value of the property named *isClosed* matches *<value>*. By contrast, a search that uses the same *<value>* without an operator returns all items where *<value>* matches the value of any String properties or text within the content field for the item. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "BooleanPropertyOptions": {
+            "description": "Options for boolean properties.",
+            "id": "BooleanPropertyOptions",
+            "properties": {
+                "operatorOptions": {
+                    "$ref": "BooleanOperatorOptions",
+                    "description": "If set, describes how the boolean should be used as a search operator."
+                }
+            },
+            "type": "object"
+        },
+        "CheckAccessResponse": {
+            "id": "CheckAccessResponse",
+            "properties": {
+                "hasAccess": {
+                    "description": "Returns true if principal has access. Returns false otherwise.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "CompositeFilter": {
+            "id": "CompositeFilter",
+            "properties": {
+                "logicOperator": {
+                    "description": "The logic operator of the sub filter.",
+                    "enum": [
+                        "AND",
+                        "OR",
+                        "NOT"
+                    ],
+                    "enumDescriptions": [
+                        "Logical operators, which can only be applied to sub filters.",
+                        "",
+                        "NOT can only be applied on a single sub filter."
+                    ],
+                    "type": "string"
+                },
+                "subFilters": {
+                    "description": "Sub filters.",
+                    "items": {
+                        "$ref": "Filter"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "CustomerIndexStats": {
+            "description": "Aggregation of items by status code as of the specified date.",
+            "id": "CustomerIndexStats",
+            "properties": {
+                "date": {
+                    "$ref": "Date",
+                    "description": "Date for which statistics were calculated."
+                },
+                "itemCountByStatus": {
+                    "description": "Number of items aggregrated by status code.",
+                    "items": {
+                        "$ref": "ItemCountByStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "CustomerQueryStats": {
+            "id": "CustomerQueryStats",
+            "properties": {
+                "date": {
+                    "$ref": "Date",
+                    "description": "Date for which query stats were calculated. Stats calculated on the next day close to midnight are returned."
+                },
+                "queryCountByStatus": {
+                    "items": {
+                        "$ref": "QueryCountByStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "CustomerSessionStats": {
+            "id": "CustomerSessionStats",
+            "properties": {
+                "date": {
+                    "$ref": "Date",
+                    "description": "Date for which session stats were calculated. Stats calculated on the next day close to midnight are returned."
+                },
+                "searchSessionsCount": {
+                    "description": "The count of search sessions on the day",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CustomerUserStats": {
+            "id": "CustomerUserStats",
+            "properties": {
+                "date": {
+                    "$ref": "Date",
+                    "description": "Date for which session stats were calculated. Stats calculated on the next day close to midnight are returned."
+                },
+                "oneDayActiveUsersCount": {
+                    "description": "The count of unique active users in the past one day",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "sevenDaysActiveUsersCount": {
+                    "description": "The count of unique active users in the past seven days",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "thirtyDaysActiveUsersCount": {
+                    "description": "The count of unique active users in the past thirty days",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DataSource": {
+            "description": "Datasource is a logical namespace for items to be indexed. All items must belong to a datasource. This is the prerequisite before items can be indexed into Cloud Search.",
+            "id": "DataSource",
+            "properties": {
+                "disableModifications": {
+                    "description": "If true, sets the datasource to read-only mode. In read-only mode, the Indexing API rejects any requests to index or delete items in this source. Enabling read-only mode does not stop the processing of previously accepted data.",
+                    "type": "boolean"
+                },
+                "disableServing": {
+                    "description": "Disable serving any search or assist results.",
+                    "type": "boolean"
+                },
+                "displayName": {
+                    "description": "Required. Display name of the datasource The maximum length is 300 characters.",
+                    "type": "string"
+                },
+                "indexingServiceAccounts": {
+                    "description": "List of service accounts that have indexing access.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "itemsVisibility": {
+                    "description": "This field restricts visibility to items at the datasource level. Items within the datasource are restricted to the union of users and groups included in this field. Note that, this does not ensure access to a specific item, as users need to have ACL permissions on the contained items. This ensures a high level access on the entire datasource, and that the individual items are not shared outside this visibility.",
+                    "items": {
+                        "$ref": "GSuitePrincipal"
+                    },
+                    "type": "array"
+                },
+                "name": {
+                    "description": "Name of the datasource resource. Format: datasources/{source_id}. The name is ignored when creating a datasource.",
+                    "type": "string"
+                },
+                "operationIds": {
+                    "description": "IDs of the Long Running Operations (LROs) currently running for this schema.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "shortName": {
+                    "description": "A short name or alias for the source. This value will be used to match the 'source' operator. For example, if the short name is *<value>* then queries like *source:<value>* will only return results for this source. The value must be unique across all datasources. The value must only contain alphanumeric characters (a-zA-Z0-9). The value cannot start with 'google' and cannot be one of the following: mail, gmail, docs, drive, groups, sites, calendar, hangouts, gplus, keep, people, teams. Its maximum length is 32 characters.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DataSourceIndexStats": {
+            "description": "Aggregation of items by status code as of the specified date.",
+            "id": "DataSourceIndexStats",
+            "properties": {
+                "date": {
+                    "$ref": "Date",
+                    "description": "Date for which index stats were calculated. If the date of request is not the current date then stats calculated on the next day are returned. Stats are calculated close to mid night in this case. If date of request is current date, then real time stats are returned."
+                },
+                "itemCountByStatus": {
+                    "description": "Number of items aggregrated by status code.",
+                    "items": {
+                        "$ref": "ItemCountByStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "DataSourceRestriction": {
+            "description": "Restriction on Datasource.",
+            "id": "DataSourceRestriction",
+            "properties": {
+                "filterOptions": {
+                    "description": "Filter options restricting the results. If multiple filters are present, they are grouped by object type before joining. Filters with the same object type are joined conjunctively, then the resulting expressions are joined disjunctively. The maximum number of elements is 20. NOTE: Suggest API supports only few filters at the moment: \"objecttype\", \"type\" and \"mimetype\". For now, schema specific filters cannot be used to filter suggestions.",
+                    "items": {
+                        "$ref": "FilterOptions"
+                    },
+                    "type": "array"
+                },
+                "source": {
+                    "$ref": "Source",
+                    "description": "The source of restriction."
+                }
+            },
+            "type": "object"
+        },
+        "Date": {
+            "description": "Represents a whole calendar date, for example a date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the [Proleptic Gregorian Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar). The date must be a valid calendar date between the year 1 and 9999.",
+            "id": "Date",
+            "properties": {
+                "day": {
+                    "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "month": {
+                    "description": "Month of date. Must be from 1 to 12.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "year": {
+                    "description": "Year of date. Must be from 1 to 9999.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "DateOperatorOptions": {
+            "description": "Optional. Provides a search operator for date properties. Search operators let users restrict the query to specific fields relevant to the type of item being searched.",
+            "id": "DateOperatorOptions",
+            "properties": {
+                "greaterThanOperatorName": {
+                    "description": "Indicates the operator name required in the query in order to isolate the date property using the greater-than operator. For example, if greaterThanOperatorName is *closedafter* and the property's name is *closeDate*, then queries like *closedafter:<value>* show results only where the value of the property named *closeDate* is later than *<value>*. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.",
+                    "type": "string"
+                },
+                "lessThanOperatorName": {
+                    "description": "Indicates the operator name required in the query in order to isolate the date property using the less-than operator. For example, if lessThanOperatorName is *closedbefore* and the property's name is *closeDate*, then queries like *closedbefore:<value>* show results only where the value of the property named *closeDate* is earlier than *<value>*. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.",
+                    "type": "string"
+                },
+                "operatorName": {
+                    "description": "Indicates the actual string required in the query in order to isolate the date property. For example, suppose an issue tracking schema object has a property named *closeDate* that specifies an operator with an operatorName of *closedon*. For searches on that data, queries like *closedon:<value>* show results only where the value of the *closeDate* property matches *<value>*. By contrast, a search that uses the same *<value>* without an operator returns all items where *<value>* matches the value of any String properties or text within the content field for the indexed datasource. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DatePropertyOptions": {
+            "description": "Options for date properties.",
+            "id": "DatePropertyOptions",
+            "properties": {
+                "operatorOptions": {
+                    "$ref": "DateOperatorOptions",
+                    "description": "If set, describes how the date should be used as a search operator."
+                }
+            },
+            "type": "object"
+        },
+        "DateValues": {
+            "description": "List of date values.",
+            "id": "DateValues",
+            "properties": {
+                "values": {
+                    "items": {
+                        "$ref": "Date"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "DebugOptions": {
+            "description": "Shared request debug options for all cloudsearch RPC methods.",
+            "id": "DebugOptions",
+            "properties": {
+                "enableDebugging": {
+                    "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "DeleteQueueItemsRequest": {
+            "id": "DeleteQueueItemsRequest",
+            "properties": {
+                "connectorName": {
+                    "description": "Name of connector making this call. Format: datasources/{source_id}/connectors/{ID}",
+                    "type": "string"
+                },
+                "debugOptions": {
+                    "$ref": "DebugOptions",
+                    "description": "Common debug options."
+                },
+                "queue": {
+                    "description": "Name of a queue to delete items from.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DisplayedProperty": {
+            "description": "A reference to a top-level property within the object that should be displayed in search results. The values of the chosen properties is displayed in the search results along with the display label for that property if one is specified. If a display label is not specified, only the values is shown.",
+            "id": "DisplayedProperty",
+            "properties": {
+                "propertyName": {
+                    "description": "The name of the top-level property as defined in a property definition for the object. If the name is not a defined property in the schema, an error is given when attempting to update the schema.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DoubleOperatorOptions": {
+            "description": "Used to provide a search operator for double properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched.",
+            "id": "DoubleOperatorOptions",
+            "properties": {
+                "operatorName": {
+                    "description": "Indicates the operator name required in the query in order to use the double property in sorting or as a facet. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DoublePropertyOptions": {
+            "description": "Options for double properties.",
+            "id": "DoublePropertyOptions",
+            "properties": {
+                "operatorOptions": {
+                    "$ref": "DoubleOperatorOptions",
+                    "description": "If set, describes how the double should be used as a search operator."
+                }
+            },
+            "type": "object"
+        },
+        "DoubleValues": {
+            "description": "List of double values.",
+            "id": "DoubleValues",
+            "properties": {
+                "values": {
+                    "items": {
+                        "format": "double",
+                        "type": "number"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "DriveFollowUpRestrict": {
+            "description": "Drive follow-up search restricts (e.g. \"followup:suggestions\").",
+            "id": "DriveFollowUpRestrict",
+            "properties": {
+                "type": {
+                    "enum": [
+                        "UNSPECIFIED",
+                        "FOLLOWUP_SUGGESTIONS",
+                        "FOLLOWUP_ACTION_ITEMS"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DriveLocationRestrict": {
+            "description": "Drive location search restricts (e.g. \"is:starred\").",
+            "id": "DriveLocationRestrict",
+            "properties": {
+                "type": {
+                    "enum": [
+                        "UNSPECIFIED",
+                        "TRASHED",
+                        "STARRED"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DriveMimeTypeRestrict": {
+            "description": "Drive mime-type search restricts (e.g. \"type:pdf\").",
+            "id": "DriveMimeTypeRestrict",
+            "properties": {
+                "type": {
+                    "enum": [
+                        "UNSPECIFIED",
+                        "PDF",
+                        "DOCUMENT",
+                        "PRESENTATION",
+                        "SPREADSHEET",
+                        "FORM",
+                        "DRAWING",
+                        "SCRIPT",
+                        "MAP",
+                        "IMAGE",
+                        "AUDIO",
+                        "VIDEO",
+                        "FOLDER",
+                        "ARCHIVE",
+                        "SITE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DriveTimeSpanRestrict": {
+            "description": "The time span search restrict (e.g. \"after:2017-09-11 before:2017-09-12\").",
+            "id": "DriveTimeSpanRestrict",
+            "properties": {
+                "type": {
+                    "enum": [
+                        "UNSPECIFIED",
+                        "TODAY",
+                        "YESTERDAY",
+                        "LAST_7_DAYS",
+                        "LAST_30_DAYS",
+                        "LAST_90_DAYS"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "Not Enabled",
+                        "Not Enabled"
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "EmailAddress": {
+            "description": "A person's email address.",
+            "id": "EmailAddress",
+            "properties": {
+                "emailAddress": {
+                    "description": "The email address.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "EnumOperatorOptions": {
+            "description": "Used to provide a search operator for enum properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched. For example, if you provide no operator for a *priority* enum property with possible values *p0* and *p1*, a query that contains the term *p0* returns items that have *p0* as the value of the *priority* property, as well as any items that contain the string *p0* in other fields. If you provide an operator name for the enum, such as *priority*, then search users can use that operator to refine results to only items that have *p0* as this property's value, with the query *priority:p0*.",
+            "id": "EnumOperatorOptions",
+            "properties": {
+                "operatorName": {
+                    "description": "Indicates the operator name required in the query in order to isolate the enum property. For example, if operatorName is *priority* and the property's name is *priorityVal*, then queries like *priority:<value>* show results only where the value of the property named *priorityVal* matches *<value>*. By contrast, a search that uses the same *<value>* without an operator returns all items where *<value>* matches the value of any String properties or text within the content field for the item. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "EnumPropertyOptions": {
+            "description": "Options for enum properties, which allow you to define a restricted set of strings to match user queries, set rankings for those string values, and define an operator name to be paired with those strings so that users can narrow results to only items with a specific value. For example, for items in a request tracking system with priority information, you could define *p0* as an allowable enum value and tie this enum to the operator name *priority* so that search users could add *priority:p0* to their query to restrict the set of results to only those items indexed with the value *p0*.",
+            "id": "EnumPropertyOptions",
+            "properties": {
+                "operatorOptions": {
+                    "$ref": "EnumOperatorOptions",
+                    "description": "If set, describes how the enum should be used as a search operator."
+                },
+                "orderedRanking": {
+                    "description": "Used to specify the ordered ranking for the enumeration that determines how the integer values provided in the possible EnumValuePairs are used to rank results. If specified, integer values must be provided for all possible EnumValuePair values given for this property. Can only be used if isRepeatable is false.",
+                    "enum": [
+                        "NO_ORDER",
+                        "ASCENDING",
+                        "DESCENDING"
+                    ],
+                    "enumDescriptions": [
+                        "There is no ranking order for the property. Results aren't adjusted by this property's value.",
+                        "This property is ranked in ascending order. Lower values indicate lower ranking.",
+                        "This property is ranked in descending order. Lower values indicate higher ranking."
+                    ],
+                    "type": "string"
+                },
+                "possibleValues": {
+                    "description": "The list of possible values for the enumeration property. All EnumValuePairs must provide a string value. If you specify an integer value for one EnumValuePair, then all possible EnumValuePairs must provide an integer value. Both the string value and integer value must be unique over all possible values. Once set, possible values cannot be removed or modified. If you supply an ordered ranking and think you might insert additional enum values in the future, leave gaps in the initial integer values to allow adding a value in between previously registered values. The maximum number of elements is 100.",
+                    "items": {
+                        "$ref": "EnumValuePair"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "EnumValuePair": {
+            "description": "The enumeration value pair defines two things: a required string value and an optional integer value. The string value defines the necessary query term required to retrieve that item, such as *p0* for a priority item. The integer value determines the ranking of that string value relative to other enumerated values for the same property. For example, you might associate *p0* with *0* and define another enum pair such as *p1* and *1*. You must use the integer value in combination with ordered ranking to set the ranking of a given value relative to other enumerated values for the same property name. Here, a ranking order of DESCENDING for *priority* properties results in a ranking boost for items indexed with a value of *p0* compared to items indexed with a value of *p1*. Without a specified ranking order, the integer value has no effect on item ranking.",
+            "id": "EnumValuePair",
+            "properties": {
+                "integerValue": {
+                    "description": "The integer value of the EnumValuePair which must be non-negative. Optional.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "stringValue": {
+                    "description": "The string value of the EnumValuePair. The maximum length is 32 characters.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "EnumValues": {
+            "description": "List of enum values.",
+            "id": "EnumValues",
+            "properties": {
+                "values": {
+                    "description": "The maximum allowable length for string values is 32 characters.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ErrorInfo": {
+            "description": "Error information about the response.",
+            "id": "ErrorInfo",
+            "properties": {
+                "errorMessages": {
+                    "items": {
+                        "$ref": "ErrorMessage"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ErrorMessage": {
+            "description": "Error message per source response.",
+            "id": "ErrorMessage",
+            "properties": {
+                "errorMessage": {
+                    "type": "string"
+                },
+                "source": {
+                    "$ref": "Source"
+                }
+            },
+            "type": "object"
+        },
+        "FacetBucket": {
+            "description": "A bucket in a facet is the basic unit of operation. A bucket can comprise either a single value OR a contiguous range of values, depending on the type of the field bucketed. FacetBucket is currently used only for returning the response object.",
+            "id": "FacetBucket",
+            "properties": {
+                "count": {
+                    "description": "Number of results that match the bucket value. Counts are only returned for searches when count accuracy is ensured. Can be empty.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "percentage": {
+                    "description": "Percent of results that match the bucket value. The returned value is between (0-100], and is rounded down to an integer if fractional. If the value is not explicitly returned, it represents a percentage value that rounds to 0. Percentages are returned for all searches, but are an estimate. Because percentages are always returned, you should render percentages instead of counts.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "value": {
+                    "$ref": "Value"
+                }
+            },
+            "type": "object"
+        },
+        "FacetOptions": {
+            "description": "Specifies operators to return facet results for. There will be one FacetResult for every source_name/object_type/operator_name combination.",
+            "id": "FacetOptions",
+            "properties": {
+                "numFacetBuckets": {
+                    "description": "Maximum number of facet buckets that should be returned for this facet. Defaults to 10. Maximum value is 100.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "objectType": {
+                    "description": "If object_type is set, only those objects of that type will be used to compute facets. If empty, then all objects will be used to compute facets.",
+                    "type": "string"
+                },
+                "operatorName": {
+                    "description": "Name of the operator chosen for faceting. @see cloudsearch.SchemaPropertyOptions",
+                    "type": "string"
+                },
+                "sourceName": {
+                    "description": "Source name to facet on. Format: datasources/{source_id} If empty, all data sources will be used.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FacetResult": {
+            "description": "Source specific facet response",
+            "id": "FacetResult",
+            "properties": {
+                "buckets": {
+                    "description": "FacetBuckets for values in response containing at least a single result.",
+                    "items": {
+                        "$ref": "FacetBucket"
+                    },
+                    "type": "array"
+                },
+                "objectType": {
+                    "description": "Object type for which facet results are returned. Can be empty.",
+                    "type": "string"
+                },
+                "operatorName": {
+                    "description": "Name of the operator chosen for faceting. @see cloudsearch.SchemaPropertyOptions",
+                    "type": "string"
+                },
+                "sourceName": {
+                    "description": "Source name for which facet results are returned. Will not be empty.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FieldViolation": {
+            "id": "FieldViolation",
+            "properties": {
+                "description": {
+                    "description": "Description of the error.",
+                    "type": "string"
+                },
+                "field": {
+                    "description": "Path of field with violation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Filter": {
+            "description": "A generic way of expressing filters in a query, which supports two approaches: **1. Setting a ValueFilter.** The name must match an operator_name defined in the schema for your data source. **2. Setting a CompositeFilter.** The filters are evaluated using the logical operator. The top-level operators can only be either an AND or a NOT. AND can appear only at the top-most level. OR can appear only under a top-level AND.",
+            "id": "Filter",
+            "properties": {
+                "compositeFilter": {
+                    "$ref": "CompositeFilter"
+                },
+                "valueFilter": {
+                    "$ref": "ValueFilter"
+                }
+            },
+            "type": "object"
+        },
+        "FilterOptions": {
+            "description": "Filter options to be applied on query.",
+            "id": "FilterOptions",
+            "properties": {
+                "filter": {
+                    "$ref": "Filter",
+                    "description": "Generic filter to restrict the search, such as `lang:en`, `site:xyz`."
+                },
+                "objectType": {
+                    "description": "If object_type is set, only objects of that type are returned. This should correspond to the name of the object that was registered within the definition of schema. The maximum length is 256 characters.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FreshnessOptions": {
+            "description": "Indicates which freshness property to use when adjusting search ranking for an item. Fresher, more recent dates indicate higher quality. Use the freshness option property that best works with your data. For fileshare documents, last modified time is most relevant. For calendar event data, the time when the event occurs is a more relevant freshness indicator. In this way, calendar events that occur closer to the time of the search query are considered higher quality and ranked accordingly.",
+            "id": "FreshnessOptions",
+            "properties": {
+                "freshnessDuration": {
+                    "description": "The duration after which an object should be considered stale. The default value is 180 days (in seconds).",
+                    "format": "google-duration",
+                    "type": "string"
+                },
+                "freshnessProperty": {
+                    "description": "This property indicates the freshness level of the object in the index. If set, this property must be a top-level property within the property definitions and it must be a timestamp type or date type. Otherwise, the Indexing API uses updateTime as the freshness indicator. The maximum length is 256 characters. When a property is used to calculate freshness, the value defaults to 2 years from the current time.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GSuitePrincipal": {
+            "id": "GSuitePrincipal",
+            "properties": {
+                "gsuiteDomain": {
+                    "description": "This principal represents all users of the G Suite domain of the customer.",
+                    "type": "boolean"
+                },
+                "gsuiteGroupEmail": {
+                    "description": "This principal references a G Suite group account",
+                    "type": "string"
+                },
+                "gsuiteUserEmail": {
+                    "description": "This principal references a G Suite user account",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GetCustomerIndexStatsResponse": {
+            "id": "GetCustomerIndexStatsResponse",
+            "properties": {
+                "stats": {
+                    "description": "Summary of indexed item counts, one for each day in the requested range.",
+                    "items": {
+                        "$ref": "CustomerIndexStats"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GetCustomerQueryStatsResponse": {
+            "id": "GetCustomerQueryStatsResponse",
+            "properties": {
+                "stats": {
+                    "items": {
+                        "$ref": "CustomerQueryStats"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GetCustomerSessionStatsResponse": {
+            "id": "GetCustomerSessionStatsResponse",
+            "properties": {
+                "stats": {
+                    "items": {
+                        "$ref": "CustomerSessionStats"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GetCustomerUserStatsResponse": {
+            "id": "GetCustomerUserStatsResponse",
+            "properties": {
+                "stats": {
+                    "items": {
+                        "$ref": "CustomerUserStats"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GetDataSourceIndexStatsResponse": {
+            "id": "GetDataSourceIndexStatsResponse",
+            "properties": {
+                "stats": {
+                    "description": "Summary of indexed item counts, one for each day in the requested range.",
+                    "items": {
+                        "$ref": "DataSourceIndexStats"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GetSearchApplicationQueryStatsResponse": {
+            "id": "GetSearchApplicationQueryStatsResponse",
+            "properties": {
+                "stats": {
+                    "items": {
+                        "$ref": "SearchApplicationQueryStats"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GetSearchApplicationSessionStatsResponse": {
+            "id": "GetSearchApplicationSessionStatsResponse",
+            "properties": {
+                "stats": {
+                    "items": {
+                        "$ref": "SearchApplicationSessionStats"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GetSearchApplicationUserStatsResponse": {
+            "id": "GetSearchApplicationUserStatsResponse",
+            "properties": {
+                "stats": {
+                    "items": {
+                        "$ref": "SearchApplicationUserStats"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "HtmlOperatorOptions": {
+            "description": "Used to provide a search operator for html properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched.",
+            "id": "HtmlOperatorOptions",
+            "properties": {
+                "operatorName": {
+                    "description": "Indicates the operator name required in the query in order to isolate the html property. For example, if operatorName is *subject* and the property's name is *subjectLine*, then queries like *subject:<value>* show results only where the value of the property named *subjectLine* matches *<value>*. By contrast, a search that uses the same *<value>* without an operator return all items where *<value>* matches the value of any html properties or text within the content field for the item. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "HtmlPropertyOptions": {
+            "description": "Options for html properties.",
+            "id": "HtmlPropertyOptions",
+            "properties": {
+                "operatorOptions": {
+                    "$ref": "HtmlOperatorOptions",
+                    "description": "If set, describes how the property should be used as a search operator."
+                },
+                "retrievalImportance": {
+                    "$ref": "RetrievalImportance",
+                    "description": "Indicates the search quality importance of the tokens within the field when used for retrieval. Can only be set to DEFAULT or NONE."
+                }
+            },
+            "type": "object"
+        },
+        "HtmlValues": {
+            "description": "List of html values.",
+            "id": "HtmlValues",
+            "properties": {
+                "values": {
+                    "description": "The maximum allowable length for html values is 2048 characters.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "IndexItemOptions": {
+            "id": "IndexItemOptions",
+            "properties": {
+                "allowUnknownGsuitePrincipals": {
+                    "description": "Specifies if the index request should allow gsuite principals that do not exist or are deleted in the index request.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "IndexItemRequest": {
+            "id": "IndexItemRequest",
+            "properties": {
+                "connectorName": {
+                    "description": "Name of connector making this call. Format: datasources/{source_id}/connectors/{ID}",
+                    "type": "string"
+                },
+                "debugOptions": {
+                    "$ref": "DebugOptions",
+                    "description": "Common debug options."
+                },
+                "indexItemOptions": {
+                    "$ref": "IndexItemOptions"
+                },
+                "item": {
+                    "$ref": "Item",
+                    "description": "Name of the item. Format: datasources/{source_id}/items/{item_id}"
+                },
+                "mode": {
+                    "description": "Required. The RequestMode for this request.",
+                    "enum": [
                         "UNSPECIFIED",
                         "SYNCHRONOUS",
                         "ASYNCHRONOUS"
-                      ],
-                      "description": "Required. The RequestMode for this request.",
-                      "enumDescriptions": [
+                    ],
+                    "enumDescriptions": [
                         "Priority is not specified in the update request. Leaving priority unspecified results in an update failure.",
                         "For real-time updates.",
                         "For changes that are executed after the response is sent back to the caller."
-                      ],
-                      "location": "query"
-                    },
-                    "name": {
-                      "pattern": "^datasources/[^/]+/items/[^/]+$",
-                      "description": "Required. Name of the item to delete. Format: datasources/{source_id}/items/{item_id}",
-                      "type": "string",
-                      "location": "path",
-                      "required": true
-                    },
-                    "debugOptions.enableDebugging": {
-                      "type": "boolean",
-                      "location": "query",
-                      "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field."
-                    },
-                    "version": {
-                      "location": "query",
-                      "type": "string",
-                      "description": "Required. The incremented version of the item to delete from the index. The indexing system stores the version from the datasource as a byte string and compares the Item version in the index to the version of the queued Item using lexical ordering. Cloud Search Indexing won't delete any queued item with a version value that is less than or equal to the version of the currently indexed item. The maximum length for this field is 1024 bytes.",
-                      "format": "byte"
-                    },
-                    "connectorName": {
-                      "location": "query",
-                      "type": "string",
-                      "description": "Name of connector making this call. Format: datasources/{source_id}/connectors/{ID}"
-                    }
-                  },
-                  "httpMethod": "DELETE",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "path": "v1/indexing/{+name}",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "description": "Deletes Item resource for the specified resource name. This API requires an admin or service account to execute. The service account used is the one whitelisted in the corresponding data source."
-                },
-                "list": {
-                  "httpMethod": "GET",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud_search",
-                    "https://www.googleapis.com/auth/cloud_search.indexing"
-                  ],
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "description": "Lists all or a subset of Item resources. This API requires an admin or service account to execute. The service account used is the one whitelisted in the corresponding data source.",
-                  "response": {
-                    "$ref": "ListItemsResponse"
-                  },
-                  "path": "v1/indexing/{+name}/items",
-                  "id": "cloudsearch.indexing.datasources.items.list",
-                  "parameters": {
-                    "name": {
-                      "pattern": "^datasources/[^/]+$",
-                      "description": "Name of the Data Source to list Items. Format: datasources/{source_id}",
-                      "location": "path",
-                      "type": "string",
-                      "required": true
-                    },
-                    "brief": {
-                      "type": "boolean",
-                      "description": "When set to true, the indexing system only populates the following fields: name, version, queue. metadata.hash, metadata.title, metadata.sourceRepositoryURL, metadata.objectType, metadata.createTime, metadata.updateTime, metadata.contentLanguage, metadata.mimeType, structured_data.hash, content.hash, itemType, itemStatus.code, itemStatus.processingError.code, itemStatus.repositoryError.type, If this value is false, then all the fields are populated in Item.",
-                      "location": "query"
-                    },
-                    "debugOptions.enableDebugging": {
-                      "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
-                      "location": "query",
-                      "type": "boolean"
-                    },
-                    "pageSize": {
-                      "description": "Maximum number of items to fetch in a request. The max value is 1000 when brief is true. The max value is 10 if brief is false. The default value is 10",
-                      "location": "query",
-                      "format": "int32",
-                      "type": "integer"
-                    },
-                    "connectorName": {
-                      "description": "Name of connector making this call. Format: datasources/{source_id}/connectors/{ID}",
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "pageToken": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "The next_page_token value returned from a previous List request, if any."
-                    }
-                  },
-                  "flatPath": "v1/indexing/datasources/{datasourcesId}/items"
-                },
-                "upload": {
-                  "id": "cloudsearch.indexing.datasources.items.upload",
-                  "description": "Creates an upload session for uploading item content. For items smaller than 100 KB, it's easier to embed the content inline within an index request. This API requires an admin or service account to execute. The service account used is the one whitelisted in the corresponding data source.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud_search",
-                    "https://www.googleapis.com/auth/cloud_search.indexing"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "pattern": "^datasources/[^/]+/items/[^/]+$",
-                      "description": "Name of the Item to start a resumable upload. Format: datasources/{source_id}/items/{item_id}. The maximum length is 1536 bytes.",
-                      "location": "path",
-                      "required": true
-                    }
-                  },
-                  "response": {
-                    "$ref": "UploadItemRef"
-                  },
-                  "request": {
-                    "$ref": "StartUploadItemRequest"
-                  },
-                  "path": "v1/indexing/{+name}:upload",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "POST",
-                  "flatPath": "v1/indexing/datasources/{datasourcesId}/items/{itemsId}:upload"
-                },
-                "index": {
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "flatPath": "v1/indexing/datasources/{datasourcesId}/items/{itemsId}:index",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "id": "cloudsearch.indexing.datasources.items.index",
-                  "description": "Updates Item ACL, metadata, and content. It will insert the Item if it does not exist. This method does not support partial updates. Fields with no provided values are cleared out in the Cloud Search index. This API requires an admin or service account to execute. The service account used is the one whitelisted in the corresponding data source.",
-                  "path": "v1/indexing/{+name}:index",
-                  "request": {
-                    "$ref": "IndexItemRequest"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud_search",
-                    "https://www.googleapis.com/auth/cloud_search.indexing"
-                  ],
-                  "httpMethod": "POST",
-                  "parameters": {
-                    "name": {
-                      "required": true,
-                      "location": "path",
-                      "type": "string",
-                      "pattern": "^datasources/[^/]+/items/[^/]+$",
-                      "description": "Name of the Item. Format: datasources/{source_id}/items/{item_id} This is a required field. The maximum length is 1536 characters."
-                    }
-                  }
-                },
-                "push": {
-                  "description": "Pushes an item onto a queue for later polling and updating. This API requires an admin or service account to execute. The service account used is the one whitelisted in the corresponding data source.",
-                  "id": "cloudsearch.indexing.datasources.items.push",
-                  "path": "v1/indexing/{+name}:push",
-                  "flatPath": "v1/indexing/datasources/{datasourcesId}/items/{itemsId}:push",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud_search",
-                    "https://www.googleapis.com/auth/cloud_search.indexing"
-                  ],
-                  "httpMethod": "POST",
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "required": true,
-                      "description": "Name of the item to push into the indexing queue. Format: datasources/{source_id}/items/{ID} This is a required field. The maximum length is 1536 characters.",
-                      "location": "path",
-                      "pattern": "^datasources/[^/]+/items/[^/]+$"
-                    }
-                  },
-                  "response": {
-                    "$ref": "Item"
-                  },
-                  "request": {
-                    "$ref": "PushItemRequest"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ]
+                    ],
+                    "type": "string"
                 }
-              }
-            }
-          },
-          "methods": {
-            "getSchema": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud_search",
-                "https://www.googleapis.com/auth/cloud_search.settings",
-                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
-              ],
-              "path": "v1/indexing/{+name}/schema",
-              "description": "Gets the schema of a data source. **Note:** This API requires an admin or service account to execute.",
-              "parameterOrder": [
-                "name"
-              ],
-              "id": "cloudsearch.indexing.datasources.getSchema",
-              "response": {
-                "$ref": "Schema"
-              },
-              "httpMethod": "GET",
-              "parameters": {
-                "debugOptions.enableDebugging": {
-                  "location": "query",
-                  "type": "boolean",
-                  "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field."
-                },
-                "name": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "pattern": "^datasources/[^/]+$",
-                  "description": "Name of the data source to get Schema. Format: datasources/{source_id}"
-                }
-              },
-              "flatPath": "v1/indexing/datasources/{datasourcesId}/schema"
             },
-            "deleteSchema": {
-              "description": "Deletes the schema of a data source. **Note:** This API requires an admin or service account to execute.",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud_search",
-                "https://www.googleapis.com/auth/cloud_search.settings",
-                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
-              ],
-              "parameters": {
-                "debugOptions.enableDebugging": {
-                  "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
-                  "type": "boolean",
-                  "location": "query"
+            "type": "object"
+        },
+        "IntegerOperatorOptions": {
+            "description": "Used to provide a search operator for integer properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched.",
+            "id": "IntegerOperatorOptions",
+            "properties": {
+                "greaterThanOperatorName": {
+                    "description": "Indicates the operator name required in the query in order to isolate the integer property using the greater-than operator. For example, if greaterThanOperatorName is *priorityabove* and the property's name is *priorityVal*, then queries like *priorityabove:<value>* show results only where the value of the property named *priorityVal* is greater than *<value>*. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.",
+                    "type": "string"
                 },
-                "name": {
-                  "type": "string",
-                  "required": true,
-                  "location": "path",
-                  "pattern": "^datasources/[^/]+$",
-                  "description": "Name of the data source to delete Schema. Format: datasources/{source_id}"
+                "lessThanOperatorName": {
+                    "description": "Indicates the operator name required in the query in order to isolate the integer property using the less-than operator. For example, if lessThanOperatorName is *prioritybelow* and the property's name is *priorityVal*, then queries like *prioritybelow:<value>* show results only where the value of the property named *priorityVal* is less than *<value>*. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.",
+                    "type": "string"
+                },
+                "operatorName": {
+                    "description": "Indicates the operator name required in the query in order to isolate the integer property. For example, if operatorName is *priority* and the property's name is *priorityVal*, then queries like *priority:<value>* show results only where the value of the property named *priorityVal* matches *<value>*. By contrast, a search that uses the same *<value>* without an operator returns all items where *<value>* matches the value of any String properties or text within the content field for the item. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.",
+                    "type": "string"
                 }
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "id": "cloudsearch.indexing.datasources.deleteSchema",
-              "flatPath": "v1/indexing/datasources/{datasourcesId}/schema",
-              "response": {
-                "$ref": "Operation"
-              },
-              "httpMethod": "DELETE",
-              "path": "v1/indexing/{+name}/schema"
             },
-            "updateSchema": {
-              "response": {
-                "$ref": "Operation"
-              },
-              "flatPath": "v1/indexing/datasources/{datasourcesId}/schema",
-              "parameterOrder": [
-                "name"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud_search",
-                "https://www.googleapis.com/auth/cloud_search.settings",
-                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
-              ],
-              "path": "v1/indexing/{+name}/schema",
-              "request": {
-                "$ref": "UpdateSchemaRequest"
-              },
-              "httpMethod": "PUT",
-              "id": "cloudsearch.indexing.datasources.updateSchema",
-              "description": "Updates the schema of a data source. This method does not perform incremental updates to the schema. Instead, this method updates the schema by overwriting the entire schema. **Note:** This API requires an admin or service account to execute.",
-              "parameters": {
-                "name": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^datasources/[^/]+$",
-                  "description": "Name of the data source to update Schema. Format: datasources/{source_id}"
+            "type": "object"
+        },
+        "IntegerPropertyOptions": {
+            "description": "Options for integer properties.",
+            "id": "IntegerPropertyOptions",
+            "properties": {
+                "maximumValue": {
+                    "description": "The maximum value of the property. The minimum and maximum values for the property are used to rank results according to the ordered ranking. Indexing requests with values greater than the maximum are accepted and ranked with the same weight as items indexed with the maximum value.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "minimumValue": {
+                    "description": "The minimum value of the property. The minimum and maximum values for the property are used to rank results according to the ordered ranking. Indexing requests with values less than the minimum are accepted and ranked with the same weight as items indexed with the minimum value.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "operatorOptions": {
+                    "$ref": "IntegerOperatorOptions",
+                    "description": "If set, describes how the integer should be used as a search operator."
+                },
+                "orderedRanking": {
+                    "description": "Used to specify the ordered ranking for the integer. Can only be used if isRepeatable is false.",
+                    "enum": [
+                        "NO_ORDER",
+                        "ASCENDING",
+                        "DESCENDING"
+                    ],
+                    "enumDescriptions": [
+                        "There is no ranking order for the property. Results are not adjusted by this property's value.",
+                        "This property is ranked in ascending order. Lower values indicate lower ranking.",
+                        "This property is ranked in descending order. Lower values indicate higher ranking."
+                    ],
+                    "type": "string"
                 }
-              }
-            }
-          }
-        }
-      }
-    },
-    "operations": {
-      "methods": {
-        "get": {
-          "id": "cloudsearch.operations.get",
-          "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "Operation"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud_search",
-            "https://www.googleapis.com/auth/cloud_search.debug",
-            "https://www.googleapis.com/auth/cloud_search.indexing",
-            "https://www.googleapis.com/auth/cloud_search.settings",
-            "https://www.googleapis.com/auth/cloud_search.settings.indexing",
-            "https://www.googleapis.com/auth/cloud_search.settings.query"
-          ],
-          "flatPath": "v1/operations/{operationsId}",
-          "parameters": {
-            "name": {
-              "location": "path",
-              "type": "string",
-              "pattern": "^operations/.*$",
-              "required": true,
-              "description": "The name of the operation resource."
-            }
-          },
-          "path": "v1/{+name}",
-          "parameterOrder": [
-            "name"
-          ]
-        }
-      },
-      "resources": {
-        "lro": {
-          "methods": {
-            "list": {
-              "parameters": {
+            },
+            "type": "object"
+        },
+        "IntegerValues": {
+            "description": "List of integer values.",
+            "id": "IntegerValues",
+            "properties": {
+                "values": {
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Interaction": {
+            "description": "Represents an interaction between a user and an item.",
+            "id": "Interaction",
+            "properties": {
+                "interactionTime": {
+                    "description": "The time when the user acted on the item. If multiple actions of the same type exist for a single user, only the most recent action is recorded.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "principal": {
+                    "$ref": "Principal",
+                    "description": "The user that acted on the item."
+                },
+                "type": {
+                    "enum": [
+                        "UNSPECIFIED",
+                        "VIEW",
+                        "EDIT"
+                    ],
+                    "enumDescriptions": [
+                        "Invalid value.",
+                        "This interaction indicates the user viewed the item.",
+                        "This interaction indicates the user edited the item."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Item": {
+            "description": "Represents a single object that is an item in the search index, such as a file, folder, or a database record.",
+            "id": "Item",
+            "properties": {
+                "acl": {
+                    "$ref": "ItemAcl",
+                    "description": "Access control list for this item."
+                },
+                "content": {
+                    "$ref": "ItemContent",
+                    "description": "Item content to be indexed and made text searchable."
+                },
+                "itemType": {
+                    "description": "Type for this item.",
+                    "enum": [
+                        "UNSPECIFIED",
+                        "CONTENT_ITEM",
+                        "CONTAINER_ITEM",
+                        "VIRTUAL_CONTAINER_ITEM"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "An item that is indexed for the only purpose of serving information. These items cannot be referred in containerName or inheritAclFrom fields.",
+                        "An item that gets indexed and whose purpose is to supply other items with ACLs and/or contain other items.",
+                        "An item that does not get indexed, but otherwise has the same purpose as CONTAINER_ITEM."
+                    ],
+                    "type": "string"
+                },
+                "metadata": {
+                    "$ref": "ItemMetadata",
+                    "description": "Metadata information."
+                },
                 "name": {
-                  "description": "The name of the operation's parent resource.",
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^operations/.*$"
+                    "description": "Name of the Item. Format: datasources/{source_id}/items/{item_id} This is a required field. The maximum length is 1536 characters.",
+                    "type": "string"
                 },
-                "filter": {
-                  "location": "query",
-                  "description": "The standard list filter.",
-                  "type": "string"
+                "payload": {
+                    "description": "Additional state connector can store for this item. The maximum length is 10000 bytes.",
+                    "format": "byte",
+                    "type": "string"
                 },
-                "pageSize": {
-                  "format": "int32",
-                  "location": "query",
-                  "description": "The standard list page size.",
-                  "type": "integer"
+                "queue": {
+                    "description": "Queue this item belongs to. The maximum length is 100 characters.",
+                    "type": "string"
+                },
+                "status": {
+                    "$ref": "ItemStatus",
+                    "description": "Status of the item. Output only field."
+                },
+                "structuredData": {
+                    "$ref": "ItemStructuredData",
+                    "description": "The structured data for the item that should conform to a registered object definition in the schema for the data source."
+                },
+                "version": {
+                    "description": "Required. The indexing system stores the version from the datasource as a byte string and compares the Item version in the index to the version of the queued Item using lexical ordering. Cloud Search Indexing won't index or delete any queued item with a version value that is less than or equal to the version of the currently indexed item. The maximum length for this field is 1024 bytes.",
+                    "format": "byte",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ItemAcl": {
+            "description": "Access control list information for the item. For more information see [Map ACLs](/cloud-search/docs/guides/acls).",
+            "id": "ItemAcl",
+            "properties": {
+                "aclInheritanceType": {
+                    "description": "Sets the type of access rules to apply when an item inherits its ACL from a parent. This should always be set in tandem with the inheritAclFrom field. Also, when the inheritAclFrom field is set, this field should be set to a valid AclInheritanceType.",
+                    "enum": [
+                        "NOT_APPLICABLE",
+                        "CHILD_OVERRIDE",
+                        "PARENT_OVERRIDE",
+                        "BOTH_PERMIT"
+                    ],
+                    "enumDescriptions": [
+                        "The default value when this item does not inherit an ACL. Use NOT_APPLICABLE when inheritAclFrom is empty. An item without ACL inheritance can still have ACLs supplied by its own readers and deniedReaders fields.",
+                        "During an authorization conflict, the ACL of the child item determines its read access.",
+                        "During an authorization conflict, the ACL of the parent item specified in the inheritAclFrom field determines read access.",
+                        "Access is granted only if this item and the parent item specified in the inheritAclFrom field both permit read access."
+                    ],
+                    "type": "string"
+                },
+                "deniedReaders": {
+                    "description": "List of principals who are explicitly denied access to the item in search results. While principals are denied access by default, use denied readers to handle exceptions and override the list allowed readers. The maximum number of elements is 100.",
+                    "items": {
+                        "$ref": "Principal"
+                    },
+                    "type": "array"
+                },
+                "inheritAclFrom": {
+                    "description": "Name of the item to inherit the Access Permission List (ACL) from. Note: ACL inheritance *only* provides access permissions to child items and does not define structural relationships, nor does it provide convenient ways to delete large groups of items. Deleting an ACL parent from the index only alters the access permissions of child items that reference the parent in the inheritAclFrom field. The item is still in the index, but may not visible in search results. By contrast, deletion of a container item also deletes all items that reference the container via the containerName field. The maximum length for this field is 1536 characters.",
+                    "type": "string"
+                },
+                "owners": {
+                    "description": "Optional. List of owners for the item. This field has no bearing on document access permissions. It does, however, offer a slight ranking boosts items where the querying user is an owner. The maximum number of elements is 5.",
+                    "items": {
+                        "$ref": "Principal"
+                    },
+                    "type": "array"
+                },
+                "readers": {
+                    "description": "List of principals who are allowed to see the item in search results. Optional if inheriting permissions from another item or if the item is not intended to be visible, such as virtual containers. The maximum number of elements is 1000.",
+                    "items": {
+                        "$ref": "Principal"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ItemContent": {
+            "description": "Content of an item to be indexed and surfaced by Cloud Search. Only UTF-8 encoded strings are allowed as inlineContent. If the content is uploaded and not binary, it must be UTF-8 encoded.",
+            "id": "ItemContent",
+            "properties": {
+                "contentDataRef": {
+                    "$ref": "UploadItemRef",
+                    "description": "Upload reference ID of a previously uploaded content via write method."
+                },
+                "contentFormat": {
+                    "enum": [
+                        "UNSPECIFIED",
+                        "HTML",
+                        "TEXT",
+                        "RAW"
+                    ],
+                    "enumDescriptions": [
+                        "Invalid value.",
+                        "contentFormat is HTML.",
+                        "contentFormat is free text.",
+                        "contentFormat is raw bytes."
+                    ],
+                    "type": "string"
+                },
+                "hash": {
+                    "description": "Hashing info calculated and provided by the API client for content. Can be used with the items.push method to calculate modified state. The maximum length is 2048 characters.",
+                    "type": "string"
+                },
+                "inlineContent": {
+                    "description": "Content that is supplied inlined within the update method. The maximum length is 102400 bytes (100 KiB).",
+                    "format": "byte",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ItemCountByStatus": {
+            "id": "ItemCountByStatus",
+            "properties": {
+                "count": {
+                    "description": "Number of items matching the status code.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "statusCode": {
+                    "description": "Status of the items.",
+                    "enum": [
+                        "CODE_UNSPECIFIED",
+                        "ERROR",
+                        "MODIFIED",
+                        "NEW_ITEM",
+                        "ACCEPTED"
+                    ],
+                    "enumDescriptions": [
+                        "Input-only value. Used with Items.list to list all items in the queue, regardless of status.",
+                        "Error encountered by Cloud Search while processing this item. Details of the error are in repositoryError.",
+                        "Item has been modified in the repository, and is out of date with the version previously accepted into Cloud Search.",
+                        "Item is known to exist in the repository, but is not yet accepted by Cloud Search. An item can be in this state when Items.push has been called for an item of this name that did not exist previously.",
+                        "API has accepted the up-to-date data of this item."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ItemMetadata": {
+            "description": "Available metadata fields for the item.",
+            "id": "ItemMetadata",
+            "properties": {
+                "containerName": {
+                    "description": "The name of the container for this item. Deletion of the container item leads to automatic deletion of this item. Note: ACLs are not inherited from a container item. To provide ACL inheritance for an item, use the inheritAclFrom field. The maximum length is 1536 characters.",
+                    "type": "string"
+                },
+                "contentLanguage": {
+                    "description": "The BCP-47 language code for the item, such as \"en-US\" or \"sr-Latn\". For more information, see http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. The maximum length is 32 characters.",
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "The time when the item was created in the source repository.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "hash": {
+                    "description": "Hashing value provided by the API caller. This can be used with the items.push method to calculate modified state. The maximum length is 2048 characters.",
+                    "type": "string"
+                },
+                "interactions": {
+                    "description": "A list of interactions for the item. Interactions are used to improve Search quality, but are not exposed to end users. The maximum number of elements is 1000.",
+                    "items": {
+                        "$ref": "Interaction"
+                    },
+                    "type": "array"
+                },
+                "keywords": {
+                    "description": "Additional keywords or phrases that should match the item. Used internally for user generated content. The maximum number of elements is 100. The maximum length is 8192 characters.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "mimeType": {
+                    "description": "The original mime-type of ItemContent.content in the source repository. The maximum length is 256 characters.",
+                    "type": "string"
+                },
+                "objectType": {
+                    "description": "The type of the item. This should correspond to the name of an object definition in the schema registered for the data source. For example, if the schema for the data source contains an object definition with name 'document', then item indexing requests for objects of that type should set objectType to 'document'. The maximum length is 256 characters.",
+                    "type": "string"
+                },
+                "searchQualityMetadata": {
+                    "$ref": "SearchQualityMetadata",
+                    "description": "Additional search quality metadata of the item"
+                },
+                "sourceRepositoryUrl": {
+                    "description": "Link to the source repository serving the data. Search results apply this link to the title. Whitespace or special characters may cause Cloud Search result links to trigger a redirect notice; to avoid this, encode the URL. The maximum length is 2048 characters.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "The title of the item. If given, this will be the displayed title of the Search result. The maximum length is 2048 characters.",
+                    "type": "string"
+                },
+                "updateTime": {
+                    "description": "The time when the item was last modified in the source repository.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ItemStatus": {
+            "description": "This contains item's status and any errors.",
+            "id": "ItemStatus",
+            "properties": {
+                "code": {
+                    "description": "Status code.",
+                    "enum": [
+                        "CODE_UNSPECIFIED",
+                        "ERROR",
+                        "MODIFIED",
+                        "NEW_ITEM",
+                        "ACCEPTED"
+                    ],
+                    "enumDescriptions": [
+                        "Input-only value. Used with Items.list to list all items in the queue, regardless of status.",
+                        "Error encountered by Cloud Search while processing this item. Details of the error are in repositoryError.",
+                        "Item has been modified in the repository, and is out of date with the version previously accepted into Cloud Search.",
+                        "Item is known to exist in the repository, but is not yet accepted by Cloud Search. An item can be in this state when Items.push has been called for an item of this name that did not exist previously.",
+                        "API has accepted the up-to-date data of this item."
+                    ],
+                    "type": "string"
+                },
+                "processingErrors": {
+                    "description": "Error details in case the item is in ERROR state.",
+                    "items": {
+                        "$ref": "ProcessingError"
+                    },
+                    "type": "array"
+                },
+                "repositoryErrors": {
+                    "description": "Repository error reported by connector.",
+                    "items": {
+                        "$ref": "RepositoryError"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ItemStructuredData": {
+            "description": "Available structured data fields for the item.",
+            "id": "ItemStructuredData",
+            "properties": {
+                "hash": {
+                    "description": "Hashing value provided by the API caller. This can be used with the items.push method to calculate modified state. The maximum length is 2048 characters.",
+                    "type": "string"
+                },
+                "object": {
+                    "$ref": "StructuredDataObject",
+                    "description": "The structured data object that should conform to a registered object definition in the schema for the data source."
+                }
+            },
+            "type": "object"
+        },
+        "ListDataSourceResponse": {
+            "id": "ListDataSourceResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "Token to retrieve the next page of results, or empty if there are no more results in the list.",
+                    "type": "string"
+                },
+                "sources": {
+                    "items": {
+                        "$ref": "DataSource"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListItemNamesForUnmappedIdentityResponse": {
+            "id": "ListItemNamesForUnmappedIdentityResponse",
+            "properties": {
+                "itemNames": {
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Token to retrieve the next page of results, or empty if there are no more results in the list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListItemsResponse": {
+            "id": "ListItemsResponse",
+            "properties": {
+                "items": {
+                    "items": {
+                        "$ref": "Item"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Token to retrieve the next page of results, or empty if there are no more results in the list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListOperationsResponse": {
+            "description": "The response message for Operations.ListOperations.",
+            "id": "ListOperationsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                },
+                "operations": {
+                    "description": "A list of operations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Operation"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListQuerySourcesResponse": {
+            "description": "List sources response.",
+            "id": "ListQuerySourcesResponse",
+            "properties": {
+                "nextPageToken": {
+                    "type": "string"
+                },
+                "sources": {
+                    "items": {
+                        "$ref": "QuerySource"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListSearchApplicationsResponse": {
+            "id": "ListSearchApplicationsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "Token to retrieve the next page of results, or empty if there are no more results in the list.",
+                    "type": "string"
+                },
+                "searchApplications": {
+                    "items": {
+                        "$ref": "SearchApplication"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListUnmappedIdentitiesResponse": {
+            "id": "ListUnmappedIdentitiesResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "Token to retrieve the next page of results, or empty if there are no more results in the list.",
+                    "type": "string"
+                },
+                "unmappedIdentities": {
+                    "items": {
+                        "$ref": "UnmappedIdentity"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "MatchRange": {
+            "description": "Matched range of a snippet [start, end).",
+            "id": "MatchRange",
+            "properties": {
+                "end": {
+                    "description": "End of the match in the snippet.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "start": {
+                    "description": "Starting position of the match in the snippet.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "Media": {
+            "description": "Media resource.",
+            "id": "Media",
+            "properties": {
+                "resourceName": {
+                    "description": "Name of the media resource.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Metadata": {
+            "description": "Metadata of a matched search result.",
+            "id": "Metadata",
+            "properties": {
+                "createTime": {
+                    "description": "The creation time for this document or object in the search result.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "displayOptions": {
+                    "$ref": "ResultDisplayMetadata",
+                    "description": "Options that specify how to display a structured data search result."
+                },
+                "fields": {
+                    "description": "Indexed fields in structured data, returned as a generic named property.",
+                    "items": {
+                        "$ref": "NamedProperty"
+                    },
+                    "type": "array"
+                },
+                "mimeType": {
+                    "description": "Mime type of the search result.",
+                    "type": "string"
+                },
+                "objectType": {
+                    "description": "Object type of the search result.",
+                    "type": "string"
+                },
+                "owner": {
+                    "$ref": "Person",
+                    "description": "Owner (usually creator) of the document or object of the search result."
+                },
+                "source": {
+                    "$ref": "Source",
+                    "description": "The named source for the result, such as Gmail."
+                },
+                "updateTime": {
+                    "description": "The last modified date for the object in the search result. If not set in the item, the value returned here is empty. When `updateTime` is used for calculating freshness and is not set, this value defaults to 2 years from the current time.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Metaline": {
+            "description": "A metaline is a list of properties that are displayed along with the search result to provide context.",
+            "id": "Metaline",
+            "properties": {
+                "properties": {
+                    "description": "The list of displayed properties for the metaline. The maximum number of properties is 5.",
+                    "items": {
+                        "$ref": "DisplayedProperty"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Name": {
+            "description": "A person's name.",
+            "id": "Name",
+            "properties": {
+                "displayName": {
+                    "description": "The read-only display name formatted according to the locale specified by the viewer's account or the Accept-Language HTTP header.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "NamedProperty": {
+            "description": "A typed name-value pair for structured data. The type of the value should be the same as the registered type for the `name` property in the object definition of `objectType`.",
+            "id": "NamedProperty",
+            "properties": {
+                "booleanValue": {
+                    "type": "boolean"
+                },
+                "dateValues": {
+                    "$ref": "DateValues"
+                },
+                "doubleValues": {
+                    "$ref": "DoubleValues"
+                },
+                "enumValues": {
+                    "$ref": "EnumValues"
+                },
+                "htmlValues": {
+                    "$ref": "HtmlValues"
+                },
+                "integerValues": {
+                    "$ref": "IntegerValues"
+                },
+                "name": {
+                    "description": "The name of the property. This name should correspond to the name of the property that was registered for object definition in the schema. The maximum allowable length for this property is 256 characters.",
+                    "type": "string"
+                },
+                "objectValues": {
+                    "$ref": "ObjectValues"
+                },
+                "textValues": {
+                    "$ref": "TextValues"
+                },
+                "timestampValues": {
+                    "$ref": "TimestampValues"
+                }
+            },
+            "type": "object"
+        },
+        "ObjectDefinition": {
+            "description": "The definition for an object within a data source.",
+            "id": "ObjectDefinition",
+            "properties": {
+                "name": {
+                    "description": "Name for the object, which then defines its type. Item indexing requests should set the objectType field equal to this value. For example, if *name* is *Document*, then indexing requests for items of type Document should set objectType equal to *Document*. Each object definition must be uniquely named within a schema. The name must start with a letter and can only contain letters (A-Z, a-z) or numbers (0-9). The maximum length is 256 characters.",
+                    "type": "string"
+                },
+                "options": {
+                    "$ref": "ObjectOptions",
+                    "description": "The optional object-specific options."
+                },
+                "propertyDefinitions": {
+                    "description": "The property definitions for the object. The maximum number of elements is 1000.",
+                    "items": {
+                        "$ref": "PropertyDefinition"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ObjectDisplayOptions": {
+            "description": "The display options for an object.",
+            "id": "ObjectDisplayOptions",
+            "properties": {
+                "metalines": {
+                    "description": "Defines the properties that are displayed in the metalines of the search results. The property values are displayed in the order given here. If a property holds multiple values, all of the values are displayed before the next properties. For this reason, it is a good practice to specify singular properties before repeated properties in this list. All of the properties must set is_returnable to true. The maximum number of metalines is 3.",
+                    "items": {
+                        "$ref": "Metaline"
+                    },
+                    "type": "array"
+                },
+                "objectDisplayLabel": {
+                    "description": "The user friendly label to display in the search result to indicate the type of the item. This is OPTIONAL; if not provided, an object label isn't displayed on the context line of the search results. The maximum length is 64 characters.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ObjectOptions": {
+            "description": "The options for an object.",
+            "id": "ObjectOptions",
+            "properties": {
+                "displayOptions": {
+                    "$ref": "ObjectDisplayOptions",
+                    "description": "Options that determine how the object is displayed in the Cloud Search results page."
+                },
+                "freshnessOptions": {
+                    "$ref": "FreshnessOptions",
+                    "description": "The freshness options for an object."
+                }
+            },
+            "type": "object"
+        },
+        "ObjectPropertyOptions": {
+            "description": "Options for object properties.",
+            "id": "ObjectPropertyOptions",
+            "properties": {
+                "subobjectProperties": {
+                    "description": "The properties of the sub-object. These properties represent a nested object. For example, if this property represents a postal address, the subobjectProperties might be named *street*, *city*, and *state*. The maximum number of elements is 1000.",
+                    "items": {
+                        "$ref": "PropertyDefinition"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ObjectValues": {
+            "description": "List of object values.",
+            "id": "ObjectValues",
+            "properties": {
+                "values": {
+                    "items": {
+                        "$ref": "StructuredDataObject"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Operation": {
+            "description": "This resource represents a long-running operation that is the result of a network API call.",
+            "id": "Operation",
+            "properties": {
+                "done": {
+                    "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
+                    "type": "boolean"
+                },
+                "error": {
+                    "$ref": "Status",
+                    "description": "The error result of the operation in case of failure or cancellation."
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
+                    "type": "string"
+                },
+                "response": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "PeopleSuggestion": {
+            "description": "This field contains information about the person being suggested.",
+            "id": "PeopleSuggestion",
+            "properties": {
+                "person": {
+                    "$ref": "Person",
+                    "description": "Suggested person. All fields of the person object might not be populated."
+                }
+            },
+            "type": "object"
+        },
+        "Person": {
+            "description": "Object to represent a person.",
+            "id": "Person",
+            "properties": {
+                "emailAddresses": {
+                    "description": "The person's email addresses",
+                    "items": {
+                        "$ref": "EmailAddress"
+                    },
+                    "type": "array"
+                },
+                "name": {
+                    "description": "The resource name of the person to provide information about. See People.get from Google People API.",
+                    "type": "string"
+                },
+                "obfuscatedId": {
+                    "description": "Obfuscated ID of a person.",
+                    "type": "string"
+                },
+                "personNames": {
+                    "description": "The person's name",
+                    "items": {
+                        "$ref": "Name"
+                    },
+                    "type": "array"
+                },
+                "photos": {
+                    "description": "A person's read-only photo. A picture shown next to the person's name to help others recognize the person in search results.",
+                    "items": {
+                        "$ref": "Photo"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Photo": {
+            "description": "A person's photo.",
+            "id": "Photo",
+            "properties": {
+                "url": {
+                    "description": "The URL of the photo.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PollItemsRequest": {
+            "id": "PollItemsRequest",
+            "properties": {
+                "connectorName": {
+                    "description": "Name of connector making this call. Format: datasources/{source_id}/connectors/{ID}",
+                    "type": "string"
+                },
+                "debugOptions": {
+                    "$ref": "DebugOptions",
+                    "description": "Common debug options."
+                },
+                "limit": {
+                    "description": "Maximum number of items to return. The maximum value is 100 and the default value is 20.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "queue": {
+                    "description": "Queue name to fetch items from. If unspecified, PollItems will fetch from 'default' queue. The maximum length is 100 characters.",
+                    "type": "string"
+                },
+                "statusCodes": {
+                    "description": "Limit the items polled to the ones with these statuses.",
+                    "items": {
+                        "enum": [
+                            "CODE_UNSPECIFIED",
+                            "ERROR",
+                            "MODIFIED",
+                            "NEW_ITEM",
+                            "ACCEPTED"
+                        ],
+                        "enumDescriptions": [
+                            "Input-only value. Used with Items.list to list all items in the queue, regardless of status.",
+                            "Error encountered by Cloud Search while processing this item. Details of the error are in repositoryError.",
+                            "Item has been modified in the repository, and is out of date with the version previously accepted into Cloud Search.",
+                            "Item is known to exist in the repository, but is not yet accepted by Cloud Search. An item can be in this state when Items.push has been called for an item of this name that did not exist previously.",
+                            "API has accepted the up-to-date data of this item."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PollItemsResponse": {
+            "id": "PollItemsResponse",
+            "properties": {
+                "items": {
+                    "description": "Set of items from the queue available for connector to process. These items have the following subset of fields populated: version metadata.hash structured_data.hash content.hash payload status queue",
+                    "items": {
+                        "$ref": "Item"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Principal": {
+            "description": "Reference to a user, group, or domain.",
+            "id": "Principal",
+            "properties": {
+                "groupResourceName": {
+                    "description": "This principal is a group identified using an external identity. The name field must specify the group resource name with this format: identitysources/{source_id}/groups/{ID}",
+                    "type": "string"
+                },
+                "gsuitePrincipal": {
+                    "$ref": "GSuitePrincipal",
+                    "description": "This principal is a GSuite user, group or domain."
+                },
+                "userResourceName": {
+                    "description": "This principal is a user identified using an external identity. The name field must specify the user resource name with this format: identitysources/{source_id}/users/{ID}",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ProcessingError": {
+            "id": "ProcessingError",
+            "properties": {
+                "code": {
+                    "description": "Error code indicating the nature of the error.",
+                    "enum": [
+                        "PROCESSING_ERROR_CODE_UNSPECIFIED",
+                        "MALFORMED_REQUEST",
+                        "UNSUPPORTED_CONTENT_FORMAT",
+                        "INDIRECT_BROKEN_ACL",
+                        "ACL_CYCLE"
+                    ],
+                    "enumDescriptions": [
+                        "Input only value. Use this value in Items.",
+                        "Item's ACL, metadata, or content is malformed or in invalid state. FieldViolations contains more details on where the problem is.",
+                        "Countent format is unsupported.",
+                        "Items with incomplete ACL information due to inheriting other items with broken ACL or having groups with unmapped descendants.",
+                        "ACL inheritance graph formed a cycle."
+                    ],
+                    "type": "string"
+                },
+                "errorMessage": {
+                    "description": "Description of the error.",
+                    "type": "string"
+                },
+                "fieldViolations": {
+                    "description": "In case the item fields are invalid, this field contains the details about the validation errors.",
+                    "items": {
+                        "$ref": "FieldViolation"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PropertyDefinition": {
+            "description": "The definition of a property within an object.",
+            "id": "PropertyDefinition",
+            "properties": {
+                "booleanPropertyOptions": {
+                    "$ref": "BooleanPropertyOptions"
+                },
+                "datePropertyOptions": {
+                    "$ref": "DatePropertyOptions"
+                },
+                "displayOptions": {
+                    "$ref": "PropertyDisplayOptions",
+                    "description": "Options that determine how the property is displayed in the Cloud Search results page if it is specified to be displayed in the object's display options ."
+                },
+                "doublePropertyOptions": {
+                    "$ref": "DoublePropertyOptions"
+                },
+                "enumPropertyOptions": {
+                    "$ref": "EnumPropertyOptions"
+                },
+                "htmlPropertyOptions": {
+                    "$ref": "HtmlPropertyOptions"
+                },
+                "integerPropertyOptions": {
+                    "$ref": "IntegerPropertyOptions"
+                },
+                "isFacetable": {
+                    "description": "Indicates that the property can be used for generating facets. Cannot be true for properties whose type is object. IsReturnable must be true to set this option. Only supported for Boolean, Enum, and Text properties.",
+                    "type": "boolean"
+                },
+                "isRepeatable": {
+                    "description": "Indicates that multiple values are allowed for the property. For example, a document only has one description but can have multiple comments. Cannot be true for properties whose type is a boolean. If set to false, properties that contain more than one value cause the indexing request for that item to be rejected.",
+                    "type": "boolean"
+                },
+                "isReturnable": {
+                    "description": "Indicates that the property identifies data that should be returned in search results via the Query API. If set to *true*, indicates that Query API users can use matching property fields in results. However, storing fields requires more space allocation and uses more bandwidth for search queries, which impacts performance over large datasets. Set to *true* here only if the field is needed for search results. Cannot be true for properties whose type is an object.",
+                    "type": "boolean"
+                },
+                "isSortable": {
+                    "description": "Indicates that the property can be used for sorting. Cannot be true for properties that are repeatable. Cannot be true for properties whose type is object or user identifier. IsReturnable must be true to set this option. Only supported for Boolean, Date, Double, Integer, and Timestamp properties.",
+                    "type": "boolean"
+                },
+                "isSuggestable": {
+                    "description": "Indicates that the property can be used for generating query suggestions.",
+                    "type": "boolean"
+                },
+                "isWildcardSearchable": {
+                    "description": "Indicates that users can perform wildcard search for this property. Only supported for Text properties. IsReturnable must be true to set this option. In a given datasource maximum of 5 properties can be marked as is_wildcard_searchable.",
+                    "type": "boolean"
+                },
+                "name": {
+                    "description": "The name of the property. Item indexing requests sent to the Indexing API should set the property name equal to this value. For example, if name is *subject_line*, then indexing requests for document items with subject fields should set the name for that field equal to *subject_line*. Use the name as the identifier for the object property. Once registered as a property for an object, you cannot re-use this name for another property within that object. The name must start with a letter and can only contain letters (A-Z, a-z) or numbers (0-9). The maximum length is 256 characters.",
+                    "type": "string"
+                },
+                "objectPropertyOptions": {
+                    "$ref": "ObjectPropertyOptions"
+                },
+                "textPropertyOptions": {
+                    "$ref": "TextPropertyOptions"
+                },
+                "timestampPropertyOptions": {
+                    "$ref": "TimestampPropertyOptions"
+                }
+            },
+            "type": "object"
+        },
+        "PropertyDisplayOptions": {
+            "description": "The display options for a property.",
+            "id": "PropertyDisplayOptions",
+            "properties": {
+                "displayLabel": {
+                    "description": "The user friendly label for the property that is used if the property is specified to be displayed in ObjectDisplayOptions. If provided, the display label is shown in front of the property values when the property is part of the object display options. For example, if the property value is '1', the value by itself may not be useful context for the user. If the display name given was 'priority', then the user sees 'priority : 1' in the search results which provides clear context to search users. This is OPTIONAL; if not given, only the property values are displayed. The maximum length is 64 characters.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PushItem": {
+            "description": "Represents an item to be pushed to the indexing queue.",
+            "id": "PushItem",
+            "properties": {
+                "contentHash": {
+                    "description": "Content hash of the item according to the repository. If specified, this is used to determine how to modify this item's status. Setting this field and the type field results in argument error. The maximum length is 2048 characters.",
+                    "type": "string"
+                },
+                "metadataHash": {
+                    "description": "Metadata hash of the item according to the repository. If specified, this is used to determine how to modify this item's status. Setting this field and the type field results in argument error. The maximum length is 2048 characters.",
+                    "type": "string"
+                },
+                "payload": {
+                    "description": "Provides additional document state information for the connector, such as an alternate repository ID and other metadata. The maximum length is 8192 bytes.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "queue": {
+                    "description": "Queue to which this item belongs to. The default queue is chosen if this field is not specified. The maximum length is 512 characters.",
+                    "type": "string"
+                },
+                "repositoryError": {
+                    "$ref": "RepositoryError",
+                    "description": "Populate this field to store Connector or repository error details. This information is displayed in the Admin Console. This field may only be populated when the Type is REPOSITORY_ERROR."
+                },
+                "structuredDataHash": {
+                    "description": "Structured data hash of the item according to the repository. If specified, this is used to determine how to modify this item's status. Setting this field and the type field results in argument error. The maximum length is 2048 characters.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "The type of the push operation that defines the push behavior.",
+                    "enum": [
+                        "UNSPECIFIED",
+                        "MODIFIED",
+                        "NOT_MODIFIED",
+                        "REPOSITORY_ERROR",
+                        "REQUEUE"
+                    ],
+                    "enumDescriptions": [
+                        "Default UNSPECIFIED. Specifies that the push operation should not modify ItemStatus",
+                        "Indicates that the repository document has been modified or updated since the previous update call. This changes status to MODIFIED state for an existing item. If this is called on a non existing item, the status is changed to NEW_ITEM.",
+                        "Item in the repository has not been modified since the last update call. This push operation will set status to ACCEPTED state.",
+                        "Connector is facing a repository error regarding this item. Change status to REPOSITORY_ERROR state. Item is unreserved and rescheduled at a future time determined by exponential backoff.",
+                        "Call push with REQUEUE only for items that have been reserved. This action unreserves the item and resets its available time to the wall clock time."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PushItemRequest": {
+            "id": "PushItemRequest",
+            "properties": {
+                "connectorName": {
+                    "description": "Name of connector making this call. Format: datasources/{source_id}/connectors/{ID}",
+                    "type": "string"
+                },
+                "debugOptions": {
+                    "$ref": "DebugOptions",
+                    "description": "Common debug options."
+                },
+                "item": {
+                    "$ref": "PushItem",
+                    "description": "Item to push onto the queue."
+                }
+            },
+            "type": "object"
+        },
+        "QueryCountByStatus": {
+            "id": "QueryCountByStatus",
+            "properties": {
+                "count": {
+                    "format": "int64",
+                    "type": "string"
+                },
+                "statusCode": {
+                    "description": "This represents the http status code.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "QueryInterpretation": {
+            "id": "QueryInterpretation",
+            "properties": {
+                "interpretationType": {
+                    "enum": [
+                        "NONE",
+                        "BLEND",
+                        "REPLACE"
+                    ],
+                    "enumDescriptions": [
+                        "Neither the natural language interpretation, nor a broader version of the query is used to fetch the search results.",
+                        "The results from original query are blended with other results. The reason for blending these other results with the results from original query is populated in the 'Reason' field below.",
+                        "The results from original query are replaced. The reason for replacing the results from original query is populated in the 'Reason' field below."
+                    ],
+                    "type": "string"
+                },
+                "interpretedQuery": {
+                    "description": "The interpretation of the query used in search. For example, queries with natural language intent like \"email from john\" will be interpreted as \"from:john source:mail\". This field will not be filled when the reason is NOT_ENOUGH_RESULTS_FOUND_FOR_USER_QUERY.",
+                    "type": "string"
+                },
+                "reason": {
+                    "description": "The reason for interpretation of the query. This field will not be UNSPECIFIED if the interpretation type is not NONE.",
+                    "enum": [
+                        "UNSPECIFIED",
+                        "QUERY_HAS_NATURAL_LANGUAGE_INTENT",
+                        "NOT_ENOUGH_RESULTS_FOUND_FOR_USER_QUERY"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "Natural language interpretation of the query is used to fetch the search results.",
+                        "Query and document terms similarity is used to selectively broaden the query to retrieve additional search results since enough results were not found for the user query. Interpreted query will be empty for this case."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "QueryInterpretationOptions": {
+            "description": "Options to interpret user query.",
+            "id": "QueryInterpretationOptions",
+            "properties": {
+                "disableNlInterpretation": {
+                    "description": "Flag to disable natural language (NL) interpretation of queries. Default is false, Set to true to disable natural language interpretation. NL interpretation only applies to predefined datasources.",
+                    "type": "boolean"
+                },
+                "enableVerbatimMode": {
+                    "description": "Enable this flag to turn off all internal optimizations like natural language (NL) interpretation of queries, supplemental result retrieval, and usage of synonyms including custom ones. Nl interpretation will be disabled if either one of the two flags is true.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "QueryItem": {
+            "description": "Information relevant only to a query entry.",
+            "id": "QueryItem",
+            "properties": {
+                "isSynthetic": {
+                    "description": "True if the text was generated by means other than a previous user search.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "QueryOperator": {
+            "description": "The definition of a operator that can be used in a Search/Suggest request.",
+            "id": "QueryOperator",
+            "properties": {
+                "displayName": {
+                    "description": "Display name of the operator",
+                    "type": "string"
+                },
+                "enumValues": {
+                    "description": "Potential list of values for the opeatror field. This field is only filled when we can safely enumerate all the possible values of this operator.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "greaterThanOperatorName": {
+                    "description": "Indicates the operator name that can be used to isolate the property using the greater-than operator.",
+                    "type": "string"
+                },
+                "isFacetable": {
+                    "description": "Can this operator be used to get facets.",
+                    "type": "boolean"
+                },
+                "isRepeatable": {
+                    "description": "Indicates if multiple values can be set for this property.",
+                    "type": "boolean"
+                },
+                "isReturnable": {
+                    "description": "Will the property associated with this facet be returned as part of search results.",
+                    "type": "boolean"
+                },
+                "isSortable": {
+                    "description": "Can this operator be used to sort results.",
+                    "type": "boolean"
+                },
+                "isSuggestable": {
+                    "description": "Can get suggestions for this field.",
+                    "type": "boolean"
+                },
+                "lessThanOperatorName": {
+                    "description": "Indicates the operator name that can be used to isolate the property using the less-than operator.",
+                    "type": "string"
+                },
+                "objectType": {
+                    "description": "Name of the object corresponding to the operator. This field is only filled for schema-specific operators, and is unset for common operators.",
+                    "type": "string"
+                },
+                "operatorName": {
+                    "description": "The name of the operator.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Type of the operator.",
+                    "enum": [
+                        "UNKNOWN",
+                        "INTEGER",
+                        "DOUBLE",
+                        "TIMESTAMP",
+                        "BOOLEAN",
+                        "ENUM",
+                        "DATE",
+                        "TEXT",
+                        "HTML"
+                    ],
+                    "enumDescriptions": [
+                        "Invalid value.",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "QuerySource": {
+            "description": "List of sources that the user can search using the query API.",
+            "id": "QuerySource",
+            "properties": {
+                "displayName": {
+                    "description": "Display name of the data source.",
+                    "type": "string"
+                },
+                "operators": {
+                    "description": "List of all operators applicable for this source.",
+                    "items": {
+                        "$ref": "QueryOperator"
+                    },
+                    "type": "array"
+                },
+                "shortName": {
+                    "description": "A short name or alias for the source. This value can be used with the 'source' operator.",
+                    "type": "string"
+                },
+                "source": {
+                    "$ref": "Source",
+                    "description": "Name of the source"
+                }
+            },
+            "type": "object"
+        },
+        "QuerySuggestion": {
+            "description": "This field does not contain anything as of now and is just used as an indicator that the suggest result was a phrase completion.",
+            "id": "QuerySuggestion",
+            "properties": {},
+            "type": "object"
+        },
+        "RepositoryError": {
+            "description": "Errors when the connector is communicating to the source repository.",
+            "id": "RepositoryError",
+            "properties": {
+                "errorMessage": {
+                    "description": "Message that describes the error. The maximum allowable length of the message is 8192 characters.",
+                    "type": "string"
+                },
+                "httpStatusCode": {
+                    "description": "Error codes. Matches the definition of HTTP status codes.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "type": {
+                    "description": "Type of error.",
+                    "enum": [
+                        "UNKNOWN",
+                        "NETWORK_ERROR",
+                        "DNS_ERROR",
+                        "CONNECTION_ERROR",
+                        "AUTHENTICATION_ERROR",
+                        "AUTHORIZATION_ERROR",
+                        "SERVER_ERROR",
+                        "QUOTA_EXCEEDED",
+                        "SERVICE_UNAVAILABLE",
+                        "CLIENT_ERROR"
+                    ],
+                    "enumDescriptions": [
+                        "Unknown error.",
+                        "Unknown or unreachable host.",
+                        "DNS problem, such as the DNS server is not responding.",
+                        "Cannot connect to the repository server.",
+                        "Failed authentication due to incorrect credentials.",
+                        "Service account is not authorized for the repository.",
+                        "Repository server error.",
+                        "Quota exceeded.",
+                        "Server temporarily unavailable.",
+                        "Client-related error, such as an invalid request from the connector to the repository server."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RequestOptions": {
+            "description": "Shared request options for all RPC methods.",
+            "id": "RequestOptions",
+            "properties": {
+                "debugOptions": {
+                    "$ref": "DebugOptions",
+                    "description": "Debug options of the request"
+                },
+                "languageCode": {
+                    "description": "The BCP-47 language code, such as \"en-US\" or \"sr-Latn\". For more information, see http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. For translations. Set this field using the language set in browser or for the page. In the event that the user's language preference is known, set this field to the known user language. When specified, the documents in search results are biased towards the specified language. The suggest API does not use this parameter. Instead, suggest autocompletes only based on characters in the query.",
+                    "type": "string"
+                },
+                "searchApplicationId": {
+                    "description": "The ID generated when you create a search application using the [admin console](https://support.google.com/a/answer/9043922).",
+                    "type": "string"
+                },
+                "timeZone": {
+                    "description": "Current user's time zone id, such as \"America/Los_Angeles\" or \"Australia/Sydney\". These IDs are defined by [Unicode Common Locale Data Repository (CLDR)](http://cldr.unicode.org/) project, and currently available in the file [timezone.xml](http://unicode.org/repos/cldr/trunk/common/bcp47/timezone.xml). This field is used to correctly interpret date and time queries. If this field is not specified, the default time zone (UTC) is used.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ResetSearchApplicationRequest": {
+            "id": "ResetSearchApplicationRequest",
+            "properties": {
+                "debugOptions": {
+                    "$ref": "DebugOptions",
+                    "description": "Common debug options."
+                }
+            },
+            "type": "object"
+        },
+        "ResponseDebugInfo": {
+            "description": "Debugging information about the response.",
+            "id": "ResponseDebugInfo",
+            "properties": {
+                "formattedDebugInfo": {
+                    "description": "General debug info formatted for display.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RestrictItem": {
+            "description": "Information relevant only to a restrict entry. NextId: 12",
+            "id": "RestrictItem",
+            "properties": {
+                "driveFollowUpRestrict": {
+                    "$ref": "DriveFollowUpRestrict",
+                    "description": "LINT.ThenChange(//depot/google3/java/com/google/apps/search/quality/itemsuggest/utils/SubtypeRerankingUtils.java)"
+                },
+                "driveLocationRestrict": {
+                    "$ref": "DriveLocationRestrict"
+                },
+                "driveMimeTypeRestrict": {
+                    "$ref": "DriveMimeTypeRestrict",
+                    "description": "LINT.IfChange Drive Types."
+                },
+                "driveTimeSpanRestrict": {
+                    "$ref": "DriveTimeSpanRestrict"
+                },
+                "searchOperator": {
+                    "description": "The search restrict (e.g. \"after:2017-09-11 before:2017-09-12\").",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ResultCounts": {
+            "description": "Result count information",
+            "id": "ResultCounts",
+            "properties": {
+                "sourceResultCounts": {
+                    "description": "Result count information for each source with results.",
+                    "items": {
+                        "$ref": "SourceResultCount"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ResultDebugInfo": {
+            "description": "Debugging information about the result.",
+            "id": "ResultDebugInfo",
+            "properties": {
+                "formattedDebugInfo": {
+                    "description": "General debug info formatted for display.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ResultDisplayField": {
+            "description": "Display Fields for Search Results",
+            "id": "ResultDisplayField",
+            "properties": {
+                "label": {
+                    "description": "The display label for the property.",
+                    "type": "string"
+                },
+                "operatorName": {
+                    "description": "The operator name of the property.",
+                    "type": "string"
+                },
+                "property": {
+                    "$ref": "NamedProperty",
+                    "description": "The name value pair for the property."
+                }
+            },
+            "type": "object"
+        },
+        "ResultDisplayLine": {
+            "description": "The collection of fields that make up a displayed line",
+            "id": "ResultDisplayLine",
+            "properties": {
+                "fields": {
+                    "items": {
+                        "$ref": "ResultDisplayField"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ResultDisplayMetadata": {
+            "id": "ResultDisplayMetadata",
+            "properties": {
+                "metalines": {
+                    "description": "The metalines content to be displayed with the result.",
+                    "items": {
+                        "$ref": "ResultDisplayLine"
+                    },
+                    "type": "array"
+                },
+                "objectTypeLabel": {
+                    "description": "The display label for the object.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RetrievalImportance": {
+            "id": "RetrievalImportance",
+            "properties": {
+                "importance": {
+                    "description": "Indicates the ranking importance given to property when it is matched during retrieval. Once set, the token importance of a property cannot be changed.",
+                    "enum": [
+                        "DEFAULT",
+                        "HIGHEST",
+                        "HIGH",
+                        "LOW",
+                        "NONE"
+                    ],
+                    "enumDescriptions": [
+                        "Treat the match like a body text match.",
+                        "Treat the match like a match against title of the item.",
+                        "Treat the match with higher importance than body text.",
+                        "Treat the match with lower importance than body text.",
+                        "Do not match against this field during retrieval. The property can still be used for operator matching, faceting, and suggest if desired."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Schema": {
+            "description": "The schema definition for a data source.",
+            "id": "Schema",
+            "properties": {
+                "objectDefinitions": {
+                    "description": "The list of top-level objects for the data source. The maximum number of elements is 10.",
+                    "items": {
+                        "$ref": "ObjectDefinition"
+                    },
+                    "type": "array"
+                },
+                "operationIds": {
+                    "description": "IDs of the Long Running Operations (LROs) currently running for this schema. After modifying the schema, wait for operations to complete before indexing additional content.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ScoringConfig": {
+            "description": "Scoring configurations for a source while processing a Search or Suggest request.",
+            "id": "ScoringConfig",
+            "properties": {
+                "disableFreshness": {
+                    "description": "Whether to use freshness as a ranking signal. By default, freshness is used as a ranking signal. Note that this setting is not available in the Admin UI.",
+                    "type": "boolean"
+                },
+                "disablePersonalization": {
+                    "description": "Whether to personalize the results. By default, personal signals will be used to boost results.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "SearchApplication": {
+            "description": "SearchApplication",
+            "id": "SearchApplication",
+            "properties": {
+                "dataSourceRestrictions": {
+                    "description": "Retrictions applied to the configurations. The maximum number of elements is 10.",
+                    "items": {
+                        "$ref": "DataSourceRestriction"
+                    },
+                    "type": "array"
+                },
+                "defaultFacetOptions": {
+                    "description": "The default fields for returning facet results. The sources specified here also have been included in data_source_restrictions above.",
+                    "items": {
+                        "$ref": "FacetOptions"
+                    },
+                    "type": "array"
+                },
+                "defaultSortOptions": {
+                    "$ref": "SortOptions",
+                    "description": "The default options for sorting the search results"
+                },
+                "displayName": {
+                    "description": "Display name of the Search Application. The maximum length is 300 characters.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of the Search Application. Format: searchapplications/{application_id}.",
+                    "type": "string"
+                },
+                "operationIds": {
+                    "description": "Output only. IDs of the Long Running Operations (LROs) currently running for this schema. Output only field.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "readOnly": true,
+                    "type": "array"
+                },
+                "scoringConfig": {
+                    "$ref": "ScoringConfig",
+                    "description": "Configuration for ranking results."
+                },
+                "sourceConfig": {
+                    "description": "Configuration for a sources specified in data_source_restrictions.",
+                    "items": {
+                        "$ref": "SourceConfig"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "SearchApplicationQueryStats": {
+            "id": "SearchApplicationQueryStats",
+            "properties": {
+                "date": {
+                    "$ref": "Date",
+                    "description": "Date for which query stats were calculated. Stats calculated on the next day close to midnight are returned."
+                },
+                "queryCountByStatus": {
+                    "items": {
+                        "$ref": "QueryCountByStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "SearchApplicationSessionStats": {
+            "id": "SearchApplicationSessionStats",
+            "properties": {
+                "date": {
+                    "$ref": "Date",
+                    "description": "Date for which session stats were calculated. Stats calculated on the next day close to midnight are returned."
+                },
+                "searchSessionsCount": {
+                    "description": "The count of search sessions on the day",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SearchApplicationUserStats": {
+            "id": "SearchApplicationUserStats",
+            "properties": {
+                "date": {
+                    "$ref": "Date",
+                    "description": "Date for which session stats were calculated. Stats calculated on the next day close to midnight are returned."
+                },
+                "oneDayActiveUsersCount": {
+                    "description": "The count of unique active users in the past one day",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "sevenDaysActiveUsersCount": {
+                    "description": "The count of unique active users in the past seven days",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "thirtyDaysActiveUsersCount": {
+                    "description": "The count of unique active users in the past thirty days",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SearchItemsByViewUrlRequest": {
+            "id": "SearchItemsByViewUrlRequest",
+            "properties": {
+                "debugOptions": {
+                    "$ref": "DebugOptions",
+                    "description": "Common debug options."
                 },
                 "pageToken": {
-                  "type": "string",
-                  "description": "The standard list page token.",
-                  "location": "query"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud_search",
-                "https://www.googleapis.com/auth/cloud_search.debug",
-                "https://www.googleapis.com/auth/cloud_search.indexing",
-                "https://www.googleapis.com/auth/cloud_search.settings",
-                "https://www.googleapis.com/auth/cloud_search.settings.indexing",
-                "https://www.googleapis.com/auth/cloud_search.settings.query"
-              ],
-              "response": {
-                "$ref": "ListOperationsResponse"
-              },
-              "id": "cloudsearch.operations.lro.list",
-              "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
-              "flatPath": "v1/operations/{operationsId}/lro",
-              "parameterOrder": [
-                "name"
-              ],
-              "path": "v1/{+name}/lro",
-              "httpMethod": "GET"
-            }
-          }
-        }
-      }
-    },
-    "debug": {
-      "resources": {
-        "datasources": {
-          "resources": {
-            "items": {
-              "resources": {
-                "unmappedids": {
-                  "methods": {
-                    "list": {
-                      "path": "v1/debug/{+parent}/unmappedids",
-                      "response": {
-                        "$ref": "ListUnmappedIdentitiesResponse"
-                      },
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "httpMethod": "GET",
-                      "flatPath": "v1/debug/datasources/{datasourcesId}/items/{itemsId}/unmappedids",
-                      "parameters": {
-                        "parent": {
-                          "required": true,
-                          "pattern": "^datasources/[^/]+/items/[^/]+$",
-                          "location": "path",
-                          "description": "The name of the item, in the following format: datasources/{source_id}/items/{ID}",
-                          "type": "string"
-                        },
-                        "pageSize": {
-                          "type": "integer",
-                          "description": "Maximum number of items to fetch in a request. Defaults to 100.",
-                          "format": "int32",
-                          "location": "query"
-                        },
-                        "debugOptions.enableDebugging": {
-                          "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
-                          "type": "boolean",
-                          "location": "query"
-                        },
-                        "pageToken": {
-                          "description": "The next_page_token value returned from a previous List request, if any.",
-                          "location": "query",
-                          "type": "string"
-                        }
-                      },
-                      "description": "List all unmapped identities for a specific item. **Note:** This API requires an admin account to execute.",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud_search",
-                        "https://www.googleapis.com/auth/cloud_search.debug"
-                      ],
-                      "id": "cloudsearch.debug.datasources.items.unmappedids.list"
-                    }
-                  }
-                }
-              },
-              "methods": {
-                "checkAccess": {
-                  "response": {
-                    "$ref": "CheckAccessResponse"
-                  },
-                  "parameters": {
-                    "debugOptions.enableDebugging": {
-                      "type": "boolean",
-                      "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
-                      "location": "query"
-                    },
-                    "name": {
-                      "type": "string",
-                      "required": true,
-                      "pattern": "^datasources/[^/]+/items/[^/]+$",
-                      "location": "path",
-                      "description": "Item name, format: datasources/{source_id}/items/{item_id}"
-                    }
-                  },
-                  "request": {
-                    "$ref": "Principal"
-                  },
-                  "flatPath": "v1/debug/datasources/{datasourcesId}/items/{itemsId}:checkAccess",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud_search",
-                    "https://www.googleapis.com/auth/cloud_search.debug"
-                  ],
-                  "httpMethod": "POST",
-                  "description": "Checks whether an item is accessible by specified principal. **Note:** This API requires an admin account to execute.",
-                  "path": "v1/debug/{+name}:checkAccess",
-                  "id": "cloudsearch.debug.datasources.items.checkAccess",
-                  "parameterOrder": [
-                    "name"
-                  ]
+                    "description": "The next_page_token value returned from a previous request, if any.",
+                    "type": "string"
                 },
-                "searchByViewUrl": {
-                  "httpMethod": "POST",
-                  "request": {
-                    "$ref": "SearchItemsByViewUrlRequest"
-                  },
-                  "id": "cloudsearch.debug.datasources.items.searchByViewUrl",
-                  "response": {
-                    "$ref": "SearchItemsByViewUrlResponse"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "path": "v1/debug/{+name}/items:searchByViewUrl",
-                  "parameters": {
-                    "name": {
-                      "location": "path",
-                      "description": "Source name, format: datasources/{source_id}",
-                      "type": "string",
-                      "required": true,
-                      "pattern": "^datasources/[^/]+$"
-                    }
-                  },
-                  "flatPath": "v1/debug/datasources/{datasourcesId}/items:searchByViewUrl",
-                  "description": "Fetches the item whose viewUrl exactly matches that of the URL provided in the request. **Note:** This API requires an admin account to execute.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud_search",
-                    "https://www.googleapis.com/auth/cloud_search.debug"
-                  ]
+                "viewUrl": {
+                    "description": "Specify the full view URL to find the corresponding item. The maximum length is 2048 characters.",
+                    "type": "string"
                 }
-              }
-            }
-          }
+            },
+            "type": "object"
         },
-        "identitysources": {
-          "resources": {
-            "unmappedids": {
-              "methods": {
-                "list": {
-                  "response": {
-                    "$ref": "ListUnmappedIdentitiesResponse"
-                  },
-                  "httpMethod": "GET",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "id": "cloudsearch.debug.identitysources.unmappedids.list",
-                  "parameters": {
-                    "parent": {
-                      "required": true,
-                      "pattern": "^identitysources/[^/]+$",
-                      "type": "string",
-                      "description": "The name of the identity source, in the following format: identitysources/{source_id}",
-                      "location": "path"
+        "SearchItemsByViewUrlResponse": {
+            "id": "SearchItemsByViewUrlResponse",
+            "properties": {
+                "items": {
+                    "items": {
+                        "$ref": "Item"
                     },
-                    "resolutionStatusCode": {
-                      "enum": [
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Token to retrieve the next page of results, or empty if there are no more results in the list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SearchQualityMetadata": {
+            "description": "Additional search quality metadata of the item.",
+            "id": "SearchQualityMetadata",
+            "properties": {
+                "quality": {
+                    "description": "An indication of the quality of the item, used to influence search quality. Value should be between 0.0 (lowest quality) and 1.0 (highest quality). The default value is 0.0.",
+                    "format": "double",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "SearchRequest": {
+            "description": "The search API request.",
+            "id": "SearchRequest",
+            "properties": {
+                "dataSourceRestrictions": {
+                    "description": "The sources to use for querying. If not specified, all data sources from the current search application are used.",
+                    "items": {
+                        "$ref": "DataSourceRestriction"
+                    },
+                    "type": "array"
+                },
+                "facetOptions": {
+                    "items": {
+                        "$ref": "FacetOptions"
+                    },
+                    "type": "array"
+                },
+                "pageSize": {
+                    "description": "Maximum number of search results to return in one page. Valid values are between 1 and 100, inclusive. Default value is 10. Minimum value is 50 when results beyond 2000 are requested.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "query": {
+                    "description": "The raw query string. See supported search operators in the [Cloud search Cheat Sheet](https://support.google.com/a/users/answer/9299929)",
+                    "type": "string"
+                },
+                "queryInterpretationOptions": {
+                    "$ref": "QueryInterpretationOptions",
+                    "description": "Options to interpret the user query."
+                },
+                "requestOptions": {
+                    "$ref": "RequestOptions",
+                    "description": "Request options, such as the search application and user timezone."
+                },
+                "sortOptions": {
+                    "$ref": "SortOptions",
+                    "description": "The options for sorting the search results"
+                },
+                "start": {
+                    "description": "Starting index of the results.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "SearchResponse": {
+            "description": "The search API response.",
+            "id": "SearchResponse",
+            "properties": {
+                "debugInfo": {
+                    "$ref": "ResponseDebugInfo",
+                    "description": "Debugging information about the response."
+                },
+                "errorInfo": {
+                    "$ref": "ErrorInfo",
+                    "description": "Error information about the response."
+                },
+                "facetResults": {
+                    "description": "Repeated facet results.",
+                    "items": {
+                        "$ref": "FacetResult"
+                    },
+                    "type": "array"
+                },
+                "hasMoreResults": {
+                    "description": "Whether there are more search results matching the query.",
+                    "type": "boolean"
+                },
+                "queryInterpretation": {
+                    "$ref": "QueryInterpretation",
+                    "description": "Query interpretation result for user query. Empty if query interpretation is disabled."
+                },
+                "resultCountEstimate": {
+                    "description": "The estimated result count for this query.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "resultCountExact": {
+                    "description": "The exact result count for this query.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "resultCounts": {
+                    "$ref": "ResultCounts",
+                    "description": "Expanded result count information."
+                },
+                "results": {
+                    "description": "Results from a search query.",
+                    "items": {
+                        "$ref": "SearchResult"
+                    },
+                    "type": "array"
+                },
+                "spellResults": {
+                    "description": "Suggested spelling for the query.",
+                    "items": {
+                        "$ref": "SpellResult"
+                    },
+                    "type": "array"
+                },
+                "structuredResults": {
+                    "description": "Structured results for the user query. These results are not counted against the page_size.",
+                    "items": {
+                        "$ref": "StructuredResult"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "SearchResult": {
+            "description": "Results containing indexed information for a document.",
+            "id": "SearchResult",
+            "properties": {
+                "clusteredResults": {
+                    "description": "If source is clustered, provide list of clustered results. There will only be one level of clustered results. If current source is not enabled for clustering, this field will be empty.",
+                    "items": {
+                        "$ref": "SearchResult"
+                    },
+                    "type": "array"
+                },
+                "debugInfo": {
+                    "$ref": "ResultDebugInfo",
+                    "description": "Debugging information about this search result."
+                },
+                "metadata": {
+                    "$ref": "Metadata",
+                    "description": "Metadata of the search result."
+                },
+                "snippet": {
+                    "$ref": "Snippet",
+                    "description": "The concatenation of all snippets (summaries) available for this result."
+                },
+                "title": {
+                    "description": "Title of the search result.",
+                    "type": "string"
+                },
+                "url": {
+                    "description": "The URL of the search result. The URL contains a Google redirect to the actual item. This URL is signed and shouldn't be changed.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Snippet": {
+            "description": "Snippet of the search result, which summarizes the content of the resulting page.",
+            "id": "Snippet",
+            "properties": {
+                "matchRanges": {
+                    "description": "The matched ranges in the snippet.",
+                    "items": {
+                        "$ref": "MatchRange"
+                    },
+                    "type": "array"
+                },
+                "snippet": {
+                    "description": "The snippet of the document. The snippet of the document. May contain escaped HTML character that should be unescaped prior to rendering.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SortOptions": {
+            "id": "SortOptions",
+            "properties": {
+                "operatorName": {
+                    "description": "Name of the operator corresponding to the field to sort on. The corresponding property must be marked as sortable.",
+                    "type": "string"
+                },
+                "sortOrder": {
+                    "description": "Ascending is the default sort order",
+                    "enum": [
+                        "ASCENDING",
+                        "DESCENDING"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Source": {
+            "description": "Defines sources for the suggest/search APIs.",
+            "id": "Source",
+            "properties": {
+                "name": {
+                    "description": "Source name for content indexed by the Indexing API.",
+                    "type": "string"
+                },
+                "predefinedSource": {
+                    "description": "Predefined content source for Google Apps.",
+                    "enum": [
+                        "NONE",
+                        "QUERY_HISTORY",
+                        "PERSON",
+                        "GOOGLE_DRIVE",
+                        "GOOGLE_GMAIL",
+                        "GOOGLE_SITES",
+                        "GOOGLE_GROUPS",
+                        "GOOGLE_CALENDAR",
+                        "GOOGLE_KEEP"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "Suggests queries issued by the user in the past. Only valid when used with the suggest API. Ignored when used in the query API.",
+                        "Suggests people in the organization. Only valid when used with the suggest API. Results in an error when used in the query API.",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SourceConfig": {
+            "description": "Configurations for a source while processing a Search or Suggest request.",
+            "id": "SourceConfig",
+            "properties": {
+                "crowdingConfig": {
+                    "$ref": "SourceCrowdingConfig",
+                    "description": "The crowding configuration for the source."
+                },
+                "scoringConfig": {
+                    "$ref": "SourceScoringConfig",
+                    "description": "The scoring configuration for the source."
+                },
+                "source": {
+                    "$ref": "Source",
+                    "description": "The source for which this configuration is to be used."
+                }
+            },
+            "type": "object"
+        },
+        "SourceCrowdingConfig": {
+            "description": "Set search results crowding limits. Crowding is a situation in which multiple results from the same source or host \"crowd out\" other results, diminishing the quality of search for users. To foster better search quality and source diversity in search results, you can set a condition to reduce repetitive results by source.",
+            "id": "SourceCrowdingConfig",
+            "properties": {
+                "numResults": {
+                    "description": "Maximum number of results allowed from a source. No limits will be set on results if this value is less than or equal to 0.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "numSuggestions": {
+                    "description": "Maximum number of suggestions allowed from a source. No limits will be set on results if this value is less than or equal to 0.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "SourceResultCount": {
+            "description": "Per source result count information.",
+            "id": "SourceResultCount",
+            "properties": {
+                "hasMoreResults": {
+                    "description": "Whether there are more search results for this source.",
+                    "type": "boolean"
+                },
+                "resultCountEstimate": {
+                    "description": "The estimated result count for this source.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "resultCountExact": {
+                    "description": "The exact result count for this source.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "source": {
+                    "$ref": "Source",
+                    "description": "The source the result count information is associated with."
+                }
+            },
+            "type": "object"
+        },
+        "SourceScoringConfig": {
+            "description": "Set the scoring configuration. This allows modifying the ranking of results for a source.",
+            "id": "SourceScoringConfig",
+            "properties": {
+                "sourceImportance": {
+                    "description": "Importance of the source.",
+                    "enum": [
+                        "DEFAULT",
+                        "LOW",
+                        "HIGH"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SpellResult": {
+            "id": "SpellResult",
+            "properties": {
+                "suggestedQuery": {
+                    "description": "The suggested spelling of the query.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "StartUploadItemRequest": {
+            "description": "Start upload file request.",
+            "id": "StartUploadItemRequest",
+            "properties": {
+                "connectorName": {
+                    "description": "Name of connector making this call. Format: datasources/{source_id}/connectors/{ID}",
+                    "type": "string"
+                },
+                "debugOptions": {
+                    "$ref": "DebugOptions",
+                    "description": "Common debug options."
+                }
+            },
+            "type": "object"
+        },
+        "Status": {
+            "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
+            "id": "Status",
+            "properties": {
+                "code": {
+                    "description": "The status code, which should be an enum value of google.rpc.Code.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "StructuredDataObject": {
+            "description": "A structured data object consisting of named properties.",
+            "id": "StructuredDataObject",
+            "properties": {
+                "properties": {
+                    "description": "The properties for the object. The maximum number of elements is 1000.",
+                    "items": {
+                        "$ref": "NamedProperty"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "StructuredResult": {
+            "description": "Structured results that are returned as part of search request.",
+            "id": "StructuredResult",
+            "properties": {
+                "person": {
+                    "$ref": "Person",
+                    "description": "Representation of a person"
+                }
+            },
+            "type": "object"
+        },
+        "SuggestRequest": {
+            "description": "Request of suggest API.",
+            "id": "SuggestRequest",
+            "properties": {
+                "dataSourceRestrictions": {
+                    "description": "The sources to use for suggestions. If not specified, the data sources are taken from the current search application. NOTE: Suggestions are only supported for the following sources: * Third-party data sources * PredefinedSource.PERSON * PredefinedSource.GOOGLE_DRIVE",
+                    "items": {
+                        "$ref": "DataSourceRestriction"
+                    },
+                    "type": "array"
+                },
+                "query": {
+                    "description": "Partial query for which autocomplete suggestions will be shown. For example, if the query is \"sea\", then the server might return \"season\", \"search\", \"seagull\" and so on.",
+                    "type": "string"
+                },
+                "requestOptions": {
+                    "$ref": "RequestOptions",
+                    "description": "Request options, such as the search application and user timezone."
+                }
+            },
+            "type": "object"
+        },
+        "SuggestResponse": {
+            "description": "Response of the suggest API.",
+            "id": "SuggestResponse",
+            "properties": {
+                "suggestResults": {
+                    "description": "List of suggestions.",
+                    "items": {
+                        "$ref": "SuggestResult"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "SuggestResult": {
+            "description": "One suggestion result.",
+            "id": "SuggestResult",
+            "properties": {
+                "peopleSuggestion": {
+                    "$ref": "PeopleSuggestion",
+                    "description": "This is present when the suggestion indicates a person. It contains more information about the person - like their email ID, name etc."
+                },
+                "querySuggestion": {
+                    "$ref": "QuerySuggestion",
+                    "description": "This field will be present if the suggested query is a word/phrase completion."
+                },
+                "source": {
+                    "$ref": "Source",
+                    "description": "The source of the suggestion."
+                },
+                "suggestedQuery": {
+                    "description": "The suggested query that will be used for search, when the user clicks on the suggestion",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TextOperatorOptions": {
+            "description": "Used to provide a search operator for text properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched.",
+            "id": "TextOperatorOptions",
+            "properties": {
+                "exactMatchWithOperator": {
+                    "description": "If true, the text value is tokenized as one atomic value in operator searches and facet matches. For example, if the operator name is \"genre\" and the value is \"science-fiction\" the query restrictions \"genre:science\" and \"genre:fiction\" doesn't match the item; \"genre:science-fiction\" does. Value matching is case-sensitive and does not remove special characters. If false, the text is tokenized. For example, if the value is \"science-fiction\" the queries \"genre:science\" and \"genre:fiction\" matches the item.",
+                    "type": "boolean"
+                },
+                "operatorName": {
+                    "description": "Indicates the operator name required in the query in order to isolate the text property. For example, if operatorName is *subject* and the property's name is *subjectLine*, then queries like *subject:<value>* show results only where the value of the property named *subjectLine* matches *<value>*. By contrast, a search that uses the same *<value>* without an operator returns all items where *<value>* matches the value of any text properties or text within the content field for the item. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TextPropertyOptions": {
+            "description": "Options for text properties.",
+            "id": "TextPropertyOptions",
+            "properties": {
+                "operatorOptions": {
+                    "$ref": "TextOperatorOptions",
+                    "description": "If set, describes how the property should be used as a search operator."
+                },
+                "retrievalImportance": {
+                    "$ref": "RetrievalImportance",
+                    "description": "Indicates the search quality importance of the tokens within the field when used for retrieval."
+                }
+            },
+            "type": "object"
+        },
+        "TextValues": {
+            "description": "List of text values.",
+            "id": "TextValues",
+            "properties": {
+                "values": {
+                    "description": "The maximum allowable length for text values is 2048 characters.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "TimestampOperatorOptions": {
+            "description": "Used to provide a search operator for timestamp properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched.",
+            "id": "TimestampOperatorOptions",
+            "properties": {
+                "greaterThanOperatorName": {
+                    "description": "Indicates the operator name required in the query in order to isolate the timestamp property using the greater-than operator. For example, if greaterThanOperatorName is *closedafter* and the property's name is *closeDate*, then queries like *closedafter:<value>* show results only where the value of the property named *closeDate* is later than *<value>*. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.",
+                    "type": "string"
+                },
+                "lessThanOperatorName": {
+                    "description": "Indicates the operator name required in the query in order to isolate the timestamp property using the less-than operator. For example, if lessThanOperatorName is *closedbefore* and the property's name is *closeDate*, then queries like *closedbefore:<value>* show results only where the value of the property named *closeDate* is earlier than *<value>*. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.",
+                    "type": "string"
+                },
+                "operatorName": {
+                    "description": "Indicates the operator name required in the query in order to isolate the timestamp property. For example, if operatorName is *closedon* and the property's name is *closeDate*, then queries like *closedon:<value>* show results only where the value of the property named *closeDate* matches *<value>*. By contrast, a search that uses the same *<value>* without an operator returns all items where *<value>* matches the value of any String properties or text within the content field for the item. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TimestampPropertyOptions": {
+            "description": "Options for timestamp properties.",
+            "id": "TimestampPropertyOptions",
+            "properties": {
+                "operatorOptions": {
+                    "$ref": "TimestampOperatorOptions",
+                    "description": "If set, describes how the timestamp should be used as a search operator."
+                }
+            },
+            "type": "object"
+        },
+        "TimestampValues": {
+            "description": "List of timestamp values.",
+            "id": "TimestampValues",
+            "properties": {
+                "values": {
+                    "items": {
+                        "format": "google-datetime",
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "UnmappedIdentity": {
+            "id": "UnmappedIdentity",
+            "properties": {
+                "externalIdentity": {
+                    "$ref": "Principal",
+                    "description": "The resource name for an external user."
+                },
+                "resolutionStatusCode": {
+                    "description": "The resolution status for the external identity.",
+                    "enum": [
                         "CODE_UNSPECIFIED",
                         "NOT_FOUND",
                         "IDENTITY_SOURCE_NOT_FOUND",
                         "IDENTITY_SOURCE_MISCONFIGURED",
                         "TOO_MANY_MAPPINGS_FOUND",
                         "INTERNAL_ERROR"
-                      ],
-                      "enumDescriptions": [
+                    ],
+                    "enumDescriptions": [
                         "Input-only value. Used to list all unmapped identities regardless of status.",
                         "The unmapped identity was not found in IDaaS, and needs to be provided by the user.",
                         "The identity source associated with the identity was either not found or deleted.",
                         "IDaaS does not understand the identity source, probably because the schema was modified in a non compatible way.",
                         "The number of users associated with the external identity is too large.",
                         "Internal error."
-                      ],
-                      "description": "Limit users selection to this status.",
-                      "location": "query",
-                      "type": "string"
-                    },
-                    "pageSize": {
-                      "description": "Maximum number of items to fetch in a request. Defaults to 100.",
-                      "location": "query",
-                      "format": "int32",
-                      "type": "integer"
-                    },
-                    "pageToken": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "The next_page_token value returned from a previous List request, if any."
-                    },
-                    "debugOptions.enableDebugging": {
-                      "type": "boolean",
-                      "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
-                      "location": "query"
-                    }
-                  },
-                  "description": "Lists unmapped user identities for an identity source. **Note:** This API requires an admin account to execute.",
-                  "flatPath": "v1/debug/identitysources/{identitysourcesId}/unmappedids",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud_search",
-                    "https://www.googleapis.com/auth/cloud_search.debug"
-                  ],
-                  "path": "v1/debug/{+parent}/unmappedids"
+                    ],
+                    "type": "string"
                 }
-              }
             },
-            "items": {
-              "methods": {
-                "listForunmappedidentity": {
-                  "id": "cloudsearch.debug.identitysources.items.listForunmappedidentity",
-                  "flatPath": "v1/debug/identitysources/{identitysourcesId}/items:forunmappedidentity",
-                  "description": "Lists names of items associated with an unmapped identity. **Note:** This API requires an admin account to execute.",
-                  "parameters": {
-                    "parent": {
-                      "required": true,
-                      "type": "string",
-                      "description": "The name of the identity source, in the following format: identitysources/{source_id}}",
-                      "pattern": "^identitysources/[^/]+$",
-                      "location": "path"
-                    },
-                    "groupResourceName": {
-                      "location": "query",
-                      "type": "string"
-                    },
-                    "pageSize": {
-                      "format": "int32",
-                      "description": "Maximum number of items to fetch in a request. Defaults to 100.",
-                      "location": "query",
-                      "type": "integer"
-                    },
-                    "userResourceName": {
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "pageToken": {
-                      "location": "query",
-                      "description": "The next_page_token value returned from a previous List request, if any.",
-                      "type": "string"
-                    },
-                    "debugOptions.enableDebugging": {
-                      "location": "query",
-                      "description": "If you are asked by Google to help with debugging, set this field. Otherwise, ignore this field.",
-                      "type": "boolean"
-                    }
-                  },
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "response": {
-                    "$ref": "ListItemNamesForUnmappedIdentityResponse"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud_search",
-                    "https://www.googleapis.com/auth/cloud_search.debug"
-                  ],
-                  "path": "v1/debug/{+parent}/items:forunmappedidentity",
-                  "httpMethod": "GET"
+            "type": "object"
+        },
+        "UnreserveItemsRequest": {
+            "id": "UnreserveItemsRequest",
+            "properties": {
+                "connectorName": {
+                    "description": "Name of connector making this call. Format: datasources/{source_id}/connectors/{ID}",
+                    "type": "string"
+                },
+                "debugOptions": {
+                    "$ref": "DebugOptions",
+                    "description": "Common debug options."
+                },
+                "queue": {
+                    "description": "Name of a queue to unreserve items from.",
+                    "type": "string"
                 }
-              }
-            }
-          }
+            },
+            "type": "object"
+        },
+        "UpdateDataSourceRequest": {
+            "id": "UpdateDataSourceRequest",
+            "properties": {
+                "debugOptions": {
+                    "$ref": "DebugOptions",
+                    "description": "Common debug options."
+                },
+                "source": {
+                    "$ref": "DataSource"
+                }
+            },
+            "type": "object"
+        },
+        "UpdateSchemaRequest": {
+            "id": "UpdateSchemaRequest",
+            "properties": {
+                "debugOptions": {
+                    "$ref": "DebugOptions",
+                    "description": "Common debug options."
+                },
+                "schema": {
+                    "$ref": "Schema",
+                    "description": "The new schema for the source."
+                },
+                "validateOnly": {
+                    "description": "If true, the schema will be checked for validity, but will not be registered with the data source, even if valid.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "UploadItemRef": {
+            "description": "Represents an upload session reference. This reference is created via upload method. Updating of item content may refer to this uploaded content via contentDataRef.",
+            "id": "UploadItemRef",
+            "properties": {
+                "name": {
+                    "description": "Name of the content reference. The maximum length is 2048 characters.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Value": {
+            "description": "Definition of a single value with generic type.",
+            "id": "Value",
+            "properties": {
+                "booleanValue": {
+                    "type": "boolean"
+                },
+                "dateValue": {
+                    "$ref": "Date"
+                },
+                "doubleValue": {
+                    "format": "double",
+                    "type": "number"
+                },
+                "integerValue": {
+                    "format": "int64",
+                    "type": "string"
+                },
+                "stringValue": {
+                    "type": "string"
+                },
+                "timestampValue": {
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ValueFilter": {
+            "id": "ValueFilter",
+            "properties": {
+                "operatorName": {
+                    "description": "The `operator_name` applied to the query, such as *price_greater_than*. The filter can work against both types of filters defined in the schema for your data source: 1. `operator_name`, where the query filters results by the property that matches the value. 2. `greater_than_operator_name` or `less_than_operator_name` in your schema. The query filters the results for the property values that are greater than or less than the supplied value in the query.",
+                    "type": "string"
+                },
+                "value": {
+                    "$ref": "Value",
+                    "description": "The value to be compared with."
+                }
+            },
+            "type": "object"
         }
-      }
-    }
-  },
-  "version": "v1",
-  "mtlsRootUrl": "https://cloudsearch.mtls.googleapis.com/",
-  "version_module": true,
-  "ownerDomain": "google.com",
-  "baseUrl": "https://cloudsearch.googleapis.com/",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "batchPath": "batch",
-  "description": "Cloud Search provides cloud-based search capabilities over G Suite data. The Cloud Search API allows indexing of non-G Suite data into Cloud Search.",
-  "discoveryVersion": "v1",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud_search": {
-          "description": "Index and serve your organization's data with Cloud Search"
-        },
-        "https://www.googleapis.com/auth/cloud_search.stats": {
-          "description": "Index and serve your organization's data with Cloud Search"
-        },
-        "https://www.googleapis.com/auth/cloud_search.settings.indexing": {
-          "description": "Index and serve your organization's data with Cloud Search"
-        },
-        "https://www.googleapis.com/auth/cloud_search.settings": {
-          "description": "Index and serve your organization's data with Cloud Search"
-        },
-        "https://www.googleapis.com/auth/cloud_search.stats.indexing": {
-          "description": "Index and serve your organization's data with Cloud Search"
-        },
-        "https://www.googleapis.com/auth/cloud_search.query": {
-          "description": "Search your organization's data in the Cloud Search index"
-        },
-        "https://www.googleapis.com/auth/cloud_search.debug": {
-          "description": "Index and serve your organization's data with Cloud Search"
-        },
-        "https://www.googleapis.com/auth/cloud_search.settings.query": {
-          "description": "Index and serve your organization's data with Cloud Search"
-        },
-        "https://www.googleapis.com/auth/cloud_search.indexing": {
-          "description": "Index and serve your organization's data with Cloud Search"
-        }
-      }
-    }
-  }
-}
+    },
+    "servicePath": "",
+    "title": "Cloud Search API",
+    "version": "v1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/cloudshell.v1.json b/googleapiclient/discovery_cache/documents/cloudshell.v1.json
index d4ba243..218c846 100644
--- a/googleapiclient/discovery_cache/documents/cloudshell.v1.json
+++ b/googleapiclient/discovery_cache/documents/cloudshell.v1.json
@@ -1,694 +1,694 @@
 {
-  "basePath": "",
-  "name": "cloudshell",
-  "kind": "discovery#restDescription",
-  "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
-  },
-  "documentationLink": "https://cloud.google.com/shell/docs/",
-  "version": "v1",
-  "version_module": true,
-  "schemas": {
-    "StartEnvironmentResponse": {
-      "description": "Message included in the response field of operations returned from StartEnvironment once the operation is complete.",
-      "properties": {
-        "environment": {
-          "$ref": "Environment",
-          "description": "Environment that was started."
-        }
-      },
-      "type": "object",
-      "id": "StartEnvironmentResponse"
-    },
-    "StartEnvironmentMetadata": {
-      "properties": {
-        "state": {
-          "enumDescriptions": [
-            "The environment's start state is unknown.",
-            "The environment is in the process of being started, but no additional details are available.",
-            "Startup is waiting for the user's disk to be unarchived. This can happen when the user returns to Cloud Shell after not having used it for a while, and suggests that startup will take longer than normal.",
-            "Startup is waiting for compute resources to be assigned to the environment. This should normally happen very quickly, but an environment might stay in this state for an extended period of time if the system is experiencing heavy load.",
-            "Startup has completed. If the start operation was successful, the user should be able to establish an SSH connection to their environment. Otherwise, the operation will contain details of the failure."
-          ],
-          "enum": [
-            "STATE_UNSPECIFIED",
-            "STARTING",
-            "UNARCHIVING_DISK",
-            "AWAITING_COMPUTE_RESOURCES",
-            "FINISHED"
-          ],
-          "type": "string",
-          "description": "Current state of the environment being started."
-        }
-      },
-      "id": "StartEnvironmentMetadata",
-      "description": "Message included in the metadata field of operations returned from StartEnvironment.",
-      "type": "object"
-    },
-    "RemovePublicKeyMetadata": {
-      "description": "Message included in the metadata field of operations returned from RemovePublicKey.",
-      "id": "RemovePublicKeyMetadata",
-      "properties": {},
-      "type": "object"
-    },
-    "StartEnvironmentRequest": {
-      "id": "StartEnvironmentRequest",
-      "type": "object",
-      "properties": {
-        "publicKeys": {
-          "description": "Public keys that should be added to the environment before it is started.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "accessToken": {
-          "type": "string",
-          "description": "The initial access token passed to the environment. If this is present and valid, the environment will be pre-authenticated with gcloud so that the user can run gcloud commands in Cloud Shell without having to log in. This code can be updated later by calling AuthorizeEnvironment."
-        }
-      },
-      "description": "Request message for StartEnvironment."
-    },
-    "AddPublicKeyRequest": {
-      "properties": {
-        "key": {
-          "description": "Key that should be added to the environment. Supported formats are `ssh-dss` (see RFC4253), `ssh-rsa` (see RFC4253), `ecdsa-sha2-nistp256` (see RFC5656), `ecdsa-sha2-nistp384` (see RFC5656) and `ecdsa-sha2-nistp521` (see RFC5656). It should be structured as , where part is encoded with Base64.",
-          "type": "string"
-        }
-      },
-      "id": "AddPublicKeyRequest",
-      "type": "object",
-      "description": "Request message for AddPublicKey."
-    },
-    "AuthorizeEnvironmentResponse": {
-      "description": "Response message for AuthorizeEnvironment.",
-      "type": "object",
-      "properties": {},
-      "id": "AuthorizeEnvironmentResponse"
-    },
-    "CreateEnvironmentMetadata": {
-      "type": "object",
-      "description": "Message included in the metadata field of operations returned from CreateEnvironment.",
-      "id": "CreateEnvironmentMetadata",
-      "properties": {}
-    },
-    "AddPublicKeyMetadata": {
-      "type": "object",
-      "properties": {},
-      "id": "AddPublicKeyMetadata",
-      "description": "Message included in the metadata field of operations returned from AddPublicKey."
-    },
-    "AddPublicKeyResponse": {
-      "description": "Response message for AddPublicKey.",
-      "type": "object",
-      "id": "AddPublicKeyResponse",
-      "properties": {
-        "key": {
-          "description": "Key that was added to the environment.",
-          "type": "string"
-        }
-      }
-    },
-    "Status": {
-      "properties": {
-        "code": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The status code, which should be an enum value of google.rpc.Code."
-        },
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
-          "type": "string"
-        },
-        "details": {
-          "items": {
-            "type": "object",
-            "additionalProperties": {
-              "description": "Properties of the object. Contains field @type with type URL.",
-              "type": "any"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
+                }
             }
-          },
-          "type": "array",
-          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use."
         }
-      },
-      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
-      "id": "Status",
-      "type": "object"
     },
-    "Operation": {
-      "properties": {
-        "metadata": {
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "type": "object",
-          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any."
+    "basePath": "",
+    "baseUrl": "https://cloudshell.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Cloud Shell",
+    "description": "Allows users to start, configure, and connect to interactive shell sessions running in the cloud. ",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/shell/docs/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "cloudshell:v1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://cloudshell.mtls.googleapis.com/",
+    "name": "cloudshell",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "done": {
-          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
-          "type": "boolean"
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
         },
-        "error": {
-          "description": "The error result of the operation in case of failure or cancellation.",
-          "$ref": "Status"
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "name": {
-          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
-          "type": "string"
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
         },
-        "response": {
-          "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          }
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      },
-      "type": "object",
-      "description": "This resource represents a long-running operation that is the result of a network API call.",
-      "id": "Operation"
     },
-    "CancelOperationRequest": {
-      "type": "object",
-      "properties": {},
-      "id": "CancelOperationRequest",
-      "description": "The request message for Operations.CancelOperation."
-    },
-    "ListOperationsResponse": {
-      "type": "object",
-      "description": "The response message for Operations.ListOperations.",
-      "id": "ListOperationsResponse",
-      "properties": {
+    "protocol": "rest",
+    "resources": {
         "operations": {
-          "type": "array",
-          "description": "A list of operations that matches the specified filter in the request.",
-          "items": {
-            "$ref": "Operation"
-          }
+            "methods": {
+                "cancel": {
+                    "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.",
+                    "flatPath": "v1/operations/{operationsId}:cancel",
+                    "httpMethod": "POST",
+                    "id": "cloudshell.operations.cancel",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "The name of the operation resource to be cancelled.",
+                            "location": "path",
+                            "pattern": "^operations/.*$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/{+name}:cancel",
+                    "request": {
+                        "$ref": "CancelOperationRequest"
+                    },
+                    "response": {
+                        "$ref": "Empty"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                    ]
+                },
+                "delete": {
+                    "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.",
+                    "flatPath": "v1/operations/{operationsId}",
+                    "httpMethod": "DELETE",
+                    "id": "cloudshell.operations.delete",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "The name of the operation resource to be deleted.",
+                            "location": "path",
+                            "pattern": "^operations/.*$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/{+name}",
+                    "response": {
+                        "$ref": "Empty"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                    ]
+                },
+                "get": {
+                    "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
+                    "flatPath": "v1/operations/{operationsId}",
+                    "httpMethod": "GET",
+                    "id": "cloudshell.operations.get",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "The name of the operation resource.",
+                            "location": "path",
+                            "pattern": "^operations/.*$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/{+name}",
+                    "response": {
+                        "$ref": "Operation"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                    ]
+                },
+                "list": {
+                    "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
+                    "flatPath": "v1/operations",
+                    "httpMethod": "GET",
+                    "id": "cloudshell.operations.list",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "filter": {
+                            "description": "The standard list filter.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "name": {
+                            "description": "The name of the operation's parent resource.",
+                            "location": "path",
+                            "pattern": "^operations$",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "pageSize": {
+                            "description": "The standard list page size.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The standard list page token.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/{+name}",
+                    "response": {
+                        "$ref": "ListOperationsResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                    ]
+                }
+            }
         },
-        "nextPageToken": {
-          "type": "string",
-          "description": "The standard List next-page token."
+        "users": {
+            "resources": {
+                "environments": {
+                    "methods": {
+                        "addPublicKey": {
+                            "description": "Adds a public SSH key to an environment, allowing clients with the corresponding private key to connect to that environment via SSH. If a key with the same content already exists, this will error with ALREADY_EXISTS.",
+                            "flatPath": "v1/users/{usersId}/environments/{environmentsId}:addPublicKey",
+                            "httpMethod": "POST",
+                            "id": "cloudshell.users.environments.addPublicKey",
+                            "parameterOrder": [
+                                "environment"
+                            ],
+                            "parameters": {
+                                "environment": {
+                                    "description": "Environment this key should be added to, e.g. `users/me/environments/default`.",
+                                    "location": "path",
+                                    "pattern": "^users/[^/]+/environments/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+environment}:addPublicKey",
+                            "request": {
+                                "$ref": "AddPublicKeyRequest"
+                            },
+                            "response": {
+                                "$ref": "Operation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "authorize": {
+                            "description": "Sends OAuth credentials to a running environment on behalf of a user. When this completes, the environment will be authorized to run various Google Cloud command line tools without requiring the user to manually authenticate.",
+                            "flatPath": "v1/users/{usersId}/environments/{environmentsId}:authorize",
+                            "httpMethod": "POST",
+                            "id": "cloudshell.users.environments.authorize",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Name of the resource that should receive the credentials, for example `users/me/environments/default` or `users/someone@example.com/environments/default`.",
+                                    "location": "path",
+                                    "pattern": "^users/[^/]+/environments/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+name}:authorize",
+                            "request": {
+                                "$ref": "AuthorizeEnvironmentRequest"
+                            },
+                            "response": {
+                                "$ref": "Operation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets an environment. Returns NOT_FOUND if the environment does not exist.",
+                            "flatPath": "v1/users/{usersId}/environments/{environmentsId}",
+                            "httpMethod": "GET",
+                            "id": "cloudshell.users.environments.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. Name of the requested resource, for example `users/me/environments/default` or `users/someone@example.com/environments/default`.",
+                                    "location": "path",
+                                    "pattern": "^users/[^/]+/environments/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+name}",
+                            "response": {
+                                "$ref": "Environment"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "removePublicKey": {
+                            "description": "Removes a public SSH key from an environment. Clients will no longer be able to connect to the environment using the corresponding private key. If a key with the same content is not present, this will error with NOT_FOUND.",
+                            "flatPath": "v1/users/{usersId}/environments/{environmentsId}:removePublicKey",
+                            "httpMethod": "POST",
+                            "id": "cloudshell.users.environments.removePublicKey",
+                            "parameterOrder": [
+                                "environment"
+                            ],
+                            "parameters": {
+                                "environment": {
+                                    "description": "Environment this key should be removed from, e.g. `users/me/environments/default`.",
+                                    "location": "path",
+                                    "pattern": "^users/[^/]+/environments/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+environment}:removePublicKey",
+                            "request": {
+                                "$ref": "RemovePublicKeyRequest"
+                            },
+                            "response": {
+                                "$ref": "Operation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "start": {
+                            "description": "Starts an existing environment, allowing clients to connect to it. The returned operation will contain an instance of StartEnvironmentMetadata in its metadata field. Users can wait for the environment to start by polling this operation via GetOperation. Once the environment has finished starting and is ready to accept connections, the operation will contain a StartEnvironmentResponse in its response field.",
+                            "flatPath": "v1/users/{usersId}/environments/{environmentsId}:start",
+                            "httpMethod": "POST",
+                            "id": "cloudshell.users.environments.start",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Name of the resource that should be started, for example `users/me/environments/default` or `users/someone@example.com/environments/default`.",
+                                    "location": "path",
+                                    "pattern": "^users/[^/]+/environments/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+name}:start",
+                            "request": {
+                                "$ref": "StartEnvironmentRequest"
+                            },
+                            "response": {
+                                "$ref": "Operation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        }
+                    }
+                }
+            }
         }
-      }
     },
-    "AuthorizeEnvironmentMetadata": {
-      "description": "Message included in the metadata field of operations returned from AuthorizeEnvironment.",
-      "id": "AuthorizeEnvironmentMetadata",
-      "type": "object",
-      "properties": {}
-    },
-    "RemovePublicKeyResponse": {
-      "type": "object",
-      "description": "Response message for RemovePublicKey.",
-      "id": "RemovePublicKeyResponse",
-      "properties": {}
-    },
-    "Environment": {
-      "description": "A Cloud Shell environment, which is defined as the combination of a Docker image specifying what is installed on the environment and a home directory containing the user's data that will remain across sessions. Each user has at least an environment with the ID \"default\".",
-      "type": "object",
-      "properties": {
-        "sshPort": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Output only. Port to which clients can connect to initiate SSH sessions with the environment.",
-          "readOnly": true
+    "revision": "20210119",
+    "rootUrl": "https://cloudshell.googleapis.com/",
+    "schemas": {
+        "AddPublicKeyMetadata": {
+            "description": "Message included in the metadata field of operations returned from AddPublicKey.",
+            "id": "AddPublicKeyMetadata",
+            "properties": {},
+            "type": "object"
         },
-        "state": {
-          "description": "Output only. Current execution state of this environment.",
-          "type": "string",
-          "enum": [
-            "STATE_UNSPECIFIED",
-            "SUSPENDED",
-            "PENDING",
-            "RUNNING",
-            "DELETING"
-          ],
-          "enumDescriptions": [
-            "The environment's states is unknown.",
-            "The environment is not running and can't be connected to. Starting the environment will transition it to the PENDING state.",
-            "The environment is being started but is not yet ready to accept connections.",
-            "The environment is running and ready to accept connections. It will automatically transition back to DISABLED after a period of inactivity or if another environment is started.",
-            "The environment is being deleted and can't be connected to."
-          ],
-          "readOnly": true
+        "AddPublicKeyRequest": {
+            "description": "Request message for AddPublicKey.",
+            "id": "AddPublicKeyRequest",
+            "properties": {
+                "key": {
+                    "description": "Key that should be added to the environment. Supported formats are `ssh-dss` (see RFC4253), `ssh-rsa` (see RFC4253), `ecdsa-sha2-nistp256` (see RFC5656), `ecdsa-sha2-nistp384` (see RFC5656) and `ecdsa-sha2-nistp521` (see RFC5656). It should be structured as <format> <content>, where <content> part is encoded with Base64.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "sshUsername": {
-          "type": "string",
-          "description": "Output only. Username that clients should use when initiating SSH sessions with the environment.",
-          "readOnly": true
+        "AddPublicKeyResponse": {
+            "description": "Response message for AddPublicKey.",
+            "id": "AddPublicKeyResponse",
+            "properties": {
+                "key": {
+                    "description": "Key that was added to the environment.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "name": {
-          "description": "Immutable. Full name of this resource, in the format `users/{owner_email}/environments/{environment_id}`. `{owner_email}` is the email address of the user to whom this environment belongs, and `{environment_id}` is the identifier of this environment. For example, `users/someone@example.com/environments/default`.",
-          "type": "string"
+        "AuthorizeEnvironmentMetadata": {
+            "description": "Message included in the metadata field of operations returned from AuthorizeEnvironment.",
+            "id": "AuthorizeEnvironmentMetadata",
+            "properties": {},
+            "type": "object"
         },
-        "dockerImage": {
-          "type": "string",
-          "description": "Required. Immutable. Full path to the Docker image used to run this environment, e.g. \"gcr.io/dev-con/cloud-devshell:latest\"."
+        "AuthorizeEnvironmentRequest": {
+            "description": "Request message for AuthorizeEnvironment.",
+            "id": "AuthorizeEnvironmentRequest",
+            "properties": {
+                "accessToken": {
+                    "description": "The OAuth access token that should be sent to the environment.",
+                    "type": "string"
+                },
+                "expireTime": {
+                    "description": "The time when the credentials expire. If not set, defaults to one hour from when the server received the request.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "idToken": {
+                    "description": "The OAuth ID token that should be sent to the environment.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "publicKeys": {
-          "description": "Output only. Public keys associated with the environment. Clients can connect to this environment via SSH only if they possess a private key corresponding to at least one of these public keys. Keys can be added to or removed from the environment using the AddPublicKey and RemovePublicKey methods.",
-          "type": "array",
-          "readOnly": true,
-          "items": {
-            "type": "string"
-          }
+        "AuthorizeEnvironmentResponse": {
+            "description": "Response message for AuthorizeEnvironment.",
+            "id": "AuthorizeEnvironmentResponse",
+            "properties": {},
+            "type": "object"
         },
-        "webHost": {
-          "type": "string",
-          "description": "Output only. Host to which clients can connect to initiate HTTPS or WSS connections with the environment.",
-          "readOnly": true
+        "CancelOperationRequest": {
+            "description": "The request message for Operations.CancelOperation.",
+            "id": "CancelOperationRequest",
+            "properties": {},
+            "type": "object"
         },
-        "id": {
-          "type": "string",
-          "description": "Output only. The environment's identifier, unique among the user's environments.",
-          "readOnly": true
+        "CreateEnvironmentMetadata": {
+            "description": "Message included in the metadata field of operations returned from CreateEnvironment.",
+            "id": "CreateEnvironmentMetadata",
+            "properties": {},
+            "type": "object"
         },
-        "sshHost": {
-          "type": "string",
-          "description": "Output only. Host to which clients can connect to initiate SSH sessions with the environment.",
-          "readOnly": true
-        }
-      },
-      "id": "Environment"
-    },
-    "DeleteEnvironmentMetadata": {
-      "description": "Message included in the metadata field of operations returned from DeleteEnvironment.",
-      "properties": {},
-      "id": "DeleteEnvironmentMetadata",
-      "type": "object"
-    },
-    "RemovePublicKeyRequest": {
-      "type": "object",
-      "description": "Request message for RemovePublicKey.",
-      "id": "RemovePublicKeyRequest",
-      "properties": {
-        "key": {
-          "type": "string",
-          "description": "Key that should be removed from the environment."
-        }
-      }
-    },
-    "AuthorizeEnvironmentRequest": {
-      "type": "object",
-      "description": "Request message for AuthorizeEnvironment.",
-      "id": "AuthorizeEnvironmentRequest",
-      "properties": {
-        "idToken": {
-          "description": "The OAuth ID token that should be sent to the environment.",
-          "type": "string"
+        "DeleteEnvironmentMetadata": {
+            "description": "Message included in the metadata field of operations returned from DeleteEnvironment.",
+            "id": "DeleteEnvironmentMetadata",
+            "properties": {},
+            "type": "object"
         },
-        "expireTime": {
-          "format": "google-datetime",
-          "description": "The time when the credentials expire. If not set, defaults to one hour from when the server received the request.",
-          "type": "string"
+        "Empty": {
+            "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
+            "id": "Empty",
+            "properties": {},
+            "type": "object"
         },
-        "accessToken": {
-          "description": "The OAuth access token that should be sent to the environment.",
-          "type": "string"
-        }
-      }
-    },
-    "Empty": {
-      "id": "Empty",
-      "properties": {},
-      "type": "object",
-      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`."
-    }
-  },
-  "description": "Allows users to start, configure, and connect to interactive shell sessions running in the cloud. ",
-  "protocol": "rest",
-  "id": "cloudshell:v1",
-  "revision": "20201003",
-  "title": "Cloud Shell API",
-  "canonicalName": "Cloud Shell",
-  "ownerDomain": "google.com",
-  "mtlsRootUrl": "https://cloudshell.mtls.googleapis.com/",
-  "ownerName": "Google",
-  "resources": {
-    "users": {
-      "resources": {
-        "environments": {
-          "methods": {
-            "addPublicKey": {
-              "id": "cloudshell.users.environments.addPublicKey",
-              "description": "Adds a public SSH key to an environment, allowing clients with the corresponding private key to connect to that environment via SSH. If a key with the same content already exists, this will error with ALREADY_EXISTS.",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
+        "Environment": {
+            "description": "A Cloud Shell environment, which is defined as the combination of a Docker image specifying what is installed on the environment and a home directory containing the user's data that will remain across sessions. Each user has at least an environment with the ID \"default\".",
+            "id": "Environment",
+            "properties": {
+                "dockerImage": {
+                    "description": "Required. Immutable. Full path to the Docker image used to run this environment, e.g. \"gcr.io/dev-con/cloud-devshell:latest\".",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Output only. The environment's identifier, unique among the user's environments.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Immutable. Full name of this resource, in the format `users/{owner_email}/environments/{environment_id}`. `{owner_email}` is the email address of the user to whom this environment belongs, and `{environment_id}` is the identifier of this environment. For example, `users/someone@example.com/environments/default`.",
+                    "type": "string"
+                },
+                "publicKeys": {
+                    "description": "Output only. Public keys associated with the environment. Clients can connect to this environment via SSH only if they possess a private key corresponding to at least one of these public keys. Keys can be added to or removed from the environment using the AddPublicKey and RemovePublicKey methods.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "readOnly": true,
+                    "type": "array"
+                },
+                "sshHost": {
+                    "description": "Output only. Host to which clients can connect to initiate SSH sessions with the environment.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "sshPort": {
+                    "description": "Output only. Port to which clients can connect to initiate SSH sessions with the environment.",
+                    "format": "int32",
+                    "readOnly": true,
+                    "type": "integer"
+                },
+                "sshUsername": {
+                    "description": "Output only. Username that clients should use when initiating SSH sessions with the environment.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "state": {
+                    "description": "Output only. Current execution state of this environment.",
+                    "enum": [
+                        "STATE_UNSPECIFIED",
+                        "SUSPENDED",
+                        "PENDING",
+                        "RUNNING",
+                        "DELETING"
+                    ],
+                    "enumDescriptions": [
+                        "The environment's states is unknown.",
+                        "The environment is not running and can't be connected to. Starting the environment will transition it to the PENDING state.",
+                        "The environment is being started but is not yet ready to accept connections.",
+                        "The environment is running and ready to accept connections. It will automatically transition back to DISABLED after a period of inactivity or if another environment is started.",
+                        "The environment is being deleted and can't be connected to."
+                    ],
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "webHost": {
+                    "description": "Output only. Host to which clients can connect to initiate HTTPS or WSS connections with the environment.",
+                    "readOnly": true,
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListOperationsResponse": {
+            "description": "The response message for Operations.ListOperations.",
+            "id": "ListOperationsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                },
+                "operations": {
+                    "description": "A list of operations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Operation"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Operation": {
+            "description": "This resource represents a long-running operation that is the result of a network API call.",
+            "id": "Operation",
+            "properties": {
+                "done": {
+                    "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
+                    "type": "boolean"
+                },
+                "error": {
+                    "$ref": "Status",
+                    "description": "The error result of the operation in case of failure or cancellation."
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
+                    "type": "string"
+                },
+                "response": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "RemovePublicKeyMetadata": {
+            "description": "Message included in the metadata field of operations returned from RemovePublicKey.",
+            "id": "RemovePublicKeyMetadata",
+            "properties": {},
+            "type": "object"
+        },
+        "RemovePublicKeyRequest": {
+            "description": "Request message for RemovePublicKey.",
+            "id": "RemovePublicKeyRequest",
+            "properties": {
+                "key": {
+                    "description": "Key that should be removed from the environment.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RemovePublicKeyResponse": {
+            "description": "Response message for RemovePublicKey.",
+            "id": "RemovePublicKeyResponse",
+            "properties": {},
+            "type": "object"
+        },
+        "StartEnvironmentMetadata": {
+            "description": "Message included in the metadata field of operations returned from StartEnvironment.",
+            "id": "StartEnvironmentMetadata",
+            "properties": {
+                "state": {
+                    "description": "Current state of the environment being started.",
+                    "enum": [
+                        "STATE_UNSPECIFIED",
+                        "STARTING",
+                        "UNARCHIVING_DISK",
+                        "AWAITING_COMPUTE_RESOURCES",
+                        "FINISHED"
+                    ],
+                    "enumDescriptions": [
+                        "The environment's start state is unknown.",
+                        "The environment is in the process of being started, but no additional details are available.",
+                        "Startup is waiting for the user's disk to be unarchived. This can happen when the user returns to Cloud Shell after not having used it for a while, and suggests that startup will take longer than normal.",
+                        "Startup is waiting for compute resources to be assigned to the environment. This should normally happen very quickly, but an environment might stay in this state for an extended period of time if the system is experiencing heavy load.",
+                        "Startup has completed. If the start operation was successful, the user should be able to establish an SSH connection to their environment. Otherwise, the operation will contain details of the failure."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "StartEnvironmentRequest": {
+            "description": "Request message for StartEnvironment.",
+            "id": "StartEnvironmentRequest",
+            "properties": {
+                "accessToken": {
+                    "description": "The initial access token passed to the environment. If this is present and valid, the environment will be pre-authenticated with gcloud so that the user can run gcloud commands in Cloud Shell without having to log in. This code can be updated later by calling AuthorizeEnvironment.",
+                    "type": "string"
+                },
+                "publicKeys": {
+                    "description": "Public keys that should be added to the environment before it is started.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "StartEnvironmentResponse": {
+            "description": "Message included in the response field of operations returned from StartEnvironment once the operation is complete.",
+            "id": "StartEnvironmentResponse",
+            "properties": {
                 "environment": {
-                  "description": "Environment this key should be added to, e.g. `users/me/environments/default`.",
-                  "pattern": "^users/[^/]+/environments/[^/]+$",
-                  "location": "path",
-                  "type": "string",
-                  "required": true
+                    "$ref": "Environment",
+                    "description": "Environment that was started."
                 }
-              },
-              "response": {
-                "$ref": "Operation"
-              },
-              "flatPath": "v1/users/{usersId}/environments/{environmentsId}:addPublicKey",
-              "path": "v1/{+environment}:addPublicKey",
-              "request": {
-                "$ref": "AddPublicKeyRequest"
-              },
-              "parameterOrder": [
-                "environment"
-              ],
-              "httpMethod": "POST"
             },
-            "start": {
-              "httpMethod": "POST",
-              "flatPath": "v1/users/{usersId}/environments/{environmentsId}:start",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "request": {
-                "$ref": "StartEnvironmentRequest"
-              },
-              "path": "v1/{+name}:start",
-              "response": {
-                "$ref": "Operation"
-              },
-              "parameters": {
-                "name": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "Name of the resource that should be started, for example `users/me/environments/default` or `users/someone@example.com/environments/default`.",
-                  "pattern": "^users/[^/]+/environments/[^/]+$"
-                }
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "description": "Starts an existing environment, allowing clients to connect to it. The returned operation will contain an instance of StartEnvironmentMetadata in its metadata field. Users can wait for the environment to start by polling this operation via GetOperation. Once the environment has finished starting and is ready to accept connections, the operation will contain a StartEnvironmentResponse in its response field.",
-              "id": "cloudshell.users.environments.start"
-            },
-            "get": {
-              "parameters": {
-                "name": {
-                  "type": "string",
-                  "required": true,
-                  "location": "path",
-                  "pattern": "^users/[^/]+/environments/[^/]+$",
-                  "description": "Required. Name of the requested resource, for example `users/me/environments/default` or `users/someone@example.com/environments/default`."
-                }
-              },
-              "flatPath": "v1/users/{usersId}/environments/{environmentsId}",
-              "path": "v1/{+name}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "name"
-              ],
-              "id": "cloudshell.users.environments.get",
-              "description": "Gets an environment. Returns NOT_FOUND if the environment does not exist.",
-              "response": {
-                "$ref": "Environment"
-              }
-            },
-            "authorize": {
-              "id": "cloudshell.users.environments.authorize",
-              "request": {
-                "$ref": "AuthorizeEnvironmentRequest"
-              },
-              "httpMethod": "POST",
-              "description": "Sends OAuth credentials to a running environment on behalf of a user. When this completes, the environment will be authorized to run various Google Cloud command line tools without requiring the user to manually authenticate.",
-              "flatPath": "v1/users/{usersId}/environments/{environmentsId}:authorize",
-              "path": "v1/{+name}:authorize",
-              "parameters": {
-                "name": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "Name of the resource that should receive the credentials, for example `users/me/environments/default` or `users/someone@example.com/environments/default`.",
-                  "pattern": "^users/[^/]+/environments/[^/]+$"
-                }
-              },
-              "response": {
-                "$ref": "Operation"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameterOrder": [
-                "name"
-              ]
-            },
-            "removePublicKey": {
-              "parameters": {
-                "environment": {
-                  "location": "path",
-                  "required": true,
-                  "description": "Environment this key should be removed from, e.g. `users/me/environments/default`.",
-                  "type": "string",
-                  "pattern": "^users/[^/]+/environments/[^/]+$"
-                }
-              },
-              "parameterOrder": [
-                "environment"
-              ],
-              "flatPath": "v1/users/{usersId}/environments/{environmentsId}:removePublicKey",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "response": {
-                "$ref": "Operation"
-              },
-              "httpMethod": "POST",
-              "description": "Removes a public SSH key from an environment. Clients will no longer be able to connect to the environment using the corresponding private key. If a key with the same content is not present, this will error with NOT_FOUND.",
-              "id": "cloudshell.users.environments.removePublicKey",
-              "request": {
-                "$ref": "RemovePublicKeyRequest"
-              },
-              "path": "v1/{+environment}:removePublicKey"
-            }
-          }
-        }
-      }
-    },
-    "operations": {
-      "methods": {
-        "cancel": {
-          "request": {
-            "$ref": "CancelOperationRequest"
-          },
-          "id": "cloudshell.operations.cancel",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1/operations/{operationsId}:cancel",
-          "path": "v1/{+name}:cancel",
-          "httpMethod": "POST",
-          "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.",
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameters": {
-            "name": {
-              "required": true,
-              "pattern": "^operations/.*$",
-              "description": "The name of the operation resource to be cancelled.",
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "parameterOrder": [
-            "name"
-          ]
+            "type": "object"
         },
-        "get": {
-          "parameters": {
-            "name": {
-              "description": "The name of the operation resource.",
-              "pattern": "^operations/.*$",
-              "required": true,
-              "location": "path",
-              "type": "string"
-            }
-          },
-          "path": "v1/{+name}",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1/operations/{operationsId}",
-          "parameterOrder": [
-            "name"
-          ],
-          "httpMethod": "GET",
-          "id": "cloudshell.operations.get",
-          "response": {
-            "$ref": "Operation"
-          },
-          "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service."
-        },
-        "delete": {
-          "flatPath": "v1/operations/{operationsId}",
-          "id": "cloudshell.operations.delete",
-          "path": "v1/{+name}",
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameters": {
-            "name": {
-              "required": true,
-              "pattern": "^operations/.*$",
-              "description": "The name of the operation resource to be deleted.",
-              "location": "path",
-              "type": "string"
-            }
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.",
-          "httpMethod": "DELETE",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ]
-        },
-        "list": {
-          "parameterOrder": [
-            "name"
-          ],
-          "flatPath": "v1/operations",
-          "id": "cloudshell.operations.list",
-          "httpMethod": "GET",
-          "parameters": {
-            "pageToken": {
-              "description": "The standard list page token.",
-              "location": "query",
-              "type": "string"
+        "Status": {
+            "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
+            "id": "Status",
+            "properties": {
+                "code": {
+                    "description": "The status code, which should be an enum value of google.rpc.Code.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
+                    "type": "string"
+                }
             },
-            "name": {
-              "required": true,
-              "location": "path",
-              "description": "The name of the operation's parent resource.",
-              "pattern": "^operations$",
-              "type": "string"
-            },
-            "pageSize": {
-              "format": "int32",
-              "description": "The standard list page size.",
-              "type": "integer",
-              "location": "query"
-            },
-            "filter": {
-              "description": "The standard list filter.",
-              "location": "query",
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
-          "response": {
-            "$ref": "ListOperationsResponse"
-          },
-          "path": "v1/{+name}"
+            "type": "object"
         }
-      }
-    }
-  },
-  "servicePath": "",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "fullyEncodeReservedExpansion": true,
-  "rootUrl": "https://cloudshell.googleapis.com/",
-  "batchPath": "batch",
-  "baseUrl": "https://cloudshell.googleapis.com/",
-  "parameters": {
-    "alt": {
-      "location": "query",
-      "default": "json",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "type": "string",
-      "description": "Data format for response."
     },
-    "upload_protocol": {
-      "location": "query",
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "location": "query",
-      "type": "string"
-    },
-    "callback": {
-      "type": "string",
-      "location": "query",
-      "description": "JSONP"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "default": "true",
-      "type": "boolean",
-      "description": "Returns response with indentations and line breaks."
-    },
-    "quotaUser": {
-      "type": "string",
-      "location": "query",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters."
-    },
-    "$.xgafv": {
-      "enum": [
-        "1",
-        "2"
-      ],
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "description": "V1 error format.",
-      "location": "query"
-    },
-    "access_token": {
-      "location": "query",
-      "type": "string",
-      "description": "OAuth access token."
-    },
-    "key": {
-      "type": "string",
-      "location": "query",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token."
-    },
-    "oauth_token": {
-      "type": "string",
-      "description": "OAuth 2.0 token for the current user.",
-      "location": "query"
-    }
-  },
-  "discoveryVersion": "v1"
-}
+    "servicePath": "",
+    "title": "Cloud Shell API",
+    "version": "v1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/container.v1beta1.json b/googleapiclient/discovery_cache/documents/container.v1beta1.json
index 6e819f2..a2ba956 100644
--- a/googleapiclient/discovery_cache/documents/container.v1beta1.json
+++ b/googleapiclient/discovery_cache/documents/container.v1beta1.json
@@ -2484,7 +2484,7 @@
             }
         }
     },
-    "revision": "20210216",
+    "revision": "20210219",
     "rootUrl": "https://container.googleapis.com/",
     "schemas": {
         "AcceleratorConfig": {
@@ -4233,6 +4233,25 @@
             },
             "type": "object"
         },
+        "NodeNetworkConfig": {
+            "description": "Parameters for node pool-level network config. Only applicable if `ip_allocation_policy.use_ip_aliases` is true.",
+            "id": "NodeNetworkConfig",
+            "properties": {
+                "createPodRange": {
+                    "description": "Input only. [Input only] Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. If neither `create_pod_range` or `pod_range` are specified, the cluster-level default (`ip_allocation_policy.cluster_ipv4_cidr_block`) is used.",
+                    "type": "boolean"
+                },
+                "podIpv4CidrBlock": {
+                    "description": "The IP address range for pod IPs in this node pool. Only applicable if `create_pod_range` is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. `/14`) to have a range chosen with a specific netmask. Set to a [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `10.96.0.0/14`) to pick a specific range to use.",
+                    "type": "string"
+                },
+                "podRange": {
+                    "description": "The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
         "NodePool": {
             "description": "NodePool contains the name and configuration for a cluster's node pool. Node pools are a set of nodes (i.e. VM's), with a common configuration and specification, under the control of the cluster master. They may have a set of Kubernetes labels applied to them, which may be used to reference them during pod scheduling. They may also be resized up or down, to accommodate the workload.",
             "id": "NodePool",
@@ -4283,6 +4302,10 @@
                     "description": "The name of the node pool.",
                     "type": "string"
                 },
+                "networkConfig": {
+                    "$ref": "NodeNetworkConfig",
+                    "description": "Networking configuration for this NodePool. If specified, it overrides the cluster-level defaults."
+                },
                 "podIpv4CidrSize": {
                     "description": "[Output only] The pod CIDR block size per node in this node pool.",
                     "format": "int32",
diff --git a/googleapiclient/discovery_cache/documents/datalabeling.v1beta1.json b/googleapiclient/discovery_cache/documents/datalabeling.v1beta1.json
index 2bba300..b3a6e46 100644
--- a/googleapiclient/discovery_cache/documents/datalabeling.v1beta1.json
+++ b/googleapiclient/discovery_cache/documents/datalabeling.v1beta1.json
@@ -1,5658 +1,5658 @@
 {
-  "kind": "discovery#restDescription",
-  "version": "v1beta1",
-  "ownerDomain": "google.com",
-  "version_module": true,
-  "discoveryVersion": "v1",
-  "fullyEncodeReservedExpansion": true,
-  "parameters": {
-    "oauth_token": {
-      "type": "string",
-      "description": "OAuth 2.0 token for the current user.",
-      "location": "query"
-    },
-    "key": {
-      "type": "string",
-      "location": "query",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token."
-    },
-    "alt": {
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "location": "query",
-      "type": "string",
-      "description": "Data format for response.",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "default": "json"
-    },
-    "fields": {
-      "location": "query",
-      "type": "string",
-      "description": "Selector specifying which fields to include in a partial response."
-    },
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "location": "query"
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "location": "query",
-      "type": "string"
-    },
-    "upload_protocol": {
-      "type": "string",
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
-    },
-    "callback": {
-      "description": "JSONP",
-      "location": "query",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "type": "string",
-      "location": "query",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format."
-    },
-    "prettyPrint": {
-      "location": "query",
-      "type": "boolean",
-      "default": "true",
-      "description": "Returns response with indentations and line breaks."
-    },
-    "quotaUser": {
-      "location": "query",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "type": "string"
-    }
-  },
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
+                }
+            }
         }
-      }
-    }
-  },
-  "revision": "20201020",
-  "baseUrl": "https://datalabeling.googleapis.com/",
-  "protocol": "rest",
-  "mtlsRootUrl": "https://datalabeling.mtls.googleapis.com/",
-  "name": "datalabeling",
-  "servicePath": "",
-  "resources": {
-    "projects": {
-      "resources": {
-        "annotationSpecSets": {
-          "methods": {
-            "get": {
-              "httpMethod": "GET",
-              "flatPath": "v1beta1/projects/{projectsId}/annotationSpecSets/{annotationSpecSetsId}",
-              "description": "Gets an annotation spec set by resource name.",
-              "id": "datalabeling.projects.annotationSpecSets.get",
-              "parameters": {
-                "name": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "pattern": "^projects/[^/]+/annotationSpecSets/[^/]+$",
-                  "description": "Required. AnnotationSpecSet resource name, format: projects/{project_id}/annotationSpecSets/{annotation_spec_set_id}"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "path": "v1beta1/{+name}",
-              "response": {
-                "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpecSet"
-              },
-              "parameterOrder": [
-                "name"
-              ]
-            },
-            "create": {
-              "path": "v1beta1/{+parent}/annotationSpecSets",
-              "parameterOrder": [
-                "parent"
-              ],
-              "parameters": {
-                "parent": {
-                  "location": "path",
-                  "required": true,
-                  "pattern": "^projects/[^/]+$",
-                  "description": "Required. AnnotationSpecSet resource parent, format: projects/{project_id}",
-                  "type": "string"
-                }
-              },
-              "response": {
-                "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpecSet"
-              },
-              "id": "datalabeling.projects.annotationSpecSets.create",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "request": {
-                "$ref": "GoogleCloudDatalabelingV1beta1CreateAnnotationSpecSetRequest"
-              },
-              "httpMethod": "POST",
-              "flatPath": "v1beta1/projects/{projectsId}/annotationSpecSets",
-              "description": "Creates an annotation spec set by providing a set of labels."
-            },
-            "delete": {
-              "parameterOrder": [
-                "name"
-              ],
-              "id": "datalabeling.projects.annotationSpecSets.delete",
-              "response": {
-                "$ref": "GoogleProtobufEmpty"
-              },
-              "parameters": {
-                "name": {
-                  "location": "path",
-                  "required": true,
-                  "pattern": "^projects/[^/]+/annotationSpecSets/[^/]+$",
-                  "type": "string",
-                  "description": "Required. AnnotationSpec resource name, format: `projects/{project_id}/annotationSpecSets/{annotation_spec_set_id}`."
-                }
-              },
-              "httpMethod": "DELETE",
-              "flatPath": "v1beta1/projects/{projectsId}/annotationSpecSets/{annotationSpecSetsId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "description": "Deletes an annotation spec set by resource name.",
-              "path": "v1beta1/{+name}"
-            },
-            "list": {
-              "response": {
-                "$ref": "GoogleCloudDatalabelingV1beta1ListAnnotationSpecSetsResponse"
-              },
-              "parameterOrder": [
-                "parent"
-              ],
-              "httpMethod": "GET",
-              "parameters": {
-                "parent": {
-                  "description": "Required. Parent of AnnotationSpecSet resource, format: projects/{project_id}",
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$"
-                },
-                "pageToken": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by ListAnnotationSpecSetsResponse.next_page_token of the previous [DataLabelingService.ListAnnotationSpecSets] call. Return first page if empty."
-                },
-                "filter": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "Optional. Filter is not supported at this moment."
-                },
-                "pageSize": {
-                  "location": "query",
-                  "type": "integer",
-                  "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
-                  "format": "int32"
-                }
-              },
-              "id": "datalabeling.projects.annotationSpecSets.list",
-              "path": "v1beta1/{+parent}/annotationSpecSets",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "description": "Lists annotation spec sets for a project. Pagination is supported.",
-              "flatPath": "v1beta1/projects/{projectsId}/annotationSpecSets"
-            }
-          }
+    },
+    "basePath": "",
+    "baseUrl": "https://datalabeling.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Data Labeling",
+    "description": "Public API for Google Cloud AI Data Labeling Service.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/data-labeling/docs/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "datalabeling:v1beta1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://datalabeling.mtls.googleapis.com/",
+    "name": "datalabeling",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "operations": {
-          "methods": {
-            "list": {
-              "flatPath": "v1beta1/projects/{projectsId}/operations",
-              "parameters": {
-                "pageToken": {
-                  "description": "The standard list page token.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "filter": {
-                  "description": "The standard list filter.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "format": "int32",
-                  "type": "integer",
-                  "description": "The standard list page size.",
-                  "location": "query"
-                },
-                "name": {
-                  "location": "path",
-                  "pattern": "^projects/[^/]+$",
-                  "type": "string",
-                  "description": "The name of the operation's parent resource.",
-                  "required": true
-                }
-              },
-              "id": "datalabeling.projects.operations.list",
-              "path": "v1beta1/{+name}/operations",
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "GoogleLongrunningListOperationsResponse"
-              },
-              "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "httpMethod": "GET"
-            },
-            "cancel": {
-              "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.",
-              "httpMethod": "GET",
-              "flatPath": "v1beta1/projects/{projectsId}/operations/{operationsId}:cancel",
-              "parameterOrder": [
-                "name"
-              ],
-              "id": "datalabeling.projects.operations.cancel",
-              "path": "v1beta1/{+name}:cancel",
-              "parameters": {
-                "name": {
-                  "required": true,
-                  "pattern": "^projects/[^/]+/operations/[^/]+$",
-                  "description": "The name of the operation resource to be cancelled.",
-                  "location": "path",
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "response": {
-                "$ref": "GoogleProtobufEmpty"
-              }
-            },
-            "delete": {
-              "parameters": {
-                "name": {
-                  "description": "The name of the operation resource to be deleted.",
-                  "location": "path",
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/operations/[^/]+$",
-                  "required": true
-                }
-              },
-              "flatPath": "v1beta1/projects/{projectsId}/operations/{operationsId}",
-              "id": "datalabeling.projects.operations.delete",
-              "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.",
-              "path": "v1beta1/{+name}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "httpMethod": "DELETE",
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "GoogleProtobufEmpty"
-              }
-            },
-            "get": {
-              "id": "datalabeling.projects.operations.get",
-              "flatPath": "v1beta1/projects/{projectsId}/operations/{operationsId}",
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET",
-              "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
-              "parameters": {
-                "name": {
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/operations/[^/]+$",
-                  "description": "The name of the operation resource.",
-                  "required": true,
-                  "location": "path"
-                }
-              },
-              "path": "v1beta1/{+name}",
-              "response": {
-                "$ref": "GoogleLongrunningOperation"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ]
-            }
-          }
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
         },
-        "evaluationJobs": {
-          "methods": {
-            "delete": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameterOrder": [
-                "name"
-              ],
-              "path": "v1beta1/{+name}",
-              "id": "datalabeling.projects.evaluationJobs.delete",
-              "description": "Stops and deletes an evaluation job.",
-              "httpMethod": "DELETE",
-              "flatPath": "v1beta1/projects/{projectsId}/evaluationJobs/{evaluationJobsId}",
-              "parameters": {
-                "name": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "description": "Required. Name of the evaluation job that is going to be deleted. Format: \"projects/{project_id}/evaluationJobs/{evaluation_job_id}\"",
-                  "pattern": "^projects/[^/]+/evaluationJobs/[^/]+$"
-                }
-              },
-              "response": {
-                "$ref": "GoogleProtobufEmpty"
-              }
-            },
-            "pause": {
-              "path": "v1beta1/{+name}:pause",
-              "parameterOrder": [
-                "name"
-              ],
-              "parameters": {
-                "name": {
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/evaluationJobs/[^/]+$",
-                  "location": "path",
-                  "description": "Required. Name of the evaluation job that is going to be paused. Format: \"projects/{project_id}/evaluationJobs/{evaluation_job_id}\"",
-                  "required": true
-                }
-              },
-              "request": {
-                "$ref": "GoogleCloudDatalabelingV1beta1PauseEvaluationJobRequest"
-              },
-              "flatPath": "v1beta1/projects/{projectsId}/evaluationJobs/{evaluationJobsId}:pause",
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "description": "Pauses an evaluation job. Pausing an evaluation job that is already in a `PAUSED` state is a no-op.",
-              "id": "datalabeling.projects.evaluationJobs.pause",
-              "response": {
-                "$ref": "GoogleProtobufEmpty"
-              }
-            },
-            "create": {
-              "id": "datalabeling.projects.evaluationJobs.create",
-              "request": {
-                "$ref": "GoogleCloudDatalabelingV1beta1CreateEvaluationJobRequest"
-              },
-              "parameters": {
-                "parent": {
-                  "required": true,
-                  "type": "string",
-                  "description": "Required. Evaluation job resource parent. Format: \"projects/{project_id}\"",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v1beta1/projects/{projectsId}/evaluationJobs",
-              "parameterOrder": [
-                "parent"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "path": "v1beta1/{+parent}/evaluationJobs",
-              "description": "Creates an evaluation job.",
-              "response": {
-                "$ref": "GoogleCloudDatalabelingV1beta1EvaluationJob"
-              },
-              "httpMethod": "POST"
-            },
-            "resume": {
-              "description": "Resumes a paused evaluation job. A deleted evaluation job can't be resumed. Resuming a running or scheduled evaluation job is a no-op.",
-              "parameters": {
-                "name": {
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/evaluationJobs/[^/]+$",
-                  "location": "path",
-                  "description": "Required. Name of the evaluation job that is going to be resumed. Format: \"projects/{project_id}/evaluationJobs/{evaluation_job_id}\"",
-                  "required": true
-                }
-              },
-              "response": {
-                "$ref": "GoogleProtobufEmpty"
-              },
-              "flatPath": "v1beta1/projects/{projectsId}/evaluationJobs/{evaluationJobsId}:resume",
-              "request": {
-                "$ref": "GoogleCloudDatalabelingV1beta1ResumeEvaluationJobRequest"
-              },
-              "id": "datalabeling.projects.evaluationJobs.resume",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "name"
-              ],
-              "path": "v1beta1/{+name}:resume"
-            },
-            "get": {
-              "path": "v1beta1/{+name}",
-              "parameterOrder": [
-                "name"
-              ],
-              "flatPath": "v1beta1/projects/{projectsId}/evaluationJobs/{evaluationJobsId}",
-              "parameters": {
-                "name": {
-                  "location": "path",
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/evaluationJobs/[^/]+$",
-                  "required": true,
-                  "description": "Required. Name of the evaluation job. Format: \"projects/{project_id} /evaluationJobs/{evaluation_job_id}\""
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "description": "Gets an evaluation job by resource name.",
-              "response": {
-                "$ref": "GoogleCloudDatalabelingV1beta1EvaluationJob"
-              },
-              "httpMethod": "GET",
-              "id": "datalabeling.projects.evaluationJobs.get"
-            },
-            "list": {
-              "parameters": {
-                "pageToken": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by the nextPageToken in the response to the previous request. The request returns the first page if this is empty."
-                },
-                "parent": {
-                  "pattern": "^projects/[^/]+$",
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "Required. Evaluation job resource parent. Format: \"projects/{project_id}\""
-                },
-                "filter": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "Optional. You can filter the jobs to list by model_id (also known as model_name, as described in EvaluationJob.modelVersion) or by evaluation job state (as described in EvaluationJob.state). To filter by both criteria, use the `AND` operator or the `OR` operator. For example, you can use the following string for your filter: \"evaluation_job.model_id = {model_name} AND evaluation_job.state = {evaluation_job_state}\""
-                },
-                "pageSize": {
-                  "type": "integer",
-                  "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
-                  "location": "query",
-                  "format": "int32"
-                }
-              },
-              "flatPath": "v1beta1/projects/{projectsId}/evaluationJobs",
-              "id": "datalabeling.projects.evaluationJobs.list",
-              "parameterOrder": [
-                "parent"
-              ],
-              "response": {
-                "$ref": "GoogleCloudDatalabelingV1beta1ListEvaluationJobsResponse"
-              },
-              "path": "v1beta1/{+parent}/evaluationJobs",
-              "description": "Lists all evaluation jobs within a project with possible filters. Pagination is supported.",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "httpMethod": "GET"
-            },
-            "patch": {
-              "parameterOrder": [
-                "name"
-              ],
-              "parameters": {
-                "name": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "pattern": "^projects/[^/]+/evaluationJobs/[^/]+$",
-                  "description": "Output only. After you create a job, Data Labeling Service assigns a name to the job with the following format: \"projects/{project_id}/evaluationJobs/ {evaluation_job_id}\""
-                },
-                "updateMask": {
-                  "format": "google-fieldmask",
-                  "location": "query",
-                  "description": "Optional. Mask for which fields to update. You can only provide the following fields: * `evaluationJobConfig.humanAnnotationConfig.instruction` * `evaluationJobConfig.exampleCount` * `evaluationJobConfig.exampleSamplePercentage` You can provide more than one of these fields by separating them with commas.",
-                  "type": "string"
-                }
-              },
-              "id": "datalabeling.projects.evaluationJobs.patch",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "path": "v1beta1/{+name}",
-              "request": {
-                "$ref": "GoogleCloudDatalabelingV1beta1EvaluationJob"
-              },
-              "description": "Updates an evaluation job. You can only update certain fields of the job's EvaluationJobConfig: `humanAnnotationConfig.instruction`, `exampleCount`, and `exampleSamplePercentage`. If you want to change any other aspect of the evaluation job, you must delete the job and create a new one.",
-              "response": {
-                "$ref": "GoogleCloudDatalabelingV1beta1EvaluationJob"
-              },
-              "httpMethod": "PATCH",
-              "flatPath": "v1beta1/projects/{projectsId}/evaluationJobs/{evaluationJobsId}"
-            }
-          }
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "instructions": {
-          "methods": {
-            "create": {
-              "request": {
-                "$ref": "GoogleCloudDatalabelingV1beta1CreateInstructionRequest"
-              },
-              "response": {
-                "$ref": "GoogleLongrunningOperation"
-              },
-              "flatPath": "v1beta1/projects/{projectsId}/instructions",
-              "id": "datalabeling.projects.instructions.create",
-              "parameterOrder": [
-                "parent"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "description": "Creates an instruction for how data should be labeled.",
-              "path": "v1beta1/{+parent}/instructions",
-              "httpMethod": "POST",
-              "parameters": {
-                "parent": {
-                  "required": true,
-                  "description": "Required. Instruction resource parent, format: projects/{project_id}",
-                  "pattern": "^projects/[^/]+$",
-                  "type": "string",
-                  "location": "path"
-                }
-              }
-            },
-            "list": {
-              "parameterOrder": [
-                "parent"
-              ],
-              "path": "v1beta1/{+parent}/instructions",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1beta1/projects/{projectsId}/instructions",
-              "id": "datalabeling.projects.instructions.list",
-              "httpMethod": "GET",
-              "parameters": {
-                "pageSize": {
-                  "format": "int32",
-                  "type": "integer",
-                  "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
-                  "location": "query"
-                },
-                "parent": {
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "required": true,
-                  "location": "path",
-                  "description": "Required. Instruction resource parent, format: projects/{project_id}"
-                },
-                "filter": {
-                  "description": "Optional. Filter is not supported at this moment.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "pageToken": {
-                  "type": "string",
-                  "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by ListInstructionsResponse.next_page_token of the previous [DataLabelingService.ListInstructions] call. Return first page if empty.",
-                  "location": "query"
-                }
-              },
-              "description": "Lists instructions for a project. Pagination is supported.",
-              "response": {
-                "$ref": "GoogleCloudDatalabelingV1beta1ListInstructionsResponse"
-              }
-            },
-            "delete": {
-              "flatPath": "v1beta1/projects/{projectsId}/instructions/{instructionsId}",
-              "parameters": {
-                "name": {
-                  "description": "Required. Instruction resource name, format: projects/{project_id}/instructions/{instruction_id}",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/instructions/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "id": "datalabeling.projects.instructions.delete",
-              "path": "v1beta1/{+name}",
-              "description": "Deletes an instruction object by resource name.",
-              "httpMethod": "DELETE",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "response": {
-                "$ref": "GoogleProtobufEmpty"
-              }
-            },
-            "get": {
-              "response": {
-                "$ref": "GoogleCloudDatalabelingV1beta1Instruction"
-              },
-              "id": "datalabeling.projects.instructions.get",
-              "flatPath": "v1beta1/projects/{projectsId}/instructions/{instructionsId}",
-              "httpMethod": "GET",
-              "description": "Gets an instruction by resource name.",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "name": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "description": "Required. Instruction resource name, format: projects/{project_id}/instructions/{instruction_id}",
-                  "pattern": "^projects/[^/]+/instructions/[^/]+$"
-                }
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "path": "v1beta1/{+name}"
-            }
-          }
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
         },
-        "datasets": {
-          "methods": {
-            "create": {
-              "path": "v1beta1/{+parent}/datasets",
-              "flatPath": "v1beta1/projects/{projectsId}/datasets",
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "parent"
-              ],
-              "parameters": {
-                "parent": {
-                  "description": "Required. Dataset resource parent, format: projects/{project_id}",
-                  "location": "path",
-                  "pattern": "^projects/[^/]+$",
-                  "type": "string",
-                  "required": true
-                }
-              },
-              "description": "Creates dataset. If success return a Dataset resource.",
-              "request": {
-                "$ref": "GoogleCloudDatalabelingV1beta1CreateDatasetRequest"
-              },
-              "response": {
-                "$ref": "GoogleCloudDatalabelingV1beta1Dataset"
-              },
-              "id": "datalabeling.projects.datasets.create",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ]
-            },
-            "importData": {
-              "request": {
-                "$ref": "GoogleCloudDatalabelingV1beta1ImportDataRequest"
-              },
-              "id": "datalabeling.projects.datasets.importData",
-              "httpMethod": "POST",
-              "description": "Imports data into dataset based on source locations defined in request. It can be called multiple times for the same dataset. Each dataset can only have one long running operation running on it. For example, no labeling task (also long running operation) can be started while importing is still ongoing. Vice versa.",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "path": "v1beta1/{+name}:importData",
-              "parameters": {
-                "name": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "pattern": "^projects/[^/]+/datasets/[^/]+$",
-                  "description": "Required. Dataset resource name, format: projects/{project_id}/datasets/{dataset_id}"
-                }
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "GoogleLongrunningOperation"
-              },
-              "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}:importData"
-            },
-            "exportData": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "request": {
-                "$ref": "GoogleCloudDatalabelingV1beta1ExportDataRequest"
-              },
-              "response": {
-                "$ref": "GoogleLongrunningOperation"
-              },
-              "parameters": {
-                "name": {
-                  "description": "Required. Dataset resource name, format: projects/{project_id}/datasets/{dataset_id}",
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/datasets/[^/]+$",
-                  "required": true,
-                  "location": "path"
-                }
-              },
-              "httpMethod": "POST",
-              "id": "datalabeling.projects.datasets.exportData",
-              "path": "v1beta1/{+name}:exportData",
-              "parameterOrder": [
-                "name"
-              ],
-              "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}:exportData",
-              "description": "Exports data and annotations from dataset."
-            },
-            "list": {
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "GoogleCloudDatalabelingV1beta1ListDatasetsResponse"
-              },
-              "parameters": {
-                "pageSize": {
-                  "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
-                  "type": "integer",
-                  "format": "int32",
-                  "location": "query"
-                },
-                "filter": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "Optional. Filter on dataset is not supported at this moment."
-                },
-                "parent": {
-                  "type": "string",
-                  "location": "path",
-                  "pattern": "^projects/[^/]+$",
-                  "description": "Required. Dataset resource parent, format: projects/{project_id}",
-                  "required": true
-                },
-                "pageToken": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by ListDatasetsResponse.next_page_token of the previous [DataLabelingService.ListDatasets] call. Returns the first page if empty."
-                }
-              },
-              "description": "Lists datasets under a project. Pagination is supported.",
-              "flatPath": "v1beta1/projects/{projectsId}/datasets",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "path": "v1beta1/{+parent}/datasets",
-              "id": "datalabeling.projects.datasets.list",
-              "parameterOrder": [
-                "parent"
-              ]
-            },
-            "get": {
-              "description": "Gets dataset by resource name.",
-              "response": {
-                "$ref": "GoogleCloudDatalabelingV1beta1Dataset"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameterOrder": [
-                "name"
-              ],
-              "id": "datalabeling.projects.datasets.get",
-              "parameters": {
-                "name": {
-                  "pattern": "^projects/[^/]+/datasets/[^/]+$",
-                  "required": true,
-                  "description": "Required. Dataset resource name, format: projects/{project_id}/datasets/{dataset_id}",
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}",
-              "path": "v1beta1/{+name}",
-              "httpMethod": "GET"
-            },
-            "delete": {
-              "response": {
-                "$ref": "GoogleProtobufEmpty"
-              },
-              "parameters": {
-                "name": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/datasets/[^/]+$",
-                  "description": "Required. Dataset resource name, format: projects/{project_id}/datasets/{dataset_id}"
-                }
-              },
-              "description": "Deletes a dataset by resource name.",
-              "id": "datalabeling.projects.datasets.delete",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}",
-              "path": "v1beta1/{+name}",
-              "httpMethod": "DELETE",
-              "parameterOrder": [
-                "name"
-              ]
-            }
-          },
-          "resources": {
-            "dataItems": {
-              "methods": {
-                "list": {
-                  "description": "Lists data items in a dataset. This API can be called after data are imported into dataset. Pagination is supported.",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "GoogleCloudDatalabelingV1beta1ListDataItemsResponse"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/dataItems",
-                  "path": "v1beta1/{+parent}/dataItems",
-                  "id": "datalabeling.projects.datasets.dataItems.list",
-                  "parameters": {
-                    "pageToken": {
-                      "location": "query",
-                      "type": "string",
-                      "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by ListDataItemsResponse.next_page_token of the previous [DataLabelingService.ListDataItems] call. Return first page if empty."
-                    },
-                    "pageSize": {
-                      "location": "query",
-                      "type": "integer",
-                      "format": "int32",
-                      "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100."
-                    },
-                    "filter": {
-                      "description": "Optional. Filter is not supported at this moment.",
-                      "location": "query",
-                      "type": "string"
-                    },
-                    "parent": {
-                      "pattern": "^projects/[^/]+/datasets/[^/]+$",
-                      "description": "Required. Name of the dataset to list data items, format: projects/{project_id}/datasets/{dataset_id}",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    }
-                  }
-                },
-                "get": {
-                  "parameters": {
-                    "name": {
-                      "pattern": "^projects/[^/]+/datasets/[^/]+/dataItems/[^/]+$",
-                      "required": true,
-                      "description": "Required. The name of the data item to get, format: projects/{project_id}/datasets/{dataset_id}/dataItems/{data_item_id}",
-                      "type": "string",
-                      "location": "path"
-                    }
-                  },
-                  "path": "v1beta1/{+name}",
-                  "description": "Gets a data item in a dataset by resource name. This API can be called after data are imported into dataset.",
-                  "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/dataItems/{dataItemsId}",
-                  "id": "datalabeling.projects.datasets.dataItems.get",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "response": {
-                    "$ref": "GoogleCloudDatalabelingV1beta1DataItem"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "GET"
-                }
-              }
-            },
-            "image": {
-              "methods": {
-                "label": {
-                  "parameters": {
-                    "parent": {
-                      "location": "path",
-                      "type": "string",
-                      "required": true,
-                      "description": "Required. Name of the dataset to request labeling task, format: projects/{project_id}/datasets/{dataset_id}",
-                      "pattern": "^projects/[^/]+/datasets/[^/]+$"
-                    }
-                  },
-                  "httpMethod": "POST",
-                  "response": {
-                    "$ref": "GoogleLongrunningOperation"
-                  },
-                  "path": "v1beta1/{+parent}/image:label",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "request": {
-                    "$ref": "GoogleCloudDatalabelingV1beta1LabelImageRequest"
-                  },
-                  "description": "Starts a labeling task for image. The type of image labeling task is configured by feature in the request.",
-                  "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/image:label",
-                  "id": "datalabeling.projects.datasets.image.label",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ]
-                }
-              }
-            },
-            "text": {
-              "methods": {
-                "label": {
-                  "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/text:label",
-                  "parameters": {
-                    "parent": {
-                      "type": "string",
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/datasets/[^/]+$",
-                      "required": true,
-                      "description": "Required. Name of the data set to request labeling task, format: projects/{project_id}/datasets/{dataset_id}"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "path": "v1beta1/{+parent}/text:label",
-                  "description": "Starts a labeling task for text. The type of text labeling task is configured by feature in the request.",
-                  "id": "datalabeling.projects.datasets.text.label",
-                  "request": {
-                    "$ref": "GoogleCloudDatalabelingV1beta1LabelTextRequest"
-                  },
-                  "response": {
-                    "$ref": "GoogleLongrunningOperation"
-                  },
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "parent"
-                  ]
-                }
-              }
-            },
-            "annotatedDatasets": {
-              "resources": {
-                "feedbackThreads": {
-                  "methods": {
-                    "get": {
-                      "description": "Get a FeedbackThread object.",
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "response": {
-                        "$ref": "GoogleCloudDatalabelingV1beta1FeedbackThread"
-                      },
-                      "id": "datalabeling.projects.datasets.annotatedDatasets.feedbackThreads.get",
-                      "parameters": {
-                        "name": {
-                          "description": "Required. Name of the feedback. Format: 'projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset_id}/feedbackThreads/{feedback_thread_id}'.",
-                          "type": "string",
-                          "required": true,
-                          "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+/feedbackThreads/[^/]+$",
-                          "location": "path"
-                        }
-                      },
-                      "path": "v1beta1/{+name}",
-                      "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/feedbackThreads/{feedbackThreadsId}",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "httpMethod": "GET"
-                    },
-                    "list": {
-                      "id": "datalabeling.projects.datasets.annotatedDatasets.feedbackThreads.list",
-                      "description": "List FeedbackThreads with pagination.",
-                      "httpMethod": "GET",
-                      "parameters": {
-                        "parent": {
-                          "type": "string",
-                          "location": "path",
-                          "description": "Required. FeedbackThread resource parent. Format: \"projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset_id}\"",
-                          "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+$",
-                          "required": true
-                        },
-                        "pageToken": {
-                          "location": "query",
-                          "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by ListFeedbackThreads.next_page_token of the previous [DataLabelingService.ListFeedbackThreads] call. Return first page if empty.",
-                          "type": "string"
-                        },
-                        "pageSize": {
-                          "location": "query",
-                          "type": "integer",
-                          "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
-                          "format": "int32"
-                        }
-                      },
-                      "path": "v1beta1/{+parent}/feedbackThreads",
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "response": {
-                        "$ref": "GoogleCloudDatalabelingV1beta1ListFeedbackThreadsResponse"
-                      },
-                      "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/feedbackThreads"
-                    },
-                    "delete": {
-                      "description": "Delete a FeedbackThread.",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "response": {
-                        "$ref": "GoogleProtobufEmpty"
-                      },
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "httpMethod": "DELETE",
-                      "path": "v1beta1/{+name}",
-                      "parameters": {
-                        "name": {
-                          "required": true,
-                          "location": "path",
-                          "type": "string",
-                          "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+/feedbackThreads/[^/]+$",
-                          "description": "Required. Name of the FeedbackThread that is going to be deleted. Format: 'projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset_id}/feedbackThreads/{feedback_thread_id}'."
-                        }
-                      },
-                      "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/feedbackThreads/{feedbackThreadsId}",
-                      "id": "datalabeling.projects.datasets.annotatedDatasets.feedbackThreads.delete"
-                    }
-                  },
-                  "resources": {
-                    "feedbackMessages": {
-                      "methods": {
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        }
+    },
+    "protocol": "rest",
+    "resources": {
+        "projects": {
+            "resources": {
+                "annotationSpecSets": {
+                    "methods": {
                         "create": {
-                          "parameters": {
-                            "parent": {
-                              "required": true,
-                              "description": "Required. FeedbackMessage resource parent, format: projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset_id}/feedbackThreads/{feedback_thread_id}.",
-                              "type": "string",
-                              "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+/feedbackThreads/[^/]+$",
-                              "location": "path"
-                            }
-                          },
-                          "id": "datalabeling.projects.datasets.annotatedDatasets.feedbackThreads.feedbackMessages.create",
-                          "request": {
-                            "$ref": "GoogleCloudDatalabelingV1beta1FeedbackMessage"
-                          },
-                          "path": "v1beta1/{+parent}/feedbackMessages",
-                          "description": "Create a FeedbackMessage object.",
-                          "parameterOrder": [
-                            "parent"
-                          ],
-                          "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/feedbackThreads/{feedbackThreadsId}/feedbackMessages",
-                          "response": {
-                            "$ref": "GoogleLongrunningOperation"
-                          },
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "httpMethod": "POST"
-                        },
-                        "list": {
-                          "id": "datalabeling.projects.datasets.annotatedDatasets.feedbackThreads.feedbackMessages.list",
-                          "description": "List FeedbackMessages with pagination.",
-                          "parameters": {
-                            "parent": {
-                              "type": "string",
-                              "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+/feedbackThreads/[^/]+$",
-                              "description": "Required. FeedbackMessage resource parent. Format: \"projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset_id}/feedbackThreads/{feedback_thread_id}\"",
-                              "location": "path",
-                              "required": true
+                            "description": "Creates an annotation spec set by providing a set of labels.",
+                            "flatPath": "v1beta1/projects/{projectsId}/annotationSpecSets",
+                            "httpMethod": "POST",
+                            "id": "datalabeling.projects.annotationSpecSets.create",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. AnnotationSpecSet resource parent, format: projects/{project_id}",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
                             },
-                            "pageSize": {
-                              "location": "query",
-                              "type": "integer",
-                              "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
-                              "format": "int32"
+                            "path": "v1beta1/{+parent}/annotationSpecSets",
+                            "request": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1CreateAnnotationSpecSetRequest"
                             },
-                            "pageToken": {
-                              "type": "string",
-                              "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by ListFeedbackMessages.next_page_token of the previous [DataLabelingService.ListFeedbackMessages] call. Return first page if empty.",
-                              "location": "query"
-                            }
-                          },
-                          "httpMethod": "GET",
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "response": {
-                            "$ref": "GoogleCloudDatalabelingV1beta1ListFeedbackMessagesResponse"
-                          },
-                          "parameterOrder": [
-                            "parent"
-                          ],
-                          "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/feedbackThreads/{feedbackThreadsId}/feedbackMessages",
-                          "path": "v1beta1/{+parent}/feedbackMessages"
-                        },
-                        "get": {
-                          "id": "datalabeling.projects.datasets.annotatedDatasets.feedbackThreads.feedbackMessages.get",
-                          "httpMethod": "GET",
-                          "path": "v1beta1/{+name}",
-                          "parameterOrder": [
-                            "name"
-                          ],
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "response": {
-                            "$ref": "GoogleCloudDatalabelingV1beta1FeedbackMessage"
-                          },
-                          "parameters": {
-                            "name": {
-                              "type": "string",
-                              "location": "path",
-                              "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+/feedbackThreads/[^/]+/feedbackMessages/[^/]+$",
-                              "description": "Required. Name of the feedback. Format: 'projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset_id}/feedbackThreads/{feedback_thread_id}/feedbackMessages/{feedback_message_id}'.",
-                              "required": true
-                            }
-                          },
-                          "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/feedbackThreads/{feedbackThreadsId}/feedbackMessages/{feedbackMessagesId}",
-                          "description": "Get a FeedbackMessage object."
+                            "response": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpecSet"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
                         },
                         "delete": {
-                          "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/feedbackThreads/{feedbackThreadsId}/feedbackMessages/{feedbackMessagesId}",
-                          "parameterOrder": [
-                            "name"
-                          ],
-                          "path": "v1beta1/{+name}",
-                          "response": {
-                            "$ref": "GoogleProtobufEmpty"
-                          },
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "parameters": {
-                            "name": {
-                              "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+/feedbackThreads/[^/]+/feedbackMessages/[^/]+$",
-                              "description": "Required. Name of the FeedbackMessage that is going to be deleted. Format: 'projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset_id}/feedbackThreads/{feedback_thread_id}/feedbackMessages/{feedback_message_id}'.",
-                              "location": "path",
-                              "required": true,
-                              "type": "string"
+                            "description": "Deletes an annotation spec set by resource name.",
+                            "flatPath": "v1beta1/projects/{projectsId}/annotationSpecSets/{annotationSpecSetsId}",
+                            "httpMethod": "DELETE",
+                            "id": "datalabeling.projects.annotationSpecSets.delete",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. AnnotationSpec resource name, format: `projects/{project_id}/annotationSpecSets/{annotation_spec_set_id}`.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/annotationSpecSets/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "response": {
+                                "$ref": "GoogleProtobufEmpty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets an annotation spec set by resource name.",
+                            "flatPath": "v1beta1/projects/{projectsId}/annotationSpecSets/{annotationSpecSetsId}",
+                            "httpMethod": "GET",
+                            "id": "datalabeling.projects.annotationSpecSets.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. AnnotationSpecSet resource name, format: projects/{project_id}/annotationSpecSets/{annotation_spec_set_id}",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/annotationSpecSets/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "response": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpecSet"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists annotation spec sets for a project. Pagination is supported.",
+                            "flatPath": "v1beta1/projects/{projectsId}/annotationSpecSets",
+                            "httpMethod": "GET",
+                            "id": "datalabeling.projects.annotationSpecSets.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "Optional. Filter is not supported at this moment.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by ListAnnotationSpecSetsResponse.next_page_token of the previous [DataLabelingService.ListAnnotationSpecSets] call. Return first page if empty.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. Parent of AnnotationSpecSet resource, format: projects/{project_id}",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+parent}/annotationSpecSets",
+                            "response": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1ListAnnotationSpecSetsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        }
+                    }
+                },
+                "datasets": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates dataset. If success return a Dataset resource.",
+                            "flatPath": "v1beta1/projects/{projectsId}/datasets",
+                            "httpMethod": "POST",
+                            "id": "datalabeling.projects.datasets.create",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. Dataset resource parent, format: projects/{project_id}",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+parent}/datasets",
+                            "request": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1CreateDatasetRequest"
+                            },
+                            "response": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1Dataset"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes a dataset by resource name.",
+                            "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}",
+                            "httpMethod": "DELETE",
+                            "id": "datalabeling.projects.datasets.delete",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. Dataset resource name, format: projects/{project_id}/datasets/{dataset_id}",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/datasets/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "response": {
+                                "$ref": "GoogleProtobufEmpty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "exportData": {
+                            "description": "Exports data and annotations from dataset.",
+                            "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}:exportData",
+                            "httpMethod": "POST",
+                            "id": "datalabeling.projects.datasets.exportData",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. Dataset resource name, format: projects/{project_id}/datasets/{dataset_id}",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/datasets/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}:exportData",
+                            "request": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1ExportDataRequest"
+                            },
+                            "response": {
+                                "$ref": "GoogleLongrunningOperation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets dataset by resource name.",
+                            "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}",
+                            "httpMethod": "GET",
+                            "id": "datalabeling.projects.datasets.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. Dataset resource name, format: projects/{project_id}/datasets/{dataset_id}",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/datasets/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "response": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1Dataset"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "importData": {
+                            "description": "Imports data into dataset based on source locations defined in request. It can be called multiple times for the same dataset. Each dataset can only have one long running operation running on it. For example, no labeling task (also long running operation) can be started while importing is still ongoing. Vice versa.",
+                            "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}:importData",
+                            "httpMethod": "POST",
+                            "id": "datalabeling.projects.datasets.importData",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. Dataset resource name, format: projects/{project_id}/datasets/{dataset_id}",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/datasets/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}:importData",
+                            "request": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1ImportDataRequest"
+                            },
+                            "response": {
+                                "$ref": "GoogleLongrunningOperation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists datasets under a project. Pagination is supported.",
+                            "flatPath": "v1beta1/projects/{projectsId}/datasets",
+                            "httpMethod": "GET",
+                            "id": "datalabeling.projects.datasets.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "Optional. Filter on dataset is not supported at this moment.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by ListDatasetsResponse.next_page_token of the previous [DataLabelingService.ListDatasets] call. Returns the first page if empty.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. Dataset resource parent, format: projects/{project_id}",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+parent}/datasets",
+                            "response": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1ListDatasetsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "annotatedDatasets": {
+                            "methods": {
+                                "delete": {
+                                    "description": "Deletes an annotated dataset by resource name.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "datalabeling.projects.datasets.annotatedDatasets.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Name of the annotated dataset to delete, format: projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/ {annotated_dataset_id}",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "response": {
+                                        "$ref": "GoogleProtobufEmpty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets an annotated dataset by resource name.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}",
+                                    "httpMethod": "GET",
+                                    "id": "datalabeling.projects.datasets.annotatedDatasets.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Name of the annotated dataset to get, format: projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/ {annotated_dataset_id}",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "response": {
+                                        "$ref": "GoogleCloudDatalabelingV1beta1AnnotatedDataset"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists annotated datasets for a dataset. Pagination is supported.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets",
+                                    "httpMethod": "GET",
+                                    "id": "datalabeling.projects.datasets.annotatedDatasets.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "filter": {
+                                            "description": "Optional. Filter is not supported at this moment.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by ListAnnotatedDatasetsResponse.next_page_token of the previous [DataLabelingService.ListAnnotatedDatasets] call. Return first page if empty.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. Name of the dataset to list annotated datasets, format: projects/{project_id}/datasets/{dataset_id}",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/datasets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/annotatedDatasets",
+                                    "response": {
+                                        "$ref": "GoogleCloudDatalabelingV1beta1ListAnnotatedDatasetsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
+                            },
+                            "resources": {
+                                "dataItems": {
+                                    "methods": {
+                                        "get": {
+                                            "description": "Gets a data item in a dataset by resource name. This API can be called after data are imported into dataset.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/dataItems/{dataItemsId}",
+                                            "httpMethod": "GET",
+                                            "id": "datalabeling.projects.datasets.annotatedDatasets.dataItems.get",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. The name of the data item to get, format: projects/{project_id}/datasets/{dataset_id}/dataItems/{data_item_id}",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+/dataItems/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+name}",
+                                            "response": {
+                                                "$ref": "GoogleCloudDatalabelingV1beta1DataItem"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        },
+                                        "list": {
+                                            "description": "Lists data items in a dataset. This API can be called after data are imported into dataset. Pagination is supported.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/dataItems",
+                                            "httpMethod": "GET",
+                                            "id": "datalabeling.projects.datasets.annotatedDatasets.dataItems.list",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "filter": {
+                                                    "description": "Optional. Filter is not supported at this moment.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "pageSize": {
+                                                    "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
+                                                    "format": "int32",
+                                                    "location": "query",
+                                                    "type": "integer"
+                                                },
+                                                "pageToken": {
+                                                    "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by ListDataItemsResponse.next_page_token of the previous [DataLabelingService.ListDataItems] call. Return first page if empty.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "parent": {
+                                                    "description": "Required. Name of the dataset to list data items, format: projects/{project_id}/datasets/{dataset_id}",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+parent}/dataItems",
+                                            "response": {
+                                                "$ref": "GoogleCloudDatalabelingV1beta1ListDataItemsResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        }
+                                    }
+                                },
+                                "examples": {
+                                    "methods": {
+                                        "get": {
+                                            "description": "Gets an example by resource name, including both data and annotation.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/examples/{examplesId}",
+                                            "httpMethod": "GET",
+                                            "id": "datalabeling.projects.datasets.annotatedDatasets.examples.get",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "filter": {
+                                                    "description": "Optional. An expression for filtering Examples. Filter by annotation_spec.display_name is supported. Format \"annotation_spec.display_name = {display_name}\"",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "name": {
+                                                    "description": "Required. Name of example, format: projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/ {annotated_dataset_id}/examples/{example_id}",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+/examples/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+name}",
+                                            "response": {
+                                                "$ref": "GoogleCloudDatalabelingV1beta1Example"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        },
+                                        "list": {
+                                            "description": "Lists examples in an annotated dataset. Pagination is supported.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/examples",
+                                            "httpMethod": "GET",
+                                            "id": "datalabeling.projects.datasets.annotatedDatasets.examples.list",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "filter": {
+                                                    "description": "Optional. An expression for filtering Examples. For annotated datasets that have annotation spec set, filter by annotation_spec.display_name is supported. Format \"annotation_spec.display_name = {display_name}\"",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "pageSize": {
+                                                    "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
+                                                    "format": "int32",
+                                                    "location": "query",
+                                                    "type": "integer"
+                                                },
+                                                "pageToken": {
+                                                    "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by ListExamplesResponse.next_page_token of the previous [DataLabelingService.ListExamples] call. Return first page if empty.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "parent": {
+                                                    "description": "Required. Example resource parent.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+parent}/examples",
+                                            "response": {
+                                                "$ref": "GoogleCloudDatalabelingV1beta1ListExamplesResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        }
+                                    }
+                                },
+                                "feedbackThreads": {
+                                    "methods": {
+                                        "delete": {
+                                            "description": "Delete a FeedbackThread.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/feedbackThreads/{feedbackThreadsId}",
+                                            "httpMethod": "DELETE",
+                                            "id": "datalabeling.projects.datasets.annotatedDatasets.feedbackThreads.delete",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. Name of the FeedbackThread that is going to be deleted. Format: 'projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset_id}/feedbackThreads/{feedback_thread_id}'.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+/feedbackThreads/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+name}",
+                                            "response": {
+                                                "$ref": "GoogleProtobufEmpty"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        },
+                                        "get": {
+                                            "description": "Get a FeedbackThread object.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/feedbackThreads/{feedbackThreadsId}",
+                                            "httpMethod": "GET",
+                                            "id": "datalabeling.projects.datasets.annotatedDatasets.feedbackThreads.get",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. Name of the feedback. Format: 'projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset_id}/feedbackThreads/{feedback_thread_id}'.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+/feedbackThreads/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+name}",
+                                            "response": {
+                                                "$ref": "GoogleCloudDatalabelingV1beta1FeedbackThread"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        },
+                                        "list": {
+                                            "description": "List FeedbackThreads with pagination.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/feedbackThreads",
+                                            "httpMethod": "GET",
+                                            "id": "datalabeling.projects.datasets.annotatedDatasets.feedbackThreads.list",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "pageSize": {
+                                                    "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
+                                                    "format": "int32",
+                                                    "location": "query",
+                                                    "type": "integer"
+                                                },
+                                                "pageToken": {
+                                                    "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by ListFeedbackThreads.next_page_token of the previous [DataLabelingService.ListFeedbackThreads] call. Return first page if empty.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "parent": {
+                                                    "description": "Required. FeedbackThread resource parent. Format: \"projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset_id}\"",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+parent}/feedbackThreads",
+                                            "response": {
+                                                "$ref": "GoogleCloudDatalabelingV1beta1ListFeedbackThreadsResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        }
+                                    },
+                                    "resources": {
+                                        "feedbackMessages": {
+                                            "methods": {
+                                                "create": {
+                                                    "description": "Create a FeedbackMessage object.",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/feedbackThreads/{feedbackThreadsId}/feedbackMessages",
+                                                    "httpMethod": "POST",
+                                                    "id": "datalabeling.projects.datasets.annotatedDatasets.feedbackThreads.feedbackMessages.create",
+                                                    "parameterOrder": [
+                                                        "parent"
+                                                    ],
+                                                    "parameters": {
+                                                        "parent": {
+                                                            "description": "Required. FeedbackMessage resource parent, format: projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset_id}/feedbackThreads/{feedback_thread_id}.",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+/feedbackThreads/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+parent}/feedbackMessages",
+                                                    "request": {
+                                                        "$ref": "GoogleCloudDatalabelingV1beta1FeedbackMessage"
+                                                    },
+                                                    "response": {
+                                                        "$ref": "GoogleLongrunningOperation"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                },
+                                                "delete": {
+                                                    "description": "Delete a FeedbackMessage.",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/feedbackThreads/{feedbackThreadsId}/feedbackMessages/{feedbackMessagesId}",
+                                                    "httpMethod": "DELETE",
+                                                    "id": "datalabeling.projects.datasets.annotatedDatasets.feedbackThreads.feedbackMessages.delete",
+                                                    "parameterOrder": [
+                                                        "name"
+                                                    ],
+                                                    "parameters": {
+                                                        "name": {
+                                                            "description": "Required. Name of the FeedbackMessage that is going to be deleted. Format: 'projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset_id}/feedbackThreads/{feedback_thread_id}/feedbackMessages/{feedback_message_id}'.",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+/feedbackThreads/[^/]+/feedbackMessages/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+name}",
+                                                    "response": {
+                                                        "$ref": "GoogleProtobufEmpty"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                },
+                                                "get": {
+                                                    "description": "Get a FeedbackMessage object.",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/feedbackThreads/{feedbackThreadsId}/feedbackMessages/{feedbackMessagesId}",
+                                                    "httpMethod": "GET",
+                                                    "id": "datalabeling.projects.datasets.annotatedDatasets.feedbackThreads.feedbackMessages.get",
+                                                    "parameterOrder": [
+                                                        "name"
+                                                    ],
+                                                    "parameters": {
+                                                        "name": {
+                                                            "description": "Required. Name of the feedback. Format: 'projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset_id}/feedbackThreads/{feedback_thread_id}/feedbackMessages/{feedback_message_id}'.",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+/feedbackThreads/[^/]+/feedbackMessages/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+name}",
+                                                    "response": {
+                                                        "$ref": "GoogleCloudDatalabelingV1beta1FeedbackMessage"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                },
+                                                "list": {
+                                                    "description": "List FeedbackMessages with pagination.",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/feedbackThreads/{feedbackThreadsId}/feedbackMessages",
+                                                    "httpMethod": "GET",
+                                                    "id": "datalabeling.projects.datasets.annotatedDatasets.feedbackThreads.feedbackMessages.list",
+                                                    "parameterOrder": [
+                                                        "parent"
+                                                    ],
+                                                    "parameters": {
+                                                        "pageSize": {
+                                                            "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
+                                                            "format": "int32",
+                                                            "location": "query",
+                                                            "type": "integer"
+                                                        },
+                                                        "pageToken": {
+                                                            "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by ListFeedbackMessages.next_page_token of the previous [DataLabelingService.ListFeedbackMessages] call. Return first page if empty.",
+                                                            "location": "query",
+                                                            "type": "string"
+                                                        },
+                                                        "parent": {
+                                                            "description": "Required. FeedbackMessage resource parent. Format: \"projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset_id}/feedbackThreads/{feedback_thread_id}\"",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+/feedbackThreads/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+parent}/feedbackMessages",
+                                                    "response": {
+                                                        "$ref": "GoogleCloudDatalabelingV1beta1ListFeedbackMessagesResponse"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
                             }
-                          },
-                          "description": "Delete a FeedbackMessage.",
-                          "id": "datalabeling.projects.datasets.annotatedDatasets.feedbackThreads.feedbackMessages.delete",
-                          "httpMethod": "DELETE"
+                        },
+                        "dataItems": {
+                            "methods": {
+                                "get": {
+                                    "description": "Gets a data item in a dataset by resource name. This API can be called after data are imported into dataset.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/dataItems/{dataItemsId}",
+                                    "httpMethod": "GET",
+                                    "id": "datalabeling.projects.datasets.dataItems.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The name of the data item to get, format: projects/{project_id}/datasets/{dataset_id}/dataItems/{data_item_id}",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/datasets/[^/]+/dataItems/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "response": {
+                                        "$ref": "GoogleCloudDatalabelingV1beta1DataItem"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists data items in a dataset. This API can be called after data are imported into dataset. Pagination is supported.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/dataItems",
+                                    "httpMethod": "GET",
+                                    "id": "datalabeling.projects.datasets.dataItems.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "filter": {
+                                            "description": "Optional. Filter is not supported at this moment.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by ListDataItemsResponse.next_page_token of the previous [DataLabelingService.ListDataItems] call. Return first page if empty.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. Name of the dataset to list data items, format: projects/{project_id}/datasets/{dataset_id}",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/datasets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/dataItems",
+                                    "response": {
+                                        "$ref": "GoogleCloudDatalabelingV1beta1ListDataItemsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
+                            }
+                        },
+                        "evaluations": {
+                            "methods": {
+                                "get": {
+                                    "description": "Gets an evaluation by resource name (to search, use projects.evaluations.search).",
+                                    "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/evaluations/{evaluationsId}",
+                                    "httpMethod": "GET",
+                                    "id": "datalabeling.projects.datasets.evaluations.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Name of the evaluation. Format: \"projects/{project_id}/datasets/ {dataset_id}/evaluations/{evaluation_id}'",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/datasets/[^/]+/evaluations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "response": {
+                                        "$ref": "GoogleCloudDatalabelingV1beta1Evaluation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
+                            },
+                            "resources": {
+                                "exampleComparisons": {
+                                    "methods": {
+                                        "search": {
+                                            "description": "Searches example comparisons from an evaluation. The return format is a list of example comparisons that show ground truth and prediction(s) for a single input. Search by providing an evaluation ID.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/evaluations/{evaluationsId}/exampleComparisons:search",
+                                            "httpMethod": "POST",
+                                            "id": "datalabeling.projects.datasets.evaluations.exampleComparisons.search",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "parent": {
+                                                    "description": "Required. Name of the Evaluation resource to search for example comparisons from. Format: \"projects/{project_id}/datasets/{dataset_id}/evaluations/ {evaluation_id}\"",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/datasets/[^/]+/evaluations/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+parent}/exampleComparisons:search",
+                                            "request": {
+                                                "$ref": "GoogleCloudDatalabelingV1beta1SearchExampleComparisonsRequest"
+                                            },
+                                            "response": {
+                                                "$ref": "GoogleCloudDatalabelingV1beta1SearchExampleComparisonsResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        }
+                                    }
+                                }
+                            }
+                        },
+                        "image": {
+                            "methods": {
+                                "label": {
+                                    "description": "Starts a labeling task for image. The type of image labeling task is configured by feature in the request.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/image:label",
+                                    "httpMethod": "POST",
+                                    "id": "datalabeling.projects.datasets.image.label",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "parent": {
+                                            "description": "Required. Name of the dataset to request labeling task, format: projects/{project_id}/datasets/{dataset_id}",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/datasets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/image:label",
+                                    "request": {
+                                        "$ref": "GoogleCloudDatalabelingV1beta1LabelImageRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "GoogleLongrunningOperation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
+                            }
+                        },
+                        "text": {
+                            "methods": {
+                                "label": {
+                                    "description": "Starts a labeling task for text. The type of text labeling task is configured by feature in the request.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/text:label",
+                                    "httpMethod": "POST",
+                                    "id": "datalabeling.projects.datasets.text.label",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "parent": {
+                                            "description": "Required. Name of the data set to request labeling task, format: projects/{project_id}/datasets/{dataset_id}",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/datasets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/text:label",
+                                    "request": {
+                                        "$ref": "GoogleCloudDatalabelingV1beta1LabelTextRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "GoogleLongrunningOperation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
+                            }
+                        },
+                        "video": {
+                            "methods": {
+                                "label": {
+                                    "description": "Starts a labeling task for video. The type of video labeling task is configured by feature in the request.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/video:label",
+                                    "httpMethod": "POST",
+                                    "id": "datalabeling.projects.datasets.video.label",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "parent": {
+                                            "description": "Required. Name of the dataset to request labeling task, format: projects/{project_id}/datasets/{dataset_id}",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/datasets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/video:label",
+                                    "request": {
+                                        "$ref": "GoogleCloudDatalabelingV1beta1LabelVideoRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "GoogleLongrunningOperation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
+                            }
                         }
-                      }
                     }
-                  }
                 },
-                "examples": {
-                  "methods": {
-                    "list": {
-                      "response": {
-                        "$ref": "GoogleCloudDatalabelingV1beta1ListExamplesResponse"
-                      },
-                      "httpMethod": "GET",
-                      "id": "datalabeling.projects.datasets.annotatedDatasets.examples.list",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "description": "Lists examples in an annotated dataset. Pagination is supported.",
-                      "path": "v1beta1/{+parent}/examples",
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/examples",
-                      "parameters": {
-                        "filter": {
-                          "location": "query",
-                          "description": "Optional. An expression for filtering Examples. For annotated datasets that have annotation spec set, filter by annotation_spec.display_name is supported. Format \"annotation_spec.display_name = {display_name}\"",
-                          "type": "string"
+                "evaluationJobs": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates an evaluation job.",
+                            "flatPath": "v1beta1/projects/{projectsId}/evaluationJobs",
+                            "httpMethod": "POST",
+                            "id": "datalabeling.projects.evaluationJobs.create",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. Evaluation job resource parent. Format: \"projects/{project_id}\"",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+parent}/evaluationJobs",
+                            "request": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1CreateEvaluationJobRequest"
+                            },
+                            "response": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1EvaluationJob"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
                         },
-                        "pageToken": {
-                          "location": "query",
-                          "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by ListExamplesResponse.next_page_token of the previous [DataLabelingService.ListExamples] call. Return first page if empty.",
-                          "type": "string"
+                        "delete": {
+                            "description": "Stops and deletes an evaluation job.",
+                            "flatPath": "v1beta1/projects/{projectsId}/evaluationJobs/{evaluationJobsId}",
+                            "httpMethod": "DELETE",
+                            "id": "datalabeling.projects.evaluationJobs.delete",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. Name of the evaluation job that is going to be deleted. Format: \"projects/{project_id}/evaluationJobs/{evaluation_job_id}\"",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/evaluationJobs/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "response": {
+                                "$ref": "GoogleProtobufEmpty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
                         },
-                        "parent": {
-                          "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+$",
-                          "type": "string",
-                          "required": true,
-                          "description": "Required. Example resource parent.",
-                          "location": "path"
+                        "get": {
+                            "description": "Gets an evaluation job by resource name.",
+                            "flatPath": "v1beta1/projects/{projectsId}/evaluationJobs/{evaluationJobsId}",
+                            "httpMethod": "GET",
+                            "id": "datalabeling.projects.evaluationJobs.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. Name of the evaluation job. Format: \"projects/{project_id} /evaluationJobs/{evaluation_job_id}\"",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/evaluationJobs/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "response": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1EvaluationJob"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
                         },
-                        "pageSize": {
-                          "type": "integer",
-                          "location": "query",
-                          "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
-                          "format": "int32"
+                        "list": {
+                            "description": "Lists all evaluation jobs within a project with possible filters. Pagination is supported.",
+                            "flatPath": "v1beta1/projects/{projectsId}/evaluationJobs",
+                            "httpMethod": "GET",
+                            "id": "datalabeling.projects.evaluationJobs.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "Optional. You can filter the jobs to list by model_id (also known as model_name, as described in EvaluationJob.modelVersion) or by evaluation job state (as described in EvaluationJob.state). To filter by both criteria, use the `AND` operator or the `OR` operator. For example, you can use the following string for your filter: \"evaluation_job.model_id = {model_name} AND evaluation_job.state = {evaluation_job_state}\"",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by the nextPageToken in the response to the previous request. The request returns the first page if this is empty.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. Evaluation job resource parent. Format: \"projects/{project_id}\"",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+parent}/evaluationJobs",
+                            "response": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1ListEvaluationJobsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates an evaluation job. You can only update certain fields of the job's EvaluationJobConfig: `humanAnnotationConfig.instruction`, `exampleCount`, and `exampleSamplePercentage`. If you want to change any other aspect of the evaluation job, you must delete the job and create a new one.",
+                            "flatPath": "v1beta1/projects/{projectsId}/evaluationJobs/{evaluationJobsId}",
+                            "httpMethod": "PATCH",
+                            "id": "datalabeling.projects.evaluationJobs.patch",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Output only. After you create a job, Data Labeling Service assigns a name to the job with the following format: \"projects/{project_id}/evaluationJobs/ {evaluation_job_id}\"",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/evaluationJobs/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "updateMask": {
+                                    "description": "Optional. Mask for which fields to update. You can only provide the following fields: * `evaluationJobConfig.humanAnnotationConfig.instruction` * `evaluationJobConfig.exampleCount` * `evaluationJobConfig.exampleSamplePercentage` You can provide more than one of these fields by separating them with commas.",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "request": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1EvaluationJob"
+                            },
+                            "response": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1EvaluationJob"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "pause": {
+                            "description": "Pauses an evaluation job. Pausing an evaluation job that is already in a `PAUSED` state is a no-op.",
+                            "flatPath": "v1beta1/projects/{projectsId}/evaluationJobs/{evaluationJobsId}:pause",
+                            "httpMethod": "POST",
+                            "id": "datalabeling.projects.evaluationJobs.pause",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. Name of the evaluation job that is going to be paused. Format: \"projects/{project_id}/evaluationJobs/{evaluation_job_id}\"",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/evaluationJobs/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}:pause",
+                            "request": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1PauseEvaluationJobRequest"
+                            },
+                            "response": {
+                                "$ref": "GoogleProtobufEmpty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "resume": {
+                            "description": "Resumes a paused evaluation job. A deleted evaluation job can't be resumed. Resuming a running or scheduled evaluation job is a no-op.",
+                            "flatPath": "v1beta1/projects/{projectsId}/evaluationJobs/{evaluationJobsId}:resume",
+                            "httpMethod": "POST",
+                            "id": "datalabeling.projects.evaluationJobs.resume",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. Name of the evaluation job that is going to be resumed. Format: \"projects/{project_id}/evaluationJobs/{evaluation_job_id}\"",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/evaluationJobs/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}:resume",
+                            "request": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1ResumeEvaluationJobRequest"
+                            },
+                            "response": {
+                                "$ref": "GoogleProtobufEmpty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
                         }
-                      }
-                    },
-                    "get": {
-                      "httpMethod": "GET",
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "path": "v1beta1/{+name}",
-                      "description": "Gets an example by resource name, including both data and annotation.",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "response": {
-                        "$ref": "GoogleCloudDatalabelingV1beta1Example"
-                      },
-                      "id": "datalabeling.projects.datasets.annotatedDatasets.examples.get",
-                      "parameters": {
-                        "filter": {
-                          "type": "string",
-                          "description": "Optional. An expression for filtering Examples. Filter by annotation_spec.display_name is supported. Format \"annotation_spec.display_name = {display_name}\"",
-                          "location": "query"
-                        },
-                        "name": {
-                          "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+/examples/[^/]+$",
-                          "location": "path",
-                          "required": true,
-                          "type": "string",
-                          "description": "Required. Name of example, format: projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/ {annotated_dataset_id}/examples/{example_id}"
-                        }
-                      },
-                      "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/examples/{examplesId}"
                     }
-                  }
                 },
-                "dataItems": {
-                  "methods": {
-                    "list": {
-                      "response": {
-                        "$ref": "GoogleCloudDatalabelingV1beta1ListDataItemsResponse"
-                      },
-                      "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/dataItems",
-                      "id": "datalabeling.projects.datasets.annotatedDatasets.dataItems.list",
-                      "httpMethod": "GET",
-                      "path": "v1beta1/{+parent}/dataItems",
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "parameters": {
-                        "pageSize": {
-                          "type": "integer",
-                          "format": "int32",
-                          "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
-                          "location": "query"
-                        },
-                        "parent": {
-                          "location": "path",
-                          "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+$",
-                          "type": "string",
-                          "required": true,
-                          "description": "Required. Name of the dataset to list data items, format: projects/{project_id}/datasets/{dataset_id}"
-                        },
-                        "pageToken": {
-                          "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by ListDataItemsResponse.next_page_token of the previous [DataLabelingService.ListDataItems] call. Return first page if empty.",
-                          "type": "string",
-                          "location": "query"
-                        },
-                        "filter": {
-                          "description": "Optional. Filter is not supported at this moment.",
-                          "location": "query",
-                          "type": "string"
+                "evaluations": {
+                    "methods": {
+                        "search": {
+                            "description": "Searches evaluations within a project.",
+                            "flatPath": "v1beta1/projects/{projectsId}/evaluations:search",
+                            "httpMethod": "GET",
+                            "id": "datalabeling.projects.evaluations.search",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "Optional. To search evaluations, you can filter by the following: * evaluation_job.evaluation_job_id (the last part of EvaluationJob.name) * evaluation_job.model_id (the {model_name} portion of EvaluationJob.modelVersion) * evaluation_job.evaluation_job_run_time_start (Minimum threshold for the evaluationJobRunTime that created the evaluation) * evaluation_job.evaluation_job_run_time_end (Maximum threshold for the evaluationJobRunTime that created the evaluation) * evaluation_job.job_state (EvaluationJob.state) * annotation_spec.display_name (the Evaluation contains a metric for the annotation spec with this displayName) To filter by multiple critiera, use the `AND` operator or the `OR` operator. The following examples shows a string that filters by several critiera: \"evaluation_job.evaluation_job_id = {evaluation_job_id} AND evaluation_job.model_id = {model_name} AND evaluation_job.evaluation_job_run_time_start = {timestamp_1} AND evaluation_job.evaluation_job_run_time_end = {timestamp_2} AND annotation_spec.display_name = {display_name}\"",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by the nextPageToken of the response to a previous search request. If you don't specify this field, the API call requests the first page of the search.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. Evaluation search parent (project ID). Format: \"projects/ {project_id}\"",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+parent}/evaluations:search",
+                            "response": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1SearchEvaluationsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
                         }
-                      },
-                      "description": "Lists data items in a dataset. This API can be called after data are imported into dataset. Pagination is supported."
-                    },
-                    "get": {
-                      "httpMethod": "GET",
-                      "id": "datalabeling.projects.datasets.annotatedDatasets.dataItems.get",
-                      "path": "v1beta1/{+name}",
-                      "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}/dataItems/{dataItemsId}",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "description": "Gets a data item in a dataset by resource name. This API can be called after data are imported into dataset.",
-                      "response": {
-                        "$ref": "GoogleCloudDatalabelingV1beta1DataItem"
-                      },
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "parameters": {
-                        "name": {
-                          "description": "Required. The name of the data item to get, format: projects/{project_id}/datasets/{dataset_id}/dataItems/{data_item_id}",
-                          "location": "path",
-                          "required": true,
-                          "type": "string",
-                          "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+/dataItems/[^/]+$"
-                        }
-                      }
                     }
-                  }
-                }
-              },
-              "methods": {
-                "list": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "response": {
-                    "$ref": "GoogleCloudDatalabelingV1beta1ListAnnotatedDatasetsResponse"
-                  },
-                  "id": "datalabeling.projects.datasets.annotatedDatasets.list",
-                  "parameters": {
-                    "filter": {
-                      "description": "Optional. Filter is not supported at this moment.",
-                      "location": "query",
-                      "type": "string"
-                    },
-                    "parent": {
-                      "location": "path",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/datasets/[^/]+$",
-                      "description": "Required. Name of the dataset to list annotated datasets, format: projects/{project_id}/datasets/{dataset_id}"
-                    },
-                    "pageSize": {
-                      "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
-                      "format": "int32",
-                      "location": "query",
-                      "type": "integer"
-                    },
-                    "pageToken": {
-                      "type": "string",
-                      "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by ListAnnotatedDatasetsResponse.next_page_token of the previous [DataLabelingService.ListAnnotatedDatasets] call. Return first page if empty.",
-                      "location": "query"
-                    }
-                  },
-                  "description": "Lists annotated datasets for a dataset. Pagination is supported.",
-                  "path": "v1beta1/{+parent}/annotatedDatasets",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "httpMethod": "GET",
-                  "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets"
                 },
-                "get": {
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "GoogleCloudDatalabelingV1beta1AnnotatedDataset"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "description": "Required. Name of the annotated dataset to get, format: projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/ {annotated_dataset_id}",
-                      "type": "string",
-                      "required": true,
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+$"
-                    }
-                  },
-                  "description": "Gets an annotated dataset by resource name.",
-                  "path": "v1beta1/{+name}",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "id": "datalabeling.projects.datasets.annotatedDatasets.get",
-                  "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}"
-                },
-                "delete": {
-                  "parameters": {
-                    "name": {
-                      "required": true,
-                      "description": "Required. Name of the annotated dataset to delete, format: projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/ {annotated_dataset_id}",
-                      "type": "string",
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/datasets/[^/]+/annotatedDatasets/[^/]+$"
-                    }
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/annotatedDatasets/{annotatedDatasetsId}",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "id": "datalabeling.projects.datasets.annotatedDatasets.delete",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "description": "Deletes an annotated dataset by resource name.",
-                  "httpMethod": "DELETE",
-                  "path": "v1beta1/{+name}",
-                  "response": {
-                    "$ref": "GoogleProtobufEmpty"
-                  }
-                }
-              }
-            },
-            "video": {
-              "methods": {
-                "label": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "response": {
-                    "$ref": "GoogleLongrunningOperation"
-                  },
-                  "id": "datalabeling.projects.datasets.video.label",
-                  "path": "v1beta1/{+parent}/video:label",
-                  "request": {
-                    "$ref": "GoogleCloudDatalabelingV1beta1LabelVideoRequest"
-                  },
-                  "description": "Starts a labeling task for video. The type of video labeling task is configured by feature in the request.",
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "parameters": {
-                    "parent": {
-                      "type": "string",
-                      "location": "path",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/datasets/[^/]+$",
-                      "description": "Required. Name of the dataset to request labeling task, format: projects/{project_id}/datasets/{dataset_id}"
-                    }
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/video:label"
-                }
-              }
-            },
-            "evaluations": {
-              "resources": {
-                "exampleComparisons": {
-                  "methods": {
-                    "search": {
-                      "path": "v1beta1/{+parent}/exampleComparisons:search",
-                      "response": {
-                        "$ref": "GoogleCloudDatalabelingV1beta1SearchExampleComparisonsResponse"
-                      },
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "id": "datalabeling.projects.datasets.evaluations.exampleComparisons.search",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "description": "Searches example comparisons from an evaluation. The return format is a list of example comparisons that show ground truth and prediction(s) for a single input. Search by providing an evaluation ID.",
-                      "httpMethod": "POST",
-                      "parameters": {
-                        "parent": {
-                          "location": "path",
-                          "type": "string",
-                          "description": "Required. Name of the Evaluation resource to search for example comparisons from. Format: \"projects/{project_id}/datasets/{dataset_id}/evaluations/ {evaluation_id}\"",
-                          "pattern": "^projects/[^/]+/datasets/[^/]+/evaluations/[^/]+$",
-                          "required": true
+                "instructions": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates an instruction for how data should be labeled.",
+                            "flatPath": "v1beta1/projects/{projectsId}/instructions",
+                            "httpMethod": "POST",
+                            "id": "datalabeling.projects.instructions.create",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. Instruction resource parent, format: projects/{project_id}",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+parent}/instructions",
+                            "request": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1CreateInstructionRequest"
+                            },
+                            "response": {
+                                "$ref": "GoogleLongrunningOperation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes an instruction object by resource name.",
+                            "flatPath": "v1beta1/projects/{projectsId}/instructions/{instructionsId}",
+                            "httpMethod": "DELETE",
+                            "id": "datalabeling.projects.instructions.delete",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. Instruction resource name, format: projects/{project_id}/instructions/{instruction_id}",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/instructions/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "response": {
+                                "$ref": "GoogleProtobufEmpty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets an instruction by resource name.",
+                            "flatPath": "v1beta1/projects/{projectsId}/instructions/{instructionsId}",
+                            "httpMethod": "GET",
+                            "id": "datalabeling.projects.instructions.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. Instruction resource name, format: projects/{project_id}/instructions/{instruction_id}",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/instructions/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "response": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1Instruction"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists instructions for a project. Pagination is supported.",
+                            "flatPath": "v1beta1/projects/{projectsId}/instructions",
+                            "httpMethod": "GET",
+                            "id": "datalabeling.projects.instructions.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "Optional. Filter is not supported at this moment.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by ListInstructionsResponse.next_page_token of the previous [DataLabelingService.ListInstructions] call. Return first page if empty.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. Instruction resource parent, format: projects/{project_id}",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+parent}/instructions",
+                            "response": {
+                                "$ref": "GoogleCloudDatalabelingV1beta1ListInstructionsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
                         }
-                      },
-                      "request": {
-                        "$ref": "GoogleCloudDatalabelingV1beta1SearchExampleComparisonsRequest"
-                      },
-                      "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/evaluations/{evaluationsId}/exampleComparisons:search"
                     }
-                  }
-                }
-              },
-              "methods": {
-                "get": {
-                  "path": "v1beta1/{+name}",
-                  "description": "Gets an evaluation by resource name (to search, use projects.evaluations.search).",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "response": {
-                    "$ref": "GoogleCloudDatalabelingV1beta1Evaluation"
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/datasets/{datasetsId}/evaluations/{evaluationsId}",
-                  "httpMethod": "GET",
-                  "parameters": {
-                    "name": {
-                      "description": "Required. Name of the evaluation. Format: \"projects/{project_id}/datasets/ {dataset_id}/evaluations/{evaluation_id}'",
-                      "type": "string",
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/datasets/[^/]+/evaluations/[^/]+$",
-                      "required": true
+                },
+                "operations": {
+                    "methods": {
+                        "cancel": {
+                            "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.",
+                            "flatPath": "v1beta1/projects/{projectsId}/operations/{operationsId}:cancel",
+                            "httpMethod": "GET",
+                            "id": "datalabeling.projects.operations.cancel",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "The name of the operation resource to be cancelled.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/operations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}:cancel",
+                            "response": {
+                                "$ref": "GoogleProtobufEmpty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.",
+                            "flatPath": "v1beta1/projects/{projectsId}/operations/{operationsId}",
+                            "httpMethod": "DELETE",
+                            "id": "datalabeling.projects.operations.delete",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "The name of the operation resource to be deleted.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/operations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "response": {
+                                "$ref": "GoogleProtobufEmpty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
+                            "flatPath": "v1beta1/projects/{projectsId}/operations/{operationsId}",
+                            "httpMethod": "GET",
+                            "id": "datalabeling.projects.operations.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "The name of the operation resource.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/operations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "response": {
+                                "$ref": "GoogleLongrunningOperation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
+                            "flatPath": "v1beta1/projects/{projectsId}/operations",
+                            "httpMethod": "GET",
+                            "id": "datalabeling.projects.operations.list",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "The standard list filter.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "name": {
+                                    "description": "The name of the operation's parent resource.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "The standard list page size.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The standard list page token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}/operations",
+                            "response": {
+                                "$ref": "GoogleLongrunningListOperationsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        }
                     }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "id": "datalabeling.projects.datasets.evaluations.get"
                 }
-              }
             }
-          }
-        },
-        "evaluations": {
-          "methods": {
-            "search": {
-              "parameters": {
-                "pageToken": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by the nextPageToken of the response to a previous search request. If you don't specify this field, the API call requests the first page of the search."
+        }
+    },
+    "revision": "20201216",
+    "rootUrl": "https://datalabeling.googleapis.com/",
+    "schemas": {
+        "GoogleCloudDatalabelingV1alpha1CreateInstructionMetadata": {
+            "description": "Metadata of a CreateInstruction operation.",
+            "id": "GoogleCloudDatalabelingV1alpha1CreateInstructionMetadata",
+            "properties": {
+                "createTime": {
+                    "description": "Timestamp when create instruction request was created.",
+                    "format": "google-datetime",
+                    "type": "string"
                 },
-                "pageSize": {
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query",
-                  "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100."
+                "instruction": {
+                    "description": "The name of the created Instruction. projects/{project_id}/instructions/{instruction_id}",
+                    "type": "string"
                 },
-                "filter": {
-                  "type": "string",
-                  "description": "Optional. To search evaluations, you can filter by the following: * evaluation_job.evaluation_job_id (the last part of EvaluationJob.name) * evaluation_job.model_id (the {model_name} portion of EvaluationJob.modelVersion) * evaluation_job.evaluation_job_run_time_start (Minimum threshold for the evaluationJobRunTime that created the evaluation) * evaluation_job.evaluation_job_run_time_end (Maximum threshold for the evaluationJobRunTime that created the evaluation) * evaluation_job.job_state (EvaluationJob.state) * annotation_spec.display_name (the Evaluation contains a metric for the annotation spec with this displayName) To filter by multiple critiera, use the `AND` operator or the `OR` operator. The following examples shows a string that filters by several critiera: \"evaluation_job.evaluation_job_id = {evaluation_job_id} AND evaluation_job.model_id = {model_name} AND evaluation_job.evaluation_job_run_time_start = {timestamp_1} AND evaluation_job.evaluation_job_run_time_end = {timestamp_2} AND annotation_spec.display_name = {display_name}\"",
-                  "location": "query"
-                },
-                "parent": {
-                  "location": "path",
-                  "description": "Required. Evaluation search parent (project ID). Format: \"projects/ {project_id}\"",
-                  "pattern": "^projects/[^/]+$",
-                  "required": true,
-                  "type": "string"
+                "partialFailures": {
+                    "description": "Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
+                    "items": {
+                        "$ref": "GoogleRpcStatus"
+                    },
+                    "type": "array"
                 }
-              },
-              "path": "v1beta1/{+parent}/evaluations:search",
-              "parameterOrder": [
-                "parent"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "response": {
-                "$ref": "GoogleCloudDatalabelingV1beta1SearchEvaluationsResponse"
-              },
-              "id": "datalabeling.projects.evaluations.search",
-              "flatPath": "v1beta1/projects/{projectsId}/evaluations:search",
-              "description": "Searches evaluations within a project.",
-              "httpMethod": "GET"
-            }
-          }
-        }
-      }
-    }
-  },
-  "rootUrl": "https://datalabeling.googleapis.com/",
-  "ownerName": "Google",
-  "basePath": "",
-  "canonicalName": "Data Labeling",
-  "id": "datalabeling:v1beta1",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "documentationLink": "https://cloud.google.com/data-labeling/docs/",
-  "schemas": {
-    "GoogleCloudDatalabelingV1p1alpha1LabelImageBoundingBoxOperationMetadata": {
-      "id": "GoogleCloudDatalabelingV1p1alpha1LabelImageBoundingBoxOperationMetadata",
-      "description": "Details of a LabelImageBoundingBox operation metadata.",
-      "type": "object",
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1OperatorMetadata": {
-      "properties": {
-        "labelVotes": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The total number of contributors that choose this label."
-        },
-        "totalVotes": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The total number of contributors that answer this question."
-        },
-        "score": {
-          "type": "number",
-          "description": "Confidence score corresponding to a label. For examle, if 3 contributors have answered the question and 2 of them agree on the final label, the confidence score will be 0.67 (2/3).",
-          "format": "float"
-        },
-        "comments": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "Comments from contributors."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1OperatorMetadata",
-      "type": "object",
-      "description": "General information useful for labels coming from contributors."
-    },
-    "GoogleCloudDatalabelingV1p1alpha1LabelVideoClassificationOperationMetadata": {
-      "type": "object",
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1p1alpha1LabelVideoClassificationOperationMetadata",
-      "description": "Details of a LabelVideoClassification operation metadata."
-    },
-    "GoogleCloudDatalabelingV1beta1LabelImageSegmentationOperationMetadata": {
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config.",
-          "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig"
-        }
-      },
-      "description": "Details of a LabelImageSegmentation operation metadata.",
-      "id": "GoogleCloudDatalabelingV1beta1LabelImageSegmentationOperationMetadata",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1ResumeEvaluationJobRequest": {
-      "properties": {},
-      "type": "object",
-      "description": "Request message ResumeEvaluationJob.",
-      "id": "GoogleCloudDatalabelingV1beta1ResumeEvaluationJobRequest"
-    },
-    "GoogleCloudDatalabelingV1beta1Vertex": {
-      "type": "object",
-      "properties": {
-        "y": {
-          "format": "int32",
-          "description": "Y coordinate.",
-          "type": "integer"
-        },
-        "x": {
-          "description": "X coordinate.",
-          "type": "integer",
-          "format": "int32"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1Vertex",
-      "description": "A vertex represents a 2D point in the image. NOTE: the vertex coordinates are in the same scale as the original image."
-    },
-    "GoogleCloudDatalabelingV1beta1LabelImageBoundingPolyOperationMetadata": {
-      "type": "object",
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
-          "description": "Basic human annotation config used in labeling request."
-        }
-      },
-      "description": "Details of LabelImageBoundingPoly operation metadata.",
-      "id": "GoogleCloudDatalabelingV1beta1LabelImageBoundingPolyOperationMetadata"
-    },
-    "GoogleCloudDatalabelingV1p2alpha1LabelImageBoundingBoxOperationMetadata": {
-      "type": "object",
-      "description": "Details of a LabelImageBoundingBox operation metadata.",
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig",
-          "description": "Basic human annotation config used in labeling request."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1p2alpha1LabelImageBoundingBoxOperationMetadata"
-    },
-    "GoogleCloudDatalabelingV1beta1Row": {
-      "description": "A row in the confusion matrix. Each entry in this row has the same ground truth label.",
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1beta1Row",
-      "properties": {
-        "annotationSpec": {
-          "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec",
-          "description": "The annotation spec of the ground truth label for this row."
-        },
-        "entries": {
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1ConfusionMatrixEntry"
-          },
-          "description": "A list of the confusion matrix entries. One entry for each possible predicted label.",
-          "type": "array"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1p1alpha1LabelTextEntityExtractionOperationMetadata": {
-      "description": "Details of a LabelTextEntityExtraction operation metadata.",
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig",
-          "description": "Basic human annotation config used in labeling request."
-        }
-      },
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1p1alpha1LabelTextEntityExtractionOperationMetadata"
-    },
-    "GoogleCloudDatalabelingV1p2alpha1OutputConfig": {
-      "properties": {
-        "gcsFolderDestination": {
-          "description": "Output to a folder in Cloud Storage. Should be used for image segmentation or document de-identification labeling outputs.",
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1GcsFolderDestination"
-        },
-        "gcsDestination": {
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1GcsDestination",
-          "description": "Output to a file in Cloud Storage. Should be used for labeling output other than image segmentation."
-        }
-      },
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1p2alpha1OutputConfig",
-      "description": "The configuration of output data."
-    },
-    "GoogleCloudDatalabelingV1beta1EventConfig": {
-      "id": "GoogleCloudDatalabelingV1beta1EventConfig",
-      "type": "object",
-      "properties": {
-        "clipLength": {
-          "description": "Videos will be cut to smaller clips to make it easier for labelers to work on. Users can configure is field in seconds, if not set, default value is 60s.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "annotationSpecSets": {
-          "items": {
-            "type": "string"
-          },
-          "description": "Required. The list of annotation spec set resource name. Similar to video classification, we support selecting event from multiple AnnotationSpecSet at the same time.",
-          "type": "array"
-        },
-        "overlapLength": {
-          "format": "int32",
-          "description": "The overlap length between different video clips. Users can configure is field in seconds, if not set, default value is 1s.",
-          "type": "integer"
-        }
-      },
-      "description": "Config for video event human labeling task."
-    },
-    "GoogleCloudDatalabelingV1beta1FeedbackThread": {
-      "properties": {
-        "feedbackThreadMetadata": {
-          "$ref": "GoogleCloudDatalabelingV1beta1FeedbackThreadMetadata",
-          "description": "Metadata regarding the feedback thread."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of the feedback thread. Format: 'project/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset_id}/feedbackThreads/{feedback_thread_id}'"
-        }
-      },
-      "type": "object",
-      "description": "A feedback thread of a certain labeling task on a certain annotated dataset.",
-      "id": "GoogleCloudDatalabelingV1beta1FeedbackThread"
-    },
-    "GoogleCloudDatalabelingV1beta1OutputConfig": {
-      "properties": {
-        "gcsFolderDestination": {
-          "$ref": "GoogleCloudDatalabelingV1beta1GcsFolderDestination",
-          "description": "Output to a folder in Cloud Storage. Should be used for image segmentation or document de-identification labeling outputs."
-        },
-        "gcsDestination": {
-          "description": "Output to a file in Cloud Storage. Should be used for labeling output other than image segmentation.",
-          "$ref": "GoogleCloudDatalabelingV1beta1GcsDestination"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1OutputConfig",
-      "description": "The configuration of output data.",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1p1alpha1LabelImageBoundingPolyOperationMetadata": {
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1p1alpha1LabelImageBoundingPolyOperationMetadata",
-      "description": "Details of LabelImageBoundingPoly operation metadata.",
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig",
-          "description": "Basic human annotation config used in labeling request."
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1BoundingPolyConfig": {
-      "properties": {
-        "instructionMessage": {
-          "description": "Optional. Instruction message showed on contributors UI.",
-          "type": "string"
-        },
-        "annotationSpecSet": {
-          "description": "Required. Annotation spec set resource name.",
-          "type": "string"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1BoundingPolyConfig",
-      "description": "Config for image bounding poly (and bounding box) human labeling task.",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1alpha1LabelVideoObjectDetectionOperationMetadata": {
-      "description": "Details of a LabelVideoObjectDetection operation metadata.",
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig",
-          "description": "Basic human annotation config used in labeling request."
-        }
-      },
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1alpha1LabelVideoObjectDetectionOperationMetadata"
-    },
-    "GoogleCloudDatalabelingV1beta1LabelImageClassificationOperationMetadata": {
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1LabelImageClassificationOperationMetadata",
-      "type": "object",
-      "description": "Metadata of a LabelImageClassification operation."
-    },
-    "GoogleCloudDatalabelingV1beta1SearchEvaluationsResponse": {
-      "id": "GoogleCloudDatalabelingV1beta1SearchEvaluationsResponse",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "A token to retrieve next page of results."
-        },
-        "evaluations": {
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1Evaluation"
-          },
-          "type": "array",
-          "description": "The list of evaluations matching the search."
-        }
-      },
-      "description": "Results of searching evaluations.",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1p2alpha1GcsDestination": {
-      "properties": {
-        "outputUri": {
-          "type": "string",
-          "description": "Required. The output uri of destination file."
-        },
-        "mimeType": {
-          "description": "Required. The format of the gcs destination. Only \"text/csv\" and \"application/json\" are supported.",
-          "type": "string"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1p2alpha1GcsDestination",
-      "type": "object",
-      "description": "Export destination of the data.Only gcs path is allowed in output_uri."
-    },
-    "GoogleCloudDatalabelingV1alpha1GcsDestination": {
-      "properties": {
-        "outputUri": {
-          "type": "string",
-          "description": "Required. The output uri of destination file."
-        },
-        "mimeType": {
-          "description": "Required. The format of the gcs destination. Only \"text/csv\" and \"application/json\" are supported.",
-          "type": "string"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1alpha1GcsDestination",
-      "description": "Export destination of the data.Only gcs path is allowed in output_uri.",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1p2alpha1LabelImageClassificationOperationMetadata": {
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1p2alpha1LabelImageClassificationOperationMetadata",
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig",
-          "description": "Basic human annotation config used in labeling request."
-        }
-      },
-      "description": "Metadata of a LabelImageClassification operation."
-    },
-    "GoogleCloudDatalabelingV1beta1LabelImageBoundingBoxOperationMetadata": {
-      "type": "object",
-      "description": "Details of a LabelImageBoundingBox operation metadata.",
-      "id": "GoogleCloudDatalabelingV1beta1LabelImageBoundingBoxOperationMetadata",
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1p2alpha1ImportDataOperationMetadata": {
-      "type": "object",
-      "description": "Metadata of an ImportData operation.",
-      "id": "GoogleCloudDatalabelingV1p2alpha1ImportDataOperationMetadata",
-      "properties": {
-        "dataset": {
-          "type": "string",
-          "description": "Output only. The name of imported dataset. \"projects/*/datasets/*\""
-        },
-        "partialFailures": {
-          "type": "array",
-          "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
-          "items": {
-            "$ref": "GoogleRpcStatus"
-          }
-        },
-        "createTime": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "Output only. Timestamp when import dataset request was created."
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig": {
-      "properties": {
-        "labelGroup": {
-          "description": "Optional. A human-readable label used to logically group labeling tasks. This string must match the regular expression `[a-zA-Z\\\\d_-]{0,128}`.",
-          "type": "string"
-        },
-        "annotatedDatasetDisplayName": {
-          "description": "Required. A human-readable name for AnnotatedDataset defined by users. Maximum of 64 characters .",
-          "type": "string"
-        },
-        "annotatedDatasetDescription": {
-          "description": "Optional. A human-readable description for AnnotatedDataset. The description can be up to 10000 characters long.",
-          "type": "string"
-        },
-        "contributorEmails": {
-          "description": "Optional. If you want your own labeling contributors to manage and work on this labeling request, you can set these contributors here. We will give them access to the question types in crowdcompute. Note that these emails must be registered in crowdcompute worker UI: https://crowd-compute.appspot.com/",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "userEmailAddress": {
-          "description": "Email of the user who started the labeling task and should be notified by email. If empty no notification will be sent.",
-          "type": "string"
-        },
-        "instruction": {
-          "description": "Required. Instruction resource name.",
-          "type": "string"
-        },
-        "questionDuration": {
-          "description": "Optional. Maximum duration for contributors to answer a question. Maximum is 3600 seconds. Default is 3600 seconds.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "languageCode": {
-          "type": "string",
-          "description": "Optional. The Language of this question, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US. Only need to set this when task is language related. For example, French text classification."
-        },
-        "replicaCount": {
-          "type": "integer",
-          "description": "Optional. Replication of questions. Each question will be sent to up to this number of contributors to label. Aggregated answers will be returned. Default is set to 1. For image related labeling, valid values are 1, 3, 5.",
-          "format": "int32"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
-      "description": "Configuration for how human labeling task should be done.",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig": {
-      "type": "object",
-      "description": "Configuration for how human labeling task should be done.",
-      "properties": {
-        "instruction": {
-          "description": "Required. Instruction resource name.",
-          "type": "string"
-        },
-        "annotatedDatasetDescription": {
-          "description": "Optional. A human-readable description for AnnotatedDataset. The description can be up to 10000 characters long.",
-          "type": "string"
-        },
-        "questionDuration": {
-          "description": "Optional. Maximum duration for contributors to answer a question. Maximum is 3600 seconds. Default is 3600 seconds.",
-          "type": "string",
-          "format": "google-duration"
-        },
-        "labelGroup": {
-          "description": "Optional. A human-readable label used to logically group labeling tasks. This string must match the regular expression `[a-zA-Z\\\\d_-]{0,128}`.",
-          "type": "string"
-        },
-        "languageCode": {
-          "type": "string",
-          "description": "Optional. The Language of this question, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US. Only need to set this when task is language related. For example, French text classification."
-        },
-        "userEmailAddress": {
-          "type": "string",
-          "description": "Email of the user who started the labeling task and should be notified by email. If empty no notification will be sent."
-        },
-        "contributorEmails": {
-          "description": "Optional. If you want your own labeling contributors to manage and work on this labeling request, you can set these contributors here. We will give them access to the question types in crowdcompute. Note that these emails must be registered in crowdcompute worker UI: https://crowd-compute.appspot.com/",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "replicaCount": {
-          "format": "int32",
-          "description": "Optional. Replication of questions. Each question will be sent to up to this number of contributors to label. Aggregated answers will be returned. Default is set to 1. For image related labeling, valid values are 1, 3, 5.",
-          "type": "integer"
-        },
-        "annotatedDatasetDisplayName": {
-          "description": "Required. A human-readable name for AnnotatedDataset defined by users. Maximum of 64 characters .",
-          "type": "string"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig"
-    },
-    "GoogleCloudDatalabelingV1alpha1OutputConfig": {
-      "description": "The configuration of output data.",
-      "properties": {
-        "gcsFolderDestination": {
-          "$ref": "GoogleCloudDatalabelingV1alpha1GcsFolderDestination",
-          "description": "Output to a folder in Cloud Storage. Should be used for image segmentation or document de-identification labeling outputs."
-        },
-        "gcsDestination": {
-          "description": "Output to a file in Cloud Storage. Should be used for labeling output other than image segmentation.",
-          "$ref": "GoogleCloudDatalabelingV1alpha1GcsDestination"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1alpha1OutputConfig",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1p1alpha1ImportDataOperationMetadata": {
-      "type": "object",
-      "description": "Metadata of an ImportData operation.",
-      "properties": {
-        "partialFailures": {
-          "type": "array",
-          "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
-          "items": {
-            "$ref": "GoogleRpcStatus"
-          }
-        },
-        "createTime": {
-          "format": "google-datetime",
-          "type": "string",
-          "description": "Output only. Timestamp when import dataset request was created."
-        },
-        "dataset": {
-          "type": "string",
-          "description": "Output only. The name of imported dataset. \"projects/*/datasets/*\""
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1p1alpha1ImportDataOperationMetadata"
-    },
-    "GoogleCloudDatalabelingV1beta1LabelStats": {
-      "properties": {
-        "exampleCount": {
-          "description": "Map of each annotation spec's example count. Key is the annotation spec name and value is the number of examples for that annotation spec. If the annotated dataset does not have annotation spec, the map will return a pair where the key is empty string and value is the total number of annotations.",
-          "additionalProperties": {
-            "format": "int64",
-            "type": "string"
-          },
-          "type": "object"
-        }
-      },
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1beta1LabelStats",
-      "description": "Statistics about annotation specs."
-    },
-    "GoogleCloudDatalabelingV1beta1VideoClassificationAnnotation": {
-      "type": "object",
-      "description": "Video classification annotation.",
-      "properties": {
-        "annotationSpec": {
-          "description": "Label of the segment specified by time_segment.",
-          "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec"
-        },
-        "timeSegment": {
-          "$ref": "GoogleCloudDatalabelingV1beta1TimeSegment",
-          "description": "The time segment of the video to which the annotation applies."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1VideoClassificationAnnotation"
-    },
-    "GoogleCloudDatalabelingV1alpha1LabelImageBoundingBoxOperationMetadata": {
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1alpha1LabelImageBoundingBoxOperationMetadata",
-      "description": "Details of a LabelImageBoundingBox operation metadata.",
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1alpha1LabelOperationMetadata": {
-      "id": "GoogleCloudDatalabelingV1alpha1LabelOperationMetadata",
-      "properties": {
-        "progressPercent": {
-          "format": "int32",
-          "description": "Output only. Progress of label operation. Range: [0, 100].",
-          "type": "integer"
-        },
-        "textClassificationDetails": {
-          "$ref": "GoogleCloudDatalabelingV1alpha1LabelTextClassificationOperationMetadata",
-          "description": "Details of label text classification operation."
-        },
-        "textEntityExtractionDetails": {
-          "$ref": "GoogleCloudDatalabelingV1alpha1LabelTextEntityExtractionOperationMetadata",
-          "description": "Details of label text entity extraction operation."
-        },
-        "videoObjectTrackingDetails": {
-          "$ref": "GoogleCloudDatalabelingV1alpha1LabelVideoObjectTrackingOperationMetadata",
-          "description": "Details of label video object tracking operation."
-        },
-        "imagePolylineDetails": {
-          "$ref": "GoogleCloudDatalabelingV1alpha1LabelImagePolylineOperationMetadata",
-          "description": "Details of label image polyline operation."
-        },
-        "partialFailures": {
-          "type": "array",
-          "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
-          "items": {
-            "$ref": "GoogleRpcStatus"
-          }
-        },
-        "dataset": {
-          "description": "Output only. The name of dataset to be labeled. \"projects/*/datasets/*\"",
-          "type": "string"
-        },
-        "annotatedDataset": {
-          "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\".",
-          "type": "string"
-        },
-        "videoObjectDetectionDetails": {
-          "description": "Details of label video object detection operation.",
-          "$ref": "GoogleCloudDatalabelingV1alpha1LabelVideoObjectDetectionOperationMetadata"
-        },
-        "imageClassificationDetails": {
-          "$ref": "GoogleCloudDatalabelingV1alpha1LabelImageClassificationOperationMetadata",
-          "description": "Details of label image classification operation."
-        },
-        "imageBoundingBoxDetails": {
-          "$ref": "GoogleCloudDatalabelingV1alpha1LabelImageBoundingBoxOperationMetadata",
-          "description": "Details of label image bounding box operation."
-        },
-        "videoClassificationDetails": {
-          "description": "Details of label video classification operation.",
-          "$ref": "GoogleCloudDatalabelingV1alpha1LabelVideoClassificationOperationMetadata"
-        },
-        "imageOrientedBoundingBoxDetails": {
-          "description": "Details of label image oriented bounding box operation.",
-          "$ref": "GoogleCloudDatalabelingV1alpha1LabelImageOrientedBoundingBoxOperationMetadata"
-        },
-        "videoEventDetails": {
-          "description": "Details of label video event operation.",
-          "$ref": "GoogleCloudDatalabelingV1alpha1LabelVideoEventOperationMetadata"
-        },
-        "createTime": {
-          "description": "Output only. Timestamp when labeling request was created.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "imageBoundingPolyDetails": {
-          "description": "Details of label image bounding poly operation.",
-          "$ref": "GoogleCloudDatalabelingV1alpha1LabelImageBoundingPolyOperationMetadata"
-        },
-        "imageSegmentationDetails": {
-          "description": "Details of label image segmentation operation.",
-          "$ref": "GoogleCloudDatalabelingV1alpha1LabelImageSegmentationOperationMetadata"
-        }
-      },
-      "type": "object",
-      "description": "Metadata of a labeling operation, such as LabelImage or LabelVideo. Next tag: 23"
-    },
-    "GoogleCloudDatalabelingV1alpha1CreateInstructionMetadata": {
-      "properties": {
-        "instruction": {
-          "type": "string",
-          "description": "The name of the created Instruction. projects/{project_id}/instructions/{instruction_id}"
-        },
-        "partialFailures": {
-          "items": {
-            "$ref": "GoogleRpcStatus"
-          },
-          "description": "Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
-          "type": "array"
-        },
-        "createTime": {
-          "format": "google-datetime",
-          "description": "Timestamp when create instruction request was created.",
-          "type": "string"
-        }
-      },
-      "description": "Metadata of a CreateInstruction operation.",
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1alpha1CreateInstructionMetadata"
-    },
-    "GoogleLongrunningOperation": {
-      "description": "This resource represents a long-running operation that is the result of a network API call.",
-      "properties": {
-        "metadata": {
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
-          "type": "object"
-        },
-        "response": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`."
-        },
-        "done": {
-          "type": "boolean",
-          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available."
-        },
-        "name": {
-          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
-          "type": "string"
-        },
-        "error": {
-          "description": "The error result of the operation in case of failure or cancellation.",
-          "$ref": "GoogleRpcStatus"
-        }
-      },
-      "type": "object",
-      "id": "GoogleLongrunningOperation"
-    },
-    "GoogleCloudDatalabelingV1alpha1GcsFolderDestination": {
-      "id": "GoogleCloudDatalabelingV1alpha1GcsFolderDestination",
-      "properties": {
-        "outputFolderUri": {
-          "type": "string",
-          "description": "Required. Cloud Storage directory to export data to."
-        }
-      },
-      "type": "object",
-      "description": "Export folder destination of the data."
-    },
-    "GoogleCloudDatalabelingV1p1alpha1CreateInstructionMetadata": {
-      "description": "Metadata of a CreateInstruction operation.",
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1p1alpha1CreateInstructionMetadata",
-      "properties": {
-        "partialFailures": {
-          "items": {
-            "$ref": "GoogleRpcStatus"
-          },
-          "type": "array",
-          "description": "Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details."
-        },
-        "createTime": {
-          "format": "google-datetime",
-          "description": "Timestamp when create instruction request was created.",
-          "type": "string"
-        },
-        "instruction": {
-          "type": "string",
-          "description": "The name of the created Instruction. projects/{project_id}/instructions/{instruction_id}"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1OperatorFeedbackMetadata": {
-      "id": "GoogleCloudDatalabelingV1beta1OperatorFeedbackMetadata",
-      "description": "Metadata describing the feedback from the operator.",
-      "properties": {},
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1p2alpha1ExportDataOperationMetadata": {
-      "id": "GoogleCloudDatalabelingV1p2alpha1ExportDataOperationMetadata",
-      "type": "object",
-      "description": "Metadata of an ExportData operation.",
-      "properties": {
-        "annotatedDataset": {
-          "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\".",
-          "type": "string"
-        },
-        "partialFailures": {
-          "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleRpcStatus"
-          }
-        },
-        "createTime": {
-          "description": "Output only. Timestamp when export dataset request was created.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "dataset": {
-          "type": "string",
-          "description": "Output only. The name of dataset to be exported. \"projects/*/datasets/*\""
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1CreateEvaluationJobRequest": {
-      "properties": {
-        "job": {
-          "description": "Required. The evaluation job to create.",
-          "$ref": "GoogleCloudDatalabelingV1beta1EvaluationJob"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1CreateEvaluationJobRequest",
-      "description": "Request message for CreateEvaluationJob.",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1p2alpha1LabelImageSegmentationOperationMetadata": {
-      "id": "GoogleCloudDatalabelingV1p2alpha1LabelImageSegmentationOperationMetadata",
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig",
-          "description": "Basic human annotation config."
-        }
-      },
-      "type": "object",
-      "description": "Details of a LabelImageSegmentation operation metadata."
-    },
-    "GoogleCloudDatalabelingV1alpha1LabelTextClassificationOperationMetadata": {
-      "id": "GoogleCloudDatalabelingV1alpha1LabelTextClassificationOperationMetadata",
-      "type": "object",
-      "description": "Details of a LabelTextClassification operation metadata.",
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1ConfidenceMetricsEntry": {
-      "properties": {
-        "recall": {
-          "description": "Recall value.",
-          "type": "number",
-          "format": "float"
-        },
-        "precisionAt1": {
-          "type": "number",
-          "format": "float",
-          "description": "Precision value for entries with label that has highest score."
-        },
-        "f1ScoreAt5": {
-          "format": "float",
-          "type": "number",
-          "description": "The harmonic mean of recall_at5 and precision_at5."
-        },
-        "f1Score": {
-          "description": "Harmonic mean of recall and precision.",
-          "format": "float",
-          "type": "number"
-        },
-        "precisionAt5": {
-          "description": "Precision value for entries with label that has highest 5 scores.",
-          "type": "number",
-          "format": "float"
-        },
-        "recallAt1": {
-          "type": "number",
-          "format": "float",
-          "description": "Recall value for entries with label that has highest score."
-        },
-        "precision": {
-          "format": "float",
-          "type": "number",
-          "description": "Precision value."
-        },
-        "recallAt5": {
-          "format": "float",
-          "description": "Recall value for entries with label that has highest 5 scores.",
-          "type": "number"
-        },
-        "f1ScoreAt1": {
-          "description": "The harmonic mean of recall_at1 and precision_at1.",
-          "type": "number",
-          "format": "float"
-        },
-        "confidenceThreshold": {
-          "type": "number",
-          "description": "Threshold used for this entry. For classification tasks, this is a classification threshold: a predicted label is categorized as positive or negative (in the context of this point on the PR curve) based on whether the label's score meets this threshold. For image object detection (bounding box) tasks, this is the [intersection-over-union (IOU)](/vision/automl/object-detection/docs/evaluate#intersection-over-union) threshold for the context of this point on the PR curve.",
-          "format": "float"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1ConfidenceMetricsEntry",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1Instruction": {
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Output only. Instruction resource name, format: projects/{project_id}/instructions/{instruction_id}"
-        },
-        "dataType": {
-          "description": "Required. The data type of this instruction.",
-          "enumDescriptions": [
-            "Data type is unspecified.",
-            "Allowed for continuous evaluation.",
-            "Video data type.",
-            "Allowed for continuous evaluation.",
-            "Allowed for continuous evaluation."
-          ],
-          "type": "string",
-          "enum": [
-            "DATA_TYPE_UNSPECIFIED",
-            "IMAGE",
-            "VIDEO",
-            "TEXT",
-            "GENERAL_DATA"
-          ]
-        },
-        "blockingResources": {
-          "type": "array",
-          "description": "Output only. The names of any related resources that are blocking changes to the instruction.",
-          "items": {
-            "type": "string"
-          }
-        },
-        "updateTime": {
-          "format": "google-datetime",
-          "description": "Output only. Last update time of instruction.",
-          "type": "string"
-        },
-        "description": {
-          "type": "string",
-          "description": "Optional. User-provided description of the instruction. The description can be up to 10000 characters long."
-        },
-        "createTime": {
-          "description": "Output only. Creation time of instruction.",
-          "type": "string",
-          "format": "google-datetime"
-        },
-        "displayName": {
-          "type": "string",
-          "description": "Required. The display name of the instruction. Maximum of 64 characters."
-        },
-        "csvInstruction": {
-          "$ref": "GoogleCloudDatalabelingV1beta1CsvInstruction",
-          "description": "Deprecated: this instruction format is not supported any more. Instruction from a CSV file, such as for classification task. The CSV file should have exact two columns, in the following format: * The first column is labeled data, such as an image reference, text. * The second column is comma separated labels associated with data."
-        },
-        "pdfInstruction": {
-          "description": "Instruction from a PDF document. The PDF should be in a Cloud Storage bucket.",
-          "$ref": "GoogleCloudDatalabelingV1beta1PdfInstruction"
-        }
-      },
-      "description": "Instruction of how to perform the labeling task for human operators. Currently only PDF instruction is supported.",
-      "id": "GoogleCloudDatalabelingV1beta1Instruction",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1alpha1LabelImageSegmentationOperationMetadata": {
-      "id": "GoogleCloudDatalabelingV1alpha1LabelImageSegmentationOperationMetadata",
-      "description": "Details of a LabelImageSegmentation operation metadata.",
-      "type": "object",
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config.",
-          "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1p1alpha1GenerateAnalysisReportOperationMetadata": {
-      "id": "GoogleCloudDatalabelingV1p1alpha1GenerateAnalysisReportOperationMetadata",
-      "properties": {
-        "dataset": {
-          "description": "The name of the dataset for which the analysis report is generated. Format: \"projects/*/datasets/*\"",
-          "type": "string"
-        },
-        "createTime": {
-          "type": "string",
-          "description": "Timestamp when generate report request was created.",
-          "format": "google-datetime"
-        }
-      },
-      "description": "Metadata of an GenerateAnalysisReport operation.",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1ImportDataOperationMetadata": {
-      "type": "object",
-      "properties": {
-        "partialFailures": {
-          "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleRpcStatus"
-          }
-        },
-        "dataset": {
-          "description": "Output only. The name of imported dataset. \"projects/*/datasets/*\"",
-          "type": "string"
-        },
-        "createTime": {
-          "type": "string",
-          "description": "Output only. Timestamp when import dataset request was created.",
-          "format": "google-datetime"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1ImportDataOperationMetadata",
-      "description": "Metadata of an ImportData operation."
-    },
-    "GoogleCloudDatalabelingV1beta1AnnotatedDataset": {
-      "properties": {
-        "createTime": {
-          "format": "google-datetime",
-          "type": "string",
-          "description": "Output only. Time the AnnotatedDataset was created."
-        },
-        "completedExampleCount": {
-          "description": "Output only. Number of examples that have annotation in the annotated dataset.",
-          "type": "string",
-          "format": "int64"
-        },
-        "blockingResources": {
-          "description": "Output only. The names of any related resources that are blocking changes to the annotated dataset.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "labelStats": {
-          "description": "Output only. Per label statistics.",
-          "$ref": "GoogleCloudDatalabelingV1beta1LabelStats"
-        },
-        "annotationType": {
-          "enumDescriptions": [
-            "",
-            "Classification annotations in an image. Allowed for continuous evaluation.",
-            "Bounding box annotations in an image. A form of image object detection. Allowed for continuous evaluation.",
-            "Oriented bounding box. The box does not have to be parallel to horizontal line.",
-            "Bounding poly annotations in an image.",
-            "Polyline annotations in an image.",
-            "Segmentation annotations in an image.",
-            "Classification annotations in video shots.",
-            "Video object tracking annotation.",
-            "Video object detection annotation.",
-            "Video event annotation.",
-            "Classification for text. Allowed for continuous evaluation.",
-            "Entity extraction for text.",
-            "General classification. Allowed for continuous evaluation."
-          ],
-          "description": "Output only. Type of the annotation. It is specified when starting labeling task.",
-          "enum": [
-            "ANNOTATION_TYPE_UNSPECIFIED",
-            "IMAGE_CLASSIFICATION_ANNOTATION",
-            "IMAGE_BOUNDING_BOX_ANNOTATION",
-            "IMAGE_ORIENTED_BOUNDING_BOX_ANNOTATION",
-            "IMAGE_BOUNDING_POLY_ANNOTATION",
-            "IMAGE_POLYLINE_ANNOTATION",
-            "IMAGE_SEGMENTATION_ANNOTATION",
-            "VIDEO_SHOTS_CLASSIFICATION_ANNOTATION",
-            "VIDEO_OBJECT_TRACKING_ANNOTATION",
-            "VIDEO_OBJECT_DETECTION_ANNOTATION",
-            "VIDEO_EVENT_ANNOTATION",
-            "TEXT_CLASSIFICATION_ANNOTATION",
-            "TEXT_ENTITY_EXTRACTION_ANNOTATION",
-            "GENERAL_CLASSIFICATION_ANNOTATION"
-          ],
-          "type": "string"
-        },
-        "exampleCount": {
-          "type": "string",
-          "format": "int64",
-          "description": "Output only. Number of examples in the annotated dataset."
-        },
-        "displayName": {
-          "type": "string",
-          "description": "Output only. The display name of the AnnotatedDataset. It is specified in HumanAnnotationConfig when user starts a labeling task. Maximum of 64 characters."
-        },
-        "annotationSource": {
-          "type": "string",
-          "enum": [
-            "ANNOTATION_SOURCE_UNSPECIFIED",
-            "OPERATOR"
-          ],
-          "description": "Output only. Source of the annotation.",
-          "enumDescriptions": [
-            "",
-            "Answer is provided by a human contributor."
-          ]
-        },
-        "description": {
-          "type": "string",
-          "description": "Output only. The description of the AnnotatedDataset. It is specified in HumanAnnotationConfig when user starts a labeling task. Maximum of 10000 characters."
-        },
-        "metadata": {
-          "$ref": "GoogleCloudDatalabelingV1beta1AnnotatedDatasetMetadata",
-          "description": "Output only. Additional information about AnnotatedDataset."
-        },
-        "name": {
-          "description": "Output only. AnnotatedDataset resource name in format of: projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/ {annotated_dataset_id}",
-          "type": "string"
-        }
-      },
-      "description": "AnnotatedDataset is a set holding annotations for data in a Dataset. Each labeling task will generate an AnnotatedDataset under the Dataset that the task is requested for.",
-      "id": "GoogleCloudDatalabelingV1beta1AnnotatedDataset",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1p2alpha1LabelImageBoundingPolyOperationMetadata": {
-      "type": "object",
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig",
-          "description": "Basic human annotation config used in labeling request."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1p2alpha1LabelImageBoundingPolyOperationMetadata",
-      "description": "Details of LabelImageBoundingPoly operation metadata."
-    },
-    "GoogleCloudDatalabelingV1p1alpha1ImportDataOperationResponse": {
-      "id": "GoogleCloudDatalabelingV1p1alpha1ImportDataOperationResponse",
-      "description": "Response used for ImportData longrunning operation.",
-      "properties": {
-        "dataset": {
-          "type": "string",
-          "description": "Ouptut only. The name of imported dataset."
-        },
-        "importCount": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Output only. Number of examples imported successfully."
-        },
-        "totalCount": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Output only. Total number of examples requested to import"
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1ListFeedbackMessagesResponse": {
-      "id": "GoogleCloudDatalabelingV1beta1ListFeedbackMessagesResponse",
-      "properties": {
-        "feedbackMessages": {
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1FeedbackMessage"
-          },
-          "type": "array",
-          "description": "The list of feedback messages to return."
-        },
-        "nextPageToken": {
-          "description": "A token to retrieve next page of results.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Results for listing FeedbackMessages."
-    },
-    "GoogleCloudDatalabelingV1beta1BoundingBoxEvaluationOptions": {
-      "id": "GoogleCloudDatalabelingV1beta1BoundingBoxEvaluationOptions",
-      "description": "Options regarding evaluation between bounding boxes.",
-      "properties": {
-        "iouThreshold": {
-          "type": "number",
-          "format": "float",
-          "description": "Minimum [intersection-over-union (IOU)](/vision/automl/object-detection/docs/evaluate#intersection-over-union) required for 2 bounding boxes to be considered a match. This must be a number between 0 and 1."
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1Evaluation": {
-      "id": "GoogleCloudDatalabelingV1beta1Evaluation",
-      "type": "object",
-      "description": "Describes an evaluation between a machine learning model's predictions and ground truth labels. Created when an EvaluationJob runs successfully.",
-      "properties": {
-        "config": {
-          "description": "Output only. Options used in the evaluation job that created this evaluation.",
-          "$ref": "GoogleCloudDatalabelingV1beta1EvaluationConfig"
-        },
-        "evaluationJobRunTime": {
-          "description": "Output only. Timestamp for when the evaluation job that created this evaluation ran.",
-          "type": "string",
-          "format": "google-datetime"
-        },
-        "evaluatedItemCount": {
-          "description": "Output only. The number of items in the ground truth dataset that were used for this evaluation. Only populated when the evaulation is for certain AnnotationTypes.",
-          "type": "string",
-          "format": "int64"
-        },
-        "createTime": {
-          "format": "google-datetime",
-          "type": "string",
-          "description": "Output only. Timestamp for when this evaluation was created."
-        },
-        "name": {
-          "type": "string",
-          "description": "Output only. Resource name of an evaluation. The name has the following format: \"projects/{project_id}/datasets/{dataset_id}/evaluations/ {evaluation_id}'"
-        },
-        "annotationType": {
-          "enumDescriptions": [
-            "",
-            "Classification annotations in an image. Allowed for continuous evaluation.",
-            "Bounding box annotations in an image. A form of image object detection. Allowed for continuous evaluation.",
-            "Oriented bounding box. The box does not have to be parallel to horizontal line.",
-            "Bounding poly annotations in an image.",
-            "Polyline annotations in an image.",
-            "Segmentation annotations in an image.",
-            "Classification annotations in video shots.",
-            "Video object tracking annotation.",
-            "Video object detection annotation.",
-            "Video event annotation.",
-            "Classification for text. Allowed for continuous evaluation.",
-            "Entity extraction for text.",
-            "General classification. Allowed for continuous evaluation."
-          ],
-          "description": "Output only. Type of task that the model version being evaluated performs, as defined in the evaluationJobConfig.inputConfig.annotationType field of the evaluation job that created this evaluation.",
-          "type": "string",
-          "enum": [
-            "ANNOTATION_TYPE_UNSPECIFIED",
-            "IMAGE_CLASSIFICATION_ANNOTATION",
-            "IMAGE_BOUNDING_BOX_ANNOTATION",
-            "IMAGE_ORIENTED_BOUNDING_BOX_ANNOTATION",
-            "IMAGE_BOUNDING_POLY_ANNOTATION",
-            "IMAGE_POLYLINE_ANNOTATION",
-            "IMAGE_SEGMENTATION_ANNOTATION",
-            "VIDEO_SHOTS_CLASSIFICATION_ANNOTATION",
-            "VIDEO_OBJECT_TRACKING_ANNOTATION",
-            "VIDEO_OBJECT_DETECTION_ANNOTATION",
-            "VIDEO_EVENT_ANNOTATION",
-            "TEXT_CLASSIFICATION_ANNOTATION",
-            "TEXT_ENTITY_EXTRACTION_ANNOTATION",
-            "GENERAL_CLASSIFICATION_ANNOTATION"
-          ]
-        },
-        "evaluationMetrics": {
-          "$ref": "GoogleCloudDatalabelingV1beta1EvaluationMetrics",
-          "description": "Output only. Metrics comparing predictions to ground truth labels."
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1ClassificationMetadata": {
-      "type": "object",
-      "properties": {
-        "isMultiLabel": {
-          "description": "Whether the classification task is multi-label or not.",
-          "type": "boolean"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1ClassificationMetadata",
-      "description": "Metadata for classification annotations."
-    },
-    "GoogleCloudDatalabelingV1p1alpha1LabelVideoEventOperationMetadata": {
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig"
-        }
-      },
-      "type": "object",
-      "description": "Details of a LabelVideoEvent operation metadata.",
-      "id": "GoogleCloudDatalabelingV1p1alpha1LabelVideoEventOperationMetadata"
-    },
-    "GoogleCloudDatalabelingV1beta1AnnotationMetadata": {
-      "properties": {
-        "operatorMetadata": {
-          "description": "Metadata related to human labeling.",
-          "$ref": "GoogleCloudDatalabelingV1beta1OperatorMetadata"
-        }
-      },
-      "description": "Additional information associated with the annotation.",
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1beta1AnnotationMetadata"
-    },
-    "GoogleCloudDatalabelingV1p2alpha1ExportDataOperationResponse": {
-      "properties": {
-        "labelStats": {
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelStats",
-          "description": "Output only. Statistic infos of labels in the exported dataset."
-        },
-        "annotatedDataset": {
-          "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\".",
-          "type": "string"
-        },
-        "dataset": {
-          "description": "Ouptut only. The name of dataset. \"projects/*/datasets/*\"",
-          "type": "string"
-        },
-        "totalCount": {
-          "description": "Output only. Total number of examples requested to export",
-          "type": "integer",
-          "format": "int32"
-        },
-        "outputConfig": {
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1OutputConfig",
-          "description": "Output only. output_config in the ExportData request."
-        },
-        "exportCount": {
-          "description": "Output only. Number of examples exported successfully.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1p2alpha1ExportDataOperationResponse",
-      "description": "Response used for ExportDataset longrunning operation.",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1p2alpha1LabelTextClassificationOperationMetadata": {
-      "type": "object",
-      "description": "Details of a LabelTextClassification operation metadata.",
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig",
-          "description": "Basic human annotation config used in labeling request."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1p2alpha1LabelTextClassificationOperationMetadata"
-    },
-    "GoogleCloudDatalabelingV1p1alpha1LabelTextClassificationOperationMetadata": {
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1p1alpha1LabelTextClassificationOperationMetadata",
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig",
-          "description": "Basic human annotation config used in labeling request."
-        }
-      },
-      "description": "Details of a LabelTextClassification operation metadata."
-    },
-    "GoogleCloudDatalabelingV1p1alpha1LabelStats": {
-      "type": "object",
-      "properties": {
-        "exampleCount": {
-          "description": "Map of each annotation spec's example count. Key is the annotation spec name and value is the number of examples for that annotation spec. If the annotated dataset does not have annotation spec, the map will return a pair where the key is empty string and value is the total number of annotations.",
-          "additionalProperties": {
-            "format": "int64",
-            "type": "string"
-          },
-          "type": "object"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1p1alpha1LabelStats",
-      "description": "Statistics about annotation specs."
-    },
-    "GoogleCloudDatalabelingV1p2alpha1LabelVideoObjectTrackingOperationMetadata": {
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig",
-          "description": "Basic human annotation config used in labeling request."
-        }
-      },
-      "type": "object",
-      "description": "Details of a LabelVideoObjectTracking operation metadata.",
-      "id": "GoogleCloudDatalabelingV1p2alpha1LabelVideoObjectTrackingOperationMetadata"
-    },
-    "GoogleCloudDatalabelingV1beta1TextMetadata": {
-      "properties": {
-        "languageCode": {
-          "description": "The language of this text, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US.",
-          "type": "string"
-        }
-      },
-      "description": "Metadata for the text.",
-      "id": "GoogleCloudDatalabelingV1beta1TextMetadata",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1ImageSegmentationAnnotation": {
-      "description": "Image segmentation annotation.",
-      "type": "object",
-      "properties": {
-        "mimeType": {
-          "type": "string",
-          "description": "Image format."
-        },
-        "imageBytes": {
-          "format": "byte",
-          "type": "string",
-          "description": "A byte string of a full image's color map."
-        },
-        "annotationColors": {
-          "additionalProperties": {
-            "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec"
-          },
-          "type": "object",
-          "description": "The mapping between rgb color and annotation spec. The key is the rgb color represented in format of rgb(0, 0, 0). The value is the AnnotationSpec."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1ImageSegmentationAnnotation"
-    },
-    "GoogleCloudDatalabelingV1beta1FeedbackThreadMetadata": {
-      "type": "object",
-      "properties": {
-        "createTime": {
-          "type": "string",
-          "description": "When the thread is created",
-          "format": "google-datetime"
-        },
-        "thumbnail": {
-          "type": "string",
-          "description": "An image thumbnail of this thread.",
-          "format": "byte"
-        },
-        "lastUpdateTime": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "When the thread is last updated."
-        },
-        "status": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "Feedback thread is created with no reply;",
-            "Feedback thread is replied at least once;"
-          ],
-          "enum": [
-            "FEEDBACK_THREAD_STATUS_UNSPECIFIED",
-            "NEW",
-            "REPLIED"
-          ]
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1FeedbackThreadMetadata"
-    },
-    "GoogleCloudDatalabelingV1beta1LabelTextClassificationOperationMetadata": {
-      "type": "object",
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1LabelTextClassificationOperationMetadata",
-      "description": "Details of a LabelTextClassification operation metadata."
-    },
-    "GoogleCloudDatalabelingV1p2alpha1GcsFolderDestination": {
-      "description": "Export folder destination of the data.",
-      "id": "GoogleCloudDatalabelingV1p2alpha1GcsFolderDestination",
-      "properties": {
-        "outputFolderUri": {
-          "description": "Required. Cloud Storage directory to export data to.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "GoogleRpcStatus": {
-      "type": "object",
-      "properties": {
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
-          "type": "string"
-        },
-        "code": {
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "details": {
-          "items": {
-            "additionalProperties": {
-              "type": "any",
-              "description": "Properties of the object. Contains field @type with type URL."
             },
             "type": "object"
-          },
-          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
-          "type": "array"
-        }
-      },
-      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
-      "id": "GoogleRpcStatus"
-    },
-    "GoogleCloudDatalabelingV1alpha1ImportDataOperationResponse": {
-      "properties": {
-        "totalCount": {
-          "description": "Output only. Total number of examples requested to import",
-          "format": "int32",
-          "type": "integer"
         },
-        "importCount": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Output only. Number of examples imported successfully."
+        "GoogleCloudDatalabelingV1alpha1ExportDataOperationMetadata": {
+            "description": "Metadata of an ExportData operation.",
+            "id": "GoogleCloudDatalabelingV1alpha1ExportDataOperationMetadata",
+            "properties": {
+                "annotatedDataset": {
+                    "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\".",
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "Output only. Timestamp when export dataset request was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "dataset": {
+                    "description": "Output only. The name of dataset to be exported. \"projects/*/datasets/*\"",
+                    "type": "string"
+                },
+                "partialFailures": {
+                    "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
+                    "items": {
+                        "$ref": "GoogleRpcStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "dataset": {
-          "type": "string",
-          "description": "Ouptut only. The name of imported dataset."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1alpha1ImportDataOperationResponse",
-      "description": "Response used for ImportData longrunning operation.",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1CreateAnnotationSpecSetRequest": {
-      "description": "Request message for CreateAnnotationSpecSet.",
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1beta1CreateAnnotationSpecSetRequest",
-      "properties": {
-        "annotationSpecSet": {
-          "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpecSet",
-          "description": "Required. Annotation spec set to create. Annotation specs must be included. Only one annotation spec will be accepted for annotation specs with same display_name."
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1AnnotationSpecSetConfig": {
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1beta1AnnotationSpecSetConfig",
-      "properties": {
-        "allowMultiLabel": {
-          "type": "boolean",
-          "description": "Optional. If allow_multi_label is true, contributors are able to choose multiple labels from one annotation spec set."
+        "GoogleCloudDatalabelingV1alpha1ExportDataOperationResponse": {
+            "description": "Response used for ExportDataset longrunning operation.",
+            "id": "GoogleCloudDatalabelingV1alpha1ExportDataOperationResponse",
+            "properties": {
+                "annotatedDataset": {
+                    "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\".",
+                    "type": "string"
+                },
+                "dataset": {
+                    "description": "Ouptut only. The name of dataset. \"projects/*/datasets/*\"",
+                    "type": "string"
+                },
+                "exportCount": {
+                    "description": "Output only. Number of examples exported successfully.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "labelStats": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1LabelStats",
+                    "description": "Output only. Statistic infos of labels in the exported dataset."
+                },
+                "outputConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1OutputConfig",
+                    "description": "Output only. output_config in the ExportData request."
+                },
+                "totalCount": {
+                    "description": "Output only. Total number of examples requested to export",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
         },
-        "annotationSpecSet": {
-          "type": "string",
-          "description": "Required. Annotation spec set resource name."
-        }
-      },
-      "description": "Annotation spec set with the setting of allowing multi labels or not."
-    },
-    "GoogleCloudDatalabelingV1beta1InputConfig": {
-      "id": "GoogleCloudDatalabelingV1beta1InputConfig",
-      "description": "The configuration of input data, including data type, location, etc.",
-      "properties": {
-        "bigquerySource": {
-          "description": "Source located in BigQuery. You must specify this field if you are using this InputConfig in an EvaluationJob.",
-          "$ref": "GoogleCloudDatalabelingV1beta1BigQuerySource"
+        "GoogleCloudDatalabelingV1alpha1GcsDestination": {
+            "description": "Export destination of the data.Only gcs path is allowed in output_uri.",
+            "id": "GoogleCloudDatalabelingV1alpha1GcsDestination",
+            "properties": {
+                "mimeType": {
+                    "description": "Required. The format of the gcs destination. Only \"text/csv\" and \"application/json\" are supported.",
+                    "type": "string"
+                },
+                "outputUri": {
+                    "description": "Required. The output uri of destination file.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "textMetadata": {
-          "$ref": "GoogleCloudDatalabelingV1beta1TextMetadata",
-          "description": "Required for text import, as language code must be specified."
+        "GoogleCloudDatalabelingV1alpha1GcsFolderDestination": {
+            "description": "Export folder destination of the data.",
+            "id": "GoogleCloudDatalabelingV1alpha1GcsFolderDestination",
+            "properties": {
+                "outputFolderUri": {
+                    "description": "Required. Cloud Storage directory to export data to.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "annotationType": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "Classification annotations in an image. Allowed for continuous evaluation.",
-            "Bounding box annotations in an image. A form of image object detection. Allowed for continuous evaluation.",
-            "Oriented bounding box. The box does not have to be parallel to horizontal line.",
-            "Bounding poly annotations in an image.",
-            "Polyline annotations in an image.",
-            "Segmentation annotations in an image.",
-            "Classification annotations in video shots.",
-            "Video object tracking annotation.",
-            "Video object detection annotation.",
-            "Video event annotation.",
-            "Classification for text. Allowed for continuous evaluation.",
-            "Entity extraction for text.",
-            "General classification. Allowed for continuous evaluation."
-          ],
-          "description": "Optional. The type of annotation to be performed on this data. You must specify this field if you are using this InputConfig in an EvaluationJob.",
-          "enum": [
-            "ANNOTATION_TYPE_UNSPECIFIED",
-            "IMAGE_CLASSIFICATION_ANNOTATION",
-            "IMAGE_BOUNDING_BOX_ANNOTATION",
-            "IMAGE_ORIENTED_BOUNDING_BOX_ANNOTATION",
-            "IMAGE_BOUNDING_POLY_ANNOTATION",
-            "IMAGE_POLYLINE_ANNOTATION",
-            "IMAGE_SEGMENTATION_ANNOTATION",
-            "VIDEO_SHOTS_CLASSIFICATION_ANNOTATION",
-            "VIDEO_OBJECT_TRACKING_ANNOTATION",
-            "VIDEO_OBJECT_DETECTION_ANNOTATION",
-            "VIDEO_EVENT_ANNOTATION",
-            "TEXT_CLASSIFICATION_ANNOTATION",
-            "TEXT_ENTITY_EXTRACTION_ANNOTATION",
-            "GENERAL_CLASSIFICATION_ANNOTATION"
-          ]
+        "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig": {
+            "description": "Configuration for how human labeling task should be done.",
+            "id": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig",
+            "properties": {
+                "annotatedDatasetDescription": {
+                    "description": "Optional. A human-readable description for AnnotatedDataset. The description can be up to 10000 characters long.",
+                    "type": "string"
+                },
+                "annotatedDatasetDisplayName": {
+                    "description": "Required. A human-readable name for AnnotatedDataset defined by users. Maximum of 64 characters .",
+                    "type": "string"
+                },
+                "contributorEmails": {
+                    "description": "Optional. If you want your own labeling contributors to manage and work on this labeling request, you can set these contributors here. We will give them access to the question types in crowdcompute. Note that these emails must be registered in crowdcompute worker UI: https://crowd-compute.appspot.com/",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "instruction": {
+                    "description": "Required. Instruction resource name.",
+                    "type": "string"
+                },
+                "labelGroup": {
+                    "description": "Optional. A human-readable label used to logically group labeling tasks. This string must match the regular expression `[a-zA-Z\\\\d_-]{0,128}`.",
+                    "type": "string"
+                },
+                "languageCode": {
+                    "description": "Optional. The Language of this question, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US. Only need to set this when task is language related. For example, French text classification.",
+                    "type": "string"
+                },
+                "questionDuration": {
+                    "description": "Optional. Maximum duration for contributors to answer a question. Maximum is 3600 seconds. Default is 3600 seconds.",
+                    "format": "google-duration",
+                    "type": "string"
+                },
+                "replicaCount": {
+                    "description": "Optional. Replication of questions. Each question will be sent to up to this number of contributors to label. Aggregated answers will be returned. Default is set to 1. For image related labeling, valid values are 1, 3, 5.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "userEmailAddress": {
+                    "description": "Email of the user who started the labeling task and should be notified by email. If empty no notification will be sent.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "gcsSource": {
-          "description": "Source located in Cloud Storage.",
-          "$ref": "GoogleCloudDatalabelingV1beta1GcsSource"
+        "GoogleCloudDatalabelingV1alpha1ImportDataOperationMetadata": {
+            "description": "Metadata of an ImportData operation.",
+            "id": "GoogleCloudDatalabelingV1alpha1ImportDataOperationMetadata",
+            "properties": {
+                "createTime": {
+                    "description": "Output only. Timestamp when import dataset request was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "dataset": {
+                    "description": "Output only. The name of imported dataset. \"projects/*/datasets/*\"",
+                    "type": "string"
+                },
+                "partialFailures": {
+                    "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
+                    "items": {
+                        "$ref": "GoogleRpcStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "classificationMetadata": {
-          "$ref": "GoogleCloudDatalabelingV1beta1ClassificationMetadata",
-          "description": "Optional. Metadata about annotations for the input. You must specify this field if you are using this InputConfig in an EvaluationJob for a model version that performs classification."
+        "GoogleCloudDatalabelingV1alpha1ImportDataOperationResponse": {
+            "description": "Response used for ImportData longrunning operation.",
+            "id": "GoogleCloudDatalabelingV1alpha1ImportDataOperationResponse",
+            "properties": {
+                "dataset": {
+                    "description": "Ouptut only. The name of imported dataset.",
+                    "type": "string"
+                },
+                "importCount": {
+                    "description": "Output only. Number of examples imported successfully.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalCount": {
+                    "description": "Output only. Total number of examples requested to import",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
         },
-        "dataType": {
-          "type": "string",
-          "description": "Required. Data type must be specifed when user tries to import data.",
-          "enum": [
-            "DATA_TYPE_UNSPECIFIED",
-            "IMAGE",
-            "VIDEO",
-            "TEXT",
-            "GENERAL_DATA"
-          ],
-          "enumDescriptions": [
-            "Data type is unspecified.",
-            "Allowed for continuous evaluation.",
-            "Video data type.",
-            "Allowed for continuous evaluation.",
-            "Allowed for continuous evaluation."
-          ]
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1LabelImageRequest": {
-      "properties": {
-        "feature": {
-          "enum": [
-            "FEATURE_UNSPECIFIED",
-            "CLASSIFICATION",
-            "BOUNDING_BOX",
-            "ORIENTED_BOUNDING_BOX",
-            "BOUNDING_POLY",
-            "POLYLINE",
-            "SEGMENTATION"
-          ],
-          "enumDescriptions": [
-            "",
-            "Label whole image with one or more of labels.",
-            "Label image with bounding boxes for labels.",
-            "Label oriented bounding box. The box does not have to be parallel to horizontal line.",
-            "Label images with bounding poly. A bounding poly is a plane figure that is bounded by a finite chain of straight line segments closing in a loop.",
-            "Label images with polyline. Polyline is formed by connected line segments which are not in closed form.",
-            "Label images with segmentation. Segmentation is different from bounding poly since it is more fine-grained, pixel level annotation."
-          ],
-          "type": "string",
-          "description": "Required. The type of image labeling task."
+        "GoogleCloudDatalabelingV1alpha1LabelImageBoundingBoxOperationMetadata": {
+            "description": "Details of a LabelImageBoundingBox operation metadata.",
+            "id": "GoogleCloudDatalabelingV1alpha1LabelImageBoundingBoxOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "boundingPolyConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1BoundingPolyConfig",
-          "description": "Configuration for bounding box and bounding poly task. One of image_classification_config, bounding_poly_config, polyline_config and segmentation_config are required."
+        "GoogleCloudDatalabelingV1alpha1LabelImageBoundingPolyOperationMetadata": {
+            "description": "Details of LabelImageBoundingPoly operation metadata.",
+            "id": "GoogleCloudDatalabelingV1alpha1LabelImageBoundingPolyOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "segmentationConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1SegmentationConfig",
-          "description": "Configuration for segmentation task. One of image_classification_config, bounding_poly_config, polyline_config and segmentation_config are required."
+        "GoogleCloudDatalabelingV1alpha1LabelImageClassificationOperationMetadata": {
+            "description": "Metadata of a LabelImageClassification operation.",
+            "id": "GoogleCloudDatalabelingV1alpha1LabelImageClassificationOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "polylineConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1PolylineConfig",
-          "description": "Configuration for polyline task. One of image_classification_config, bounding_poly_config, polyline_config and segmentation_config are required."
+        "GoogleCloudDatalabelingV1alpha1LabelImageOrientedBoundingBoxOperationMetadata": {
+            "description": "Details of a LabelImageOrientedBoundingBox operation metadata.",
+            "id": "GoogleCloudDatalabelingV1alpha1LabelImageOrientedBoundingBoxOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config."
+                }
+            },
+            "type": "object"
         },
-        "imageClassificationConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1ImageClassificationConfig",
-          "description": "Configuration for image classification task. One of image_classification_config, bounding_poly_config, polyline_config and segmentation_config are required."
+        "GoogleCloudDatalabelingV1alpha1LabelImagePolylineOperationMetadata": {
+            "description": "Details of LabelImagePolyline operation metadata.",
+            "id": "GoogleCloudDatalabelingV1alpha1LabelImagePolylineOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
-          "description": "Required. Basic human annotation config."
-        }
-      },
-      "description": "Request message for starting an image labeling task.",
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1beta1LabelImageRequest"
-    },
-    "GoogleCloudDatalabelingV1beta1PolylineConfig": {
-      "type": "object",
-      "description": "Config for image polyline human labeling task.",
-      "id": "GoogleCloudDatalabelingV1beta1PolylineConfig",
-      "properties": {
-        "annotationSpecSet": {
-          "description": "Required. Annotation spec set resource name.",
-          "type": "string"
+        "GoogleCloudDatalabelingV1alpha1LabelImageSegmentationOperationMetadata": {
+            "description": "Details of a LabelImageSegmentation operation metadata.",
+            "id": "GoogleCloudDatalabelingV1alpha1LabelImageSegmentationOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config."
+                }
+            },
+            "type": "object"
         },
-        "instructionMessage": {
-          "description": "Optional. Instruction message showed on contributors UI.",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1p1alpha1ExportDataOperationMetadata": {
-      "type": "object",
-      "properties": {
-        "createTime": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "Output only. Timestamp when export dataset request was created."
+        "GoogleCloudDatalabelingV1alpha1LabelOperationMetadata": {
+            "description": "Metadata of a labeling operation, such as LabelImage or LabelVideo. Next tag: 23",
+            "id": "GoogleCloudDatalabelingV1alpha1LabelOperationMetadata",
+            "properties": {
+                "annotatedDataset": {
+                    "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\".",
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "Output only. Timestamp when labeling request was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "dataset": {
+                    "description": "Output only. The name of dataset to be labeled. \"projects/*/datasets/*\"",
+                    "type": "string"
+                },
+                "imageBoundingBoxDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1LabelImageBoundingBoxOperationMetadata",
+                    "description": "Details of label image bounding box operation."
+                },
+                "imageBoundingPolyDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1LabelImageBoundingPolyOperationMetadata",
+                    "description": "Details of label image bounding poly operation."
+                },
+                "imageClassificationDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1LabelImageClassificationOperationMetadata",
+                    "description": "Details of label image classification operation."
+                },
+                "imageOrientedBoundingBoxDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1LabelImageOrientedBoundingBoxOperationMetadata",
+                    "description": "Details of label image oriented bounding box operation."
+                },
+                "imagePolylineDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1LabelImagePolylineOperationMetadata",
+                    "description": "Details of label image polyline operation."
+                },
+                "imageSegmentationDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1LabelImageSegmentationOperationMetadata",
+                    "description": "Details of label image segmentation operation."
+                },
+                "partialFailures": {
+                    "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
+                    "items": {
+                        "$ref": "GoogleRpcStatus"
+                    },
+                    "type": "array"
+                },
+                "progressPercent": {
+                    "description": "Output only. Progress of label operation. Range: [0, 100].",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "textClassificationDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1LabelTextClassificationOperationMetadata",
+                    "description": "Details of label text classification operation."
+                },
+                "textEntityExtractionDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1LabelTextEntityExtractionOperationMetadata",
+                    "description": "Details of label text entity extraction operation."
+                },
+                "videoClassificationDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1LabelVideoClassificationOperationMetadata",
+                    "description": "Details of label video classification operation."
+                },
+                "videoEventDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1LabelVideoEventOperationMetadata",
+                    "description": "Details of label video event operation."
+                },
+                "videoObjectDetectionDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1LabelVideoObjectDetectionOperationMetadata",
+                    "description": "Details of label video object detection operation."
+                },
+                "videoObjectTrackingDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1LabelVideoObjectTrackingOperationMetadata",
+                    "description": "Details of label video object tracking operation."
+                }
+            },
+            "type": "object"
         },
-        "annotatedDataset": {
-          "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\".",
-          "type": "string"
+        "GoogleCloudDatalabelingV1alpha1LabelStats": {
+            "description": "Statistics about annotation specs.",
+            "id": "GoogleCloudDatalabelingV1alpha1LabelStats",
+            "properties": {
+                "exampleCount": {
+                    "additionalProperties": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "description": "Map of each annotation spec's example count. Key is the annotation spec name and value is the number of examples for that annotation spec. If the annotated dataset does not have annotation spec, the map will return a pair where the key is empty string and value is the total number of annotations.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
         },
-        "partialFailures": {
-          "items": {
-            "$ref": "GoogleRpcStatus"
-          },
-          "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
-          "type": "array"
+        "GoogleCloudDatalabelingV1alpha1LabelTextClassificationOperationMetadata": {
+            "description": "Details of a LabelTextClassification operation metadata.",
+            "id": "GoogleCloudDatalabelingV1alpha1LabelTextClassificationOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "dataset": {
-          "type": "string",
-          "description": "Output only. The name of dataset to be exported. \"projects/*/datasets/*\""
-        }
-      },
-      "description": "Metadata of an ExportData operation.",
-      "id": "GoogleCloudDatalabelingV1p1alpha1ExportDataOperationMetadata"
-    },
-    "GoogleCloudDatalabelingV1p1alpha1GcsFolderDestination": {
-      "id": "GoogleCloudDatalabelingV1p1alpha1GcsFolderDestination",
-      "type": "object",
-      "properties": {
-        "outputFolderUri": {
-          "description": "Required. Cloud Storage directory to export data to.",
-          "type": "string"
-        }
-      },
-      "description": "Export folder destination of the data."
-    },
-    "GoogleCloudDatalabelingV1alpha1LabelImageClassificationOperationMetadata": {
-      "id": "GoogleCloudDatalabelingV1alpha1LabelImageClassificationOperationMetadata",
-      "type": "object",
-      "description": "Metadata of a LabelImageClassification operation.",
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1p2alpha1LabelVideoEventOperationMetadata": {
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1p2alpha1LabelVideoEventOperationMetadata",
-      "description": "Details of a LabelVideoEvent operation metadata.",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1SearchExampleComparisonsRequest": {
-      "id": "GoogleCloudDatalabelingV1beta1SearchExampleComparisonsRequest",
-      "type": "object",
-      "description": "Request message of SearchExampleComparisons.",
-      "properties": {
-        "pageSize": {
-          "type": "integer",
-          "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
-          "format": "int32"
+        "GoogleCloudDatalabelingV1alpha1LabelTextEntityExtractionOperationMetadata": {
+            "description": "Details of a LabelTextEntityExtraction operation metadata.",
+            "id": "GoogleCloudDatalabelingV1alpha1LabelTextEntityExtractionOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "pageToken": {
-          "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by the nextPageToken of the response to a previous search rquest. If you don't specify this field, the API call requests the first page of the search.",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1ExportDataOperationResponse": {
-      "id": "GoogleCloudDatalabelingV1beta1ExportDataOperationResponse",
-      "properties": {
-        "dataset": {
-          "description": "Ouptut only. The name of dataset. \"projects/*/datasets/*\"",
-          "type": "string"
+        "GoogleCloudDatalabelingV1alpha1LabelVideoClassificationOperationMetadata": {
+            "description": "Details of a LabelVideoClassification operation metadata.",
+            "id": "GoogleCloudDatalabelingV1alpha1LabelVideoClassificationOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "annotatedDataset": {
-          "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\".",
-          "type": "string"
+        "GoogleCloudDatalabelingV1alpha1LabelVideoEventOperationMetadata": {
+            "description": "Details of a LabelVideoEvent operation metadata.",
+            "id": "GoogleCloudDatalabelingV1alpha1LabelVideoEventOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "totalCount": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Output only. Total number of examples requested to export"
+        "GoogleCloudDatalabelingV1alpha1LabelVideoObjectDetectionOperationMetadata": {
+            "description": "Details of a LabelVideoObjectDetection operation metadata.",
+            "id": "GoogleCloudDatalabelingV1alpha1LabelVideoObjectDetectionOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "exportCount": {
-          "description": "Output only. Number of examples exported successfully.",
-          "type": "integer",
-          "format": "int32"
+        "GoogleCloudDatalabelingV1alpha1LabelVideoObjectTrackingOperationMetadata": {
+            "description": "Details of a LabelVideoObjectTracking operation metadata.",
+            "id": "GoogleCloudDatalabelingV1alpha1LabelVideoObjectTrackingOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "labelStats": {
-          "description": "Output only. Statistic infos of labels in the exported dataset.",
-          "$ref": "GoogleCloudDatalabelingV1beta1LabelStats"
+        "GoogleCloudDatalabelingV1alpha1OutputConfig": {
+            "description": "The configuration of output data.",
+            "id": "GoogleCloudDatalabelingV1alpha1OutputConfig",
+            "properties": {
+                "gcsDestination": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1GcsDestination",
+                    "description": "Output to a file in Cloud Storage. Should be used for labeling output other than image segmentation."
+                },
+                "gcsFolderDestination": {
+                    "$ref": "GoogleCloudDatalabelingV1alpha1GcsFolderDestination",
+                    "description": "Output to a folder in Cloud Storage. Should be used for image segmentation or document de-identification labeling outputs."
+                }
+            },
+            "type": "object"
         },
-        "outputConfig": {
-          "description": "Output only. output_config in the ExportData request.",
-          "$ref": "GoogleCloudDatalabelingV1beta1OutputConfig"
-        }
-      },
-      "type": "object",
-      "description": "Response used for ExportDataset longrunning operation."
-    },
-    "GoogleCloudDatalabelingV1beta1LabelOperationMetadata": {
-      "properties": {
-        "videoEventDetails": {
-          "$ref": "GoogleCloudDatalabelingV1beta1LabelVideoEventOperationMetadata",
-          "description": "Details of label video event operation."
+        "GoogleCloudDatalabelingV1beta1AnnotatedDataset": {
+            "description": "AnnotatedDataset is a set holding annotations for data in a Dataset. Each labeling task will generate an AnnotatedDataset under the Dataset that the task is requested for.",
+            "id": "GoogleCloudDatalabelingV1beta1AnnotatedDataset",
+            "properties": {
+                "annotationSource": {
+                    "description": "Output only. Source of the annotation.",
+                    "enum": [
+                        "ANNOTATION_SOURCE_UNSPECIFIED",
+                        "OPERATOR"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "Answer is provided by a human contributor."
+                    ],
+                    "type": "string"
+                },
+                "annotationType": {
+                    "description": "Output only. Type of the annotation. It is specified when starting labeling task.",
+                    "enum": [
+                        "ANNOTATION_TYPE_UNSPECIFIED",
+                        "IMAGE_CLASSIFICATION_ANNOTATION",
+                        "IMAGE_BOUNDING_BOX_ANNOTATION",
+                        "IMAGE_ORIENTED_BOUNDING_BOX_ANNOTATION",
+                        "IMAGE_BOUNDING_POLY_ANNOTATION",
+                        "IMAGE_POLYLINE_ANNOTATION",
+                        "IMAGE_SEGMENTATION_ANNOTATION",
+                        "VIDEO_SHOTS_CLASSIFICATION_ANNOTATION",
+                        "VIDEO_OBJECT_TRACKING_ANNOTATION",
+                        "VIDEO_OBJECT_DETECTION_ANNOTATION",
+                        "VIDEO_EVENT_ANNOTATION",
+                        "TEXT_CLASSIFICATION_ANNOTATION",
+                        "TEXT_ENTITY_EXTRACTION_ANNOTATION",
+                        "GENERAL_CLASSIFICATION_ANNOTATION"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "Classification annotations in an image. Allowed for continuous evaluation.",
+                        "Bounding box annotations in an image. A form of image object detection. Allowed for continuous evaluation.",
+                        "Oriented bounding box. The box does not have to be parallel to horizontal line.",
+                        "Bounding poly annotations in an image.",
+                        "Polyline annotations in an image.",
+                        "Segmentation annotations in an image.",
+                        "Classification annotations in video shots.",
+                        "Video object tracking annotation.",
+                        "Video object detection annotation.",
+                        "Video event annotation.",
+                        "Classification for text. Allowed for continuous evaluation.",
+                        "Entity extraction for text.",
+                        "General classification. Allowed for continuous evaluation."
+                    ],
+                    "type": "string"
+                },
+                "blockingResources": {
+                    "description": "Output only. The names of any related resources that are blocking changes to the annotated dataset.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "completedExampleCount": {
+                    "description": "Output only. Number of examples that have annotation in the annotated dataset.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "Output only. Time the AnnotatedDataset was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "description": {
+                    "description": "Output only. The description of the AnnotatedDataset. It is specified in HumanAnnotationConfig when user starts a labeling task. Maximum of 10000 characters.",
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "Output only. The display name of the AnnotatedDataset. It is specified in HumanAnnotationConfig when user starts a labeling task. Maximum of 64 characters.",
+                    "type": "string"
+                },
+                "exampleCount": {
+                    "description": "Output only. Number of examples in the annotated dataset.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "labelStats": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1LabelStats",
+                    "description": "Output only. Per label statistics."
+                },
+                "metadata": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1AnnotatedDatasetMetadata",
+                    "description": "Output only. Additional information about AnnotatedDataset."
+                },
+                "name": {
+                    "description": "Output only. AnnotatedDataset resource name in format of: projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/ {annotated_dataset_id}",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "textEntityExtractionDetails": {
-          "description": "Details of label text entity extraction operation.",
-          "$ref": "GoogleCloudDatalabelingV1beta1LabelTextEntityExtractionOperationMetadata"
+        "GoogleCloudDatalabelingV1beta1AnnotatedDatasetMetadata": {
+            "description": "Metadata on AnnotatedDataset.",
+            "id": "GoogleCloudDatalabelingV1beta1AnnotatedDatasetMetadata",
+            "properties": {
+                "boundingPolyConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1BoundingPolyConfig",
+                    "description": "Configuration for image bounding box and bounding poly task."
+                },
+                "eventConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1EventConfig",
+                    "description": "Configuration for video event labeling task."
+                },
+                "humanAnnotationConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
+                    "description": "HumanAnnotationConfig used when requesting the human labeling task for this AnnotatedDataset."
+                },
+                "imageClassificationConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1ImageClassificationConfig",
+                    "description": "Configuration for image classification task."
+                },
+                "objectDetectionConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1ObjectDetectionConfig",
+                    "description": "Configuration for video object detection task."
+                },
+                "objectTrackingConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1ObjectTrackingConfig",
+                    "description": "Configuration for video object tracking task."
+                },
+                "polylineConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1PolylineConfig",
+                    "description": "Configuration for image polyline task."
+                },
+                "segmentationConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1SegmentationConfig",
+                    "description": "Configuration for image segmentation task."
+                },
+                "textClassificationConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1TextClassificationConfig",
+                    "description": "Configuration for text classification task."
+                },
+                "textEntityExtractionConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1TextEntityExtractionConfig",
+                    "description": "Configuration for text entity extraction task."
+                },
+                "videoClassificationConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1VideoClassificationConfig",
+                    "description": "Configuration for video classification task."
+                }
+            },
+            "type": "object"
         },
-        "imageOrientedBoundingBoxDetails": {
-          "description": "Details of label image oriented bounding box operation.",
-          "$ref": "GoogleCloudDatalabelingV1beta1LabelImageOrientedBoundingBoxOperationMetadata"
+        "GoogleCloudDatalabelingV1beta1Annotation": {
+            "description": "Annotation for Example. Each example may have one or more annotations. For example in image classification problem, each image might have one or more labels. We call labels binded with this image an Annotation.",
+            "id": "GoogleCloudDatalabelingV1beta1Annotation",
+            "properties": {
+                "annotationMetadata": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1AnnotationMetadata",
+                    "description": "Output only. Annotation metadata, including information like votes for labels."
+                },
+                "annotationSentiment": {
+                    "description": "Output only. Sentiment for this annotation.",
+                    "enum": [
+                        "ANNOTATION_SENTIMENT_UNSPECIFIED",
+                        "NEGATIVE",
+                        "POSITIVE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "This annotation describes negatively about the data.",
+                        "This label describes positively about the data."
+                    ],
+                    "type": "string"
+                },
+                "annotationSource": {
+                    "description": "Output only. The source of the annotation.",
+                    "enum": [
+                        "ANNOTATION_SOURCE_UNSPECIFIED",
+                        "OPERATOR"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "Answer is provided by a human contributor."
+                    ],
+                    "type": "string"
+                },
+                "annotationValue": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1AnnotationValue",
+                    "description": "Output only. This is the actual annotation value, e.g classification, bounding box values are stored here."
+                },
+                "name": {
+                    "description": "Output only. Unique name of this annotation, format is: projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset}/examples/{example_id}/annotations/{annotation_id}",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "progressPercent": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Output only. Progress of label operation. Range: [0, 100]."
+        "GoogleCloudDatalabelingV1beta1AnnotationMetadata": {
+            "description": "Additional information associated with the annotation.",
+            "id": "GoogleCloudDatalabelingV1beta1AnnotationMetadata",
+            "properties": {
+                "operatorMetadata": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1OperatorMetadata",
+                    "description": "Metadata related to human labeling."
+                }
+            },
+            "type": "object"
         },
-        "partialFailures": {
-          "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
-          "items": {
-            "$ref": "GoogleRpcStatus"
-          },
-          "type": "array"
+        "GoogleCloudDatalabelingV1beta1AnnotationSpec": {
+            "description": "Container of information related to one possible annotation that can be used in a labeling task. For example, an image classification task where images are labeled as `dog` or `cat` must reference an AnnotationSpec for `dog` and an AnnotationSpec for `cat`.",
+            "id": "GoogleCloudDatalabelingV1beta1AnnotationSpec",
+            "properties": {
+                "description": {
+                    "description": "Optional. User-provided description of the annotation specification. The description can be up to 10,000 characters long.",
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "Required. The display name of the AnnotationSpec. Maximum of 64 characters.",
+                    "type": "string"
+                },
+                "index": {
+                    "description": "Output only. This is the integer index of the AnnotationSpec. The index for the whole AnnotationSpecSet is sequential starting from 0. For example, an AnnotationSpecSet with classes `dog` and `cat`, might contain one AnnotationSpec with `{ display_name: \"dog\", index: 0 }` and one AnnotationSpec with `{ display_name: \"cat\", index: 1 }`. This is especially useful for model training as it encodes the string labels into numeric values.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
         },
-        "dataset": {
-          "type": "string",
-          "description": "Output only. The name of dataset to be labeled. \"projects/*/datasets/*\""
+        "GoogleCloudDatalabelingV1beta1AnnotationSpecSet": {
+            "description": "An AnnotationSpecSet is a collection of label definitions. For example, in image classification tasks, you define a set of possible labels for images as an AnnotationSpecSet. An AnnotationSpecSet is immutable upon creation.",
+            "id": "GoogleCloudDatalabelingV1beta1AnnotationSpecSet",
+            "properties": {
+                "annotationSpecs": {
+                    "description": "Required. The array of AnnotationSpecs that you define when you create the AnnotationSpecSet. These are the possible labels for the labeling task.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec"
+                    },
+                    "type": "array"
+                },
+                "blockingResources": {
+                    "description": "Output only. The names of any related resources that are blocking changes to the annotation spec set.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "description": {
+                    "description": "Optional. User-provided description of the annotation specification set. The description can be up to 10,000 characters long.",
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "Required. The display name for AnnotationSpecSet that you define when you create it. Maximum of 64 characters.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Output only. The AnnotationSpecSet resource name in the following format: \"projects/{project_id}/annotationSpecSets/{annotation_spec_set_id}\"",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "imageClassificationDetails": {
-          "$ref": "GoogleCloudDatalabelingV1beta1LabelImageClassificationOperationMetadata",
-          "description": "Details of label image classification operation."
+        "GoogleCloudDatalabelingV1beta1AnnotationSpecSetConfig": {
+            "description": "Annotation spec set with the setting of allowing multi labels or not.",
+            "id": "GoogleCloudDatalabelingV1beta1AnnotationSpecSetConfig",
+            "properties": {
+                "allowMultiLabel": {
+                    "description": "Optional. If allow_multi_label is true, contributors are able to choose multiple labels from one annotation spec set.",
+                    "type": "boolean"
+                },
+                "annotationSpecSet": {
+                    "description": "Required. Annotation spec set resource name.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "imageBoundingBoxDetails": {
-          "description": "Details of label image bounding box operation.",
-          "$ref": "GoogleCloudDatalabelingV1beta1LabelImageBoundingBoxOperationMetadata"
+        "GoogleCloudDatalabelingV1beta1AnnotationValue": {
+            "description": "Annotation value for an example.",
+            "id": "GoogleCloudDatalabelingV1beta1AnnotationValue",
+            "properties": {
+                "imageBoundingPolyAnnotation": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1ImageBoundingPolyAnnotation",
+                    "description": "Annotation value for image bounding box, oriented bounding box and polygon cases."
+                },
+                "imageClassificationAnnotation": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1ImageClassificationAnnotation",
+                    "description": "Annotation value for image classification case."
+                },
+                "imagePolylineAnnotation": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1ImagePolylineAnnotation",
+                    "description": "Annotation value for image polyline cases. Polyline here is different from BoundingPoly. It is formed by line segments connected to each other but not closed form(Bounding Poly). The line segments can cross each other."
+                },
+                "imageSegmentationAnnotation": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1ImageSegmentationAnnotation",
+                    "description": "Annotation value for image segmentation."
+                },
+                "textClassificationAnnotation": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1TextClassificationAnnotation",
+                    "description": "Annotation value for text classification case."
+                },
+                "textEntityExtractionAnnotation": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1TextEntityExtractionAnnotation",
+                    "description": "Annotation value for text entity extraction case."
+                },
+                "videoClassificationAnnotation": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1VideoClassificationAnnotation",
+                    "description": "Annotation value for video classification case."
+                },
+                "videoEventAnnotation": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1VideoEventAnnotation",
+                    "description": "Annotation value for video event case."
+                },
+                "videoObjectTrackingAnnotation": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1VideoObjectTrackingAnnotation",
+                    "description": "Annotation value for video object detection and tracking case."
+                }
+            },
+            "type": "object"
         },
-        "videoClassificationDetails": {
-          "description": "Details of label video classification operation.",
-          "$ref": "GoogleCloudDatalabelingV1beta1LabelVideoClassificationOperationMetadata"
+        "GoogleCloudDatalabelingV1beta1Attempt": {
+            "description": "Records a failed evaluation job run.",
+            "id": "GoogleCloudDatalabelingV1beta1Attempt",
+            "properties": {
+                "attemptTime": {
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "partialFailures": {
+                    "description": "Details of errors that occurred.",
+                    "items": {
+                        "$ref": "GoogleRpcStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "imagePolylineDetails": {
-          "$ref": "GoogleCloudDatalabelingV1beta1LabelImagePolylineOperationMetadata",
-          "description": "Details of label image polyline operation."
+        "GoogleCloudDatalabelingV1beta1BigQuerySource": {
+            "description": "The BigQuery location for input data. If used in an EvaluationJob, this is where the service saves the prediction input and output sampled from the model version.",
+            "id": "GoogleCloudDatalabelingV1beta1BigQuerySource",
+            "properties": {
+                "inputUri": {
+                    "description": "Required. BigQuery URI to a table, up to 2,000 characters long. If you specify the URI of a table that does not exist, Data Labeling Service creates a table at the URI with the correct schema when you create your EvaluationJob. If you specify the URI of a table that already exists, it must have the [correct schema](/ml-engine/docs/continuous-evaluation/create-job#table-schema). Provide the table URI in the following format: \"bq://{your_project_id}/ {your_dataset_name}/{your_table_name}\" [Learn more](/ml-engine/docs/continuous-evaluation/create-job#table-schema).",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "imageBoundingPolyDetails": {
-          "$ref": "GoogleCloudDatalabelingV1beta1LabelImageBoundingPolyOperationMetadata",
-          "description": "Details of label image bounding poly operation."
+        "GoogleCloudDatalabelingV1beta1BoundingBoxEvaluationOptions": {
+            "description": "Options regarding evaluation between bounding boxes.",
+            "id": "GoogleCloudDatalabelingV1beta1BoundingBoxEvaluationOptions",
+            "properties": {
+                "iouThreshold": {
+                    "description": "Minimum [intersection-over-union (IOU)](/vision/automl/object-detection/docs/evaluate#intersection-over-union) required for 2 bounding boxes to be considered a match. This must be a number between 0 and 1.",
+                    "format": "float",
+                    "type": "number"
+                }
+            },
+            "type": "object"
         },
-        "createTime": {
-          "format": "google-datetime",
-          "description": "Output only. Timestamp when labeling request was created.",
-          "type": "string"
+        "GoogleCloudDatalabelingV1beta1BoundingPoly": {
+            "description": "A bounding polygon in the image.",
+            "id": "GoogleCloudDatalabelingV1beta1BoundingPoly",
+            "properties": {
+                "vertices": {
+                    "description": "The bounding polygon vertices.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1Vertex"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "videoObjectTrackingDetails": {
-          "description": "Details of label video object tracking operation.",
-          "$ref": "GoogleCloudDatalabelingV1beta1LabelVideoObjectTrackingOperationMetadata"
+        "GoogleCloudDatalabelingV1beta1BoundingPolyConfig": {
+            "description": "Config for image bounding poly (and bounding box) human labeling task.",
+            "id": "GoogleCloudDatalabelingV1beta1BoundingPolyConfig",
+            "properties": {
+                "annotationSpecSet": {
+                    "description": "Required. Annotation spec set resource name.",
+                    "type": "string"
+                },
+                "instructionMessage": {
+                    "description": "Optional. Instruction message showed on contributors UI.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "imageSegmentationDetails": {
-          "description": "Details of label image segmentation operation.",
-          "$ref": "GoogleCloudDatalabelingV1beta1LabelImageSegmentationOperationMetadata"
+        "GoogleCloudDatalabelingV1beta1ClassificationMetadata": {
+            "description": "Metadata for classification annotations.",
+            "id": "GoogleCloudDatalabelingV1beta1ClassificationMetadata",
+            "properties": {
+                "isMultiLabel": {
+                    "description": "Whether the classification task is multi-label or not.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
         },
-        "annotatedDataset": {
-          "type": "string",
-          "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\"."
+        "GoogleCloudDatalabelingV1beta1ClassificationMetrics": {
+            "description": "Metrics calculated for a classification model.",
+            "id": "GoogleCloudDatalabelingV1beta1ClassificationMetrics",
+            "properties": {
+                "confusionMatrix": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1ConfusionMatrix",
+                    "description": "Confusion matrix of predicted labels vs. ground truth labels."
+                },
+                "prCurve": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1PrCurve",
+                    "description": "Precision-recall curve based on ground truth labels, predicted labels, and scores for the predicted labels."
+                }
+            },
+            "type": "object"
         },
-        "videoObjectDetectionDetails": {
-          "description": "Details of label video object detection operation.",
-          "$ref": "GoogleCloudDatalabelingV1beta1LabelVideoObjectDetectionOperationMetadata"
+        "GoogleCloudDatalabelingV1beta1ConfidenceMetricsEntry": {
+            "id": "GoogleCloudDatalabelingV1beta1ConfidenceMetricsEntry",
+            "properties": {
+                "confidenceThreshold": {
+                    "description": "Threshold used for this entry. For classification tasks, this is a classification threshold: a predicted label is categorized as positive or negative (in the context of this point on the PR curve) based on whether the label's score meets this threshold. For image object detection (bounding box) tasks, this is the [intersection-over-union (IOU)](/vision/automl/object-detection/docs/evaluate#intersection-over-union) threshold for the context of this point on the PR curve.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "f1Score": {
+                    "description": "Harmonic mean of recall and precision.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "f1ScoreAt1": {
+                    "description": "The harmonic mean of recall_at1 and precision_at1.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "f1ScoreAt5": {
+                    "description": "The harmonic mean of recall_at5 and precision_at5.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "precision": {
+                    "description": "Precision value.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "precisionAt1": {
+                    "description": "Precision value for entries with label that has highest score.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "precisionAt5": {
+                    "description": "Precision value for entries with label that has highest 5 scores.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "recall": {
+                    "description": "Recall value.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "recallAt1": {
+                    "description": "Recall value for entries with label that has highest score.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "recallAt5": {
+                    "description": "Recall value for entries with label that has highest 5 scores.",
+                    "format": "float",
+                    "type": "number"
+                }
+            },
+            "type": "object"
         },
-        "textClassificationDetails": {
-          "description": "Details of label text classification operation.",
-          "$ref": "GoogleCloudDatalabelingV1beta1LabelTextClassificationOperationMetadata"
-        }
-      },
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1beta1LabelOperationMetadata",
-      "description": "Metadata of a labeling operation, such as LabelImage or LabelVideo. Next tag: 23"
-    },
-    "GoogleCloudDatalabelingV1p2alpha1LabelImageOrientedBoundingBoxOperationMetadata": {
-      "id": "GoogleCloudDatalabelingV1p2alpha1LabelImageOrientedBoundingBoxOperationMetadata",
-      "description": "Details of a LabelImageOrientedBoundingBox operation metadata.",
-      "type": "object",
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig",
-          "description": "Basic human annotation config."
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1GcsFolderDestination": {
-      "description": "Export folder destination of the data.",
-      "type": "object",
-      "properties": {
-        "outputFolderUri": {
-          "description": "Required. Cloud Storage directory to export data to.",
-          "type": "string"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1GcsFolderDestination"
-    },
-    "GoogleCloudDatalabelingV1beta1ListExamplesResponse": {
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "A token to retrieve next page of results."
+        "GoogleCloudDatalabelingV1beta1ConfusionMatrix": {
+            "description": "Confusion matrix of the model running the classification. Only applicable when the metrics entry aggregates multiple labels. Not applicable when the entry is for a single label.",
+            "id": "GoogleCloudDatalabelingV1beta1ConfusionMatrix",
+            "properties": {
+                "row": {
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1Row"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "examples": {
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1Example"
-          },
-          "description": "The list of examples to return."
-        }
-      },
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1beta1ListExamplesResponse",
-      "description": "Results of listing Examples in and annotated dataset."
-    },
-    "GoogleLongrunningListOperationsResponse": {
-      "description": "The response message for Operations.ListOperations.",
-      "id": "GoogleLongrunningListOperationsResponse",
-      "properties": {
-        "operations": {
-          "description": "A list of operations that matches the specified filter in the request.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleLongrunningOperation"
-          }
+        "GoogleCloudDatalabelingV1beta1ConfusionMatrixEntry": {
+            "id": "GoogleCloudDatalabelingV1beta1ConfusionMatrixEntry",
+            "properties": {
+                "annotationSpec": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec",
+                    "description": "The annotation spec of a predicted label."
+                },
+                "itemCount": {
+                    "description": "Number of items predicted to have this label. (The ground truth label for these items is the `Row.annotationSpec` of this entry's parent.)",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
         },
-        "nextPageToken": {
-          "type": "string",
-          "description": "The standard List next-page token."
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1TextEntityExtractionAnnotation": {
-      "type": "object",
-      "properties": {
-        "annotationSpec": {
-          "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec",
-          "description": "Label of the text entities."
+        "GoogleCloudDatalabelingV1beta1CreateAnnotationSpecSetRequest": {
+            "description": "Request message for CreateAnnotationSpecSet.",
+            "id": "GoogleCloudDatalabelingV1beta1CreateAnnotationSpecSetRequest",
+            "properties": {
+                "annotationSpecSet": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpecSet",
+                    "description": "Required. Annotation spec set to create. Annotation specs must be included. Only one annotation spec will be accepted for annotation specs with same display_name."
+                }
+            },
+            "type": "object"
         },
-        "sequentialSegment": {
-          "description": "Position of the entity.",
-          "$ref": "GoogleCloudDatalabelingV1beta1SequentialSegment"
-        }
-      },
-      "description": "Text entity extraction annotation.",
-      "id": "GoogleCloudDatalabelingV1beta1TextEntityExtractionAnnotation"
-    },
-    "GoogleCloudDatalabelingV1beta1PrCurve": {
-      "id": "GoogleCloudDatalabelingV1beta1PrCurve",
-      "type": "object",
-      "properties": {
-        "meanAveragePrecision": {
-          "format": "float",
-          "type": "number",
-          "description": "Mean average prcision of this curve."
+        "GoogleCloudDatalabelingV1beta1CreateDatasetRequest": {
+            "description": "Request message for CreateDataset.",
+            "id": "GoogleCloudDatalabelingV1beta1CreateDatasetRequest",
+            "properties": {
+                "dataset": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1Dataset",
+                    "description": "Required. The dataset to be created."
+                }
+            },
+            "type": "object"
         },
-        "annotationSpec": {
-          "description": "The annotation spec of the label for which the precision-recall curve calculated. If this field is empty, that means the precision-recall curve is an aggregate curve for all labels.",
-          "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec"
+        "GoogleCloudDatalabelingV1beta1CreateEvaluationJobRequest": {
+            "description": "Request message for CreateEvaluationJob.",
+            "id": "GoogleCloudDatalabelingV1beta1CreateEvaluationJobRequest",
+            "properties": {
+                "job": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1EvaluationJob",
+                    "description": "Required. The evaluation job to create."
+                }
+            },
+            "type": "object"
         },
-        "confidenceMetricsEntries": {
-          "description": "Entries that make up the precision-recall graph. Each entry is a \"point\" on the graph drawn for a different `confidence_threshold`.",
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1ConfidenceMetricsEntry"
-          },
-          "type": "array"
+        "GoogleCloudDatalabelingV1beta1CreateInstructionMetadata": {
+            "description": "Metadata of a CreateInstruction operation.",
+            "id": "GoogleCloudDatalabelingV1beta1CreateInstructionMetadata",
+            "properties": {
+                "createTime": {
+                    "description": "Timestamp when create instruction request was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "instruction": {
+                    "description": "The name of the created Instruction. projects/{project_id}/instructions/{instruction_id}",
+                    "type": "string"
+                },
+                "partialFailures": {
+                    "description": "Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
+                    "items": {
+                        "$ref": "GoogleRpcStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "areaUnderCurve": {
-          "format": "float",
-          "type": "number",
-          "description": "Area under the precision-recall curve. Not to be confused with area under a receiver operating characteristic (ROC) curve."
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1LabelTextEntityExtractionOperationMetadata": {
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig"
-        }
-      },
-      "description": "Details of a LabelTextEntityExtraction operation metadata.",
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1beta1LabelTextEntityExtractionOperationMetadata"
-    },
-    "GoogleCloudDatalabelingV1beta1LabelVideoRequest": {
-      "id": "GoogleCloudDatalabelingV1beta1LabelVideoRequest",
-      "type": "object",
-      "description": "Request message for LabelVideo.",
-      "properties": {
-        "feature": {
-          "description": "Required. The type of video labeling task.",
-          "enumDescriptions": [
-            "",
-            "Label whole video or video segment with one or more labels.",
-            "Label objects with bounding box on image frames extracted from the video.",
-            "Label and track objects in video.",
-            "Label the range of video for the specified events."
-          ],
-          "type": "string",
-          "enum": [
-            "FEATURE_UNSPECIFIED",
-            "CLASSIFICATION",
-            "OBJECT_DETECTION",
-            "OBJECT_TRACKING",
-            "EVENT"
-          ]
+        "GoogleCloudDatalabelingV1beta1CreateInstructionRequest": {
+            "description": "Request message for CreateInstruction.",
+            "id": "GoogleCloudDatalabelingV1beta1CreateInstructionRequest",
+            "properties": {
+                "instruction": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1Instruction",
+                    "description": "Required. Instruction of how to perform the labeling task."
+                }
+            },
+            "type": "object"
         },
-        "objectDetectionConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1ObjectDetectionConfig",
-          "description": "Configuration for video object detection task. One of video_classification_config, object_detection_config, object_tracking_config and event_config is required."
+        "GoogleCloudDatalabelingV1beta1CsvInstruction": {
+            "description": "Deprecated: this instruction format is not supported any more. Instruction from a CSV file.",
+            "id": "GoogleCloudDatalabelingV1beta1CsvInstruction",
+            "properties": {
+                "gcsFileUri": {
+                    "description": "CSV file for the instruction. Only gcs path is allowed.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "basicConfig": {
-          "description": "Required. Basic human annotation config.",
-          "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig"
+        "GoogleCloudDatalabelingV1beta1DataItem": {
+            "description": "DataItem is a piece of data, without annotation. For example, an image.",
+            "id": "GoogleCloudDatalabelingV1beta1DataItem",
+            "properties": {
+                "imagePayload": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1ImagePayload",
+                    "description": "The image payload, a container of the image bytes/uri."
+                },
+                "name": {
+                    "description": "Output only. Name of the data item, in format of: projects/{project_id}/datasets/{dataset_id}/dataItems/{data_item_id}",
+                    "type": "string"
+                },
+                "textPayload": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1TextPayload",
+                    "description": "The text payload, a container of text content."
+                },
+                "videoPayload": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1VideoPayload",
+                    "description": "The video payload, a container of the video uri."
+                }
+            },
+            "type": "object"
         },
-        "eventConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1EventConfig",
-          "description": "Configuration for video event task. One of video_classification_config, object_detection_config, object_tracking_config and event_config is required."
+        "GoogleCloudDatalabelingV1beta1Dataset": {
+            "description": "Dataset is the resource to hold your data. You can request multiple labeling tasks for a dataset while each one will generate an AnnotatedDataset.",
+            "id": "GoogleCloudDatalabelingV1beta1Dataset",
+            "properties": {
+                "blockingResources": {
+                    "description": "Output only. The names of any related resources that are blocking changes to the dataset.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "createTime": {
+                    "description": "Output only. Time the dataset is created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "dataItemCount": {
+                    "description": "Output only. The number of data items in the dataset.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "description": {
+                    "description": "Optional. User-provided description of the annotation specification set. The description can be up to 10000 characters long.",
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "Required. The display name of the dataset. Maximum of 64 characters.",
+                    "type": "string"
+                },
+                "inputConfigs": {
+                    "description": "Output only. This is populated with the original input configs where ImportData is called. It is available only after the clients import data to this dataset.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1InputConfig"
+                    },
+                    "type": "array"
+                },
+                "lastMigrateTime": {
+                    "description": "Last time that the Dataset is migrated to AI Platform V2. If any of the AnnotatedDataset is migrated, the last_migration_time in Dataset is also updated.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Output only. Dataset resource name, format is: projects/{project_id}/datasets/{dataset_id}",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "videoClassificationConfig": {
-          "description": "Configuration for video classification task. One of video_classification_config, object_detection_config, object_tracking_config and event_config is required.",
-          "$ref": "GoogleCloudDatalabelingV1beta1VideoClassificationConfig"
+        "GoogleCloudDatalabelingV1beta1Evaluation": {
+            "description": "Describes an evaluation between a machine learning model's predictions and ground truth labels. Created when an EvaluationJob runs successfully.",
+            "id": "GoogleCloudDatalabelingV1beta1Evaluation",
+            "properties": {
+                "annotationType": {
+                    "description": "Output only. Type of task that the model version being evaluated performs, as defined in the evaluationJobConfig.inputConfig.annotationType field of the evaluation job that created this evaluation.",
+                    "enum": [
+                        "ANNOTATION_TYPE_UNSPECIFIED",
+                        "IMAGE_CLASSIFICATION_ANNOTATION",
+                        "IMAGE_BOUNDING_BOX_ANNOTATION",
+                        "IMAGE_ORIENTED_BOUNDING_BOX_ANNOTATION",
+                        "IMAGE_BOUNDING_POLY_ANNOTATION",
+                        "IMAGE_POLYLINE_ANNOTATION",
+                        "IMAGE_SEGMENTATION_ANNOTATION",
+                        "VIDEO_SHOTS_CLASSIFICATION_ANNOTATION",
+                        "VIDEO_OBJECT_TRACKING_ANNOTATION",
+                        "VIDEO_OBJECT_DETECTION_ANNOTATION",
+                        "VIDEO_EVENT_ANNOTATION",
+                        "TEXT_CLASSIFICATION_ANNOTATION",
+                        "TEXT_ENTITY_EXTRACTION_ANNOTATION",
+                        "GENERAL_CLASSIFICATION_ANNOTATION"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "Classification annotations in an image. Allowed for continuous evaluation.",
+                        "Bounding box annotations in an image. A form of image object detection. Allowed for continuous evaluation.",
+                        "Oriented bounding box. The box does not have to be parallel to horizontal line.",
+                        "Bounding poly annotations in an image.",
+                        "Polyline annotations in an image.",
+                        "Segmentation annotations in an image.",
+                        "Classification annotations in video shots.",
+                        "Video object tracking annotation.",
+                        "Video object detection annotation.",
+                        "Video event annotation.",
+                        "Classification for text. Allowed for continuous evaluation.",
+                        "Entity extraction for text.",
+                        "General classification. Allowed for continuous evaluation."
+                    ],
+                    "type": "string"
+                },
+                "config": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1EvaluationConfig",
+                    "description": "Output only. Options used in the evaluation job that created this evaluation."
+                },
+                "createTime": {
+                    "description": "Output only. Timestamp for when this evaluation was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "evaluatedItemCount": {
+                    "description": "Output only. The number of items in the ground truth dataset that were used for this evaluation. Only populated when the evaulation is for certain AnnotationTypes.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "evaluationJobRunTime": {
+                    "description": "Output only. Timestamp for when the evaluation job that created this evaluation ran.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "evaluationMetrics": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1EvaluationMetrics",
+                    "description": "Output only. Metrics comparing predictions to ground truth labels."
+                },
+                "name": {
+                    "description": "Output only. Resource name of an evaluation. The name has the following format: \"projects/{project_id}/datasets/{dataset_id}/evaluations/ {evaluation_id}'",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "objectTrackingConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1ObjectTrackingConfig",
-          "description": "Configuration for video object tracking task. One of video_classification_config, object_detection_config, object_tracking_config and event_config is required."
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1EvaluationJobConfig": {
-      "description": "Configures specific details of how a continuous evaluation job works. Provide this configuration when you create an EvaluationJob.",
-      "type": "object",
-      "properties": {
-        "evaluationConfig": {
-          "description": "Required. Details for calculating evaluation metrics and creating Evaulations. If your model version performs image object detection, you must specify the `boundingBoxEvaluationOptions` field within this configuration. Otherwise, provide an empty object for this configuration.",
-          "$ref": "GoogleCloudDatalabelingV1beta1EvaluationConfig"
+        "GoogleCloudDatalabelingV1beta1EvaluationConfig": {
+            "description": "Configuration details used for calculating evaluation metrics and creating an Evaluation.",
+            "id": "GoogleCloudDatalabelingV1beta1EvaluationConfig",
+            "properties": {
+                "boundingBoxEvaluationOptions": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1BoundingBoxEvaluationOptions",
+                    "description": "Only specify this field if the related model performs image object detection (`IMAGE_BOUNDING_BOX_ANNOTATION`). Describes how to evaluate bounding boxes."
+                }
+            },
+            "type": "object"
         },
-        "bigqueryImportKeys": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Required. Prediction keys that tell Data Labeling Service where to find the data for evaluation in your BigQuery table. When the service samples prediction input and output from your model version and saves it to BigQuery, the data gets stored as JSON strings in the BigQuery table. These keys tell Data Labeling Service how to parse the JSON. You can provide the following entries in this field: * `data_json_key`: the data key for prediction input. You must provide either this key or `reference_json_key`. * `reference_json_key`: the data reference key for prediction input. You must provide either this key or `data_json_key`. * `label_json_key`: the label key for prediction output. Required. * `label_score_json_key`: the score key for prediction output. Required. * `bounding_box_json_key`: the bounding box key for prediction output. Required if your model version perform image object detection. Learn [how to configure prediction keys](/ml-engine/docs/continuous-evaluation/create-job#prediction-keys).",
-          "type": "object"
+        "GoogleCloudDatalabelingV1beta1EvaluationJob": {
+            "description": "Defines an evaluation job that runs periodically to generate Evaluations. [Creating an evaluation job](/ml-engine/docs/continuous-evaluation/create-job) is the starting point for using continuous evaluation.",
+            "id": "GoogleCloudDatalabelingV1beta1EvaluationJob",
+            "properties": {
+                "annotationSpecSet": {
+                    "description": "Required. Name of the AnnotationSpecSet describing all the labels that your machine learning model outputs. You must create this resource before you create an evaluation job and provide its name in the following format: \"projects/{project_id}/annotationSpecSets/{annotation_spec_set_id}\"",
+                    "type": "string"
+                },
+                "attempts": {
+                    "description": "Output only. Every time the evaluation job runs and an error occurs, the failed attempt is appended to this array.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1Attempt"
+                    },
+                    "type": "array"
+                },
+                "createTime": {
+                    "description": "Output only. Timestamp of when this evaluation job was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "description": {
+                    "description": "Required. Description of the job. The description can be up to 25,000 characters long.",
+                    "type": "string"
+                },
+                "evaluationJobConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1EvaluationJobConfig",
+                    "description": "Required. Configuration details for the evaluation job."
+                },
+                "labelMissingGroundTruth": {
+                    "description": "Required. Whether you want Data Labeling Service to provide ground truth labels for prediction input. If you want the service to assign human labelers to annotate your data, set this to `true`. If you want to provide your own ground truth labels in the evaluation job's BigQuery table, set this to `false`.",
+                    "type": "boolean"
+                },
+                "modelVersion": {
+                    "description": "Required. The [AI Platform Prediction model version](/ml-engine/docs/prediction-overview) to be evaluated. Prediction input and output is sampled from this model version. When creating an evaluation job, specify the model version in the following format: \"projects/{project_id}/models/{model_name}/versions/{version_name}\" There can only be one evaluation job per model version.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Output only. After you create a job, Data Labeling Service assigns a name to the job with the following format: \"projects/{project_id}/evaluationJobs/ {evaluation_job_id}\"",
+                    "type": "string"
+                },
+                "schedule": {
+                    "description": "Required. Describes the interval at which the job runs. This interval must be at least 1 day, and it is rounded to the nearest day. For example, if you specify a 50-hour interval, the job runs every 2 days. You can provide the schedule in [crontab format](/scheduler/docs/configuring/cron-job-schedules) or in an [English-like format](/appengine/docs/standard/python/config/cronref#schedule_format). Regardless of what you specify, the job will run at 10:00 AM UTC. Only the interval from this schedule is used, not the specific time of day.",
+                    "type": "string"
+                },
+                "state": {
+                    "description": "Output only. Describes the current state of the job.",
+                    "enum": [
+                        "STATE_UNSPECIFIED",
+                        "SCHEDULED",
+                        "RUNNING",
+                        "PAUSED",
+                        "STOPPED"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "The job is scheduled to run at the configured interval. You can pause or delete the job. When the job is in this state, it samples prediction input and output from your model version into your BigQuery table as predictions occur.",
+                        "The job is currently running. When the job runs, Data Labeling Service does several things: 1. If you have configured your job to use Data Labeling Service for ground truth labeling, the service creates a Dataset and a labeling task for all data sampled since the last time the job ran. Human labelers provide ground truth labels for your data. Human labeling may take hours, or even days, depending on how much data has been sampled. The job remains in the `RUNNING` state during this time, and it can even be running multiple times in parallel if it gets triggered again (for example 24 hours later) before the earlier run has completed. When human labelers have finished labeling the data, the next step occurs. If you have configured your job to provide your own ground truth labels, Data Labeling Service still creates a Dataset for newly sampled data, but it expects that you have already added ground truth labels to the BigQuery table by this time. The next step occurs immediately. 2. Data Labeling Service creates an Evaluation by comparing your model version's predictions with the ground truth labels. If the job remains in this state for a long time, it continues to sample prediction data into your BigQuery table and will run again at the next interval, even if it causes the job to run multiple times in parallel.",
+                        "The job is not sampling prediction input and output into your BigQuery table and it will not run according to its schedule. You can resume the job.",
+                        "The job has this state right before it is deleted."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "inputConfig": {
-          "description": "Rquired. Details for the sampled prediction input. Within this configuration, there are requirements for several fields: * `dataType` must be one of `IMAGE`, `TEXT`, or `GENERAL_DATA`. * `annotationType` must be one of `IMAGE_CLASSIFICATION_ANNOTATION`, `TEXT_CLASSIFICATION_ANNOTATION`, `GENERAL_CLASSIFICATION_ANNOTATION`, or `IMAGE_BOUNDING_BOX_ANNOTATION` (image object detection). * If your machine learning model performs classification, you must specify `classificationMetadata.isMultiLabel`. * You must specify `bigquerySource` (not `gcsSource`).",
-          "$ref": "GoogleCloudDatalabelingV1beta1InputConfig"
+        "GoogleCloudDatalabelingV1beta1EvaluationJobAlertConfig": {
+            "description": "Provides details for how an evaluation job sends email alerts based on the results of a run.",
+            "id": "GoogleCloudDatalabelingV1beta1EvaluationJobAlertConfig",
+            "properties": {
+                "email": {
+                    "description": "Required. An email address to send alerts to.",
+                    "type": "string"
+                },
+                "minAcceptableMeanAveragePrecision": {
+                    "description": "Required. A number between 0 and 1 that describes a minimum mean average precision threshold. When the evaluation job runs, if it calculates that your model version's predictions from the recent interval have meanAveragePrecision below this threshold, then it sends an alert to your specified email.",
+                    "format": "double",
+                    "type": "number"
+                }
+            },
+            "type": "object"
         },
-        "boundingPolyConfig": {
-          "description": "Specify this field if your model version performs image object detection (bounding box detection). `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet.",
-          "$ref": "GoogleCloudDatalabelingV1beta1BoundingPolyConfig"
+        "GoogleCloudDatalabelingV1beta1EvaluationJobConfig": {
+            "description": "Configures specific details of how a continuous evaluation job works. Provide this configuration when you create an EvaluationJob.",
+            "id": "GoogleCloudDatalabelingV1beta1EvaluationJobConfig",
+            "properties": {
+                "bigqueryImportKeys": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Required. Prediction keys that tell Data Labeling Service where to find the data for evaluation in your BigQuery table. When the service samples prediction input and output from your model version and saves it to BigQuery, the data gets stored as JSON strings in the BigQuery table. These keys tell Data Labeling Service how to parse the JSON. You can provide the following entries in this field: * `data_json_key`: the data key for prediction input. You must provide either this key or `reference_json_key`. * `reference_json_key`: the data reference key for prediction input. You must provide either this key or `data_json_key`. * `label_json_key`: the label key for prediction output. Required. * `label_score_json_key`: the score key for prediction output. Required. * `bounding_box_json_key`: the bounding box key for prediction output. Required if your model version perform image object detection. Learn [how to configure prediction keys](/ml-engine/docs/continuous-evaluation/create-job#prediction-keys).",
+                    "type": "object"
+                },
+                "boundingPolyConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1BoundingPolyConfig",
+                    "description": "Specify this field if your model version performs image object detection (bounding box detection). `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet."
+                },
+                "evaluationConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1EvaluationConfig",
+                    "description": "Required. Details for calculating evaluation metrics and creating Evaulations. If your model version performs image object detection, you must specify the `boundingBoxEvaluationOptions` field within this configuration. Otherwise, provide an empty object for this configuration."
+                },
+                "evaluationJobAlertConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1EvaluationJobAlertConfig",
+                    "description": "Optional. Configuration details for evaluation job alerts. Specify this field if you want to receive email alerts if the evaluation job finds that your predictions have low mean average precision during a run."
+                },
+                "exampleCount": {
+                    "description": "Required. The maximum number of predictions to sample and save to BigQuery during each evaluation interval. This limit overrides `example_sample_percentage`: even if the service has not sampled enough predictions to fulfill `example_sample_perecentage` during an interval, it stops sampling predictions when it meets this limit.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "exampleSamplePercentage": {
+                    "description": "Required. Fraction of predictions to sample and save to BigQuery during each evaluation interval. For example, 0.1 means 10% of predictions served by your model version get saved to BigQuery.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "humanAnnotationConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
+                    "description": "Optional. Details for human annotation of your data. If you set labelMissingGroundTruth to `true` for this evaluation job, then you must specify this field. If you plan to provide your own ground truth labels, then omit this field. Note that you must create an Instruction resource before you can specify this field. Provide the name of the instruction resource in the `instruction` field within this configuration."
+                },
+                "imageClassificationConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1ImageClassificationConfig",
+                    "description": "Specify this field if your model version performs image classification or general classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config."
+                },
+                "inputConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1InputConfig",
+                    "description": "Rquired. Details for the sampled prediction input. Within this configuration, there are requirements for several fields: * `dataType` must be one of `IMAGE`, `TEXT`, or `GENERAL_DATA`. * `annotationType` must be one of `IMAGE_CLASSIFICATION_ANNOTATION`, `TEXT_CLASSIFICATION_ANNOTATION`, `GENERAL_CLASSIFICATION_ANNOTATION`, or `IMAGE_BOUNDING_BOX_ANNOTATION` (image object detection). * If your machine learning model performs classification, you must specify `classificationMetadata.isMultiLabel`. * You must specify `bigquerySource` (not `gcsSource`)."
+                },
+                "textClassificationConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1TextClassificationConfig",
+                    "description": "Specify this field if your model version performs text classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config."
+                }
+            },
+            "type": "object"
         },
-        "imageClassificationConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1ImageClassificationConfig",
-          "description": "Specify this field if your model version performs image classification or general classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config."
+        "GoogleCloudDatalabelingV1beta1EvaluationMetrics": {
+            "id": "GoogleCloudDatalabelingV1beta1EvaluationMetrics",
+            "properties": {
+                "classificationMetrics": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1ClassificationMetrics"
+                },
+                "objectDetectionMetrics": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1ObjectDetectionMetrics"
+                }
+            },
+            "type": "object"
         },
-        "textClassificationConfig": {
-          "description": "Specify this field if your model version performs text classification. `annotationSpecSet` in this configuration must match EvaluationJob.annotationSpecSet. `allowMultiLabel` in this configuration must match `classificationMetadata.isMultiLabel` in input_config.",
-          "$ref": "GoogleCloudDatalabelingV1beta1TextClassificationConfig"
+        "GoogleCloudDatalabelingV1beta1EventConfig": {
+            "description": "Config for video event human labeling task.",
+            "id": "GoogleCloudDatalabelingV1beta1EventConfig",
+            "properties": {
+                "annotationSpecSets": {
+                    "description": "Required. The list of annotation spec set resource name. Similar to video classification, we support selecting event from multiple AnnotationSpecSet at the same time.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "clipLength": {
+                    "description": "Videos will be cut to smaller clips to make it easier for labelers to work on. Users can configure is field in seconds, if not set, default value is 60s.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "overlapLength": {
+                    "description": "The overlap length between different video clips. Users can configure is field in seconds, if not set, default value is 1s.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
         },
-        "exampleSamplePercentage": {
-          "type": "number",
-          "description": "Required. Fraction of predictions to sample and save to BigQuery during each evaluation interval. For example, 0.1 means 10% of predictions served by your model version get saved to BigQuery.",
-          "format": "double"
+        "GoogleCloudDatalabelingV1beta1Example": {
+            "description": "An Example is a piece of data and its annotation. For example, an image with label \"house\".",
+            "id": "GoogleCloudDatalabelingV1beta1Example",
+            "properties": {
+                "annotations": {
+                    "description": "Output only. Annotations for the piece of data in Example. One piece of data can have multiple annotations.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1Annotation"
+                    },
+                    "type": "array"
+                },
+                "imagePayload": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1ImagePayload",
+                    "description": "The image payload, a container of the image bytes/uri."
+                },
+                "name": {
+                    "description": "Output only. Name of the example, in format of: projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/ {annotated_dataset_id}/examples/{example_id}",
+                    "type": "string"
+                },
+                "textPayload": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1TextPayload",
+                    "description": "The text payload, a container of the text content."
+                },
+                "videoPayload": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1VideoPayload",
+                    "description": "The video payload, a container of the video uri."
+                }
+            },
+            "type": "object"
         },
-        "evaluationJobAlertConfig": {
-          "description": "Optional. Configuration details for evaluation job alerts. Specify this field if you want to receive email alerts if the evaluation job finds that your predictions have low mean average precision during a run.",
-          "$ref": "GoogleCloudDatalabelingV1beta1EvaluationJobAlertConfig"
+        "GoogleCloudDatalabelingV1beta1ExampleComparison": {
+            "description": "Example comparisons comparing ground truth output and predictions for a specific input.",
+            "id": "GoogleCloudDatalabelingV1beta1ExampleComparison",
+            "properties": {
+                "groundTruthExample": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1Example",
+                    "description": "The ground truth output for the input."
+                },
+                "modelCreatedExamples": {
+                    "description": "Predictions by the model for the input.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1Example"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "exampleCount": {
-          "description": "Required. The maximum number of predictions to sample and save to BigQuery during each evaluation interval. This limit overrides `example_sample_percentage`: even if the service has not sampled enough predictions to fulfill `example_sample_perecentage` during an interval, it stops sampling predictions when it meets this limit.",
-          "format": "int32",
-          "type": "integer"
+        "GoogleCloudDatalabelingV1beta1ExportDataOperationMetadata": {
+            "description": "Metadata of an ExportData operation.",
+            "id": "GoogleCloudDatalabelingV1beta1ExportDataOperationMetadata",
+            "properties": {
+                "annotatedDataset": {
+                    "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\".",
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "Output only. Timestamp when export dataset request was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "dataset": {
+                    "description": "Output only. The name of dataset to be exported. \"projects/*/datasets/*\"",
+                    "type": "string"
+                },
+                "partialFailures": {
+                    "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
+                    "items": {
+                        "$ref": "GoogleRpcStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "humanAnnotationConfig": {
-          "description": "Optional. Details for human annotation of your data. If you set labelMissingGroundTruth to `true` for this evaluation job, then you must specify this field. If you plan to provide your own ground truth labels, then omit this field. Note that you must create an Instruction resource before you can specify this field. Provide the name of the instruction resource in the `instruction` field within this configuration.",
-          "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1EvaluationJobConfig"
-    },
-    "GoogleCloudDatalabelingV1beta1Annotation": {
-      "id": "GoogleCloudDatalabelingV1beta1Annotation",
-      "type": "object",
-      "description": "Annotation for Example. Each example may have one or more annotations. For example in image classification problem, each image might have one or more labels. We call labels binded with this image an Annotation.",
-      "properties": {
-        "name": {
-          "description": "Output only. Unique name of this annotation, format is: projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset}/examples/{example_id}/annotations/{annotation_id}",
-          "type": "string"
+        "GoogleCloudDatalabelingV1beta1ExportDataOperationResponse": {
+            "description": "Response used for ExportDataset longrunning operation.",
+            "id": "GoogleCloudDatalabelingV1beta1ExportDataOperationResponse",
+            "properties": {
+                "annotatedDataset": {
+                    "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\".",
+                    "type": "string"
+                },
+                "dataset": {
+                    "description": "Ouptut only. The name of dataset. \"projects/*/datasets/*\"",
+                    "type": "string"
+                },
+                "exportCount": {
+                    "description": "Output only. Number of examples exported successfully.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "labelStats": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1LabelStats",
+                    "description": "Output only. Statistic infos of labels in the exported dataset."
+                },
+                "outputConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1OutputConfig",
+                    "description": "Output only. output_config in the ExportData request."
+                },
+                "totalCount": {
+                    "description": "Output only. Total number of examples requested to export",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
         },
-        "annotationValue": {
-          "description": "Output only. This is the actual annotation value, e.g classification, bounding box values are stored here.",
-          "$ref": "GoogleCloudDatalabelingV1beta1AnnotationValue"
+        "GoogleCloudDatalabelingV1beta1ExportDataRequest": {
+            "description": "Request message for ExportData API.",
+            "id": "GoogleCloudDatalabelingV1beta1ExportDataRequest",
+            "properties": {
+                "annotatedDataset": {
+                    "description": "Required. Annotated dataset resource name. DataItem in Dataset and their annotations in specified annotated dataset will be exported. It's in format of projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/ {annotated_dataset_id}",
+                    "type": "string"
+                },
+                "filter": {
+                    "description": "Optional. Filter is not supported at this moment.",
+                    "type": "string"
+                },
+                "outputConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1OutputConfig",
+                    "description": "Required. Specify the output destination."
+                },
+                "userEmailAddress": {
+                    "description": "Email of the user who started the export task and should be notified by email. If empty no notification will be sent.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "annotationSource": {
-          "enumDescriptions": [
-            "",
-            "Answer is provided by a human contributor."
-          ],
-          "type": "string",
-          "description": "Output only. The source of the annotation.",
-          "enum": [
-            "ANNOTATION_SOURCE_UNSPECIFIED",
-            "OPERATOR"
-          ]
+        "GoogleCloudDatalabelingV1beta1FeedbackMessage": {
+            "description": "A feedback message inside a feedback thread.",
+            "id": "GoogleCloudDatalabelingV1beta1FeedbackMessage",
+            "properties": {
+                "body": {
+                    "description": "String content of the feedback. Maximum of 10000 characters.",
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "Create time.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "image": {
+                    "description": "The image storing this feedback if the feedback is an image representing operator's comments.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of the feedback message in a feedback thread. Format: 'project/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset_id}/feedbackThreads/{feedback_thread_id}/feedbackMessage/{feedback_message_id}'",
+                    "type": "string"
+                },
+                "operatorFeedbackMetadata": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1OperatorFeedbackMetadata"
+                },
+                "requesterFeedbackMetadata": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1RequesterFeedbackMetadata"
+                }
+            },
+            "type": "object"
         },
-        "annotationMetadata": {
-          "$ref": "GoogleCloudDatalabelingV1beta1AnnotationMetadata",
-          "description": "Output only. Annotation metadata, including information like votes for labels."
+        "GoogleCloudDatalabelingV1beta1FeedbackThread": {
+            "description": "A feedback thread of a certain labeling task on a certain annotated dataset.",
+            "id": "GoogleCloudDatalabelingV1beta1FeedbackThread",
+            "properties": {
+                "feedbackThreadMetadata": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1FeedbackThreadMetadata",
+                    "description": "Metadata regarding the feedback thread."
+                },
+                "name": {
+                    "description": "Name of the feedback thread. Format: 'project/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset_id}/feedbackThreads/{feedback_thread_id}'",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "annotationSentiment": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "This annotation describes negatively about the data.",
-            "This label describes positively about the data."
-          ],
-          "description": "Output only. Sentiment for this annotation.",
-          "enum": [
-            "ANNOTATION_SENTIMENT_UNSPECIFIED",
-            "NEGATIVE",
-            "POSITIVE"
-          ]
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1ImagePayload": {
-      "type": "object",
-      "description": "Container of information about an image.",
-      "id": "GoogleCloudDatalabelingV1beta1ImagePayload",
-      "properties": {
-        "signedUri": {
-          "description": "Signed uri of the image file in the service bucket.",
-          "type": "string"
+        "GoogleCloudDatalabelingV1beta1FeedbackThreadMetadata": {
+            "id": "GoogleCloudDatalabelingV1beta1FeedbackThreadMetadata",
+            "properties": {
+                "createTime": {
+                    "description": "When the thread is created",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "lastUpdateTime": {
+                    "description": "When the thread is last updated.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "status": {
+                    "enum": [
+                        "FEEDBACK_THREAD_STATUS_UNSPECIFIED",
+                        "NEW",
+                        "REPLIED"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "Feedback thread is created with no reply;",
+                        "Feedback thread is replied at least once;"
+                    ],
+                    "type": "string"
+                },
+                "thumbnail": {
+                    "description": "An image thumbnail of this thread.",
+                    "format": "byte",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "imageThumbnail": {
-          "description": "A byte string of a thumbnail image.",
-          "format": "byte",
-          "type": "string"
+        "GoogleCloudDatalabelingV1beta1GcsDestination": {
+            "description": "Export destination of the data.Only gcs path is allowed in output_uri.",
+            "id": "GoogleCloudDatalabelingV1beta1GcsDestination",
+            "properties": {
+                "mimeType": {
+                    "description": "Required. The format of the gcs destination. Only \"text/csv\" and \"application/json\" are supported.",
+                    "type": "string"
+                },
+                "outputUri": {
+                    "description": "Required. The output uri of destination file.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "imageUri": {
-          "description": "Image uri from the user bucket.",
-          "type": "string"
+        "GoogleCloudDatalabelingV1beta1GcsFolderDestination": {
+            "description": "Export folder destination of the data.",
+            "id": "GoogleCloudDatalabelingV1beta1GcsFolderDestination",
+            "properties": {
+                "outputFolderUri": {
+                    "description": "Required. Cloud Storage directory to export data to.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "mimeType": {
-          "description": "Image format.",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1VideoObjectTrackingAnnotation": {
-      "description": "Video object tracking annotation.",
-      "id": "GoogleCloudDatalabelingV1beta1VideoObjectTrackingAnnotation",
-      "properties": {
-        "timeSegment": {
-          "description": "The time segment of the video to which object tracking applies.",
-          "$ref": "GoogleCloudDatalabelingV1beta1TimeSegment"
+        "GoogleCloudDatalabelingV1beta1GcsSource": {
+            "description": "Source of the Cloud Storage file to be imported.",
+            "id": "GoogleCloudDatalabelingV1beta1GcsSource",
+            "properties": {
+                "inputUri": {
+                    "description": "Required. The input URI of source file. This must be a Cloud Storage path (`gs://...`).",
+                    "type": "string"
+                },
+                "mimeType": {
+                    "description": "Required. The format of the source file. Only \"text/csv\" is supported.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "annotationSpec": {
-          "description": "Label of the object tracked in this annotation.",
-          "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec"
+        "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig": {
+            "description": "Configuration for how human labeling task should be done.",
+            "id": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
+            "properties": {
+                "annotatedDatasetDescription": {
+                    "description": "Optional. A human-readable description for AnnotatedDataset. The description can be up to 10000 characters long.",
+                    "type": "string"
+                },
+                "annotatedDatasetDisplayName": {
+                    "description": "Required. A human-readable name for AnnotatedDataset defined by users. Maximum of 64 characters .",
+                    "type": "string"
+                },
+                "contributorEmails": {
+                    "description": "Optional. If you want your own labeling contributors to manage and work on this labeling request, you can set these contributors here. We will give them access to the question types in crowdcompute. Note that these emails must be registered in crowdcompute worker UI: https://crowd-compute.appspot.com/",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "instruction": {
+                    "description": "Required. Instruction resource name.",
+                    "type": "string"
+                },
+                "labelGroup": {
+                    "description": "Optional. A human-readable label used to logically group labeling tasks. This string must match the regular expression `[a-zA-Z\\\\d_-]{0,128}`.",
+                    "type": "string"
+                },
+                "languageCode": {
+                    "description": "Optional. The Language of this question, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US. Only need to set this when task is language related. For example, French text classification.",
+                    "type": "string"
+                },
+                "questionDuration": {
+                    "description": "Optional. Maximum duration for contributors to answer a question. Maximum is 3600 seconds. Default is 3600 seconds.",
+                    "format": "google-duration",
+                    "type": "string"
+                },
+                "replicaCount": {
+                    "description": "Optional. Replication of questions. Each question will be sent to up to this number of contributors to label. Aggregated answers will be returned. Default is set to 1. For image related labeling, valid values are 1, 3, 5.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "userEmailAddress": {
+                    "description": "Email of the user who started the labeling task and should be notified by email. If empty no notification will be sent.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "objectTrackingFrames": {
-          "type": "array",
-          "description": "The list of frames where this object track appears.",
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1ObjectTrackingFrame"
-          }
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1p1alpha1LabelVideoObjectDetectionOperationMetadata": {
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig",
-          "description": "Basic human annotation config used in labeling request."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1p1alpha1LabelVideoObjectDetectionOperationMetadata",
-      "type": "object",
-      "description": "Details of a LabelVideoObjectDetection operation metadata."
-    },
-    "GoogleCloudDatalabelingV1beta1ExampleComparison": {
-      "type": "object",
-      "properties": {
-        "modelCreatedExamples": {
-          "description": "Predictions by the model for the input.",
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1Example"
-          },
-          "type": "array"
+        "GoogleCloudDatalabelingV1beta1ImageBoundingPolyAnnotation": {
+            "description": "Image bounding poly annotation. It represents a polygon including bounding box in the image.",
+            "id": "GoogleCloudDatalabelingV1beta1ImageBoundingPolyAnnotation",
+            "properties": {
+                "annotationSpec": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec",
+                    "description": "Label of object in this bounding polygon."
+                },
+                "boundingPoly": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1BoundingPoly"
+                },
+                "normalizedBoundingPoly": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1NormalizedBoundingPoly"
+                }
+            },
+            "type": "object"
         },
-        "groundTruthExample": {
-          "description": "The ground truth output for the input.",
-          "$ref": "GoogleCloudDatalabelingV1beta1Example"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1ExampleComparison",
-      "description": "Example comparisons comparing ground truth output and predictions for a specific input."
-    },
-    "GoogleCloudDatalabelingV1beta1CreateDatasetRequest": {
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1beta1CreateDatasetRequest",
-      "properties": {
-        "dataset": {
-          "$ref": "GoogleCloudDatalabelingV1beta1Dataset",
-          "description": "Required. The dataset to be created."
-        }
-      },
-      "description": "Request message for CreateDataset."
-    },
-    "GoogleCloudDatalabelingV1beta1ListDataItemsResponse": {
-      "properties": {
-        "dataItems": {
-          "description": "The list of data items to return.",
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1DataItem"
-          },
-          "type": "array"
+        "GoogleCloudDatalabelingV1beta1ImageClassificationAnnotation": {
+            "description": "Image classification annotation definition.",
+            "id": "GoogleCloudDatalabelingV1beta1ImageClassificationAnnotation",
+            "properties": {
+                "annotationSpec": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec",
+                    "description": "Label of image."
+                }
+            },
+            "type": "object"
         },
-        "nextPageToken": {
-          "type": "string",
-          "description": "A token to retrieve next page of results."
-        }
-      },
-      "type": "object",
-      "description": "Results of listing data items in a dataset.",
-      "id": "GoogleCloudDatalabelingV1beta1ListDataItemsResponse"
-    },
-    "GoogleCloudDatalabelingV1p1alpha1OutputConfig": {
-      "properties": {
-        "gcsFolderDestination": {
-          "description": "Output to a folder in Cloud Storage. Should be used for image segmentation or document de-identification labeling outputs.",
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1GcsFolderDestination"
+        "GoogleCloudDatalabelingV1beta1ImageClassificationConfig": {
+            "description": "Config for image classification human labeling task.",
+            "id": "GoogleCloudDatalabelingV1beta1ImageClassificationConfig",
+            "properties": {
+                "allowMultiLabel": {
+                    "description": "Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one image.",
+                    "type": "boolean"
+                },
+                "annotationSpecSet": {
+                    "description": "Required. Annotation spec set resource name.",
+                    "type": "string"
+                },
+                "answerAggregationType": {
+                    "description": "Optional. The type of how to aggregate answers.",
+                    "enum": [
+                        "STRING_AGGREGATION_TYPE_UNSPECIFIED",
+                        "MAJORITY_VOTE",
+                        "UNANIMOUS_VOTE",
+                        "NO_AGGREGATION"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "Majority vote to aggregate answers.",
+                        "Unanimous answers will be adopted.",
+                        "Preserve all answers by crowd compute."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "gcsDestination": {
-          "description": "Output to a file in Cloud Storage. Should be used for labeling output other than image segmentation.",
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1GcsDestination"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1p1alpha1OutputConfig",
-      "description": "The configuration of output data.",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1ListFeedbackThreadsResponse": {
-      "id": "GoogleCloudDatalabelingV1beta1ListFeedbackThreadsResponse",
-      "type": "object",
-      "description": "Results for listing FeedbackThreads.",
-      "properties": {
-        "feedbackThreads": {
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1FeedbackThread"
-          },
-          "type": "array",
-          "description": "The list of feedback threads to return."
+        "GoogleCloudDatalabelingV1beta1ImagePayload": {
+            "description": "Container of information about an image.",
+            "id": "GoogleCloudDatalabelingV1beta1ImagePayload",
+            "properties": {
+                "imageThumbnail": {
+                    "description": "A byte string of a thumbnail image.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "imageUri": {
+                    "description": "Image uri from the user bucket.",
+                    "type": "string"
+                },
+                "mimeType": {
+                    "description": "Image format.",
+                    "type": "string"
+                },
+                "signedUri": {
+                    "description": "Signed uri of the image file in the service bucket.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "nextPageToken": {
-          "description": "A token to retrieve next page of results.",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1VideoThumbnail": {
-      "properties": {
-        "thumbnail": {
-          "format": "byte",
-          "type": "string",
-          "description": "A byte string of the video frame."
+        "GoogleCloudDatalabelingV1beta1ImagePolylineAnnotation": {
+            "description": "A polyline for the image annotation.",
+            "id": "GoogleCloudDatalabelingV1beta1ImagePolylineAnnotation",
+            "properties": {
+                "annotationSpec": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec",
+                    "description": "Label of this polyline."
+                },
+                "normalizedPolyline": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1NormalizedPolyline"
+                },
+                "polyline": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1Polyline"
+                }
+            },
+            "type": "object"
         },
-        "timeOffset": {
-          "description": "Time offset relative to the beginning of the video, corresponding to the video frame where the thumbnail has been extracted from.",
-          "type": "string",
-          "format": "google-duration"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1VideoThumbnail",
-      "description": "Container of information of a video thumbnail.",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1GcsSource": {
-      "id": "GoogleCloudDatalabelingV1beta1GcsSource",
-      "description": "Source of the Cloud Storage file to be imported.",
-      "properties": {
-        "inputUri": {
-          "description": "Required. The input URI of source file. This must be a Cloud Storage path (`gs://...`).",
-          "type": "string"
+        "GoogleCloudDatalabelingV1beta1ImageSegmentationAnnotation": {
+            "description": "Image segmentation annotation.",
+            "id": "GoogleCloudDatalabelingV1beta1ImageSegmentationAnnotation",
+            "properties": {
+                "annotationColors": {
+                    "additionalProperties": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec"
+                    },
+                    "description": "The mapping between rgb color and annotation spec. The key is the rgb color represented in format of rgb(0, 0, 0). The value is the AnnotationSpec.",
+                    "type": "object"
+                },
+                "imageBytes": {
+                    "description": "A byte string of a full image's color map.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "mimeType": {
+                    "description": "Image format.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "mimeType": {
-          "type": "string",
-          "description": "Required. The format of the source file. Only \"text/csv\" is supported."
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1p1alpha1LabelImageOrientedBoundingBoxOperationMetadata": {
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig",
-          "description": "Basic human annotation config."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1p1alpha1LabelImageOrientedBoundingBoxOperationMetadata",
-      "type": "object",
-      "description": "Details of a LabelImageOrientedBoundingBox operation metadata."
-    },
-    "GoogleCloudDatalabelingV1beta1CreateInstructionRequest": {
-      "properties": {
-        "instruction": {
-          "$ref": "GoogleCloudDatalabelingV1beta1Instruction",
-          "description": "Required. Instruction of how to perform the labeling task."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1CreateInstructionRequest",
-      "type": "object",
-      "description": "Request message for CreateInstruction."
-    },
-    "GoogleCloudDatalabelingV1p1alpha1LabelImageSegmentationOperationMetadata": {
-      "description": "Details of a LabelImageSegmentation operation metadata.",
-      "type": "object",
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config.",
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1p1alpha1LabelImageSegmentationOperationMetadata"
-    },
-    "GoogleCloudDatalabelingV1beta1ImportDataRequest": {
-      "id": "GoogleCloudDatalabelingV1beta1ImportDataRequest",
-      "type": "object",
-      "description": "Request message for ImportData API.",
-      "properties": {
-        "inputConfig": {
-          "description": "Required. Specify the input source of the data.",
-          "$ref": "GoogleCloudDatalabelingV1beta1InputConfig"
+        "GoogleCloudDatalabelingV1beta1ImportDataOperationMetadata": {
+            "description": "Metadata of an ImportData operation.",
+            "id": "GoogleCloudDatalabelingV1beta1ImportDataOperationMetadata",
+            "properties": {
+                "createTime": {
+                    "description": "Output only. Timestamp when import dataset request was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "dataset": {
+                    "description": "Output only. The name of imported dataset. \"projects/*/datasets/*\"",
+                    "type": "string"
+                },
+                "partialFailures": {
+                    "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
+                    "items": {
+                        "$ref": "GoogleRpcStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "userEmailAddress": {
-          "type": "string",
-          "description": "Email of the user who started the import task and should be notified by email. If empty no notification will be sent."
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1ListInstructionsResponse": {
-      "id": "GoogleCloudDatalabelingV1beta1ListInstructionsResponse",
-      "type": "object",
-      "properties": {
-        "instructions": {
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1Instruction"
-          },
-          "type": "array",
-          "description": "The list of Instructions to return."
+        "GoogleCloudDatalabelingV1beta1ImportDataOperationResponse": {
+            "description": "Response used for ImportData longrunning operation.",
+            "id": "GoogleCloudDatalabelingV1beta1ImportDataOperationResponse",
+            "properties": {
+                "dataset": {
+                    "description": "Ouptut only. The name of imported dataset.",
+                    "type": "string"
+                },
+                "importCount": {
+                    "description": "Output only. Number of examples imported successfully.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalCount": {
+                    "description": "Output only. Total number of examples requested to import",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
         },
-        "nextPageToken": {
-          "type": "string",
-          "description": "A token to retrieve next page of results."
-        }
-      },
-      "description": "Results of listing instructions under a project."
-    },
-    "GoogleCloudDatalabelingV1beta1ImagePolylineAnnotation": {
-      "properties": {
-        "normalizedPolyline": {
-          "$ref": "GoogleCloudDatalabelingV1beta1NormalizedPolyline"
+        "GoogleCloudDatalabelingV1beta1ImportDataRequest": {
+            "description": "Request message for ImportData API.",
+            "id": "GoogleCloudDatalabelingV1beta1ImportDataRequest",
+            "properties": {
+                "inputConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1InputConfig",
+                    "description": "Required. Specify the input source of the data."
+                },
+                "userEmailAddress": {
+                    "description": "Email of the user who started the import task and should be notified by email. If empty no notification will be sent.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "polyline": {
-          "$ref": "GoogleCloudDatalabelingV1beta1Polyline"
+        "GoogleCloudDatalabelingV1beta1InputConfig": {
+            "description": "The configuration of input data, including data type, location, etc.",
+            "id": "GoogleCloudDatalabelingV1beta1InputConfig",
+            "properties": {
+                "annotationType": {
+                    "description": "Optional. The type of annotation to be performed on this data. You must specify this field if you are using this InputConfig in an EvaluationJob.",
+                    "enum": [
+                        "ANNOTATION_TYPE_UNSPECIFIED",
+                        "IMAGE_CLASSIFICATION_ANNOTATION",
+                        "IMAGE_BOUNDING_BOX_ANNOTATION",
+                        "IMAGE_ORIENTED_BOUNDING_BOX_ANNOTATION",
+                        "IMAGE_BOUNDING_POLY_ANNOTATION",
+                        "IMAGE_POLYLINE_ANNOTATION",
+                        "IMAGE_SEGMENTATION_ANNOTATION",
+                        "VIDEO_SHOTS_CLASSIFICATION_ANNOTATION",
+                        "VIDEO_OBJECT_TRACKING_ANNOTATION",
+                        "VIDEO_OBJECT_DETECTION_ANNOTATION",
+                        "VIDEO_EVENT_ANNOTATION",
+                        "TEXT_CLASSIFICATION_ANNOTATION",
+                        "TEXT_ENTITY_EXTRACTION_ANNOTATION",
+                        "GENERAL_CLASSIFICATION_ANNOTATION"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "Classification annotations in an image. Allowed for continuous evaluation.",
+                        "Bounding box annotations in an image. A form of image object detection. Allowed for continuous evaluation.",
+                        "Oriented bounding box. The box does not have to be parallel to horizontal line.",
+                        "Bounding poly annotations in an image.",
+                        "Polyline annotations in an image.",
+                        "Segmentation annotations in an image.",
+                        "Classification annotations in video shots.",
+                        "Video object tracking annotation.",
+                        "Video object detection annotation.",
+                        "Video event annotation.",
+                        "Classification for text. Allowed for continuous evaluation.",
+                        "Entity extraction for text.",
+                        "General classification. Allowed for continuous evaluation."
+                    ],
+                    "type": "string"
+                },
+                "bigquerySource": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1BigQuerySource",
+                    "description": "Source located in BigQuery. You must specify this field if you are using this InputConfig in an EvaluationJob."
+                },
+                "classificationMetadata": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1ClassificationMetadata",
+                    "description": "Optional. Metadata about annotations for the input. You must specify this field if you are using this InputConfig in an EvaluationJob for a model version that performs classification."
+                },
+                "dataType": {
+                    "description": "Required. Data type must be specifed when user tries to import data.",
+                    "enum": [
+                        "DATA_TYPE_UNSPECIFIED",
+                        "IMAGE",
+                        "VIDEO",
+                        "TEXT",
+                        "GENERAL_DATA"
+                    ],
+                    "enumDescriptions": [
+                        "Data type is unspecified.",
+                        "Allowed for continuous evaluation.",
+                        "Video data type.",
+                        "Allowed for continuous evaluation.",
+                        "Allowed for continuous evaluation."
+                    ],
+                    "type": "string"
+                },
+                "gcsSource": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1GcsSource",
+                    "description": "Source located in Cloud Storage."
+                },
+                "textMetadata": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1TextMetadata",
+                    "description": "Required for text import, as language code must be specified."
+                }
+            },
+            "type": "object"
         },
-        "annotationSpec": {
-          "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec",
-          "description": "Label of this polyline."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1ImagePolylineAnnotation",
-      "description": "A polyline for the image annotation.",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1EvaluationJobAlertConfig": {
-      "id": "GoogleCloudDatalabelingV1beta1EvaluationJobAlertConfig",
-      "type": "object",
-      "description": "Provides details for how an evaluation job sends email alerts based on the results of a run.",
-      "properties": {
-        "email": {
-          "description": "Required. An email address to send alerts to.",
-          "type": "string"
+        "GoogleCloudDatalabelingV1beta1Instruction": {
+            "description": "Instruction of how to perform the labeling task for human operators. Currently only PDF instruction is supported.",
+            "id": "GoogleCloudDatalabelingV1beta1Instruction",
+            "properties": {
+                "blockingResources": {
+                    "description": "Output only. The names of any related resources that are blocking changes to the instruction.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "createTime": {
+                    "description": "Output only. Creation time of instruction.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "csvInstruction": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1CsvInstruction",
+                    "description": "Deprecated: this instruction format is not supported any more. Instruction from a CSV file, such as for classification task. The CSV file should have exact two columns, in the following format: * The first column is labeled data, such as an image reference, text. * The second column is comma separated labels associated with data."
+                },
+                "dataType": {
+                    "description": "Required. The data type of this instruction.",
+                    "enum": [
+                        "DATA_TYPE_UNSPECIFIED",
+                        "IMAGE",
+                        "VIDEO",
+                        "TEXT",
+                        "GENERAL_DATA"
+                    ],
+                    "enumDescriptions": [
+                        "Data type is unspecified.",
+                        "Allowed for continuous evaluation.",
+                        "Video data type.",
+                        "Allowed for continuous evaluation.",
+                        "Allowed for continuous evaluation."
+                    ],
+                    "type": "string"
+                },
+                "description": {
+                    "description": "Optional. User-provided description of the instruction. The description can be up to 10000 characters long.",
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "Required. The display name of the instruction. Maximum of 64 characters.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Output only. Instruction resource name, format: projects/{project_id}/instructions/{instruction_id}",
+                    "type": "string"
+                },
+                "pdfInstruction": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1PdfInstruction",
+                    "description": "Instruction from a PDF document. The PDF should be in a Cloud Storage bucket."
+                },
+                "updateTime": {
+                    "description": "Output only. Last update time of instruction.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "minAcceptableMeanAveragePrecision": {
-          "format": "double",
-          "type": "number",
-          "description": "Required. A number between 0 and 1 that describes a minimum mean average precision threshold. When the evaluation job runs, if it calculates that your model version's predictions from the recent interval have meanAveragePrecision below this threshold, then it sends an alert to your specified email."
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1LabelImagePolylineOperationMetadata": {
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
-          "description": "Basic human annotation config used in labeling request."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1LabelImagePolylineOperationMetadata",
-      "type": "object",
-      "description": "Details of LabelImagePolyline operation metadata."
-    },
-    "GoogleCloudDatalabelingV1beta1EvaluationJob": {
-      "id": "GoogleCloudDatalabelingV1beta1EvaluationJob",
-      "type": "object",
-      "properties": {
-        "modelVersion": {
-          "type": "string",
-          "description": "Required. The [AI Platform Prediction model version](/ml-engine/docs/prediction-overview) to be evaluated. Prediction input and output is sampled from this model version. When creating an evaluation job, specify the model version in the following format: \"projects/{project_id}/models/{model_name}/versions/{version_name}\" There can only be one evaluation job per model version."
+        "GoogleCloudDatalabelingV1beta1LabelImageBoundingBoxOperationMetadata": {
+            "description": "Details of a LabelImageBoundingBox operation metadata.",
+            "id": "GoogleCloudDatalabelingV1beta1LabelImageBoundingBoxOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "createTime": {
-          "description": "Output only. Timestamp of when this evaluation job was created.",
-          "type": "string",
-          "format": "google-datetime"
+        "GoogleCloudDatalabelingV1beta1LabelImageBoundingPolyOperationMetadata": {
+            "description": "Details of LabelImageBoundingPoly operation metadata.",
+            "id": "GoogleCloudDatalabelingV1beta1LabelImageBoundingPolyOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "evaluationJobConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1EvaluationJobConfig",
-          "description": "Required. Configuration details for the evaluation job."
+        "GoogleCloudDatalabelingV1beta1LabelImageClassificationOperationMetadata": {
+            "description": "Metadata of a LabelImageClassification operation.",
+            "id": "GoogleCloudDatalabelingV1beta1LabelImageClassificationOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "state": {
-          "enum": [
-            "STATE_UNSPECIFIED",
-            "SCHEDULED",
-            "RUNNING",
-            "PAUSED",
-            "STOPPED"
-          ],
-          "description": "Output only. Describes the current state of the job.",
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "The job is scheduled to run at the configured interval. You can pause or delete the job. When the job is in this state, it samples prediction input and output from your model version into your BigQuery table as predictions occur.",
-            "The job is currently running. When the job runs, Data Labeling Service does several things: 1. If you have configured your job to use Data Labeling Service for ground truth labeling, the service creates a Dataset and a labeling task for all data sampled since the last time the job ran. Human labelers provide ground truth labels for your data. Human labeling may take hours, or even days, depending on how much data has been sampled. The job remains in the `RUNNING` state during this time, and it can even be running multiple times in parallel if it gets triggered again (for example 24 hours later) before the earlier run has completed. When human labelers have finished labeling the data, the next step occurs. If you have configured your job to provide your own ground truth labels, Data Labeling Service still creates a Dataset for newly sampled data, but it expects that you have already added ground truth labels to the BigQuery table by this time. The next step occurs immediately. 2. Data Labeling Service creates an Evaluation by comparing your model version's predictions with the ground truth labels. If the job remains in this state for a long time, it continues to sample prediction data into your BigQuery table and will run again at the next interval, even if it causes the job to run multiple times in parallel.",
-            "The job is not sampling prediction input and output into your BigQuery table and it will not run according to its schedule. You can resume the job.",
-            "The job has this state right before it is deleted."
-          ]
+        "GoogleCloudDatalabelingV1beta1LabelImageOrientedBoundingBoxOperationMetadata": {
+            "description": "Details of a LabelImageOrientedBoundingBox operation metadata.",
+            "id": "GoogleCloudDatalabelingV1beta1LabelImageOrientedBoundingBoxOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
+                    "description": "Basic human annotation config."
+                }
+            },
+            "type": "object"
         },
-        "annotationSpecSet": {
-          "description": "Required. Name of the AnnotationSpecSet describing all the labels that your machine learning model outputs. You must create this resource before you create an evaluation job and provide its name in the following format: \"projects/{project_id}/annotationSpecSets/{annotation_spec_set_id}\"",
-          "type": "string"
+        "GoogleCloudDatalabelingV1beta1LabelImagePolylineOperationMetadata": {
+            "description": "Details of LabelImagePolyline operation metadata.",
+            "id": "GoogleCloudDatalabelingV1beta1LabelImagePolylineOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "name": {
-          "type": "string",
-          "description": "Output only. After you create a job, Data Labeling Service assigns a name to the job with the following format: \"projects/{project_id}/evaluationJobs/ {evaluation_job_id}\""
+        "GoogleCloudDatalabelingV1beta1LabelImageRequest": {
+            "description": "Request message for starting an image labeling task.",
+            "id": "GoogleCloudDatalabelingV1beta1LabelImageRequest",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
+                    "description": "Required. Basic human annotation config."
+                },
+                "boundingPolyConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1BoundingPolyConfig",
+                    "description": "Configuration for bounding box and bounding poly task. One of image_classification_config, bounding_poly_config, polyline_config and segmentation_config are required."
+                },
+                "feature": {
+                    "description": "Required. The type of image labeling task.",
+                    "enum": [
+                        "FEATURE_UNSPECIFIED",
+                        "CLASSIFICATION",
+                        "BOUNDING_BOX",
+                        "ORIENTED_BOUNDING_BOX",
+                        "BOUNDING_POLY",
+                        "POLYLINE",
+                        "SEGMENTATION"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "Label whole image with one or more of labels.",
+                        "Label image with bounding boxes for labels.",
+                        "Label oriented bounding box. The box does not have to be parallel to horizontal line.",
+                        "Label images with bounding poly. A bounding poly is a plane figure that is bounded by a finite chain of straight line segments closing in a loop.",
+                        "Label images with polyline. Polyline is formed by connected line segments which are not in closed form.",
+                        "Label images with segmentation. Segmentation is different from bounding poly since it is more fine-grained, pixel level annotation."
+                    ],
+                    "type": "string"
+                },
+                "imageClassificationConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1ImageClassificationConfig",
+                    "description": "Configuration for image classification task. One of image_classification_config, bounding_poly_config, polyline_config and segmentation_config are required."
+                },
+                "polylineConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1PolylineConfig",
+                    "description": "Configuration for polyline task. One of image_classification_config, bounding_poly_config, polyline_config and segmentation_config are required."
+                },
+                "segmentationConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1SegmentationConfig",
+                    "description": "Configuration for segmentation task. One of image_classification_config, bounding_poly_config, polyline_config and segmentation_config are required."
+                }
+            },
+            "type": "object"
         },
-        "schedule": {
-          "type": "string",
-          "description": "Required. Describes the interval at which the job runs. This interval must be at least 1 day, and it is rounded to the nearest day. For example, if you specify a 50-hour interval, the job runs every 2 days. You can provide the schedule in [crontab format](/scheduler/docs/configuring/cron-job-schedules) or in an [English-like format](/appengine/docs/standard/python/config/cronref#schedule_format). Regardless of what you specify, the job will run at 10:00 AM UTC. Only the interval from this schedule is used, not the specific time of day."
+        "GoogleCloudDatalabelingV1beta1LabelImageSegmentationOperationMetadata": {
+            "description": "Details of a LabelImageSegmentation operation metadata.",
+            "id": "GoogleCloudDatalabelingV1beta1LabelImageSegmentationOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
+                    "description": "Basic human annotation config."
+                }
+            },
+            "type": "object"
         },
-        "description": {
-          "type": "string",
-          "description": "Required. Description of the job. The description can be up to 25,000 characters long."
+        "GoogleCloudDatalabelingV1beta1LabelOperationMetadata": {
+            "description": "Metadata of a labeling operation, such as LabelImage or LabelVideo. Next tag: 23",
+            "id": "GoogleCloudDatalabelingV1beta1LabelOperationMetadata",
+            "properties": {
+                "annotatedDataset": {
+                    "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\".",
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "Output only. Timestamp when labeling request was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "dataset": {
+                    "description": "Output only. The name of dataset to be labeled. \"projects/*/datasets/*\"",
+                    "type": "string"
+                },
+                "imageBoundingBoxDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1LabelImageBoundingBoxOperationMetadata",
+                    "description": "Details of label image bounding box operation."
+                },
+                "imageBoundingPolyDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1LabelImageBoundingPolyOperationMetadata",
+                    "description": "Details of label image bounding poly operation."
+                },
+                "imageClassificationDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1LabelImageClassificationOperationMetadata",
+                    "description": "Details of label image classification operation."
+                },
+                "imageOrientedBoundingBoxDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1LabelImageOrientedBoundingBoxOperationMetadata",
+                    "description": "Details of label image oriented bounding box operation."
+                },
+                "imagePolylineDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1LabelImagePolylineOperationMetadata",
+                    "description": "Details of label image polyline operation."
+                },
+                "imageSegmentationDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1LabelImageSegmentationOperationMetadata",
+                    "description": "Details of label image segmentation operation."
+                },
+                "partialFailures": {
+                    "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
+                    "items": {
+                        "$ref": "GoogleRpcStatus"
+                    },
+                    "type": "array"
+                },
+                "progressPercent": {
+                    "description": "Output only. Progress of label operation. Range: [0, 100].",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "textClassificationDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1LabelTextClassificationOperationMetadata",
+                    "description": "Details of label text classification operation."
+                },
+                "textEntityExtractionDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1LabelTextEntityExtractionOperationMetadata",
+                    "description": "Details of label text entity extraction operation."
+                },
+                "videoClassificationDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1LabelVideoClassificationOperationMetadata",
+                    "description": "Details of label video classification operation."
+                },
+                "videoEventDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1LabelVideoEventOperationMetadata",
+                    "description": "Details of label video event operation."
+                },
+                "videoObjectDetectionDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1LabelVideoObjectDetectionOperationMetadata",
+                    "description": "Details of label video object detection operation."
+                },
+                "videoObjectTrackingDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1LabelVideoObjectTrackingOperationMetadata",
+                    "description": "Details of label video object tracking operation."
+                }
+            },
+            "type": "object"
         },
-        "labelMissingGroundTruth": {
-          "type": "boolean",
-          "description": "Required. Whether you want Data Labeling Service to provide ground truth labels for prediction input. If you want the service to assign human labelers to annotate your data, set this to `true`. If you want to provide your own ground truth labels in the evaluation job's BigQuery table, set this to `false`."
+        "GoogleCloudDatalabelingV1beta1LabelStats": {
+            "description": "Statistics about annotation specs.",
+            "id": "GoogleCloudDatalabelingV1beta1LabelStats",
+            "properties": {
+                "exampleCount": {
+                    "additionalProperties": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "description": "Map of each annotation spec's example count. Key is the annotation spec name and value is the number of examples for that annotation spec. If the annotated dataset does not have annotation spec, the map will return a pair where the key is empty string and value is the total number of annotations.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
         },
-        "attempts": {
-          "description": "Output only. Every time the evaluation job runs and an error occurs, the failed attempt is appended to this array.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1Attempt"
-          }
-        }
-      },
-      "description": "Defines an evaluation job that runs periodically to generate Evaluations. [Creating an evaluation job](/ml-engine/docs/continuous-evaluation/create-job) is the starting point for using continuous evaluation."
-    },
-    "GoogleCloudDatalabelingV1alpha1ImportDataOperationMetadata": {
-      "id": "GoogleCloudDatalabelingV1alpha1ImportDataOperationMetadata",
-      "description": "Metadata of an ImportData operation.",
-      "properties": {
-        "dataset": {
-          "type": "string",
-          "description": "Output only. The name of imported dataset. \"projects/*/datasets/*\""
+        "GoogleCloudDatalabelingV1beta1LabelTextClassificationOperationMetadata": {
+            "description": "Details of a LabelTextClassification operation metadata.",
+            "id": "GoogleCloudDatalabelingV1beta1LabelTextClassificationOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "partialFailures": {
-          "items": {
-            "$ref": "GoogleRpcStatus"
-          },
-          "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
-          "type": "array"
+        "GoogleCloudDatalabelingV1beta1LabelTextEntityExtractionOperationMetadata": {
+            "description": "Details of a LabelTextEntityExtraction operation metadata.",
+            "id": "GoogleCloudDatalabelingV1beta1LabelTextEntityExtractionOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "createTime": {
-          "description": "Output only. Timestamp when import dataset request was created.",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1TextEntityExtractionConfig": {
-      "description": "Config for text entity extraction human labeling task.",
-      "id": "GoogleCloudDatalabelingV1beta1TextEntityExtractionConfig",
-      "properties": {
-        "annotationSpecSet": {
-          "type": "string",
-          "description": "Required. Annotation spec set resource name."
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1AnnotationSpec": {
-      "properties": {
-        "index": {
-          "description": "Output only. This is the integer index of the AnnotationSpec. The index for the whole AnnotationSpecSet is sequential starting from 0. For example, an AnnotationSpecSet with classes `dog` and `cat`, might contain one AnnotationSpec with `{ display_name: \"dog\", index: 0 }` and one AnnotationSpec with `{ display_name: \"cat\", index: 1 }`. This is especially useful for model training as it encodes the string labels into numeric values.",
-          "type": "integer",
-          "format": "int32"
+        "GoogleCloudDatalabelingV1beta1LabelTextRequest": {
+            "description": "Request message for LabelText.",
+            "id": "GoogleCloudDatalabelingV1beta1LabelTextRequest",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
+                    "description": "Required. Basic human annotation config."
+                },
+                "feature": {
+                    "description": "Required. The type of text labeling task.",
+                    "enum": [
+                        "FEATURE_UNSPECIFIED",
+                        "TEXT_CLASSIFICATION",
+                        "TEXT_ENTITY_EXTRACTION"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "Label text content to one of more labels.",
+                        "Label entities and their span in text."
+                    ],
+                    "type": "string"
+                },
+                "textClassificationConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1TextClassificationConfig",
+                    "description": "Configuration for text classification task. One of text_classification_config and text_entity_extraction_config is required."
+                },
+                "textEntityExtractionConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1TextEntityExtractionConfig",
+                    "description": "Configuration for entity extraction task. One of text_classification_config and text_entity_extraction_config is required."
+                }
+            },
+            "type": "object"
         },
-        "displayName": {
-          "description": "Required. The display name of the AnnotationSpec. Maximum of 64 characters.",
-          "type": "string"
+        "GoogleCloudDatalabelingV1beta1LabelVideoClassificationOperationMetadata": {
+            "description": "Details of a LabelVideoClassification operation metadata.",
+            "id": "GoogleCloudDatalabelingV1beta1LabelVideoClassificationOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "description": {
-          "description": "Optional. User-provided description of the annotation specification. The description can be up to 10,000 characters long.",
-          "type": "string"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1AnnotationSpec",
-      "description": "Container of information related to one possible annotation that can be used in a labeling task. For example, an image classification task where images are labeled as `dog` or `cat` must reference an AnnotationSpec for `dog` and an AnnotationSpec for `cat`.",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1ObjectDetectionMetrics": {
-      "id": "GoogleCloudDatalabelingV1beta1ObjectDetectionMetrics",
-      "description": "Metrics calculated for an image object detection (bounding box) model.",
-      "type": "object",
-      "properties": {
-        "prCurve": {
-          "$ref": "GoogleCloudDatalabelingV1beta1PrCurve",
-          "description": "Precision-recall curve."
-        }
-      }
-    },
-    "GoogleProtobufEmpty": {
-      "type": "object",
-      "id": "GoogleProtobufEmpty",
-      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
-      "properties": {}
-    },
-    "GoogleCloudDatalabelingV1alpha1LabelVideoEventOperationMetadata": {
-      "type": "object",
-      "description": "Details of a LabelVideoEvent operation metadata.",
-      "id": "GoogleCloudDatalabelingV1alpha1LabelVideoEventOperationMetadata",
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig",
-          "description": "Basic human annotation config used in labeling request."
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1DataItem": {
-      "type": "object",
-      "description": "DataItem is a piece of data, without annotation. For example, an image.",
-      "properties": {
-        "videoPayload": {
-          "$ref": "GoogleCloudDatalabelingV1beta1VideoPayload",
-          "description": "The video payload, a container of the video uri."
+        "GoogleCloudDatalabelingV1beta1LabelVideoEventOperationMetadata": {
+            "description": "Details of a LabelVideoEvent operation metadata.",
+            "id": "GoogleCloudDatalabelingV1beta1LabelVideoEventOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "textPayload": {
-          "$ref": "GoogleCloudDatalabelingV1beta1TextPayload",
-          "description": "The text payload, a container of text content."
+        "GoogleCloudDatalabelingV1beta1LabelVideoObjectDetectionOperationMetadata": {
+            "description": "Details of a LabelVideoObjectDetection operation metadata.",
+            "id": "GoogleCloudDatalabelingV1beta1LabelVideoObjectDetectionOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "name": {
-          "description": "Output only. Name of the data item, in format of: projects/{project_id}/datasets/{dataset_id}/dataItems/{data_item_id}",
-          "type": "string"
+        "GoogleCloudDatalabelingV1beta1LabelVideoObjectTrackingOperationMetadata": {
+            "description": "Details of a LabelVideoObjectTracking operation metadata.",
+            "id": "GoogleCloudDatalabelingV1beta1LabelVideoObjectTrackingOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "imagePayload": {
-          "description": "The image payload, a container of the image bytes/uri.",
-          "$ref": "GoogleCloudDatalabelingV1beta1ImagePayload"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1DataItem"
-    },
-    "GoogleCloudDatalabelingV1beta1BigQuerySource": {
-      "description": "The BigQuery location for input data. If used in an EvaluationJob, this is where the service saves the prediction input and output sampled from the model version.",
-      "id": "GoogleCloudDatalabelingV1beta1BigQuerySource",
-      "properties": {
-        "inputUri": {
-          "description": "Required. BigQuery URI to a table, up to 2,000 characters long. If you specify the URI of a table that does not exist, Data Labeling Service creates a table at the URI with the correct schema when you create your EvaluationJob. If you specify the URI of a table that already exists, it must have the [correct schema](/ml-engine/docs/continuous-evaluation/create-job#table-schema). Provide the table URI in the following format: \"bq://{your_project_id}/ {your_dataset_name}/{your_table_name}\" [Learn more](/ml-engine/docs/continuous-evaluation/create-job#table-schema).",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1ClassificationMetrics": {
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1beta1ClassificationMetrics",
-      "description": "Metrics calculated for a classification model.",
-      "properties": {
-        "confusionMatrix": {
-          "description": "Confusion matrix of predicted labels vs. ground truth labels.",
-          "$ref": "GoogleCloudDatalabelingV1beta1ConfusionMatrix"
-        },
-        "prCurve": {
-          "$ref": "GoogleCloudDatalabelingV1beta1PrCurve",
-          "description": "Precision-recall curve based on ground truth labels, predicted labels, and scores for the predicted labels."
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1p1alpha1LabelImagePolylineOperationMetadata": {
-      "id": "GoogleCloudDatalabelingV1p1alpha1LabelImagePolylineOperationMetadata",
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig",
-          "description": "Basic human annotation config used in labeling request."
-        }
-      },
-      "type": "object",
-      "description": "Details of LabelImagePolyline operation metadata."
-    },
-    "GoogleCloudDatalabelingV1beta1ListAnnotationSpecSetsResponse": {
-      "description": "Results of listing annotation spec set under a project.",
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1beta1ListAnnotationSpecSetsResponse",
-      "properties": {
-        "annotationSpecSets": {
-          "description": "The list of annotation spec sets.",
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpecSet"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "A token to retrieve next page of results."
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1alpha1LabelTextEntityExtractionOperationMetadata": {
-      "id": "GoogleCloudDatalabelingV1alpha1LabelTextEntityExtractionOperationMetadata",
-      "description": "Details of a LabelTextEntityExtraction operation metadata.",
-      "type": "object",
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1TextClassificationConfig": {
-      "description": "Config for text classification human labeling task.",
-      "type": "object",
-      "properties": {
-        "allowMultiLabel": {
-          "type": "boolean",
-          "description": "Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one text segment."
-        },
-        "annotationSpecSet": {
-          "description": "Required. Annotation spec set resource name.",
-          "type": "string"
-        },
-        "sentimentConfig": {
-          "description": "Optional. Configs for sentiment selection.",
-          "$ref": "GoogleCloudDatalabelingV1beta1SentimentConfig"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1TextClassificationConfig"
-    },
-    "GoogleCloudDatalabelingV1p1alpha1LabelImageClassificationOperationMetadata": {
-      "type": "object",
-      "description": "Metadata of a LabelImageClassification operation.",
-      "id": "GoogleCloudDatalabelingV1p1alpha1LabelImageClassificationOperationMetadata",
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1ListEvaluationJobsResponse": {
-      "description": "Results for listing evaluation jobs.",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "A token to retrieve next page of results."
-        },
-        "evaluationJobs": {
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1EvaluationJob"
-          },
-          "description": "The list of evaluation jobs to return.",
-          "type": "array"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1ListEvaluationJobsResponse",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1p2alpha1LabelVideoObjectDetectionOperationMetadata": {
-      "type": "object",
-      "description": "Details of a LabelVideoObjectDetection operation metadata.",
-      "id": "GoogleCloudDatalabelingV1p2alpha1LabelVideoObjectDetectionOperationMetadata",
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1ImageBoundingPolyAnnotation": {
-      "description": "Image bounding poly annotation. It represents a polygon including bounding box in the image.",
-      "id": "GoogleCloudDatalabelingV1beta1ImageBoundingPolyAnnotation",
-      "type": "object",
-      "properties": {
-        "boundingPoly": {
-          "$ref": "GoogleCloudDatalabelingV1beta1BoundingPoly"
-        },
-        "normalizedBoundingPoly": {
-          "$ref": "GoogleCloudDatalabelingV1beta1NormalizedBoundingPoly"
-        },
-        "annotationSpec": {
-          "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec",
-          "description": "Label of object in this bounding polygon."
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1TimeSegment": {
-      "properties": {
-        "startTimeOffset": {
-          "description": "Start of the time segment (inclusive), represented as the duration since the example start.",
-          "type": "string",
-          "format": "google-duration"
-        },
-        "endTimeOffset": {
-          "type": "string",
-          "format": "google-duration",
-          "description": "End of the time segment (exclusive), represented as the duration since the example start."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1TimeSegment",
-      "type": "object",
-      "description": "A time period inside of an example that has a time dimension (e.g. video)."
-    },
-    "GoogleCloudDatalabelingV1beta1LabelVideoEventOperationMetadata": {
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
-          "description": "Basic human annotation config used in labeling request."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1LabelVideoEventOperationMetadata",
-      "description": "Details of a LabelVideoEvent operation metadata.",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1p1alpha1GcsDestination": {
-      "id": "GoogleCloudDatalabelingV1p1alpha1GcsDestination",
-      "properties": {
-        "mimeType": {
-          "type": "string",
-          "description": "Required. The format of the gcs destination. Only \"text/csv\" and \"application/json\" are supported."
-        },
-        "outputUri": {
-          "type": "string",
-          "description": "Required. The output uri of destination file."
-        }
-      },
-      "type": "object",
-      "description": "Export destination of the data.Only gcs path is allowed in output_uri."
-    },
-    "GoogleCloudDatalabelingV1alpha1ExportDataOperationResponse": {
-      "type": "object",
-      "properties": {
-        "labelStats": {
-          "description": "Output only. Statistic infos of labels in the exported dataset.",
-          "$ref": "GoogleCloudDatalabelingV1alpha1LabelStats"
-        },
-        "outputConfig": {
-          "description": "Output only. output_config in the ExportData request.",
-          "$ref": "GoogleCloudDatalabelingV1alpha1OutputConfig"
-        },
-        "annotatedDataset": {
-          "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\".",
-          "type": "string"
-        },
-        "exportCount": {
-          "format": "int32",
-          "description": "Output only. Number of examples exported successfully.",
-          "type": "integer"
-        },
-        "totalCount": {
-          "description": "Output only. Total number of examples requested to export",
-          "type": "integer",
-          "format": "int32"
-        },
-        "dataset": {
-          "type": "string",
-          "description": "Ouptut only. The name of dataset. \"projects/*/datasets/*\""
-        }
-      },
-      "description": "Response used for ExportDataset longrunning operation.",
-      "id": "GoogleCloudDatalabelingV1alpha1ExportDataOperationResponse"
-    },
-    "GoogleCloudDatalabelingV1p1alpha1ExportDataOperationResponse": {
-      "type": "object",
-      "description": "Response used for ExportDataset longrunning operation.",
-      "properties": {
-        "annotatedDataset": {
-          "type": "string",
-          "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\"."
-        },
-        "totalCount": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Output only. Total number of examples requested to export"
-        },
-        "exportCount": {
-          "format": "int32",
-          "description": "Output only. Number of examples exported successfully.",
-          "type": "integer"
-        },
-        "outputConfig": {
-          "description": "Output only. output_config in the ExportData request.",
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1OutputConfig"
-        },
-        "dataset": {
-          "description": "Ouptut only. The name of dataset. \"projects/*/datasets/*\"",
-          "type": "string"
-        },
-        "labelStats": {
-          "description": "Output only. Statistic infos of labels in the exported dataset.",
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelStats"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1p1alpha1ExportDataOperationResponse"
-    },
-    "GoogleCloudDatalabelingV1beta1ListDatasetsResponse": {
-      "description": "Results of listing datasets within a project.",
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1beta1ListDatasetsResponse",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "A token to retrieve next page of results."
-        },
-        "datasets": {
-          "description": "The list of datasets to return.",
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1Dataset"
-          },
-          "type": "array"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1Dataset": {
-      "properties": {
-        "createTime": {
-          "format": "google-datetime",
-          "description": "Output only. Time the dataset is created.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Output only. Dataset resource name, format is: projects/{project_id}/datasets/{dataset_id}",
-          "type": "string"
-        },
-        "displayName": {
-          "description": "Required. The display name of the dataset. Maximum of 64 characters.",
-          "type": "string"
-        },
-        "blockingResources": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "Output only. The names of any related resources that are blocking changes to the dataset."
-        },
-        "lastMigrateTime": {
-          "description": "Last time that the Dataset is migrated to AI Platform V2. If any of the AnnotatedDataset is migrated, the last_migration_time in Dataset is also updated.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "inputConfigs": {
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1InputConfig"
-          },
-          "description": "Output only. This is populated with the original input configs where ImportData is called. It is available only after the clients import data to this dataset.",
-          "type": "array"
-        },
-        "description": {
-          "type": "string",
-          "description": "Optional. User-provided description of the annotation specification set. The description can be up to 10000 characters long."
-        },
-        "dataItemCount": {
-          "format": "int64",
-          "type": "string",
-          "description": "Output only. The number of data items in the dataset."
-        }
-      },
-      "description": "Dataset is the resource to hold your data. You can request multiple labeling tasks for a dataset while each one will generate an AnnotatedDataset.",
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1beta1Dataset"
-    },
-    "GoogleCloudDatalabelingV1p2alpha1LabelTextEntityExtractionOperationMetadata": {
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig"
-        }
-      },
-      "type": "object",
-      "description": "Details of a LabelTextEntityExtraction operation metadata.",
-      "id": "GoogleCloudDatalabelingV1p2alpha1LabelTextEntityExtractionOperationMetadata"
-    },
-    "GoogleCloudDatalabelingV1beta1CreateInstructionMetadata": {
-      "properties": {
-        "partialFailures": {
-          "type": "array",
-          "description": "Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
-          "items": {
-            "$ref": "GoogleRpcStatus"
-          }
-        },
-        "createTime": {
-          "type": "string",
-          "description": "Timestamp when create instruction request was created.",
-          "format": "google-datetime"
-        },
-        "instruction": {
-          "type": "string",
-          "description": "The name of the created Instruction. projects/{project_id}/instructions/{instruction_id}"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1CreateInstructionMetadata",
-      "type": "object",
-      "description": "Metadata of a CreateInstruction operation."
-    },
-    "GoogleCloudDatalabelingV1beta1LabelVideoObjectTrackingOperationMetadata": {
-      "type": "object",
-      "description": "Details of a LabelVideoObjectTracking operation metadata.",
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
-          "description": "Basic human annotation config used in labeling request."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1LabelVideoObjectTrackingOperationMetadata"
-    },
-    "GoogleCloudDatalabelingV1beta1AnnotationSpecSet": {
-      "description": "An AnnotationSpecSet is a collection of label definitions. For example, in image classification tasks, you define a set of possible labels for images as an AnnotationSpecSet. An AnnotationSpecSet is immutable upon creation.",
-      "id": "GoogleCloudDatalabelingV1beta1AnnotationSpecSet",
-      "properties": {
-        "annotationSpecs": {
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec"
-          },
-          "description": "Required. The array of AnnotationSpecs that you define when you create the AnnotationSpecSet. These are the possible labels for the labeling task."
-        },
-        "displayName": {
-          "description": "Required. The display name for AnnotationSpecSet that you define when you create it. Maximum of 64 characters.",
-          "type": "string"
-        },
-        "blockingResources": {
-          "items": {
-            "type": "string"
-          },
-          "description": "Output only. The names of any related resources that are blocking changes to the annotation spec set.",
-          "type": "array"
-        },
-        "name": {
-          "description": "Output only. The AnnotationSpecSet resource name in the following format: \"projects/{project_id}/annotationSpecSets/{annotation_spec_set_id}\"",
-          "type": "string"
-        },
-        "description": {
-          "type": "string",
-          "description": "Optional. User-provided description of the annotation specification set. The description can be up to 10,000 characters long."
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1Attempt": {
-      "properties": {
-        "partialFailures": {
-          "description": "Details of errors that occurred.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleRpcStatus"
-          }
-        },
-        "attemptTime": {
-          "type": "string",
-          "format": "google-datetime"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1Attempt",
-      "type": "object",
-      "description": "Records a failed evaluation job run."
-    },
-    "GoogleCloudDatalabelingV1beta1SentimentConfig": {
-      "id": "GoogleCloudDatalabelingV1beta1SentimentConfig",
-      "properties": {
-        "enableLabelSentimentSelection": {
-          "description": "If set to true, contributors will have the option to select sentiment of the label they selected, to mark it as negative or positive label. Default is false.",
-          "type": "boolean"
-        }
-      },
-      "type": "object",
-      "description": "Config for setting up sentiments."
-    },
-    "GoogleCloudDatalabelingV1beta1ListAnnotatedDatasetsResponse": {
-      "type": "object",
-      "description": "Results of listing annotated datasets for a dataset.",
-      "properties": {
-        "annotatedDatasets": {
-          "description": "The list of annotated datasets to return.",
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1AnnotatedDataset"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "A token to retrieve next page of results."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1ListAnnotatedDatasetsResponse"
-    },
-    "GoogleCloudDatalabelingV1beta1TextClassificationAnnotation": {
-      "type": "object",
-      "description": "Text classification annotation.",
-      "properties": {
-        "annotationSpec": {
-          "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec",
-          "description": "Label of the text."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1TextClassificationAnnotation"
-    },
-    "GoogleCloudDatalabelingV1beta1ConfusionMatrixEntry": {
-      "id": "GoogleCloudDatalabelingV1beta1ConfusionMatrixEntry",
-      "properties": {
-        "annotationSpec": {
-          "description": "The annotation spec of a predicted label.",
-          "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec"
-        },
-        "itemCount": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Number of items predicted to have this label. (The ground truth label for these items is the `Row.annotationSpec` of this entry's parent.)"
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1SequentialSegment": {
-      "id": "GoogleCloudDatalabelingV1beta1SequentialSegment",
-      "description": "Start and end position in a sequence (e.g. text segment).",
-      "type": "object",
-      "properties": {
-        "start": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Start position (inclusive)."
-        },
-        "end": {
-          "format": "int32",
-          "type": "integer",
-          "description": "End position (exclusive)."
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1alpha1LabelStats": {
-      "type": "object",
-      "description": "Statistics about annotation specs.",
-      "properties": {
-        "exampleCount": {
-          "description": "Map of each annotation spec's example count. Key is the annotation spec name and value is the number of examples for that annotation spec. If the annotated dataset does not have annotation spec, the map will return a pair where the key is empty string and value is the total number of annotations.",
-          "additionalProperties": {
-            "format": "int64",
-            "type": "string"
-          },
-          "type": "object"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1alpha1LabelStats"
-    },
-    "GoogleCloudDatalabelingV1beta1PdfInstruction": {
-      "properties": {
-        "gcsFileUri": {
-          "type": "string",
-          "description": "PDF file for the instruction. Only gcs path is allowed."
-        }
-      },
-      "description": "Instruction from a PDF file.",
-      "id": "GoogleCloudDatalabelingV1beta1PdfInstruction",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1NormalizedBoundingPoly": {
-      "id": "GoogleCloudDatalabelingV1beta1NormalizedBoundingPoly",
-      "type": "object",
-      "properties": {
-        "normalizedVertices": {
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1NormalizedVertex"
-          },
-          "type": "array",
-          "description": "The bounding polygon normalized vertices."
-        }
-      },
-      "description": "Normalized bounding polygon."
-    },
-    "GoogleCloudDatalabelingV1p1alpha1LabelVideoObjectTrackingOperationMetadata": {
-      "id": "GoogleCloudDatalabelingV1p1alpha1LabelVideoObjectTrackingOperationMetadata",
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig"
-        }
-      },
-      "description": "Details of a LabelVideoObjectTracking operation metadata.",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1VideoPayload": {
-      "id": "GoogleCloudDatalabelingV1beta1VideoPayload",
-      "type": "object",
-      "properties": {
-        "videoUri": {
-          "type": "string",
-          "description": "Video uri from the user bucket."
-        },
-        "videoThumbnails": {
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1VideoThumbnail"
-          },
-          "description": "The list of video thumbnails."
-        },
-        "signedUri": {
-          "description": "Signed uri of the video file in the service bucket.",
-          "type": "string"
-        },
-        "mimeType": {
-          "type": "string",
-          "description": "Video format."
-        },
-        "frameRate": {
-          "type": "number",
-          "format": "float",
-          "description": "FPS of the video."
-        }
-      },
-      "description": "Container of information of a video."
-    },
-    "GoogleCloudDatalabelingV1p2alpha1LabelVideoClassificationOperationMetadata": {
-      "id": "GoogleCloudDatalabelingV1p2alpha1LabelVideoClassificationOperationMetadata",
-      "description": "Details of a LabelVideoClassification operation metadata.",
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig"
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1SegmentationConfig": {
-      "properties": {
-        "instructionMessage": {
-          "type": "string",
-          "description": "Instruction message showed on labelers UI."
-        },
-        "annotationSpecSet": {
-          "description": "Required. Annotation spec set resource name. format: projects/{project_id}/annotationSpecSets/{annotation_spec_set_id}",
-          "type": "string"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1SegmentationConfig",
-      "description": "Config for image segmentation",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1AnnotationValue": {
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1beta1AnnotationValue",
-      "description": "Annotation value for an example.",
-      "properties": {
-        "videoEventAnnotation": {
-          "description": "Annotation value for video event case.",
-          "$ref": "GoogleCloudDatalabelingV1beta1VideoEventAnnotation"
-        },
-        "imageBoundingPolyAnnotation": {
-          "$ref": "GoogleCloudDatalabelingV1beta1ImageBoundingPolyAnnotation",
-          "description": "Annotation value for image bounding box, oriented bounding box and polygon cases."
-        },
-        "textClassificationAnnotation": {
-          "$ref": "GoogleCloudDatalabelingV1beta1TextClassificationAnnotation",
-          "description": "Annotation value for text classification case."
-        },
-        "imageClassificationAnnotation": {
-          "$ref": "GoogleCloudDatalabelingV1beta1ImageClassificationAnnotation",
-          "description": "Annotation value for image classification case."
-        },
-        "videoObjectTrackingAnnotation": {
-          "$ref": "GoogleCloudDatalabelingV1beta1VideoObjectTrackingAnnotation",
-          "description": "Annotation value for video object detection and tracking case."
-        },
-        "textEntityExtractionAnnotation": {
-          "$ref": "GoogleCloudDatalabelingV1beta1TextEntityExtractionAnnotation",
-          "description": "Annotation value for text entity extraction case."
-        },
-        "imageSegmentationAnnotation": {
-          "description": "Annotation value for image segmentation.",
-          "$ref": "GoogleCloudDatalabelingV1beta1ImageSegmentationAnnotation"
-        },
-        "videoClassificationAnnotation": {
-          "description": "Annotation value for video classification case.",
-          "$ref": "GoogleCloudDatalabelingV1beta1VideoClassificationAnnotation"
-        },
-        "imagePolylineAnnotation": {
-          "$ref": "GoogleCloudDatalabelingV1beta1ImagePolylineAnnotation",
-          "description": "Annotation value for image polyline cases. Polyline here is different from BoundingPoly. It is formed by line segments connected to each other but not closed form(Bounding Poly). The line segments can cross each other."
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1TextPayload": {
-      "description": "Container of information about a piece of text.",
-      "type": "object",
-      "properties": {
-        "textContent": {
-          "description": "Text content.",
-          "type": "string"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1TextPayload"
-    },
-    "GoogleCloudDatalabelingV1beta1VideoEventAnnotation": {
-      "properties": {
-        "timeSegment": {
-          "description": "The time segment of the video to which the annotation applies.",
-          "$ref": "GoogleCloudDatalabelingV1beta1TimeSegment"
+        "GoogleCloudDatalabelingV1beta1LabelVideoRequest": {
+            "description": "Request message for LabelVideo.",
+            "id": "GoogleCloudDatalabelingV1beta1LabelVideoRequest",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
+                    "description": "Required. Basic human annotation config."
+                },
+                "eventConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1EventConfig",
+                    "description": "Configuration for video event task. One of video_classification_config, object_detection_config, object_tracking_config and event_config is required."
+                },
+                "feature": {
+                    "description": "Required. The type of video labeling task.",
+                    "enum": [
+                        "FEATURE_UNSPECIFIED",
+                        "CLASSIFICATION",
+                        "OBJECT_DETECTION",
+                        "OBJECT_TRACKING",
+                        "EVENT"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "Label whole video or video segment with one or more labels.",
+                        "Label objects with bounding box on image frames extracted from the video.",
+                        "Label and track objects in video.",
+                        "Label the range of video for the specified events."
+                    ],
+                    "type": "string"
+                },
+                "objectDetectionConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1ObjectDetectionConfig",
+                    "description": "Configuration for video object detection task. One of video_classification_config, object_detection_config, object_tracking_config and event_config is required."
+                },
+                "objectTrackingConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1ObjectTrackingConfig",
+                    "description": "Configuration for video object tracking task. One of video_classification_config, object_detection_config, object_tracking_config and event_config is required."
+                },
+                "videoClassificationConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1VideoClassificationConfig",
+                    "description": "Configuration for video classification task. One of video_classification_config, object_detection_config, object_tracking_config and event_config is required."
+                }
+            },
+            "type": "object"
         },
-        "annotationSpec": {
-          "description": "Label of the event in this annotation.",
-          "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec"
-        }
-      },
-      "type": "object",
-      "description": "Video event annotation.",
-      "id": "GoogleCloudDatalabelingV1beta1VideoEventAnnotation"
-    },
-    "GoogleCloudDatalabelingV1beta1BoundingPoly": {
-      "type": "object",
-      "properties": {
-        "vertices": {
-          "type": "array",
-          "description": "The bounding polygon vertices.",
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1Vertex"
-          }
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1BoundingPoly",
-      "description": "A bounding polygon in the image."
-    },
-    "GoogleCloudDatalabelingV1beta1ObjectTrackingConfig": {
-      "description": "Config for video object tracking human labeling task.",
-      "properties": {
-        "overlapLength": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The overlap length between different video clips. Users can configure is field in seconds, if not set, default value is 0.3s."
+        "GoogleCloudDatalabelingV1beta1ListAnnotatedDatasetsResponse": {
+            "description": "Results of listing annotated datasets for a dataset.",
+            "id": "GoogleCloudDatalabelingV1beta1ListAnnotatedDatasetsResponse",
+            "properties": {
+                "annotatedDatasets": {
+                    "description": "The list of annotated datasets to return.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1AnnotatedDataset"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "A token to retrieve next page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "clipLength": {
-          "type": "integer",
-          "description": "Videos will be cut to smaller clips to make it easier for labelers to work on. Users can configure is field in seconds, if not set, default value is 20s.",
-          "format": "int32"
+        "GoogleCloudDatalabelingV1beta1ListAnnotationSpecSetsResponse": {
+            "description": "Results of listing annotation spec set under a project.",
+            "id": "GoogleCloudDatalabelingV1beta1ListAnnotationSpecSetsResponse",
+            "properties": {
+                "annotationSpecSets": {
+                    "description": "The list of annotation spec sets.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpecSet"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "A token to retrieve next page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "annotationSpecSet": {
-          "type": "string",
-          "description": "Required. Annotation spec set resource name."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1ObjectTrackingConfig",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1SearchExampleComparisonsResponse": {
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "A token to retrieve next page of results."
+        "GoogleCloudDatalabelingV1beta1ListDataItemsResponse": {
+            "description": "Results of listing data items in a dataset.",
+            "id": "GoogleCloudDatalabelingV1beta1ListDataItemsResponse",
+            "properties": {
+                "dataItems": {
+                    "description": "The list of data items to return.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1DataItem"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "A token to retrieve next page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "exampleComparisons": {
-          "description": "A list of example comparisons matching the search criteria.",
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1ExampleComparison"
-          },
-          "type": "array"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1SearchExampleComparisonsResponse",
-      "description": "Results of searching example comparisons."
-    },
-    "GoogleCloudDatalabelingV1beta1PauseEvaluationJobRequest": {
-      "properties": {},
-      "id": "GoogleCloudDatalabelingV1beta1PauseEvaluationJobRequest",
-      "type": "object",
-      "description": "Request message for PauseEvaluationJob."
-    },
-    "GoogleCloudDatalabelingV1beta1FeedbackMessage": {
-      "description": "A feedback message inside a feedback thread.",
-      "type": "object",
-      "properties": {
-        "createTime": {
-          "description": "Create time.",
-          "format": "google-datetime",
-          "type": "string"
+        "GoogleCloudDatalabelingV1beta1ListDatasetsResponse": {
+            "description": "Results of listing datasets within a project.",
+            "id": "GoogleCloudDatalabelingV1beta1ListDatasetsResponse",
+            "properties": {
+                "datasets": {
+                    "description": "The list of datasets to return.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1Dataset"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "A token to retrieve next page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "name": {
-          "type": "string",
-          "description": "Name of the feedback message in a feedback thread. Format: 'project/{project_id}/datasets/{dataset_id}/annotatedDatasets/{annotated_dataset_id}/feedbackThreads/{feedback_thread_id}/feedbackMessage/{feedback_message_id}'"
+        "GoogleCloudDatalabelingV1beta1ListEvaluationJobsResponse": {
+            "description": "Results for listing evaluation jobs.",
+            "id": "GoogleCloudDatalabelingV1beta1ListEvaluationJobsResponse",
+            "properties": {
+                "evaluationJobs": {
+                    "description": "The list of evaluation jobs to return.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1EvaluationJob"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "A token to retrieve next page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "operatorFeedbackMetadata": {
-          "$ref": "GoogleCloudDatalabelingV1beta1OperatorFeedbackMetadata"
+        "GoogleCloudDatalabelingV1beta1ListExamplesResponse": {
+            "description": "Results of listing Examples in and annotated dataset.",
+            "id": "GoogleCloudDatalabelingV1beta1ListExamplesResponse",
+            "properties": {
+                "examples": {
+                    "description": "The list of examples to return.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1Example"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "A token to retrieve next page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "requesterFeedbackMetadata": {
-          "$ref": "GoogleCloudDatalabelingV1beta1RequesterFeedbackMetadata"
+        "GoogleCloudDatalabelingV1beta1ListFeedbackMessagesResponse": {
+            "description": "Results for listing FeedbackMessages.",
+            "id": "GoogleCloudDatalabelingV1beta1ListFeedbackMessagesResponse",
+            "properties": {
+                "feedbackMessages": {
+                    "description": "The list of feedback messages to return.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1FeedbackMessage"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "A token to retrieve next page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "image": {
-          "format": "byte",
-          "description": "The image storing this feedback if the feedback is an image representing operator's comments.",
-          "type": "string"
+        "GoogleCloudDatalabelingV1beta1ListFeedbackThreadsResponse": {
+            "description": "Results for listing FeedbackThreads.",
+            "id": "GoogleCloudDatalabelingV1beta1ListFeedbackThreadsResponse",
+            "properties": {
+                "feedbackThreads": {
+                    "description": "The list of feedback threads to return.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1FeedbackThread"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "A token to retrieve next page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "body": {
-          "type": "string",
-          "description": "String content of the feedback. Maximum of 10000 characters."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1FeedbackMessage"
-    },
-    "GoogleCloudDatalabelingV1beta1LabelVideoObjectDetectionOperationMetadata": {
-      "type": "object",
-      "description": "Details of a LabelVideoObjectDetection operation metadata.",
-      "id": "GoogleCloudDatalabelingV1beta1LabelVideoObjectDetectionOperationMetadata",
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1AnnotatedDatasetMetadata": {
-      "description": "Metadata on AnnotatedDataset.",
-      "properties": {
-        "objectTrackingConfig": {
-          "description": "Configuration for video object tracking task.",
-          "$ref": "GoogleCloudDatalabelingV1beta1ObjectTrackingConfig"
+        "GoogleCloudDatalabelingV1beta1ListInstructionsResponse": {
+            "description": "Results of listing instructions under a project.",
+            "id": "GoogleCloudDatalabelingV1beta1ListInstructionsResponse",
+            "properties": {
+                "instructions": {
+                    "description": "The list of Instructions to return.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1Instruction"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "A token to retrieve next page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "segmentationConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1SegmentationConfig",
-          "description": "Configuration for image segmentation task."
+        "GoogleCloudDatalabelingV1beta1NormalizedBoundingPoly": {
+            "description": "Normalized bounding polygon.",
+            "id": "GoogleCloudDatalabelingV1beta1NormalizedBoundingPoly",
+            "properties": {
+                "normalizedVertices": {
+                    "description": "The bounding polygon normalized vertices.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1NormalizedVertex"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "textEntityExtractionConfig": {
-          "description": "Configuration for text entity extraction task.",
-          "$ref": "GoogleCloudDatalabelingV1beta1TextEntityExtractionConfig"
+        "GoogleCloudDatalabelingV1beta1NormalizedPolyline": {
+            "description": "Normalized polyline.",
+            "id": "GoogleCloudDatalabelingV1beta1NormalizedPolyline",
+            "properties": {
+                "normalizedVertices": {
+                    "description": "The normalized polyline vertices.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1NormalizedVertex"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "boundingPolyConfig": {
-          "description": "Configuration for image bounding box and bounding poly task.",
-          "$ref": "GoogleCloudDatalabelingV1beta1BoundingPolyConfig"
+        "GoogleCloudDatalabelingV1beta1NormalizedVertex": {
+            "description": "A vertex represents a 2D point in the image. NOTE: the normalized vertex coordinates are relative to the original image and range from 0 to 1.",
+            "id": "GoogleCloudDatalabelingV1beta1NormalizedVertex",
+            "properties": {
+                "x": {
+                    "description": "X coordinate.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "y": {
+                    "description": "Y coordinate.",
+                    "format": "float",
+                    "type": "number"
+                }
+            },
+            "type": "object"
         },
-        "polylineConfig": {
-          "description": "Configuration for image polyline task.",
-          "$ref": "GoogleCloudDatalabelingV1beta1PolylineConfig"
+        "GoogleCloudDatalabelingV1beta1ObjectDetectionConfig": {
+            "description": "Config for video object detection human labeling task. Object detection will be conducted on the images extracted from the video, and those objects will be labeled with bounding boxes. User need to specify the number of images to be extracted per second as the extraction frame rate.",
+            "id": "GoogleCloudDatalabelingV1beta1ObjectDetectionConfig",
+            "properties": {
+                "annotationSpecSet": {
+                    "description": "Required. Annotation spec set resource name.",
+                    "type": "string"
+                },
+                "extractionFrameRate": {
+                    "description": "Required. Number of frames per second to be extracted from the video.",
+                    "format": "double",
+                    "type": "number"
+                }
+            },
+            "type": "object"
         },
-        "imageClassificationConfig": {
-          "description": "Configuration for image classification task.",
-          "$ref": "GoogleCloudDatalabelingV1beta1ImageClassificationConfig"
+        "GoogleCloudDatalabelingV1beta1ObjectDetectionMetrics": {
+            "description": "Metrics calculated for an image object detection (bounding box) model.",
+            "id": "GoogleCloudDatalabelingV1beta1ObjectDetectionMetrics",
+            "properties": {
+                "prCurve": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1PrCurve",
+                    "description": "Precision-recall curve."
+                }
+            },
+            "type": "object"
         },
-        "videoClassificationConfig": {
-          "description": "Configuration for video classification task.",
-          "$ref": "GoogleCloudDatalabelingV1beta1VideoClassificationConfig"
+        "GoogleCloudDatalabelingV1beta1ObjectTrackingConfig": {
+            "description": "Config for video object tracking human labeling task.",
+            "id": "GoogleCloudDatalabelingV1beta1ObjectTrackingConfig",
+            "properties": {
+                "annotationSpecSet": {
+                    "description": "Required. Annotation spec set resource name.",
+                    "type": "string"
+                },
+                "clipLength": {
+                    "description": "Videos will be cut to smaller clips to make it easier for labelers to work on. Users can configure is field in seconds, if not set, default value is 20s.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "overlapLength": {
+                    "description": "The overlap length between different video clips. Users can configure is field in seconds, if not set, default value is 0.3s.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
         },
-        "humanAnnotationConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
-          "description": "HumanAnnotationConfig used when requesting the human labeling task for this AnnotatedDataset."
+        "GoogleCloudDatalabelingV1beta1ObjectTrackingFrame": {
+            "description": "Video frame level annotation for object detection and tracking.",
+            "id": "GoogleCloudDatalabelingV1beta1ObjectTrackingFrame",
+            "properties": {
+                "boundingPoly": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1BoundingPoly"
+                },
+                "normalizedBoundingPoly": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1NormalizedBoundingPoly"
+                },
+                "timeOffset": {
+                    "description": "The time offset of this frame relative to the beginning of the video.",
+                    "format": "google-duration",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "objectDetectionConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1ObjectDetectionConfig",
-          "description": "Configuration for video object detection task."
+        "GoogleCloudDatalabelingV1beta1OperatorFeedbackMetadata": {
+            "description": "Metadata describing the feedback from the operator.",
+            "id": "GoogleCloudDatalabelingV1beta1OperatorFeedbackMetadata",
+            "properties": {},
+            "type": "object"
         },
-        "eventConfig": {
-          "description": "Configuration for video event labeling task.",
-          "$ref": "GoogleCloudDatalabelingV1beta1EventConfig"
+        "GoogleCloudDatalabelingV1beta1OperatorMetadata": {
+            "description": "General information useful for labels coming from contributors.",
+            "id": "GoogleCloudDatalabelingV1beta1OperatorMetadata",
+            "properties": {
+                "comments": {
+                    "description": "Comments from contributors.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "labelVotes": {
+                    "description": "The total number of contributors that choose this label.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "score": {
+                    "description": "Confidence score corresponding to a label. For examle, if 3 contributors have answered the question and 2 of them agree on the final label, the confidence score will be 0.67 (2/3).",
+                    "format": "float",
+                    "type": "number"
+                },
+                "totalVotes": {
+                    "description": "The total number of contributors that answer this question.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
         },
-        "textClassificationConfig": {
-          "description": "Configuration for text classification task.",
-          "$ref": "GoogleCloudDatalabelingV1beta1TextClassificationConfig"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1AnnotatedDatasetMetadata",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1ObjectDetectionConfig": {
-      "id": "GoogleCloudDatalabelingV1beta1ObjectDetectionConfig",
-      "type": "object",
-      "description": "Config for video object detection human labeling task. Object detection will be conducted on the images extracted from the video, and those objects will be labeled with bounding boxes. User need to specify the number of images to be extracted per second as the extraction frame rate.",
-      "properties": {
-        "annotationSpecSet": {
-          "description": "Required. Annotation spec set resource name.",
-          "type": "string"
+        "GoogleCloudDatalabelingV1beta1OutputConfig": {
+            "description": "The configuration of output data.",
+            "id": "GoogleCloudDatalabelingV1beta1OutputConfig",
+            "properties": {
+                "gcsDestination": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1GcsDestination",
+                    "description": "Output to a file in Cloud Storage. Should be used for labeling output other than image segmentation."
+                },
+                "gcsFolderDestination": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1GcsFolderDestination",
+                    "description": "Output to a folder in Cloud Storage. Should be used for image segmentation or document de-identification labeling outputs."
+                }
+            },
+            "type": "object"
         },
-        "extractionFrameRate": {
-          "description": "Required. Number of frames per second to be extracted from the video.",
-          "type": "number",
-          "format": "double"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1NormalizedPolyline": {
-      "type": "object",
-      "properties": {
-        "normalizedVertices": {
-          "description": "The normalized polyline vertices.",
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1NormalizedVertex"
-          },
-          "type": "array"
-        }
-      },
-      "description": "Normalized polyline.",
-      "id": "GoogleCloudDatalabelingV1beta1NormalizedPolyline"
-    },
-    "GoogleCloudDatalabelingV1beta1ExportDataRequest": {
-      "id": "GoogleCloudDatalabelingV1beta1ExportDataRequest",
-      "type": "object",
-      "description": "Request message for ExportData API.",
-      "properties": {
-        "outputConfig": {
-          "description": "Required. Specify the output destination.",
-          "$ref": "GoogleCloudDatalabelingV1beta1OutputConfig"
+        "GoogleCloudDatalabelingV1beta1PauseEvaluationJobRequest": {
+            "description": "Request message for PauseEvaluationJob.",
+            "id": "GoogleCloudDatalabelingV1beta1PauseEvaluationJobRequest",
+            "properties": {},
+            "type": "object"
         },
-        "annotatedDataset": {
-          "type": "string",
-          "description": "Required. Annotated dataset resource name. DataItem in Dataset and their annotations in specified annotated dataset will be exported. It's in format of projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/ {annotated_dataset_id}"
+        "GoogleCloudDatalabelingV1beta1PdfInstruction": {
+            "description": "Instruction from a PDF file.",
+            "id": "GoogleCloudDatalabelingV1beta1PdfInstruction",
+            "properties": {
+                "gcsFileUri": {
+                    "description": "PDF file for the instruction. Only gcs path is allowed.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "userEmailAddress": {
-          "type": "string",
-          "description": "Email of the user who started the export task and should be notified by email. If empty no notification will be sent."
+        "GoogleCloudDatalabelingV1beta1Polyline": {
+            "description": "A line with multiple line segments.",
+            "id": "GoogleCloudDatalabelingV1beta1Polyline",
+            "properties": {
+                "vertices": {
+                    "description": "The polyline vertices.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1Vertex"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "filter": {
-          "type": "string",
-          "description": "Optional. Filter is not supported at this moment."
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1CsvInstruction": {
-      "type": "object",
-      "properties": {
-        "gcsFileUri": {
-          "type": "string",
-          "description": "CSV file for the instruction. Only gcs path is allowed."
-        }
-      },
-      "description": "Deprecated: this instruction format is not supported any more. Instruction from a CSV file.",
-      "id": "GoogleCloudDatalabelingV1beta1CsvInstruction"
-    },
-    "GoogleCloudDatalabelingV1beta1ImportDataOperationResponse": {
-      "properties": {
-        "totalCount": {
-          "description": "Output only. Total number of examples requested to import",
-          "format": "int32",
-          "type": "integer"
+        "GoogleCloudDatalabelingV1beta1PolylineConfig": {
+            "description": "Config for image polyline human labeling task.",
+            "id": "GoogleCloudDatalabelingV1beta1PolylineConfig",
+            "properties": {
+                "annotationSpecSet": {
+                    "description": "Required. Annotation spec set resource name.",
+                    "type": "string"
+                },
+                "instructionMessage": {
+                    "description": "Optional. Instruction message showed on contributors UI.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "importCount": {
-          "type": "integer",
-          "description": "Output only. Number of examples imported successfully.",
-          "format": "int32"
+        "GoogleCloudDatalabelingV1beta1PrCurve": {
+            "id": "GoogleCloudDatalabelingV1beta1PrCurve",
+            "properties": {
+                "annotationSpec": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec",
+                    "description": "The annotation spec of the label for which the precision-recall curve calculated. If this field is empty, that means the precision-recall curve is an aggregate curve for all labels."
+                },
+                "areaUnderCurve": {
+                    "description": "Area under the precision-recall curve. Not to be confused with area under a receiver operating characteristic (ROC) curve.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "confidenceMetricsEntries": {
+                    "description": "Entries that make up the precision-recall graph. Each entry is a \"point\" on the graph drawn for a different `confidence_threshold`.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1ConfidenceMetricsEntry"
+                    },
+                    "type": "array"
+                },
+                "meanAveragePrecision": {
+                    "description": "Mean average prcision of this curve.",
+                    "format": "float",
+                    "type": "number"
+                }
+            },
+            "type": "object"
         },
-        "dataset": {
-          "description": "Ouptut only. The name of imported dataset.",
-          "type": "string"
-        }
-      },
-      "description": "Response used for ImportData longrunning operation.",
-      "id": "GoogleCloudDatalabelingV1beta1ImportDataOperationResponse",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1EvaluationMetrics": {
-      "id": "GoogleCloudDatalabelingV1beta1EvaluationMetrics",
-      "properties": {
-        "objectDetectionMetrics": {
-          "$ref": "GoogleCloudDatalabelingV1beta1ObjectDetectionMetrics"
+        "GoogleCloudDatalabelingV1beta1RequesterFeedbackMetadata": {
+            "description": "Metadata describing the feedback from the labeling task requester.",
+            "id": "GoogleCloudDatalabelingV1beta1RequesterFeedbackMetadata",
+            "properties": {},
+            "type": "object"
         },
-        "classificationMetrics": {
-          "$ref": "GoogleCloudDatalabelingV1beta1ClassificationMetrics"
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1alpha1LabelImagePolylineOperationMetadata": {
-      "description": "Details of LabelImagePolyline operation metadata.",
-      "id": "GoogleCloudDatalabelingV1alpha1LabelImagePolylineOperationMetadata",
-      "type": "object",
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1alpha1LabelImageBoundingPolyOperationMetadata": {
-      "description": "Details of LabelImageBoundingPoly operation metadata.",
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig",
-          "description": "Basic human annotation config used in labeling request."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1alpha1LabelImageBoundingPolyOperationMetadata",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1p2alpha1LabelOperationMetadata": {
-      "type": "object",
-      "description": "Metadata of a labeling operation, such as LabelImage or LabelVideo. Next tag: 23",
-      "id": "GoogleCloudDatalabelingV1p2alpha1LabelOperationMetadata",
-      "properties": {
-        "createTime": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "Output only. Timestamp when labeling request was created."
+        "GoogleCloudDatalabelingV1beta1ResumeEvaluationJobRequest": {
+            "description": "Request message ResumeEvaluationJob.",
+            "id": "GoogleCloudDatalabelingV1beta1ResumeEvaluationJobRequest",
+            "properties": {},
+            "type": "object"
         },
-        "textClassificationDetails": {
-          "description": "Details of label text classification operation.",
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelTextClassificationOperationMetadata"
+        "GoogleCloudDatalabelingV1beta1Row": {
+            "description": "A row in the confusion matrix. Each entry in this row has the same ground truth label.",
+            "id": "GoogleCloudDatalabelingV1beta1Row",
+            "properties": {
+                "annotationSpec": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec",
+                    "description": "The annotation spec of the ground truth label for this row."
+                },
+                "entries": {
+                    "description": "A list of the confusion matrix entries. One entry for each possible predicted label.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1ConfusionMatrixEntry"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "dataset": {
-          "description": "Output only. The name of dataset to be labeled. \"projects/*/datasets/*\"",
-          "type": "string"
+        "GoogleCloudDatalabelingV1beta1SearchEvaluationsResponse": {
+            "description": "Results of searching evaluations.",
+            "id": "GoogleCloudDatalabelingV1beta1SearchEvaluationsResponse",
+            "properties": {
+                "evaluations": {
+                    "description": "The list of evaluations matching the search.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1Evaluation"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "A token to retrieve next page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "videoEventDetails": {
-          "description": "Details of label video event operation.",
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelVideoEventOperationMetadata"
+        "GoogleCloudDatalabelingV1beta1SearchExampleComparisonsRequest": {
+            "description": "Request message of SearchExampleComparisons.",
+            "id": "GoogleCloudDatalabelingV1beta1SearchExampleComparisonsRequest",
+            "properties": {
+                "pageSize": {
+                    "description": "Optional. Requested page size. Server may return fewer results than requested. Default value is 100.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "pageToken": {
+                    "description": "Optional. A token identifying a page of results for the server to return. Typically obtained by the nextPageToken of the response to a previous search rquest. If you don't specify this field, the API call requests the first page of the search.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "videoClassificationDetails": {
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelVideoClassificationOperationMetadata",
-          "description": "Details of label video classification operation."
+        "GoogleCloudDatalabelingV1beta1SearchExampleComparisonsResponse": {
+            "description": "Results of searching example comparisons.",
+            "id": "GoogleCloudDatalabelingV1beta1SearchExampleComparisonsResponse",
+            "properties": {
+                "exampleComparisons": {
+                    "description": "A list of example comparisons matching the search criteria.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1ExampleComparison"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "A token to retrieve next page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "imageClassificationDetails": {
-          "description": "Details of label image classification operation.",
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelImageClassificationOperationMetadata"
+        "GoogleCloudDatalabelingV1beta1SegmentationConfig": {
+            "description": "Config for image segmentation",
+            "id": "GoogleCloudDatalabelingV1beta1SegmentationConfig",
+            "properties": {
+                "annotationSpecSet": {
+                    "description": "Required. Annotation spec set resource name. format: projects/{project_id}/annotationSpecSets/{annotation_spec_set_id}",
+                    "type": "string"
+                },
+                "instructionMessage": {
+                    "description": "Instruction message showed on labelers UI.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "imageSegmentationDetails": {
-          "description": "Details of label image segmentation operation.",
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelImageSegmentationOperationMetadata"
+        "GoogleCloudDatalabelingV1beta1SentimentConfig": {
+            "description": "Config for setting up sentiments.",
+            "id": "GoogleCloudDatalabelingV1beta1SentimentConfig",
+            "properties": {
+                "enableLabelSentimentSelection": {
+                    "description": "If set to true, contributors will have the option to select sentiment of the label they selected, to mark it as negative or positive label. Default is false.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
         },
-        "imagePolylineDetails": {
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelImagePolylineOperationMetadata",
-          "description": "Details of label image polyline operation."
+        "GoogleCloudDatalabelingV1beta1SequentialSegment": {
+            "description": "Start and end position in a sequence (e.g. text segment).",
+            "id": "GoogleCloudDatalabelingV1beta1SequentialSegment",
+            "properties": {
+                "end": {
+                    "description": "End position (exclusive).",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "start": {
+                    "description": "Start position (inclusive).",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
         },
-        "annotatedDataset": {
-          "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\".",
-          "type": "string"
+        "GoogleCloudDatalabelingV1beta1TextClassificationAnnotation": {
+            "description": "Text classification annotation.",
+            "id": "GoogleCloudDatalabelingV1beta1TextClassificationAnnotation",
+            "properties": {
+                "annotationSpec": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec",
+                    "description": "Label of the text."
+                }
+            },
+            "type": "object"
         },
-        "videoObjectDetectionDetails": {
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelVideoObjectDetectionOperationMetadata",
-          "description": "Details of label video object detection operation."
+        "GoogleCloudDatalabelingV1beta1TextClassificationConfig": {
+            "description": "Config for text classification human labeling task.",
+            "id": "GoogleCloudDatalabelingV1beta1TextClassificationConfig",
+            "properties": {
+                "allowMultiLabel": {
+                    "description": "Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one text segment.",
+                    "type": "boolean"
+                },
+                "annotationSpecSet": {
+                    "description": "Required. Annotation spec set resource name.",
+                    "type": "string"
+                },
+                "sentimentConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1SentimentConfig",
+                    "description": "Optional. Configs for sentiment selection. We deprecate sentiment analysis in data labeling side as it is incompatible with uCAIP."
+                }
+            },
+            "type": "object"
         },
-        "imageBoundingBoxDetails": {
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelImageBoundingBoxOperationMetadata",
-          "description": "Details of label image bounding box operation."
+        "GoogleCloudDatalabelingV1beta1TextEntityExtractionAnnotation": {
+            "description": "Text entity extraction annotation.",
+            "id": "GoogleCloudDatalabelingV1beta1TextEntityExtractionAnnotation",
+            "properties": {
+                "annotationSpec": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec",
+                    "description": "Label of the text entities."
+                },
+                "sequentialSegment": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1SequentialSegment",
+                    "description": "Position of the entity."
+                }
+            },
+            "type": "object"
         },
-        "textEntityExtractionDetails": {
-          "description": "Details of label text entity extraction operation.",
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelTextEntityExtractionOperationMetadata"
+        "GoogleCloudDatalabelingV1beta1TextEntityExtractionConfig": {
+            "description": "Config for text entity extraction human labeling task.",
+            "id": "GoogleCloudDatalabelingV1beta1TextEntityExtractionConfig",
+            "properties": {
+                "annotationSpecSet": {
+                    "description": "Required. Annotation spec set resource name.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "videoObjectTrackingDetails": {
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelVideoObjectTrackingOperationMetadata",
-          "description": "Details of label video object tracking operation."
+        "GoogleCloudDatalabelingV1beta1TextMetadata": {
+            "description": "Metadata for the text.",
+            "id": "GoogleCloudDatalabelingV1beta1TextMetadata",
+            "properties": {
+                "languageCode": {
+                    "description": "The language of this text, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "imageBoundingPolyDetails": {
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelImageBoundingPolyOperationMetadata",
-          "description": "Details of label image bounding poly operation."
+        "GoogleCloudDatalabelingV1beta1TextPayload": {
+            "description": "Container of information about a piece of text.",
+            "id": "GoogleCloudDatalabelingV1beta1TextPayload",
+            "properties": {
+                "textContent": {
+                    "description": "Text content.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "progressPercent": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Output only. Progress of label operation. Range: [0, 100]."
+        "GoogleCloudDatalabelingV1beta1TimeSegment": {
+            "description": "A time period inside of an example that has a time dimension (e.g. video).",
+            "id": "GoogleCloudDatalabelingV1beta1TimeSegment",
+            "properties": {
+                "endTimeOffset": {
+                    "description": "End of the time segment (exclusive), represented as the duration since the example start.",
+                    "format": "google-duration",
+                    "type": "string"
+                },
+                "startTimeOffset": {
+                    "description": "Start of the time segment (inclusive), represented as the duration since the example start.",
+                    "format": "google-duration",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "imageOrientedBoundingBoxDetails": {
-          "description": "Details of label image oriented bounding box operation.",
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelImageOrientedBoundingBoxOperationMetadata"
+        "GoogleCloudDatalabelingV1beta1Vertex": {
+            "description": "A vertex represents a 2D point in the image. NOTE: the vertex coordinates are in the same scale as the original image.",
+            "id": "GoogleCloudDatalabelingV1beta1Vertex",
+            "properties": {
+                "x": {
+                    "description": "X coordinate.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "y": {
+                    "description": "Y coordinate.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
         },
-        "partialFailures": {
-          "items": {
-            "$ref": "GoogleRpcStatus"
-          },
-          "type": "array",
-          "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details."
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1LabelTextRequest": {
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1beta1LabelTextRequest",
-      "properties": {
-        "feature": {
-          "enum": [
-            "FEATURE_UNSPECIFIED",
-            "TEXT_CLASSIFICATION",
-            "TEXT_ENTITY_EXTRACTION"
-          ],
-          "enumDescriptions": [
-            "",
-            "Label text content to one of more labels.",
-            "Label entities and their span in text."
-          ],
-          "description": "Required. The type of text labeling task.",
-          "type": "string"
+        "GoogleCloudDatalabelingV1beta1VideoClassificationAnnotation": {
+            "description": "Video classification annotation.",
+            "id": "GoogleCloudDatalabelingV1beta1VideoClassificationAnnotation",
+            "properties": {
+                "annotationSpec": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec",
+                    "description": "Label of the segment specified by time_segment."
+                },
+                "timeSegment": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1TimeSegment",
+                    "description": "The time segment of the video to which the annotation applies."
+                }
+            },
+            "type": "object"
         },
-        "textEntityExtractionConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1TextEntityExtractionConfig",
-          "description": "Configuration for entity extraction task. One of text_classification_config and text_entity_extraction_config is required."
+        "GoogleCloudDatalabelingV1beta1VideoClassificationConfig": {
+            "description": "Config for video classification human labeling task. Currently two types of video classification are supported: 1. Assign labels on the entire video. 2. Split the video into multiple video clips based on camera shot, and assign labels on each video clip.",
+            "id": "GoogleCloudDatalabelingV1beta1VideoClassificationConfig",
+            "properties": {
+                "annotationSpecSetConfigs": {
+                    "description": "Required. The list of annotation spec set configs. Since watching a video clip takes much longer time than an image, we support label with multiple AnnotationSpecSet at the same time. Labels in each AnnotationSpecSet will be shown in a group to contributors. Contributors can select one or more (depending on whether to allow multi label) from each group.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpecSetConfig"
+                    },
+                    "type": "array"
+                },
+                "applyShotDetection": {
+                    "description": "Optional. Option to apply shot detection on the video.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
         },
-        "textClassificationConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1TextClassificationConfig",
-          "description": "Configuration for text classification task. One of text_classification_config and text_entity_extraction_config is required."
+        "GoogleCloudDatalabelingV1beta1VideoEventAnnotation": {
+            "description": "Video event annotation.",
+            "id": "GoogleCloudDatalabelingV1beta1VideoEventAnnotation",
+            "properties": {
+                "annotationSpec": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec",
+                    "description": "Label of the event in this annotation."
+                },
+                "timeSegment": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1TimeSegment",
+                    "description": "The time segment of the video to which the annotation applies."
+                }
+            },
+            "type": "object"
         },
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
-          "description": "Required. Basic human annotation config."
-        }
-      },
-      "description": "Request message for LabelText."
-    },
-    "GoogleCloudDatalabelingV1beta1ExportDataOperationMetadata": {
-      "id": "GoogleCloudDatalabelingV1beta1ExportDataOperationMetadata",
-      "type": "object",
-      "properties": {
-        "createTime": {
-          "description": "Output only. Timestamp when export dataset request was created.",
-          "format": "google-datetime",
-          "type": "string"
+        "GoogleCloudDatalabelingV1beta1VideoObjectTrackingAnnotation": {
+            "description": "Video object tracking annotation.",
+            "id": "GoogleCloudDatalabelingV1beta1VideoObjectTrackingAnnotation",
+            "properties": {
+                "annotationSpec": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec",
+                    "description": "Label of the object tracked in this annotation."
+                },
+                "objectTrackingFrames": {
+                    "description": "The list of frames where this object track appears.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1ObjectTrackingFrame"
+                    },
+                    "type": "array"
+                },
+                "timeSegment": {
+                    "$ref": "GoogleCloudDatalabelingV1beta1TimeSegment",
+                    "description": "The time segment of the video to which object tracking applies."
+                }
+            },
+            "type": "object"
         },
-        "annotatedDataset": {
-          "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\".",
-          "type": "string"
+        "GoogleCloudDatalabelingV1beta1VideoPayload": {
+            "description": "Container of information of a video.",
+            "id": "GoogleCloudDatalabelingV1beta1VideoPayload",
+            "properties": {
+                "frameRate": {
+                    "description": "FPS of the video.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "mimeType": {
+                    "description": "Video format.",
+                    "type": "string"
+                },
+                "signedUri": {
+                    "description": "Signed uri of the video file in the service bucket.",
+                    "type": "string"
+                },
+                "videoThumbnails": {
+                    "description": "The list of video thumbnails.",
+                    "items": {
+                        "$ref": "GoogleCloudDatalabelingV1beta1VideoThumbnail"
+                    },
+                    "type": "array"
+                },
+                "videoUri": {
+                    "description": "Video uri from the user bucket.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "partialFailures": {
-          "type": "array",
-          "items": {
-            "$ref": "GoogleRpcStatus"
-          },
-          "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details."
+        "GoogleCloudDatalabelingV1beta1VideoThumbnail": {
+            "description": "Container of information of a video thumbnail.",
+            "id": "GoogleCloudDatalabelingV1beta1VideoThumbnail",
+            "properties": {
+                "thumbnail": {
+                    "description": "A byte string of the video frame.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "timeOffset": {
+                    "description": "Time offset relative to the beginning of the video, corresponding to the video frame where the thumbnail has been extracted from.",
+                    "format": "google-duration",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "dataset": {
-          "type": "string",
-          "description": "Output only. The name of dataset to be exported. \"projects/*/datasets/*\""
-        }
-      },
-      "description": "Metadata of an ExportData operation."
-    },
-    "GoogleCloudDatalabelingV1p2alpha1CreateInstructionMetadata": {
-      "id": "GoogleCloudDatalabelingV1p2alpha1CreateInstructionMetadata",
-      "type": "object",
-      "properties": {
-        "createTime": {
-          "format": "google-datetime",
-          "description": "Timestamp when create instruction request was created.",
-          "type": "string"
+        "GoogleCloudDatalabelingV1p1alpha1CreateInstructionMetadata": {
+            "description": "Metadata of a CreateInstruction operation.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1CreateInstructionMetadata",
+            "properties": {
+                "createTime": {
+                    "description": "Timestamp when create instruction request was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "instruction": {
+                    "description": "The name of the created Instruction. projects/{project_id}/instructions/{instruction_id}",
+                    "type": "string"
+                },
+                "partialFailures": {
+                    "description": "Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
+                    "items": {
+                        "$ref": "GoogleRpcStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "instruction": {
-          "description": "The name of the created Instruction. projects/{project_id}/instructions/{instruction_id}",
-          "type": "string"
+        "GoogleCloudDatalabelingV1p1alpha1ExportDataOperationMetadata": {
+            "description": "Metadata of an ExportData operation.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1ExportDataOperationMetadata",
+            "properties": {
+                "annotatedDataset": {
+                    "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\".",
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "Output only. Timestamp when export dataset request was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "dataset": {
+                    "description": "Output only. The name of dataset to be exported. \"projects/*/datasets/*\"",
+                    "type": "string"
+                },
+                "partialFailures": {
+                    "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
+                    "items": {
+                        "$ref": "GoogleRpcStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "partialFailures": {
-          "description": "Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleRpcStatus"
-          }
-        }
-      },
-      "description": "Metadata of a CreateInstruction operation."
-    },
-    "GoogleCloudDatalabelingV1p2alpha1LabelStats": {
-      "id": "GoogleCloudDatalabelingV1p2alpha1LabelStats",
-      "description": "Statistics about annotation specs.",
-      "type": "object",
-      "properties": {
-        "exampleCount": {
-          "additionalProperties": {
-            "format": "int64",
-            "type": "string"
-          },
-          "description": "Map of each annotation spec's example count. Key is the annotation spec name and value is the number of examples for that annotation spec. If the annotated dataset does not have annotation spec, the map will return a pair where the key is empty string and value is the total number of annotations.",
-          "type": "object"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1alpha1ExportDataOperationMetadata": {
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1alpha1ExportDataOperationMetadata",
-      "properties": {
-        "createTime": {
-          "format": "google-datetime",
-          "description": "Output only. Timestamp when export dataset request was created.",
-          "type": "string"
+        "GoogleCloudDatalabelingV1p1alpha1ExportDataOperationResponse": {
+            "description": "Response used for ExportDataset longrunning operation.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1ExportDataOperationResponse",
+            "properties": {
+                "annotatedDataset": {
+                    "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\".",
+                    "type": "string"
+                },
+                "dataset": {
+                    "description": "Ouptut only. The name of dataset. \"projects/*/datasets/*\"",
+                    "type": "string"
+                },
+                "exportCount": {
+                    "description": "Output only. Number of examples exported successfully.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "labelStats": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelStats",
+                    "description": "Output only. Statistic infos of labels in the exported dataset."
+                },
+                "outputConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1OutputConfig",
+                    "description": "Output only. output_config in the ExportData request."
+                },
+                "totalCount": {
+                    "description": "Output only. Total number of examples requested to export",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
         },
-        "annotatedDataset": {
-          "type": "string",
-          "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\"."
+        "GoogleCloudDatalabelingV1p1alpha1GcsDestination": {
+            "description": "Export destination of the data.Only gcs path is allowed in output_uri.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1GcsDestination",
+            "properties": {
+                "mimeType": {
+                    "description": "Required. The format of the gcs destination. Only \"text/csv\" and \"application/json\" are supported.",
+                    "type": "string"
+                },
+                "outputUri": {
+                    "description": "Required. The output uri of destination file.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "partialFailures": {
-          "type": "array",
-          "items": {
-            "$ref": "GoogleRpcStatus"
-          },
-          "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details."
+        "GoogleCloudDatalabelingV1p1alpha1GcsFolderDestination": {
+            "description": "Export folder destination of the data.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1GcsFolderDestination",
+            "properties": {
+                "outputFolderUri": {
+                    "description": "Required. Cloud Storage directory to export data to.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "dataset": {
-          "description": "Output only. The name of dataset to be exported. \"projects/*/datasets/*\"",
-          "type": "string"
-        }
-      },
-      "description": "Metadata of an ExportData operation."
-    },
-    "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig": {
-      "type": "object",
-      "properties": {
-        "instruction": {
-          "type": "string",
-          "description": "Required. Instruction resource name."
+        "GoogleCloudDatalabelingV1p1alpha1GenerateAnalysisReportOperationMetadata": {
+            "description": "Metadata of an GenerateAnalysisReport operation.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1GenerateAnalysisReportOperationMetadata",
+            "properties": {
+                "createTime": {
+                    "description": "Timestamp when generate report request was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "dataset": {
+                    "description": "The name of the dataset for which the analysis report is generated. Format: \"projects/*/datasets/*\"",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "questionDuration": {
-          "description": "Optional. Maximum duration for contributors to answer a question. Maximum is 3600 seconds. Default is 3600 seconds.",
-          "format": "google-duration",
-          "type": "string"
+        "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig": {
+            "description": "Configuration for how human labeling task should be done.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig",
+            "properties": {
+                "annotatedDatasetDescription": {
+                    "description": "Optional. A human-readable description for AnnotatedDataset. The description can be up to 10000 characters long.",
+                    "type": "string"
+                },
+                "annotatedDatasetDisplayName": {
+                    "description": "Required. A human-readable name for AnnotatedDataset defined by users. Maximum of 64 characters .",
+                    "type": "string"
+                },
+                "contributorEmails": {
+                    "description": "Optional. If you want your own labeling contributors to manage and work on this labeling request, you can set these contributors here. We will give them access to the question types in crowdcompute. Note that these emails must be registered in crowdcompute worker UI: https://crowd-compute.appspot.com/",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "instruction": {
+                    "description": "Required. Instruction resource name.",
+                    "type": "string"
+                },
+                "labelGroup": {
+                    "description": "Optional. A human-readable label used to logically group labeling tasks. This string must match the regular expression `[a-zA-Z\\\\d_-]{0,128}`.",
+                    "type": "string"
+                },
+                "languageCode": {
+                    "description": "Optional. The Language of this question, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US. Only need to set this when task is language related. For example, French text classification.",
+                    "type": "string"
+                },
+                "questionDuration": {
+                    "description": "Optional. Maximum duration for contributors to answer a question. Maximum is 3600 seconds. Default is 3600 seconds.",
+                    "format": "google-duration",
+                    "type": "string"
+                },
+                "replicaCount": {
+                    "description": "Optional. Replication of questions. Each question will be sent to up to this number of contributors to label. Aggregated answers will be returned. Default is set to 1. For image related labeling, valid values are 1, 3, 5.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "userEmailAddress": {
+                    "description": "Email of the user who started the labeling task and should be notified by email. If empty no notification will be sent.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "userEmailAddress": {
-          "description": "Email of the user who started the labeling task and should be notified by email. If empty no notification will be sent.",
-          "type": "string"
+        "GoogleCloudDatalabelingV1p1alpha1ImportDataOperationMetadata": {
+            "description": "Metadata of an ImportData operation.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1ImportDataOperationMetadata",
+            "properties": {
+                "createTime": {
+                    "description": "Output only. Timestamp when import dataset request was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "dataset": {
+                    "description": "Output only. The name of imported dataset. \"projects/*/datasets/*\"",
+                    "type": "string"
+                },
+                "partialFailures": {
+                    "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
+                    "items": {
+                        "$ref": "GoogleRpcStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "languageCode": {
-          "type": "string",
-          "description": "Optional. The Language of this question, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US. Only need to set this when task is language related. For example, French text classification."
+        "GoogleCloudDatalabelingV1p1alpha1ImportDataOperationResponse": {
+            "description": "Response used for ImportData longrunning operation.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1ImportDataOperationResponse",
+            "properties": {
+                "dataset": {
+                    "description": "Ouptut only. The name of imported dataset.",
+                    "type": "string"
+                },
+                "importCount": {
+                    "description": "Output only. Number of examples imported successfully.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalCount": {
+                    "description": "Output only. Total number of examples requested to import",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
         },
-        "replicaCount": {
-          "description": "Optional. Replication of questions. Each question will be sent to up to this number of contributors to label. Aggregated answers will be returned. Default is set to 1. For image related labeling, valid values are 1, 3, 5.",
-          "type": "integer",
-          "format": "int32"
+        "GoogleCloudDatalabelingV1p1alpha1LabelImageBoundingBoxOperationMetadata": {
+            "description": "Details of a LabelImageBoundingBox operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1LabelImageBoundingBoxOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "annotatedDatasetDisplayName": {
-          "description": "Required. A human-readable name for AnnotatedDataset defined by users. Maximum of 64 characters .",
-          "type": "string"
+        "GoogleCloudDatalabelingV1p1alpha1LabelImageBoundingPolyOperationMetadata": {
+            "description": "Details of LabelImageBoundingPoly operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1LabelImageBoundingPolyOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "labelGroup": {
-          "description": "Optional. A human-readable label used to logically group labeling tasks. This string must match the regular expression `[a-zA-Z\\\\d_-]{0,128}`.",
-          "type": "string"
+        "GoogleCloudDatalabelingV1p1alpha1LabelImageClassificationOperationMetadata": {
+            "description": "Metadata of a LabelImageClassification operation.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1LabelImageClassificationOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "contributorEmails": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "Optional. If you want your own labeling contributors to manage and work on this labeling request, you can set these contributors here. We will give them access to the question types in crowdcompute. Note that these emails must be registered in crowdcompute worker UI: https://crowd-compute.appspot.com/"
+        "GoogleCloudDatalabelingV1p1alpha1LabelImageOrientedBoundingBoxOperationMetadata": {
+            "description": "Details of a LabelImageOrientedBoundingBox operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1LabelImageOrientedBoundingBoxOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config."
+                }
+            },
+            "type": "object"
         },
-        "annotatedDatasetDescription": {
-          "description": "Optional. A human-readable description for AnnotatedDataset. The description can be up to 10000 characters long.",
-          "type": "string"
-        }
-      },
-      "description": "Configuration for how human labeling task should be done.",
-      "id": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig"
-    },
-    "GoogleCloudDatalabelingV1beta1GcsDestination": {
-      "properties": {
-        "outputUri": {
-          "description": "Required. The output uri of destination file.",
-          "type": "string"
+        "GoogleCloudDatalabelingV1p1alpha1LabelImagePolylineOperationMetadata": {
+            "description": "Details of LabelImagePolyline operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1LabelImagePolylineOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "mimeType": {
-          "description": "Required. The format of the gcs destination. Only \"text/csv\" and \"application/json\" are supported.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Export destination of the data.Only gcs path is allowed in output_uri.",
-      "id": "GoogleCloudDatalabelingV1beta1GcsDestination"
-    },
-    "GoogleCloudDatalabelingV1beta1VideoClassificationConfig": {
-      "description": "Config for video classification human labeling task. Currently two types of video classification are supported: 1. Assign labels on the entire video. 2. Split the video into multiple video clips based on camera shot, and assign labels on each video clip.",
-      "properties": {
-        "annotationSpecSetConfigs": {
-          "description": "Required. The list of annotation spec set configs. Since watching a video clip takes much longer time than an image, we support label with multiple AnnotationSpecSet at the same time. Labels in each AnnotationSpecSet will be shown in a group to contributors. Contributors can select one or more (depending on whether to allow multi label) from each group.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpecSetConfig"
-          }
+        "GoogleCloudDatalabelingV1p1alpha1LabelImageSegmentationOperationMetadata": {
+            "description": "Details of a LabelImageSegmentation operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1LabelImageSegmentationOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config."
+                }
+            },
+            "type": "object"
         },
-        "applyShotDetection": {
-          "description": "Optional. Option to apply shot detection on the video.",
-          "type": "boolean"
-        }
-      },
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1beta1VideoClassificationConfig"
-    },
-    "GoogleCloudDatalabelingV1beta1ImageClassificationConfig": {
-      "description": "Config for image classification human labeling task.",
-      "properties": {
-        "annotationSpecSet": {
-          "type": "string",
-          "description": "Required. Annotation spec set resource name."
+        "GoogleCloudDatalabelingV1p1alpha1LabelOperationMetadata": {
+            "description": "Metadata of a labeling operation, such as LabelImage or LabelVideo. Next tag: 23",
+            "id": "GoogleCloudDatalabelingV1p1alpha1LabelOperationMetadata",
+            "properties": {
+                "annotatedDataset": {
+                    "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\".",
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "Output only. Timestamp when labeling request was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "dataset": {
+                    "description": "Output only. The name of dataset to be labeled. \"projects/*/datasets/*\"",
+                    "type": "string"
+                },
+                "imageBoundingBoxDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelImageBoundingBoxOperationMetadata",
+                    "description": "Details of label image bounding box operation."
+                },
+                "imageBoundingPolyDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelImageBoundingPolyOperationMetadata",
+                    "description": "Details of label image bounding poly operation."
+                },
+                "imageClassificationDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelImageClassificationOperationMetadata",
+                    "description": "Details of label image classification operation."
+                },
+                "imageOrientedBoundingBoxDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelImageOrientedBoundingBoxOperationMetadata",
+                    "description": "Details of label image oriented bounding box operation."
+                },
+                "imagePolylineDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelImagePolylineOperationMetadata",
+                    "description": "Details of label image polyline operation."
+                },
+                "imageSegmentationDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelImageSegmentationOperationMetadata",
+                    "description": "Details of label image segmentation operation."
+                },
+                "partialFailures": {
+                    "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
+                    "items": {
+                        "$ref": "GoogleRpcStatus"
+                    },
+                    "type": "array"
+                },
+                "progressPercent": {
+                    "description": "Output only. Progress of label operation. Range: [0, 100].",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "textClassificationDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelTextClassificationOperationMetadata",
+                    "description": "Details of label text classification operation."
+                },
+                "textEntityExtractionDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelTextEntityExtractionOperationMetadata",
+                    "description": "Details of label text entity extraction operation."
+                },
+                "videoClassificationDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelVideoClassificationOperationMetadata",
+                    "description": "Details of label video classification operation."
+                },
+                "videoEventDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelVideoEventOperationMetadata",
+                    "description": "Details of label video event operation."
+                },
+                "videoObjectDetectionDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelVideoObjectDetectionOperationMetadata",
+                    "description": "Details of label video object detection operation."
+                },
+                "videoObjectTrackingDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelVideoObjectTrackingOperationMetadata",
+                    "description": "Details of label video object tracking operation."
+                }
+            },
+            "type": "object"
         },
-        "allowMultiLabel": {
-          "type": "boolean",
-          "description": "Optional. If allow_multi_label is true, contributors are able to choose multiple labels for one image."
+        "GoogleCloudDatalabelingV1p1alpha1LabelStats": {
+            "description": "Statistics about annotation specs.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1LabelStats",
+            "properties": {
+                "exampleCount": {
+                    "additionalProperties": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "description": "Map of each annotation spec's example count. Key is the annotation spec name and value is the number of examples for that annotation spec. If the annotated dataset does not have annotation spec, the map will return a pair where the key is empty string and value is the total number of annotations.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
         },
-        "answerAggregationType": {
-          "description": "Optional. The type of how to aggregate answers.",
-          "enum": [
-            "STRING_AGGREGATION_TYPE_UNSPECIFIED",
-            "MAJORITY_VOTE",
-            "UNANIMOUS_VOTE",
-            "NO_AGGREGATION"
-          ],
-          "enumDescriptions": [
-            "",
-            "Majority vote to aggregate answers.",
-            "Unanimous answers will be adopted.",
-            "Preserve all answers by crowd compute."
-          ],
-          "type": "string"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1ImageClassificationConfig",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1p1alpha1LabelOperationMetadata": {
-      "type": "object",
-      "description": "Metadata of a labeling operation, such as LabelImage or LabelVideo. Next tag: 23",
-      "id": "GoogleCloudDatalabelingV1p1alpha1LabelOperationMetadata",
-      "properties": {
-        "videoEventDetails": {
-          "description": "Details of label video event operation.",
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelVideoEventOperationMetadata"
+        "GoogleCloudDatalabelingV1p1alpha1LabelTextClassificationOperationMetadata": {
+            "description": "Details of a LabelTextClassification operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1LabelTextClassificationOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "videoClassificationDetails": {
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelVideoClassificationOperationMetadata",
-          "description": "Details of label video classification operation."
+        "GoogleCloudDatalabelingV1p1alpha1LabelTextEntityExtractionOperationMetadata": {
+            "description": "Details of a LabelTextEntityExtraction operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1LabelTextEntityExtractionOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "createTime": {
-          "type": "string",
-          "description": "Output only. Timestamp when labeling request was created.",
-          "format": "google-datetime"
+        "GoogleCloudDatalabelingV1p1alpha1LabelVideoClassificationOperationMetadata": {
+            "description": "Details of a LabelVideoClassification operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1LabelVideoClassificationOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "progressPercent": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Output only. Progress of label operation. Range: [0, 100]."
+        "GoogleCloudDatalabelingV1p1alpha1LabelVideoEventOperationMetadata": {
+            "description": "Details of a LabelVideoEvent operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1LabelVideoEventOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "imagePolylineDetails": {
-          "description": "Details of label image polyline operation.",
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelImagePolylineOperationMetadata"
+        "GoogleCloudDatalabelingV1p1alpha1LabelVideoObjectDetectionOperationMetadata": {
+            "description": "Details of a LabelVideoObjectDetection operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1LabelVideoObjectDetectionOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "imageBoundingPolyDetails": {
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelImageBoundingPolyOperationMetadata",
-          "description": "Details of label image bounding poly operation."
+        "GoogleCloudDatalabelingV1p1alpha1LabelVideoObjectTrackingOperationMetadata": {
+            "description": "Details of a LabelVideoObjectTracking operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1LabelVideoObjectTrackingOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "imageOrientedBoundingBoxDetails": {
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelImageOrientedBoundingBoxOperationMetadata",
-          "description": "Details of label image oriented bounding box operation."
+        "GoogleCloudDatalabelingV1p1alpha1OutputConfig": {
+            "description": "The configuration of output data.",
+            "id": "GoogleCloudDatalabelingV1p1alpha1OutputConfig",
+            "properties": {
+                "gcsDestination": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1GcsDestination",
+                    "description": "Output to a file in Cloud Storage. Should be used for labeling output other than image segmentation."
+                },
+                "gcsFolderDestination": {
+                    "$ref": "GoogleCloudDatalabelingV1p1alpha1GcsFolderDestination",
+                    "description": "Output to a folder in Cloud Storage. Should be used for image segmentation or document de-identification labeling outputs."
+                }
+            },
+            "type": "object"
         },
-        "imageBoundingBoxDetails": {
-          "description": "Details of label image bounding box operation.",
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelImageBoundingBoxOperationMetadata"
+        "GoogleCloudDatalabelingV1p2alpha1CreateInstructionMetadata": {
+            "description": "Metadata of a CreateInstruction operation.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1CreateInstructionMetadata",
+            "properties": {
+                "createTime": {
+                    "description": "Timestamp when create instruction request was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "instruction": {
+                    "description": "The name of the created Instruction. projects/{project_id}/instructions/{instruction_id}",
+                    "type": "string"
+                },
+                "partialFailures": {
+                    "description": "Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
+                    "items": {
+                        "$ref": "GoogleRpcStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "videoObjectDetectionDetails": {
-          "description": "Details of label video object detection operation.",
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelVideoObjectDetectionOperationMetadata"
+        "GoogleCloudDatalabelingV1p2alpha1ExportDataOperationMetadata": {
+            "description": "Metadata of an ExportData operation.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1ExportDataOperationMetadata",
+            "properties": {
+                "annotatedDataset": {
+                    "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\".",
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "Output only. Timestamp when export dataset request was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "dataset": {
+                    "description": "Output only. The name of dataset to be exported. \"projects/*/datasets/*\"",
+                    "type": "string"
+                },
+                "partialFailures": {
+                    "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
+                    "items": {
+                        "$ref": "GoogleRpcStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "dataset": {
-          "description": "Output only. The name of dataset to be labeled. \"projects/*/datasets/*\"",
-          "type": "string"
+        "GoogleCloudDatalabelingV1p2alpha1ExportDataOperationResponse": {
+            "description": "Response used for ExportDataset longrunning operation.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1ExportDataOperationResponse",
+            "properties": {
+                "annotatedDataset": {
+                    "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\".",
+                    "type": "string"
+                },
+                "dataset": {
+                    "description": "Ouptut only. The name of dataset. \"projects/*/datasets/*\"",
+                    "type": "string"
+                },
+                "exportCount": {
+                    "description": "Output only. Number of examples exported successfully.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "labelStats": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelStats",
+                    "description": "Output only. Statistic infos of labels in the exported dataset."
+                },
+                "outputConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1OutputConfig",
+                    "description": "Output only. output_config in the ExportData request."
+                },
+                "totalCount": {
+                    "description": "Output only. Total number of examples requested to export",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
         },
-        "annotatedDataset": {
-          "type": "string",
-          "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\"."
+        "GoogleCloudDatalabelingV1p2alpha1GcsDestination": {
+            "description": "Export destination of the data.Only gcs path is allowed in output_uri.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1GcsDestination",
+            "properties": {
+                "mimeType": {
+                    "description": "Required. The format of the gcs destination. Only \"text/csv\" and \"application/json\" are supported.",
+                    "type": "string"
+                },
+                "outputUri": {
+                    "description": "Required. The output uri of destination file.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "videoObjectTrackingDetails": {
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelVideoObjectTrackingOperationMetadata",
-          "description": "Details of label video object tracking operation."
+        "GoogleCloudDatalabelingV1p2alpha1GcsFolderDestination": {
+            "description": "Export folder destination of the data.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1GcsFolderDestination",
+            "properties": {
+                "outputFolderUri": {
+                    "description": "Required. Cloud Storage directory to export data to.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "textEntityExtractionDetails": {
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelTextEntityExtractionOperationMetadata",
-          "description": "Details of label text entity extraction operation."
+        "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig": {
+            "description": "Configuration for how human labeling task should be done.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig",
+            "properties": {
+                "annotatedDatasetDescription": {
+                    "description": "Optional. A human-readable description for AnnotatedDataset. The description can be up to 10000 characters long.",
+                    "type": "string"
+                },
+                "annotatedDatasetDisplayName": {
+                    "description": "Required. A human-readable name for AnnotatedDataset defined by users. Maximum of 64 characters .",
+                    "type": "string"
+                },
+                "contributorEmails": {
+                    "description": "Optional. If you want your own labeling contributors to manage and work on this labeling request, you can set these contributors here. We will give them access to the question types in crowdcompute. Note that these emails must be registered in crowdcompute worker UI: https://crowd-compute.appspot.com/",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "instruction": {
+                    "description": "Required. Instruction resource name.",
+                    "type": "string"
+                },
+                "labelGroup": {
+                    "description": "Optional. A human-readable label used to logically group labeling tasks. This string must match the regular expression `[a-zA-Z\\\\d_-]{0,128}`.",
+                    "type": "string"
+                },
+                "languageCode": {
+                    "description": "Optional. The Language of this question, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US. Only need to set this when task is language related. For example, French text classification.",
+                    "type": "string"
+                },
+                "questionDuration": {
+                    "description": "Optional. Maximum duration for contributors to answer a question. Maximum is 3600 seconds. Default is 3600 seconds.",
+                    "format": "google-duration",
+                    "type": "string"
+                },
+                "replicaCount": {
+                    "description": "Optional. Replication of questions. Each question will be sent to up to this number of contributors to label. Aggregated answers will be returned. Default is set to 1. For image related labeling, valid values are 1, 3, 5.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "userEmailAddress": {
+                    "description": "Email of the user who started the labeling task and should be notified by email. If empty no notification will be sent.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "imageSegmentationDetails": {
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelImageSegmentationOperationMetadata",
-          "description": "Details of label image segmentation operation."
+        "GoogleCloudDatalabelingV1p2alpha1ImportDataOperationMetadata": {
+            "description": "Metadata of an ImportData operation.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1ImportDataOperationMetadata",
+            "properties": {
+                "createTime": {
+                    "description": "Output only. Timestamp when import dataset request was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "dataset": {
+                    "description": "Output only. The name of imported dataset. \"projects/*/datasets/*\"",
+                    "type": "string"
+                },
+                "partialFailures": {
+                    "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
+                    "items": {
+                        "$ref": "GoogleRpcStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "partialFailures": {
-          "type": "array",
-          "items": {
-            "$ref": "GoogleRpcStatus"
-          },
-          "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details."
+        "GoogleCloudDatalabelingV1p2alpha1ImportDataOperationResponse": {
+            "description": "Response used for ImportData longrunning operation.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1ImportDataOperationResponse",
+            "properties": {
+                "dataset": {
+                    "description": "Ouptut only. The name of imported dataset.",
+                    "type": "string"
+                },
+                "importCount": {
+                    "description": "Output only. Number of examples imported successfully.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "totalCount": {
+                    "description": "Output only. Total number of examples requested to import",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
         },
-        "imageClassificationDetails": {
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelImageClassificationOperationMetadata",
-          "description": "Details of label image classification operation."
+        "GoogleCloudDatalabelingV1p2alpha1LabelImageBoundingBoxOperationMetadata": {
+            "description": "Details of a LabelImageBoundingBox operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1LabelImageBoundingBoxOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "textClassificationDetails": {
-          "description": "Details of label text classification operation.",
-          "$ref": "GoogleCloudDatalabelingV1p1alpha1LabelTextClassificationOperationMetadata"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1alpha1LabelVideoClassificationOperationMetadata": {
-      "id": "GoogleCloudDatalabelingV1alpha1LabelVideoClassificationOperationMetadata",
-      "description": "Details of a LabelVideoClassification operation metadata.",
-      "type": "object",
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1ConfusionMatrix": {
-      "description": "Confusion matrix of the model running the classification. Only applicable when the metrics entry aggregates multiple labels. Not applicable when the entry is for a single label.",
-      "id": "GoogleCloudDatalabelingV1beta1ConfusionMatrix",
-      "type": "object",
-      "properties": {
-        "row": {
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1Row"
-          }
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig": {
-      "id": "GoogleCloudDatalabelingV1p1alpha1HumanAnnotationConfig",
-      "description": "Configuration for how human labeling task should be done.",
-      "properties": {
-        "labelGroup": {
-          "description": "Optional. A human-readable label used to logically group labeling tasks. This string must match the regular expression `[a-zA-Z\\\\d_-]{0,128}`.",
-          "type": "string"
+        "GoogleCloudDatalabelingV1p2alpha1LabelImageBoundingPolyOperationMetadata": {
+            "description": "Details of LabelImageBoundingPoly operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1LabelImageBoundingPolyOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "contributorEmails": {
-          "items": {
-            "type": "string"
-          },
-          "description": "Optional. If you want your own labeling contributors to manage and work on this labeling request, you can set these contributors here. We will give them access to the question types in crowdcompute. Note that these emails must be registered in crowdcompute worker UI: https://crowd-compute.appspot.com/",
-          "type": "array"
+        "GoogleCloudDatalabelingV1p2alpha1LabelImageClassificationOperationMetadata": {
+            "description": "Metadata of a LabelImageClassification operation.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1LabelImageClassificationOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "annotatedDatasetDescription": {
-          "type": "string",
-          "description": "Optional. A human-readable description for AnnotatedDataset. The description can be up to 10000 characters long."
+        "GoogleCloudDatalabelingV1p2alpha1LabelImageOrientedBoundingBoxOperationMetadata": {
+            "description": "Details of a LabelImageOrientedBoundingBox operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1LabelImageOrientedBoundingBoxOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config."
+                }
+            },
+            "type": "object"
         },
-        "questionDuration": {
-          "description": "Optional. Maximum duration for contributors to answer a question. Maximum is 3600 seconds. Default is 3600 seconds.",
-          "format": "google-duration",
-          "type": "string"
+        "GoogleCloudDatalabelingV1p2alpha1LabelImagePolylineOperationMetadata": {
+            "description": "Details of LabelImagePolyline operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1LabelImagePolylineOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "replicaCount": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Optional. Replication of questions. Each question will be sent to up to this number of contributors to label. Aggregated answers will be returned. Default is set to 1. For image related labeling, valid values are 1, 3, 5."
+        "GoogleCloudDatalabelingV1p2alpha1LabelImageSegmentationOperationMetadata": {
+            "description": "Details of a LabelImageSegmentation operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1LabelImageSegmentationOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config."
+                }
+            },
+            "type": "object"
         },
-        "annotatedDatasetDisplayName": {
-          "type": "string",
-          "description": "Required. A human-readable name for AnnotatedDataset defined by users. Maximum of 64 characters ."
+        "GoogleCloudDatalabelingV1p2alpha1LabelOperationMetadata": {
+            "description": "Metadata of a labeling operation, such as LabelImage or LabelVideo. Next tag: 23",
+            "id": "GoogleCloudDatalabelingV1p2alpha1LabelOperationMetadata",
+            "properties": {
+                "annotatedDataset": {
+                    "description": "Output only. The name of annotated dataset in format \"projects/*/datasets/*/annotatedDatasets/*\".",
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "Output only. Timestamp when labeling request was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "dataset": {
+                    "description": "Output only. The name of dataset to be labeled. \"projects/*/datasets/*\"",
+                    "type": "string"
+                },
+                "imageBoundingBoxDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelImageBoundingBoxOperationMetadata",
+                    "description": "Details of label image bounding box operation."
+                },
+                "imageBoundingPolyDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelImageBoundingPolyOperationMetadata",
+                    "description": "Details of label image bounding poly operation."
+                },
+                "imageClassificationDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelImageClassificationOperationMetadata",
+                    "description": "Details of label image classification operation."
+                },
+                "imageOrientedBoundingBoxDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelImageOrientedBoundingBoxOperationMetadata",
+                    "description": "Details of label image oriented bounding box operation."
+                },
+                "imagePolylineDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelImagePolylineOperationMetadata",
+                    "description": "Details of label image polyline operation."
+                },
+                "imageSegmentationDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelImageSegmentationOperationMetadata",
+                    "description": "Details of label image segmentation operation."
+                },
+                "partialFailures": {
+                    "description": "Output only. Partial failures encountered. E.g. single files that couldn't be read. Status details field will contain standard GCP error details.",
+                    "items": {
+                        "$ref": "GoogleRpcStatus"
+                    },
+                    "type": "array"
+                },
+                "progressPercent": {
+                    "description": "Output only. Progress of label operation. Range: [0, 100].",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "textClassificationDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelTextClassificationOperationMetadata",
+                    "description": "Details of label text classification operation."
+                },
+                "textEntityExtractionDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelTextEntityExtractionOperationMetadata",
+                    "description": "Details of label text entity extraction operation."
+                },
+                "videoClassificationDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelVideoClassificationOperationMetadata",
+                    "description": "Details of label video classification operation."
+                },
+                "videoEventDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelVideoEventOperationMetadata",
+                    "description": "Details of label video event operation."
+                },
+                "videoObjectDetectionDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelVideoObjectDetectionOperationMetadata",
+                    "description": "Details of label video object detection operation."
+                },
+                "videoObjectTrackingDetails": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1LabelVideoObjectTrackingOperationMetadata",
+                    "description": "Details of label video object tracking operation."
+                }
+            },
+            "type": "object"
         },
-        "userEmailAddress": {
-          "description": "Email of the user who started the labeling task and should be notified by email. If empty no notification will be sent.",
-          "type": "string"
+        "GoogleCloudDatalabelingV1p2alpha1LabelStats": {
+            "description": "Statistics about annotation specs.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1LabelStats",
+            "properties": {
+                "exampleCount": {
+                    "additionalProperties": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "description": "Map of each annotation spec's example count. Key is the annotation spec name and value is the number of examples for that annotation spec. If the annotated dataset does not have annotation spec, the map will return a pair where the key is empty string and value is the total number of annotations.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
         },
-        "languageCode": {
-          "description": "Optional. The Language of this question, as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt). Default value is en-US. Only need to set this when task is language related. For example, French text classification.",
-          "type": "string"
+        "GoogleCloudDatalabelingV1p2alpha1LabelTextClassificationOperationMetadata": {
+            "description": "Details of a LabelTextClassification operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1LabelTextClassificationOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "instruction": {
-          "type": "string",
-          "description": "Required. Instruction resource name."
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1p2alpha1ImportDataOperationResponse": {
-      "type": "object",
-      "properties": {
-        "totalCount": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Output only. Total number of examples requested to import"
+        "GoogleCloudDatalabelingV1p2alpha1LabelTextEntityExtractionOperationMetadata": {
+            "description": "Details of a LabelTextEntityExtraction operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1LabelTextEntityExtractionOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "importCount": {
-          "type": "integer",
-          "description": "Output only. Number of examples imported successfully.",
-          "format": "int32"
+        "GoogleCloudDatalabelingV1p2alpha1LabelVideoClassificationOperationMetadata": {
+            "description": "Details of a LabelVideoClassification operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1LabelVideoClassificationOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "dataset": {
-          "description": "Ouptut only. The name of imported dataset.",
-          "type": "string"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1p2alpha1ImportDataOperationResponse",
-      "description": "Response used for ImportData longrunning operation."
-    },
-    "GoogleCloudDatalabelingV1beta1ImageClassificationAnnotation": {
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1beta1ImageClassificationAnnotation",
-      "properties": {
-        "annotationSpec": {
-          "description": "Label of image.",
-          "$ref": "GoogleCloudDatalabelingV1beta1AnnotationSpec"
-        }
-      },
-      "description": "Image classification annotation definition."
-    },
-    "GoogleCloudDatalabelingV1p2alpha1LabelImagePolylineOperationMetadata": {
-      "description": "Details of LabelImagePolyline operation metadata.",
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config used in labeling request.",
-          "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig"
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1p2alpha1LabelImagePolylineOperationMetadata",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1alpha1LabelImageOrientedBoundingBoxOperationMetadata": {
-      "type": "object",
-      "description": "Details of a LabelImageOrientedBoundingBox operation metadata.",
-      "id": "GoogleCloudDatalabelingV1alpha1LabelImageOrientedBoundingBoxOperationMetadata",
-      "properties": {
-        "basicConfig": {
-          "description": "Basic human annotation config.",
-          "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1alpha1LabelVideoObjectTrackingOperationMetadata": {
-      "id": "GoogleCloudDatalabelingV1alpha1LabelVideoObjectTrackingOperationMetadata",
-      "type": "object",
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1alpha1HumanAnnotationConfig",
-          "description": "Basic human annotation config used in labeling request."
-        }
-      },
-      "description": "Details of a LabelVideoObjectTracking operation metadata."
-    },
-    "GoogleCloudDatalabelingV1beta1LabelVideoClassificationOperationMetadata": {
-      "description": "Details of a LabelVideoClassification operation metadata.",
-      "id": "GoogleCloudDatalabelingV1beta1LabelVideoClassificationOperationMetadata",
-      "type": "object",
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
-          "description": "Basic human annotation config used in labeling request."
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1LabelImageOrientedBoundingBoxOperationMetadata": {
-      "type": "object",
-      "description": "Details of a LabelImageOrientedBoundingBox operation metadata.",
-      "properties": {
-        "basicConfig": {
-          "$ref": "GoogleCloudDatalabelingV1beta1HumanAnnotationConfig",
-          "description": "Basic human annotation config."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1LabelImageOrientedBoundingBoxOperationMetadata"
-    },
-    "GoogleCloudDatalabelingV1beta1NormalizedVertex": {
-      "description": "A vertex represents a 2D point in the image. NOTE: the normalized vertex coordinates are relative to the original image and range from 0 to 1.",
-      "id": "GoogleCloudDatalabelingV1beta1NormalizedVertex",
-      "type": "object",
-      "properties": {
-        "x": {
-          "description": "X coordinate.",
-          "format": "float",
-          "type": "number"
+        "GoogleCloudDatalabelingV1p2alpha1LabelVideoEventOperationMetadata": {
+            "description": "Details of a LabelVideoEvent operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1LabelVideoEventOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "y": {
-          "type": "number",
-          "description": "Y coordinate.",
-          "format": "float"
-        }
-      }
-    },
-    "GoogleCloudDatalabelingV1beta1Polyline": {
-      "description": "A line with multiple line segments.",
-      "properties": {
-        "vertices": {
-          "type": "array",
-          "description": "The polyline vertices.",
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1Vertex"
-          }
-        }
-      },
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1beta1Polyline"
-    },
-    "GoogleCloudDatalabelingV1beta1Example": {
-      "description": "An Example is a piece of data and its annotation. For example, an image with label \"house\".",
-      "id": "GoogleCloudDatalabelingV1beta1Example",
-      "properties": {
-        "annotations": {
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudDatalabelingV1beta1Annotation"
-          },
-          "description": "Output only. Annotations for the piece of data in Example. One piece of data can have multiple annotations."
+        "GoogleCloudDatalabelingV1p2alpha1LabelVideoObjectDetectionOperationMetadata": {
+            "description": "Details of a LabelVideoObjectDetection operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1LabelVideoObjectDetectionOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "name": {
-          "description": "Output only. Name of the example, in format of: projects/{project_id}/datasets/{dataset_id}/annotatedDatasets/ {annotated_dataset_id}/examples/{example_id}",
-          "type": "string"
+        "GoogleCloudDatalabelingV1p2alpha1LabelVideoObjectTrackingOperationMetadata": {
+            "description": "Details of a LabelVideoObjectTracking operation metadata.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1LabelVideoObjectTrackingOperationMetadata",
+            "properties": {
+                "basicConfig": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1HumanAnnotationConfig",
+                    "description": "Basic human annotation config used in labeling request."
+                }
+            },
+            "type": "object"
         },
-        "videoPayload": {
-          "$ref": "GoogleCloudDatalabelingV1beta1VideoPayload",
-          "description": "The video payload, a container of the video uri."
+        "GoogleCloudDatalabelingV1p2alpha1OutputConfig": {
+            "description": "The configuration of output data.",
+            "id": "GoogleCloudDatalabelingV1p2alpha1OutputConfig",
+            "properties": {
+                "gcsDestination": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1GcsDestination",
+                    "description": "Output to a file in Cloud Storage. Should be used for labeling output other than image segmentation."
+                },
+                "gcsFolderDestination": {
+                    "$ref": "GoogleCloudDatalabelingV1p2alpha1GcsFolderDestination",
+                    "description": "Output to a folder in Cloud Storage. Should be used for image segmentation or document de-identification labeling outputs."
+                }
+            },
+            "type": "object"
         },
-        "textPayload": {
-          "description": "The text payload, a container of the text content.",
-          "$ref": "GoogleCloudDatalabelingV1beta1TextPayload"
+        "GoogleLongrunningListOperationsResponse": {
+            "description": "The response message for Operations.ListOperations.",
+            "id": "GoogleLongrunningListOperationsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                },
+                "operations": {
+                    "description": "A list of operations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "GoogleLongrunningOperation"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "imagePayload": {
-          "$ref": "GoogleCloudDatalabelingV1beta1ImagePayload",
-          "description": "The image payload, a container of the image bytes/uri."
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1ObjectTrackingFrame": {
-      "properties": {
-        "normalizedBoundingPoly": {
-          "$ref": "GoogleCloudDatalabelingV1beta1NormalizedBoundingPoly"
+        "GoogleLongrunningOperation": {
+            "description": "This resource represents a long-running operation that is the result of a network API call.",
+            "id": "GoogleLongrunningOperation",
+            "properties": {
+                "done": {
+                    "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
+                    "type": "boolean"
+                },
+                "error": {
+                    "$ref": "GoogleRpcStatus",
+                    "description": "The error result of the operation in case of failure or cancellation."
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
+                    "type": "string"
+                },
+                "response": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
         },
-        "boundingPoly": {
-          "$ref": "GoogleCloudDatalabelingV1beta1BoundingPoly"
+        "GoogleProtobufEmpty": {
+            "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
+            "id": "GoogleProtobufEmpty",
+            "properties": {},
+            "type": "object"
         },
-        "timeOffset": {
-          "type": "string",
-          "format": "google-duration",
-          "description": "The time offset of this frame relative to the beginning of the video."
-        }
-      },
-      "id": "GoogleCloudDatalabelingV1beta1ObjectTrackingFrame",
-      "description": "Video frame level annotation for object detection and tracking.",
-      "type": "object"
-    },
-    "GoogleCloudDatalabelingV1beta1EvaluationConfig": {
-      "description": "Configuration details used for calculating evaluation metrics and creating an Evaluation.",
-      "properties": {
-        "boundingBoxEvaluationOptions": {
-          "$ref": "GoogleCloudDatalabelingV1beta1BoundingBoxEvaluationOptions",
-          "description": "Only specify this field if the related model performs image object detection (`IMAGE_BOUNDING_BOX_ANNOTATION`). Describes how to evaluate bounding boxes."
+        "GoogleRpcStatus": {
+            "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
+            "id": "GoogleRpcStatus",
+            "properties": {
+                "code": {
+                    "description": "The status code, which should be an enum value of google.rpc.Code.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         }
-      },
-      "type": "object",
-      "id": "GoogleCloudDatalabelingV1beta1EvaluationConfig"
     },
-    "GoogleCloudDatalabelingV1beta1RequesterFeedbackMetadata": {
-      "id": "GoogleCloudDatalabelingV1beta1RequesterFeedbackMetadata",
-      "properties": {},
-      "description": "Metadata describing the feedback from the labeling task requester.",
-      "type": "object"
-    }
-  },
-  "title": "Data Labeling API",
-  "description": "Public API for Google Cloud AI Data Labeling Service.",
-  "batchPath": "batch"
-}
+    "servicePath": "",
+    "title": "Data Labeling API",
+    "version": "v1beta1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/dfareporting.v3.3.json b/googleapiclient/discovery_cache/documents/dfareporting.v3.3.json
index 1af47de..e7b0303 100644
--- a/googleapiclient/discovery_cache/documents/dfareporting.v3.3.json
+++ b/googleapiclient/discovery_cache/documents/dfareporting.v3.3.json
@@ -1,19967 +1,19967 @@
 {
-  "kind": "discovery#restDescription",
-  "canonicalName": "Dfareporting",
-  "schemas": {
-    "AccountUserProfilesListResponse": {
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountUserProfilesListResponse\"."
-        },
-        "accountUserProfiles": {
-          "description": "Account user profile collection.",
-          "items": {
-            "$ref": "AccountUserProfile"
-          },
-          "type": "array"
-        }
-      },
-      "id": "AccountUserProfilesListResponse",
-      "description": "Account User Profile List Response",
-      "type": "object"
-    },
-    "KeyValueTargetingExpression": {
-      "id": "KeyValueTargetingExpression",
-      "type": "object",
-      "description": "Key Value Targeting Expression.",
-      "properties": {
-        "expression": {
-          "type": "string",
-          "description": "Keyword expression being targeted by the ad."
-        }
-      }
-    },
-    "FsCommand": {
-      "id": "FsCommand",
-      "type": "object",
-      "properties": {
-        "windowWidth": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Width of the window."
-        },
-        "left": {
-          "description": "Distance from the left of the browser.Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "top": {
-          "description": "Distance from the top of the browser. Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "windowHeight": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Height of the window."
-        },
-        "positionOption": {
-          "description": "Position in the browser where the window will open.",
-          "type": "string",
-          "enum": [
-            "CENTERED",
-            "DISTANCE_FROM_TOP_LEFT_CORNER"
-          ],
-          "enumDescriptions": [
-            "",
-            ""
-          ]
-        }
-      },
-      "description": "FsCommand."
-    },
-    "PricingSchedule": {
-      "id": "PricingSchedule",
-      "description": "Pricing Schedule",
-      "type": "object",
-      "properties": {
-        "flighted": {
-          "type": "boolean",
-          "description": "Whether this placement is flighted. If true, pricing periods will be computed automatically."
-        },
-        "testingStartDate": {
-          "type": "string",
-          "format": "date"
-        },
-        "endDate": {
-          "type": "string",
-          "format": "date"
-        },
-        "startDate": {
-          "format": "date",
-          "type": "string"
-        },
-        "pricingType": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "Placement pricing type. This field is required on insertion.",
-          "type": "string",
-          "enum": [
-            "PRICING_TYPE_CPM",
-            "PRICING_TYPE_CPC",
-            "PRICING_TYPE_CPA",
-            "PRICING_TYPE_FLAT_RATE_IMPRESSIONS",
-            "PRICING_TYPE_FLAT_RATE_CLICKS",
-            "PRICING_TYPE_CPM_ACTIVEVIEW"
-          ]
-        },
-        "floodlightActivityId": {
-          "type": "string",
-          "description": "Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING_TYPE_CPA.",
-          "format": "int64"
-        },
-        "disregardOverdelivery": {
-          "type": "boolean",
-          "description": "Whether cap costs are ignored by ad serving."
-        },
-        "pricingPeriods": {
-          "description": "Pricing periods for this placement.",
-          "items": {
-            "$ref": "PricingSchedulePricingPeriod"
-          },
-          "type": "array"
-        },
-        "capCostOption": {
-          "enum": [
-            "CAP_COST_NONE",
-            "CAP_COST_MONTHLY",
-            "CAP_COST_CUMULATIVE"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "description": "Placement cap cost option.",
-          "type": "string"
-        }
-      }
-    },
-    "DirectorySite": {
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#directorySite\".",
-          "type": "string"
-        },
-        "id": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of this directory site. This is a read-only, auto-generated field."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this directory site."
-        },
-        "settings": {
-          "$ref": "DirectorySiteSettings",
-          "description": "Directory site settings."
-        },
-        "inpageTagFormats": {
-          "items": {
-            "type": "string",
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              ""
-            ],
-            "enum": [
-              "STANDARD",
-              "IFRAME_JAVASCRIPT_INPAGE",
-              "INTERNAL_REDIRECT_INPAGE",
-              "JAVASCRIPT_INPAGE"
-            ]
-          },
-          "description": "Tag types for regular placements. Acceptable values are: - \"STANDARD\" - \"IFRAME_JAVASCRIPT_INPAGE\" - \"INTERNAL_REDIRECT_INPAGE\" - \"JAVASCRIPT_INPAGE\" ",
-          "type": "array"
-        },
-        "interstitialTagFormats": {
-          "items": {
-            "enum": [
-              "IFRAME_JAVASCRIPT_INTERSTITIAL",
-              "INTERNAL_REDIRECT_INTERSTITIAL",
-              "JAVASCRIPT_INTERSTITIAL"
-            ],
-            "type": "string",
-            "enumDescriptions": [
-              "",
-              "",
-              ""
-            ]
-          },
-          "type": "array",
-          "description": "Tag types for interstitial placements. Acceptable values are: - \"IFRAME_JAVASCRIPT_INTERSTITIAL\" - \"INTERNAL_REDIRECT_INTERSTITIAL\" - \"JAVASCRIPT_INTERSTITIAL\" "
-        },
-        "active": {
-          "type": "boolean",
-          "description": "Whether this directory site is active."
-        },
-        "idDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of this directory site. This is a read-only, auto-generated field."
-        },
-        "url": {
-          "description": "URL of this directory site.",
-          "type": "string"
-        }
-      },
-      "description": "DirectorySites contains properties of a website from the Site Directory. Sites need to be added to an account via the Sites resource before they can be assigned to a placement.",
-      "type": "object",
-      "id": "DirectorySite"
-    },
-    "OmnitureSettings": {
-      "id": "OmnitureSettings",
-      "type": "object",
-      "description": "Omniture Integration Settings.",
-      "properties": {
-        "omnitureIntegrationEnabled": {
-          "description": "Whether Omniture integration is enabled. This property can be enabled only when the \"Advanced Ad Serving\" account setting is enabled.",
-          "type": "boolean"
-        },
-        "omnitureCostDataEnabled": {
-          "type": "boolean",
-          "description": "Whether placement cost data will be sent to Omniture. This property can be enabled only if omnitureIntegrationEnabled is true."
-        }
-      }
-    },
-    "OperatingSystemsListResponse": {
-      "description": "Operating System List Response",
-      "properties": {
-        "operatingSystems": {
-          "type": "array",
-          "items": {
-            "$ref": "OperatingSystem"
-          },
-          "description": "Operating system collection."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#operatingSystemsListResponse\".",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "OperatingSystemsListResponse"
-    },
-    "OrderDocumentsListResponse": {
-      "id": "OrderDocumentsListResponse",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        },
-        "orderDocuments": {
-          "type": "array",
-          "items": {
-            "$ref": "OrderDocument"
-          },
-          "description": "Order document collection"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#orderDocumentsListResponse\".",
-          "type": "string"
-        }
-      },
-      "description": "Order document List Response"
-    },
-    "DynamicTargetingKeysListResponse": {
-      "type": "object",
-      "id": "DynamicTargetingKeysListResponse",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#dynamicTargetingKeysListResponse\".",
-          "type": "string"
-        },
-        "dynamicTargetingKeys": {
-          "type": "array",
-          "description": "Dynamic targeting key collection.",
-          "items": {
-            "$ref": "DynamicTargetingKey"
-          }
-        }
-      },
-      "description": "Dynamic Targeting Key List Response"
-    },
-    "ConversionsBatchInsertRequest": {
-      "description": "Insert Conversions Request.",
-      "id": "ConversionsBatchInsertRequest",
-      "type": "object",
-      "properties": {
-        "encryptionInfo": {
-          "description": "Describes how encryptedUserId or encryptedUserIdCandidates[] is encrypted. This is a required field if encryptedUserId or encryptedUserIdCandidates[] is used.",
-          "$ref": "EncryptionInfo"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionsBatchInsertRequest\"."
-        },
-        "conversions": {
-          "type": "array",
-          "description": "The set of conversions to insert.",
-          "items": {
-            "$ref": "Conversion"
-          }
-        }
-      }
-    },
-    "PlatformType": {
-      "id": "PlatformType",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#platformType\"."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this platform type."
-        },
-        "id": {
-          "format": "int64",
-          "description": "ID of this platform type.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Contains information about a platform type that can be targeted by ads."
-    },
-    "PathToConversionReportCompatibleFields": {
-      "properties": {
-        "conversionDimensions": {
-          "type": "array",
-          "description": "Conversion dimensions which are compatible to be selected in the \"conversionDimensions\" section of the report.",
-          "items": {
-            "$ref": "Dimension"
-          }
-        },
-        "metrics": {
-          "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.",
-          "type": "array",
-          "items": {
-            "$ref": "Metric"
-          }
-        },
-        "kind": {
-          "description": "The kind of resource this is, in this case dfareporting#pathToConversionReportCompatibleFields.",
-          "type": "string"
-        },
-        "customFloodlightVariables": {
-          "type": "array",
-          "description": "Custom floodlight variables which are compatible to be selected in the \"customFloodlightVariables\" section of the report.",
-          "items": {
-            "$ref": "Dimension"
-          }
-        },
-        "perInteractionDimensions": {
-          "items": {
-            "$ref": "Dimension"
-          },
-          "description": "Per-interaction dimensions which are compatible to be selected in the \"perInteractionDimensions\" section of the report.",
-          "type": "array"
-        }
-      },
-      "id": "PathToConversionReportCompatibleFields",
-      "description": "Represents fields that are compatible to be selected for a report of type \"PATH_TO_CONVERSION\".",
-      "type": "object"
-    },
-    "RemarketingListShare": {
-      "id": "RemarketingListShare",
-      "properties": {
-        "sharedAccountIds": {
-          "type": "array",
-          "description": "Accounts that the remarketing list is shared with.",
-          "items": {
-            "format": "int64",
-            "type": "string"
-          }
-        },
-        "remarketingListId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Remarketing list ID. This is a read-only, auto-generated field."
-        },
-        "sharedAdvertiserIds": {
-          "type": "array",
-          "description": "Advertisers that the remarketing list is shared with.",
-          "items": {
-            "type": "string",
-            "format": "int64"
-          }
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#remarketingListShare\"."
-        }
-      },
-      "type": "object",
-      "description": "Contains properties of a remarketing list's sharing information. Sharing allows other accounts or advertisers to target to your remarketing lists. This resource can be used to manage remarketing list sharing to other accounts and advertisers."
-    },
-    "AdsListResponse": {
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#adsListResponse\"."
-        },
-        "ads": {
-          "items": {
-            "$ref": "Ad"
-          },
-          "description": "Ad collection.",
-          "type": "array"
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "AdsListResponse",
-      "description": "Ad List Response"
-    },
-    "File": {
-      "id": "File",
-      "type": "object",
-      "properties": {
-        "lastModifiedTime": {
-          "type": "string",
-          "format": "int64",
-          "description": "The timestamp in milliseconds since epoch when this file was last modified."
-        },
-        "reportId": {
-          "format": "int64",
-          "description": "The ID of the report this file was generated from.",
-          "type": "string"
-        },
-        "id": {
-          "type": "string",
-          "format": "int64",
-          "description": "The unique ID of this report file."
-        },
-        "status": {
-          "type": "string",
-          "description": "The status of the report file.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "PROCESSING",
-            "REPORT_AVAILABLE",
-            "FAILED",
-            "CANCELLED"
-          ]
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#file\".",
-          "type": "string"
-        },
-        "fileName": {
-          "type": "string",
-          "description": "The filename of the file."
-        },
-        "urls": {
-          "properties": {
-            "apiUrl": {
-              "type": "string",
-              "description": "The URL for downloading the report data through the API."
-            },
-            "browserUrl": {
-              "type": "string",
-              "description": "The URL for downloading the report data through a browser."
-            }
-          },
-          "description": "The URLs where the completed report file can be downloaded.",
-          "type": "object"
-        },
-        "format": {
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "The output format of the report. Only available once the file is available.",
-          "enum": [
-            "CSV",
-            "EXCEL"
-          ]
-        },
-        "dateRange": {
-          "$ref": "DateRange",
-          "description": "The date range for which the file has report data. The date range will always be the absolute date range for which the report is run."
-        },
-        "etag": {
-          "description": "Etag of this resource.",
-          "type": "string"
-        }
-      },
-      "description": "Represents a File resource. A file contains the metadata for a report run. It shows the status of the run and holds the URLs to the generated report data if the run is finished and the status is \"REPORT_AVAILABLE\"."
-    },
-    "DirectorySiteSettings": {
-      "type": "object",
-      "description": "Directory Site Settings",
-      "properties": {
-        "activeViewOptOut": {
-          "type": "boolean",
-          "description": "Whether this directory site has disabled active view creatives."
-        },
-        "dfpSettings": {
-          "$ref": "DfpSettings",
-          "description": "Directory site Ad Manager settings."
-        },
-        "interstitialPlacementAccepted": {
-          "type": "boolean",
-          "description": "Whether this site accepts interstitial ads."
-        },
-        "instreamVideoPlacementAccepted": {
-          "description": "Whether this site accepts in-stream video ads.",
-          "type": "boolean"
-        }
-      },
-      "id": "DirectorySiteSettings"
-    },
-    "Metric": {
-      "type": "object",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#metric."
-        },
-        "name": {
-          "description": "The metric name, e.g. dfa:impressions",
-          "type": "string"
-        }
-      },
-      "id": "Metric",
-      "description": "Represents a metric."
-    },
-    "DeepLink": {
-      "id": "DeepLink",
-      "properties": {
-        "mobileApp": {
-          "description": "The mobile app targeted by this deep link.",
-          "$ref": "MobileApp"
-        },
-        "appUrl": {
-          "description": "The URL of the mobile app being linked to.",
-          "type": "string"
-        },
-        "remarketingListIds": {
-          "description": "Ads served to users on these remarketing lists will use this deep link. Applicable when mobileApp.directory is APPLE_APP_STORE.",
-          "items": {
-            "format": "int64",
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#deepLink\"."
-        },
-        "fallbackUrl": {
-          "type": "string",
-          "description": "The fallback URL. This URL will be served to users who do not have the mobile app installed."
-        }
-      },
-      "type": "object",
-      "description": "Contains information about a landing page deep link."
-    },
-    "OperatingSystemVersionsListResponse": {
-      "type": "object",
-      "id": "OperatingSystemVersionsListResponse",
-      "properties": {
-        "operatingSystemVersions": {
-          "type": "array",
-          "items": {
-            "$ref": "OperatingSystemVersion"
-          },
-          "description": "Operating system version collection."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#operatingSystemVersionsListResponse\"."
-        }
-      },
-      "description": "Operating System Version List Response"
-    },
-    "CreativeField": {
-      "description": "Contains properties of a creative field.",
-      "properties": {
-        "advertiserId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Advertiser ID of this creative field. This is a required field on insertion."
-        },
-        "advertiserIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeField\".",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this creative field. This is a required field and must be less than 256 characters long and unique among creative fields of the same advertiser."
-        },
-        "id": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of this creative field. This is a read-only, auto-generated field."
-        },
-        "subaccountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Subaccount ID of this creative field. This is a read-only field that can be left blank."
-        },
-        "accountId": {
-          "description": "Account ID of this creative field. This is a read-only field that can be left blank.",
-          "type": "string",
-          "format": "int64"
-        }
-      },
-      "type": "object",
-      "id": "CreativeField"
-    },
-    "AccountPermissionsListResponse": {
-      "id": "AccountPermissionsListResponse",
-      "description": "Account Permission List Response",
-      "type": "object",
-      "properties": {
-        "accountPermissions": {
-          "items": {
-            "$ref": "AccountPermission"
-          },
-          "description": "Account permission collection.",
-          "type": "array"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountPermissionsListResponse\"."
-        }
-      }
-    },
-    "Report": {
-      "id": "Report",
-      "description": "Represents a Report resource.",
-      "type": "object",
-      "properties": {
-        "pathToConversionCriteria": {
-          "properties": {
-            "conversionDimensions": {
-              "items": {
-                "$ref": "SortedDimension"
-              },
-              "description": "The list of conversion dimensions the report should include.",
-              "type": "array"
-            },
-            "reportProperties": {
-              "properties": {
-                "maximumClickInteractions": {
-                  "format": "int32",
-                  "type": "integer",
-                  "description": "The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report."
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/ddmconversions": {
+                    "description": "Manage DoubleClick Digital Marketing conversions"
                 },
-                "clicksLookbackWindow": {
-                  "type": "integer",
-                  "description": "DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.",
-                  "format": "int32"
+                "https://www.googleapis.com/auth/dfareporting": {
+                    "description": "View and manage DoubleClick for Advertisers reports"
                 },
-                "maximumInteractionGap": {
-                  "format": "int32",
-                  "description": "The maximum amount of time that can take place between interactions (clicks or impressions) by the same user. Valid values: 1-90.",
-                  "type": "integer"
-                },
-                "maximumImpressionInteractions": {
-                  "format": "int32",
-                  "type": "integer",
-                  "description": "The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report."
-                },
-                "pivotOnInteractionPath": {
-                  "description": "Enable pivoting on interaction path.",
-                  "type": "boolean"
-                },
-                "includeUnattributedIPConversions": {
-                  "description": "Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.",
-                  "type": "boolean"
-                },
-                "includeUnattributedCookieConversions": {
-                  "type": "boolean",
-                  "description": "Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window."
-                },
-                "impressionsLookbackWindow": {
-                  "format": "int32",
-                  "description": "DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.",
-                  "type": "integer"
-                },
-                "includeAttributedIPConversions": {
-                  "type": "boolean",
-                  "description": "Deprecated: has no effect."
+                "https://www.googleapis.com/auth/dfatrafficking": {
+                    "description": "View and manage your DoubleClick Campaign Manager's (DCM) display ad campaigns"
                 }
-              },
-              "type": "object",
-              "description": "The properties of the report."
-            },
-            "dateRange": {
-              "$ref": "DateRange",
-              "description": "The date range this report should be run for."
-            },
-            "floodlightConfigId": {
-              "$ref": "DimensionValue",
-              "description": "The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'."
-            },
-            "perInteractionDimensions": {
-              "description": "The list of per interaction dimensions the report should include.",
-              "items": {
-                "$ref": "SortedDimension"
-              },
-              "type": "array"
-            },
-            "customFloodlightVariables": {
-              "type": "array",
-              "description": "The list of custom floodlight variables the report should include.",
-              "items": {
-                "$ref": "SortedDimension"
-              }
-            },
-            "customRichMediaEvents": {
-              "type": "array",
-              "description": "The list of custom rich media events to include.",
-              "items": {
-                "$ref": "DimensionValue"
-              }
-            },
-            "activityFilters": {
-              "items": {
-                "$ref": "DimensionValue"
-              },
-              "type": "array",
-              "description": "The list of 'dfa:activity' values to filter on."
-            },
-            "metricNames": {
-              "type": "array",
-              "description": "The list of names of metrics the report should include.",
-              "items": {
-                "type": "string"
-              }
             }
-          },
-          "description": "The report criteria for a report of type \"PATH_TO_CONVERSION\".",
-          "type": "object"
-        },
-        "name": {
-          "type": "string",
-          "annotations": {
-            "required": [
-              "dfareporting.reports.insert",
-              "dfareporting.reports.update"
-            ]
-          },
-          "description": "The name of the report."
-        },
-        "id": {
-          "description": "The unique ID identifying this report resource.",
-          "annotations": {
-            "required": [
-              "dfareporting.reports.update"
-            ]
-          },
-          "format": "int64",
-          "type": "string"
-        },
-        "etag": {
-          "description": "The eTag of this response for caching purposes.",
-          "type": "string"
-        },
-        "floodlightCriteria": {
-          "properties": {
-            "dimensionFilters": {
-              "type": "array",
-              "description": "The list of filters on which dimensions are filtered. Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.",
-              "items": {
-                "$ref": "DimensionValue"
-              }
-            },
-            "reportProperties": {
-              "description": "The properties of the report.",
-              "properties": {
-                "includeAttributedIPConversions": {
-                  "type": "boolean",
-                  "description": "Include conversions that have no cookie, but do have an exposure path."
-                },
-                "includeUnattributedIPConversions": {
-                  "description": "Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.",
-                  "type": "boolean"
-                },
-                "includeUnattributedCookieConversions": {
-                  "type": "boolean",
-                  "description": "Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window."
-                }
-              },
-              "type": "object"
-            },
-            "customRichMediaEvents": {
-              "description": "The list of custom rich media events to include.",
-              "items": {
-                "$ref": "DimensionValue"
-              },
-              "type": "array"
-            },
-            "dateRange": {
-              "description": "The date range this report should be run for.",
-              "$ref": "DateRange"
-            },
-            "metricNames": {
-              "type": "array",
-              "description": "The list of names of metrics the report should include.",
-              "items": {
-                "type": "string"
-              }
-            },
-            "dimensions": {
-              "type": "array",
-              "description": "The list of dimensions the report should include.",
-              "items": {
-                "$ref": "SortedDimension"
-              }
-            },
-            "floodlightConfigId": {
-              "$ref": "DimensionValue",
-              "description": "The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'."
-            }
-          },
-          "type": "object",
-          "description": "The report criteria for a report of type \"FLOODLIGHT\"."
-        },
-        "type": {
-          "annotations": {
-            "required": [
-              "dfareporting.reports.insert",
-              "dfareporting.reports.update"
-            ]
-          },
-          "description": "The type of the report.",
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "STANDARD",
-            "REACH",
-            "PATH_TO_CONVERSION",
-            "CROSS_DIMENSION_REACH",
-            "FLOODLIGHT"
-          ]
-        },
-        "fileName": {
-          "type": "string",
-          "description": "The filename used when generating report files for this report."
-        },
-        "kind": {
-          "description": "The kind of resource this is, in this case dfareporting#report.",
-          "type": "string"
-        },
-        "reachCriteria": {
-          "type": "object",
-          "properties": {
-            "reachByFrequencyMetricNames": {
-              "type": "array",
-              "description": "The list of names of Reach By Frequency metrics the report should include.",
-              "items": {
-                "type": "string"
-              }
-            },
-            "dimensions": {
-              "items": {
-                "$ref": "SortedDimension"
-              },
-              "description": "The list of dimensions the report should include.",
-              "type": "array"
-            },
-            "activities": {
-              "$ref": "Activities",
-              "description": "Activity group."
-            },
-            "dimensionFilters": {
-              "items": {
-                "$ref": "DimensionValue"
-              },
-              "description": "The list of filters on which dimensions are filtered. Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.",
-              "type": "array"
-            },
-            "metricNames": {
-              "type": "array",
-              "description": "The list of names of metrics the report should include.",
-              "items": {
-                "type": "string"
-              }
-            },
-            "customRichMediaEvents": {
-              "description": "Custom Rich Media Events group.",
-              "$ref": "CustomRichMediaEvents"
-            },
-            "enableAllDimensionCombinations": {
-              "type": "boolean",
-              "description": "Whether to enable all reach dimension combinations in the report. Defaults to false. If enabled, the date range of the report should be within the last 42 days."
-            },
-            "dateRange": {
-              "$ref": "DateRange",
-              "description": "The date range this report should be run for."
-            }
-          },
-          "description": "The report criteria for a report of type \"REACH\"."
-        },
-        "schedule": {
-          "properties": {
-            "expirationDate": {
-              "type": "string",
-              "format": "date"
-            },
-            "repeats": {
-              "type": "string",
-              "annotations": {
-                "required": [
-                  "dfareporting.reports.insert",
-                  "dfareporting.reports.update"
-                ]
-              },
-              "description": "The interval for which the report is repeated. Note: - \"DAILY\" also requires field \"every\" to be set. - \"WEEKLY\" also requires fields \"every\" and \"repeatsOnWeekDays\" to be set. - \"MONTHLY\" also requires fields \"every\" and \"runsOnDayOfMonth\" to be set. "
-            },
-            "runsOnDayOfMonth": {
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "enum": [
-                "DAY_OF_MONTH",
-                "WEEK_OF_MONTH"
-              ],
-              "description": "Enum to define for \"MONTHLY\" scheduled reports whether reports should be repeated on the same day of the month as \"startDate\" or the same day of the week of the month. Example: If 'startDate' is Monday, April 2nd 2012 (2012-04-02), \"DAY_OF_MONTH\" would run subsequent reports on the 2nd of every Month, and \"WEEK_OF_MONTH\" would run subsequent reports on the first Monday of the month."
-            },
-            "startDate": {
-              "type": "string",
-              "format": "date"
-            },
-            "every": {
-              "format": "int32",
-              "description": "Defines every how many days, weeks or months the report should be run. Needs to be set when \"repeats\" is either \"DAILY\", \"WEEKLY\" or \"MONTHLY\".",
-              "type": "integer"
-            },
-            "active": {
-              "type": "boolean",
-              "description": "Whether the schedule is active or not. Must be set to either true or false.",
-              "annotations": {
-                "required": [
-                  "dfareporting.reports.insert",
-                  "dfareporting.reports.update"
-                ]
-              }
-            },
-            "repeatsOnWeekDays": {
-              "description": "List of week days \"WEEKLY\" on which scheduled reports should run.",
-              "items": {
-                "enumDescriptions": [
-                  "",
-                  "",
-                  "",
-                  "",
-                  "",
-                  "",
-                  ""
-                ],
-                "enum": [
-                  "SUNDAY",
-                  "MONDAY",
-                  "TUESDAY",
-                  "WEDNESDAY",
-                  "THURSDAY",
-                  "FRIDAY",
-                  "SATURDAY"
-                ],
-                "type": "string"
-              },
-              "type": "array"
-            }
-          },
-          "type": "object",
-          "description": "The report's schedule. Can only be set if the report's 'dateRange' is a relative date range and the relative date range is not \"TODAY\"."
-        },
-        "delivery": {
-          "description": "The report's email delivery settings.",
-          "properties": {
-            "emailOwner": {
-              "type": "boolean",
-              "description": "Whether the report should be emailed to the report owner."
-            },
-            "recipients": {
-              "description": "The list of recipients to which to email the report.",
-              "items": {
-                "$ref": "Recipient"
-              },
-              "type": "array"
-            },
-            "message": {
-              "type": "string",
-              "description": "The message to be sent with each email."
-            },
-            "emailOwnerDeliveryType": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "The type of delivery for the owner to receive, if enabled.",
-              "type": "string",
-              "enum": [
-                "LINK",
-                "ATTACHMENT"
-              ]
-            }
-          },
-          "type": "object"
-        },
-        "lastModifiedTime": {
-          "type": "string",
-          "annotations": {
-            "required": [
-              "dfareporting.reports.update"
-            ]
-          },
-          "description": "The timestamp (in milliseconds since epoch) of when this report was last modified.",
-          "format": "uint64"
-        },
-        "accountId": {
-          "description": "The account ID to which this report belongs.",
-          "annotations": {
-            "required": [
-              "dfareporting.reports.update"
-            ]
-          },
-          "type": "string",
-          "format": "int64"
-        },
-        "criteria": {
-          "properties": {
-            "dateRange": {
-              "$ref": "DateRange",
-              "description": "The date range for which this report should be run."
-            },
-            "metricNames": {
-              "description": "The list of names of metrics the report should include.",
-              "items": {
-                "type": "string"
-              },
-              "type": "array"
-            },
-            "customRichMediaEvents": {
-              "$ref": "CustomRichMediaEvents",
-              "description": "Custom Rich Media Events group."
-            },
-            "dimensions": {
-              "description": "The list of standard dimensions the report should include.",
-              "type": "array",
-              "items": {
-                "$ref": "SortedDimension"
-              }
-            },
-            "activities": {
-              "description": "Activity group.",
-              "$ref": "Activities"
-            },
-            "dimensionFilters": {
-              "items": {
-                "$ref": "DimensionValue"
-              },
-              "description": "The list of filters on which dimensions are filtered. Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.",
-              "type": "array"
-            }
-          },
-          "description": "The report criteria for a report of type \"STANDARD\".",
-          "type": "object"
-        },
-        "crossDimensionReachCriteria": {
-          "type": "object",
-          "description": "The report criteria for a report of type \"CROSS_DIMENSION_REACH\".",
-          "properties": {
-            "dimensionFilters": {
-              "items": {
-                "$ref": "DimensionValue"
-              },
-              "description": "The list of filters on which dimensions are filtered.",
-              "type": "array"
-            },
-            "pivoted": {
-              "type": "boolean",
-              "description": "Whether the report is pivoted or not. Defaults to true."
-            },
-            "dimension": {
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                ""
-              ],
-              "enum": [
-                "ADVERTISER",
-                "CAMPAIGN",
-                "SITE_BY_ADVERTISER",
-                "SITE_BY_CAMPAIGN"
-              ],
-              "description": "The dimension option.",
-              "type": "string"
-            },
-            "overlapMetricNames": {
-              "type": "array",
-              "items": {
-                "type": "string"
-              },
-              "description": "The list of names of overlap metrics the report should include."
-            },
-            "dateRange": {
-              "$ref": "DateRange",
-              "description": "The date range this report should be run for."
-            },
-            "metricNames": {
-              "items": {
-                "type": "string"
-              },
-              "description": "The list of names of metrics the report should include.",
-              "type": "array"
-            },
-            "breakdown": {
-              "description": "The list of dimensions the report should include.",
-              "type": "array",
-              "items": {
-                "$ref": "SortedDimension"
-              }
-            }
-          }
-        },
-        "format": {
-          "description": "The output format of the report. If not specified, default format is \"CSV\". Note that the actual format in the completed report file might differ if for instance the report's size exceeds the format's capabilities. \"CSV\" will then be the fallback format.",
-          "enum": [
-            "CSV",
-            "EXCEL"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            ""
-          ]
-        },
-        "ownerProfileId": {
-          "type": "string",
-          "description": "The user profile id of the owner of this report.",
-          "annotations": {
-            "required": [
-              "dfareporting.reports.update"
-            ]
-          },
-          "format": "int64"
-        },
-        "subAccountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "The subaccount ID to which this report belongs if applicable."
         }
-      }
     },
-    "Pricing": {
-      "type": "object",
-      "id": "Pricing",
-      "properties": {
-        "flights": {
-          "items": {
-            "$ref": "Flight"
-          },
-          "type": "array",
-          "description": "Flights of this inventory item. A flight (a.k.a. pricing period) represents the inventory item pricing information for a specific period of time."
-        },
-        "endDate": {
-          "type": "string",
-          "format": "date"
-        },
-        "pricingType": {
-          "enum": [
-            "PLANNING_PLACEMENT_PRICING_TYPE_IMPRESSIONS",
-            "PLANNING_PLACEMENT_PRICING_TYPE_CPM",
-            "PLANNING_PLACEMENT_PRICING_TYPE_CLICKS",
-            "PLANNING_PLACEMENT_PRICING_TYPE_CPC",
-            "PLANNING_PLACEMENT_PRICING_TYPE_CPA",
-            "PLANNING_PLACEMENT_PRICING_TYPE_FLAT_RATE_IMPRESSIONS",
-            "PLANNING_PLACEMENT_PRICING_TYPE_FLAT_RATE_CLICKS",
-            "PLANNING_PLACEMENT_PRICING_TYPE_CPM_ACTIVEVIEW"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "Pricing type of this inventory item."
-        },
-        "startDate": {
-          "type": "string",
-          "format": "date"
-        },
-        "capCostType": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "description": "Cap cost type of this inventory item.",
-          "enum": [
-            "PLANNING_PLACEMENT_CAP_COST_TYPE_NONE",
-            "PLANNING_PLACEMENT_CAP_COST_TYPE_MONTHLY",
-            "PLANNING_PLACEMENT_CAP_COST_TYPE_CUMULATIVE"
-          ]
-        },
-        "groupType": {
-          "type": "string",
-          "description": "Group type of this inventory item if it represents a placement group. Is null otherwise. There are two type of placement groups: PLANNING_PLACEMENT_GROUP_TYPE_PACKAGE is a simple group of inventory items that acts as a single pricing point for a group of tags. PLANNING_PLACEMENT_GROUP_TYPE_ROADBLOCK is a group of inventory items that not only acts as a single pricing point, but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned inventory items to be marked as primary.",
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "enum": [
-            "PLANNING_PLACEMENT_GROUP_TYPE_PACKAGE",
-            "PLANNING_PLACEMENT_GROUP_TYPE_ROADBLOCK"
-          ]
-        }
-      },
-      "description": "Pricing Information"
+    "basePath": "/dfareporting/v3.3/",
+    "baseUrl": "https://dfareporting.googleapis.com/dfareporting/v3.3/",
+    "batchPath": "batch",
+    "canonicalName": "Dfareporting",
+    "description": "Build applications to efficiently manage large or complex trafficking, reporting, and attribution workflows for Campaign Manager 360.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://developers.google.com/doubleclick-advertisers/",
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
     },
-    "VideoFormatsListResponse": {
-      "id": "VideoFormatsListResponse",
-      "description": "Video Format List Response",
-      "type": "object",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#videoFormatsListResponse\"."
-        },
-        "videoFormats": {
-          "items": {
-            "$ref": "VideoFormat"
-          },
-          "type": "array",
-          "description": "Video format collection."
-        }
-      }
-    },
-    "Subaccount": {
-      "id": "Subaccount",
-      "type": "object",
-      "properties": {
-        "accountId": {
-          "type": "string",
-          "description": "ID of the account that contains this subaccount. This is a read-only field that can be left blank.",
-          "format": "int64"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#subaccount\"."
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of this subaccount. This is a read-only, auto-generated field.",
-          "format": "int64"
-        },
-        "name": {
-          "description": "Name of this subaccount. This is a required field. Must be less than 128 characters long and be unique among subaccounts of the same account.",
-          "type": "string"
-        },
-        "availablePermissionIds": {
-          "description": "IDs of the available user role permissions for this subaccount.",
-          "type": "array",
-          "items": {
-            "type": "string",
-            "format": "int64"
-          }
-        }
-      },
-      "description": "Contains properties of a Campaign Manager subaccount."
-    },
-    "InventoryItem": {
-      "description": "Represents a buy from the Planning inventory store.",
-      "properties": {
-        "negotiationChannelId": {
-          "description": "Negotiation channel ID of this inventory item.",
-          "format": "int64",
-          "type": "string"
-        },
-        "estimatedClickThroughRate": {
-          "type": "string",
-          "format": "int64",
-          "description": "Estimated click-through rate of this inventory item."
-        },
-        "lastModifiedInfo": {
-          "description": "Information about the most recent modification of this inventory item.",
-          "$ref": "LastModifiedInfo"
-        },
-        "advertiserId": {
-          "description": "Advertiser ID of this inventory item.",
-          "type": "string",
-          "format": "int64"
-        },
-        "inPlan": {
-          "type": "boolean",
-          "description": "Whether this inventory item is in plan."
-        },
-        "projectId": {
-          "description": "Project ID of this inventory item.",
-          "format": "int64",
-          "type": "string"
-        },
-        "contentCategoryId": {
-          "description": "Content category ID of this inventory item.",
-          "type": "string",
-          "format": "int64"
-        },
-        "rfpId": {
-          "type": "string",
-          "format": "int64",
-          "description": "RFP ID of this inventory item."
-        },
-        "siteId": {
-          "type": "string",
-          "description": "ID of the site this inventory item is associated with.",
-          "format": "int64"
-        },
-        "estimatedConversionRate": {
-          "type": "string",
-          "description": "Estimated conversion rate of this inventory item.",
-          "format": "int64"
-        },
-        "orderId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Order ID of this inventory item."
-        },
-        "accountId": {
-          "format": "int64",
-          "description": "Account ID of this inventory item.",
-          "type": "string"
-        },
-        "type": {
-          "description": "Type of inventory item.",
-          "enum": [
-            "PLANNING_PLACEMENT_TYPE_REGULAR",
-            "PLANNING_PLACEMENT_TYPE_CREDIT"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            ""
-          ]
-        },
-        "adSlots": {
-          "type": "array",
-          "items": {
-            "$ref": "AdSlot"
-          },
-          "description": "Ad slots of this inventory item. If this inventory item represents a standalone placement, there will be exactly one ad slot. If this inventory item represents a placement group, there will be more than one ad slot, each representing one child placement in that placement group."
-        },
-        "pricing": {
-          "$ref": "Pricing",
-          "description": "Pricing of this inventory item."
-        },
-        "subaccountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Subaccount ID of this inventory item."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#inventoryItem\".",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of this inventory item. For standalone inventory items, this is the same name as that of its only ad slot. For group inventory items, this can differ from the name of any of its ad slots.",
-          "type": "string"
-        },
-        "placementStrategyId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Placement strategy ID of this inventory item."
-        },
-        "id": {
-          "description": "ID of this inventory item.",
-          "type": "string",
-          "format": "int64"
-        }
-      },
-      "type": "object",
-      "id": "InventoryItem"
-    },
-    "AdSlot": {
-      "description": "Ad Slot",
-      "type": "object",
-      "id": "AdSlot",
-      "properties": {
-        "comment": {
-          "type": "string",
-          "description": "Comment for this ad slot."
-        },
-        "compatibility": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "DISPLAY",
-            "DISPLAY_INTERSTITIAL",
-            "APP",
-            "APP_INTERSTITIAL",
-            "IN_STREAM_VIDEO",
-            "IN_STREAM_AUDIO"
-          ],
-          "description": "Ad slot compatibility. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop, mobile devices or in mobile apps for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are for rendering in mobile apps. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard."
-        },
-        "height": {
-          "description": "Height of this ad slot.",
-          "type": "string",
-          "format": "int64"
-        },
-        "linkedPlacementId": {
-          "type": "string",
-          "description": "ID of the placement from an external platform that is linked to this ad slot.",
-          "format": "int64"
-        },
-        "paymentSourceType": {
-          "enum": [
-            "PLANNING_PAYMENT_SOURCE_TYPE_AGENCY_PAID",
-            "PLANNING_PAYMENT_SOURCE_TYPE_PUBLISHER_PAID"
-          ],
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "Payment source type of this ad slot."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this ad slot."
-        },
-        "width": {
-          "type": "string",
-          "description": "Width of this ad slot.",
-          "format": "int64"
-        },
-        "primary": {
-          "description": "Primary ad slot of a roadblock inventory item.",
-          "type": "boolean"
-        }
-      }
-    },
-    "Conversion": {
-      "id": "Conversion",
-      "description": "A Conversion represents when a user successfully performs a desired action after seeing an ad.",
-      "properties": {
-        "childDirectedTreatment": {
-          "description": "Whether this particular request may come from a user under the age of 13, under COPPA compliance.",
-          "type": "boolean"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversion\".",
-          "type": "string"
-        },
-        "value": {
-          "format": "double",
-          "description": "The value of the conversion.",
-          "type": "number"
-        },
-        "timestampMicros": {
-          "description": "The timestamp of conversion, in Unix epoch micros. This is a required field.",
-          "format": "int64",
-          "type": "string"
-        },
-        "floodlightConfigurationId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Floodlight Configuration ID of this conversion. This is a required field."
-        },
-        "ordinal": {
-          "description": "The ordinal of the conversion. Use this field to control how conversions of the same user and day are de-duplicated. This is a required field.",
-          "type": "string"
-        },
-        "matchId": {
-          "type": "string",
-          "description": "The match ID field. A match ID is your own first-party identifier that has been synced with Google using the match ID feature in Floodlight. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[],mobileDeviceId and gclid. This or encryptedUserId or encryptedUserIdCandidates[] or mobileDeviceId or gclid is a required field."
-        },
-        "mobileDeviceId": {
-          "description": "The mobile device ID. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[], matchId and gclid. This or encryptedUserId or encryptedUserIdCandidates[] or matchId or gclid is a required field.",
-          "type": "string"
-        },
-        "nonPersonalizedAd": {
-          "description": "Whether the conversion was for a non personalized ad.",
-          "type": "boolean"
-        },
-        "floodlightActivityId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Floodlight Activity ID of this conversion. This is a required field."
-        },
-        "limitAdTracking": {
-          "description": "Whether Limit Ad Tracking is enabled. When set to true, the conversion will be used for reporting but not targeting. This will prevent remarketing.",
-          "type": "boolean"
-        },
-        "customVariables": {
-          "description": "Custom floodlight variables.",
-          "items": {
-            "$ref": "CustomFloodlightVariable"
-          },
-          "type": "array"
-        },
-        "gclid": {
-          "type": "string",
-          "description": "The Google click ID. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[], matchId and mobileDeviceId. This or encryptedUserId or encryptedUserIdCandidates[] or matchId or mobileDeviceId is a required field."
-        },
-        "quantity": {
-          "description": "The quantity of the conversion.",
-          "format": "int64",
-          "type": "string"
-        },
-        "treatmentForUnderage": {
-          "description": "Whether this particular request may come from a user under the age of 16 (may differ by country), under compliance with the European Union's General Data Protection Regulation (GDPR).",
-          "type": "boolean"
-        },
-        "encryptedUserId": {
-          "type": "string",
-          "description": "The alphanumeric encrypted user ID. When set, encryptionInfo should also be specified. This field is mutually exclusive with encryptedUserIdCandidates[], matchId, mobileDeviceId and gclid. This or encryptedUserIdCandidates[] or matchId or mobileDeviceId or gclid is a required field."
-        },
-        "encryptedUserIdCandidates": {
-          "description": "A list of the alphanumeric encrypted user IDs. Any user ID with exposure prior to the conversion timestamp will be used in the inserted conversion. If no such user ID is found then the conversion will be rejected with INVALID_ARGUMENT error. When set, encryptionInfo should also be specified. This field may only be used when calling batchinsert; it is not supported by batchupdate. This field is mutually exclusive with encryptedUserId, matchId, mobileDeviceId and gclid. This or encryptedUserId or matchId or mobileDeviceId or gclid is a required field.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object"
-    },
-    "FloodlightActivityDynamicTag": {
-      "id": "FloodlightActivityDynamicTag",
-      "type": "object",
-      "description": "Dynamic Tag",
-      "properties": {
-        "tag": {
-          "description": "Tag code.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this tag."
-        },
-        "id": {
-          "description": "ID of this dynamic tag. This is a read-only, auto-generated field.",
-          "type": "string",
-          "format": "int64"
-        }
-      }
-    },
-    "TechnologyTargeting": {
-      "description": "Technology Targeting.",
-      "properties": {
-        "operatingSystems": {
-          "type": "array",
-          "items": {
-            "$ref": "OperatingSystem"
-          },
-          "description": "Operating systems that this ad targets. To target specific versions, use operatingSystemVersions. For each operating system only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system, do not set targeting for operating system versions for the same operating system."
-        },
-        "connectionTypes": {
-          "description": "Connection types that this ad targets. For each connection type only id is required. The other fields are populated automatically when the ad is inserted or updated.",
-          "items": {
-            "$ref": "ConnectionType"
-          },
-          "type": "array"
-        },
-        "platformTypes": {
-          "description": "Platform types that this ad targets. For example, desktop, mobile, or tablet. For each platform type, only id is required, and the other fields are populated automatically when the ad is inserted or updated.",
-          "items": {
-            "$ref": "PlatformType"
-          },
-          "type": "array"
-        },
-        "browsers": {
-          "description": "Browsers that this ad targets. For each browser either set browserVersionId or dartId along with the version numbers. If both are specified, only browserVersionId will be used. The other fields are populated automatically when the ad is inserted or updated.",
-          "type": "array",
-          "items": {
-            "$ref": "Browser"
-          }
-        },
-        "mobileCarriers": {
-          "items": {
-            "$ref": "MobileCarrier"
-          },
-          "type": "array",
-          "description": "Mobile carriers that this ad targets. For each mobile carrier only id is required, and the other fields are populated automatically when the ad is inserted or updated. If targeting a mobile carrier, do not set targeting for any zip codes."
-        },
-        "operatingSystemVersions": {
-          "description": "Operating system versions that this ad targets. To target all versions, use operatingSystems. For each operating system version, only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system version, do not set targeting for the corresponding operating system in operatingSystems.",
-          "type": "array",
-          "items": {
-            "$ref": "OperatingSystemVersion"
-          }
-        }
-      },
-      "id": "TechnologyTargeting",
-      "type": "object"
-    },
-    "CreativeFieldValuesListResponse": {
-      "description": "Creative Field Value List Response",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeFieldValuesListResponse\".",
-          "type": "string"
-        },
-        "creativeFieldValues": {
-          "items": {
-            "$ref": "CreativeFieldValue"
-          },
-          "type": "array",
-          "description": "Creative field value collection."
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "CreativeFieldValuesListResponse"
-    },
-    "UserProfileList": {
-      "id": "UserProfileList",
-      "properties": {
-        "items": {
-          "items": {
-            "$ref": "UserProfile"
-          },
-          "description": "The user profiles returned in this response.",
-          "type": "array"
-        },
-        "etag": {
-          "type": "string",
-          "description": "Etag of this resource."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userProfileList\"."
-        }
-      },
-      "description": "Represents the list of user profiles.",
-      "type": "object"
-    },
-    "SiteContact": {
-      "properties": {
-        "title": {
-          "type": "string",
-          "description": "Title or designation of this site contact."
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of this site contact. This is a read-only, auto-generated field.",
-          "format": "int64"
-        },
-        "firstName": {
-          "description": "First name of this site contact.",
-          "type": "string"
-        },
-        "lastName": {
-          "type": "string",
-          "description": "Last name of this site contact."
-        },
-        "address": {
-          "type": "string",
-          "description": "Address of this site contact."
-        },
-        "contactType": {
-          "enum": [
-            "SALES_PERSON",
-            "TRAFFICKER"
-          ],
-          "type": "string",
-          "description": "Site contact type.",
-          "enumDescriptions": [
-            "",
-            ""
-          ]
-        },
-        "email": {
-          "type": "string",
-          "description": "Email address of this site contact. This is a required field."
-        },
-        "phone": {
-          "type": "string",
-          "description": "Primary phone number of this site contact."
-        }
-      },
-      "type": "object",
-      "id": "SiteContact",
-      "description": "Site Contact"
-    },
-    "CompatibleFields": {
-      "id": "CompatibleFields",
-      "type": "object",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#compatibleFields."
-        },
-        "crossDimensionReachReportCompatibleFields": {
-          "$ref": "CrossDimensionReachReportCompatibleFields",
-          "description": "Contains items that are compatible to be selected for a report of type \"CROSS_DIMENSION_REACH\"."
-        },
-        "floodlightReportCompatibleFields": {
-          "description": "Contains items that are compatible to be selected for a report of type \"FLOODLIGHT\".",
-          "$ref": "FloodlightReportCompatibleFields"
-        },
-        "reachReportCompatibleFields": {
-          "description": "Contains items that are compatible to be selected for a report of type \"REACH\".",
-          "$ref": "ReachReportCompatibleFields"
-        },
-        "reportCompatibleFields": {
-          "$ref": "ReportCompatibleFields",
-          "description": "Contains items that are compatible to be selected for a report of type \"STANDARD\"."
-        },
-        "pathToConversionReportCompatibleFields": {
-          "$ref": "PathToConversionReportCompatibleFields",
-          "description": "Contains items that are compatible to be selected for a report of type \"PATH_TO_CONVERSION\"."
-        }
-      },
-      "description": "Represents a response to the queryCompatibleFields method."
-    },
-    "MobileAppsListResponse": {
-      "description": "Mobile app List Response",
-      "properties": {
-        "mobileApps": {
-          "type": "array",
-          "description": "Mobile apps collection.",
-          "items": {
-            "$ref": "MobileApp"
-          }
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#mobileAppsListResponse\".",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "MobileAppsListResponse"
-    },
-    "DynamicTargetingKey": {
-      "id": "DynamicTargetingKey",
-      "type": "object",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#dynamicTargetingKey\"."
-        },
-        "objectType": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "enum": [
-            "OBJECT_ADVERTISER",
-            "OBJECT_AD",
-            "OBJECT_CREATIVE",
-            "OBJECT_PLACEMENT"
-          ],
-          "description": "Type of the object of this dynamic targeting key. This is a required field."
-        },
-        "name": {
-          "description": "Name of this dynamic targeting key. This is a required field. Must be less than 256 characters long and cannot contain commas. All characters are converted to lowercase.",
-          "type": "string"
-        },
-        "objectId": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of the object of this dynamic targeting key. This is a required field."
-        }
-      },
-      "description": "Contains properties of a dynamic targeting key. Dynamic targeting keys are unique, user-friendly labels, created at the advertiser level in DCM, that can be assigned to ads, creatives, and placements and used for targeting with Studio dynamic creatives. Use these labels instead of numeric Campaign Manager IDs (such as placement IDs) to save time and avoid errors in your dynamic feeds."
-    },
-    "TargetingTemplate": {
-      "type": "object",
-      "description": "Contains properties of a targeting template. A targeting template encapsulates targeting information which can be reused across multiple ads.",
-      "id": "TargetingTemplate",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "ID of this targeting template. This is a read-only, auto-generated field.",
-          "format": "int64"
-        },
-        "languageTargeting": {
-          "description": "Language targeting criteria.",
-          "$ref": "LanguageTargeting"
-        },
-        "advertiserId": {
-          "description": "Advertiser ID of this targeting template. This is a required field on insert and is read-only after insert.",
-          "format": "int64",
-          "type": "string"
-        },
-        "advertiserIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
-        },
-        "dayPartTargeting": {
-          "description": "Time and day targeting criteria.",
-          "$ref": "DayPartTargeting"
-        },
-        "name": {
-          "description": "Name of this targeting template. This field is required. It must be less than 256 characters long and unique within an advertiser.",
-          "type": "string"
-        },
-        "listTargetingExpression": {
-          "description": "Remarketing list targeting criteria.",
-          "$ref": "ListTargetingExpression"
-        },
-        "accountId": {
-          "type": "string",
-          "description": "Account ID of this targeting template. This field, if left unset, will be auto-generated on insert and is read-only after insert.",
-          "format": "int64"
-        },
-        "subaccountId": {
-          "description": "Subaccount ID of this targeting template. This field, if left unset, will be auto-generated on insert and is read-only after insert.",
-          "format": "int64",
-          "type": "string"
-        },
-        "geoTargeting": {
-          "$ref": "GeoTargeting",
-          "description": "Geographical targeting criteria."
-        },
-        "technologyTargeting": {
-          "$ref": "TechnologyTargeting",
-          "description": "Technology platform targeting criteria."
-        },
-        "keyValueTargetingExpression": {
-          "$ref": "KeyValueTargetingExpression",
-          "description": "Key-value targeting criteria."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#targetingTemplate\".",
-          "type": "string"
-        }
-      }
-    },
-    "FloodlightReportCompatibleFields": {
-      "properties": {
-        "kind": {
-          "description": "The kind of resource this is, in this case dfareporting#floodlightReportCompatibleFields.",
-          "type": "string"
-        },
-        "metrics": {
-          "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.",
-          "type": "array",
-          "items": {
-            "$ref": "Metric"
-          }
-        },
-        "dimensions": {
-          "type": "array",
-          "items": {
-            "$ref": "Dimension"
-          },
-          "description": "Dimensions which are compatible to be selected in the \"dimensions\" section of the report."
-        },
-        "dimensionFilters": {
-          "items": {
-            "$ref": "Dimension"
-          },
-          "description": "Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.",
-          "type": "array"
-        }
-      },
-      "description": "Represents fields that are compatible to be selected for a report of type \"FlOODLIGHT\".",
-      "type": "object",
-      "id": "FloodlightReportCompatibleFields"
-    },
-    "Size": {
-      "id": "Size",
-      "description": "Represents the dimensions of ads, placements, creatives, or creative assets.",
-      "type": "object",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#size\".",
-          "type": "string"
-        },
-        "height": {
-          "description": "Height of this size. Acceptable values are 0 to 32767, inclusive.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "id": {
-          "format": "int64",
-          "description": "ID of this size. This is a read-only, auto-generated field.",
-          "type": "string"
-        },
-        "iab": {
-          "description": "IAB standard size. This is a read-only, auto-generated field.",
-          "type": "boolean"
-        },
-        "width": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Width of this size. Acceptable values are 0 to 32767, inclusive."
-        }
-      }
-    },
-    "OrderContact": {
-      "description": "Contact of an order.",
-      "type": "object",
-      "properties": {
-        "contactType": {
-          "description": "Type of this contact.",
-          "enum": [
-            "PLANNING_ORDER_CONTACT_BUYER_CONTACT",
-            "PLANNING_ORDER_CONTACT_BUYER_BILLING_CONTACT",
-            "PLANNING_ORDER_CONTACT_SELLER_CONTACT"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "type": "string"
-        },
-        "contactTitle": {
-          "type": "string",
-          "description": "Title of this contact."
-        },
-        "contactName": {
-          "type": "string",
-          "description": "Name of this contact."
-        },
-        "signatureUserProfileId": {
-          "description": "ID of the user profile containing the signature that will be embedded into order documents.",
-          "format": "int64",
-          "type": "string"
-        },
-        "contactInfo": {
-          "type": "string",
-          "description": "Free-form information about this contact. It could be any information related to this contact in addition to type, title, name, and signature user profile ID."
-        }
-      },
-      "id": "OrderContact"
-    },
-    "ReportList": {
-      "properties": {
-        "items": {
-          "items": {
-            "$ref": "Report"
-          },
-          "description": "The reports returned in this response.",
-          "type": "array"
-        },
-        "nextPageToken": {
-          "description": "Continuation token used to page through reports. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted.",
-          "type": "string"
-        },
-        "etag": {
-          "description": "The eTag of this response for caching purposes.",
-          "type": "string"
-        },
-        "kind": {
-          "description": "The kind of list this is, in this case dfareporting#reportList.",
-          "type": "string"
-        }
-      },
-      "description": "Represents the list of reports.",
-      "id": "ReportList",
-      "type": "object"
-    },
-    "PlacementTag": {
-      "description": "Placement Tag",
-      "id": "PlacementTag",
-      "properties": {
-        "placementId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Placement ID"
-        },
-        "tagDatas": {
-          "items": {
-            "$ref": "TagData"
-          },
-          "description": "Tags generated for this placement.",
-          "type": "array"
-        }
-      },
-      "type": "object"
-    },
-    "DeliverySchedule": {
-      "properties": {
-        "frequencyCap": {
-          "$ref": "FrequencyCap",
-          "description": "Limit on the number of times an individual user can be served the ad within a specified period of time."
-        },
-        "hardCutoff": {
-          "type": "boolean",
-          "description": "Whether or not hard cutoff is enabled. If true, the ad will not serve after the end date and time. Otherwise the ad will continue to be served until it has reached its delivery goals."
-        },
-        "impressionRatio": {
-          "description": "Impression ratio for this ad. This ratio determines how often each ad is served relative to the others. For example, if ad A has an impression ratio of 1 and ad B has an impression ratio of 3, then Campaign Manager will serve ad B three times as often as ad A. Acceptable values are 1 to 10, inclusive.",
-          "format": "int64",
-          "type": "string"
-        },
-        "priority": {
-          "description": "Serving priority of an ad, with respect to other ads. The lower the priority number, the greater the priority with which it is served.",
-          "type": "string",
-          "enum": [
-            "AD_PRIORITY_01",
-            "AD_PRIORITY_02",
-            "AD_PRIORITY_03",
-            "AD_PRIORITY_04",
-            "AD_PRIORITY_05",
-            "AD_PRIORITY_06",
-            "AD_PRIORITY_07",
-            "AD_PRIORITY_08",
-            "AD_PRIORITY_09",
-            "AD_PRIORITY_10",
-            "AD_PRIORITY_11",
-            "AD_PRIORITY_12",
-            "AD_PRIORITY_13",
-            "AD_PRIORITY_14",
-            "AD_PRIORITY_15",
-            "AD_PRIORITY_16"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        }
-      },
-      "description": "Delivery Schedule.",
-      "type": "object",
-      "id": "DeliverySchedule"
-    },
-    "RichMediaExitOverride": {
-      "id": "RichMediaExitOverride",
-      "description": "Rich Media Exit Override.",
-      "properties": {
-        "clickThroughUrl": {
-          "$ref": "ClickThroughUrl",
-          "description": "Click-through URL of this rich media exit override. Applicable if the enabled field is set to true."
-        },
-        "enabled": {
-          "type": "boolean",
-          "description": "Whether to use the clickThroughUrl. If false, the creative-level exit will be used."
-        },
-        "exitId": {
-          "format": "int64",
-          "description": "ID for the override to refer to a specific exit in the creative.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "UserProfile": {
-      "properties": {
-        "etag": {
-          "type": "string",
-          "description": "Etag of this resource."
-        },
-        "userName": {
-          "type": "string",
-          "description": "The user name."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userProfile\"."
-        },
-        "subAccountName": {
-          "type": "string",
-          "description": "The sub account name this profile belongs to if applicable."
-        },
-        "accountName": {
-          "type": "string",
-          "description": "The account name this profile belongs to."
-        },
-        "profileId": {
-          "description": "The unique ID of the user profile.",
-          "type": "string",
-          "format": "int64"
-        },
-        "accountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "The account ID to which this profile belongs."
-        },
-        "subAccountId": {
-          "type": "string",
-          "description": "The sub account ID this profile belongs to if applicable.",
-          "format": "int64"
-        }
-      },
-      "id": "UserProfile",
-      "description": "A UserProfile resource lets you list all DFA user profiles that are associated with a Google user account. The profile_id needs to be specified in other API requests. ",
-      "type": "object"
-    },
-    "ReportCompatibleFields": {
-      "description": "Represents fields that are compatible to be selected for a report of type \"STANDARD\".",
-      "type": "object",
-      "properties": {
-        "metrics": {
-          "items": {
-            "$ref": "Metric"
-          },
-          "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.",
-          "type": "array"
-        },
-        "dimensions": {
-          "items": {
-            "$ref": "Dimension"
-          },
-          "type": "array",
-          "description": "Dimensions which are compatible to be selected in the \"dimensions\" section of the report."
-        },
-        "pivotedActivityMetrics": {
-          "items": {
-            "$ref": "Metric"
-          },
-          "description": "Metrics which are compatible to be selected as activity metrics to pivot on in the \"activities\" section of the report.",
-          "type": "array"
-        },
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#reportCompatibleFields."
-        },
-        "dimensionFilters": {
-          "description": "Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.",
-          "type": "array",
-          "items": {
-            "$ref": "Dimension"
-          }
-        }
-      },
-      "id": "ReportCompatibleFields"
-    },
-    "Placement": {
-      "properties": {
-        "archived": {
-          "description": "Whether this placement is archived.",
-          "type": "boolean"
-        },
-        "campaignId": {
-          "description": "Campaign ID of this placement. This field is a required field on insertion.",
-          "format": "int64",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placement\"."
-        },
-        "campaignIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the campaign. This is a read-only, auto-generated field."
-        },
-        "videoActiveViewOptOut": {
-          "description": "Whether Verification and ActiveView are disabled for in-stream video creatives for this placement. The same setting videoActiveViewOptOut exists on the site level -- the opt out occurs if either of these settings are true. These settings are distinct from DirectorySites.settings.activeViewOptOut or Sites.siteSettings.activeViewOptOut which only apply to display ads. However, Accounts.activeViewOptOut opts out both video traffic, as well as display ads, from Verification and ActiveView.",
-          "type": "boolean"
-        },
-        "externalId": {
-          "type": "string",
-          "description": "External ID for this placement."
-        },
-        "placementGroupId": {
-          "format": "int64",
-          "description": "ID of this placement's group, if applicable.",
-          "type": "string"
-        },
-        "createInfo": {
-          "description": "Information about the creation of this placement. This is a read-only field.",
-          "$ref": "LastModifiedInfo"
-        },
-        "comment": {
-          "description": "Comments for this placement.",
-          "type": "string"
-        },
-        "lookbackConfiguration": {
-          "description": "Lookback window settings for this placement.",
-          "$ref": "LookbackConfiguration"
-        },
-        "tagSetting": {
-          "description": "Tag settings for this placement.",
-          "$ref": "TagSetting"
-        },
-        "sslRequired": {
-          "type": "boolean",
-          "description": "Whether creatives assigned to this placement must be SSL-compliant."
-        },
-        "adBlockingOptOut": {
-          "type": "boolean",
-          "description": "Whether this placement opts out of ad blocking. When true, ad blocking is disabled for this placement. When false, the campaign and site settings take effect."
-        },
-        "vpaidAdapterChoice": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "VPAID adapter setting for this placement. Controls which VPAID format the measurement adapter will use for in-stream video creatives assigned to this placement. *Note:* Flash is no longer supported. This field now defaults to HTML5 when the following values are provided: FLASH, BOTH.",
-          "enum": [
-            "DEFAULT",
-            "FLASH",
-            "HTML5",
-            "BOTH"
-          ]
-        },
-        "paymentApproved": {
-          "type": "boolean",
-          "description": "Whether payment was approved for this placement. This is a read-only field relevant only to publisher-paid placements."
-        },
-        "lastModifiedInfo": {
-          "description": "Information about the most recent modification of this placement. This is a read-only field.",
-          "$ref": "LastModifiedInfo"
-        },
-        "siteIdDimensionValue": {
-          "description": "Dimension value for the ID of the site. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "size": {
-          "$ref": "Size",
-          "description": "Size associated with this placement. When inserting or updating a placement, only the size ID field is used. This field is required on insertion."
-        },
-        "directorySiteId": {
-          "type": "string",
-          "description": "Directory site ID of this placement. On insert, you must set either this field or the siteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.",
-          "format": "int64"
-        },
-        "accountId": {
-          "format": "int64",
-          "description": "Account ID of this placement. This field can be left blank.",
-          "type": "string"
-        },
-        "id": {
-          "description": "ID of this placement. This is a read-only, auto-generated field.",
-          "type": "string",
-          "format": "int64"
-        },
-        "idDimensionValue": {
-          "description": "Dimension value for the ID of this placement. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "pricingSchedule": {
-          "description": "Pricing schedule of this placement. This field is required on insertion, specifically subfields startDate, endDate and pricingType.",
-          "$ref": "PricingSchedule"
-        },
-        "additionalSizes": {
-          "items": {
-            "$ref": "Size"
-          },
-          "type": "array",
-          "description": "Additional sizes associated with this placement. When inserting or updating a placement, only the size ID field is used."
-        },
-        "advertiserIdDimensionValue": {
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "contentCategoryId": {
-          "type": "string",
-          "description": "ID of the content category assigned to this placement.",
-          "format": "int64"
-        },
-        "keyName": {
-          "type": "string",
-          "description": "Key name of this placement. This is a read-only, auto-generated field."
-        },
-        "advertiserId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Advertiser ID of this placement. This field can be left blank."
-        },
-        "publisherUpdateInfo": {
-          "$ref": "LastModifiedInfo",
-          "description": "Information about the last publisher update. This is a read-only field."
-        },
-        "status": {
-          "description": "Third-party placement status.",
-          "enum": [
-            "PENDING_REVIEW",
-            "PAYMENT_ACCEPTED",
-            "PAYMENT_REJECTED",
-            "ACKNOWLEDGE_REJECTION",
-            "ACKNOWLEDGE_ACCEPTANCE",
-            "DRAFT"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "placementGroupIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the placement group. This is a read-only, auto-generated field."
-        },
-        "siteId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Site ID associated with this placement. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement. This is a required field that is read-only after insertion."
-        },
-        "directorySiteIdDimensionValue": {
-          "description": "Dimension value for the ID of the directory site. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "tagFormats": {
-          "type": "array",
-          "description": "Tag formats to generate for this placement. This field is required on insertion. Acceptable values are: - \"PLACEMENT_TAG_STANDARD\" - \"PLACEMENT_TAG_IFRAME_JAVASCRIPT\" - \"PLACEMENT_TAG_IFRAME_ILAYER\" - \"PLACEMENT_TAG_INTERNAL_REDIRECT\" - \"PLACEMENT_TAG_JAVASCRIPT\" - \"PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT\" - \"PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT\" - \"PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT\" - \"PLACEMENT_TAG_CLICK_COMMANDS\" - \"PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH\" - \"PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_3\" - \"PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_4\" - \"PLACEMENT_TAG_TRACKING\" - \"PLACEMENT_TAG_TRACKING_IFRAME\" - \"PLACEMENT_TAG_TRACKING_JAVASCRIPT\" ",
-          "items": {
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ],
+    "id": "dfareporting:v3.3",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://dfareporting.mtls.googleapis.com/",
+    "name": "dfareporting",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
             "enum": [
-              "PLACEMENT_TAG_STANDARD",
-              "PLACEMENT_TAG_IFRAME_JAVASCRIPT",
-              "PLACEMENT_TAG_IFRAME_ILAYER",
-              "PLACEMENT_TAG_INTERNAL_REDIRECT",
-              "PLACEMENT_TAG_JAVASCRIPT",
-              "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT",
-              "PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT",
-              "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT",
-              "PLACEMENT_TAG_CLICK_COMMANDS",
-              "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH",
-              "PLACEMENT_TAG_TRACKING",
-              "PLACEMENT_TAG_TRACKING_IFRAME",
-              "PLACEMENT_TAG_TRACKING_JAVASCRIPT",
-              "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_3",
-              "PLACEMENT_TAG_IFRAME_JAVASCRIPT_LEGACY",
-              "PLACEMENT_TAG_JAVASCRIPT_LEGACY",
-              "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT_LEGACY",
-              "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT_LEGACY",
-              "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_4"
+                "1",
+                "2"
             ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
             "type": "string"
-          }
         },
-        "primary": {
-          "description": "Whether this placement is the primary placement of a roadblock (placement group). You cannot change this field from true to false. Setting this field to true will automatically set the primary field on the original primary placement of the roadblock to false, and it will automatically set the roadblock's primaryPlacementId field to the ID of this placement.",
-          "type": "boolean"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this placement.This is a required field and must be less than or equal to 256 characters long."
-        },
-        "compatibility": {
-          "description": "Placement compatibility. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering on desktop, on mobile devices or in mobile apps for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are no longer allowed for new placement insertions. Instead, use DISPLAY or DISPLAY_INTERSTITIAL. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. This field is required on insertion.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "DISPLAY",
-            "DISPLAY_INTERSTITIAL",
-            "APP",
-            "APP_INTERSTITIAL",
-            "IN_STREAM_VIDEO",
-            "IN_STREAM_AUDIO"
-          ],
-          "type": "string"
-        },
-        "videoSettings": {
-          "description": "A collection of settings which affect video creatives served through this placement. Applicable to placements with IN_STREAM_VIDEO compatibility.",
-          "$ref": "VideoSettings"
-        },
-        "subaccountId": {
-          "description": "Subaccount ID of this placement. This field can be left blank.",
-          "type": "string",
-          "format": "int64"
-        },
-        "paymentSource": {
-          "enum": [
-            "PLACEMENT_AGENCY_PAID",
-            "PLACEMENT_PUBLISHER_PAID"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "description": "Payment source for this placement. This is a required field that is read-only after insertion."
-        },
-        "placementStrategyId": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID of the placement strategy assigned to this placement."
-        }
-      },
-      "type": "object",
-      "description": "Contains properties of a placement.",
-      "id": "Placement"
-    },
-    "Rule": {
-      "id": "Rule",
-      "description": "A rule associates an asset with a targeting template for asset-level targeting. Applicable to INSTREAM_VIDEO creatives.",
-      "properties": {
-        "targetingTemplateId": {
-          "type": "string",
-          "format": "int64",
-          "description": "A targeting template ID. The targeting from the targeting template will be used to determine whether this asset should be served. This is a required field."
-        },
-        "assetId": {
-          "type": "string",
-          "format": "int64",
-          "description": "A creativeAssets[].id. This should refer to one of the parent assets in this creative. This is a required field."
-        },
-        "name": {
-          "description": "A user-friendly name for this rule. This is a required field.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "CustomRichMediaEvents": {
-      "description": "Represents a Custom Rich Media Events group.",
-      "properties": {
-        "filteredEventIds": {
-          "type": "array",
-          "items": {
-            "$ref": "DimensionValue"
-          },
-          "description": "List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName."
-        },
-        "kind": {
-          "description": "The kind of resource this is, in this case dfareporting#customRichMediaEvents.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "CustomRichMediaEvents"
-    },
-    "DirectorySitesListResponse": {
-      "description": "Directory Site List Response",
-      "properties": {
-        "directorySites": {
-          "type": "array",
-          "description": "Directory site collection.",
-          "items": {
-            "$ref": "DirectorySite"
-          }
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#directorySitesListResponse\"."
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        }
-      },
-      "id": "DirectorySitesListResponse",
-      "type": "object"
-    },
-    "FloodlightActivitiesListResponse": {
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivitiesListResponse\"."
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        },
-        "floodlightActivities": {
-          "description": "Floodlight activity collection.",
-          "type": "array",
-          "items": {
-            "$ref": "FloodlightActivity"
-          }
-        }
-      },
-      "description": "Floodlight Activity List Response",
-      "id": "FloodlightActivitiesListResponse",
-      "type": "object"
-    },
-    "MobileCarrier": {
-      "id": "MobileCarrier",
-      "description": "Contains information about a mobile carrier that can be targeted by ads.",
-      "type": "object",
-      "properties": {
-        "countryCode": {
-          "type": "string",
-          "description": "Country code of the country to which this mobile carrier belongs."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this mobile carrier."
-        },
-        "id": {
-          "description": "ID of this mobile carrier.",
-          "type": "string",
-          "format": "int64"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#mobileCarrier\"."
-        },
-        "countryDartId": {
-          "description": "DART ID of the country to which this mobile carrier belongs.",
-          "format": "int64",
-          "type": "string"
-        }
-      }
-    },
-    "SkippableSetting": {
-      "id": "SkippableSetting",
-      "properties": {
-        "skippable": {
-          "description": "Whether the user can skip creatives served to this placement.",
-          "type": "boolean"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#skippableSetting\"."
-        },
-        "skipOffset": {
-          "$ref": "VideoOffset",
-          "description": "Amount of time to play videos served to this placement before the skip button should appear. Applicable when skippable is true."
-        },
-        "progressOffset": {
-          "description": "Amount of time to play videos served to this placement before counting a view. Applicable when skippable is true.",
-          "$ref": "VideoOffset"
-        }
-      },
-      "type": "object",
-      "description": "Skippable Settings"
-    },
-    "TargetableRemarketingList": {
-      "id": "TargetableRemarketingList",
-      "properties": {
-        "accountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Account ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests."
-        },
-        "name": {
-          "description": "Name of the targetable remarketing list. Is no greater than 128 characters long.",
-          "type": "string"
-        },
-        "listSize": {
-          "format": "int64",
-          "description": "Number of users currently in the list. This is a read-only field.",
-          "type": "string"
-        },
-        "advertiserId": {
-          "description": "Dimension value for the advertiser ID that owns this targetable remarketing list.",
-          "format": "int64",
-          "type": "string"
-        },
-        "lifeSpan": {
-          "description": "Number of days that a user should remain in the targetable remarketing list without an impression.",
-          "format": "int64",
-          "type": "string"
-        },
-        "advertiserIdDimensionValue": {
-          "description": "Dimension value for the ID of the advertiser.",
-          "$ref": "DimensionValue"
-        },
-        "listSource": {
-          "type": "string",
-          "description": "Product from which this targetable remarketing list was originated.",
-          "enum": [
-            "REMARKETING_LIST_SOURCE_OTHER",
-            "REMARKETING_LIST_SOURCE_ADX",
-            "REMARKETING_LIST_SOURCE_DFP",
-            "REMARKETING_LIST_SOURCE_XFP",
-            "REMARKETING_LIST_SOURCE_DFA",
-            "REMARKETING_LIST_SOURCE_GA",
-            "REMARKETING_LIST_SOURCE_YOUTUBE",
-            "REMARKETING_LIST_SOURCE_DBM",
-            "REMARKETING_LIST_SOURCE_GPLUS",
-            "REMARKETING_LIST_SOURCE_DMP",
-            "REMARKETING_LIST_SOURCE_PLAY_STORE"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "subaccountId": {
-          "format": "int64",
-          "description": "Subaccount ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.",
-          "type": "string"
-        },
-        "description": {
-          "type": "string",
-          "description": "Targetable remarketing list description."
-        },
-        "id": {
-          "type": "string",
-          "format": "int64",
-          "description": "Targetable remarketing list ID."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#targetableRemarketingList\".",
-          "type": "string"
-        },
-        "active": {
-          "description": "Whether this targetable remarketing list is active.",
-          "type": "boolean"
-        }
-      },
-      "type": "object",
-      "description": "Contains properties of a targetable remarketing list. Remarketing enables you to create lists of users who have performed specific actions on a site, then target ads to members of those lists. This resource is a read-only view of a remarketing list to be used to faciliate targeting ads to specific lists. Remarketing lists that are owned by your advertisers and those that are shared to your advertisers or account are accessible via this resource. To manage remarketing lists that are owned by your advertisers, use the RemarketingLists resource."
-    },
-    "Order": {
-      "properties": {
-        "siteId": {
-          "items": {
-            "type": "string",
-            "format": "int64"
-          },
-          "description": "Site IDs this order is associated with.",
-          "type": "array"
-        },
-        "contacts": {
-          "type": "array",
-          "items": {
-            "$ref": "OrderContact"
-          },
-          "description": "Contacts for this order."
-        },
-        "notes": {
-          "type": "string",
-          "description": "Notes of this order."
-        },
-        "siteNames": {
-          "type": "array",
-          "items": {
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
             "type": "string"
-          },
-          "description": "Free-form site names this order is associated with."
         },
-        "buyerInvoiceId": {
-          "description": "Buyer invoice ID associated with this order.",
-          "type": "string"
-        },
-        "approverUserProfileIds": {
-          "type": "array",
-          "items": {
-            "type": "string",
-            "format": "int64"
-          },
-          "description": "IDs for users that have to approve documents created for this order."
-        },
-        "planningTermId": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID of the terms and conditions template used in this order."
-        },
-        "sellerOrderId": {
-          "description": "Seller order ID associated with this order.",
-          "type": "string"
-        },
-        "sellerOrganizationName": {
-          "description": "Name of the seller organization.",
-          "type": "string"
-        },
-        "lastModifiedInfo": {
-          "description": "Information about the most recent modification of this order.",
-          "$ref": "LastModifiedInfo"
-        },
-        "projectId": {
-          "description": "Project ID of this order.",
-          "format": "int64",
-          "type": "string"
-        },
-        "termsAndConditions": {
-          "type": "string",
-          "description": "Terms and conditions of this order."
-        },
-        "advertiserId": {
-          "format": "int64",
-          "description": "Advertiser ID of this order.",
-          "type": "string"
-        },
-        "buyerOrganizationName": {
-          "type": "string",
-          "description": "Name of the buyer organization."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#order\"."
-        },
-        "name": {
-          "description": "Name of this order.",
-          "type": "string"
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of this order. This is a read-only, auto-generated field.",
-          "format": "int64"
-        },
-        "accountId": {
-          "description": "Account ID of this order.",
-          "format": "int64",
-          "type": "string"
-        },
-        "subaccountId": {
-          "description": "Subaccount ID of this order.",
-          "type": "string",
-          "format": "int64"
-        },
-        "comments": {
-          "description": "Comments in this order.",
-          "type": "string"
-        }
-      },
-      "id": "Order",
-      "type": "object",
-      "description": "Describes properties of a Planning order."
-    },
-    "ClickThroughUrlSuffixProperties": {
-      "properties": {
-        "clickThroughUrlSuffix": {
-          "description": "Click-through URL suffix to apply to all ads in this entity's scope. Must be less than 128 characters long.",
-          "type": "string"
-        },
-        "overrideInheritedSuffix": {
-          "type": "boolean",
-          "description": "Whether this entity should override the inherited click-through URL suffix with its own defined value."
-        }
-      },
-      "type": "object",
-      "description": "Click Through URL Suffix settings.",
-      "id": "ClickThroughUrlSuffixProperties"
-    },
-    "FloodlightActivityGroup": {
-      "properties": {
-        "tagString": {
-          "type": "string",
-          "description": "Value of the type= parameter in the floodlight tag, which the ad servers use to identify the activity group that the activity belongs to. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being a-z0-9[ _ ]. This tag string must also be unique among activity groups of the same floodlight configuration. This field is read-only after insertion."
-        },
-        "advertiserIdDimensionValue": {
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "subaccountId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Subaccount ID of this floodlight activity group. This is a read-only field that can be left blank."
-        },
-        "floodlightConfigurationId": {
-          "description": "Floodlight configuration ID of this floodlight activity group. This is a required field.",
-          "format": "int64",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this floodlight activity group. This is a required field. Must be less than 65 characters long and cannot contain quotes."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivityGroup\"."
-        },
-        "floodlightConfigurationIdDimensionValue": {
-          "description": "Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "type": {
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "description": "Type of the floodlight activity group. This is a required field that is read-only after insertion.",
-          "enum": [
-            "COUNTER",
-            "SALE"
-          ],
-          "type": "string"
-        },
-        "idDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of this floodlight activity group. This is a read-only, auto-generated field."
-        },
-        "id": {
-          "description": "ID of this floodlight activity group. This is a read-only, auto-generated field.",
-          "format": "int64",
-          "type": "string"
-        },
-        "advertiserId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Advertiser ID of this floodlight activity group. If this field is left blank, the value will be copied over either from the floodlight configuration's advertiser or from the existing activity group's advertiser."
-        },
-        "accountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Account ID of this floodlight activity group. This is a read-only field that can be left blank."
-        }
-      },
-      "description": "Contains properties of a Floodlight activity group.",
-      "type": "object",
-      "id": "FloodlightActivityGroup"
-    },
-    "FloodlightActivityPublisherDynamicTag": {
-      "properties": {
-        "siteIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the site. This is a read-only, auto-generated field."
-        },
-        "clickThrough": {
-          "type": "boolean",
-          "description": "Whether this tag is applicable only for click-throughs."
-        },
-        "dynamicTag": {
-          "$ref": "FloodlightActivityDynamicTag",
-          "description": "Dynamic floodlight tag."
-        },
-        "siteId": {
-          "description": "Site ID of this dynamic tag.",
-          "type": "string",
-          "format": "int64"
-        },
-        "viewThrough": {
-          "type": "boolean",
-          "description": "Whether this tag is applicable only for view-throughs."
-        },
-        "directorySiteId": {
-          "type": "string",
-          "description": "Directory site ID of this dynamic tag. This is a write-only field that can be used as an alternative to the siteId field. When this resource is retrieved, only the siteId field will be populated.",
-          "format": "int64"
-        }
-      },
-      "id": "FloodlightActivityPublisherDynamicTag",
-      "description": "Publisher Dynamic Tag",
-      "type": "object"
-    },
-    "LookbackConfiguration": {
-      "id": "LookbackConfiguration",
-      "description": "Lookback configuration settings.",
-      "type": "object",
-      "properties": {
-        "postImpressionActivitiesDuration": {
-          "format": "int32",
-          "description": "Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used. Acceptable values are 0 to 90, inclusive.",
-          "type": "integer"
-        },
-        "clickDuration": {
-          "type": "integer",
-          "description": "Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used. Acceptable values are 0 to 90, inclusive.",
-          "format": "int32"
-        }
-      }
-    },
-    "MetrosListResponse": {
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#metrosListResponse\"."
-        },
-        "metros": {
-          "items": {
-            "$ref": "Metro"
-          },
-          "description": "Metro collection.",
-          "type": "array"
-        }
-      },
-      "description": "Metro List Response",
-      "id": "MetrosListResponse",
-      "type": "object"
-    },
-    "City": {
-      "properties": {
-        "countryDartId": {
-          "description": "DART ID of the country to which this city belongs.",
-          "format": "int64",
-          "type": "string"
-        },
-        "metroCode": {
-          "type": "string",
-          "description": "Metro region code of the metro region (DMA) to which this city belongs."
-        },
-        "regionCode": {
-          "description": "Region code of the region to which this city belongs.",
-          "type": "string"
-        },
-        "countryCode": {
-          "description": "Country code of the country to which this city belongs.",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#city\".",
-          "type": "string"
-        },
-        "metroDmaId": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID of the metro region (DMA) to which this city belongs."
-        },
-        "dartId": {
-          "description": "DART ID of this city. This is the ID used for targeting and generating reports.",
-          "type": "string",
-          "format": "int64"
-        },
-        "regionDartId": {
-          "format": "int64",
-          "type": "string",
-          "description": "DART ID of the region to which this city belongs."
-        },
-        "name": {
-          "description": "Name of this city.",
-          "type": "string"
-        }
-      },
-      "id": "City",
-      "description": "Contains information about a city that can be targeted by ads.",
-      "type": "object"
-    },
-    "AccountPermissionGroup": {
-      "type": "object",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountPermissionGroup\".",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of this account permission group.",
-          "type": "string"
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of this account permission group.",
-          "format": "int64"
-        }
-      },
-      "description": "AccountPermissionGroups contains a mapping of permission group IDs to names. A permission group is a grouping of account permissions.",
-      "id": "AccountPermissionGroup"
-    },
-    "CitiesListResponse": {
-      "properties": {
-        "cities": {
-          "description": "City collection.",
-          "items": {
-            "$ref": "City"
-          },
-          "type": "array"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#citiesListResponse\".",
-          "type": "string"
-        }
-      },
-      "id": "CitiesListResponse",
-      "type": "object",
-      "description": "City List Response"
-    },
-    "EncryptionInfo": {
-      "description": "A description of how user IDs are encrypted.",
-      "type": "object",
-      "id": "EncryptionInfo",
-      "properties": {
-        "encryptionEntityId": {
-          "format": "int64",
-          "type": "string",
-          "description": "The encryption entity ID. This should match the encryption configuration for ad serving or Data Transfer."
-        },
-        "encryptionSource": {
-          "type": "string",
-          "description": "Describes whether the encrypted cookie was received from ad serving (the %m macro) or from Data Transfer.",
-          "enum": [
-            "ENCRYPTION_SCOPE_UNKNOWN",
-            "AD_SERVING",
-            "DATA_TRANSFER"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ]
-        },
-        "encryptionEntityType": {
-          "description": "The encryption entity type. This should match the encryption configuration for ad serving or Data Transfer.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "ENCRYPTION_ENTITY_TYPE_UNKNOWN",
-            "DCM_ACCOUNT",
-            "DCM_ADVERTISER",
-            "DBM_PARTNER",
-            "DBM_ADVERTISER",
-            "ADWORDS_CUSTOMER",
-            "DFP_NETWORK_CODE"
-          ],
-          "type": "string"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#encryptionInfo\".",
-          "type": "string"
-        }
-      }
-    },
-    "DefaultClickThroughEventTagProperties": {
-      "type": "object",
-      "id": "DefaultClickThroughEventTagProperties",
-      "description": "Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign's setting further.",
-      "properties": {
-        "overrideInheritedEventTag": {
-          "description": "Whether this entity should override the inherited default click-through event tag with its own defined value.",
-          "type": "boolean"
-        },
-        "defaultClickThroughEventTagId": {
-          "format": "int64",
-          "description": "ID of the click-through event tag to apply to all ads in this entity's scope.",
-          "type": "string"
-        }
-      }
-    },
-    "AccountUserProfile": {
-      "type": "object",
-      "description": "AccountUserProfiles contains properties of a Campaign Manager user profile. This resource is specifically for managing user profiles, whereas UserProfiles is for accessing the API.",
-      "properties": {
-        "userAccessType": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "NORMAL_USER",
-            "SUPER_USER",
-            "INTERNAL_ADMINISTRATOR",
-            "READ_ONLY_SUPER_USER"
-          ],
-          "type": "string",
-          "description": "User type of the user profile. This is a read-only field that can be left blank."
-        },
-        "subaccountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Subaccount ID of the user profile. This is a read-only field that can be left blank."
-        },
-        "comments": {
-          "description": "Comments for this user profile.",
-          "type": "string"
-        },
-        "userRoleFilter": {
-          "description": "Filter that describes which user roles are visible to the user profile.",
-          "$ref": "ObjectFilter"
-        },
-        "active": {
-          "description": "Whether this user profile is active. This defaults to false, and must be set true on insert for the user profile to be usable.",
-          "type": "boolean"
-        },
-        "name": {
-          "description": "Name of the user profile. This is a required field. Must be less than 64 characters long, must be globally unique, and cannot contain whitespace or any of the following characters: \"&;\u003c\u003e\"#%,\".",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountUserProfile\"."
-        },
-        "campaignFilter": {
-          "description": "Filter that describes which campaigns are visible to the user profile.",
-          "$ref": "ObjectFilter"
-        },
-        "id": {
-          "description": "ID of the user profile. This is a read-only, auto-generated field.",
-          "format": "int64",
-          "type": "string"
-        },
-        "accountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Account ID of the user profile. This is a read-only field that can be left blank."
-        },
-        "email": {
-          "type": "string",
-          "description": "Email of the user profile. The email addresss must be linked to a Google Account. This field is required on insertion and is read-only after insertion."
-        },
-        "advertiserFilter": {
-          "description": "Filter that describes which advertisers are visible to the user profile.",
-          "$ref": "ObjectFilter"
-        },
-        "userRoleId": {
-          "type": "string",
-          "format": "int64",
-          "description": "User role ID of the user profile. This is a required field."
-        },
-        "traffickerType": {
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "INTERNAL_NON_TRAFFICKER",
-            "INTERNAL_TRAFFICKER",
-            "EXTERNAL_TRAFFICKER"
-          ],
-          "description": "Trafficker type of this user profile. This is a read-only field.",
-          "type": "string"
-        },
-        "locale": {
-          "type": "string",
-          "description": "Locale of the user profile. This is a required field. Acceptable values are: - \"cs\" (Czech) - \"de\" (German) - \"en\" (English) - \"en-GB\" (English United Kingdom) - \"es\" (Spanish) - \"fr\" (French) - \"it\" (Italian) - \"ja\" (Japanese) - \"ko\" (Korean) - \"pl\" (Polish) - \"pt-BR\" (Portuguese Brazil) - \"ru\" (Russian) - \"sv\" (Swedish) - \"tr\" (Turkish) - \"zh-CN\" (Chinese Simplified) - \"zh-TW\" (Chinese Traditional) "
-        },
-        "siteFilter": {
-          "description": "Filter that describes which sites are visible to the user profile.",
-          "$ref": "ObjectFilter"
-        }
-      },
-      "id": "AccountUserProfile"
-    },
-    "CreativeOptimizationConfiguration": {
-      "type": "object",
-      "description": "Creative optimization settings.",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Name of this creative optimization config. This is a required field and must be less than 129 characters long."
-        },
-        "optimizationActivitys": {
-          "items": {
-            "$ref": "OptimizationActivity"
-          },
-          "type": "array",
-          "description": "List of optimization activities associated with this configuration."
-        },
-        "optimizationModel": {
-          "type": "string",
-          "description": "Optimization model for this configuration.",
-          "enum": [
-            "CLICK",
-            "POST_CLICK",
-            "POST_IMPRESSION",
-            "POST_CLICK_AND_IMPRESSION",
-            "VIDEO_COMPLETION"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "id": {
-          "format": "int64",
-          "description": "ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.",
-          "type": "string"
-        }
-      },
-      "id": "CreativeOptimizationConfiguration"
-    },
-    "Site": {
-      "id": "Site",
-      "properties": {
-        "approved": {
-          "description": "Whether this site is approved.",
-          "type": "boolean"
-        },
-        "id": {
-          "description": "ID of this site. This is a read-only, auto-generated field.",
-          "format": "int64",
-          "type": "string"
-        },
-        "subaccountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Subaccount ID of this site. This is a read-only field that can be left blank."
-        },
-        "siteContacts": {
-          "items": {
-            "$ref": "SiteContact"
-          },
-          "description": "Site contacts.",
-          "type": "array"
-        },
-        "keyName": {
-          "description": "Key name of this site. This is a read-only, auto-generated field.",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#site\".",
-          "type": "string"
-        },
-        "directorySiteId": {
-          "description": "Directory site associated with this site. This is a required field that is read-only after insertion.",
-          "type": "string",
-          "format": "int64"
-        },
-        "directorySiteIdDimensionValue": {
-          "description": "Dimension value for the ID of the directory site. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "videoSettings": {
-          "description": "Default video settings for new placements created under this site. This value will be used to populate the placements.videoSettings field, when no value is specified for the new placement.",
-          "$ref": "SiteVideoSettings"
-        },
-        "name": {
-          "description": "Name of this site.This is a required field. Must be less than 128 characters long. If this site is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this site is a top-level site, and the name must be unique among top-level sites of the same account.",
-          "type": "string"
-        },
-        "accountId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Account ID of this site. This is a read-only field that can be left blank."
-        },
-        "idDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of this site. This is a read-only, auto-generated field."
-        },
-        "siteSettings": {
-          "$ref": "SiteSettings",
-          "description": "Site-wide settings."
-        }
-      },
-      "type": "object",
-      "description": "Contains properties of a site."
-    },
-    "PopupWindowProperties": {
-      "type": "object",
-      "properties": {
-        "showAddressBar": {
-          "type": "boolean",
-          "description": "Whether to display the browser address bar."
-        },
-        "dimension": {
-          "$ref": "Size",
-          "description": "Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID"
-        },
-        "offset": {
-          "$ref": "OffsetPosition",
-          "description": "Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES."
-        },
-        "positionType": {
-          "enum": [
-            "CENTER",
-            "COORDINATES"
-          ],
-          "description": "Popup window position either centered or at specific coordinate.",
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string"
-        },
-        "showMenuBar": {
-          "type": "boolean",
-          "description": "Whether to display the browser menu bar."
-        },
-        "showToolBar": {
-          "type": "boolean",
-          "description": "Whether to display the browser tool bar."
-        },
-        "showStatusBar": {
-          "type": "boolean",
-          "description": "Whether to display the browser status bar."
-        },
-        "title": {
-          "description": "Title of popup window.",
-          "type": "string"
-        },
-        "showScrollBar": {
-          "type": "boolean",
-          "description": "Whether to display the browser scroll bar."
-        }
-      },
-      "description": "Popup Window Properties.",
-      "id": "PopupWindowProperties"
-    },
-    "VideoSettings": {
-      "properties": {
-        "orientation": {
-          "description": "Orientation of a video placement. If this value is set, placement will return assets matching the specified orientation.",
-          "enum": [
-            "ANY",
-            "LANDSCAPE",
-            "PORTRAIT"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ]
-        },
-        "transcodeSettings": {
-          "description": "Settings for the transcodes of video creatives served to this placement. If this object is provided, the creative-level transcode settings will be overridden.",
-          "$ref": "TranscodeSetting"
-        },
-        "skippableSettings": {
-          "description": "Settings for the skippability of video creatives served to this placement. If this object is provided, the creative-level skippable settings will be overridden.",
-          "$ref": "SkippableSetting"
-        },
-        "companionSettings": {
-          "$ref": "CompanionSetting",
-          "description": "Settings for the companion creatives of video creatives served to this placement."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#videoSettings\"."
-        }
-      },
-      "description": "Video Settings",
-      "type": "object",
-      "id": "VideoSettings"
-    },
-    "UserRolePermissionGroup": {
-      "description": "Represents a grouping of related user role permissions.",
-      "id": "UserRolePermissionGroup",
-      "properties": {
-        "id": {
-          "format": "int64",
-          "description": "ID of this user role permission.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this user role permission group."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolePermissionGroup\"."
-        }
-      },
-      "type": "object"
-    },
-    "LanguagesListResponse": {
-      "id": "LanguagesListResponse",
-      "properties": {
-        "languages": {
-          "description": "Language collection.",
-          "items": {
-            "$ref": "Language"
-          },
-          "type": "array"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#languagesListResponse\".",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Language List Response"
-    },
-    "PostalCode": {
-      "id": "PostalCode",
-      "properties": {
-        "countryCode": {
-          "type": "string",
-          "description": "Country code of the country to which this postal code belongs."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#postalCode\"."
-        },
-        "countryDartId": {
-          "format": "int64",
-          "type": "string",
-          "description": "DART ID of the country to which this postal code belongs."
-        },
-        "code": {
-          "type": "string",
-          "description": "Postal code. This is equivalent to the id field."
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of this postal code."
-        }
-      },
-      "description": "Contains information about a postal code that can be targeted by ads.",
-      "type": "object"
-    },
-    "AdBlockingConfiguration": {
-      "description": "Campaign ad blocking settings.",
-      "id": "AdBlockingConfiguration",
-      "type": "object",
-      "properties": {
-        "creativeBundleId": {
-          "description": "ID of a creative bundle to use for this campaign. If set, brand-neutral ads will select creatives from this bundle. Otherwise, a default transparent pixel will be used.",
-          "format": "int64",
-          "type": "string"
-        },
-        "enabled": {
-          "description": "Whether this campaign has enabled ad blocking. When true, ad blocking is enabled for placements in the campaign, but this may be overridden by site and placement settings. When false, ad blocking is disabled for all placements under the campaign, regardless of site and placement settings.",
-          "type": "boolean"
-        },
-        "overrideClickThroughUrl": {
-          "description": "Whether the brand-neutral ad's click-through URL comes from the campaign's creative bundle or the override URL. Must be set to true if ad blocking is enabled and no creative bundle is configured.",
-          "type": "boolean"
-        },
-        "clickThroughUrl": {
-          "description": "Click-through URL used by brand-neutral ads. This is a required field when overrideClickThroughUrl is set to true.",
-          "type": "string"
-        }
-      }
-    },
-    "LandingPage": {
-      "type": "object",
-      "description": "Contains information about where a user's browser is taken after the user clicks an ad.",
-      "properties": {
-        "archived": {
-          "description": "Whether this landing page has been archived.",
-          "type": "boolean"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this landing page. This is a required field. It must be less than 256 characters long."
-        },
-        "advertiserId": {
-          "type": "string",
-          "description": "Advertiser ID of this landing page. This is a required field.",
-          "format": "int64"
-        },
-        "url": {
-          "type": "string",
-          "description": "URL of this landing page. This is a required field."
-        },
-        "id": {
-          "description": "ID of this landing page. This is a read-only, auto-generated field.",
-          "type": "string",
-          "format": "int64"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#landingPage\".",
-          "type": "string"
-        },
-        "deepLinks": {
-          "items": {
-            "$ref": "DeepLink"
-          },
-          "type": "array",
-          "description": "Links that will direct the user to a mobile app, if installed."
-        }
-      },
-      "id": "LandingPage"
-    },
-    "UserRole": {
-      "description": "Contains properties of auser role, which is used to manage user access.",
-      "id": "UserRole",
-      "properties": {
-        "permissions": {
-          "description": "List of permissions associated with this user role.",
-          "type": "array",
-          "items": {
-            "$ref": "UserRolePermission"
-          }
-        },
-        "parentUserRoleId": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of the user role that this user role is based on or copied from. This is a required field."
-        },
-        "id": {
-          "format": "int64",
-          "description": "ID of this user role. This is a read-only, auto-generated field.",
-          "type": "string"
-        },
-        "defaultUserRole": {
-          "description": "Whether this is a default user role. Default user roles are created by the system for the account/subaccount and cannot be modified or deleted. Each default user role comes with a basic set of preassigned permissions.",
-          "type": "boolean"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRole\"."
-        },
-        "subaccountId": {
-          "description": "Subaccount ID of this user role. This is a read-only field that can be left blank.",
-          "type": "string",
-          "format": "int64"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this user role. This is a required field. Must be less than 256 characters long. If this user role is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this user role is a top-level user role, and the name must be unique among top-level user roles of the same account."
-        },
-        "accountId": {
-          "description": "Account ID of this user role. This is a read-only field that can be left blank.",
-          "format": "int64",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "PlacementGroup": {
-      "description": "Contains properties of a package or roadblock.",
-      "type": "object",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementGroup\".",
-          "type": "string"
-        },
-        "directorySiteId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Directory site ID associated with this placement group. On insert, you must set either this field or the site_id field to specify the site associated with this placement group. This is a required field that is read-only after insertion."
-        },
-        "pricingSchedule": {
-          "$ref": "PricingSchedule",
-          "description": "Pricing schedule of this placement group. This field is required on insertion."
-        },
-        "accountId": {
-          "format": "int64",
-          "description": "Account ID of this placement group. This is a read-only field that can be left blank.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this placement group. This is a required field and must be less than 256 characters long."
-        },
-        "campaignIdDimensionValue": {
-          "description": "Dimension value for the ID of the campaign. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "id": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID of this placement group. This is a read-only, auto-generated field."
-        },
-        "placementGroupType": {
-          "description": "Type of this placement group. A package is a simple group of placements that acts as a single pricing point for a group of tags. A roadblock is a group of placements that not only acts as a single pricing point, but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned placements to be marked as primary for reporting. This field is required on insertion.",
-          "enum": [
-            "PLACEMENT_PACKAGE",
-            "PLACEMENT_ROADBLOCK"
-          ],
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string"
-        },
-        "siteId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Site ID associated with this placement group. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement group. This is a required field that is read-only after insertion."
-        },
-        "directorySiteIdDimensionValue": {
-          "description": "Dimension value for the ID of the directory site. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "placementStrategyId": {
-          "description": "ID of the placement strategy assigned to this placement group.",
-          "format": "int64",
-          "type": "string"
-        },
-        "childPlacementIds": {
-          "type": "array",
-          "description": "IDs of placements which are assigned to this placement group. This is a read-only, auto-generated field.",
-          "items": {
-            "format": "int64",
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
             "type": "string"
-          }
         },
-        "archived": {
-          "type": "boolean",
-          "description": "Whether this placement group is archived."
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
         },
-        "primaryPlacementIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the primary placement. This is a read-only, auto-generated field."
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
         },
-        "siteIdDimensionValue": {
-          "description": "Dimension value for the ID of the site. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
         },
-        "advertiserId": {
-          "format": "int64",
-          "description": "Advertiser ID of this placement group. This is a required field on insertion.",
-          "type": "string"
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
         },
-        "idDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of this placement group. This is a read-only, auto-generated field."
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
         },
-        "advertiserIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
         },
-        "lastModifiedInfo": {
-          "$ref": "LastModifiedInfo",
-          "description": "Information about the most recent modification of this placement group. This is a read-only field."
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         },
-        "contentCategoryId": {
-          "format": "int64",
-          "description": "ID of the content category assigned to this placement group.",
-          "type": "string"
-        },
-        "comment": {
-          "type": "string",
-          "description": "Comments for this placement group."
-        },
-        "primaryPlacementId": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of the primary placement, used to calculate the media cost of a roadblock (placement group). Modifying this field will automatically modify the primary field on all affected roadblock child placements."
-        },
-        "subaccountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Subaccount ID of this placement group. This is a read-only field that can be left blank."
-        },
-        "createInfo": {
-          "$ref": "LastModifiedInfo",
-          "description": "Information about the creation of this placement group. This is a read-only field."
-        },
-        "campaignId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Campaign ID of this placement group. This field is required on insertion."
-        },
-        "externalId": {
-          "description": "External ID for this placement.",
-          "type": "string"
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      },
-      "id": "PlacementGroup"
     },
-    "PlacementAssignment": {
-      "id": "PlacementAssignment",
-      "type": "object",
-      "properties": {
-        "sslRequired": {
-          "description": "Whether the placement to be assigned requires SSL. This is a read-only field that is auto-generated when the ad is inserted or updated.",
-          "type": "boolean"
-        },
-        "placementId": {
-          "type": "string",
-          "description": "ID of the placement to be assigned. This is a required field.",
-          "format": "int64"
-        },
-        "active": {
-          "type": "boolean",
-          "description": "Whether this placement assignment is active. When true, the placement will be included in the ad's rotation."
-        },
-        "placementIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the placement. This is a read-only, auto-generated field."
-        }
-      },
-      "description": "Placement Assignment."
-    },
-    "ConversionsBatchUpdateResponse": {
-      "properties": {
-        "hasFailures": {
-          "type": "boolean",
-          "description": "Indicates that some or all conversions failed to update."
-        },
-        "status": {
-          "description": "The update status of each conversion. Statuses are returned in the same order that conversions are updated.",
-          "type": "array",
-          "items": {
-            "$ref": "ConversionStatus"
-          }
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionsBatchUpdateResponse\"."
-        }
-      },
-      "type": "object",
-      "description": "Update Conversions Response.",
-      "id": "ConversionsBatchUpdateResponse"
-    },
-    "VideoOffset": {
-      "properties": {
-        "offsetPercentage": {
-          "description": "Duration, as a percentage of video duration. Do not set when offsetSeconds is set. Acceptable values are 0 to 100, inclusive.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "offsetSeconds": {
-          "description": "Duration, in seconds. Do not set when offsetPercentage is set. Acceptable values are 0 to 86399, inclusive.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "description": "Video Offset",
-      "type": "object",
-      "id": "VideoOffset"
-    },
-    "FloodlightConfiguration": {
-      "type": "object",
-      "properties": {
-        "naturalSearchConversionAttributionOption": {
-          "enum": [
-            "EXCLUDE_NATURAL_SEARCH_CONVERSION_ATTRIBUTION",
-            "INCLUDE_NATURAL_SEARCH_CONVERSION_ATTRIBUTION",
-            "INCLUDE_NATURAL_SEARCH_TIERED_CONVERSION_ATTRIBUTION"
-          ],
-          "description": "Types of attribution options for natural search conversions.",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "type": "string"
-        },
-        "userDefinedVariableConfigurations": {
-          "type": "array",
-          "items": {
-            "$ref": "UserDefinedVariableConfiguration"
-          },
-          "description": "List of user defined variables enabled for this configuration."
-        },
-        "omnitureSettings": {
-          "$ref": "OmnitureSettings",
-          "description": "Settings for Campaign Manager Omniture integration."
-        },
-        "tagSettings": {
-          "description": "Configuration settings for dynamic and image floodlight tags.",
-          "$ref": "TagSettings"
-        },
-        "analyticsDataSharingEnabled": {
-          "type": "boolean",
-          "description": "Whether advertiser data is shared with Google Analytics."
-        },
-        "customViewabilityMetric": {
-          "$ref": "CustomViewabilityMetric",
-          "description": "Custom Viewability metric for the floodlight configuration."
-        },
-        "lookbackConfiguration": {
-          "$ref": "LookbackConfiguration",
-          "description": "Lookback window settings for this floodlight configuration."
-        },
-        "exposureToConversionEnabled": {
-          "description": "Whether the exposure-to-conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.",
-          "type": "boolean"
-        },
-        "inAppAttributionTrackingEnabled": {
-          "description": "Whether in-app attribution tracking is enabled.",
-          "type": "boolean"
-        },
-        "advertiserIdDimensionValue": {
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "advertiserId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Advertiser ID of the parent advertiser of this floodlight configuration."
-        },
-        "firstDayOfWeek": {
-          "enum": [
-            "MONDAY",
-            "SUNDAY"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "description": "Day that will be counted as the first day of the week in reports. This is a required field."
-        },
-        "thirdPartyAuthenticationTokens": {
-          "type": "array",
-          "items": {
-            "$ref": "ThirdPartyAuthenticationToken"
-          },
-          "description": "List of third-party authentication tokens enabled for this configuration."
-        },
-        "subaccountId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Subaccount ID of this floodlight configuration. This is a read-only field that can be left blank."
-        },
-        "accountId": {
-          "description": "Account ID of this floodlight configuration. This is a read-only field that can be left blank.",
-          "type": "string",
-          "format": "int64"
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of this floodlight configuration. This is a read-only, auto-generated field.",
-          "format": "int64"
-        },
-        "idDimensionValue": {
-          "description": "Dimension value for the ID of this floodlight configuration. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightConfiguration\".",
-          "type": "string"
-        }
-      },
-      "description": "Contains properties of a Floodlight configuration.",
-      "id": "FloodlightConfiguration"
-    },
-    "Metro": {
-      "description": "Contains information about a metro region that can be targeted by ads.",
-      "type": "object",
-      "id": "Metro",
-      "properties": {
-        "metroCode": {
-          "description": "Metro code of this metro region. This is equivalent to dma_id.",
-          "type": "string"
-        },
-        "dmaId": {
-          "type": "string",
-          "format": "int64",
-          "description": "DMA ID of this metro region. This is the ID used for targeting and generating reports, and is equivalent to metro_code."
-        },
-        "dartId": {
-          "type": "string",
-          "description": "DART ID of this metro region.",
-          "format": "int64"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#metro\"."
-        },
-        "countryCode": {
-          "description": "Country code of the country to which this metro region belongs.",
-          "type": "string"
-        },
-        "countryDartId": {
-          "format": "int64",
-          "description": "DART ID of the country to which this metro region belongs.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this metro region."
-        }
-      }
-    },
-    "PlacementStrategy": {
-      "description": "Contains properties of a placement strategy.",
-      "id": "PlacementStrategy",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "Name of this placement strategy. This is a required field. It must be less than 256 characters long and unique among placement strategies of the same account.",
-          "type": "string"
-        },
-        "id": {
-          "description": "ID of this placement strategy. This is a read-only, auto-generated field.",
-          "format": "int64",
-          "type": "string"
-        },
-        "accountId": {
-          "type": "string",
-          "description": "Account ID of this placement strategy.This is a read-only field that can be left blank.",
-          "format": "int64"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementStrategy\".",
-          "type": "string"
-        }
-      }
-    },
-    "AccountPermissionGroupsListResponse": {
-      "id": "AccountPermissionGroupsListResponse",
-      "type": "object",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountPermissionGroupsListResponse\"."
+    "protocol": "rest",
+    "resources": {
+        "accountActiveAdSummaries": {
+            "methods": {
+                "get": {
+                    "description": "Gets the account's active ad summary by account ID.",
+                    "flatPath": "userprofiles/{profileId}/accountActiveAdSummaries/{summaryAccountId}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.accountActiveAdSummaries.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "summaryAccountId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "summaryAccountId": {
+                            "description": "Account ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accountActiveAdSummaries/{summaryAccountId}",
+                    "response": {
+                        "$ref": "AccountActiveAdSummary"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
         "accountPermissionGroups": {
-          "description": "Account permission group collection.",
-          "items": {
-            "$ref": "AccountPermissionGroup"
-          },
-          "type": "array"
-        }
-      },
-      "description": "Account Permission Group List Response"
-    },
-    "CreativeGroupAssignment": {
-      "id": "CreativeGroupAssignment",
-      "properties": {
-        "creativeGroupId": {
-          "type": "string",
-          "description": "ID of the creative group to be assigned.",
-          "format": "int64"
+            "methods": {
+                "get": {
+                    "description": "Gets one account permission group by ID.",
+                    "flatPath": "userprofiles/{profileId}/accountPermissionGroups/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.accountPermissionGroups.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Account permission group ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accountPermissionGroups/{id}",
+                    "response": {
+                        "$ref": "AccountPermissionGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves the list of account permission groups.",
+                    "flatPath": "userprofiles/{profileId}/accountPermissionGroups",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.accountPermissionGroups.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accountPermissionGroups",
+                    "response": {
+                        "$ref": "AccountPermissionGroupsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "creativeGroupNumber": {
-          "type": "string",
-          "description": "Creative group number of the creative group assignment.",
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "enum": [
-            "CREATIVE_GROUP_ONE",
-            "CREATIVE_GROUP_TWO"
-          ]
-        }
-      },
-      "type": "object",
-      "description": "Creative Group Assignment."
-    },
-    "Activities": {
-      "id": "Activities",
-      "description": "Represents an activity group.",
-      "type": "object",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#activities."
+        "accountPermissions": {
+            "methods": {
+                "get": {
+                    "description": "Gets one account permission by ID.",
+                    "flatPath": "userprofiles/{profileId}/accountPermissions/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.accountPermissions.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Account permission ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accountPermissions/{id}",
+                    "response": {
+                        "$ref": "AccountPermission"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves the list of account permissions.",
+                    "flatPath": "userprofiles/{profileId}/accountPermissions",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.accountPermissions.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accountPermissions",
+                    "response": {
+                        "$ref": "AccountPermissionsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "filters": {
-          "description": "List of activity filters. The dimension values need to be all either of type \"dfa:activity\" or \"dfa:activityGroup\".",
-          "type": "array",
-          "items": {
-            "$ref": "DimensionValue"
-          }
-        },
-        "metricNames": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "List of names of floodlight activity metrics."
-        }
-      }
-    },
-    "TargetableRemarketingListsListResponse": {
-      "description": "Targetable remarketing list response",
-      "properties": {
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        },
-        "targetableRemarketingLists": {
-          "items": {
-            "$ref": "TargetableRemarketingList"
-          },
-          "description": "Targetable remarketing list collection.",
-          "type": "array"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#targetableRemarketingListsListResponse\"."
-        }
-      },
-      "type": "object",
-      "id": "TargetableRemarketingListsListResponse"
-    },
-    "SiteTranscodeSetting": {
-      "type": "object",
-      "description": "Transcode Settings",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#siteTranscodeSetting\"."
-        },
-        "enabledVideoFormats": {
-          "items": {
-            "format": "int32",
-            "type": "integer"
-          },
-          "description": "Allowlist of video formats to be served to this site template. Set this list to null or empty to serve all video formats.",
-          "type": "array"
-        }
-      },
-      "id": "SiteTranscodeSetting"
-    },
-    "ClickThroughUrl": {
-      "description": "Click-through URL",
-      "properties": {
-        "customClickThroughUrl": {
-          "type": "string",
-          "description": "Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset."
-        },
-        "landingPageId": {
-          "description": "ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.",
-          "type": "string",
-          "format": "int64"
-        },
-        "defaultLandingPage": {
-          "description": "Whether the campaign default landing page is used.",
-          "type": "boolean"
-        },
-        "computedClickThroughUrl": {
-          "type": "string",
-          "description": "Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows: - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field. - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field. - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field. "
-        }
-      },
-      "type": "object",
-      "id": "ClickThroughUrl"
-    },
-    "Recipient": {
-      "description": "Represents a recipient.",
-      "id": "Recipient",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#recipient."
-        },
-        "deliveryType": {
-          "enum": [
-            "LINK",
-            "ATTACHMENT"
-          ],
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "The delivery type for the recipient.",
-          "annotations": {
-            "required": [
-              "dfareporting.reports.insert",
-              "dfareporting.reports.update"
-            ]
-          }
-        },
-        "email": {
-          "type": "string",
-          "annotations": {
-            "required": [
-              "dfareporting.reports.insert",
-              "dfareporting.reports.update"
-            ]
-          },
-          "description": "The email address of the recipient."
-        }
-      },
-      "type": "object"
-    },
-    "Creative": {
-      "id": "Creative",
-      "properties": {
-        "accountId": {
-          "description": "Account ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.",
-          "type": "string",
-          "format": "int64"
-        },
-        "name": {
-          "description": "Name of the creative. This is a required field and must be less than 256 characters long. Applicable to all creative types.",
-          "type": "string"
-        },
-        "redirectUrl": {
-          "type": "string",
-          "description": "URL of hosted image or hosted video or another ad tag. For INSTREAM_VIDEO_REDIRECT creatives this is the in-stream video redirect URL. The standard for a VAST (Video Ad Serving Template) ad response allows for a redirect link to another VAST 2.0 or 3.0 call. This is a required field when applicable. Applicable to the following creative types: DISPLAY_REDIRECT, INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO_REDIRECT"
-        },
-        "htmlCodeLocked": {
-          "type": "boolean",
-          "description": "Whether HTML code is generated by Campaign Manager or manually entered. Set to true to ignore changes to htmlCode. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER."
-        },
-        "latestTraffickedCreativeId": {
-          "description": "Latest Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
-          "format": "int64",
-          "type": "string"
-        },
-        "totalFileSize": {
-          "description": "Combined size of all creative assets. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
-          "format": "int64",
-          "type": "string"
-        },
-        "studioCreativeId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Studio creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID."
-        },
-        "backupImageReportingLabel": {
-          "type": "string",
-          "description": "Reporting label used for HTML5 banner backup image. Applicable to the following creative types: DISPLAY when the primary asset type is not HTML_IMAGE."
-        },
-        "allowScriptAccess": {
-          "type": "boolean",
-          "description": "Whether script access is allowed for this creative. This is a read-only and deprecated field which will automatically be set to true on update. Applicable to the following creative types: FLASH_INPAGE."
-        },
-        "artworkType": {
-          "enum": [
-            "ARTWORK_TYPE_FLASH",
-            "ARTWORK_TYPE_HTML5",
-            "ARTWORK_TYPE_MIXED",
-            "ARTWORK_TYPE_IMAGE"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "Type of artwork used for the creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID."
-        },
-        "creativeAssetSelection": {
-          "description": "Required if dynamicAssetSelection is true.",
-          "$ref": "CreativeAssetSelection"
-        },
-        "thirdPartyBackupImageImpressionsUrl": {
-          "description": "Third-party URL used to record backup image impressions. Applicable to the following creative types: all RICH_MEDIA.",
-          "type": "string"
-        },
-        "mediaDescription": {
-          "description": "Description of the audio or video ad. Applicable to the following creative types: all INSTREAM_VIDEO, INSTREAM_AUDIO, and all VPAID.",
-          "type": "string"
-        },
-        "compatibility": {
-          "type": "array",
-          "description": "Compatibilities associated with this creative. This is a read-only field. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are for rendering in mobile apps. Only pre-existing creatives may have these compatibilities since new creatives will either be assigned DISPLAY or DISPLAY_INTERSTITIAL instead. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. IN_STREAM_AUDIO refers to rendering in in-stream audio ads developed with the VAST standard. Applicable to all creative types. Acceptable values are: - \"APP\" - \"APP_INTERSTITIAL\" - \"IN_STREAM_VIDEO\" - \"IN_STREAM_AUDIO\" - \"DISPLAY\" - \"DISPLAY_INTERSTITIAL\" ",
-          "items": {
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ],
-            "enum": [
-              "DISPLAY",
-              "DISPLAY_INTERSTITIAL",
-              "APP",
-              "APP_INTERSTITIAL",
-              "IN_STREAM_VIDEO",
-              "IN_STREAM_AUDIO"
-            ],
-            "type": "string"
-          }
-        },
-        "type": {
-          "type": "string",
-          "description": "Type of this creative. This is a required field. Applicable to all creative types. *Note:* FLASH_INPAGE, HTML5_BANNER, and IMAGE are only used for existing creatives. New creatives should use DISPLAY as a replacement for these types.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "IMAGE",
-            "DISPLAY_REDIRECT",
-            "CUSTOM_DISPLAY",
-            "INTERNAL_REDIRECT",
-            "CUSTOM_DISPLAY_INTERSTITIAL",
-            "INTERSTITIAL_INTERNAL_REDIRECT",
-            "TRACKING_TEXT",
-            "RICH_MEDIA_DISPLAY_BANNER",
-            "RICH_MEDIA_INPAGE_FLOATING",
-            "RICH_MEDIA_IM_EXPAND",
-            "RICH_MEDIA_DISPLAY_EXPANDING",
-            "RICH_MEDIA_DISPLAY_INTERSTITIAL",
-            "RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL",
-            "RICH_MEDIA_MOBILE_IN_APP",
-            "FLASH_INPAGE",
-            "INSTREAM_VIDEO",
-            "VPAID_LINEAR_VIDEO",
-            "VPAID_NON_LINEAR_VIDEO",
-            "INSTREAM_VIDEO_REDIRECT",
-            "RICH_MEDIA_PEEL_DOWN",
-            "HTML5_BANNER",
-            "DISPLAY",
-            "DISPLAY_IMAGE_GALLERY",
-            "BRAND_SAFE_DEFAULT_INSTREAM_VIDEO",
-            "INSTREAM_AUDIO"
-          ]
-        },
-        "studioAdvertiserId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Studio advertiser ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID."
-        },
-        "autoAdvanceImages": {
-          "description": "Whether images are automatically advanced for image gallery creatives. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY.",
-          "type": "boolean"
-        },
-        "id": {
-          "description": "ID of this creative. This is a read-only, auto-generated field. Applicable to all creative types.",
-          "format": "int64",
-          "type": "string"
-        },
-        "creativeAssets": {
-          "items": {
-            "$ref": "CreativeAsset"
-          },
-          "type": "array",
-          "description": "Assets associated with a creative. Applicable to all but the following creative types: INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and REDIRECT"
-        },
-        "version": {
-          "description": "The version number helps you keep track of multiple versions of your creative in your reports. The version number will always be auto-generated during insert operations to start at 1. For tracking creatives the version cannot be incremented and will always remain at 1. For all other creative types the version can be incremented only by 1 during update operations. In addition, the version will be automatically incremented by 1 when undergoing Rich Media creative merging. Applicable to all creative types.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "size": {
-          "description": "Size associated with this creative. When inserting or updating a creative either the size ID field or size width and height fields can be used. This is a required field when applicable; however for IMAGE, FLASH_INPAGE creatives, and for DISPLAY creatives with a primary asset of type HTML_IMAGE, if left blank, this field will be automatically set using the actual size of the associated image assets. Applicable to the following creative types: DISPLAY, DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA.",
-          "$ref": "Size"
-        },
-        "companionCreatives": {
-          "type": "array",
-          "description": "List of companion creatives assigned to an in-Stream video creative. Acceptable values include IDs of existing flash and image creatives. Applicable to the following creative types: all VPAID, all INSTREAM_AUDIO and all INSTREAM_VIDEO with dynamicAssetSelection set to false.",
-          "items": {
-            "format": "int64",
-            "type": "string"
-          }
-        },
-        "adTagKeys": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "Keywords for a Rich Media creative. Keywords let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use keywords to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID."
-        },
-        "commercialId": {
-          "type": "string",
-          "description": "Industry standard ID assigned to creative for reach and frequency. Applicable to INSTREAM_VIDEO_REDIRECT creatives."
-        },
-        "additionalSizes": {
-          "type": "array",
-          "items": {
-            "$ref": "Size"
-          },
-          "description": "Additional sizes associated with a responsive creative. When inserting or updating a creative either the size ID field or size width and height fields can be used. Applicable to DISPLAY creatives when the primary asset type is HTML_IMAGE."
-        },
-        "archived": {
-          "type": "boolean",
-          "description": "Whether the creative is archived. Applicable to all creative types."
-        },
-        "thirdPartyRichMediaImpressionsUrl": {
-          "description": "Third-party URL used to record rich media impressions. Applicable to the following creative types: all RICH_MEDIA.",
-          "type": "string"
-        },
-        "requiredFlashPluginVersion": {
-          "type": "string",
-          "description": "The minimum required Flash plugin version for this creative. For example, 11.2.202.235. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID."
-        },
-        "fsCommand": {
-          "$ref": "FsCommand",
-          "description": "OpenWindow FSCommand of this creative. This lets the SWF file communicate with either Flash Player or the program hosting Flash Player, such as a web browser. This is only triggered if allowScriptAccess field is true. Applicable to the following creative types: FLASH_INPAGE."
-        },
-        "active": {
-          "type": "boolean",
-          "description": "Whether the creative is active. Applicable to all creative types."
-        },
-        "customKeyValues": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "Custom key-values for a Rich Media creative. Key-values let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use key-values to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID."
-        },
-        "studioTraffickedCreativeId": {
-          "type": "string",
-          "description": "Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
-          "format": "int64"
-        },
-        "clickTags": {
-          "type": "array",
-          "description": "Click tags of the creative. For DISPLAY, FLASH_INPAGE, and HTML5_BANNER creatives, this is a subset of detected click tags for the assets associated with this creative. After creating a flash asset, detected click tags will be returned in the creativeAssetMetadata. When inserting the creative, populate the creative clickTags field using the creativeAssetMetadata.clickTags field. For DISPLAY_IMAGE_GALLERY creatives, there should be exactly one entry in this list for each image creative asset. A click tag is matched with a corresponding creative asset by matching the clickTag.name field with the creativeAsset.assetIdentifier.name field. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
-          "items": {
-            "$ref": "ClickTag"
-          }
-        },
-        "backgroundColor": {
-          "description": "The 6-character HTML color code, beginning with #, for the background of the window area where the Flash file is displayed. Default is white. Applicable to the following creative types: FLASH_INPAGE.",
-          "type": "string"
-        },
-        "backupImageTargetWindow": {
-          "$ref": "TargetWindow",
-          "description": "Target window for backup image. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE."
-        },
-        "subaccountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Subaccount ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types."
-        },
-        "renderingIdDimensionValue": {
-          "description": "Dimension value for the rendering ID of this creative. This is a read-only field. Applicable to all creative types.",
-          "$ref": "DimensionValue"
-        },
-        "advertiserId": {
-          "description": "Advertiser ID of this creative. This is a required field. Applicable to all creative types.",
-          "format": "int64",
-          "type": "string"
-        },
-        "backupImageClickThroughUrl": {
-          "description": "Click-through URL for backup image. Applicable to ENHANCED_BANNER when the primary asset type is not HTML_IMAGE.",
-          "$ref": "CreativeClickThroughUrl"
-        },
-        "adParameters": {
-          "description": "Ad parameters user for VPAID creative. This is a read-only field. Applicable to the following creative types: all VPAID.",
-          "type": "string"
-        },
-        "dynamicAssetSelection": {
-          "description": "Set this to true to enable the use of rules to target individual assets in this creative. When set to true creativeAssetSelection must be set. This also controls asset-level companions. When this is true, companion creatives should be assigned to creative assets. Learn more. Applicable to INSTREAM_VIDEO creatives.",
-          "type": "boolean"
-        },
-        "lastModifiedInfo": {
-          "description": "Creative last modification information. This is a read-only field. Applicable to all creative types.",
-          "$ref": "LastModifiedInfo"
-        },
-        "authoringSource": {
-          "description": "Source application where creative was authored. Presently, only DBM authored creatives will have this field set. Applicable to all creative types.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "CREATIVE_AUTHORING_SOURCE_DCM",
-            "CREATIVE_AUTHORING_SOURCE_DBM",
-            "CREATIVE_AUTHORING_SOURCE_STUDIO",
-            "CREATIVE_AUTHORING_SOURCE_GWD"
-          ],
-          "type": "string"
-        },
-        "timerCustomEvents": {
-          "type": "array",
-          "description": "List of timer events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset is not HTML_IMAGE.",
-          "items": {
-            "$ref": "CreativeCustomEvent"
-          }
-        },
-        "universalAdId": {
-          "description": "A Universal Ad ID as per the VAST 4.0 spec. Applicable to the following creative types: INSTREAM_AUDIO and INSTREAM_VIDEO and VPAID.",
-          "$ref": "UniversalAdId"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creative\"."
-        },
-        "backupImageFeatures": {
-          "description": "List of feature dependencies that will cause a backup image to be served if the browser that serves the ad does not support them. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative asset correctly. This field is initially auto-generated to contain all features detected by Campaign Manager for all the assets of this creative and can then be modified by the client. To reset this field, copy over all the creativeAssets' detected features. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
-          "items": {
-            "enum": [
-              "CSS_FONT_FACE",
-              "CSS_BACKGROUND_SIZE",
-              "CSS_BORDER_IMAGE",
-              "CSS_BORDER_RADIUS",
-              "CSS_BOX_SHADOW",
-              "CSS_FLEX_BOX",
-              "CSS_HSLA",
-              "CSS_MULTIPLE_BGS",
-              "CSS_OPACITY",
-              "CSS_RGBA",
-              "CSS_TEXT_SHADOW",
-              "CSS_ANIMATIONS",
-              "CSS_COLUMNS",
-              "CSS_GENERATED_CONTENT",
-              "CSS_GRADIENTS",
-              "CSS_REFLECTIONS",
-              "CSS_TRANSFORMS",
-              "CSS_TRANSFORMS3D",
-              "CSS_TRANSITIONS",
-              "APPLICATION_CACHE",
-              "CANVAS",
-              "CANVAS_TEXT",
-              "DRAG_AND_DROP",
-              "HASH_CHANGE",
-              "HISTORY",
-              "AUDIO",
-              "VIDEO",
-              "INDEXED_DB",
-              "INPUT_ATTR_AUTOCOMPLETE",
-              "INPUT_ATTR_AUTOFOCUS",
-              "INPUT_ATTR_LIST",
-              "INPUT_ATTR_PLACEHOLDER",
-              "INPUT_ATTR_MAX",
-              "INPUT_ATTR_MIN",
-              "INPUT_ATTR_MULTIPLE",
-              "INPUT_ATTR_PATTERN",
-              "INPUT_ATTR_REQUIRED",
-              "INPUT_ATTR_STEP",
-              "INPUT_TYPE_SEARCH",
-              "INPUT_TYPE_TEL",
-              "INPUT_TYPE_URL",
-              "INPUT_TYPE_EMAIL",
-              "INPUT_TYPE_DATETIME",
-              "INPUT_TYPE_DATE",
-              "INPUT_TYPE_MONTH",
-              "INPUT_TYPE_WEEK",
-              "INPUT_TYPE_TIME",
-              "INPUT_TYPE_DATETIME_LOCAL",
-              "INPUT_TYPE_NUMBER",
-              "INPUT_TYPE_RANGE",
-              "INPUT_TYPE_COLOR",
-              "LOCAL_STORAGE",
-              "POST_MESSAGE",
-              "SESSION_STORAGE",
-              "WEB_SOCKETS",
-              "WEB_SQL_DATABASE",
-              "WEB_WORKERS",
-              "GEO_LOCATION",
-              "INLINE_SVG",
-              "SMIL",
-              "SVG_HREF",
-              "SVG_CLIP_PATHS",
-              "TOUCH",
-              "WEBGL",
-              "SVG_FILTERS",
-              "SVG_FE_IMAGE"
-            ],
-            "type": "string",
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ]
-          },
-          "type": "array"
-        },
-        "convertFlashToHtml5": {
-          "type": "boolean",
-          "description": "Whether Flash assets associated with the creative need to be automatically converted to HTML5. This flag is enabled by default and users can choose to disable it if they don't want the system to generate and use HTML5 asset for this creative. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE."
-        },
-        "htmlCode": {
-          "description": "HTML code for the creative. This is a required field when applicable. This field is ignored if htmlCodeLocked is true. Applicable to the following creative types: all CUSTOM, FLASH_INPAGE, and HTML5_BANNER, and all RICH_MEDIA.",
-          "type": "string"
-        },
-        "authoringTool": {
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "enum": [
-            "NINJA",
-            "SWIFFY"
-          ],
-          "description": "Authoring tool for HTML5 banner creatives. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.",
-          "type": "string"
-        },
-        "mediaDuration": {
-          "description": "Creative audio or video duration in seconds. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO, INSTREAM_AUDIO, all RICH_MEDIA, and all VPAID.",
-          "type": "number",
-          "format": "float"
-        },
-        "overrideCss": {
-          "description": "Override CSS value for rich media creatives. Applicable to the following creative types: all RICH_MEDIA.",
-          "type": "string"
-        },
-        "skippable": {
-          "description": "Whether the user can choose to skip the creative. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.",
-          "type": "boolean"
-        },
-        "renderingId": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of current rendering version. This is a read-only field. Applicable to all creative types."
-        },
-        "thirdPartyUrls": {
-          "items": {
-            "$ref": "ThirdPartyTrackingUrl"
-          },
-          "type": "array",
-          "description": "Third-party URLs for tracking in-stream creative events. Applicable to the following creative types: all INSTREAM_VIDEO, all INSTREAM_AUDIO, and all VPAID."
-        },
-        "sslCompliant": {
-          "description": "Whether the creative is SSL-compliant. This is a read-only field. Applicable to all creative types.",
-          "type": "boolean"
-        },
-        "progressOffset": {
-          "description": "Amount of time to play the video before counting a view. Applicable to the following creative types: all INSTREAM_VIDEO.",
-          "$ref": "VideoOffset"
-        },
-        "idDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of this creative. This is a read-only field. Applicable to all creative types."
-        },
-        "sslOverride": {
-          "description": "Whether creative should be treated as SSL compliant even if the system scan shows it's not. Applicable to all creative types.",
-          "type": "boolean"
-        },
-        "requiredFlashVersion": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The internal Flash version for this creative as calculated by Studio. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE."
-        },
-        "exitCustomEvents": {
-          "items": {
-            "$ref": "CreativeCustomEvent"
-          },
-          "type": "array",
-          "description": "List of exit events configured for the creative. For DISPLAY and DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags, For DISPLAY, an event is also created from the backupImageReportingLabel. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE."
-        },
-        "counterCustomEvents": {
-          "items": {
-            "$ref": "CreativeCustomEvent"
-          },
-          "type": "array",
-          "description": "List of counter events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID."
-        },
-        "skipOffset": {
-          "$ref": "VideoOffset",
-          "description": "Amount of time to play the video before the skip button appears. Applicable to the following creative types: all INSTREAM_VIDEO."
-        },
-        "creativeFieldAssignments": {
-          "type": "array",
-          "items": {
-            "$ref": "CreativeFieldAssignment"
-          },
-          "description": "Creative field assignments for this creative. Applicable to all creative types."
-        }
-      },
-      "description": "Contains properties of a Creative.",
-      "type": "object"
-    },
-    "CreativeAssetSelection": {
-      "description": "Encapsulates the list of rules for asset selection and a default asset in case none of the rules match. Applicable to INSTREAM_VIDEO creatives.",
-      "type": "object",
-      "id": "CreativeAssetSelection",
-      "properties": {
-        "rules": {
-          "type": "array",
-          "items": {
-            "$ref": "Rule"
-          },
-          "description": "Rules determine which asset will be served to a viewer. Rules will be evaluated in the order in which they are stored in this list. This list must contain at least one rule. Applicable to INSTREAM_VIDEO creatives."
-        },
-        "defaultAssetId": {
-          "type": "string",
-          "description": "A creativeAssets[].id. This should refer to one of the parent assets in this creative, and will be served if none of the rules match. This is a required field.",
-          "format": "int64"
-        }
-      }
-    },
-    "ConversionsBatchInsertResponse": {
-      "description": "Insert Conversions Response.",
-      "id": "ConversionsBatchInsertResponse",
-      "properties": {
-        "hasFailures": {
-          "description": "Indicates that some or all conversions failed to insert.",
-          "type": "boolean"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionsBatchInsertResponse\".",
-          "type": "string"
-        },
-        "status": {
-          "type": "array",
-          "description": "The insert status of each conversion. Statuses are returned in the same order that conversions are inserted.",
-          "items": {
-            "$ref": "ConversionStatus"
-          }
-        }
-      },
-      "type": "object"
-    },
-    "Ad": {
-      "description": "Contains properties of a Campaign Manager ad.",
-      "properties": {
-        "deliverySchedule": {
-          "description": "Delivery schedule information for this ad. Applicable when type is AD_SERVING_STANDARD_AD or AD_SERVING_TRACKING. This field along with subfields priority and impressionRatio are required on insertion when type is AD_SERVING_STANDARD_AD.",
-          "$ref": "DeliverySchedule"
-        },
-        "eventTagOverrides": {
-          "description": "Event tag overrides for this ad.",
-          "type": "array",
-          "items": {
-            "$ref": "EventTagOverride"
-          }
-        },
-        "campaignIdDimensionValue": {
-          "description": "Dimension value for the ID of the campaign. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "startTime": {
-          "format": "date-time",
-          "type": "string"
-        },
-        "languageTargeting": {
-          "description": "Language targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD.",
-          "$ref": "LanguageTargeting"
-        },
-        "idDimensionValue": {
-          "description": "Dimension value for the ID of this ad. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "dynamicClickTracker": {
-          "type": "boolean",
-          "description": "Whether this ad is a dynamic click tracker. Applicable when type is AD_SERVING_CLICK_TRACKER. This is a required field on insert, and is read-only after insert."
-        },
-        "compatibility": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "enum": [
-            "DISPLAY",
-            "DISPLAY_INTERSTITIAL",
-            "APP",
-            "APP_INTERSTITIAL",
-            "IN_STREAM_VIDEO",
-            "IN_STREAM_AUDIO"
-          ],
-          "description": "Compatibility of this ad. Applicable when type is AD_SERVING_DEFAULT_AD. DISPLAY and DISPLAY_INTERSTITIAL refer to either rendering on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are only used for existing default ads. New mobile placements must be assigned DISPLAY or DISPLAY_INTERSTITIAL and default ads created for those placements will be limited to those compatibility types. IN_STREAM_VIDEO refers to rendering in-stream video ads developed with the VAST standard."
-        },
-        "createInfo": {
-          "description": "Information about the creation of this ad. This is a read-only field.",
-          "$ref": "LastModifiedInfo"
-        },
-        "targetingTemplateId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Targeting template ID, used to apply preconfigured targeting information to this ad. This cannot be set while any of dayPartTargeting, geoTargeting, keyValueTargetingExpression, languageTargeting, remarketingListExpression, or technologyTargeting are set. Applicable when type is AD_SERVING_STANDARD_AD."
-        },
-        "sslCompliant": {
-          "type": "boolean",
-          "description": "Whether this ad is ssl compliant. This is a read-only field that is auto-generated when the ad is inserted or updated."
-        },
-        "audienceSegmentId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Audience segment ID that is being targeted for this ad. Applicable when type is AD_SERVING_STANDARD_AD."
-        },
-        "defaultClickThroughEventTagProperties": {
-          "$ref": "DefaultClickThroughEventTagProperties",
-          "description": "Default click-through event tag properties for this ad."
-        },
-        "keyValueTargetingExpression": {
-          "description": "Key-value targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD.",
-          "$ref": "KeyValueTargetingExpression"
-        },
-        "dayPartTargeting": {
-          "description": "Time and day targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD.",
-          "$ref": "DayPartTargeting"
-        },
-        "creativeRotation": {
-          "$ref": "CreativeRotation",
-          "description": "Creative rotation for this ad. Applicable when type is AD_SERVING_DEFAULT_AD, AD_SERVING_STANDARD_AD, or AD_SERVING_TRACKING. When type is AD_SERVING_DEFAULT_AD, this field should have exactly one creativeAssignment ."
-        },
-        "size": {
-          "$ref": "Size",
-          "description": "Size of this ad. Applicable when type is AD_SERVING_DEFAULT_AD."
-        },
-        "creativeGroupAssignments": {
-          "items": {
-            "$ref": "CreativeGroupAssignment"
-          },
-          "type": "array",
-          "description": "Creative group assignments for this ad. Applicable when type is AD_SERVING_CLICK_TRACKER. Only one assignment per creative group number is allowed for a maximum of two assignments."
-        },
-        "geoTargeting": {
-          "$ref": "GeoTargeting",
-          "description": "Geographical targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD."
-        },
-        "clickThroughUrl": {
-          "description": "Click-through URL for this ad. This is a required field on insertion. Applicable when type is AD_SERVING_CLICK_TRACKER.",
-          "$ref": "ClickThroughUrl"
-        },
-        "accountId": {
-          "type": "string",
-          "description": "Account ID of this ad. This is a read-only field that can be left blank.",
-          "format": "int64"
-        },
-        "lastModifiedInfo": {
-          "description": "Information about the most recent modification of this ad. This is a read-only field.",
-          "$ref": "LastModifiedInfo"
-        },
-        "active": {
-          "description": "Whether this ad is active. When true, archived must be false.",
-          "type": "boolean"
-        },
-        "id": {
-          "format": "int64",
-          "description": "ID of this ad. This is a read-only, auto-generated field.",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#ad\".",
-          "type": "string"
-        },
-        "campaignId": {
-          "description": "Campaign ID of this ad. This is a required field on insertion.",
-          "format": "int64",
-          "type": "string"
-        },
-        "sslRequired": {
-          "description": "Whether this ad requires ssl. This is a read-only field that is auto-generated when the ad is inserted or updated.",
-          "type": "boolean"
-        },
-        "comments": {
-          "description": "Comments for this ad.",
-          "type": "string"
-        },
-        "clickThroughUrlSuffixProperties": {
-          "$ref": "ClickThroughUrlSuffixProperties",
-          "description": "Click-through URL suffix properties for this ad. Applies to the URL in the ad or (if overriding ad properties) the URL in the creative."
-        },
-        "subaccountId": {
-          "type": "string",
-          "description": "Subaccount ID of this ad. This is a read-only field that can be left blank.",
-          "format": "int64"
-        },
-        "archived": {
-          "description": "Whether this ad is archived. When true, active must be false.",
-          "type": "boolean"
-        },
-        "technologyTargeting": {
-          "description": "Technology platform targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD.",
-          "$ref": "TechnologyTargeting"
-        },
-        "placementAssignments": {
-          "type": "array",
-          "items": {
-            "$ref": "PlacementAssignment"
-          },
-          "description": "Placement assignments for this ad."
-        },
-        "endTime": {
-          "type": "string",
-          "format": "date-time"
-        },
-        "type": {
-          "enum": [
-            "AD_SERVING_STANDARD_AD",
-            "AD_SERVING_DEFAULT_AD",
-            "AD_SERVING_CLICK_TRACKER",
-            "AD_SERVING_TRACKING",
-            "AD_SERVING_BRAND_SAFE_AD"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "Type of ad. This is a required field on insertion. Note that default ads ( AD_SERVING_DEFAULT_AD) cannot be created directly (see Creative resource).",
-          "type": "string"
-        },
-        "advertiserIdDimensionValue": {
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "remarketingListExpression": {
-          "description": "Remarketing list targeting expression for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD.",
-          "$ref": "ListTargetingExpression"
-        },
-        "advertiserId": {
-          "format": "int64",
-          "description": "Advertiser ID of this ad. This is a required field on insertion.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of this ad. This is a required field and must be less than 256 characters long.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "Ad"
-    },
-    "CreativeRotation": {
-      "id": "CreativeRotation",
-      "type": "object",
-      "description": "Creative Rotation.",
-      "properties": {
-        "type": {
-          "enum": [
-            "CREATIVE_ROTATION_TYPE_SEQUENTIAL",
-            "CREATIVE_ROTATION_TYPE_RANDOM"
-          ],
-          "description": "Type of creative rotation. Can be used to specify whether to use sequential or random rotation.",
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            ""
-          ]
-        },
-        "creativeAssignments": {
-          "description": "Creative assignments in this creative rotation.",
-          "type": "array",
-          "items": {
-            "$ref": "CreativeAssignment"
-          }
-        },
-        "weightCalculationStrategy": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "Strategy for calculating weights. Used with CREATIVE_ROTATION_TYPE_RANDOM.",
-          "enum": [
-            "WEIGHT_STRATEGY_EQUAL",
-            "WEIGHT_STRATEGY_CUSTOM",
-            "WEIGHT_STRATEGY_HIGHEST_CTR",
-            "WEIGHT_STRATEGY_OPTIMIZED"
-          ],
-          "type": "string"
-        },
-        "creativeOptimizationConfigurationId": {
-          "description": "Creative optimization configuration that is used by this ad. It should refer to one of the existing optimization configurations in the ad's campaign. If it is unset or set to 0, then the campaign's default optimization configuration will be used for this ad.",
-          "type": "string",
-          "format": "int64"
-        }
-      }
-    },
-    "AdvertiserLandingPagesListResponse": {
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiserLandingPagesListResponse\".",
-          "type": "string"
-        },
-        "landingPages": {
-          "type": "array",
-          "items": {
-            "$ref": "LandingPage"
-          },
-          "description": "Landing page collection"
-        }
-      },
-      "description": "Landing Page List Response",
-      "type": "object",
-      "id": "AdvertiserLandingPagesListResponse"
-    },
-    "Country": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "Name of this country.",
-          "type": "string"
-        },
-        "dartId": {
-          "format": "int64",
-          "type": "string",
-          "description": "DART ID of this country. This is the ID used for targeting and generating reports."
-        },
-        "countryCode": {
-          "type": "string",
-          "description": "Country code."
-        },
-        "sslEnabled": {
-          "description": "Whether ad serving supports secure servers in this country.",
-          "type": "boolean"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#country\"."
-        }
-      },
-      "id": "Country",
-      "description": "Contains information about a country that can be targeted by ads."
-    },
-    "SortedDimension": {
-      "id": "SortedDimension",
-      "properties": {
-        "sortOrder": {
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "enum": [
-            "ASCENDING",
-            "DESCENDING"
-          ],
-          "description": "An optional sort order for the dimension column.",
-          "type": "string"
-        },
-        "kind": {
-          "description": "The kind of resource this is, in this case dfareporting#sortedDimension.",
-          "type": "string"
-        },
-        "name": {
-          "description": "The name of the dimension.",
-          "type": "string"
-        }
-      },
-      "description": "Represents a sorted dimension.",
-      "type": "object"
-    },
-    "ListPopulationClause": {
-      "type": "object",
-      "id": "ListPopulationClause",
-      "properties": {
-        "terms": {
-          "description": "Terms of this list population clause. Each clause is made up of list population terms representing constraints and are joined by ORs.",
-          "items": {
-            "$ref": "ListPopulationTerm"
-          },
-          "type": "array"
-        }
-      },
-      "description": "A group clause made up of list population terms representing constraints joined by ORs."
-    },
-    "EventTagsListResponse": {
-      "type": "object",
-      "properties": {
-        "eventTags": {
-          "description": "Event tag collection.",
-          "items": {
-            "$ref": "EventTag"
-          },
-          "type": "array"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#eventTagsListResponse\"."
-        }
-      },
-      "id": "EventTagsListResponse",
-      "description": "Event Tag List Response"
-    },
-    "CustomViewabilityMetric": {
-      "description": "Custom Viewability Metric",
-      "id": "CustomViewabilityMetric",
-      "properties": {
-        "configuration": {
-          "$ref": "CustomViewabilityMetricConfiguration",
-          "description": "Configuration of the custom viewability metric."
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of the custom viewability metric.",
-          "format": "int64"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of the custom viewability metric."
-        }
-      },
-      "type": "object"
-    },
-    "AudienceSegmentGroup": {
-      "type": "object",
-      "id": "AudienceSegmentGroup",
-      "description": "Audience Segment Group.",
-      "properties": {
-        "name": {
-          "description": "Name of this audience segment group. This is a required field and must be less than 65 characters long.",
-          "type": "string"
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of this audience segment group. This is a read-only, auto-generated field.",
-          "format": "int64"
-        },
-        "audienceSegments": {
-          "description": "Audience segments assigned to this group. The number of segments must be between 2 and 100.",
-          "type": "array",
-          "items": {
-            "$ref": "AudienceSegment"
-          }
-        }
-      }
-    },
-    "CampaignCreativeAssociationsListResponse": {
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaignCreativeAssociationsListResponse\"."
-        },
-        "campaignCreativeAssociations": {
-          "type": "array",
-          "description": "Campaign creative association collection",
-          "items": {
-            "$ref": "CampaignCreativeAssociation"
-          }
-        }
-      },
-      "description": "Campaign Creative Association List Response",
-      "id": "CampaignCreativeAssociationsListResponse",
-      "type": "object"
-    },
-    "InventoryItemsListResponse": {
-      "type": "object",
-      "description": "Inventory item List Response",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#inventoryItemsListResponse\".",
-          "type": "string"
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        },
-        "inventoryItems": {
-          "type": "array",
-          "description": "Inventory item collection",
-          "items": {
-            "$ref": "InventoryItem"
-          }
-        }
-      },
-      "id": "InventoryItemsListResponse"
-    },
-    "EventTagOverride": {
-      "properties": {
-        "id": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID of this event tag override. This is a read-only, auto-generated field."
-        },
-        "enabled": {
-          "description": "Whether this override is enabled.",
-          "type": "boolean"
-        }
-      },
-      "type": "object",
-      "description": "Event tag override information.",
-      "id": "EventTagOverride"
-    },
-    "RemarketingListsListResponse": {
-      "description": "Remarketing list response",
-      "id": "RemarketingListsListResponse",
-      "type": "object",
-      "properties": {
-        "remarketingLists": {
-          "type": "array",
-          "description": "Remarketing list collection.",
-          "items": {
-            "$ref": "RemarketingList"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#remarketingListsListResponse\".",
-          "type": "string"
-        }
-      }
-    },
-    "Dimension": {
-      "description": "Represents a dimension.",
-      "type": "object",
-      "id": "Dimension",
-      "properties": {
-        "name": {
-          "description": "The dimension name, e.g. dfa:advertiser",
-          "type": "string"
-        },
-        "kind": {
-          "description": "The kind of resource this is, in this case dfareporting#dimension.",
-          "type": "string"
-        }
-      }
-    },
-    "CreativesListResponse": {
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativesListResponse\".",
-          "type": "string"
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        },
-        "creatives": {
-          "description": "Creative collection.",
-          "type": "array",
-          "items": {
-            "$ref": "Creative"
-          }
-        }
-      },
-      "id": "CreativesListResponse",
-      "type": "object",
-      "description": "Creative List Response"
-    },
-    "RegionsListResponse": {
-      "description": "Region List Response",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#regionsListResponse\"."
-        },
-        "regions": {
-          "type": "array",
-          "description": "Region collection.",
-          "items": {
-            "$ref": "Region"
-          }
-        }
-      },
-      "id": "RegionsListResponse",
-      "type": "object"
-    },
-    "PlacementGroupsListResponse": {
-      "id": "PlacementGroupsListResponse",
-      "description": "Placement Group List Response",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementGroupsListResponse\"."
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        },
-        "placementGroups": {
-          "type": "array",
-          "items": {
-            "$ref": "PlacementGroup"
-          },
-          "description": "Placement group collection."
-        }
-      },
-      "type": "object"
-    },
-    "FloodlightConfigurationsListResponse": {
-      "type": "object",
-      "description": "Floodlight Configuration List Response",
-      "properties": {
-        "floodlightConfigurations": {
-          "type": "array",
-          "items": {
-            "$ref": "FloodlightConfiguration"
-          },
-          "description": "Floodlight configuration collection."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightConfigurationsListResponse\"."
-        }
-      },
-      "id": "FloodlightConfigurationsListResponse"
-    },
-    "ProjectsListResponse": {
-      "type": "object",
-      "description": "Project List Response",
-      "id": "ProjectsListResponse",
-      "properties": {
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        },
-        "projects": {
-          "type": "array",
-          "description": "Project collection.",
-          "items": {
-            "$ref": "Project"
-          }
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#projectsListResponse\".",
-          "type": "string"
-        }
-      }
-    },
-    "AccountPermission": {
-      "properties": {
-        "id": {
-          "description": "ID of this account permission.",
-          "format": "int64",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of this account permission.",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountPermission\"."
-        },
-        "permissionGroupId": {
-          "format": "int64",
-          "description": "Permission group of this account permission.",
-          "type": "string"
-        },
-        "level": {
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string",
-          "enum": [
-            "USER",
-            "ADMINISTRATOR"
-          ],
-          "description": "Administrative level required to enable this account permission."
-        },
-        "accountProfiles": {
-          "type": "array",
-          "items": {
-            "enum": [
-              "ACCOUNT_PROFILE_BASIC",
-              "ACCOUNT_PROFILE_STANDARD"
-            ],
-            "type": "string",
-            "enumDescriptions": [
-              "",
-              ""
-            ]
-          },
-          "description": "Account profiles associated with this account permission. Possible values are: - \"ACCOUNT_PROFILE_BASIC\" - \"ACCOUNT_PROFILE_STANDARD\" "
-        }
-      },
-      "description": "AccountPermissions contains information about a particular account permission. Some features of Campaign Manager require an account permission to be present in the account.",
-      "type": "object",
-      "id": "AccountPermission"
-    },
-    "CompanionSetting": {
-      "properties": {
-        "companionsDisabled": {
-          "description": "Whether companions are disabled for this placement.",
-          "type": "boolean"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#companionSetting\".",
-          "type": "string"
-        },
-        "enabledSizes": {
-          "items": {
-            "$ref": "Size"
-          },
-          "type": "array",
-          "description": "Allowlist of companion sizes to be served to this placement. Set this list to null or empty to serve all companion sizes."
-        },
-        "imageOnly": {
-          "description": "Whether to serve only static images as companions.",
-          "type": "boolean"
-        }
-      },
-      "description": "Companion Settings",
-      "id": "CompanionSetting",
-      "type": "object"
-    },
-    "PlatformTypesListResponse": {
-      "description": "Platform Type List Response",
-      "properties": {
-        "platformTypes": {
-          "items": {
-            "$ref": "PlatformType"
-          },
-          "description": "Platform type collection.",
-          "type": "array"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#platformTypesListResponse\".",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "PlatformTypesListResponse"
-    },
-    "RemarketingList": {
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#remarketingList\".",
-          "type": "string"
-        },
-        "listSize": {
-          "type": "string",
-          "format": "int64",
-          "description": "Number of users currently in the list. This is a read-only field."
-        },
-        "id": {
-          "description": "Remarketing list ID. This is a read-only, auto-generated field.",
-          "type": "string",
-          "format": "int64"
-        },
-        "listSource": {
-          "enum": [
-            "REMARKETING_LIST_SOURCE_OTHER",
-            "REMARKETING_LIST_SOURCE_ADX",
-            "REMARKETING_LIST_SOURCE_DFP",
-            "REMARKETING_LIST_SOURCE_XFP",
-            "REMARKETING_LIST_SOURCE_DFA",
-            "REMARKETING_LIST_SOURCE_GA",
-            "REMARKETING_LIST_SOURCE_YOUTUBE",
-            "REMARKETING_LIST_SOURCE_DBM",
-            "REMARKETING_LIST_SOURCE_GPLUS",
-            "REMARKETING_LIST_SOURCE_DMP",
-            "REMARKETING_LIST_SOURCE_PLAY_STORE"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "Product from which this remarketing list was originated."
-        },
-        "listPopulationRule": {
-          "description": "Rule used to populate the remarketing list with users.",
-          "$ref": "ListPopulationRule"
-        },
-        "active": {
-          "description": "Whether this remarketing list is active.",
-          "type": "boolean"
-        },
-        "advertiserIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of the remarketing list. This is a required field. Must be no greater than 128 characters long."
-        },
-        "advertiserId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Dimension value for the advertiser ID that owns this remarketing list. This is a required field."
-        },
-        "subaccountId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Subaccount ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests."
-        },
-        "description": {
-          "type": "string",
-          "description": "Remarketing list description."
-        },
-        "lifeSpan": {
-          "format": "int64",
-          "type": "string",
-          "description": "Number of days that a user should remain in the remarketing list without an impression. Acceptable values are 1 to 540, inclusive."
-        },
-        "accountId": {
-          "description": "Account ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.",
-          "type": "string",
-          "format": "int64"
-        }
-      },
-      "description": "Contains properties of a remarketing list. Remarketing enables you to create lists of users who have performed specific actions on a site, then target ads to members of those lists. This resource can be used to manage remarketing lists that are owned by your advertisers. To see all remarketing lists that are visible to your advertisers, including those that are shared to your advertiser or account, use the TargetableRemarketingLists resource.",
-      "id": "RemarketingList",
-      "type": "object"
-    },
-    "ConnectionTypesListResponse": {
-      "id": "ConnectionTypesListResponse",
-      "description": "Connection Type List Response",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#connectionTypesListResponse\".",
-          "type": "string"
-        },
-        "connectionTypes": {
-          "type": "array",
-          "items": {
-            "$ref": "ConnectionType"
-          },
-          "description": "Collection of connection types such as broadband and mobile."
-        }
-      },
-      "type": "object"
-    },
-    "UserDefinedVariableConfiguration": {
-      "description": "User Defined Variable configuration.",
-      "properties": {
-        "reportName": {
-          "description": "User-friendly name for the variable which will appear in reports. This is a required field, must be less than 64 characters long, and cannot contain the following characters: \"\"\u003c\u003e\".",
-          "type": "string"
-        },
-        "dataType": {
-          "enum": [
-            "STRING",
-            "NUMBER"
-          ],
-          "description": "Data type for the variable. This is a required field.",
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            ""
-          ]
-        },
-        "variableType": {
-          "enum": [
-            "U1",
-            "U2",
-            "U3",
-            "U4",
-            "U5",
-            "U6",
-            "U7",
-            "U8",
-            "U9",
-            "U10",
-            "U11",
-            "U12",
-            "U13",
-            "U14",
-            "U15",
-            "U16",
-            "U17",
-            "U18",
-            "U19",
-            "U20",
-            "U21",
-            "U22",
-            "U23",
-            "U24",
-            "U25",
-            "U26",
-            "U27",
-            "U28",
-            "U29",
-            "U30",
-            "U31",
-            "U32",
-            "U33",
-            "U34",
-            "U35",
-            "U36",
-            "U37",
-            "U38",
-            "U39",
-            "U40",
-            "U41",
-            "U42",
-            "U43",
-            "U44",
-            "U45",
-            "U46",
-            "U47",
-            "U48",
-            "U49",
-            "U50",
-            "U51",
-            "U52",
-            "U53",
-            "U54",
-            "U55",
-            "U56",
-            "U57",
-            "U58",
-            "U59",
-            "U60",
-            "U61",
-            "U62",
-            "U63",
-            "U64",
-            "U65",
-            "U66",
-            "U67",
-            "U68",
-            "U69",
-            "U70",
-            "U71",
-            "U72",
-            "U73",
-            "U74",
-            "U75",
-            "U76",
-            "U77",
-            "U78",
-            "U79",
-            "U80",
-            "U81",
-            "U82",
-            "U83",
-            "U84",
-            "U85",
-            "U86",
-            "U87",
-            "U88",
-            "U89",
-            "U90",
-            "U91",
-            "U92",
-            "U93",
-            "U94",
-            "U95",
-            "U96",
-            "U97",
-            "U98",
-            "U99",
-            "U100"
-          ],
-          "description": "Variable name in the tag. This is a required field.",
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        }
-      },
-      "type": "object",
-      "id": "UserDefinedVariableConfiguration"
-    },
-    "CreativeAsset": {
-      "type": "object",
-      "properties": {
-        "companionCreativeIds": {
-          "description": "List of companion creatives assigned to an in-stream video creative asset. Acceptable values include IDs of existing flash and image creatives. Applicable to INSTREAM_VIDEO creative type with dynamicAssetSelection set to true.",
-          "type": "array",
-          "items": {
-            "format": "int64",
-            "type": "string"
-          }
-        },
-        "offset": {
-          "description": "Offset position for an asset in collapsed mode. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, only applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN.",
-          "$ref": "OffsetPosition"
-        },
-        "windowMode": {
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "description": "Window mode options for flash assets. Applicable to the following creative types: FLASH_INPAGE, RICH_MEDIA_DISPLAY_EXPANDING, RICH_MEDIA_IM_EXPAND, RICH_MEDIA_DISPLAY_BANNER, and RICH_MEDIA_INPAGE_FLOATING.",
-          "type": "string",
-          "enum": [
-            "OPAQUE",
-            "WINDOW",
-            "TRANSPARENT"
-          ]
-        },
-        "audioSampleRate": {
-          "description": "Audio sample bit rate in hertz. This is a read-only field. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "additionalSizes": {
-          "description": "Additional sizes associated with this creative asset. HTML5 asset generated by compatible software such as GWD will be able to support more sizes this creative asset can render.",
-          "items": {
-            "$ref": "Size"
-          },
-          "type": "array"
-        },
-        "frameRate": {
-          "format": "float",
-          "type": "number",
-          "description": "Video frame rate for video asset in frames per second. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID."
-        },
-        "transparency": {
-          "type": "boolean",
-          "description": "Whether the asset is transparent. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable to HTML5 assets."
-        },
-        "fileSize": {
-          "type": "string",
-          "description": "File size associated with this creative asset. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.",
-          "format": "int64"
-        },
-        "customStartTimeValue": {
-          "type": "integer",
-          "description": "Custom start time in seconds for making the asset visible. Applicable to the following creative types: all RICH_MEDIA. Value must be greater than or equal to 0.",
-          "format": "int32"
-        },
-        "assetIdentifier": {
-          "description": "Identifier of this asset. This is the same identifier returned during creative asset insert operation. This is a required field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.",
-          "$ref": "CreativeAssetId"
-        },
-        "idDimensionValue": {
-          "description": "Dimension value for the ID of the asset. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "bitRate": {
-          "format": "int32",
-          "description": "Detected bit-rate for audio or video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID.",
-          "type": "integer"
-        },
-        "zipFilesize": {
-          "description": "Size of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.",
-          "type": "string"
-        },
-        "orientation": {
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "description": "Orientation of video asset. This is a read-only, auto-generated field.",
-          "enum": [
-            "LANDSCAPE",
-            "PORTRAIT",
-            "SQUARE"
-          ],
-          "type": "string"
-        },
-        "size": {
-          "description": "Size associated with this creative asset. This is a required field when applicable; however for IMAGE and FLASH_INPAGE, creatives if left blank, this field will be automatically set using the actual size of the associated image asset. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
-          "$ref": "Size"
-        },
-        "alignment": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "ALIGNMENT_TOP",
-            "ALIGNMENT_RIGHT",
-            "ALIGNMENT_BOTTOM",
-            "ALIGNMENT_LEFT"
-          ],
-          "type": "string",
-          "description": "Possible alignments for an asset. This is a read-only field. Applicable to the following creative types: RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL ."
-        },
-        "zipFilename": {
-          "description": "File name of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.",
-          "type": "string"
-        },
-        "id": {
-          "description": "Numeric ID of this creative asset. This is a required field and should not be modified. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.",
-          "type": "string",
-          "format": "int64"
-        },
-        "zIndex": {
-          "description": "zIndex value of an asset. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable to assets whose displayType is NOT one of the following types: ASSET_DISPLAY_TYPE_INPAGE or ASSET_DISPLAY_TYPE_OVERLAY. Acceptable values are -999999999 to 999999999, inclusive.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "horizontallyLocked": {
-          "type": "boolean",
-          "description": "Whether the asset is horizontally locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA."
-        },
-        "audioBitRate": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Audio stream bit rate in kbps. This is a read-only field. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID."
-        },
-        "backupImageExit": {
-          "description": "Exit event configured for the backup image. Applicable to the following creative types: all RICH_MEDIA.",
-          "$ref": "CreativeCustomEvent"
-        },
-        "pushdownDuration": {
-          "type": "number",
-          "description": "Pushdown duration in seconds for an asset. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable when the asset pushdown field is true, the offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height. Acceptable values are 0 to 9.99, inclusive.",
-          "format": "float"
-        },
-        "politeLoad": {
-          "type": "boolean",
-          "description": "Whether this asset is used as a polite load asset."
-        },
-        "sslCompliant": {
-          "description": "Whether the asset is SSL-compliant. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.",
-          "type": "boolean"
-        },
-        "hideSelectionBoxes": {
-          "type": "boolean",
-          "description": "Whether to hide selection boxes flag for an asset. Applicable to the following creative types: all RICH_MEDIA."
-        },
-        "active": {
-          "type": "boolean",
-          "description": "Whether the video or audio asset is active. This is a read-only field for VPAID_NON_LINEAR_VIDEO assets. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID."
-        },
-        "displayType": {
-          "type": "string",
-          "description": "Type of rich media asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "ASSET_DISPLAY_TYPE_INPAGE",
-            "ASSET_DISPLAY_TYPE_FLOATING",
-            "ASSET_DISPLAY_TYPE_OVERLAY",
-            "ASSET_DISPLAY_TYPE_EXPANDING",
-            "ASSET_DISPLAY_TYPE_FLASH_IN_FLASH",
-            "ASSET_DISPLAY_TYPE_FLASH_IN_FLASH_EXPANDING",
-            "ASSET_DISPLAY_TYPE_PEEL_DOWN",
-            "ASSET_DISPLAY_TYPE_VPAID_LINEAR",
-            "ASSET_DISPLAY_TYPE_VPAID_NON_LINEAR",
-            "ASSET_DISPLAY_TYPE_BACKDROP"
-          ]
-        },
-        "detectedFeatures": {
-          "type": "array",
-          "description": "List of feature dependencies for the creative asset that are detected by Campaign Manager. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative correctly. This is a read-only, auto-generated field. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
-          "items": {
-            "type": "string",
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ],
-            "enum": [
-              "CSS_FONT_FACE",
-              "CSS_BACKGROUND_SIZE",
-              "CSS_BORDER_IMAGE",
-              "CSS_BORDER_RADIUS",
-              "CSS_BOX_SHADOW",
-              "CSS_FLEX_BOX",
-              "CSS_HSLA",
-              "CSS_MULTIPLE_BGS",
-              "CSS_OPACITY",
-              "CSS_RGBA",
-              "CSS_TEXT_SHADOW",
-              "CSS_ANIMATIONS",
-              "CSS_COLUMNS",
-              "CSS_GENERATED_CONTENT",
-              "CSS_GRADIENTS",
-              "CSS_REFLECTIONS",
-              "CSS_TRANSFORMS",
-              "CSS_TRANSFORMS3D",
-              "CSS_TRANSITIONS",
-              "APPLICATION_CACHE",
-              "CANVAS",
-              "CANVAS_TEXT",
-              "DRAG_AND_DROP",
-              "HASH_CHANGE",
-              "HISTORY",
-              "AUDIO",
-              "VIDEO",
-              "INDEXED_DB",
-              "INPUT_ATTR_AUTOCOMPLETE",
-              "INPUT_ATTR_AUTOFOCUS",
-              "INPUT_ATTR_LIST",
-              "INPUT_ATTR_PLACEHOLDER",
-              "INPUT_ATTR_MAX",
-              "INPUT_ATTR_MIN",
-              "INPUT_ATTR_MULTIPLE",
-              "INPUT_ATTR_PATTERN",
-              "INPUT_ATTR_REQUIRED",
-              "INPUT_ATTR_STEP",
-              "INPUT_TYPE_SEARCH",
-              "INPUT_TYPE_TEL",
-              "INPUT_TYPE_URL",
-              "INPUT_TYPE_EMAIL",
-              "INPUT_TYPE_DATETIME",
-              "INPUT_TYPE_DATE",
-              "INPUT_TYPE_MONTH",
-              "INPUT_TYPE_WEEK",
-              "INPUT_TYPE_TIME",
-              "INPUT_TYPE_DATETIME_LOCAL",
-              "INPUT_TYPE_NUMBER",
-              "INPUT_TYPE_RANGE",
-              "INPUT_TYPE_COLOR",
-              "LOCAL_STORAGE",
-              "POST_MESSAGE",
-              "SESSION_STORAGE",
-              "WEB_SOCKETS",
-              "WEB_SQL_DATABASE",
-              "WEB_WORKERS",
-              "GEO_LOCATION",
-              "INLINE_SVG",
-              "SMIL",
-              "SVG_HREF",
-              "SVG_CLIP_PATHS",
-              "TOUCH",
-              "WEBGL",
-              "SVG_FILTERS",
-              "SVG_FE_IMAGE"
-            ]
-          }
-        },
-        "originalBackup": {
-          "type": "boolean",
-          "description": "Whether the backup asset is original or changed by the user in Campaign Manager. Applicable to the following creative types: all RICH_MEDIA."
-        },
-        "artworkType": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "ARTWORK_TYPE_FLASH",
-            "ARTWORK_TYPE_HTML5",
-            "ARTWORK_TYPE_MIXED",
-            "ARTWORK_TYPE_IMAGE"
-          ],
-          "description": "Artwork type of rich media creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA."
-        },
-        "positionLeftUnit": {
-          "enum": [
-            "OFFSET_UNIT_PIXEL",
-            "OFFSET_UNIT_PERCENT",
-            "OFFSET_UNIT_PIXEL_FROM_CENTER"
-          ],
-          "description": "Offset left unit for an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.",
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ]
-        },
-        "collapsedSize": {
-          "$ref": "Size",
-          "description": "Size of an asset when collapsed. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN."
-        },
-        "streamingServingUrl": {
-          "description": "Streaming URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.",
-          "type": "string"
-        },
-        "duration": {
-          "description": "Duration in seconds for which an asset will be displayed. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and VPAID_LINEAR_VIDEO. Value must be greater than or equal to 1.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "verticallyLocked": {
-          "description": "Whether the asset is vertically locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.",
-          "type": "boolean"
-        },
-        "actionScript3": {
-          "description": "Whether ActionScript3 is enabled for the flash asset. This is a read-only field. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
-          "type": "boolean"
-        },
-        "position": {
-          "description": "Offset position for an asset. Applicable to the following creative types: all RICH_MEDIA.",
-          "$ref": "OffsetPosition"
-        },
-        "mediaDuration": {
-          "format": "float",
-          "description": "Detected duration for audio or video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID.",
-          "type": "number"
-        },
-        "durationType": {
-          "enum": [
-            "ASSET_DURATION_TYPE_AUTO",
-            "ASSET_DURATION_TYPE_NONE",
-            "ASSET_DURATION_TYPE_CUSTOM"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "Duration type for which an asset will be displayed. Applicable to the following creative types: all RICH_MEDIA."
-        },
-        "childAssetType": {
-          "description": "Rich media child asset type. This is a read-only field. Applicable to the following creative types: all VPAID.",
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "CHILD_ASSET_TYPE_FLASH",
-            "CHILD_ASSET_TYPE_VIDEO",
-            "CHILD_ASSET_TYPE_IMAGE",
-            "CHILD_ASSET_TYPE_DATA"
-          ]
-        },
-        "pushdown": {
-          "type": "boolean",
-          "description": "Whether the asset pushes down other content. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable when the asset offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height."
-        },
-        "hideFlashObjects": {
-          "type": "boolean",
-          "description": "Whether to hide Flash objects flag for an asset. Applicable to the following creative types: all RICH_MEDIA."
-        },
-        "startTimeType": {
-          "description": "Initial wait time type before making the asset visible. Applicable to the following creative types: all RICH_MEDIA.",
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "enum": [
-            "ASSET_START_TIME_TYPE_NONE",
-            "ASSET_START_TIME_TYPE_CUSTOM"
-          ],
-          "type": "string"
-        },
-        "mimeType": {
-          "type": "string",
-          "description": "Detected MIME type for audio or video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID."
-        },
-        "expandedDimension": {
-          "$ref": "Size",
-          "description": "Detected expanded dimension for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID."
-        },
-        "progressiveServingUrl": {
-          "description": "Progressive URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.",
-          "type": "string"
-        },
-        "positionTopUnit": {
-          "type": "string",
-          "enum": [
-            "OFFSET_UNIT_PIXEL",
-            "OFFSET_UNIT_PERCENT",
-            "OFFSET_UNIT_PIXEL_FROM_CENTER"
-          ],
-          "description": "Offset top unit for an asset. This is a read-only field if the asset displayType is ASSET_DISPLAY_TYPE_OVERLAY. Applicable to the following creative types: all RICH_MEDIA.",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ]
-        },
-        "flashVersion": {
-          "description": "Flash version of the asset. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "role": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "enum": [
-            "PRIMARY",
-            "BACKUP_IMAGE",
-            "ADDITIONAL_IMAGE",
-            "ADDITIONAL_FLASH",
-            "PARENT_VIDEO",
-            "TRANSCODED_VIDEO",
-            "OTHER",
-            "ALTERNATE_VIDEO",
-            "PARENT_AUDIO",
-            "TRANSCODED_AUDIO"
-          ],
-          "description": "Role of the asset in relation to creative. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT. This is a required field. PRIMARY applies to DISPLAY, FLASH_INPAGE, HTML5_BANNER, IMAGE, DISPLAY_IMAGE_GALLERY, all RICH_MEDIA (which may contain multiple primary assets), and all VPAID creatives. BACKUP_IMAGE applies to FLASH_INPAGE, HTML5_BANNER, all RICH_MEDIA, and all VPAID creatives. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE. ADDITIONAL_IMAGE and ADDITIONAL_FLASH apply to FLASH_INPAGE creatives. OTHER refers to assets from sources other than Campaign Manager, such as Studio uploaded assets, applicable to all RICH_MEDIA and all VPAID creatives. PARENT_VIDEO refers to videos uploaded by the user in Campaign Manager and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives. TRANSCODED_VIDEO refers to videos transcoded by Campaign Manager from PARENT_VIDEO assets and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives. ALTERNATE_VIDEO refers to the Campaign Manager representation of child asset videos from Studio, and is applicable to VPAID_LINEAR_VIDEO creatives. These cannot be added or removed within Campaign Manager. For VPAID_LINEAR_VIDEO creatives, PARENT_VIDEO, TRANSCODED_VIDEO and ALTERNATE_VIDEO assets that are marked active serve as backup in case the VPAID creative cannot be served. Only PARENT_VIDEO assets can be added or removed for an INSTREAM_VIDEO or VPAID_LINEAR_VIDEO creative. PARENT_AUDIO refers to audios uploaded by the user in Campaign Manager and is applicable to INSTREAM_AUDIO creatives. TRANSCODED_AUDIO refers to audios transcoded by Campaign Manager from PARENT_AUDIO assets and is applicable to INSTREAM_AUDIO creatives. "
-        }
-      },
-      "id": "CreativeAsset",
-      "description": "Creative Asset."
-    },
-    "ObjectFilter": {
-      "type": "object",
-      "id": "ObjectFilter",
-      "properties": {
-        "status": {
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "description": "Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.",
-          "enum": [
-            "NONE",
-            "ASSIGNED",
-            "ALL"
-          ],
-          "type": "string"
-        },
-        "objectIds": {
-          "items": {
-            "format": "int64",
-            "type": "string"
-          },
-          "description": "Applicable when status is ASSIGNED. The user has access to objects with these object IDs.",
-          "type": "array"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#objectFilter\"."
-        }
-      },
-      "description": "Object Filter."
-    },
-    "DimensionValue": {
-      "type": "object",
-      "description": "Represents a DimensionValue resource.",
-      "id": "DimensionValue",
-      "properties": {
-        "etag": {
-          "type": "string",
-          "description": "The eTag of this response for caching purposes."
-        },
-        "matchType": {
-          "description": "Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "EXACT",
-            "BEGINS_WITH",
-            "CONTAINS",
-            "WILDCARD_EXPRESSION"
-          ],
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#dimensionValue."
-        },
-        "id": {
-          "description": "The ID associated with the value if available.",
-          "type": "string"
-        },
-        "dimensionName": {
-          "description": "The name of the dimension.",
-          "type": "string"
-        },
-        "value": {
-          "description": "The value of the dimension.",
-          "type": "string"
-        }
-      }
-    },
-    "PricingSchedulePricingPeriod": {
-      "properties": {
-        "endDate": {
-          "format": "date",
-          "type": "string"
-        },
-        "rateOrCostNanos": {
-          "format": "int64",
-          "type": "string",
-          "description": "Rate or cost of this pricing period in nanos (i.e., multipled by 1000000000). Acceptable values are 0 to 1000000000000000000, inclusive."
-        },
-        "units": {
-          "description": "Units of this pricing period. Acceptable values are 0 to 10000000000, inclusive.",
-          "format": "int64",
-          "type": "string"
-        },
-        "pricingComment": {
-          "description": "Comments for this pricing period.",
-          "type": "string"
-        },
-        "startDate": {
-          "format": "date",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "PricingSchedulePricingPeriod",
-      "description": "Pricing Period"
-    },
-    "FloodlightActivityGroupsListResponse": {
-      "description": "Floodlight Activity Group List Response",
-      "properties": {
-        "floodlightActivityGroups": {
-          "description": "Floodlight activity group collection.",
-          "type": "array",
-          "items": {
-            "$ref": "FloodlightActivityGroup"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivityGroupsListResponse\".",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "FloodlightActivityGroupsListResponse"
-    },
-    "Advertiser": {
-      "description": "Contains properties of a Campaign Manager advertiser.",
-      "properties": {
-        "defaultEmail": {
-          "type": "string",
-          "description": "Default email address used in sender field for tag emails."
-        },
-        "suspended": {
-          "description": "Suspension status of this advertiser.",
-          "type": "boolean"
-        },
-        "advertiserGroupId": {
-          "type": "string",
-          "description": "ID of the advertiser group this advertiser belongs to. You can group advertisers for reporting purposes, allowing you to see aggregated information for all advertisers in each group.",
-          "format": "int64"
-        },
-        "subaccountId": {
-          "description": "Subaccount ID of this advertiser.This is a read-only field that can be left blank.",
-          "type": "string",
-          "format": "int64"
-        },
-        "originalFloodlightConfigurationId": {
-          "description": "Original floodlight configuration before any sharing occurred. Set the floodlightConfigurationId of this advertiser to originalFloodlightConfigurationId to unshare the advertiser's current floodlight configuration. You cannot unshare an advertiser's floodlight configuration if the shared configuration has activities associated with any campaign or placement.",
-          "format": "int64",
-          "type": "string"
-        },
-        "floodlightConfigurationId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Floodlight configuration ID of this advertiser. The floodlight configuration ID will be created automatically, so on insert this field should be left blank. This field can be set to another advertiser's floodlight configuration ID in order to share that advertiser's floodlight configuration with this advertiser, so long as: - This advertiser's original floodlight configuration is not already associated with floodlight activities or floodlight activity groups. - This advertiser's original floodlight configuration is not already shared with another advertiser. "
-        },
-        "clickThroughUrlSuffix": {
-          "description": "Suffix added to click-through URL of ad creative associations under this advertiser. Must be less than 129 characters long.",
-          "type": "string"
-        },
-        "accountId": {
-          "format": "int64",
-          "description": "Account ID of this advertiser.This is a read-only field that can be left blank.",
-          "type": "string"
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of this advertiser. This is a read-only, auto-generated field.",
-          "format": "int64"
-        },
-        "idDimensionValue": {
-          "description": "Dimension value for the ID of this advertiser. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiser\".",
-          "type": "string"
-        },
-        "floodlightConfigurationIdDimensionValue": {
-          "description": "Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "defaultClickThroughEventTagId": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of the click-through event tag to apply by default to the landing pages of this advertiser's campaigns."
-        },
-        "status": {
-          "enum": [
-            "APPROVED",
-            "ON_HOLD"
-          ],
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "description": "Status of this advertiser.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of this advertiser. This is a required field and must be less than 256 characters long and unique among advertisers of the same account.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "Advertiser"
-    },
-    "CreativeFieldValue": {
-      "properties": {
-        "value": {
-          "type": "string",
-          "description": "Value of this creative field value. It needs to be less than 256 characters in length and unique per creative field."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeFieldValue\"."
-        },
-        "id": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID of this creative field value. This is a read-only, auto-generated field."
-        }
-      },
-      "type": "object",
-      "id": "CreativeFieldValue",
-      "description": "Contains properties of a creative field value."
-    },
-    "ChangeLog": {
-      "id": "ChangeLog",
-      "type": "object",
-      "properties": {
-        "subaccountId": {
-          "description": "Subaccount ID of the modified object.",
-          "format": "int64",
-          "type": "string"
-        },
-        "userProfileName": {
-          "description": "User profile name of the user who modified the object.",
-          "type": "string"
-        },
-        "accountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Account ID of the modified object."
-        },
-        "fieldName": {
-          "type": "string",
-          "description": "Field name of the object which changed."
-        },
-        "transactionId": {
-          "type": "string",
-          "description": "Transaction ID of this change log. When a single API call results in many changes, each change will have a separate ID in the change log but will share the same transactionId.",
-          "format": "int64"
-        },
-        "newValue": {
-          "type": "string",
-          "description": "New value of the object field."
-        },
-        "changeTime": {
-          "format": "date-time",
-          "type": "string"
-        },
-        "userProfileId": {
-          "type": "string",
-          "description": "ID of the user who modified the object.",
-          "format": "int64"
-        },
-        "action": {
-          "type": "string",
-          "description": "Action which caused the change."
-        },
-        "id": {
-          "description": "ID of this change log.",
-          "type": "string",
-          "format": "int64"
-        },
-        "oldValue": {
-          "type": "string",
-          "description": "Old value of the object field."
-        },
-        "objectId": {
-          "description": "ID of the object of this change log. The object could be a campaign, placement, ad, or other type.",
-          "format": "int64",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#changeLog\".",
-          "type": "string"
-        },
-        "objectType": {
-          "description": "Object type of the change log.",
-          "type": "string"
-        }
-      },
-      "description": "Describes a change that a user has made to a resource."
-    },
-    "TargetWindow": {
-      "type": "object",
-      "id": "TargetWindow",
-      "properties": {
-        "targetWindowOption": {
-          "type": "string",
-          "description": "Type of browser window for which the backup image of the flash creative can be displayed.",
-          "enum": [
-            "NEW_WINDOW",
-            "CURRENT_WINDOW",
-            "CUSTOM"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ]
-        },
-        "customHtml": {
-          "description": "User-entered value.",
-          "type": "string"
-        }
-      },
-      "description": "Target Window."
-    },
-    "FileList": {
-      "id": "FileList",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "Continuation token used to page through files. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#fileList\"."
-        },
-        "items": {
-          "items": {
-            "$ref": "File"
-          },
-          "type": "array",
-          "description": "The files returned in this response."
-        },
-        "etag": {
-          "type": "string",
-          "description": "Etag of this resource."
-        }
-      },
-      "type": "object",
-      "description": "List of files for a report."
-    },
-    "ConnectionType": {
-      "properties": {
-        "id": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID of this connection type."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this connection type."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#connectionType\"."
-        }
-      },
-      "description": "Contains information about an internet connection type that can be targeted by ads. Clients can use the connection type to target mobile vs. broadband users.",
-      "id": "ConnectionType",
-      "type": "object"
-    },
-    "ConversionError": {
-      "type": "object",
-      "properties": {
-        "code": {
-          "description": "The error code.",
-          "enum": [
-            "INVALID_ARGUMENT",
-            "INTERNAL",
-            "PERMISSION_DENIED",
-            "NOT_FOUND"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionError\"."
-        },
-        "message": {
-          "type": "string",
-          "description": "A description of the error."
-        }
-      },
-      "description": "The error code and description for a conversion that failed to insert or update.",
-      "id": "ConversionError"
-    },
-    "UserRolePermission": {
-      "description": "Contains properties of a user role permission.",
-      "id": "UserRolePermission",
-      "type": "object",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "ID of this user role permission.",
-          "format": "int64"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolePermission\"."
-        },
-        "permissionGroupId": {
-          "format": "int64",
-          "description": "ID of the permission group that this user role permission belongs to.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of this user role permission.",
-          "type": "string"
-        },
-        "availability": {
-          "enum": [
-            "NOT_AVAILABLE_BY_DEFAULT",
-            "ACCOUNT_BY_DEFAULT",
-            "SUBACCOUNT_AND_ACCOUNT_BY_DEFAULT",
-            "ACCOUNT_ALWAYS",
-            "SUBACCOUNT_AND_ACCOUNT_ALWAYS"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "Levels of availability for a user role permission.",
-          "type": "string"
-        }
-      }
-    },
-    "FloodlightActivitiesGenerateTagResponse": {
-      "type": "object",
-      "id": "FloodlightActivitiesGenerateTagResponse",
-      "description": "Floodlight Activity GenerateTag Response",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivitiesGenerateTagResponse\".",
-          "type": "string"
-        },
-        "globalSiteTagGlobalSnippet": {
-          "description": "The global snippet section of a global site tag. The global site tag sets new cookies on your domain, which will store a unique identifier for a user or the ad click that brought the user to your site. Learn more.",
-          "type": "string"
-        },
-        "floodlightActivityTag": {
-          "description": "Generated tag for this Floodlight activity. For global site tags, this is the event snippet.",
-          "type": "string"
-        }
-      }
-    },
-    "ReportsConfiguration": {
-      "id": "ReportsConfiguration",
-      "properties": {
-        "reportGenerationTimeZoneId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Report generation time zone ID of this account. This is a required field that can only be changed by a superuser. Acceptable values are: - \"1\" for \"America/New_York\" - \"2\" for \"Europe/London\" - \"3\" for \"Europe/Paris\" - \"4\" for \"Africa/Johannesburg\" - \"5\" for \"Asia/Jerusalem\" - \"6\" for \"Asia/Shanghai\" - \"7\" for \"Asia/Hong_Kong\" - \"8\" for \"Asia/Tokyo\" - \"9\" for \"Australia/Sydney\" - \"10\" for \"Asia/Dubai\" - \"11\" for \"America/Los_Angeles\" - \"12\" for \"Pacific/Auckland\" - \"13\" for \"America/Sao_Paulo\" - \"16\" for \"America/Asuncion\" - \"17\" for \"America/Chicago\" - \"18\" for \"America/Denver\" - \"19\" for \"America/St_Johns\" - \"20\" for \"Asia/Dhaka\" - \"21\" for \"Asia/Jakarta\" - \"22\" for \"Asia/Kabul\" - \"23\" for \"Asia/Karachi\" - \"24\" for \"Asia/Calcutta\" - \"25\" for \"Asia/Pyongyang\" - \"26\" for \"Asia/Rangoon\" - \"27\" for \"Atlantic/Cape_Verde\" - \"28\" for \"Atlantic/South_Georgia\" - \"29\" for \"Australia/Adelaide\" - \"30\" for \"Australia/Lord_Howe\" - \"31\" for \"Europe/Moscow\" - \"32\" for \"Pacific/Kiritimati\" - \"35\" for \"Pacific/Norfolk\" - \"36\" for \"Pacific/Tongatapu\" "
-        },
-        "lookbackConfiguration": {
-          "$ref": "LookbackConfiguration",
-          "description": "Default lookback windows for new advertisers in this account."
-        },
-        "exposureToConversionEnabled": {
-          "description": "Whether the exposure to conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.",
-          "type": "boolean"
-        }
-      },
-      "description": "Reporting Configuration",
-      "type": "object"
-    },
-    "CampaignCreativeAssociation": {
-      "description": "Identifies a creative which has been associated with a given campaign.",
-      "properties": {
-        "creativeId": {
-          "description": "ID of the creative associated with the campaign. This is a required field.",
-          "type": "string",
-          "format": "int64"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaignCreativeAssociation\".",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "CampaignCreativeAssociation"
-    },
-    "DayPartTargeting": {
-      "description": "Day Part Targeting.",
-      "id": "DayPartTargeting",
-      "type": "object",
-      "properties": {
-        "daysOfWeek": {
-          "description": "Days of the week when the ad will serve. Acceptable values are: - \"SUNDAY\" - \"MONDAY\" - \"TUESDAY\" - \"WEDNESDAY\" - \"THURSDAY\" - \"FRIDAY\" - \"SATURDAY\" ",
-          "items": {
-            "type": "string",
-            "enum": [
-              "MONDAY",
-              "TUESDAY",
-              "WEDNESDAY",
-              "THURSDAY",
-              "FRIDAY",
-              "SATURDAY",
-              "SUNDAY"
-            ],
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ]
-          },
-          "type": "array"
-        },
-        "hoursOfDay": {
-          "items": {
-            "type": "integer",
-            "format": "int32"
-          },
-          "type": "array",
-          "description": "Hours of the day when the ad will serve, where 0 is midnight to 1 AM and 23 is 11 PM to midnight. Can be specified with days of week, in which case the ad would serve during these hours on the specified days. For example if Monday, Wednesday, Friday are the days of week specified and 9-10am, 3-5pm (hours 9, 15, and 16) is specified, the ad would serve Monday, Wednesdays, and Fridays at 9-10am and 3-5pm. Acceptable values are 0 to 23, inclusive."
-        },
-        "userLocalTime": {
-          "description": "Whether or not to use the user's local time. If false, the America/New York time zone applies.",
-          "type": "boolean"
-        }
-      }
-    },
-    "OperatingSystemVersion": {
-      "description": "Contains information about a particular version of an operating system that can be targeted by ads.",
-      "properties": {
-        "majorVersion": {
-          "description": "Major version (leftmost number) of this operating system version.",
-          "type": "string"
-        },
-        "minorVersion": {
-          "description": "Minor version (number after the first dot) of this operating system version.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of this operating system version.",
-          "type": "string"
-        },
-        "operatingSystem": {
-          "$ref": "OperatingSystem",
-          "description": "Operating system of this operating system version."
-        },
-        "id": {
-          "description": "ID of this operating system version.",
-          "format": "int64",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#operatingSystemVersion\"."
-        }
-      },
-      "type": "object",
-      "id": "OperatingSystemVersion"
-    },
-    "SiteSettings": {
-      "id": "SiteSettings",
-      "type": "object",
-      "description": "Site Settings",
-      "properties": {
-        "disableNewCookie": {
-          "type": "boolean",
-          "description": "Whether new cookies are disabled for this site."
-        },
-        "tagSetting": {
-          "description": "Configuration settings for dynamic and image floodlight tags.",
-          "$ref": "TagSetting"
-        },
-        "vpaidAdapterChoiceTemplate": {
-          "type": "string",
-          "enum": [
-            "DEFAULT",
-            "FLASH",
-            "HTML5",
-            "BOTH"
-          ],
-          "description": "Default VPAID adapter setting for new placements created under this site. This value will be used to populate the placements.vpaidAdapterChoice field, when no value is specified for the new placement. Controls which VPAID format the measurement adapter will use for in-stream video creatives assigned to the placement. The publisher's specifications will typically determine this setting. For VPAID creatives, the adapter format will match the VPAID format (HTML5 VPAID creatives use the HTML5 adapter). *Note:* Flash is no longer supported. This field now defaults to HTML5 when the following values are provided: FLASH, BOTH.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "activeViewOptOut": {
-          "type": "boolean",
-          "description": "Whether active view creatives are disabled for this site."
-        },
-        "adBlockingOptOut": {
-          "type": "boolean",
-          "description": "Whether this site opts out of ad blocking. When true, ad blocking is disabled for all placements under the site, regardless of the individual placement settings. When false, the campaign and placement settings take effect."
-        },
-        "videoActiveViewOptOutTemplate": {
-          "description": "Whether Verification and ActiveView for in-stream video creatives are disabled by default for new placements created under this site. This value will be used to populate the placement.videoActiveViewOptOut field, when no value is specified for the new placement.",
-          "type": "boolean"
-        }
-      }
-    },
-    "CreativeGroupsListResponse": {
-      "id": "CreativeGroupsListResponse",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        },
-        "creativeGroups": {
-          "items": {
-            "$ref": "CreativeGroup"
-          },
-          "type": "array",
-          "description": "Creative group collection."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeGroupsListResponse\".",
-          "type": "string"
-        }
-      },
-      "description": "Creative Group List Response"
-    },
-    "SitesListResponse": {
-      "description": "Site List Response",
-      "properties": {
-        "sites": {
-          "items": {
-            "$ref": "Site"
-          },
-          "type": "array",
-          "description": "Site collection."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#sitesListResponse\"."
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        }
-      },
-      "id": "SitesListResponse",
-      "type": "object"
-    },
-    "PostalCodesListResponse": {
-      "properties": {
-        "postalCodes": {
-          "description": "Postal code collection.",
-          "items": {
-            "$ref": "PostalCode"
-          },
-          "type": "array"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#postalCodesListResponse\".",
-          "type": "string"
-        }
-      },
-      "id": "PostalCodesListResponse",
-      "type": "object",
-      "description": "Postal Code List Response"
-    },
-    "EventTag": {
-      "properties": {
-        "status": {
-          "enum": [
-            "ENABLED",
-            "DISABLED"
-          ],
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "description": "Status of this event tag. Must be ENABLED for this event tag to fire. This is a required field.",
-          "type": "string"
-        },
-        "campaignId": {
-          "format": "int64",
-          "description": "Campaign ID of this event tag. This field or the advertiserId field is required on insertion.",
-          "type": "string"
-        },
-        "urlEscapeLevels": {
-          "type": "integer",
-          "description": "Number of times the landing page URL should be URL-escaped before being appended to the click-through event tag URL. Only applies to click-through event tags as specified by the event tag type.",
-          "format": "int32"
-        },
-        "accountId": {
-          "description": "Account ID of this event tag. This is a read-only field that can be left blank.",
-          "type": "string",
-          "format": "int64"
-        },
-        "advertiserIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
-        },
-        "sslCompliant": {
-          "description": "Whether this tag is SSL-compliant or not. This is a read-only field.",
-          "type": "boolean"
-        },
-        "url": {
-          "description": "Payload URL for this event tag. The URL on a click-through event tag should have a landing page URL appended to the end of it. This field is required on insertion.",
-          "type": "string"
-        },
-        "id": {
-          "description": "ID of this event tag. This is a read-only, auto-generated field.",
-          "type": "string",
-          "format": "int64"
-        },
-        "siteIds": {
-          "items": {
-            "type": "string",
-            "format": "int64"
-          },
-          "type": "array",
-          "description": "Filter list of site IDs associated with this event tag. The siteFilterType determines whether this is a allowlist or blocklist filter."
-        },
-        "subaccountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Subaccount ID of this event tag. This is a read-only field that can be left blank."
-        },
-        "name": {
-          "description": "Name of this event tag. This is a required field and must be less than 256 characters long.",
-          "type": "string"
-        },
-        "enabledByDefault": {
-          "description": "Whether this event tag should be automatically enabled for all of the advertiser's campaigns and ads.",
-          "type": "boolean"
-        },
-        "campaignIdDimensionValue": {
-          "description": "Dimension value for the ID of the campaign. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "advertiserId": {
-          "type": "string",
-          "description": "Advertiser ID of this event tag. This field or the campaignId field is required on insertion.",
-          "format": "int64"
-        },
-        "type": {
-          "type": "string",
-          "enum": [
-            "IMPRESSION_IMAGE_EVENT_TAG",
-            "IMPRESSION_JAVASCRIPT_EVENT_TAG",
-            "CLICK_THROUGH_EVENT_TAG"
-          ],
-          "description": "Event tag type. Can be used to specify whether to use a third-party pixel, a third-party JavaScript URL, or a third-party click-through URL for either impression or click tracking. This is a required field.",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ]
-        },
-        "siteFilterType": {
-          "enum": [
-            "WHITELIST",
-            "BLACKLIST"
-          ],
-          "type": "string",
-          "description": "Site filter type for this event tag. If no type is specified then the event tag will be applied to all sites.",
-          "enumDescriptions": [
-            "",
-            ""
-          ]
-        },
-        "excludeFromAdxRequests": {
-          "description": "Whether to remove this event tag from ads that are trafficked through Display & Video 360 to Ad Exchange. This may be useful if the event tag uses a pixel that is unapproved for Ad Exchange bids on one or more networks, such as the Google Display Network.",
-          "type": "boolean"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#eventTag\"."
-        }
-      },
-      "id": "EventTag",
-      "type": "object",
-      "description": "Contains properties of an event tag."
-    },
-    "Flight": {
-      "type": "object",
-      "description": "Flight",
-      "properties": {
-        "endDate": {
-          "format": "date",
-          "type": "string"
-        },
-        "rateOrCost": {
-          "description": "Rate or cost of this flight.",
-          "type": "string",
-          "format": "int64"
-        },
-        "startDate": {
-          "type": "string",
-          "format": "date"
-        },
-        "units": {
-          "type": "string",
-          "description": "Units of this flight.",
-          "format": "int64"
-        }
-      },
-      "id": "Flight"
-    },
-    "CreativeClickThroughUrl": {
-      "type": "object",
-      "id": "CreativeClickThroughUrl",
-      "description": "Click-through URL",
-      "properties": {
-        "landingPageId": {
-          "type": "string",
-          "description": "ID of the landing page for the click-through URL.",
-          "format": "int64"
-        },
-        "customClickThroughUrl": {
-          "description": "Custom click-through URL. Applicable if the landingPageId field is left unset.",
-          "type": "string"
-        },
-        "computedClickThroughUrl": {
-          "description": "Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows: - If landingPageId is specified then that landing page's URL is assigned to this field. - Otherwise, the customClickThroughUrl is assigned to this field. ",
-          "type": "string"
-        }
-      }
-    },
-    "Campaign": {
-      "id": "Campaign",
-      "type": "object",
-      "description": "Contains properties of a Campaign Manager campaign.",
-      "properties": {
-        "billingInvoiceCode": {
-          "description": "Billing invoice code included in the Campaign Manager client billing invoices associated with the campaign.",
-          "type": "string"
-        },
-        "startDate": {
-          "type": "string",
-          "format": "date"
-        },
-        "traffickerEmails": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "Campaign trafficker contact emails."
-        },
-        "lastModifiedInfo": {
-          "$ref": "LastModifiedInfo",
-          "description": "Information about the most recent modification of this campaign. This is a read-only field."
-        },
-        "advertiserIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the advertiser ID of this campaign. This is a read-only, auto-generated field."
-        },
-        "eventTagOverrides": {
-          "description": "Overrides that can be used to activate or deactivate advertiser event tags.",
-          "items": {
-            "$ref": "EventTagOverride"
-          },
-          "type": "array"
-        },
-        "accountId": {
-          "format": "int64",
-          "description": "Account ID of this campaign. This is a read-only field that can be left blank.",
-          "type": "string"
-        },
-        "id": {
-          "description": "ID of this campaign. This is a read-only auto-generated field.",
-          "type": "string",
-          "format": "int64"
-        },
-        "audienceSegmentGroups": {
-          "items": {
-            "$ref": "AudienceSegmentGroup"
-          },
-          "description": "Audience segment groups assigned to this campaign. Cannot have more than 300 segment groups.",
-          "type": "array"
-        },
-        "idDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of this campaign. This is a read-only, auto-generated field."
-        },
-        "subaccountId": {
-          "description": "Subaccount ID of this campaign. This is a read-only field that can be left blank.",
-          "format": "int64",
-          "type": "string"
-        },
-        "nielsenOcrEnabled": {
-          "type": "boolean",
-          "description": "Whether Nielsen reports are enabled for this campaign."
-        },
-        "endDate": {
-          "type": "string",
-          "format": "date"
-        },
-        "defaultClickThroughEventTagProperties": {
-          "description": "Click-through event tag ID override properties for this campaign.",
-          "$ref": "DefaultClickThroughEventTagProperties"
-        },
-        "createInfo": {
-          "description": "Information about the creation of this campaign. This is a read-only field.",
-          "$ref": "LastModifiedInfo"
-        },
-        "adBlockingConfiguration": {
-          "description": "Ad blocking settings for this campaign.",
-          "$ref": "AdBlockingConfiguration"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaign\"."
-        },
-        "creativeOptimizationConfiguration": {
-          "$ref": "CreativeOptimizationConfiguration",
-          "description": "Creative optimization configuration for the campaign."
-        },
-        "defaultLandingPageId": {
-          "description": "The default landing page ID for this campaign.",
-          "type": "string",
-          "format": "int64"
-        },
-        "advertiserGroupId": {
-          "type": "string",
-          "description": "Advertiser group ID of the associated advertiser.",
-          "format": "int64"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this campaign. This is a required field and must be less than 256 characters long and unique among campaigns of the same advertiser."
-        },
-        "clickThroughUrlSuffixProperties": {
-          "$ref": "ClickThroughUrlSuffixProperties",
-          "description": "Click-through URL suffix override properties for this campaign."
-        },
-        "advertiserId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Advertiser ID of this campaign. This is a required field."
-        },
-        "additionalCreativeOptimizationConfigurations": {
-          "type": "array",
-          "description": "Additional creative optimization configurations for the campaign.",
-          "items": {
-            "$ref": "CreativeOptimizationConfiguration"
-          }
-        },
-        "creativeGroupIds": {
-          "type": "array",
-          "items": {
-            "type": "string",
-            "format": "int64"
-          },
-          "description": "List of creative group IDs that are assigned to the campaign."
-        },
-        "externalId": {
-          "type": "string",
-          "description": "External ID for this campaign."
-        },
-        "archived": {
-          "description": "Whether this campaign has been archived.",
-          "type": "boolean"
-        },
-        "comment": {
-          "type": "string",
-          "description": "Arbitrary comments about this campaign. Must be less than 256 characters long."
-        }
-      }
-    },
-    "ClickTag": {
-      "description": "Creative Click Tag.",
-      "properties": {
-        "eventName": {
-          "type": "string",
-          "description": "Advertiser event name associated with the click tag. This field is used by DISPLAY_IMAGE_GALLERY and HTML5_BANNER creatives. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE."
-        },
-        "name": {
-          "type": "string",
-          "description": "Parameter name for the specified click tag. For DISPLAY_IMAGE_GALLERY creative assets, this field must match the value of the creative asset's creativeAssetId.name field."
-        },
-        "clickThroughUrl": {
-          "description": "Parameter value for the specified click tag. This field contains a click-through url.",
-          "$ref": "CreativeClickThroughUrl"
-        }
-      },
-      "id": "ClickTag",
-      "type": "object"
-    },
-    "PlacementStrategiesListResponse": {
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementStrategiesListResponse\".",
-          "type": "string"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        },
-        "placementStrategies": {
-          "description": "Placement strategy collection.",
-          "type": "array",
-          "items": {
-            "$ref": "PlacementStrategy"
-          }
-        }
-      },
-      "description": "Placement Strategy List Response",
-      "type": "object",
-      "id": "PlacementStrategiesListResponse"
-    },
-    "ListPopulationRule": {
-      "id": "ListPopulationRule",
-      "description": "Remarketing List Population Rule.",
-      "properties": {
-        "listPopulationClauses": {
-          "description": "Clauses that make up this list population rule. Clauses are joined by ANDs, and the clauses themselves are made up of list population terms which are joined by ORs.",
-          "type": "array",
-          "items": {
-            "$ref": "ListPopulationClause"
-          }
-        },
-        "floodlightActivityName": {
-          "type": "string",
-          "description": "Name of floodlight activity associated with this rule. This is a read-only, auto-generated field."
-        },
-        "floodlightActivityId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Floodlight activity ID associated with this rule. This field can be left blank."
-        }
-      },
-      "type": "object"
-    },
-    "DimensionValueRequest": {
-      "properties": {
-        "startDate": {
-          "type": "string",
-          "format": "date"
-        },
-        "endDate": {
-          "type": "string",
-          "format": "date"
-        },
-        "filters": {
-          "type": "array",
-          "description": "The list of filters by which to filter values. The filters are ANDed.",
-          "items": {
-            "$ref": "DimensionFilter"
-          }
-        },
-        "kind": {
-          "type": "string",
-          "description": "The kind of request this is, in this case dfareporting#dimensionValueRequest ."
-        },
-        "dimensionName": {
-          "type": "string",
-          "annotations": {
-            "required": [
-              "dfareporting.dimensionValues.query"
-            ]
-          },
-          "description": "The name of the dimension for which values should be requested."
-        }
-      },
-      "type": "object",
-      "id": "DimensionValueRequest",
-      "description": "Represents a DimensionValuesRequest."
-    },
-    "OffsetPosition": {
-      "id": "OffsetPosition",
-      "type": "object",
-      "description": "Offset Position.",
-      "properties": {
-        "top": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Offset distance from top side of an asset or a window."
-        },
-        "left": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Offset distance from left side of an asset or a window."
-        }
-      }
-    },
-    "ThirdPartyAuthenticationToken": {
-      "properties": {
-        "value": {
-          "type": "string",
-          "description": "Value of the third-party authentication token. This is a read-only, auto-generated field."
-        },
-        "name": {
-          "description": "Name of the third-party authentication token.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Third Party Authentication Token",
-      "id": "ThirdPartyAuthenticationToken"
-    },
-    "CountriesListResponse": {
-      "type": "object",
-      "properties": {
-        "countries": {
-          "type": "array",
-          "items": {
-            "$ref": "Country"
-          },
-          "description": "Country collection."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#countriesListResponse\"."
-        }
-      },
-      "id": "CountriesListResponse",
-      "description": "Country List Response"
-    },
-    "AccountActiveAdSummary": {
-      "properties": {
-        "activeAds": {
-          "format": "int64",
-          "description": "Ads that have been activated for the account",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountActiveAdSummary\".",
-          "type": "string"
-        },
-        "activeAdsLimitTier": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "ACTIVE_ADS_TIER_40K",
-            "ACTIVE_ADS_TIER_75K",
-            "ACTIVE_ADS_TIER_100K",
-            "ACTIVE_ADS_TIER_200K",
-            "ACTIVE_ADS_TIER_300K",
-            "ACTIVE_ADS_TIER_500K",
-            "ACTIVE_ADS_TIER_750K",
-            "ACTIVE_ADS_TIER_1M"
-          ],
-          "type": "string",
-          "description": "Maximum number of active ads allowed for the account."
-        },
-        "accountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of the account."
-        },
-        "availableAds": {
-          "description": "Ads that can be activated for the account.",
-          "format": "int64",
-          "type": "string"
-        }
-      },
-      "description": "Gets a summary of active ads in an account.",
-      "type": "object",
-      "id": "AccountActiveAdSummary"
-    },
-    "UserRolesListResponse": {
-      "id": "UserRolesListResponse",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolesListResponse\".",
-          "type": "string"
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        },
-        "userRoles": {
-          "description": "User role collection.",
-          "items": {
-            "$ref": "UserRole"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "description": "User Role List Response"
-    },
-    "DfpSettings": {
-      "type": "object",
-      "properties": {
-        "dfpNetworkCode": {
-          "description": "Ad Manager network code for this directory site.",
-          "type": "string"
-        },
-        "dfpNetworkName": {
-          "type": "string",
-          "description": "Ad Manager network name for this directory site."
-        },
-        "pubPaidPlacementAccepted": {
-          "description": "Whether this directory site accepts publisher-paid tags.",
-          "type": "boolean"
-        },
-        "programmaticPlacementAccepted": {
-          "type": "boolean",
-          "description": "Whether this directory site accepts programmatic placements."
-        },
-        "publisherPortalOnly": {
-          "type": "boolean",
-          "description": "Whether this directory site is available only via Publisher Portal."
-        }
-      },
-      "description": "Google Ad Manager Settings",
-      "id": "DfpSettings"
-    },
-    "CreativeAssetMetadata": {
-      "properties": {
-        "clickTags": {
-          "items": {
-            "$ref": "ClickTag"
-          },
-          "description": "List of detected click tags for assets. This is a read-only, auto-generated field. This field is empty for a rich media asset.",
-          "type": "array"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeAssetMetadata\".",
-          "type": "string"
-        },
-        "detectedFeatures": {
-          "description": "List of feature dependencies for the creative asset that are detected by Campaign Manager. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative correctly. This is a read-only, auto-generated field.",
-          "type": "array",
-          "items": {
-            "type": "string",
-            "enum": [
-              "CSS_FONT_FACE",
-              "CSS_BACKGROUND_SIZE",
-              "CSS_BORDER_IMAGE",
-              "CSS_BORDER_RADIUS",
-              "CSS_BOX_SHADOW",
-              "CSS_FLEX_BOX",
-              "CSS_HSLA",
-              "CSS_MULTIPLE_BGS",
-              "CSS_OPACITY",
-              "CSS_RGBA",
-              "CSS_TEXT_SHADOW",
-              "CSS_ANIMATIONS",
-              "CSS_COLUMNS",
-              "CSS_GENERATED_CONTENT",
-              "CSS_GRADIENTS",
-              "CSS_REFLECTIONS",
-              "CSS_TRANSFORMS",
-              "CSS_TRANSFORMS3D",
-              "CSS_TRANSITIONS",
-              "APPLICATION_CACHE",
-              "CANVAS",
-              "CANVAS_TEXT",
-              "DRAG_AND_DROP",
-              "HASH_CHANGE",
-              "HISTORY",
-              "AUDIO",
-              "VIDEO",
-              "INDEXED_DB",
-              "INPUT_ATTR_AUTOCOMPLETE",
-              "INPUT_ATTR_AUTOFOCUS",
-              "INPUT_ATTR_LIST",
-              "INPUT_ATTR_PLACEHOLDER",
-              "INPUT_ATTR_MAX",
-              "INPUT_ATTR_MIN",
-              "INPUT_ATTR_MULTIPLE",
-              "INPUT_ATTR_PATTERN",
-              "INPUT_ATTR_REQUIRED",
-              "INPUT_ATTR_STEP",
-              "INPUT_TYPE_SEARCH",
-              "INPUT_TYPE_TEL",
-              "INPUT_TYPE_URL",
-              "INPUT_TYPE_EMAIL",
-              "INPUT_TYPE_DATETIME",
-              "INPUT_TYPE_DATE",
-              "INPUT_TYPE_MONTH",
-              "INPUT_TYPE_WEEK",
-              "INPUT_TYPE_TIME",
-              "INPUT_TYPE_DATETIME_LOCAL",
-              "INPUT_TYPE_NUMBER",
-              "INPUT_TYPE_RANGE",
-              "INPUT_TYPE_COLOR",
-              "LOCAL_STORAGE",
-              "POST_MESSAGE",
-              "SESSION_STORAGE",
-              "WEB_SOCKETS",
-              "WEB_SQL_DATABASE",
-              "WEB_WORKERS",
-              "GEO_LOCATION",
-              "INLINE_SVG",
-              "SMIL",
-              "SVG_HREF",
-              "SVG_CLIP_PATHS",
-              "TOUCH",
-              "WEBGL",
-              "SVG_FILTERS",
-              "SVG_FE_IMAGE"
-            ],
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ]
-          }
-        },
-        "id": {
-          "format": "int64",
-          "description": "Numeric ID of the asset. This is a read-only, auto-generated field.",
-          "type": "string"
-        },
-        "warnedValidationRules": {
-          "items": {
-            "enum": [
-              "CLICK_TAG_NON_TOP_LEVEL",
-              "CLICK_TAG_MISSING",
-              "CLICK_TAG_MORE_THAN_ONE",
-              "CLICK_TAG_INVALID",
-              "ORPHANED_ASSET",
-              "PRIMARY_HTML_MISSING",
-              "EXTERNAL_FILE_REFERENCED",
-              "MRAID_REFERENCED",
-              "ADMOB_REFERENCED",
-              "FILE_TYPE_INVALID",
-              "ZIP_INVALID",
-              "LINKED_FILE_NOT_FOUND",
-              "MAX_FLASH_VERSION_11",
-              "NOT_SSL_COMPLIANT",
-              "FILE_DETAIL_EMPTY",
-              "ASSET_INVALID",
-              "GWD_PROPERTIES_INVALID",
-              "ENABLER_UNSUPPORTED_METHOD_DCM",
-              "ASSET_FORMAT_UNSUPPORTED_DCM",
-              "COMPONENT_UNSUPPORTED_DCM",
-              "HTML5_FEATURE_UNSUPPORTED",
-              "CLICK_TAG_IN_GWD",
-              "CLICK_TAG_HARD_CODED",
-              "SVG_INVALID"
-            ],
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ],
-            "type": "string"
-          },
-          "type": "array",
-          "description": "Rules validated during code generation that generated a warning. This is a read-only, auto-generated field. Possible values are: - \"ADMOB_REFERENCED\" - \"ASSET_FORMAT_UNSUPPORTED_DCM\" - \"ASSET_INVALID\" - \"CLICK_TAG_HARD_CODED\" - \"CLICK_TAG_INVALID\" - \"CLICK_TAG_IN_GWD\" - \"CLICK_TAG_MISSING\" - \"CLICK_TAG_MORE_THAN_ONE\" - \"CLICK_TAG_NON_TOP_LEVEL\" - \"COMPONENT_UNSUPPORTED_DCM\" - \"ENABLER_UNSUPPORTED_METHOD_DCM\" - \"EXTERNAL_FILE_REFERENCED\" - \"FILE_DETAIL_EMPTY\" - \"FILE_TYPE_INVALID\" - \"GWD_PROPERTIES_INVALID\" - \"HTML5_FEATURE_UNSUPPORTED\" - \"LINKED_FILE_NOT_FOUND\" - \"MAX_FLASH_VERSION_11\" - \"MRAID_REFERENCED\" - \"NOT_SSL_COMPLIANT\" - \"ORPHANED_ASSET\" - \"PRIMARY_HTML_MISSING\" - \"SVG_INVALID\" - \"ZIP_INVALID\" "
-        },
-        "idDimensionValue": {
-          "description": "Dimension value for the numeric ID of the asset. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "assetIdentifier": {
-          "$ref": "CreativeAssetId",
-          "description": "ID of the creative asset. This is a required field."
-        }
-      },
-      "type": "object",
-      "id": "CreativeAssetMetadata",
-      "description": "CreativeAssets contains properties of a creative asset file which will be uploaded or has already been uploaded. Refer to the creative sample code for how to upload assets and insert a creative."
-    },
-    "FrequencyCap": {
-      "properties": {
-        "duration": {
-          "description": "Duration of time, in seconds, for this frequency cap. The maximum duration is 90 days. Acceptable values are 1 to 7776000, inclusive.",
-          "type": "string",
-          "format": "int64"
-        },
-        "impressions": {
-          "format": "int64",
-          "type": "string",
-          "description": "Number of times an individual user can be served the ad within the specified duration. Acceptable values are 1 to 15, inclusive."
-        }
-      },
-      "type": "object",
-      "description": "Frequency Cap.",
-      "id": "FrequencyCap"
-    },
-    "SiteSkippableSetting": {
-      "type": "object",
-      "id": "SiteSkippableSetting",
-      "description": "Skippable Settings",
-      "properties": {
-        "progressOffset": {
-          "description": "Amount of time to play videos served to this site template before counting a view. Applicable when skippable is true.",
-          "$ref": "VideoOffset"
-        },
-        "skipOffset": {
-          "$ref": "VideoOffset",
-          "description": "Amount of time to play videos served to this site before the skip button should appear. Applicable when skippable is true."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#siteSkippableSetting\".",
-          "type": "string"
-        },
-        "skippable": {
-          "description": "Whether the user can skip creatives served to this site. This will act as default for new placements created under this site.",
-          "type": "boolean"
-        }
-      }
-    },
-    "Project": {
-      "properties": {
-        "targetImpressions": {
-          "format": "int64",
-          "type": "string",
-          "description": "Number of impressions that the advertiser is targeting."
-        },
-        "lastModifiedInfo": {
-          "$ref": "LastModifiedInfo",
-          "description": "Information about the most recent modification of this project."
-        },
-        "audienceGender": {
-          "type": "string",
-          "description": "Audience gender of this project.",
-          "enum": [
-            "PLANNING_AUDIENCE_GENDER_MALE",
-            "PLANNING_AUDIENCE_GENDER_FEMALE"
-          ],
-          "enumDescriptions": [
-            "",
-            ""
-          ]
-        },
-        "targetClicks": {
-          "format": "int64",
-          "type": "string",
-          "description": "Number of clicks that the advertiser is targeting."
-        },
-        "advertiserId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Advertiser ID of this project."
-        },
-        "targetCpaNanos": {
-          "description": "CPA that the advertiser is targeting.",
-          "type": "string",
-          "format": "int64"
-        },
-        "budget": {
-          "format": "int64",
-          "description": "Budget of this project in the currency specified by the current account. The value stored in this field represents only the non-fractional amount. For example, for USD, the smallest value that can be represented by this field is 1 US dollar.",
-          "type": "string"
-        },
-        "endDate": {
-          "format": "date",
-          "type": "string"
-        },
-        "targetCpmNanos": {
-          "format": "int64",
-          "type": "string",
-          "description": "CPM that the advertiser is targeting."
-        },
-        "targetConversions": {
-          "description": "Number of conversions that the advertiser is targeting.",
-          "type": "string",
-          "format": "int64"
-        },
-        "clientName": {
-          "type": "string",
-          "description": "Name of the project client."
-        },
-        "overview": {
-          "type": "string",
-          "description": "Overview of this project."
-        },
-        "targetCpcNanos": {
-          "description": "CPC that the advertiser is targeting.",
-          "type": "string",
-          "format": "int64"
-        },
-        "targetCpmActiveViewNanos": {
-          "type": "string",
-          "description": "vCPM from Active View that the advertiser is targeting.",
-          "format": "int64"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#project\".",
-          "type": "string"
-        },
-        "accountId": {
-          "description": "Account ID of this project.",
-          "type": "string",
-          "format": "int64"
-        },
-        "subaccountId": {
-          "description": "Subaccount ID of this project.",
-          "type": "string",
-          "format": "int64"
-        },
-        "clientBillingCode": {
-          "description": "Client billing code of this project.",
-          "type": "string"
-        },
-        "audienceAgeGroup": {
-          "type": "string",
-          "enum": [
-            "PLANNING_AUDIENCE_AGE_18_24",
-            "PLANNING_AUDIENCE_AGE_25_34",
-            "PLANNING_AUDIENCE_AGE_35_44",
-            "PLANNING_AUDIENCE_AGE_45_54",
-            "PLANNING_AUDIENCE_AGE_55_64",
-            "PLANNING_AUDIENCE_AGE_65_OR_MORE",
-            "PLANNING_AUDIENCE_AGE_UNKNOWN"
-          ],
-          "description": "Audience age group of this project.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "id": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of this project. This is a read-only, auto-generated field."
-        },
-        "startDate": {
-          "format": "date",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this project."
-        }
-      },
-      "type": "object",
-      "id": "Project",
-      "description": "Contains properties of a Planning project."
-    },
-    "CreativeFieldAssignment": {
-      "id": "CreativeFieldAssignment",
-      "description": "Creative Field Assignment.",
-      "type": "object",
-      "properties": {
-        "creativeFieldValueId": {
-          "description": "ID of the creative field value.",
-          "type": "string",
-          "format": "int64"
-        },
-        "creativeFieldId": {
-          "type": "string",
-          "description": "ID of the creative field.",
-          "format": "int64"
-        }
-      }
-    },
-    "DimensionValueList": {
-      "properties": {
-        "items": {
-          "type": "array",
-          "items": {
-            "$ref": "DimensionValue"
-          },
-          "description": "The dimension values returned in this response."
-        },
-        "etag": {
-          "description": "The eTag of this response for caching purposes.",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "The kind of list this is, in this case dfareporting#dimensionValueList."
-        },
-        "nextPageToken": {
-          "description": "Continuation token used to page through dimension values. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted.",
-          "type": "string"
-        }
-      },
-      "id": "DimensionValueList",
-      "type": "object",
-      "description": "Represents the list of DimensionValue resources."
-    },
-    "GeoTargeting": {
-      "type": "object",
-      "id": "GeoTargeting",
-      "properties": {
-        "metros": {
-          "description": "Metros to be targeted. For each metro only dmaId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a metro, do not target or exclude the country of the metro.",
-          "items": {
-            "$ref": "Metro"
-          },
-          "type": "array"
-        },
-        "cities": {
-          "type": "array",
-          "items": {
-            "$ref": "City"
-          },
-          "description": "Cities to be targeted. For each city only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a city, do not target or exclude the country of the city, and do not target the metro or region of the city."
-        },
-        "countries": {
-          "type": "array",
-          "items": {
-            "$ref": "Country"
-          },
-          "description": "Countries to be targeted or excluded from targeting, depending on the setting of the excludeCountries field. For each country only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting or excluding a country, do not target regions, cities, metros, or postal codes in the same country."
-        },
-        "postalCodes": {
-          "type": "array",
-          "items": {
-            "$ref": "PostalCode"
-          },
-          "description": "Postal codes to be targeted. For each postal code only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a postal code, do not target or exclude the country of the postal code."
-        },
-        "excludeCountries": {
-          "description": "Whether or not to exclude the countries in the countries field from targeting. If false, the countries field refers to countries which will be targeted by the ad.",
-          "type": "boolean"
-        },
-        "regions": {
-          "items": {
-            "$ref": "Region"
-          },
-          "description": "Regions to be targeted. For each region only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a region, do not target or exclude the country of the region.",
-          "type": "array"
-        }
-      },
-      "description": "Geographical Targeting."
-    },
-    "LastModifiedInfo": {
-      "id": "LastModifiedInfo",
-      "description": "Modification timestamp.",
-      "properties": {
-        "time": {
-          "format": "int64",
-          "type": "string",
-          "description": "Timestamp of the last change in milliseconds since epoch."
-        }
-      },
-      "type": "object"
-    },
-    "CreativeCustomEvent": {
-      "properties": {
-        "targetType": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "Target type used by the event.",
-          "enum": [
-            "TARGET_BLANK",
-            "TARGET_TOP",
-            "TARGET_SELF",
-            "TARGET_PARENT",
-            "TARGET_POPUP"
-          ],
-          "type": "string"
-        },
-        "advertiserCustomEventType": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "ADVERTISER_EVENT_TIMER",
-            "ADVERTISER_EVENT_EXIT",
-            "ADVERTISER_EVENT_COUNTER"
-          ],
-          "description": "Type of the event. This is a read-only field."
-        },
-        "artworkLabel": {
-          "description": "Artwork label column, used to link events in Campaign Manager back to events in Studio. This is a required field and should not be modified after insertion.",
-          "type": "string"
-        },
-        "advertiserCustomEventId": {
-          "format": "int64",
-          "description": "Unique ID of this event used by Reporting and Data Transfer. This is a read-only field.",
-          "type": "string"
-        },
-        "advertiserCustomEventName": {
-          "type": "string",
-          "description": "User-entered name for the event."
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of this event. This is a required field and should not be modified after insertion.",
-          "format": "int64"
-        },
-        "artworkType": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "ARTWORK_TYPE_FLASH",
-            "ARTWORK_TYPE_HTML5",
-            "ARTWORK_TYPE_MIXED",
-            "ARTWORK_TYPE_IMAGE"
-          ],
-          "type": "string",
-          "description": "Artwork type used by the creative.This is a read-only field."
-        },
-        "popupWindowProperties": {
-          "description": "Properties for rich media popup windows. This field is used only for exit events.",
-          "$ref": "PopupWindowProperties"
-        },
-        "exitClickThroughUrl": {
-          "$ref": "CreativeClickThroughUrl",
-          "description": "Exit click-through URL for the event. This field is used only for exit events."
-        },
-        "videoReportingId": {
-          "description": "Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Creative Custom Event.",
-      "id": "CreativeCustomEvent"
-    },
-    "TargetingTemplatesListResponse": {
-      "type": "object",
-      "description": "Targeting Template List Response",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#targetingTemplatesListResponse\"."
-        },
-        "targetingTemplates": {
-          "items": {
-            "$ref": "TargetingTemplate"
-          },
-          "type": "array",
-          "description": "Targeting template collection."
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        }
-      },
-      "id": "TargetingTemplatesListResponse"
-    },
-    "FloodlightActivity": {
-      "description": "Contains properties of a Floodlight activity.",
-      "id": "FloodlightActivity",
-      "type": "object",
-      "properties": {
-        "defaultTags": {
-          "items": {
-            "$ref": "FloodlightActivityDynamicTag"
-          },
-          "type": "array",
-          "description": "Dynamic floodlight tags."
-        },
-        "floodlightActivityGroupTagString": {
-          "description": "Tag string of the associated floodlight activity group. This is a read-only field.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of this floodlight activity. This is a required field. Must be less than 129 characters long and cannot contain quotes.",
-          "type": "string"
-        },
-        "userDefinedVariableTypes": {
-          "items": {
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ],
-            "enum": [
-              "U1",
-              "U2",
-              "U3",
-              "U4",
-              "U5",
-              "U6",
-              "U7",
-              "U8",
-              "U9",
-              "U10",
-              "U11",
-              "U12",
-              "U13",
-              "U14",
-              "U15",
-              "U16",
-              "U17",
-              "U18",
-              "U19",
-              "U20",
-              "U21",
-              "U22",
-              "U23",
-              "U24",
-              "U25",
-              "U26",
-              "U27",
-              "U28",
-              "U29",
-              "U30",
-              "U31",
-              "U32",
-              "U33",
-              "U34",
-              "U35",
-              "U36",
-              "U37",
-              "U38",
-              "U39",
-              "U40",
-              "U41",
-              "U42",
-              "U43",
-              "U44",
-              "U45",
-              "U46",
-              "U47",
-              "U48",
-              "U49",
-              "U50",
-              "U51",
-              "U52",
-              "U53",
-              "U54",
-              "U55",
-              "U56",
-              "U57",
-              "U58",
-              "U59",
-              "U60",
-              "U61",
-              "U62",
-              "U63",
-              "U64",
-              "U65",
-              "U66",
-              "U67",
-              "U68",
-              "U69",
-              "U70",
-              "U71",
-              "U72",
-              "U73",
-              "U74",
-              "U75",
-              "U76",
-              "U77",
-              "U78",
-              "U79",
-              "U80",
-              "U81",
-              "U82",
-              "U83",
-              "U84",
-              "U85",
-              "U86",
-              "U87",
-              "U88",
-              "U89",
-              "U90",
-              "U91",
-              "U92",
-              "U93",
-              "U94",
-              "U95",
-              "U96",
-              "U97",
-              "U98",
-              "U99",
-              "U100"
-            ],
-            "type": "string"
-          },
-          "description": "List of the user-defined variables used by this conversion tag. These map to the \"u[1-100]=\" in the tags. Each of these can have a user defined type. Acceptable values are U1 to U100, inclusive. ",
-          "type": "array"
-        },
-        "accountId": {
-          "description": "Account ID of this floodlight activity. This is a read-only field that can be left blank.",
-          "format": "int64",
-          "type": "string"
-        },
-        "advertiserIdDimensionValue": {
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "publisherTags": {
-          "type": "array",
-          "items": {
-            "$ref": "FloodlightActivityPublisherDynamicTag"
-          },
-          "description": "Publisher dynamic floodlight tags."
-        },
-        "countingMethod": {
-          "description": "Counting method for conversions for this floodlight activity. This is a required field.",
-          "enum": [
-            "STANDARD_COUNTING",
-            "UNIQUE_COUNTING",
-            "SESSION_COUNTING",
-            "TRANSACTIONS_COUNTING",
-            "ITEMS_SOLD_COUNTING"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "floodlightActivityGroupName": {
-          "description": "Name of the associated floodlight activity group. This is a read-only field.",
-          "type": "string"
-        },
-        "tagString": {
-          "type": "string",
-          "description": "Value of the cat= parameter in the floodlight tag, which the ad servers use to identify the activity. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being a-z0-9[ _ ]. This tag string must also be unique among activities of the same activity group. This field is read-only after insertion."
-        },
-        "subaccountId": {
-          "type": "string",
-          "description": "Subaccount ID of this floodlight activity. This is a read-only field that can be left blank.",
-          "format": "int64"
-        },
-        "sslCompliant": {
-          "description": "Whether the floodlight activity is SSL-compliant. This is a read-only field, its value detected by the system from the floodlight tags.",
-          "type": "boolean"
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of this floodlight activity. This is a read-only, auto-generated field.",
-          "format": "int64"
-        },
-        "idDimensionValue": {
-          "description": "Dimension value for the ID of this floodlight activity. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "floodlightTagType": {
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "enum": [
-            "IFRAME",
-            "IMAGE",
-            "GLOBAL_SITE_TAG"
-          ],
-          "description": "The type of Floodlight tag this activity will generate. This is a required field."
-        },
-        "expectedUrl": {
-          "type": "string",
-          "description": "URL where this tag will be deployed. If specified, must be less than 256 characters long."
-        },
-        "floodlightActivityGroupType": {
-          "type": "string",
-          "description": "Type of the associated floodlight activity group. This is a read-only field.",
-          "enum": [
-            "COUNTER",
-            "SALE"
-          ],
-          "enumDescriptions": [
-            "",
-            ""
-          ]
-        },
-        "floodlightActivityGroupId": {
-          "format": "int64",
-          "description": "Floodlight activity group ID of this floodlight activity. This is a required field.",
-          "type": "string"
-        },
-        "sslRequired": {
-          "description": "Whether this floodlight activity must be SSL-compliant.",
-          "type": "boolean"
-        },
-        "floodlightConfigurationIdDimensionValue": {
-          "description": "Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "notes": {
-          "type": "string",
-          "description": "General notes or implementation instructions for the tag."
-        },
-        "hidden": {
-          "description": "Whether this activity is archived.",
-          "type": "boolean"
-        },
-        "secure": {
-          "type": "boolean",
-          "description": "Whether this tag should use SSL."
-        },
-        "advertiserId": {
-          "description": "Advertiser ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's advertiser or the existing activity's advertiser.",
-          "type": "string",
-          "format": "int64"
-        },
-        "cacheBustingType": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "JAVASCRIPT",
-            "ACTIVE_SERVER_PAGE",
-            "JSP",
-            "PHP",
-            "COLD_FUSION"
-          ],
-          "type": "string",
-          "description": "Code type used for cache busting in the generated tag. Applicable only when floodlightActivityGroupType is COUNTER and countingMethod is STANDARD_COUNTING or UNIQUE_COUNTING."
-        },
-        "tagFormat": {
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "Tag format type for the floodlight activity. If left blank, the tag format will default to HTML.",
-          "enum": [
-            "HTML",
-            "XHTML"
-          ]
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivity\"."
-        },
-        "floodlightConfigurationId": {
-          "format": "int64",
-          "description": "Floodlight configuration ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's floodlight configuration or from the existing activity's floodlight configuration.",
-          "type": "string"
-        }
-      }
-    },
-    "ConversionsBatchUpdateRequest": {
-      "description": "Update Conversions Request.",
-      "id": "ConversionsBatchUpdateRequest",
-      "type": "object",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionsBatchUpdateRequest\".",
-          "type": "string"
-        },
-        "conversions": {
-          "description": "The set of conversions to update.",
-          "items": {
-            "$ref": "Conversion"
-          },
-          "type": "array"
-        },
-        "encryptionInfo": {
-          "description": "Describes how encryptedUserId is encrypted. This is a required field if encryptedUserId is used.",
-          "$ref": "EncryptionInfo"
-        }
-      }
-    },
-    "UserRolePermissionGroupsListResponse": {
-      "type": "object",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolePermissionGroupsListResponse\".",
-          "type": "string"
-        },
-        "userRolePermissionGroups": {
-          "items": {
-            "$ref": "UserRolePermissionGroup"
-          },
-          "description": "User role permission group collection.",
-          "type": "array"
-        }
-      },
-      "id": "UserRolePermissionGroupsListResponse",
-      "description": "User Role Permission Group List Response"
-    },
-    "PlacementsGenerateTagsResponse": {
-      "type": "object",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementsGenerateTagsResponse\".",
-          "type": "string"
-        },
-        "placementTags": {
-          "type": "array",
-          "description": "Set of generated tags for the specified placements.",
-          "items": {
-            "$ref": "PlacementTag"
-          }
-        }
-      },
-      "id": "PlacementsGenerateTagsResponse",
-      "description": "Placement GenerateTags Response"
-    },
-    "CustomFloodlightVariable": {
-      "type": "object",
-      "id": "CustomFloodlightVariable",
-      "description": "A custom floodlight variable.",
-      "properties": {
-        "value": {
-          "type": "string",
-          "description": "The value of the custom floodlight variable. The length of string must not exceed 50 characters."
-        },
-        "type": {
-          "type": "string",
-          "enum": [
-            "U1",
-            "U2",
-            "U3",
-            "U4",
-            "U5",
-            "U6",
-            "U7",
-            "U8",
-            "U9",
-            "U10",
-            "U11",
-            "U12",
-            "U13",
-            "U14",
-            "U15",
-            "U16",
-            "U17",
-            "U18",
-            "U19",
-            "U20",
-            "U21",
-            "U22",
-            "U23",
-            "U24",
-            "U25",
-            "U26",
-            "U27",
-            "U28",
-            "U29",
-            "U30",
-            "U31",
-            "U32",
-            "U33",
-            "U34",
-            "U35",
-            "U36",
-            "U37",
-            "U38",
-            "U39",
-            "U40",
-            "U41",
-            "U42",
-            "U43",
-            "U44",
-            "U45",
-            "U46",
-            "U47",
-            "U48",
-            "U49",
-            "U50",
-            "U51",
-            "U52",
-            "U53",
-            "U54",
-            "U55",
-            "U56",
-            "U57",
-            "U58",
-            "U59",
-            "U60",
-            "U61",
-            "U62",
-            "U63",
-            "U64",
-            "U65",
-            "U66",
-            "U67",
-            "U68",
-            "U69",
-            "U70",
-            "U71",
-            "U72",
-            "U73",
-            "U74",
-            "U75",
-            "U76",
-            "U77",
-            "U78",
-            "U79",
-            "U80",
-            "U81",
-            "U82",
-            "U83",
-            "U84",
-            "U85",
-            "U86",
-            "U87",
-            "U88",
-            "U89",
-            "U90",
-            "U91",
-            "U92",
-            "U93",
-            "U94",
-            "U95",
-            "U96",
-            "U97",
-            "U98",
-            "U99",
-            "U100"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "The type of custom floodlight variable to supply a value for. These map to the \"u[1-20]=\" in the tags."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customFloodlightVariable\"."
-        }
-      }
-    },
-    "TagSettings": {
-      "properties": {
-        "imageTagEnabled": {
-          "description": "Whether image tags are enabled.",
-          "type": "boolean"
-        },
-        "dynamicTagEnabled": {
-          "type": "boolean",
-          "description": "Whether dynamic floodlight tags are enabled."
-        }
-      },
-      "id": "TagSettings",
-      "type": "object",
-      "description": "Dynamic and Image Tag Settings."
-    },
-    "ThirdPartyTrackingUrl": {
-      "description": "Third-party Tracking URL.",
-      "type": "object",
-      "properties": {
-        "thirdPartyUrlType": {
-          "enum": [
-            "IMPRESSION",
-            "CLICK_TRACKING",
-            "VIDEO_START",
-            "VIDEO_FIRST_QUARTILE",
-            "VIDEO_MIDPOINT",
-            "VIDEO_THIRD_QUARTILE",
-            "VIDEO_COMPLETE",
-            "VIDEO_MUTE",
-            "VIDEO_PAUSE",
-            "VIDEO_REWIND",
-            "VIDEO_FULLSCREEN",
-            "VIDEO_STOP",
-            "VIDEO_CUSTOM",
-            "SURVEY",
-            "RICH_MEDIA_IMPRESSION",
-            "RICH_MEDIA_RM_IMPRESSION",
-            "RICH_MEDIA_BACKUP_IMPRESSION",
-            "VIDEO_SKIP",
-            "VIDEO_PROGRESS"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "Third-party URL type for in-stream video and in-stream audio creatives."
-        },
-        "url": {
-          "description": "URL for the specified third-party URL type.",
-          "type": "string"
-        }
-      },
-      "id": "ThirdPartyTrackingUrl"
-    },
-    "Account": {
-      "id": "Account",
-      "type": "object",
-      "description": "Contains properties of a Campaign Manager account.",
-      "properties": {
-        "active": {
-          "type": "boolean",
-          "description": "Whether this account is active."
-        },
-        "id": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID of this account. This is a read-only, auto-generated field."
-        },
-        "reportsConfiguration": {
-          "description": "Reporting configuration of this account.",
-          "$ref": "ReportsConfiguration"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#account\".",
-          "type": "string"
-        },
-        "defaultCreativeSizeId": {
-          "format": "int64",
-          "description": "Default placement dimensions for this account.",
-          "type": "string"
-        },
-        "nielsenOcrEnabled": {
-          "type": "boolean",
-          "description": "Whether campaigns created in this account will be enabled for Nielsen OCR reach ratings by default."
-        },
-        "shareReportsWithTwitter": {
-          "type": "boolean",
-          "description": "Share Path to Conversion reports with Twitter."
-        },
-        "activeAdsLimitTier": {
-          "enum": [
-            "ACTIVE_ADS_TIER_40K",
-            "ACTIVE_ADS_TIER_75K",
-            "ACTIVE_ADS_TIER_100K",
-            "ACTIVE_ADS_TIER_200K",
-            "ACTIVE_ADS_TIER_300K",
-            "ACTIVE_ADS_TIER_500K",
-            "ACTIVE_ADS_TIER_750K",
-            "ACTIVE_ADS_TIER_1M"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "Maximum number of active ads allowed for this account."
-        },
-        "availablePermissionIds": {
-          "type": "array",
-          "items": {
-            "format": "int64",
-            "type": "string"
-          },
-          "description": "User role permissions available to the user roles of this account."
-        },
-        "maximumImageSize": {
-          "format": "int64",
-          "description": "Maximum image size allowed for this account, in kilobytes. Value must be greater than or equal to 1.",
-          "type": "string"
-        },
-        "accountPermissionIds": {
-          "type": "array",
-          "description": "Account permissions assigned to this account.",
-          "items": {
-            "type": "string",
-            "format": "int64"
-          }
-        },
-        "activeViewOptOut": {
-          "type": "boolean",
-          "description": "Whether to serve creatives with Active View tags. If disabled, viewability data will not be available for any impressions."
-        },
-        "accountProfile": {
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "Profile for this account. This is a read-only field that can be left blank.",
-          "enum": [
-            "ACCOUNT_PROFILE_BASIC",
-            "ACCOUNT_PROFILE_STANDARD"
-          ]
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this account. This is a required field, and must be less than 128 characters long and be globally unique."
-        },
-        "countryId": {
-          "type": "string",
-          "description": "ID of the country associated with this account.",
-          "format": "int64"
-        },
-        "description": {
-          "description": "Description of this account.",
-          "type": "string"
-        },
-        "locale": {
-          "description": "Locale of this account. Acceptable values are: - \"cs\" (Czech) - \"de\" (German) - \"en\" (English) - \"en-GB\" (English United Kingdom) - \"es\" (Spanish) - \"fr\" (French) - \"it\" (Italian) - \"ja\" (Japanese) - \"ko\" (Korean) - \"pl\" (Polish) - \"pt-BR\" (Portuguese Brazil) - \"ru\" (Russian) - \"sv\" (Swedish) - \"tr\" (Turkish) - \"zh-CN\" (Chinese Simplified) - \"zh-TW\" (Chinese Traditional) ",
-          "type": "string"
-        },
-        "currencyId": {
-          "description": "ID of currency associated with this account. This is a required field. Acceptable values are: - \"1\" for USD - \"2\" for GBP - \"3\" for ESP - \"4\" for SEK - \"5\" for CAD - \"6\" for JPY - \"7\" for DEM - \"8\" for AUD - \"9\" for FRF - \"10\" for ITL - \"11\" for DKK - \"12\" for NOK - \"13\" for FIM - \"14\" for ZAR - \"15\" for IEP - \"16\" for NLG - \"17\" for EUR - \"18\" for KRW - \"19\" for TWD - \"20\" for SGD - \"21\" for CNY - \"22\" for HKD - \"23\" for NZD - \"24\" for MYR - \"25\" for BRL - \"26\" for PTE - \"28\" for CLP - \"29\" for TRY - \"30\" for ARS - \"31\" for PEN - \"32\" for ILS - \"33\" for CHF - \"34\" for VEF - \"35\" for COP - \"36\" for GTQ - \"37\" for PLN - \"39\" for INR - \"40\" for THB - \"41\" for IDR - \"42\" for CZK - \"43\" for RON - \"44\" for HUF - \"45\" for RUB - \"46\" for AED - \"47\" for BGN - \"48\" for HRK - \"49\" for MXN - \"50\" for NGN - \"51\" for EGP ",
-          "type": "string",
-          "format": "int64"
-        },
-        "teaserSizeLimit": {
-          "format": "int64",
-          "description": "File size limit in kilobytes of Rich Media teaser creatives. Acceptable values are 1 to 10240, inclusive.",
-          "type": "string"
-        }
-      }
-    },
-    "MobileCarriersListResponse": {
-      "properties": {
-        "mobileCarriers": {
-          "type": "array",
-          "items": {
-            "$ref": "MobileCarrier"
-          },
-          "description": "Mobile carrier collection."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#mobileCarriersListResponse\"."
-        }
-      },
-      "type": "object",
-      "description": "Mobile Carrier List Response",
-      "id": "MobileCarriersListResponse"
-    },
-    "TagData": {
-      "id": "TagData",
-      "properties": {
-        "format": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "TagData tag format of this tag.",
-          "enum": [
-            "PLACEMENT_TAG_STANDARD",
-            "PLACEMENT_TAG_IFRAME_JAVASCRIPT",
-            "PLACEMENT_TAG_IFRAME_ILAYER",
-            "PLACEMENT_TAG_INTERNAL_REDIRECT",
-            "PLACEMENT_TAG_JAVASCRIPT",
-            "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT",
-            "PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT",
-            "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT",
-            "PLACEMENT_TAG_CLICK_COMMANDS",
-            "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH",
-            "PLACEMENT_TAG_TRACKING",
-            "PLACEMENT_TAG_TRACKING_IFRAME",
-            "PLACEMENT_TAG_TRACKING_JAVASCRIPT",
-            "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_3",
-            "PLACEMENT_TAG_IFRAME_JAVASCRIPT_LEGACY",
-            "PLACEMENT_TAG_JAVASCRIPT_LEGACY",
-            "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT_LEGACY",
-            "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT_LEGACY",
-            "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_4"
-          ],
-          "type": "string"
-        },
-        "impressionTag": {
-          "type": "string",
-          "description": "Tag string for serving an ad."
-        },
-        "clickTag": {
-          "type": "string",
-          "description": "Tag string to record a click."
-        },
-        "adId": {
-          "description": "Ad associated with this placement tag. Applicable only when format is PLACEMENT_TAG_TRACKING.",
-          "format": "int64",
-          "type": "string"
-        },
-        "creativeId": {
-          "description": "Creative associated with this placement tag. Applicable only when format is PLACEMENT_TAG_TRACKING.",
-          "format": "int64",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Placement Tag Data"
-    },
-    "SizesListResponse": {
-      "id": "SizesListResponse",
-      "type": "object",
-      "description": "Size List Response",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#sizesListResponse\"."
-        },
-        "sizes": {
-          "type": "array",
-          "description": "Size collection.",
-          "items": {
-            "$ref": "Size"
-          }
-        }
-      }
-    },
-    "DateRange": {
-      "type": "object",
-      "properties": {
-        "startDate": {
-          "format": "date",
-          "type": "string"
-        },
-        "kind": {
-          "description": "The kind of resource this is, in this case dfareporting#dateRange.",
-          "type": "string"
-        },
-        "relativeDateRange": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "TODAY",
-            "YESTERDAY",
-            "WEEK_TO_DATE",
-            "MONTH_TO_DATE",
-            "QUARTER_TO_DATE",
-            "YEAR_TO_DATE",
-            "PREVIOUS_WEEK",
-            "PREVIOUS_MONTH",
-            "PREVIOUS_QUARTER",
-            "PREVIOUS_YEAR",
-            "LAST_7_DAYS",
-            "LAST_30_DAYS",
-            "LAST_90_DAYS",
-            "LAST_365_DAYS",
-            "LAST_24_MONTHS",
-            "LAST_14_DAYS",
-            "LAST_60_DAYS"
-          ],
-          "description": "The date range relative to the date of when the report is run."
-        },
-        "endDate": {
-          "type": "string",
-          "format": "date"
-        }
-      },
-      "id": "DateRange",
-      "description": "Represents a date range."
-    },
-    "TagSetting": {
-      "description": "Tag Settings",
-      "type": "object",
-      "id": "TagSetting",
-      "properties": {
-        "additionalKeyValues": {
-          "description": "Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field.",
-          "type": "string"
-        },
-        "includeClickThroughUrls": {
-          "description": "Whether static landing page URLs should be included in the tags. This setting applies only to placements.",
-          "type": "boolean"
-        },
-        "includeClickTracking": {
-          "type": "boolean",
-          "description": "Whether click-tracking string should be included in the tags."
-        },
-        "keywordOption": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "description": "Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.",
-          "enum": [
-            "PLACEHOLDER_WITH_LIST_OF_KEYWORDS",
-            "IGNORE",
-            "GENERATE_SEPARATE_TAG_FOR_EACH_KEYWORD"
-          ]
-        }
-      }
-    },
-    "CrossDimensionReachReportCompatibleFields": {
-      "properties": {
-        "breakdown": {
-          "type": "array",
-          "description": "Dimensions which are compatible to be selected in the \"breakdown\" section of the report.",
-          "items": {
-            "$ref": "Dimension"
-          }
-        },
-        "metrics": {
-          "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.",
-          "items": {
-            "$ref": "Metric"
-          },
-          "type": "array"
-        },
-        "dimensionFilters": {
-          "items": {
-            "$ref": "Dimension"
-          },
-          "type": "array",
-          "description": "Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report."
-        },
-        "overlapMetrics": {
-          "description": "Metrics which are compatible to be selected in the \"overlapMetricNames\" section of the report.",
-          "items": {
-            "$ref": "Metric"
-          },
-          "type": "array"
-        },
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#crossDimensionReachReportCompatibleFields."
-        }
-      },
-      "description": "Represents fields that are compatible to be selected for a report of type \"CROSS_DIMENSION_REACH\".",
-      "type": "object",
-      "id": "CrossDimensionReachReportCompatibleFields"
-    },
-    "SiteVideoSettings": {
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#siteVideoSettings\".",
-          "type": "string"
-        },
-        "transcodeSettings": {
-          "description": "Settings for the transcodes of video creatives served to this site. This will act as default for new placements created under this site.",
-          "$ref": "SiteTranscodeSetting"
-        },
-        "companionSettings": {
-          "$ref": "SiteCompanionSetting",
-          "description": "Settings for the companion creatives of video creatives served to this site."
-        },
-        "orientation": {
-          "type": "string",
-          "description": "Orientation of a site template used for video. This will act as default for new placements created under this site.",
-          "enum": [
-            "ANY",
-            "LANDSCAPE",
-            "PORTRAIT"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ]
-        },
-        "skippableSettings": {
-          "description": "Settings for the skippability of video creatives served to this site. This will act as default for new placements created under this site.",
-          "$ref": "SiteSkippableSetting"
-        }
-      },
-      "type": "object",
-      "id": "SiteVideoSettings",
-      "description": "Video Settings"
-    },
-    "OperatingSystem": {
-      "type": "object",
-      "properties": {
-        "mobile": {
-          "description": "Whether this operating system is for mobile.",
-          "type": "boolean"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#operatingSystem\".",
-          "type": "string"
-        },
-        "desktop": {
-          "type": "boolean",
-          "description": "Whether this operating system is for desktop."
-        },
-        "name": {
-          "description": "Name of this operating system.",
-          "type": "string"
-        },
-        "dartId": {
-          "format": "int64",
-          "description": "DART ID of this operating system. This is the ID used for targeting.",
-          "type": "string"
-        }
-      },
-      "description": "Contains information about an operating system that can be targeted by ads.",
-      "id": "OperatingSystem"
-    },
-    "TranscodeSetting": {
-      "properties": {
-        "enabledVideoFormats": {
-          "type": "array",
-          "items": {
-            "type": "integer",
-            "format": "int32"
-          },
-          "description": "Allowlist of video formats to be served to this placement. Set this list to null or empty to serve all video formats."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#transcodeSetting\"."
-        }
-      },
-      "id": "TranscodeSetting",
-      "description": "Transcode Settings",
-      "type": "object"
-    },
-    "VideoFormat": {
-      "type": "object",
-      "description": "Contains information about supported video formats.",
-      "id": "VideoFormat",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#videoFormat\".",
-          "type": "string"
-        },
-        "targetBitRate": {
-          "type": "integer",
-          "description": "The target bit rate of this video format.",
-          "format": "int32"
-        },
-        "fileType": {
-          "enum": [
-            "FLV",
-            "THREEGPP",
-            "MP4",
-            "WEBM",
-            "M3U8"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "File type of the video format."
-        },
-        "id": {
-          "format": "int32",
-          "description": "ID of the video format.",
-          "type": "integer"
-        },
-        "resolution": {
-          "$ref": "Size",
-          "description": "The resolution of this video format."
-        }
-      }
-    },
-    "Browser": {
-      "properties": {
-        "dartId": {
-          "type": "string",
-          "format": "int64",
-          "description": "DART ID of this browser. This is the ID used when generating reports."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#browser\"."
-        },
-        "minorVersion": {
-          "description": "Minor version number (number after first dot on left) of this browser. For example, for Chrome 5.0.375.86 beta, this field should be set to 0. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.",
-          "type": "string"
-        },
-        "browserVersionId": {
-          "description": "ID referring to this grouping of browser and version numbers. This is the ID used for targeting.",
-          "type": "string",
-          "format": "int64"
-        },
-        "majorVersion": {
-          "description": "Major version number (leftmost number) of this browser. For example, for Chrome 5.0.376.86 beta, this field should be set to 5. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of this browser.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Contains information about a browser that can be targeted by ads.",
-      "id": "Browser"
-    },
-    "AdvertisersListResponse": {
-      "description": "Advertiser List Response",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        },
-        "advertisers": {
-          "items": {
-            "$ref": "Advertiser"
-          },
-          "description": "Advertiser collection.",
-          "type": "array"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertisersListResponse\".",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "AdvertisersListResponse"
-    },
-    "UniversalAdId": {
-      "type": "object",
-      "description": "A Universal Ad ID as per the VAST 4.0 spec. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and VPAID.",
-      "id": "UniversalAdId",
-      "properties": {
-        "registry": {
-          "type": "string",
-          "enum": [
-            "OTHER",
-            "AD_ID.ORG",
-            "CLEARCAST",
-            "DCM"
-          ],
-          "description": "Registry used for the Ad ID value.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "value": {
-          "description": "ID value for this creative. Only alphanumeric characters and the following symbols are valid: \"_/\\-\". Maximum length is 64 characters. Read only when registry is DCM.",
-          "type": "string"
-        }
-      }
-    },
-    "Language": {
-      "properties": {
-        "name": {
-          "description": "Name of this language.",
-          "type": "string"
-        },
-        "languageCode": {
-          "type": "string",
-          "description": "Format of language code is an ISO 639 two-letter language code optionally followed by an underscore followed by an ISO 3166 code. Examples are \"en\" for English or \"zh_CN\" for Simplified Chinese."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#language\"."
-        },
-        "id": {
-          "type": "string",
-          "format": "int64",
-          "description": "Language ID of this language. This is the ID used for targeting and generating reports."
-        }
-      },
-      "description": "Contains information about a language that can be targeted by ads.",
-      "type": "object",
-      "id": "Language"
-    },
-    "OrdersListResponse": {
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#ordersListResponse\".",
-          "type": "string"
-        },
-        "orders": {
-          "type": "array",
-          "items": {
-            "$ref": "Order"
-          },
-          "description": "Order collection."
-        }
-      },
-      "id": "OrdersListResponse",
-      "description": "Order List Response",
-      "type": "object"
-    },
-    "AdvertiserGroupsListResponse": {
-      "type": "object",
-      "id": "AdvertiserGroupsListResponse",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiserGroupsListResponse\".",
-          "type": "string"
-        },
-        "advertiserGroups": {
-          "type": "array",
-          "description": "Advertiser group collection.",
-          "items": {
-            "$ref": "AdvertiserGroup"
-          }
-        }
-      },
-      "description": "Advertiser Group List Response"
-    },
-    "AdvertiserGroup": {
-      "id": "AdvertiserGroup",
-      "type": "object",
-      "description": "Groups advertisers together so that reports can be generated for the entire group at once.",
-      "properties": {
-        "accountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Account ID of this advertiser group. This is a read-only field that can be left blank."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiserGroup\"."
-        },
-        "name": {
-          "description": "Name of this advertiser group. This is a required field and must be less than 256 characters long and unique among advertiser groups of the same account.",
-          "type": "string"
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of this advertiser group. This is a read-only, auto-generated field.",
-          "format": "int64"
-        }
-      }
-    },
-    "OrderDocument": {
-      "description": "Contains properties of a Planning order document.",
-      "type": "object",
-      "id": "OrderDocument",
-      "properties": {
-        "lastSentRecipients": {
-          "type": "array",
-          "description": "List of email addresses that received the last sent document.",
-          "items": {
-            "type": "string"
-          }
-        },
-        "effectiveDate": {
-          "type": "string",
-          "format": "date"
-        },
-        "amendedOrderDocumentId": {
-          "description": "The amended order document ID of this order document. An order document can be created by optionally amending another order document so that the change history can be preserved.",
-          "type": "string",
-          "format": "int64"
-        },
-        "approvedByUserProfileIds": {
-          "description": "IDs of users who have approved this order document.",
-          "type": "array",
-          "items": {
-            "type": "string",
-            "format": "int64"
-          }
-        },
-        "orderId": {
-          "description": "ID of the order from which this order document is created.",
-          "type": "string",
-          "format": "int64"
-        },
-        "signed": {
-          "type": "boolean",
-          "description": "Whether this order document has been signed."
-        },
-        "projectId": {
-          "type": "string",
-          "description": "Project ID of this order document.",
-          "format": "int64"
-        },
-        "advertiserId": {
-          "format": "int64",
-          "description": "Advertiser ID of this order document.",
-          "type": "string"
-        },
-        "accountId": {
-          "format": "int64",
-          "description": "Account ID of this order document.",
-          "type": "string"
-        },
-        "type": {
-          "description": "Type of this order document",
-          "type": "string",
-          "enum": [
-            "PLANNING_ORDER_TYPE_INSERTION_ORDER",
-            "PLANNING_ORDER_TYPE_CHANGE_ORDER"
-          ],
-          "enumDescriptions": [
-            "",
-            ""
-          ]
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#orderDocument\"."
-        },
-        "createdInfo": {
-          "description": "Information about the creation of this order document.",
-          "$ref": "LastModifiedInfo"
-        },
-        "subaccountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Subaccount ID of this order document."
-        },
-        "title": {
-          "type": "string",
-          "description": "Title of this order document."
-        },
-        "lastSentTime": {
-          "format": "date-time",
-          "type": "string"
-        },
-        "id": {
-          "description": "ID of this order document.",
-          "format": "int64",
-          "type": "string"
-        },
-        "cancelled": {
-          "type": "boolean",
-          "description": "Whether this order document is cancelled."
-        }
-      }
-    },
-    "SiteCompanionSetting": {
-      "description": "Companion Settings",
-      "type": "object",
-      "id": "SiteCompanionSetting",
-      "properties": {
-        "companionsDisabled": {
-          "description": "Whether companions are disabled for this site template.",
-          "type": "boolean"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#siteCompanionSetting\".",
-          "type": "string"
-        },
-        "imageOnly": {
-          "description": "Whether to serve only static images as companions.",
-          "type": "boolean"
-        },
-        "enabledSizes": {
-          "description": "Allowlist of companion sizes to be served via this site template. Set this list to null or empty to serve all companion sizes.",
-          "items": {
-            "$ref": "Size"
-          },
-          "type": "array"
-        }
-      }
-    },
-    "ConversionStatus": {
-      "id": "ConversionStatus",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionStatus\"."
-        },
-        "errors": {
-          "items": {
-            "$ref": "ConversionError"
-          },
-          "type": "array",
-          "description": "A list of errors related to this conversion."
-        },
-        "conversion": {
-          "description": "The original conversion that was inserted or updated.",
-          "$ref": "Conversion"
-        }
-      },
-      "description": "The original conversion that was inserted or updated and whether there were any errors.",
-      "type": "object"
-    },
-    "MobileApp": {
-      "description": "Contains information about a mobile app. Used as a landing page deep link.",
-      "type": "object",
-      "id": "MobileApp",
-      "properties": {
-        "publisherName": {
-          "type": "string",
-          "description": "Publisher name."
-        },
-        "title": {
-          "type": "string",
-          "description": "Title of this mobile app."
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of this mobile app."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#mobileApp\"."
-        },
-        "directory": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "UNKNOWN",
-            "APPLE_APP_STORE",
-            "GOOGLE_PLAY_STORE"
-          ],
-          "description": "Mobile app directory."
-        }
-      }
-    },
-    "CustomViewabilityMetricConfiguration": {
-      "type": "object",
-      "id": "CustomViewabilityMetricConfiguration",
-      "properties": {
-        "audible": {
-          "description": "Whether the video must be audible to count an impression.",
-          "type": "boolean"
-        },
-        "timeMillis": {
-          "format": "int32",
-          "description": "The time in milliseconds the video must play for the Custom Viewability Metric to count an impression. If both this and timePercent are specified, the earlier of the two will be used.",
-          "type": "integer"
-        },
-        "timePercent": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The percentage of video that must play for the Custom Viewability Metric to count an impression. If both this and timeMillis are specified, the earlier of the two will be used."
-        },
-        "viewabilityPercent": {
-          "type": "integer",
-          "description": "The percentage of video that must be on screen for the Custom Viewability Metric to count an impression.",
-          "format": "int32"
-        }
-      },
-      "description": "The attributes, like playtime and percent onscreen, that define the Custom Viewability Metric."
-    },
-    "LanguageTargeting": {
-      "description": "Language Targeting.",
-      "type": "object",
-      "id": "LanguageTargeting",
-      "properties": {
-        "languages": {
-          "description": "Languages that this ad targets. For each language only languageId is required. The other fields are populated automatically when the ad is inserted or updated.",
-          "type": "array",
-          "items": {
-            "$ref": "Language"
-          }
-        }
-      }
-    },
-    "OptimizationActivity": {
-      "type": "object",
-      "properties": {
-        "floodlightActivityIdDimensionValue": {
-          "description": "Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "floodlightActivityId": {
-          "format": "int64",
-          "description": "Floodlight activity ID of this optimization activity. This is a required field.",
-          "type": "string"
-        },
-        "weight": {
-          "description": "Weight associated with this optimization. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities. Value must be greater than or equal to 1.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "description": "Creative optimization activity.",
-      "id": "OptimizationActivity"
-    },
-    "CompanionClickThroughOverride": {
-      "type": "object",
-      "id": "CompanionClickThroughOverride",
-      "description": "Companion Click-through override.",
-      "properties": {
-        "clickThroughUrl": {
-          "description": "Click-through URL of this companion click-through override.",
-          "$ref": "ClickThroughUrl"
-        },
-        "creativeId": {
-          "format": "int64",
-          "description": "ID of the creative for this companion click-through override.",
-          "type": "string"
-        }
-      }
-    },
-    "ContentCategory": {
-      "description": "Organizes placements according to the contents of their associated webpages.",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "Name of this content category. This is a required field and must be less than 256 characters long and unique among content categories of the same account.",
-          "type": "string"
-        },
-        "id": {
-          "description": "ID of this content category. This is a read-only, auto-generated field.",
-          "type": "string",
-          "format": "int64"
-        },
-        "accountId": {
-          "type": "string",
-          "description": "Account ID of this content category. This is a read-only field that can be left blank.",
-          "format": "int64"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#contentCategory\".",
-          "type": "string"
-        }
-      },
-      "id": "ContentCategory"
-    },
-    "BrowsersListResponse": {
-      "id": "BrowsersListResponse",
-      "description": "Browser List Response",
-      "type": "object",
-      "properties": {
-        "browsers": {
-          "items": {
-            "$ref": "Browser"
-          },
-          "type": "array",
-          "description": "Browser collection."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#browsersListResponse\".",
-          "type": "string"
-        }
-      }
-    },
-    "DimensionFilter": {
-      "id": "DimensionFilter",
-      "properties": {
-        "value": {
-          "description": "The value of the dimension to filter.",
-          "type": "string"
-        },
-        "dimensionName": {
-          "type": "string",
-          "description": "The name of the dimension to filter."
-        },
-        "kind": {
-          "description": "The kind of resource this is, in this case dfareporting#dimensionFilter.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Represents a dimension filter."
-    },
-    "ReachReportCompatibleFields": {
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#reachReportCompatibleFields."
-        },
-        "metrics": {
-          "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.",
-          "type": "array",
-          "items": {
-            "$ref": "Metric"
-          }
-        },
-        "pivotedActivityMetrics": {
-          "type": "array",
-          "items": {
-            "$ref": "Metric"
-          },
-          "description": "Metrics which are compatible to be selected as activity metrics to pivot on in the \"activities\" section of the report."
-        },
-        "dimensionFilters": {
-          "type": "array",
-          "description": "Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.",
-          "items": {
-            "$ref": "Dimension"
-          }
-        },
-        "dimensions": {
-          "description": "Dimensions which are compatible to be selected in the \"dimensions\" section of the report.",
-          "items": {
-            "$ref": "Dimension"
-          },
-          "type": "array"
-        },
-        "reachByFrequencyMetrics": {
-          "type": "array",
-          "items": {
-            "$ref": "Metric"
-          },
-          "description": "Metrics which are compatible to be selected in the \"reachByFrequencyMetricNames\" section of the report."
-        }
-      },
-      "id": "ReachReportCompatibleFields",
-      "type": "object",
-      "description": "Represents fields that are compatible to be selected for a report of type \"REACH\"."
-    },
-    "AccountsListResponse": {
-      "id": "AccountsListResponse",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountsListResponse\".",
-          "type": "string"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
+        "accountUserProfiles": {
+            "methods": {
+                "get": {
+                    "description": "Gets one account user profile by ID.",
+                    "flatPath": "userprofiles/{profileId}/accountUserProfiles/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.accountUserProfiles.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "User profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accountUserProfiles/{id}",
+                    "response": {
+                        "$ref": "AccountUserProfile"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new account user profile.",
+                    "flatPath": "userprofiles/{profileId}/accountUserProfiles",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.accountUserProfiles.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accountUserProfiles",
+                    "request": {
+                        "$ref": "AccountUserProfile"
+                    },
+                    "response": {
+                        "$ref": "AccountUserProfile"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of account user profiles, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/accountUserProfiles",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.accountUserProfiles.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "active": {
+                            "description": "Select only active user profiles.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ids": {
+                            "description": "Select only user profiles with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name, ID or email. Wildcards (*) are allowed. For example, \"user profile*2015\" will return objects with names like \"user profile June 2015\", \"user profile April 2015\", or simply \"user profile 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"user profile\" will match objects with name \"my user profile\", \"user profile 2015\", or simply \"user profile\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "subaccountId": {
+                            "description": "Select only user profiles with the specified subaccount ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "userRoleId": {
+                            "description": "Select only user profiles with the specified user role ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accountUserProfiles",
+                    "response": {
+                        "$ref": "AccountUserProfilesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing account user profile. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/accountUserProfiles",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.accountUserProfiles.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "AccountUserProfile ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accountUserProfiles",
+                    "request": {
+                        "$ref": "AccountUserProfile"
+                    },
+                    "response": {
+                        "$ref": "AccountUserProfile"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing account user profile.",
+                    "flatPath": "userprofiles/{profileId}/accountUserProfiles",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.accountUserProfiles.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accountUserProfiles",
+                    "request": {
+                        "$ref": "AccountUserProfile"
+                    },
+                    "response": {
+                        "$ref": "AccountUserProfile"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
         "accounts": {
-          "description": "Account collection.",
-          "type": "array",
-          "items": {
-            "$ref": "Account"
-          }
-        }
-      },
-      "description": "Account List Response",
-      "type": "object"
-    },
-    "CreativeAssetId": {
-      "type": "object",
-      "description": "Creative Asset ID.",
-      "properties": {
-        "type": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "Type of asset to upload. This is a required field. FLASH and IMAGE are no longer supported for new uploads. All image assets should use HTML_IMAGE.",
-          "type": "string",
-          "enum": [
-            "IMAGE",
-            "FLASH",
-            "VIDEO",
-            "HTML",
-            "HTML_IMAGE",
-            "AUDIO"
-          ]
+            "methods": {
+                "get": {
+                    "description": "Gets one account by ID.",
+                    "flatPath": "userprofiles/{profileId}/accounts/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.accounts.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Account ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accounts/{id}",
+                    "response": {
+                        "$ref": "Account"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves the list of accounts, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/accounts",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.accounts.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "active": {
+                            "description": "Select only active accounts. Don't set this field to select both active and non-active accounts.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ids": {
+                            "description": "Select only accounts with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"account*2015\" will return objects with names like \"account June 2015\", \"account April 2015\", or simply \"account 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"account\" will match objects with name \"my account\", \"account 2015\", or simply \"account\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accounts",
+                    "response": {
+                        "$ref": "AccountsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing account. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/accounts",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.accounts.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Account ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accounts",
+                    "request": {
+                        "$ref": "Account"
+                    },
+                    "response": {
+                        "$ref": "Account"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing account.",
+                    "flatPath": "userprofiles/{profileId}/accounts",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.accounts.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accounts",
+                    "request": {
+                        "$ref": "Account"
+                    },
+                    "response": {
+                        "$ref": "Account"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "name": {
-          "description": "Name of the creative asset. This is a required field while inserting an asset. After insertion, this assetIdentifier is used to identify the uploaded asset. Characters in the name must be alphanumeric or one of the following: \".-_ \". Spaces are allowed.",
-          "type": "string"
-        }
-      },
-      "id": "CreativeAssetId"
-    },
-    "ListPopulationTerm": {
-      "properties": {
-        "negation": {
-          "type": "boolean",
-          "description": "Whether to negate the comparison result of this term during rule evaluation. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM."
+        "ads": {
+            "methods": {
+                "get": {
+                    "description": "Gets one ad by ID.",
+                    "flatPath": "userprofiles/{profileId}/ads/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.ads.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Ad ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/ads/{id}",
+                    "response": {
+                        "$ref": "Ad"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new ad.",
+                    "flatPath": "userprofiles/{profileId}/ads",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.ads.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/ads",
+                    "request": {
+                        "$ref": "Ad"
+                    },
+                    "response": {
+                        "$ref": "Ad"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of ads, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/ads",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.ads.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "active": {
+                            "description": "Select only active ads.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "advertiserId": {
+                            "description": "Select only ads with this advertiser ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "archived": {
+                            "description": "Select only archived ads.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "audienceSegmentIds": {
+                            "description": "Select only ads with these audience segment IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "campaignIds": {
+                            "description": "Select only ads with these campaign IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "compatibility": {
+                            "description": "Select default ads with the specified compatibility. Applicable when type is AD_SERVING_DEFAULT_AD. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are for rendering in mobile apps. IN_STREAM_VIDEO refers to rendering an in-stream video ads developed with the VAST standard.",
+                            "enum": [
+                                "DISPLAY",
+                                "DISPLAY_INTERSTITIAL",
+                                "APP",
+                                "APP_INTERSTITIAL",
+                                "IN_STREAM_VIDEO",
+                                "IN_STREAM_AUDIO"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "creativeIds": {
+                            "description": "Select only ads with these creative IDs assigned.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "creativeOptimizationConfigurationIds": {
+                            "description": "Select only ads with these creative optimization configuration IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "dynamicClickTracker": {
+                            "description": "Select only dynamic click trackers. Applicable when type is AD_SERVING_CLICK_TRACKER. If true, select dynamic click trackers. If false, select static click trackers. Leave unset to select both.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ids": {
+                            "description": "Select only ads with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "landingPageIds": {
+                            "description": "Select only ads with these landing page IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "overriddenEventTagId": {
+                            "description": "Select only ads with this event tag override ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "placementIds": {
+                            "description": "Select only ads with these placement IDs assigned.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "remarketingListIds": {
+                            "description": "Select only ads whose list targeting expression use these remarketing list IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"ad*2015\" will return objects with names like \"ad June 2015\", \"ad April 2015\", or simply \"ad 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"ad\" will match objects with name \"my ad\", \"ad 2015\", or simply \"ad\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sizeIds": {
+                            "description": "Select only ads with these size IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sslCompliant": {
+                            "description": "Select only ads that are SSL-compliant.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "sslRequired": {
+                            "description": "Select only ads that require SSL.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "type": {
+                            "description": "Select only ads with these types.",
+                            "enum": [
+                                "AD_SERVING_STANDARD_AD",
+                                "AD_SERVING_DEFAULT_AD",
+                                "AD_SERVING_CLICK_TRACKER",
+                                "AD_SERVING_TRACKING",
+                                "AD_SERVING_BRAND_SAFE_AD"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/ads",
+                    "response": {
+                        "$ref": "AdsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing ad. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/ads",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.ads.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Ad ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/ads",
+                    "request": {
+                        "$ref": "Ad"
+                    },
+                    "response": {
+                        "$ref": "Ad"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing ad.",
+                    "flatPath": "userprofiles/{profileId}/ads",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.ads.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/ads",
+                    "request": {
+                        "$ref": "Ad"
+                    },
+                    "response": {
+                        "$ref": "Ad"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "contains": {
-          "description": "Will be true if the term should check if the user is in the list and false if the term should check if the user is not in the list. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM. False by default.",
-          "type": "boolean"
+        "advertiserGroups": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes an existing advertiser group.",
+                    "flatPath": "userprofiles/{profileId}/advertiserGroups/{id}",
+                    "httpMethod": "DELETE",
+                    "id": "dfareporting.advertiserGroups.delete",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Advertiser group ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserGroups/{id}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "get": {
+                    "description": "Gets one advertiser group by ID.",
+                    "flatPath": "userprofiles/{profileId}/advertiserGroups/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.advertiserGroups.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Advertiser group ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserGroups/{id}",
+                    "response": {
+                        "$ref": "AdvertiserGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new advertiser group.",
+                    "flatPath": "userprofiles/{profileId}/advertiserGroups",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.advertiserGroups.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserGroups",
+                    "request": {
+                        "$ref": "AdvertiserGroup"
+                    },
+                    "response": {
+                        "$ref": "AdvertiserGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of advertiser groups, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/advertiserGroups",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.advertiserGroups.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "ids": {
+                            "description": "Select only advertiser groups with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"advertiser*2015\" will return objects with names like \"advertiser group June 2015\", \"advertiser group April 2015\", or simply \"advertiser group 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"advertisergroup\" will match objects with name \"my advertisergroup\", \"advertisergroup 2015\", or simply \"advertisergroup\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserGroups",
+                    "response": {
+                        "$ref": "AdvertiserGroupsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing advertiser group. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/advertiserGroups",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.advertiserGroups.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "AdvertiserGroup ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserGroups",
+                    "request": {
+                        "$ref": "AdvertiserGroup"
+                    },
+                    "response": {
+                        "$ref": "AdvertiserGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing advertiser group.",
+                    "flatPath": "userprofiles/{profileId}/advertiserGroups",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.advertiserGroups.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserGroups",
+                    "request": {
+                        "$ref": "AdvertiserGroup"
+                    },
+                    "response": {
+                        "$ref": "AdvertiserGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "variableFriendlyName": {
-          "description": "Friendly name of this term's variable. This is a read-only, auto-generated field. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM.",
-          "type": "string"
+        "advertiserLandingPages": {
+            "methods": {
+                "get": {
+                    "description": "Gets one landing page by ID.",
+                    "flatPath": "userprofiles/{profileId}/advertiserLandingPages/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.advertiserLandingPages.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Landing page ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserLandingPages/{id}",
+                    "response": {
+                        "$ref": "LandingPage"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new landing page.",
+                    "flatPath": "userprofiles/{profileId}/advertiserLandingPages",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.advertiserLandingPages.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserLandingPages",
+                    "request": {
+                        "$ref": "LandingPage"
+                    },
+                    "response": {
+                        "$ref": "LandingPage"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of landing pages.",
+                    "flatPath": "userprofiles/{profileId}/advertiserLandingPages",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.advertiserLandingPages.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserIds": {
+                            "description": "Select only landing pages that belong to these advertisers.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "archived": {
+                            "description": "Select only archived landing pages. Don't set this field to select both archived and non-archived landing pages.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "campaignIds": {
+                            "description": "Select only landing pages that are associated with these campaigns.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only landing pages with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for landing pages by name or ID. Wildcards (*) are allowed. For example, \"landingpage*2017\" will return landing pages with names like \"landingpage July 2017\", \"landingpage March 2017\", or simply \"landingpage 2017\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"landingpage\" will match campaigns with name \"my landingpage\", \"landingpage 2015\", or simply \"landingpage\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "subaccountId": {
+                            "description": "Select only landing pages that belong to this subaccount.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserLandingPages",
+                    "response": {
+                        "$ref": "AdvertiserLandingPagesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing advertiser landing page. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/advertiserLandingPages",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.advertiserLandingPages.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "LandingPage ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserLandingPages",
+                    "request": {
+                        "$ref": "LandingPage"
+                    },
+                    "response": {
+                        "$ref": "LandingPage"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing landing page.",
+                    "flatPath": "userprofiles/{profileId}/advertiserLandingPages",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.advertiserLandingPages.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserLandingPages",
+                    "request": {
+                        "$ref": "LandingPage"
+                    },
+                    "response": {
+                        "$ref": "LandingPage"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "variableName": {
-          "description": "Name of the variable (U1, U2, etc.) being compared in this term. This field is only relevant when type is set to null, CUSTOM_VARIABLE_TERM or REFERRER_TERM.",
-          "type": "string"
+        "advertisers": {
+            "methods": {
+                "get": {
+                    "description": "Gets one advertiser by ID.",
+                    "flatPath": "userprofiles/{profileId}/advertisers/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.advertisers.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Advertiser ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertisers/{id}",
+                    "response": {
+                        "$ref": "Advertiser"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new advertiser.",
+                    "flatPath": "userprofiles/{profileId}/advertisers",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.advertisers.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertisers",
+                    "request": {
+                        "$ref": "Advertiser"
+                    },
+                    "response": {
+                        "$ref": "Advertiser"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of advertisers, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/advertisers",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.advertisers.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserGroupIds": {
+                            "description": "Select only advertisers with these advertiser group IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "floodlightConfigurationIds": {
+                            "description": "Select only advertisers with these floodlight configuration IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only advertisers with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "includeAdvertisersWithoutGroupsOnly": {
+                            "description": "Select only advertisers which do not belong to any advertiser group.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "onlyParent": {
+                            "description": "Select only advertisers which use another advertiser's floodlight configuration.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"advertiser*2015\" will return objects with names like \"advertiser June 2015\", \"advertiser April 2015\", or simply \"advertiser 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"advertiser\" will match objects with name \"my advertiser\", \"advertiser 2015\", or simply \"advertiser\" .",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "status": {
+                            "description": "Select only advertisers with the specified status.",
+                            "enum": [
+                                "APPROVED",
+                                "ON_HOLD"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "subaccountId": {
+                            "description": "Select only advertisers with these subaccount IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertisers",
+                    "response": {
+                        "$ref": "AdvertisersListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing advertiser. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/advertisers",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.advertisers.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Advertiser ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertisers",
+                    "request": {
+                        "$ref": "Advertiser"
+                    },
+                    "response": {
+                        "$ref": "Advertiser"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing advertiser.",
+                    "flatPath": "userprofiles/{profileId}/advertisers",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.advertisers.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertisers",
+                    "request": {
+                        "$ref": "Advertiser"
+                    },
+                    "response": {
+                        "$ref": "Advertiser"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "value": {
-          "type": "string",
-          "description": "Literal to compare the variable to. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM."
+        "browsers": {
+            "methods": {
+                "list": {
+                    "description": "Retrieves a list of browsers.",
+                    "flatPath": "userprofiles/{profileId}/browsers",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.browsers.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/browsers",
+                    "response": {
+                        "$ref": "BrowsersListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "remarketingListId": {
-          "format": "int64",
-          "description": "ID of the list in question. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM.",
-          "type": "string"
+        "campaignCreativeAssociations": {
+            "methods": {
+                "insert": {
+                    "description": "Associates a creative with the specified campaign. This method creates a default ad with dimensions matching the creative in the campaign if such a default ad does not exist already.",
+                    "flatPath": "userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.campaignCreativeAssociations.insert",
+                    "parameterOrder": [
+                        "profileId",
+                        "campaignId"
+                    ],
+                    "parameters": {
+                        "campaignId": {
+                            "description": "Campaign ID in this association.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations",
+                    "request": {
+                        "$ref": "CampaignCreativeAssociation"
+                    },
+                    "response": {
+                        "$ref": "CampaignCreativeAssociation"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves the list of creative IDs associated with the specified campaign. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.campaignCreativeAssociations.list",
+                    "parameterOrder": [
+                        "profileId",
+                        "campaignId"
+                    ],
+                    "parameters": {
+                        "campaignId": {
+                            "description": "Campaign ID in this association.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations",
+                    "response": {
+                        "$ref": "CampaignCreativeAssociationsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "type": {
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "List population term type determines the applicable fields in this object. If left unset or set to CUSTOM_VARIABLE_TERM, then variableName, variableFriendlyName, operator, value, and negation are applicable. If set to LIST_MEMBERSHIP_TERM then remarketingListId and contains are applicable. If set to REFERRER_TERM then operator, value, and negation are applicable.",
-          "enum": [
-            "CUSTOM_VARIABLE_TERM",
-            "LIST_MEMBERSHIP_TERM",
-            "REFERRER_TERM"
-          ]
-        },
-        "operator": {
-          "type": "string",
-          "enum": [
-            "NUM_EQUALS",
-            "NUM_LESS_THAN",
-            "NUM_LESS_THAN_EQUAL",
-            "NUM_GREATER_THAN",
-            "NUM_GREATER_THAN_EQUAL",
-            "STRING_EQUALS",
-            "STRING_CONTAINS"
-          ],
-          "description": "Comparison operator of this term. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        }
-      },
-      "id": "ListPopulationTerm",
-      "description": "Remarketing List Population Rule Term.",
-      "type": "object"
-    },
-    "CampaignsListResponse": {
-      "description": "Campaign List Response",
-      "type": "object",
-      "id": "CampaignsListResponse",
-      "properties": {
         "campaigns": {
-          "type": "array",
-          "items": {
-            "$ref": "Campaign"
-          },
-          "description": "Campaign collection."
+            "methods": {
+                "get": {
+                    "description": "Gets one campaign by ID.",
+                    "flatPath": "userprofiles/{profileId}/campaigns/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.campaigns.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Campaign ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/campaigns/{id}",
+                    "response": {
+                        "$ref": "Campaign"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new campaign.",
+                    "flatPath": "userprofiles/{profileId}/campaigns",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.campaigns.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/campaigns",
+                    "request": {
+                        "$ref": "Campaign"
+                    },
+                    "response": {
+                        "$ref": "Campaign"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of campaigns, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/campaigns",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.campaigns.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserGroupIds": {
+                            "description": "Select only campaigns whose advertisers belong to these advertiser groups.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "advertiserIds": {
+                            "description": "Select only campaigns that belong to these advertisers.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "archived": {
+                            "description": "Select only archived campaigns. Don't set this field to select both archived and non-archived campaigns.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "atLeastOneOptimizationActivity": {
+                            "description": "Select only campaigns that have at least one optimization activity.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "excludedIds": {
+                            "description": "Exclude campaigns with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only campaigns with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "overriddenEventTagId": {
+                            "description": "Select only campaigns that have overridden this event tag ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for campaigns by name or ID. Wildcards (*) are allowed. For example, \"campaign*2015\" will return campaigns with names like \"campaign June 2015\", \"campaign April 2015\", or simply \"campaign 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"campaign\" will match campaigns with name \"my campaign\", \"campaign 2015\", or simply \"campaign\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "subaccountId": {
+                            "description": "Select only campaigns that belong to this subaccount.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/campaigns",
+                    "response": {
+                        "$ref": "CampaignsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing campaign. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/campaigns",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.campaigns.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Campaign ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/campaigns",
+                    "request": {
+                        "$ref": "Campaign"
+                    },
+                    "response": {
+                        "$ref": "Campaign"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing campaign.",
+                    "flatPath": "userprofiles/{profileId}/campaigns",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.campaigns.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/campaigns",
+                    "request": {
+                        "$ref": "Campaign"
+                    },
+                    "response": {
+                        "$ref": "Campaign"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaignsListResponse\".",
-          "type": "string"
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        }
-      }
-    },
-    "ChangeLogsListResponse": {
-      "properties": {
         "changeLogs": {
-          "description": "Change log collection.",
-          "items": {
-            "$ref": "ChangeLog"
-          },
-          "type": "array"
+            "methods": {
+                "get": {
+                    "description": "Gets one change log by ID.",
+                    "flatPath": "userprofiles/{profileId}/changeLogs/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.changeLogs.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Change log ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/changeLogs/{id}",
+                    "response": {
+                        "$ref": "ChangeLog"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of change logs. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/changeLogs",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.changeLogs.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "action": {
+                            "description": "Select only change logs with the specified action.",
+                            "enum": [
+                                "ACTION_CREATE",
+                                "ACTION_UPDATE",
+                                "ACTION_DELETE",
+                                "ACTION_ENABLE",
+                                "ACTION_DISABLE",
+                                "ACTION_ADD",
+                                "ACTION_REMOVE",
+                                "ACTION_MARK_AS_DEFAULT",
+                                "ACTION_ASSOCIATE",
+                                "ACTION_ASSIGN",
+                                "ACTION_UNASSIGN",
+                                "ACTION_SEND",
+                                "ACTION_LINK",
+                                "ACTION_UNLINK",
+                                "ACTION_PUSH",
+                                "ACTION_EMAIL_TAGS",
+                                "ACTION_SHARE"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only change logs with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxChangeTime": {
+                            "description": "Select only change logs whose change time is before the specified maxChangeTime.The time should be formatted as an RFC3339 date/time string. For example, for 10:54 PM on July 18th, 2015, in the America/New York time zone, the format is \"2015-07-18T22:54:00-04:00\". In other words, the year, month, day, the letter T, the hour (24-hour clock system), minute, second, and then the time zone offset.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "minChangeTime": {
+                            "description": "Select only change logs whose change time is after the specified minChangeTime.The time should be formatted as an RFC3339 date/time string. For example, for 10:54 PM on July 18th, 2015, in the America/New York time zone, the format is \"2015-07-18T22:54:00-04:00\". In other words, the year, month, day, the letter T, the hour (24-hour clock system), minute, second, and then the time zone offset.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "objectIds": {
+                            "description": "Select only change logs with these object IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "objectType": {
+                            "description": "Select only change logs with the specified object type.",
+                            "enum": [
+                                "OBJECT_ADVERTISER",
+                                "OBJECT_FLOODLIGHT_CONFIGURATION",
+                                "OBJECT_AD",
+                                "OBJECT_FLOODLIGHT_ACTVITY",
+                                "OBJECT_CAMPAIGN",
+                                "OBJECT_FLOODLIGHT_ACTIVITY_GROUP",
+                                "OBJECT_CREATIVE",
+                                "OBJECT_PLACEMENT",
+                                "OBJECT_DFA_SITE",
+                                "OBJECT_USER_ROLE",
+                                "OBJECT_USER_PROFILE",
+                                "OBJECT_ADVERTISER_GROUP",
+                                "OBJECT_ACCOUNT",
+                                "OBJECT_SUBACCOUNT",
+                                "OBJECT_RICHMEDIA_CREATIVE",
+                                "OBJECT_INSTREAM_CREATIVE",
+                                "OBJECT_MEDIA_ORDER",
+                                "OBJECT_CONTENT_CATEGORY",
+                                "OBJECT_PLACEMENT_STRATEGY",
+                                "OBJECT_SD_SITE",
+                                "OBJECT_SIZE",
+                                "OBJECT_CREATIVE_GROUP",
+                                "OBJECT_CREATIVE_ASSET",
+                                "OBJECT_USER_PROFILE_FILTER",
+                                "OBJECT_LANDING_PAGE",
+                                "OBJECT_CREATIVE_FIELD",
+                                "OBJECT_REMARKETING_LIST",
+                                "OBJECT_PROVIDED_LIST_CLIENT",
+                                "OBJECT_EVENT_TAG",
+                                "OBJECT_CREATIVE_BUNDLE",
+                                "OBJECT_BILLING_ACCOUNT_GROUP",
+                                "OBJECT_BILLING_FEATURE",
+                                "OBJECT_RATE_CARD",
+                                "OBJECT_ACCOUNT_BILLING_FEATURE",
+                                "OBJECT_BILLING_MINIMUM_FEE",
+                                "OBJECT_BILLING_PROFILE",
+                                "OBJECT_PLAYSTORE_LINK",
+                                "OBJECT_TARGETING_TEMPLATE",
+                                "OBJECT_SEARCH_LIFT_STUDY",
+                                "OBJECT_FLOODLIGHT_DV360_LINK"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Select only change logs whose object ID, user name, old or new values match the search string.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "userProfileIds": {
+                            "description": "Select only change logs with these user profile IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/changeLogs",
+                    "response": {
+                        "$ref": "ChangeLogsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
+        "cities": {
+            "methods": {
+                "list": {
+                    "description": "Retrieves a list of cities, possibly filtered.",
+                    "flatPath": "userprofiles/{profileId}/cities",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.cities.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "countryDartIds": {
+                            "description": "Select only cities from these countries.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "dartIds": {
+                            "description": "Select only cities with these DART IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "namePrefix": {
+                            "description": "Select only cities with names starting with this prefix.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "regionDartIds": {
+                            "description": "Select only cities from these regions.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/cities",
+                    "response": {
+                        "$ref": "CitiesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#changeLogsListResponse\".",
-          "type": "string"
-        }
-      },
-      "description": "Change Log List Response",
-      "id": "ChangeLogsListResponse",
-      "type": "object"
-    },
-    "ListTargetingExpression": {
-      "id": "ListTargetingExpression",
-      "description": "Remarketing List Targeting Expression.",
-      "properties": {
-        "expression": {
-          "description": "Expression describing which lists are being targeted by the ad.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "CreativeGroup": {
-      "id": "CreativeGroup",
-      "properties": {
-        "advertiserId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Advertiser ID of this creative group. This is a required field on insertion."
-        },
-        "advertiserIdDimensionValue": {
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "accountId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Account ID of this creative group. This is a read-only field that can be left blank."
-        },
-        "subaccountId": {
-          "type": "string",
-          "description": "Subaccount ID of this creative group. This is a read-only field that can be left blank.",
-          "format": "int64"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this creative group. This is a required field and must be less than 256 characters long and unique among creative groups of the same advertiser."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeGroup\".",
-          "type": "string"
-        },
-        "id": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID of this creative group. This is a read-only, auto-generated field."
-        },
-        "groupNumber": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Subgroup of the creative group. Assign your creative groups to a subgroup in order to filter or manage them more easily. This field is required on insertion and is read-only after insertion. Acceptable values are 1 to 2, inclusive."
-        }
-      },
-      "type": "object",
-      "description": "Contains properties of a creative group."
-    },
-    "CreativeFieldsListResponse": {
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeFieldsListResponse\".",
-          "type": "string"
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        },
-        "creativeFields": {
-          "items": {
-            "$ref": "CreativeField"
-          },
-          "type": "array",
-          "description": "Creative field collection."
-        }
-      },
-      "type": "object",
-      "id": "CreativeFieldsListResponse",
-      "description": "Creative Field List Response"
-    },
-    "PlacementsListResponse": {
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementsListResponse\"."
-        },
-        "placements": {
-          "description": "Placement collection.",
-          "items": {
-            "$ref": "Placement"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        }
-      },
-      "id": "PlacementsListResponse",
-      "type": "object",
-      "description": "Placement List Response"
-    },
-    "Region": {
-      "properties": {
-        "regionCode": {
-          "type": "string",
-          "description": "Region code."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#region\"."
-        },
-        "dartId": {
-          "type": "string",
-          "format": "int64",
-          "description": "DART ID of this region."
-        },
-        "countryDartId": {
-          "format": "int64",
-          "type": "string",
-          "description": "DART ID of the country to which this region belongs."
-        },
-        "countryCode": {
-          "type": "string",
-          "description": "Country code of the country to which this region belongs."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this region."
-        }
-      },
-      "description": "Contains information about a region that can be targeted by ads.",
-      "type": "object",
-      "id": "Region"
-    },
-    "UserRolePermissionsListResponse": {
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolePermissionsListResponse\"."
-        },
-        "userRolePermissions": {
-          "items": {
-            "$ref": "UserRolePermission"
-          },
-          "type": "array",
-          "description": "User role permission collection."
-        }
-      },
-      "description": "User Role Permission List Response",
-      "type": "object",
-      "id": "UserRolePermissionsListResponse"
-    },
-    "SubaccountsListResponse": {
-      "type": "object",
-      "description": "Subaccount List Response",
-      "properties": {
-        "subaccounts": {
-          "description": "Subaccount collection.",
-          "items": {
-            "$ref": "Subaccount"
-          },
-          "type": "array"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#subaccountsListResponse\".",
-          "type": "string"
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        }
-      },
-      "id": "SubaccountsListResponse"
-    },
-    "CreativeAssignment": {
-      "type": "object",
-      "id": "CreativeAssignment",
-      "properties": {
-        "sslCompliant": {
-          "description": "Whether the creative to be assigned is SSL-compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.",
-          "type": "boolean"
-        },
-        "active": {
-          "description": "Whether this creative assignment is active. When true, the creative will be included in the ad's rotation.",
-          "type": "boolean"
-        },
-        "creativeGroupAssignments": {
-          "description": "Creative group assignments for this creative assignment. Only one assignment per creative group number is allowed for a maximum of two assignments.",
-          "items": {
-            "$ref": "CreativeGroupAssignment"
-          },
-          "type": "array"
-        },
-        "clickThroughUrl": {
-          "$ref": "ClickThroughUrl",
-          "description": "Click-through URL of the creative assignment."
-        },
-        "startTime": {
-          "type": "string",
-          "format": "date-time"
-        },
-        "companionCreativeOverrides": {
-          "type": "array",
-          "items": {
-            "$ref": "CompanionClickThroughOverride"
-          },
-          "description": "Companion creative overrides for this creative assignment. Applicable to video ads."
-        },
-        "sequence": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Sequence number of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_SEQUENTIAL. Acceptable values are 1 to 65535, inclusive."
-        },
-        "applyEventTags": {
-          "description": "Whether applicable event tags should fire when this creative assignment is rendered. If this value is unset when the ad is inserted or updated, it will default to true for all creative types EXCEPT for INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO.",
-          "type": "boolean"
-        },
-        "weight": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Weight of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_RANDOM. Value must be greater than or equal to 1."
-        },
-        "endTime": {
-          "type": "string",
-          "format": "date-time"
-        },
-        "creativeIdDimensionValue": {
-          "description": "Dimension value for the ID of the creative. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "creativeId": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID of the creative to be assigned. This is a required field."
-        },
-        "richMediaExitOverrides": {
-          "items": {
-            "$ref": "RichMediaExitOverride"
-          },
-          "type": "array",
-          "description": "Rich media exit overrides for this creative assignment. Applicable when the creative type is any of the following: - DISPLAY - RICH_MEDIA_INPAGE - RICH_MEDIA_INPAGE_FLOATING - RICH_MEDIA_IM_EXPAND - RICH_MEDIA_EXPANDING - RICH_MEDIA_INTERSTITIAL_FLOAT - RICH_MEDIA_MOBILE_IN_APP - RICH_MEDIA_MULTI_FLOATING - RICH_MEDIA_PEEL_DOWN - VPAID_LINEAR - VPAID_NON_LINEAR "
-        }
-      },
-      "description": "Creative Assignment."
-    },
-    "ContentCategoriesListResponse": {
-      "description": "Content Category List Response",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
+        "connectionTypes": {
+            "methods": {
+                "get": {
+                    "description": "Gets one connection type by ID.",
+                    "flatPath": "userprofiles/{profileId}/connectionTypes/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.connectionTypes.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Connection type ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/connectionTypes/{id}",
+                    "response": {
+                        "$ref": "ConnectionType"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of connection types.",
+                    "flatPath": "userprofiles/{profileId}/connectionTypes",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.connectionTypes.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/connectionTypes",
+                    "response": {
+                        "$ref": "ConnectionTypesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
         "contentCategories": {
-          "type": "array",
-          "description": "Content category collection.",
-          "items": {
-            "$ref": "ContentCategory"
-          }
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#contentCategoriesListResponse\"."
-        }
-      },
-      "id": "ContentCategoriesListResponse",
-      "type": "object"
-    },
-    "AudienceSegment": {
-      "id": "AudienceSegment",
-      "properties": {
-        "id": {
-          "description": "ID of this audience segment. This is a read-only, auto-generated field.",
-          "type": "string",
-          "format": "int64"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this audience segment. This is a required field and must be less than 65 characters long."
-        },
-        "allocation": {
-          "format": "int32",
-          "description": "Weight allocated to this segment. The weight assigned will be understood in proportion to the weights assigned to other segments in the same segment group. Acceptable values are 1 to 1000, inclusive.",
-          "type": "integer"
-        }
-      },
-      "description": "Audience Segment.",
-      "type": "object"
-    }
-  },
-  "revision": "20201102",
-  "basePath": "/dfareporting/v3.3/",
-  "documentationLink": "https://developers.google.com/doubleclick-advertisers/",
-  "name": "dfareporting",
-  "batchPath": "batch",
-  "rootUrl": "https://dfareporting.googleapis.com/",
-  "version": "v3.3",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "mtlsRootUrl": "https://dfareporting.mtls.googleapis.com/",
-  "ownerName": "Google",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/ddmconversions": {
-          "description": "Manage DoubleClick Digital Marketing conversions"
-        },
-        "https://www.googleapis.com/auth/dfatrafficking": {
-          "description": "View and manage your DoubleClick Campaign Manager's (DCM) display ad campaigns"
-        },
-        "https://www.googleapis.com/auth/dfareporting": {
-          "description": "View and manage DoubleClick for Advertisers reports"
-        }
-      }
-    }
-  },
-  "description": "Manage your DoubleClick Campaign Manager ad campaigns and reports.",
-  "discoveryVersion": "v1",
-  "id": "dfareporting:v3.3",
-  "servicePath": "dfareporting/v3.3/",
-  "title": "Campaign Manager 360 API",
-  "resources": {
-    "orderDocuments": {
-      "methods": {
-        "get": {
-          "parameterOrder": [
-            "profileId",
-            "projectId",
-            "id"
-          ],
-          "parameters": {
-            "id": {
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "location": "path",
-              "description": "Order document ID."
-            },
-            "projectId": {
-              "format": "int64",
-              "location": "path",
-              "description": "Project ID for order documents.",
-              "type": "string",
-              "required": true
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "required": true
-            }
-          },
-          "id": "dfareporting.orderDocuments.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/projects/{projectId}/orderDocuments/{id}",
-          "path": "userprofiles/{profileId}/projects/{projectId}/orderDocuments/{id}",
-          "description": "Gets one order document by ID.",
-          "response": {
-            "$ref": "OrderDocument"
-          },
-          "httpMethod": "GET"
-        },
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/projects/{projectId}/orderDocuments",
-          "response": {
-            "$ref": "OrderDocumentsListResponse"
-          },
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/projects/{projectId}/orderDocuments",
-          "id": "dfareporting.orderDocuments.list",
-          "description": "Retrieves a list of order documents, possibly filtered. This method supports paging.",
-          "parameterOrder": [
-            "profileId",
-            "projectId"
-          ],
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            },
-            "sortOrder": {
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "default": "ASCENDING",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "description": "Order of sorted results.",
-              "type": "string"
-            },
-            "orderId": {
-              "location": "query",
-              "repeated": true,
-              "format": "int64",
-              "type": "string",
-              "description": "Select only order documents for specified orders."
-            },
-            "approved": {
-              "location": "query",
-              "type": "boolean",
-              "description": "Select only order documents that have been approved by at least one user."
-            },
-            "siteId": {
-              "repeated": true,
-              "type": "string",
-              "location": "query",
-              "format": "int64",
-              "description": "Select only order documents that are associated with these sites."
-            },
-            "maxResults": {
-              "format": "int32",
-              "minimum": "0",
-              "description": "Maximum number of results to return.",
-              "default": "1000",
-              "maximum": "1000",
-              "location": "query",
-              "type": "integer"
-            },
-            "searchString": {
-              "location": "query",
-              "description": "Allows searching for order documents by name or ID. Wildcards (*) are allowed. For example, \"orderdocument*2015\" will return order documents with names like \"orderdocument June 2015\", \"orderdocument April 2015\", or simply \"orderdocument 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"orderdocument\" will match order documents with name \"my orderdocument\", \"orderdocument 2015\", or simply \"orderdocument\".",
-              "type": "string"
-            },
-            "pageToken": {
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query"
-            },
-            "sortField": {
-              "description": "Field by which to sort the list.",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "location": "query",
-              "type": "string",
-              "default": "ID"
-            },
-            "projectId": {
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "description": "Project ID for order documents.",
-              "required": true
-            },
-            "ids": {
-              "type": "string",
-              "location": "query",
-              "format": "int64",
-              "repeated": true,
-              "description": "Select only order documents with these IDs."
-            }
-          }
-        }
-      }
-    },
-    "placementStrategies": {
-      "methods": {
-        "update": {
-          "response": {
-            "$ref": "PlacementStrategy"
-          },
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/placementStrategies",
-          "path": "userprofiles/{profileId}/placementStrategies",
-          "request": {
-            "$ref": "PlacementStrategy"
-          },
-          "id": "dfareporting.placementStrategies.update",
-          "description": "Updates an existing placement strategy.",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "httpMethod": "PUT"
-        },
-        "delete": {
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "format": "int64",
-              "required": true
-            },
-            "id": {
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "description": "Placement strategy ID."
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/placementStrategies/{id}",
-          "path": "userprofiles/{profileId}/placementStrategies/{id}",
-          "id": "dfareporting.placementStrategies.delete",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "description": "Deletes an existing placement strategy.",
-          "httpMethod": "DELETE",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "insert": {
-          "flatPath": "userprofiles/{profileId}/placementStrategies",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "location": "path",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "path": "userprofiles/{profileId}/placementStrategies",
-          "id": "dfareporting.placementStrategies.insert",
-          "httpMethod": "POST",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "response": {
-            "$ref": "PlacementStrategy"
-          },
-          "description": "Inserts a new placement strategy.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "request": {
-            "$ref": "PlacementStrategy"
-          }
-        },
-        "get": {
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "response": {
-            "$ref": "PlacementStrategy"
-          },
-          "description": "Gets one placement strategy by ID.",
-          "id": "dfareporting.placementStrategies.get",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64"
-            },
-            "id": {
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "description": "Placement strategy ID."
-            }
-          },
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/placementStrategies/{id}",
-          "path": "userprofiles/{profileId}/placementStrategies/{id}",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "list": {
-          "description": "Retrieves a list of placement strategies, possibly filtered. This method supports paging.",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "response": {
-            "$ref": "PlacementStrategiesListResponse"
-          },
-          "id": "dfareporting.placementStrategies.list",
-          "flatPath": "userprofiles/{profileId}/placementStrategies",
-          "parameters": {
-            "sortField": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "default": "ID",
-              "type": "string",
-              "description": "Field by which to sort the list.",
-              "enum": [
-                "ID",
-                "NAME"
-              ]
-            },
-            "profileId": {
-              "required": true,
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "location": "path"
-            },
-            "searchString": {
-              "location": "query",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"placementstrategy*2015\" will return objects with names like \"placementstrategy June 2015\", \"placementstrategy April 2015\", or simply \"placementstrategy 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"placementstrategy\" will match objects with name \"my placementstrategy\", \"placementstrategy 2015\", or simply \"placementstrategy\".",
-              "type": "string"
-            },
-            "ids": {
-              "format": "int64",
-              "type": "string",
-              "description": "Select only placement strategies with these IDs.",
-              "location": "query",
-              "repeated": true
-            },
-            "sortOrder": {
-              "description": "Order of sorted results.",
-              "default": "ASCENDING",
-              "type": "string",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            },
-            "maxResults": {
-              "format": "int32",
-              "location": "query",
-              "description": "Maximum number of results to return.",
-              "default": "1000",
-              "maximum": "1000",
-              "type": "integer",
-              "minimum": "0"
-            },
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page."
-            }
-          },
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/placementStrategies",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "patch": {
-          "id": "dfareporting.placementStrategies.patch",
-          "parameters": {
-            "id": {
-              "type": "string",
-              "required": true,
-              "format": "int64",
-              "description": "PlacementStrategy ID.",
-              "location": "query"
-            },
-            "profileId": {
-              "type": "string",
-              "format": "int64",
-              "required": true,
-              "location": "path",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "httpMethod": "PATCH",
-          "path": "userprofiles/{profileId}/placementStrategies",
-          "request": {
-            "$ref": "PlacementStrategy"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "PlacementStrategy"
-          },
-          "description": "Updates an existing placement strategy. This method supports patch semantics.",
-          "flatPath": "userprofiles/{profileId}/placementStrategies"
-        }
-      }
-    },
-    "userRolePermissionGroups": {
-      "methods": {
-        "get": {
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/userRolePermissionGroups/{id}",
-          "path": "userprofiles/{profileId}/userRolePermissionGroups/{id}",
-          "description": "Gets one user role permission group by ID.",
-          "id": "dfareporting.userRolePermissionGroups.get",
-          "httpMethod": "GET",
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            },
-            "id": {
-              "description": "User role permission group ID.",
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "format": "int64"
-            }
-          },
-          "response": {
-            "$ref": "UserRolePermissionGroup"
-          }
-        },
-        "list": {
-          "description": "Gets a list of all supported user role permission groups.",
-          "id": "dfareporting.userRolePermissionGroups.list",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/userRolePermissionGroups",
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "UserRolePermissionGroupsListResponse"
-          },
-          "flatPath": "userprofiles/{profileId}/userRolePermissionGroups"
-        }
-      }
-    },
-    "floodlightActivityGroups": {
-      "methods": {
-        "insert": {
-          "httpMethod": "POST",
-          "flatPath": "userprofiles/{profileId}/floodlightActivityGroups",
-          "id": "dfareporting.floodlightActivityGroups.insert",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "format": "int64"
-            }
-          },
-          "description": "Inserts a new floodlight activity group.",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/floodlightActivityGroups",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "request": {
-            "$ref": "FloodlightActivityGroup"
-          },
-          "response": {
-            "$ref": "FloodlightActivityGroup"
-          }
-        },
-        "list": {
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/floodlightActivityGroups",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/floodlightActivityGroups",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "FloodlightActivityGroupsListResponse"
-          },
-          "id": "dfareporting.floodlightActivityGroups.list",
-          "description": "Retrieves a list of floodlight activity groups, possibly filtered. This method supports paging.",
-          "parameters": {
-            "sortOrder": {
-              "type": "string",
-              "description": "Order of sorted results.",
-              "location": "query",
-              "default": "ASCENDING",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ]
-            },
-            "type": {
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "enum": [
-                "COUNTER",
-                "SALE"
-              ],
-              "description": "Select only floodlight activity groups with the specified floodlight activity group type."
-            },
-            "profileId": {
-              "format": "int64",
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "type": "string"
-            },
-            "sortField": {
-              "type": "string",
-              "location": "query",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "description": "Field by which to sort the list.",
-              "default": "ID",
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            },
-            "pageToken": {
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "type": "string"
-            },
-            "ids": {
-              "location": "query",
-              "repeated": true,
-              "format": "int64",
-              "description": "Select only floodlight activity groups with the specified IDs. Must specify either advertiserId or floodlightConfigurationId for a non-empty result.",
-              "type": "string"
-            },
-            "floodlightConfigurationId": {
-              "location": "query",
-              "description": "Select only floodlight activity groups with the specified floodlight configuration ID. Must specify either advertiserId, or floodlightConfigurationId for a non-empty result.",
-              "type": "string",
-              "format": "int64"
-            },
-            "searchString": {
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"floodlightactivitygroup*2015\" will return objects with names like \"floodlightactivitygroup June 2015\", \"floodlightactivitygroup April 2015\", or simply \"floodlightactivitygroup 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"floodlightactivitygroup\" will match objects with name \"my floodlightactivitygroup activity\", \"floodlightactivitygroup 2015\", or simply \"floodlightactivitygroup\".",
-              "type": "string",
-              "location": "query"
-            },
-            "maxResults": {
-              "minimum": "0",
-              "type": "integer",
-              "description": "Maximum number of results to return.",
-              "format": "int32",
-              "maximum": "1000",
-              "default": "1000",
-              "location": "query"
-            },
-            "advertiserId": {
-              "description": "Select only floodlight activity groups with the specified advertiser ID. Must specify either advertiserId or floodlightConfigurationId for a non-empty result.",
-              "type": "string",
-              "format": "int64",
-              "location": "query"
-            }
-          }
-        },
-        "update": {
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "PUT",
-          "response": {
-            "$ref": "FloodlightActivityGroup"
-          },
-          "description": "Updates an existing floodlight activity group.",
-          "request": {
-            "$ref": "FloodlightActivityGroup"
-          },
-          "id": "dfareporting.floodlightActivityGroups.update",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/floodlightActivityGroups",
-          "flatPath": "userprofiles/{profileId}/floodlightActivityGroups"
-        },
-        "get": {
-          "id": "dfareporting.floodlightActivityGroups.get",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true
-            },
-            "id": {
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "description": "Floodlight activity Group ID."
-            }
-          },
-          "response": {
-            "$ref": "FloodlightActivityGroup"
-          },
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/floodlightActivityGroups/{id}",
-          "path": "userprofiles/{profileId}/floodlightActivityGroups/{id}",
-          "description": "Gets one floodlight activity group by ID."
-        },
-        "patch": {
-          "response": {
-            "$ref": "FloodlightActivityGroup"
-          },
-          "description": "Updates an existing floodlight activity group. This method supports patch semantics.",
-          "httpMethod": "PATCH",
-          "id": "dfareporting.floodlightActivityGroups.patch",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "path": "userprofiles/{profileId}/floodlightActivityGroups",
-          "request": {
-            "$ref": "FloodlightActivityGroup"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/floodlightActivityGroups",
-          "parameters": {
-            "id": {
-              "location": "query",
-              "description": "FloodlightActivityGroup ID.",
-              "type": "string",
-              "required": true,
-              "format": "int64"
-            },
-            "profileId": {
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "type": "string",
-              "location": "path"
-            }
-          }
-        }
-      }
-    },
-    "subaccounts": {
-      "methods": {
-        "patch": {
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "flatPath": "userprofiles/{profileId}/subaccounts",
-          "request": {
-            "$ref": "Subaccount"
-          },
-          "parameters": {
-            "id": {
-              "type": "string",
-              "required": true,
-              "location": "query",
-              "description": "Subaccount ID.",
-              "format": "int64"
-            },
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true
-            }
-          },
-          "description": "Updates an existing subaccount. This method supports patch semantics.",
-          "path": "userprofiles/{profileId}/subaccounts",
-          "id": "dfareporting.subaccounts.patch",
-          "response": {
-            "$ref": "Subaccount"
-          },
-          "httpMethod": "PATCH",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "update": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "flatPath": "userprofiles/{profileId}/subaccounts",
-          "path": "userprofiles/{profileId}/subaccounts",
-          "response": {
-            "$ref": "Subaccount"
-          },
-          "httpMethod": "PUT",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "request": {
-            "$ref": "Subaccount"
-          },
-          "description": "Updates an existing subaccount.",
-          "id": "dfareporting.subaccounts.update"
-        },
-        "insert": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Inserts a new subaccount.",
-          "flatPath": "userprofiles/{profileId}/subaccounts",
-          "path": "userprofiles/{profileId}/subaccounts",
-          "httpMethod": "POST",
-          "id": "dfareporting.subaccounts.insert",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path",
-              "format": "int64"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "request": {
-            "$ref": "Subaccount"
-          },
-          "response": {
-            "$ref": "Subaccount"
-          }
-        },
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/subaccounts",
-          "response": {
-            "$ref": "SubaccountsListResponse"
-          },
-          "parameters": {
-            "pageToken": {
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "type": "string"
-            },
-            "ids": {
-              "description": "Select only subaccounts with these IDs.",
-              "repeated": true,
-              "location": "query",
-              "format": "int64",
-              "type": "string"
-            },
-            "sortOrder": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "type": "string",
-              "location": "query",
-              "description": "Order of sorted results.",
-              "default": "ASCENDING",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ]
-            },
-            "profileId": {
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "location": "path"
-            },
-            "sortField": {
-              "default": "ID",
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "description": "Field by which to sort the list.",
-              "enum": [
-                "ID",
-                "NAME"
-              ]
-            },
-            "maxResults": {
-              "maximum": "1000",
-              "description": "Maximum number of results to return.",
-              "minimum": "0",
-              "type": "integer",
-              "default": "1000",
-              "format": "int32",
-              "location": "query"
-            },
-            "searchString": {
-              "location": "query",
-              "type": "string",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"subaccount*2015\" will return objects with names like \"subaccount June 2015\", \"subaccount April 2015\", or simply \"subaccount 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"subaccount\" will match objects with name \"my subaccount\", \"subaccount 2015\", or simply \"subaccount\" ."
-            }
-          },
-          "id": "dfareporting.subaccounts.list",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/subaccounts",
-          "description": "Gets a list of subaccounts, possibly filtered. This method supports paging."
-        },
-        "get": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/subaccounts/{id}",
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/subaccounts/{id}",
-          "response": {
-            "$ref": "Subaccount"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "id": {
-              "location": "path",
-              "description": "Subaccount ID.",
-              "type": "string",
-              "format": "int64",
-              "required": true
-            },
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true
-            }
-          },
-          "description": "Gets one subaccount by ID.",
-          "id": "dfareporting.subaccounts.get"
-        }
-      }
-    },
-    "directorySites": {
-      "methods": {
-        "list": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.directorySites.list",
-          "response": {
-            "$ref": "DirectorySitesListResponse"
-          },
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/directorySites",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "maxResults": {
-              "maximum": "1000",
-              "type": "integer",
-              "default": "1000",
-              "location": "query",
-              "description": "Maximum number of results to return.",
-              "minimum": "0",
-              "format": "int32"
-            },
-            "ids": {
-              "repeated": true,
-              "type": "string",
-              "format": "int64",
-              "description": "Select only directory sites with these IDs.",
-              "location": "query"
-            },
-            "acceptsPublisherPaidPlacements": {
-              "location": "query",
-              "type": "boolean",
-              "description": "Select only directory sites that accept publisher paid placements. This field can be left blank."
-            },
-            "dfpNetworkCode": {
-              "location": "query",
-              "description": "Select only directory sites with this Ad Manager network code.",
-              "type": "string"
-            },
-            "sortOrder": {
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "default": "ASCENDING",
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "type": "string",
-              "description": "Order of sorted results."
-            },
-            "sortField": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "description": "Field by which to sort the list.",
-              "location": "query",
-              "type": "string",
-              "default": "ID"
-            },
-            "active": {
-              "location": "query",
-              "description": "Select only active directory sites. Leave blank to retrieve both active and inactive directory sites.",
-              "type": "boolean"
-            },
-            "pageToken": {
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query",
-              "type": "string"
-            },
-            "acceptsInStreamVideoPlacements": {
-              "location": "query",
-              "description": "This search filter is no longer supported and will have no effect on the results returned.",
-              "type": "boolean"
-            },
-            "acceptsInterstitialPlacements": {
-              "type": "boolean",
-              "description": "This search filter is no longer supported and will have no effect on the results returned.",
-              "location": "query"
-            },
-            "searchString": {
-              "description": "Allows searching for objects by name, ID or URL. Wildcards (*) are allowed. For example, \"directory site*2015\" will return objects with names like \"directory site June 2015\", \"directory site April 2015\", or simply \"directory site 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"directory site\" will match objects with name \"my directory site\", \"directory site 2015\" or simply, \"directory site\".",
-              "type": "string",
-              "location": "query"
-            },
-            "profileId": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "path": "userprofiles/{profileId}/directorySites",
-          "description": "Retrieves a list of directory sites, possibly filtered. This method supports paging."
-        },
-        "insert": {
-          "request": {
-            "$ref": "DirectorySite"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.directorySites.insert",
-          "path": "userprofiles/{profileId}/directorySites",
-          "response": {
-            "$ref": "DirectorySite"
-          },
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "format": "int64"
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/directorySites",
-          "description": "Inserts a new directory site.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "POST"
-        },
-        "get": {
-          "id": "dfareporting.directorySites.get",
-          "httpMethod": "GET",
-          "description": "Gets one directory site by ID.",
-          "parameters": {
-            "id": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "format": "int64",
-              "description": "Directory site ID."
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "required": true
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/directorySites/{id}",
-          "flatPath": "userprofiles/{profileId}/directorySites/{id}",
-          "response": {
-            "$ref": "DirectorySite"
-          }
-        }
-      }
-    },
-    "videoFormats": {
-      "methods": {
-        "get": {
-          "response": {
-            "$ref": "VideoFormat"
-          },
-          "description": "Gets one video format by ID.",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            },
-            "id": {
-              "type": "integer",
-              "description": "Video format ID.",
-              "location": "path",
-              "format": "int32",
-              "required": true
-            }
-          },
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/videoFormats/{id}",
-          "path": "userprofiles/{profileId}/videoFormats/{id}",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.videoFormats.get"
-        },
-        "list": {
-          "flatPath": "userprofiles/{profileId}/videoFormats",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/videoFormats",
-          "response": {
-            "$ref": "VideoFormatsListResponse"
-          },
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.videoFormats.list",
-          "description": "Lists available video formats.",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "location": "path",
-              "description": "User profile ID associated with this request."
-            }
-          }
-        }
-      }
-    },
-    "placementGroups": {
-      "methods": {
-        "update": {
-          "description": "Updates an existing placement group.",
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "httpMethod": "PUT",
-          "path": "userprofiles/{profileId}/placementGroups",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "request": {
-            "$ref": "PlacementGroup"
-          },
-          "flatPath": "userprofiles/{profileId}/placementGroups",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.placementGroups.update",
-          "response": {
-            "$ref": "PlacementGroup"
-          }
-        },
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "PlacementGroupsListResponse"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Retrieves a list of placement groups, possibly filtered. This method supports paging.",
-          "id": "dfareporting.placementGroups.list",
-          "path": "userprofiles/{profileId}/placementGroups",
-          "parameters": {
-            "maxStartDate": {
-              "location": "query",
-              "type": "string",
-              "description": "Select only placements or placement groups whose start date is on or before the specified maxStartDate. The date should be formatted as \"yyyy-MM-dd\"."
-            },
-            "sortField": {
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Field by which to sort the list.",
-              "type": "string",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "default": "ID"
-            },
-            "siteIds": {
-              "location": "query",
-              "format": "int64",
-              "repeated": true,
-              "type": "string",
-              "description": "Select only placement groups that are associated with these sites."
-            },
-            "sortOrder": {
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "default": "ASCENDING",
-              "location": "query",
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Order of sorted results."
-            },
-            "minEndDate": {
-              "location": "query",
-              "description": "Select only placements or placement groups whose end date is on or after the specified minEndDate. The date should be formatted as \"yyyy-MM-dd\".",
-              "type": "string"
-            },
-            "archived": {
-              "description": "Select only archived placements. Don't set this field to select both archived and non-archived placements.",
-              "type": "boolean",
-              "location": "query"
-            },
-            "placementStrategyIds": {
-              "repeated": true,
-              "type": "string",
-              "location": "query",
-              "format": "int64",
-              "description": "Select only placement groups that are associated with these placement strategies."
-            },
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64",
-              "location": "path"
-            },
-            "maxEndDate": {
-              "type": "string",
-              "description": "Select only placements or placement groups whose end date is on or before the specified maxEndDate. The date should be formatted as \"yyyy-MM-dd\".",
-              "location": "query"
-            },
-            "minStartDate": {
-              "location": "query",
-              "type": "string",
-              "description": "Select only placements or placement groups whose start date is on or after the specified minStartDate. The date should be formatted as \"yyyy-MM-dd\"."
-            },
-            "placementGroupType": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Select only placement groups belonging with this group type. A package is a simple group of placements that acts as a single pricing point for a group of tags. A roadblock is a group of placements that not only acts as a single pricing point but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned placements to be marked as primary for reporting.",
-              "enum": [
-                "PLACEMENT_PACKAGE",
-                "PLACEMENT_ROADBLOCK"
-              ],
-              "type": "string",
-              "location": "query"
-            },
-            "pageToken": {
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query"
-            },
-            "advertiserIds": {
-              "description": "Select only placement groups that belong to these advertisers.",
-              "type": "string",
-              "location": "query",
-              "format": "int64",
-              "repeated": true
-            },
-            "directorySiteIds": {
-              "repeated": true,
-              "format": "int64",
-              "location": "query",
-              "type": "string",
-              "description": "Select only placement groups that are associated with these directory sites."
-            },
-            "contentCategoryIds": {
-              "description": "Select only placement groups that are associated with these content categories.",
-              "type": "string",
-              "repeated": true,
-              "format": "int64",
-              "location": "query"
-            },
-            "ids": {
-              "format": "int64",
-              "location": "query",
-              "repeated": true,
-              "description": "Select only placement groups with these IDs.",
-              "type": "string"
-            },
-            "maxResults": {
-              "minimum": "0",
-              "type": "integer",
-              "default": "800",
-              "format": "int32",
-              "maximum": "800",
-              "description": "Maximum number of results to return.",
-              "location": "query"
-            },
-            "pricingTypes": {
-              "description": "Select only placement groups with these pricing types.",
-              "location": "query",
-              "enum": [
-                "PRICING_TYPE_CPM",
-                "PRICING_TYPE_CPC",
-                "PRICING_TYPE_CPA",
-                "PRICING_TYPE_FLAT_RATE_IMPRESSIONS",
-                "PRICING_TYPE_FLAT_RATE_CLICKS",
-                "PRICING_TYPE_CPM_ACTIVEVIEW"
-              ],
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                "",
-                "",
-                ""
-              ],
-              "type": "string",
-              "repeated": true
-            },
-            "searchString": {
-              "location": "query",
-              "type": "string",
-              "description": "Allows searching for placement groups by name or ID. Wildcards (*) are allowed. For example, \"placement*2015\" will return placement groups with names like \"placement group June 2015\", \"placement group May 2015\", or simply \"placements 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"placementgroup\" will match placement groups with name \"my placementgroup\", \"placementgroup 2015\", or simply \"placementgroup\"."
-            },
-            "campaignIds": {
-              "format": "int64",
-              "location": "query",
-              "type": "string",
-              "description": "Select only placement groups that belong to these campaigns.",
-              "repeated": true
-            }
-          },
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/placementGroups"
-        },
-        "insert": {
-          "httpMethod": "POST",
-          "request": {
-            "$ref": "PlacementGroup"
-          },
-          "path": "userprofiles/{profileId}/placementGroups",
-          "flatPath": "userprofiles/{profileId}/placementGroups",
-          "id": "dfareporting.placementGroups.insert",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Inserts a new placement group.",
-          "response": {
-            "$ref": "PlacementGroup"
-          },
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "location": "path",
-              "format": "int64"
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ]
-        },
-        "get": {
-          "id": "dfareporting.placementGroups.get",
-          "flatPath": "userprofiles/{profileId}/placementGroups/{id}",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "location": "path"
-            },
-            "id": {
-              "format": "int64",
-              "type": "string",
-              "location": "path",
-              "description": "Placement group ID.",
-              "required": true
-            }
-          },
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "path": "userprofiles/{profileId}/placementGroups/{id}",
-          "description": "Gets one placement group by ID.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "PlacementGroup"
-          }
-        },
-        "patch": {
-          "request": {
-            "$ref": "PlacementGroup"
-          },
-          "httpMethod": "PATCH",
-          "path": "userprofiles/{profileId}/placementGroups",
-          "response": {
-            "$ref": "PlacementGroup"
-          },
-          "flatPath": "userprofiles/{profileId}/placementGroups",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.placementGroups.patch",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "id": {
-              "format": "int64",
-              "required": true,
-              "location": "query",
-              "type": "string",
-              "description": "PlacementGroup ID."
-            },
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            }
-          },
-          "description": "Updates an existing placement group. This method supports patch semantics."
-        }
-      }
-    },
-    "creativeGroups": {
-      "methods": {
-        "update": {
-          "path": "userprofiles/{profileId}/creativeGroups",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true,
-              "format": "int64",
-              "location": "path"
-            }
-          },
-          "httpMethod": "PUT",
-          "flatPath": "userprofiles/{profileId}/creativeGroups",
-          "description": "Updates an existing creative group.",
-          "request": {
-            "$ref": "CreativeGroup"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.creativeGroups.update",
-          "response": {
-            "$ref": "CreativeGroup"
-          }
-        },
-        "insert": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "description": "Inserts a new creative group.",
-          "flatPath": "userprofiles/{profileId}/creativeGroups",
-          "response": {
-            "$ref": "CreativeGroup"
-          },
-          "path": "userprofiles/{profileId}/creativeGroups",
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.creativeGroups.insert",
-          "request": {
-            "$ref": "CreativeGroup"
-          }
-        },
-        "get": {
-          "flatPath": "userprofiles/{profileId}/creativeGroups/{id}",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/creativeGroups/{id}",
-          "description": "Gets one creative group by ID.",
-          "response": {
-            "$ref": "CreativeGroup"
-          },
-          "id": "dfareporting.creativeGroups.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "format": "int64"
-            },
-            "id": {
-              "type": "string",
-              "format": "int64",
-              "description": "Creative group ID.",
-              "required": true,
-              "location": "path"
-            }
-          }
-        },
-        "patch": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/creativeGroups",
-          "request": {
-            "$ref": "CreativeGroup"
-          },
-          "description": "Updates an existing creative group. This method supports patch semantics.",
-          "id": "dfareporting.creativeGroups.patch",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path"
-            },
-            "id": {
-              "description": "CreativeGroup ID.",
-              "required": true,
-              "type": "string",
-              "location": "query",
-              "format": "int64"
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "response": {
-            "$ref": "CreativeGroup"
-          },
-          "httpMethod": "PATCH",
-          "path": "userprofiles/{profileId}/creativeGroups"
-        },
-        "list": {
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/creativeGroups",
-          "description": "Retrieves a list of creative groups, possibly filtered. This method supports paging.",
-          "parameters": {
-            "ids": {
-              "format": "int64",
-              "description": "Select only creative groups with these IDs.",
-              "type": "string",
-              "location": "query",
-              "repeated": true
-            },
-            "sortField": {
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "location": "query",
-              "type": "string",
-              "default": "ID",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Field by which to sort the list."
-            },
-            "groupNumber": {
-              "type": "integer",
-              "maximum": "2",
-              "description": "Select only creative groups that belong to this subgroup.",
-              "format": "int32",
-              "location": "query",
-              "minimum": "1"
-            },
-            "profileId": {
-              "type": "string",
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "location": "path"
-            },
-            "sortOrder": {
-              "location": "query",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "type": "string",
-              "default": "ASCENDING",
-              "description": "Order of sorted results."
-            },
-            "pageToken": {
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query"
-            },
-            "maxResults": {
-              "minimum": "0",
-              "default": "1000",
-              "type": "integer",
-              "location": "query",
-              "description": "Maximum number of results to return.",
-              "format": "int32",
-              "maximum": "1000"
-            },
-            "advertiserIds": {
-              "format": "int64",
-              "type": "string",
-              "location": "query",
-              "repeated": true,
-              "description": "Select only creative groups that belong to these advertisers."
-            },
-            "searchString": {
-              "location": "query",
-              "type": "string",
-              "description": "Allows searching for creative groups by name or ID. Wildcards (*) are allowed. For example, \"creativegroup*2015\" will return creative groups with names like \"creativegroup June 2015\", \"creativegroup April 2015\", or simply \"creativegroup 2015\". Most of the searches also add wild-cards implicitly at the start and the end of the search string. For example, a search string of \"creativegroup\" will match creative groups with the name \"my creativegroup\", \"creativegroup 2015\", or simply \"creativegroup\"."
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "response": {
-            "$ref": "CreativeGroupsListResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.creativeGroups.list",
-          "path": "userprofiles/{profileId}/creativeGroups"
-        }
-      }
-    },
-    "campaigns": {
-      "methods": {
-        "patch": {
-          "description": "Updates an existing campaign. This method supports patch semantics.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/campaigns",
-          "flatPath": "userprofiles/{profileId}/campaigns",
-          "id": "dfareporting.campaigns.patch",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "id": {
-              "description": "Campaign ID.",
-              "location": "query",
-              "format": "int64",
-              "required": true,
-              "type": "string"
-            },
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "type": "string"
-            }
-          },
-          "request": {
-            "$ref": "Campaign"
-          },
-          "response": {
-            "$ref": "Campaign"
-          },
-          "httpMethod": "PATCH"
-        },
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/campaigns",
-          "response": {
-            "$ref": "CampaignsListResponse"
-          },
-          "id": "dfareporting.campaigns.list",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "advertiserIds": {
-              "type": "string",
-              "description": "Select only campaigns that belong to these advertisers.",
-              "repeated": true,
-              "location": "query",
-              "format": "int64"
-            },
-            "searchString": {
-              "description": "Allows searching for campaigns by name or ID. Wildcards (*) are allowed. For example, \"campaign*2015\" will return campaigns with names like \"campaign June 2015\", \"campaign April 2015\", or simply \"campaign 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"campaign\" will match campaigns with name \"my campaign\", \"campaign 2015\", or simply \"campaign\".",
-              "location": "query",
-              "type": "string"
-            },
-            "atLeastOneOptimizationActivity": {
-              "location": "query",
-              "type": "boolean",
-              "description": "Select only campaigns that have at least one optimization activity."
-            },
-            "overriddenEventTagId": {
-              "format": "int64",
-              "location": "query",
-              "type": "string",
-              "description": "Select only campaigns that have overridden this event tag ID."
-            },
-            "advertiserGroupIds": {
-              "type": "string",
-              "location": "query",
-              "repeated": true,
-              "description": "Select only campaigns whose advertisers belong to these advertiser groups.",
-              "format": "int64"
-            },
-            "ids": {
-              "location": "query",
-              "description": "Select only campaigns with these IDs.",
-              "repeated": true,
-              "type": "string",
-              "format": "int64"
-            },
-            "excludedIds": {
-              "location": "query",
-              "format": "int64",
-              "type": "string",
-              "repeated": true,
-              "description": "Exclude campaigns with these IDs."
-            },
-            "sortField": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "type": "string",
-              "description": "Field by which to sort the list.",
-              "default": "ID",
-              "location": "query",
-              "enum": [
-                "ID",
-                "NAME"
-              ]
-            },
-            "subaccountId": {
-              "format": "int64",
-              "location": "query",
-              "type": "string",
-              "description": "Select only campaigns that belong to this subaccount."
-            },
-            "pageToken": {
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "type": "string"
-            },
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            },
-            "maxResults": {
-              "format": "int32",
-              "type": "integer",
-              "maximum": "1000",
-              "description": "Maximum number of results to return.",
-              "location": "query",
-              "default": "1000",
-              "minimum": "0"
-            },
-            "sortOrder": {
-              "type": "string",
-              "location": "query",
-              "default": "ASCENDING",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "description": "Order of sorted results.",
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            },
-            "archived": {
-              "type": "boolean",
-              "location": "query",
-              "description": "Select only archived campaigns. Don't set this field to select both archived and non-archived campaigns."
-            }
-          },
-          "path": "userprofiles/{profileId}/campaigns",
-          "httpMethod": "GET",
-          "description": "Retrieves a list of campaigns, possibly filtered. This method supports paging."
-        },
-        "insert": {
-          "response": {
-            "$ref": "Campaign"
-          },
-          "flatPath": "userprofiles/{profileId}/campaigns",
-          "httpMethod": "POST",
-          "request": {
-            "$ref": "Campaign"
-          },
-          "id": "dfareporting.campaigns.insert",
-          "description": "Inserts a new campaign.",
-          "path": "userprofiles/{profileId}/campaigns",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "update": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Updates an existing campaign.",
-          "id": "dfareporting.campaigns.update",
-          "request": {
-            "$ref": "Campaign"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "PUT",
-          "path": "userprofiles/{profileId}/campaigns",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "type": "string",
-              "format": "int64"
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/campaigns",
-          "response": {
-            "$ref": "Campaign"
-          }
-        },
-        "get": {
-          "response": {
-            "$ref": "Campaign"
-          },
-          "description": "Gets one campaign by ID.",
-          "id": "dfareporting.campaigns.get",
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/campaigns/{id}",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "format": "int64"
-            },
-            "id": {
-              "description": "Campaign ID.",
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "format": "int64"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "flatPath": "userprofiles/{profileId}/campaigns/{id}"
-        }
-      }
-    },
-    "userProfiles": {
-      "methods": {
-        "get": {
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "description": "The user profile ID."
-            }
-          },
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}",
-          "description": "Gets one user profile by ID.",
-          "id": "dfareporting.userProfiles.get",
-          "response": {
-            "$ref": "UserProfile"
-          },
-          "flatPath": "userprofiles/{profileId}",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/ddmconversions",
-            "https://www.googleapis.com/auth/dfareporting",
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "list": {
-          "response": {
-            "$ref": "UserProfileList"
-          },
-          "description": "Retrieves list of user profiles for a user.",
-          "httpMethod": "GET",
-          "id": "dfareporting.userProfiles.list",
-          "scopes": [
-            "https://www.googleapis.com/auth/ddmconversions",
-            "https://www.googleapis.com/auth/dfareporting",
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [],
-          "path": "userprofiles",
-          "parameters": {},
-          "flatPath": "userprofiles"
-        }
-      }
-    },
-    "accountPermissionGroups": {
-      "methods": {
-        "list": {
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "AccountPermissionGroupsListResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Retrieves the list of account permission groups.",
-          "path": "userprofiles/{profileId}/accountPermissionGroups",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "format": "int64"
-            }
-          },
-          "id": "dfareporting.accountPermissionGroups.list",
-          "flatPath": "userprofiles/{profileId}/accountPermissionGroups"
-        },
-        "get": {
-          "description": "Gets one account permission group by ID.",
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "id": "dfareporting.accountPermissionGroups.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "AccountPermissionGroup"
-          },
-          "path": "userprofiles/{profileId}/accountPermissionGroups/{id}",
-          "flatPath": "userprofiles/{profileId}/accountPermissionGroups/{id}",
-          "parameters": {
-            "id": {
-              "description": "Account permission group ID.",
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "format": "int64"
-            },
-            "profileId": {
-              "format": "int64",
-              "type": "string",
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            }
-          }
-        }
-      }
-    },
-    "contentCategories": {
-      "methods": {
-        "patch": {
-          "parameters": {
-            "id": {
-              "description": "ContentCategory ID.",
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "location": "query"
-            },
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string"
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "flatPath": "userprofiles/{profileId}/contentCategories",
-          "response": {
-            "$ref": "ContentCategory"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.contentCategories.patch",
-          "request": {
-            "$ref": "ContentCategory"
-          },
-          "httpMethod": "PATCH",
-          "description": "Updates an existing content category. This method supports patch semantics.",
-          "path": "userprofiles/{profileId}/contentCategories"
-        },
-        "delete": {
-          "parameters": {
-            "id": {
-              "format": "int64",
-              "required": true,
-              "location": "path",
-              "description": "Content category ID.",
-              "type": "string"
-            },
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "location": "path"
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "flatPath": "userprofiles/{profileId}/contentCategories/{id}",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "DELETE",
-          "id": "dfareporting.contentCategories.delete",
-          "description": "Deletes an existing content category.",
-          "path": "userprofiles/{profileId}/contentCategories/{id}"
-        },
-        "list": {
-          "httpMethod": "GET",
-          "description": "Retrieves a list of content categories, possibly filtered. This method supports paging.",
-          "parameters": {
-            "sortField": {
-              "default": "ID",
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Field by which to sort the list.",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "location": "query"
-            },
-            "profileId": {
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "location": "path"
-            },
-            "sortOrder": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "type": "string",
-              "description": "Order of sorted results.",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "location": "query",
-              "default": "ASCENDING"
-            },
-            "searchString": {
-              "location": "query",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"contentcategory*2015\" will return objects with names like \"contentcategory June 2015\", \"contentcategory April 2015\", or simply \"contentcategory 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"contentcategory\" will match objects with name \"my contentcategory\", \"contentcategory 2015\", or simply \"contentcategory\".",
-              "type": "string"
-            },
-            "maxResults": {
-              "location": "query",
-              "format": "int32",
-              "description": "Maximum number of results to return.",
-              "type": "integer",
-              "maximum": "1000",
-              "minimum": "0",
-              "default": "1000"
-            },
-            "ids": {
-              "location": "query",
-              "description": "Select only content categories with these IDs.",
-              "repeated": true,
-              "type": "string",
-              "format": "int64"
-            },
-            "pageToken": {
-              "location": "query",
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page."
-            }
-          },
-          "path": "userprofiles/{profileId}/contentCategories",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.contentCategories.list",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "ContentCategoriesListResponse"
-          },
-          "flatPath": "userprofiles/{profileId}/contentCategories"
-        },
-        "insert": {
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "required": true,
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "type": "string"
-            }
-          },
-          "path": "userprofiles/{profileId}/contentCategories",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "POST",
-          "flatPath": "userprofiles/{profileId}/contentCategories",
-          "response": {
-            "$ref": "ContentCategory"
-          },
-          "description": "Inserts a new content category.",
-          "id": "dfareporting.contentCategories.insert",
-          "request": {
-            "$ref": "ContentCategory"
-          }
-        },
-        "update": {
-          "httpMethod": "PUT",
-          "description": "Updates an existing content category.",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/contentCategories",
-          "response": {
-            "$ref": "ContentCategory"
-          },
-          "id": "dfareporting.contentCategories.update",
-          "request": {
-            "$ref": "ContentCategory"
-          },
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "format": "int64",
-              "required": true
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/contentCategories"
-        },
-        "get": {
-          "flatPath": "userprofiles/{profileId}/contentCategories/{id}",
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            },
-            "id": {
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "required": true,
-              "description": "Content category ID."
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "description": "Gets one content category by ID.",
-          "id": "dfareporting.contentCategories.get",
-          "path": "userprofiles/{profileId}/contentCategories/{id}",
-          "response": {
-            "$ref": "ContentCategory"
-          }
-        }
-      }
-    },
-    "cities": {
-      "methods": {
-        "list": {
-          "description": "Retrieves a list of cities, possibly filtered.",
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/cities",
-          "id": "dfareporting.cities.list",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "CitiesListResponse"
-          },
-          "path": "userprofiles/{profileId}/cities",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "namePrefix": {
-              "location": "query",
-              "type": "string",
-              "description": "Select only cities with names starting with this prefix."
-            },
-            "regionDartIds": {
-              "type": "string",
-              "description": "Select only cities from these regions.",
-              "repeated": true,
-              "format": "int64",
-              "location": "query"
-            },
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request."
-            },
-            "countryDartIds": {
-              "description": "Select only cities from these countries.",
-              "location": "query",
-              "type": "string",
-              "repeated": true,
-              "format": "int64"
-            },
-            "dartIds": {
-              "repeated": true,
-              "type": "string",
-              "location": "query",
-              "description": "Select only cities with these DART IDs.",
-              "format": "int64"
-            }
-          }
-        }
-      }
-    },
-    "ads": {
-      "methods": {
-        "get": {
-          "parameters": {
-            "id": {
-              "description": "Ad ID.",
-              "format": "int64",
-              "type": "string",
-              "location": "path",
-              "required": true
-            },
-            "profileId": {
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "description": "Gets one ad by ID.",
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "id": "dfareporting.ads.get",
-          "flatPath": "userprofiles/{profileId}/ads/{id}",
-          "response": {
-            "$ref": "Ad"
-          },
-          "path": "userprofiles/{profileId}/ads/{id}",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "httpMethod": "GET",
-          "parameters": {
-            "sortField": {
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "default": "ID",
-              "description": "Field by which to sort the list.",
-              "type": "string"
-            },
-            "archived": {
-              "description": "Select only archived ads.",
-              "location": "query",
-              "type": "boolean"
-            },
-            "compatibility": {
-              "enum": [
-                "DISPLAY",
-                "DISPLAY_INTERSTITIAL",
-                "APP",
-                "APP_INTERSTITIAL",
-                "IN_STREAM_VIDEO",
-                "IN_STREAM_AUDIO"
-              ],
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                "",
-                "",
-                ""
-              ],
-              "description": "Select default ads with the specified compatibility. Applicable when type is AD_SERVING_DEFAULT_AD. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are for rendering in mobile apps. IN_STREAM_VIDEO refers to rendering an in-stream video ads developed with the VAST standard.",
-              "location": "query",
-              "type": "string"
-            },
-            "maxResults": {
-              "format": "int32",
-              "maximum": "1000",
-              "default": "1000",
-              "minimum": "0",
-              "description": "Maximum number of results to return.",
-              "location": "query",
-              "type": "integer"
-            },
-            "profileId": {
-              "type": "string",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "location": "path"
-            },
-            "sslCompliant": {
-              "location": "query",
-              "type": "boolean",
-              "description": "Select only ads that are SSL-compliant."
-            },
-            "advertiserId": {
-              "format": "int64",
-              "description": "Select only ads with this advertiser ID.",
-              "location": "query",
-              "type": "string"
-            },
-            "creativeOptimizationConfigurationIds": {
-              "type": "string",
-              "format": "int64",
-              "description": "Select only ads with these creative optimization configuration IDs.",
-              "location": "query",
-              "repeated": true
-            },
-            "remarketingListIds": {
-              "description": "Select only ads whose list targeting expression use these remarketing list IDs.",
-              "location": "query",
-              "repeated": true,
-              "type": "string",
-              "format": "int64"
-            },
-            "sslRequired": {
-              "location": "query",
-              "type": "boolean",
-              "description": "Select only ads that require SSL."
-            },
-            "sizeIds": {
-              "type": "string",
-              "description": "Select only ads with these size IDs.",
-              "location": "query",
-              "format": "int64",
-              "repeated": true
-            },
-            "overriddenEventTagId": {
-              "location": "query",
-              "format": "int64",
-              "description": "Select only ads with this event tag override ID.",
-              "type": "string"
-            },
-            "audienceSegmentIds": {
-              "location": "query",
-              "repeated": true,
-              "type": "string",
-              "format": "int64",
-              "description": "Select only ads with these audience segment IDs."
-            },
-            "placementIds": {
-              "location": "query",
-              "description": "Select only ads with these placement IDs assigned.",
-              "repeated": true,
-              "type": "string",
-              "format": "int64"
-            },
-            "campaignIds": {
-              "format": "int64",
-              "type": "string",
-              "location": "query",
-              "repeated": true,
-              "description": "Select only ads with these campaign IDs."
-            },
-            "creativeIds": {
-              "description": "Select only ads with these creative IDs assigned.",
-              "type": "string",
-              "format": "int64",
-              "location": "query",
-              "repeated": true
-            },
-            "dynamicClickTracker": {
-              "type": "boolean",
-              "location": "query",
-              "description": "Select only dynamic click trackers. Applicable when type is AD_SERVING_CLICK_TRACKER. If true, select dynamic click trackers. If false, select static click trackers. Leave unset to select both."
-            },
-            "sortOrder": {
-              "description": "Order of sorted results.",
-              "default": "ASCENDING",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "type": "string"
-            },
-            "type": {
-              "enum": [
-                "AD_SERVING_STANDARD_AD",
-                "AD_SERVING_DEFAULT_AD",
-                "AD_SERVING_CLICK_TRACKER",
-                "AD_SERVING_TRACKING",
-                "AD_SERVING_BRAND_SAFE_AD"
-              ],
-              "type": "string",
-              "repeated": true,
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                "",
-                ""
-              ],
-              "location": "query",
-              "description": "Select only ads with these types."
-            },
-            "ids": {
-              "format": "int64",
-              "location": "query",
-              "type": "string",
-              "repeated": true,
-              "description": "Select only ads with these IDs."
-            },
-            "landingPageIds": {
-              "description": "Select only ads with these landing page IDs.",
-              "repeated": true,
-              "location": "query",
-              "format": "int64",
-              "type": "string"
-            },
-            "searchString": {
-              "type": "string",
-              "location": "query",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"ad*2015\" will return objects with names like \"ad June 2015\", \"ad April 2015\", or simply \"ad 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"ad\" will match objects with name \"my ad\", \"ad 2015\", or simply \"ad\"."
-            },
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page."
-            },
-            "active": {
-              "description": "Select only active ads.",
-              "location": "query",
-              "type": "boolean"
-            }
-          },
-          "response": {
-            "$ref": "AdsListResponse"
-          },
-          "path": "userprofiles/{profileId}/ads",
-          "description": "Retrieves a list of ads, possibly filtered. This method supports paging.",
-          "flatPath": "userprofiles/{profileId}/ads",
-          "id": "dfareporting.ads.list"
-        },
-        "insert": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "flatPath": "userprofiles/{profileId}/ads",
-          "request": {
-            "$ref": "Ad"
-          },
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "description": "Inserts a new ad.",
-          "response": {
-            "$ref": "Ad"
-          },
-          "httpMethod": "POST",
-          "path": "userprofiles/{profileId}/ads",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.ads.insert"
-        },
-        "patch": {
-          "parameters": {
-            "id": {
-              "description": "Ad ID.",
-              "required": true,
-              "type": "string",
-              "location": "query",
-              "format": "int64"
-            },
-            "profileId": {
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "description": "Updates an existing ad. This method supports patch semantics.",
-          "path": "userprofiles/{profileId}/ads",
-          "flatPath": "userprofiles/{profileId}/ads",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "request": {
-            "$ref": "Ad"
-          },
-          "response": {
-            "$ref": "Ad"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "id": "dfareporting.ads.patch",
-          "httpMethod": "PATCH"
-        },
-        "update": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/ads",
-          "response": {
-            "$ref": "Ad"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/ads",
-          "description": "Updates an existing ad.",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "type": "string"
-            }
-          },
-          "id": "dfareporting.ads.update",
-          "request": {
-            "$ref": "Ad"
-          },
-          "httpMethod": "PUT"
-        }
-      }
-    },
-    "regions": {
-      "methods": {
-        "list": {
-          "flatPath": "userprofiles/{profileId}/regions",
-          "description": "Retrieves a list of regions.",
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "RegionsListResponse"
-          },
-          "path": "userprofiles/{profileId}/regions",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.regions.list",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        }
-      }
-    },
-    "files": {
-      "methods": {
-        "get": {
-          "description": "Retrieves a report file by its report ID and file ID. This method supports media download.",
-          "path": "reports/{reportId}/files/{fileId}",
-          "parameters": {
-            "reportId": {
-              "required": true,
-              "location": "path",
-              "description": "The ID of the report.",
-              "format": "int64",
-              "type": "string"
-            },
-            "fileId": {
-              "required": true,
-              "location": "path",
-              "description": "The ID of the report file.",
-              "type": "string",
-              "format": "int64"
-            }
-          },
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "File"
-          },
-          "flatPath": "reports/{reportId}/files/{fileId}",
-          "id": "dfareporting.files.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfareporting"
-          ],
-          "parameterOrder": [
-            "reportId",
-            "fileId"
-          ],
-          "supportsMediaDownload": true
-        },
-        "list": {
-          "description": "Lists files for a user profile.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfareporting"
-          ],
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/files",
-          "flatPath": "userprofiles/{profileId}/files",
-          "parameters": {
-            "profileId": {
-              "description": "The Campaign Manager 360 user profile ID.",
-              "format": "int64",
-              "type": "string",
-              "location": "path",
-              "required": true
-            },
-            "maxResults": {
-              "location": "query",
-              "type": "integer",
-              "minimum": "0",
-              "maximum": "10",
-              "description": "Maximum number of results to return.",
-              "format": "int32",
-              "default": "10"
-            },
-            "pageToken": {
-              "location": "query",
-              "type": "string",
-              "description": "The value of the nextToken from the previous result page."
-            },
-            "scope": {
-              "enumDescriptions": [
-                "All files in account.",
-                "My files.",
-                "Files shared with me."
-              ],
-              "default": "MINE",
-              "location": "query",
-              "description": "The scope that defines which results are returned.",
-              "type": "string",
-              "enum": [
-                "ALL",
-                "MINE",
-                "SHARED_WITH_ME"
-              ]
-            },
-            "sortField": {
-              "default": "LAST_MODIFIED_TIME",
-              "enum": [
-                "ID",
-                "LAST_MODIFIED_TIME"
-              ],
-              "enumDescriptions": [
-                "Sort by file ID.",
-                "Sort by 'lastmodifiedAt' field."
-              ],
-              "description": "The field by which to sort the list.",
-              "location": "query",
-              "type": "string"
-            },
-            "sortOrder": {
-              "location": "query",
-              "type": "string",
-              "description": "Order of sorted results.",
-              "enumDescriptions": [
-                "Ascending order.",
-                "Descending order."
-              ],
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "default": "DESCENDING"
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.files.list",
-          "response": {
-            "$ref": "FileList"
-          }
-        }
-      }
-    },
-    "metros": {
-      "methods": {
-        "list": {
-          "flatPath": "userprofiles/{profileId}/metros",
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "id": "dfareporting.metros.list",
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Retrieves a list of metros.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/metros",
-          "response": {
-            "$ref": "MetrosListResponse"
-          }
-        }
-      }
-    },
-    "accountUserProfiles": {
-      "methods": {
-        "insert": {
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path",
-              "required": true
-            }
-          },
-          "response": {
-            "$ref": "AccountUserProfile"
-          },
-          "httpMethod": "POST",
-          "id": "dfareporting.accountUserProfiles.insert",
-          "request": {
-            "$ref": "AccountUserProfile"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/accountUserProfiles",
-          "description": "Inserts a new account user profile.",
-          "path": "userprofiles/{profileId}/accountUserProfiles"
-        },
-        "update": {
-          "path": "userprofiles/{profileId}/accountUserProfiles",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "format": "int64"
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "flatPath": "userprofiles/{profileId}/accountUserProfiles",
-          "request": {
-            "$ref": "AccountUserProfile"
-          },
-          "description": "Updates an existing account user profile.",
-          "id": "dfareporting.accountUserProfiles.update",
-          "httpMethod": "PUT",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "AccountUserProfile"
-          }
-        },
-        "get": {
-          "id": "dfareporting.accountUserProfiles.get",
-          "response": {
-            "$ref": "AccountUserProfile"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            },
-            "id": {
-              "description": "User profile ID.",
-              "type": "string",
-              "format": "int64",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "description": "Gets one account user profile by ID.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/accountUserProfiles/{id}",
-          "path": "userprofiles/{profileId}/accountUserProfiles/{id}",
-          "httpMethod": "GET"
-        },
-        "list": {
-          "path": "userprofiles/{profileId}/accountUserProfiles",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.accountUserProfiles.list",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/accountUserProfiles",
-          "description": "Retrieves a list of account user profiles, possibly filtered. This method supports paging.",
-          "httpMethod": "GET",
-          "parameters": {
-            "searchString": {
-              "location": "query",
-              "type": "string",
-              "description": "Allows searching for objects by name, ID or email. Wildcards (*) are allowed. For example, \"user profile*2015\" will return objects with names like \"user profile June 2015\", \"user profile April 2015\", or simply \"user profile 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"user profile\" will match objects with name \"my user profile\", \"user profile 2015\", or simply \"user profile\"."
-            },
-            "userRoleId": {
-              "format": "int64",
-              "type": "string",
-              "location": "query",
-              "description": "Select only user profiles with the specified user role ID."
-            },
-            "sortField": {
-              "default": "ID",
-              "description": "Field by which to sort the list.",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "location": "query",
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            },
-            "ids": {
-              "format": "int64",
-              "type": "string",
-              "location": "query",
-              "description": "Select only user profiles with these IDs.",
-              "repeated": true
-            },
-            "sortOrder": {
-              "description": "Order of sorted results.",
-              "location": "query",
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "default": "ASCENDING",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ]
-            },
-            "subaccountId": {
-              "description": "Select only user profiles with the specified subaccount ID.",
-              "type": "string",
-              "location": "query",
-              "format": "int64"
-            },
-            "profileId": {
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "type": "string",
-              "format": "int64"
-            },
-            "maxResults": {
-              "format": "int32",
-              "minimum": "0",
-              "maximum": "1000",
-              "type": "integer",
-              "default": "1000",
-              "location": "query",
-              "description": "Maximum number of results to return."
-            },
-            "active": {
-              "type": "boolean",
-              "location": "query",
-              "description": "Select only active user profiles."
-            },
-            "pageToken": {
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query"
-            }
-          },
-          "response": {
-            "$ref": "AccountUserProfilesListResponse"
-          }
-        },
-        "patch": {
-          "id": "dfareporting.accountUserProfiles.patch",
-          "parameters": {
-            "id": {
-              "location": "query",
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "description": "AccountUserProfile ID."
-            },
-            "profileId": {
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "format": "int64"
-            }
-          },
-          "path": "userprofiles/{profileId}/accountUserProfiles",
-          "response": {
-            "$ref": "AccountUserProfile"
-          },
-          "description": "Updates an existing account user profile. This method supports patch semantics.",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "PATCH",
-          "flatPath": "userprofiles/{profileId}/accountUserProfiles",
-          "request": {
-            "$ref": "AccountUserProfile"
-          }
-        }
-      }
-    },
-    "floodlightConfigurations": {
-      "methods": {
-        "get": {
-          "httpMethod": "GET",
-          "id": "dfareporting.floodlightConfigurations.get",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "path": "userprofiles/{profileId}/floodlightConfigurations/{id}",
-          "description": "Gets one floodlight configuration by ID.",
-          "response": {
-            "$ref": "FloodlightConfiguration"
-          },
-          "parameters": {
-            "id": {
-              "type": "string",
-              "location": "path",
-              "format": "int64",
-              "required": true,
-              "description": "Floodlight configuration ID."
-            },
-            "profileId": {
-              "format": "int64",
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/floodlightConfigurations/{id}"
-        },
-        "patch": {
-          "httpMethod": "PATCH",
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "type": "string",
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            },
-            "id": {
-              "required": true,
-              "description": "FloodlightConfiguration ID.",
-              "format": "int64",
-              "location": "query",
-              "type": "string"
-            }
-          },
-          "id": "dfareporting.floodlightConfigurations.patch",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/floodlightConfigurations",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "description": "Updates an existing floodlight configuration. This method supports patch semantics.",
-          "response": {
-            "$ref": "FloodlightConfiguration"
-          },
-          "request": {
-            "$ref": "FloodlightConfiguration"
-          },
-          "flatPath": "userprofiles/{profileId}/floodlightConfigurations"
-        },
-        "list": {
-          "description": "Retrieves a list of floodlight configurations, possibly filtered.",
-          "flatPath": "userprofiles/{profileId}/floodlightConfigurations",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/floodlightConfigurations",
-          "response": {
-            "$ref": "FloodlightConfigurationsListResponse"
-          },
-          "httpMethod": "GET",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path",
-              "format": "int64"
-            },
-            "ids": {
-              "type": "string",
-              "location": "query",
-              "description": "Set of IDs of floodlight configurations to retrieve. Required field; otherwise an empty list will be returned.",
-              "repeated": true,
-              "format": "int64"
-            }
-          },
-          "id": "dfareporting.floodlightConfigurations.list"
-        },
-        "update": {
-          "id": "dfareporting.floodlightConfigurations.update",
-          "request": {
-            "$ref": "FloodlightConfiguration"
-          },
-          "description": "Updates an existing floodlight configuration.",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "required": true,
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "location": "path"
-            }
-          },
-          "httpMethod": "PUT",
-          "response": {
-            "$ref": "FloodlightConfiguration"
-          },
-          "path": "userprofiles/{profileId}/floodlightConfigurations",
-          "flatPath": "userprofiles/{profileId}/floodlightConfigurations",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        }
-      }
-    },
-    "creatives": {
-      "methods": {
-        "get": {
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "id": "dfareporting.creatives.get",
-          "parameters": {
-            "id": {
-              "description": "Creative ID.",
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "format": "int64"
-            },
-            "profileId": {
-              "format": "int64",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/creatives/{id}",
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/creatives/{id}",
-          "response": {
-            "$ref": "Creative"
-          },
-          "description": "Gets one creative by ID."
-        },
-        "update": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "httpMethod": "PUT",
-          "description": "Updates an existing creative.",
-          "response": {
-            "$ref": "Creative"
-          },
-          "id": "dfareporting.creatives.update",
-          "path": "userprofiles/{profileId}/creatives",
-          "flatPath": "userprofiles/{profileId}/creatives",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "request": {
-            "$ref": "Creative"
-          },
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request."
-            }
-          }
-        },
-        "insert": {
-          "flatPath": "userprofiles/{profileId}/creatives",
-          "description": "Inserts a new creative.",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.creatives.insert",
-          "request": {
-            "$ref": "Creative"
-          },
-          "path": "userprofiles/{profileId}/creatives",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "response": {
-            "$ref": "Creative"
-          }
-        },
-        "list": {
-          "id": "dfareporting.creatives.list",
-          "flatPath": "userprofiles/{profileId}/creatives",
-          "response": {
-            "$ref": "CreativesListResponse"
-          },
-          "path": "userprofiles/{profileId}/creatives",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "httpMethod": "GET",
-          "parameters": {
-            "companionCreativeIds": {
-              "repeated": true,
-              "format": "int64",
-              "description": "Select only in-stream video creatives with these companion IDs.",
-              "type": "string",
-              "location": "query"
-            },
-            "creativeFieldIds": {
-              "type": "string",
-              "format": "int64",
-              "location": "query",
-              "repeated": true,
-              "description": "Select only creatives with these creative field IDs."
-            },
-            "types": {
-              "location": "query",
-              "enum": [
-                "IMAGE",
-                "DISPLAY_REDIRECT",
-                "CUSTOM_DISPLAY",
-                "INTERNAL_REDIRECT",
-                "CUSTOM_DISPLAY_INTERSTITIAL",
-                "INTERSTITIAL_INTERNAL_REDIRECT",
-                "TRACKING_TEXT",
-                "RICH_MEDIA_DISPLAY_BANNER",
-                "RICH_MEDIA_INPAGE_FLOATING",
-                "RICH_MEDIA_IM_EXPAND",
-                "RICH_MEDIA_DISPLAY_EXPANDING",
-                "RICH_MEDIA_DISPLAY_INTERSTITIAL",
-                "RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL",
-                "RICH_MEDIA_MOBILE_IN_APP",
-                "FLASH_INPAGE",
-                "INSTREAM_VIDEO",
-                "VPAID_LINEAR_VIDEO",
-                "VPAID_NON_LINEAR_VIDEO",
-                "INSTREAM_VIDEO_REDIRECT",
-                "RICH_MEDIA_PEEL_DOWN",
-                "HTML5_BANNER",
-                "DISPLAY",
-                "DISPLAY_IMAGE_GALLERY",
-                "BRAND_SAFE_DEFAULT_INSTREAM_VIDEO",
-                "INSTREAM_AUDIO"
-              ],
-              "type": "string",
-              "description": "Select only creatives with these creative types.",
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                ""
-              ],
-              "repeated": true
-            },
-            "maxResults": {
-              "maximum": "1000",
-              "location": "query",
-              "description": "Maximum number of results to return.",
-              "type": "integer",
-              "format": "int32",
-              "default": "1000",
-              "minimum": "0"
-            },
-            "renderingIds": {
-              "format": "int64",
-              "repeated": true,
-              "location": "query",
-              "description": "Select only creatives with these rendering IDs.",
-              "type": "string"
-            },
-            "pageToken": {
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query"
-            },
-            "archived": {
-              "type": "boolean",
-              "description": "Select only archived creatives. Leave blank to select archived and unarchived creatives.",
-              "location": "query"
-            },
-            "sortOrder": {
-              "type": "string",
-              "description": "Order of sorted results.",
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "default": "ASCENDING",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ]
-            },
-            "ids": {
-              "repeated": true,
-              "format": "int64",
-              "location": "query",
-              "type": "string",
-              "description": "Select only creatives with these IDs."
-            },
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request."
-            },
-            "sizeIds": {
-              "format": "int64",
-              "type": "string",
-              "description": "Select only creatives with these size IDs.",
-              "repeated": true,
-              "location": "query"
-            },
-            "sortField": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "type": "string",
-              "default": "ID",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "description": "Field by which to sort the list."
-            },
-            "advertiserId": {
-              "location": "query",
-              "description": "Select only creatives with this advertiser ID.",
-              "type": "string",
-              "format": "int64"
-            },
-            "campaignId": {
-              "format": "int64",
-              "location": "query",
-              "description": "Select only creatives with this campaign ID.",
-              "type": "string"
-            },
-            "searchString": {
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"creative*2015\" will return objects with names like \"creative June 2015\", \"creative April 2015\", or simply \"creative 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"creative\" will match objects with name \"my creative\", \"creative 2015\", or simply \"creative\".",
-              "location": "query",
-              "type": "string"
-            },
-            "studioCreativeId": {
-              "description": "Select only creatives corresponding to this Studio creative ID.",
-              "location": "query",
-              "type": "string",
-              "format": "int64"
-            },
-            "active": {
-              "description": "Select only active creatives. Leave blank to select active and inactive creatives.",
-              "location": "query",
-              "type": "boolean"
-            }
-          },
-          "description": "Retrieves a list of creatives, possibly filtered. This method supports paging.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "patch": {
-          "response": {
-            "$ref": "Creative"
-          },
-          "id": "dfareporting.creatives.patch",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "id": {
-              "location": "query",
-              "required": true,
-              "type": "string",
-              "description": "Creative ID.",
-              "format": "int64"
-            },
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "description": "Updates an existing creative. This method supports patch semantics.",
-          "flatPath": "userprofiles/{profileId}/creatives",
-          "httpMethod": "PATCH",
-          "path": "userprofiles/{profileId}/creatives",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "request": {
-            "$ref": "Creative"
-          }
-        }
-      }
-    },
-    "operatingSystemVersions": {
-      "methods": {
-        "get": {
-          "flatPath": "userprofiles/{profileId}/operatingSystemVersions/{id}",
-          "id": "dfareporting.operatingSystemVersions.get",
-          "httpMethod": "GET",
-          "description": "Gets one operating system version by ID.",
-          "response": {
-            "$ref": "OperatingSystemVersion"
-          },
-          "path": "userprofiles/{profileId}/operatingSystemVersions/{id}",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path"
-            },
-            "id": {
-              "type": "string",
-              "location": "path",
-              "description": "Operating system version ID.",
-              "format": "int64",
-              "required": true
-            }
-          }
-        },
-        "list": {
-          "flatPath": "userprofiles/{profileId}/operatingSystemVersions",
-          "description": "Retrieves a list of operating system versions.",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "OperatingSystemVersionsListResponse"
-          },
-          "id": "dfareporting.operatingSystemVersions.list",
-          "path": "userprofiles/{profileId}/operatingSystemVersions"
-        }
-      }
-    },
-    "userRolePermissions": {
-      "methods": {
-        "list": {
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "location": "path",
-              "format": "int64"
-            },
-            "ids": {
-              "description": "Select only user role permissions with these IDs.",
-              "location": "query",
-              "format": "int64",
-              "repeated": true,
-              "type": "string"
-            }
-          },
-          "response": {
-            "$ref": "UserRolePermissionsListResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/userRolePermissions",
-          "flatPath": "userprofiles/{profileId}/userRolePermissions",
-          "id": "dfareporting.userRolePermissions.list",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Gets a list of user role permissions, possibly filtered."
-        },
-        "get": {
-          "id": "dfareporting.userRolePermissions.get",
-          "flatPath": "userprofiles/{profileId}/userRolePermissions/{id}",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "id": {
-              "format": "int64",
-              "description": "User role permission ID.",
-              "type": "string",
-              "location": "path",
-              "required": true
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/userRolePermissions/{id}",
-          "description": "Gets one user role permission by ID.",
-          "response": {
-            "$ref": "UserRolePermission"
-          }
-        }
-      }
-    },
-    "inventoryItems": {
-      "methods": {
-        "get": {
-          "response": {
-            "$ref": "InventoryItem"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "description": "Gets one inventory item by ID.",
-          "path": "userprofiles/{profileId}/projects/{projectId}/inventoryItems/{id}",
-          "id": "dfareporting.inventoryItems.get",
-          "parameterOrder": [
-            "profileId",
-            "projectId",
-            "id"
-          ],
-          "parameters": {
-            "projectId": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "description": "Project ID for order documents."
-            },
-            "profileId": {
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "type": "string"
-            },
-            "id": {
-              "required": true,
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "description": "Inventory item ID."
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/projects/{projectId}/inventoryItems/{id}"
-        },
-        "list": {
-          "parameterOrder": [
-            "profileId",
-            "projectId"
-          ],
-          "description": "Retrieves a list of inventory items, possibly filtered. This method supports paging.",
-          "path": "userprofiles/{profileId}/projects/{projectId}/inventoryItems",
-          "parameters": {
-            "orderId": {
-              "description": "Select only inventory items that belong to specified orders.",
-              "type": "string",
-              "format": "int64",
-              "location": "query",
-              "repeated": true
-            },
-            "sortField": {
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "type": "string",
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Field by which to sort the list.",
-              "default": "ID"
-            },
-            "profileId": {
-              "location": "path",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "format": "int64"
-            },
-            "ids": {
-              "type": "string",
-              "location": "query",
-              "description": "Select only inventory items with these IDs.",
-              "repeated": true,
-              "format": "int64"
-            },
-            "projectId": {
-              "type": "string",
-              "location": "path",
-              "description": "Project ID for order documents.",
-              "format": "int64",
-              "required": true
-            },
-            "sortOrder": {
-              "description": "Order of sorted results.",
-              "location": "query",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "type": "string",
-              "default": "ASCENDING"
-            },
-            "maxResults": {
-              "maximum": "1000",
-              "minimum": "0",
-              "default": "1000",
-              "type": "integer",
-              "format": "int32",
-              "description": "Maximum number of results to return.",
-              "location": "query"
-            },
-            "siteId": {
-              "format": "int64",
-              "location": "query",
-              "repeated": true,
-              "type": "string",
-              "description": "Select only inventory items that are associated with these sites."
-            },
-            "pageToken": {
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "type": "string"
-            },
-            "type": {
-              "type": "string",
-              "location": "query",
-              "description": "Select only inventory items with this type.",
-              "enum": [
-                "PLANNING_PLACEMENT_TYPE_REGULAR",
-                "PLANNING_PLACEMENT_TYPE_CREDIT"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            },
-            "inPlan": {
-              "location": "query",
-              "description": "Select only inventory items that are in plan.",
-              "type": "boolean"
-            }
-          },
-          "id": "dfareporting.inventoryItems.list",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "InventoryItemsListResponse"
-          },
-          "flatPath": "userprofiles/{profileId}/projects/{projectId}/inventoryItems"
-        }
-      }
-    },
-    "remarketingListShares": {
-      "methods": {
-        "update": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "httpMethod": "PUT",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "description": "Updates an existing remarketing list share.",
-          "flatPath": "userprofiles/{profileId}/remarketingListShares",
-          "id": "dfareporting.remarketingListShares.update",
-          "request": {
-            "$ref": "RemarketingListShare"
-          },
-          "response": {
-            "$ref": "RemarketingListShare"
-          },
-          "path": "userprofiles/{profileId}/remarketingListShares",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "patch": {
-          "response": {
-            "$ref": "RemarketingListShare"
-          },
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path",
-              "required": true
-            },
-            "id": {
-              "location": "query",
-              "description": "RemarketingList ID.",
-              "type": "string",
-              "format": "int64",
-              "required": true
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.remarketingListShares.patch",
-          "description": "Updates an existing remarketing list share. This method supports patch semantics.",
-          "flatPath": "userprofiles/{profileId}/remarketingListShares",
-          "request": {
-            "$ref": "RemarketingListShare"
-          },
-          "httpMethod": "PATCH",
-          "path": "userprofiles/{profileId}/remarketingListShares"
-        },
-        "get": {
-          "parameterOrder": [
-            "profileId",
-            "remarketingListId"
-          ],
-          "path": "userprofiles/{profileId}/remarketingListShares/{remarketingListId}",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "format": "int64",
-              "type": "string"
-            },
-            "remarketingListId": {
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "Remarketing list ID."
-            }
-          },
-          "id": "dfareporting.remarketingListShares.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "description": "Gets one remarketing list share by remarketing list ID.",
-          "response": {
-            "$ref": "RemarketingListShare"
-          },
-          "flatPath": "userprofiles/{profileId}/remarketingListShares/{remarketingListId}"
-        }
-      }
-    },
-    "userRoles": {
-      "methods": {
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/userRoles",
-          "flatPath": "userprofiles/{profileId}/userRoles",
-          "id": "dfareporting.userRoles.list",
-          "response": {
-            "$ref": "UserRolesListResponse"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "httpMethod": "GET",
-          "description": "Retrieves a list of user roles, possibly filtered. This method supports paging.",
-          "parameters": {
-            "accountUserRoleOnly": {
-              "description": "Select only account level user roles not associated with any specific subaccount.",
-              "type": "boolean",
-              "location": "query"
-            },
-            "sortField": {
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "type": "string",
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "default": "ID",
-              "description": "Field by which to sort the list."
-            },
-            "subaccountId": {
-              "description": "Select only user roles that belong to this subaccount.",
-              "format": "int64",
-              "type": "string",
-              "location": "query"
-            },
-            "sortOrder": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "type": "string",
-              "default": "ASCENDING",
-              "description": "Order of sorted results.",
-              "location": "query"
-            },
-            "ids": {
-              "type": "string",
-              "format": "int64",
-              "description": "Select only user roles with the specified IDs.",
-              "repeated": true,
-              "location": "query"
-            },
-            "maxResults": {
-              "default": "1000",
-              "location": "query",
-              "type": "integer",
-              "maximum": "1000",
-              "minimum": "0",
-              "format": "int32",
-              "description": "Maximum number of results to return."
-            },
-            "searchString": {
-              "location": "query",
-              "type": "string",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"userrole*2015\" will return objects with names like \"userrole June 2015\", \"userrole April 2015\", or simply \"userrole 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"userrole\" will match objects with name \"my userrole\", \"userrole 2015\", or simply \"userrole\"."
-            },
-            "pageToken": {
-              "description": "Value of the nextPageToken from the previous result page.",
-              "type": "string",
-              "location": "query"
-            },
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "required": true,
-              "location": "path"
-            }
-          }
-        },
-        "update": {
-          "response": {
-            "$ref": "UserRole"
-          },
-          "id": "dfareporting.userRoles.update",
-          "description": "Updates an existing user role.",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "flatPath": "userprofiles/{profileId}/userRoles",
-          "request": {
-            "$ref": "UserRole"
-          },
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "type": "string"
-            }
-          },
-          "path": "userprofiles/{profileId}/userRoles",
-          "httpMethod": "PUT",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "get": {
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "type": "string"
-            },
-            "id": {
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "description": "User role ID.",
-              "required": true
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "id": "dfareporting.userRoles.get",
-          "response": {
-            "$ref": "UserRole"
-          },
-          "flatPath": "userprofiles/{profileId}/userRoles/{id}",
-          "httpMethod": "GET",
-          "description": "Gets one user role by ID.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/userRoles/{id}"
-        },
-        "patch": {
-          "parameters": {
-            "id": {
-              "format": "int64",
-              "location": "query",
-              "type": "string",
-              "description": "UserRole ID.",
-              "required": true
-            },
-            "profileId": {
-              "format": "int64",
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "httpMethod": "PATCH",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "description": "Updates an existing user role. This method supports patch semantics.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/userRoles",
-          "response": {
-            "$ref": "UserRole"
-          },
-          "id": "dfareporting.userRoles.patch",
-          "path": "userprofiles/{profileId}/userRoles",
-          "request": {
-            "$ref": "UserRole"
-          }
-        },
-        "insert": {
-          "httpMethod": "POST",
-          "description": "Inserts a new user role.",
-          "request": {
-            "$ref": "UserRole"
-          },
-          "flatPath": "userprofiles/{profileId}/userRoles",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.userRoles.insert",
-          "response": {
-            "$ref": "UserRole"
-          },
-          "path": "userprofiles/{profileId}/userRoles",
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "delete": {
-          "id": "dfareporting.userRoles.delete",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "path": "userprofiles/{profileId}/userRoles/{id}",
-          "httpMethod": "DELETE",
-          "flatPath": "userprofiles/{profileId}/userRoles/{id}",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "id": {
-              "required": true,
-              "description": "User role ID.",
-              "location": "path",
-              "type": "string",
-              "format": "int64"
-            },
-            "profileId": {
-              "format": "int64",
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "description": "Deletes an existing user role."
-        }
-      }
-    },
-    "sizes": {
-      "methods": {
-        "get": {
-          "flatPath": "userprofiles/{profileId}/sizes/{id}",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "path": "userprofiles/{profileId}/sizes/{id}",
-          "parameters": {
-            "id": {
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "description": "Size ID.",
-              "location": "path"
-            },
-            "profileId": {
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "response": {
-            "$ref": "Size"
-          },
-          "httpMethod": "GET",
-          "id": "dfareporting.sizes.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Gets one size by ID."
-        },
-        "list": {
-          "description": "Retrieves a list of sizes, possibly filtered. Retrieved sizes are globally unique and may include values not currently in use by your account. Due to this, the list of sizes returned by this method may differ from the list seen in the Trafficking UI.",
-          "path": "userprofiles/{profileId}/sizes",
-          "flatPath": "userprofiles/{profileId}/sizes",
-          "id": "dfareporting.sizes.list",
-          "response": {
-            "$ref": "SizesListResponse"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "width": {
-              "location": "query",
-              "type": "integer",
-              "maximum": "32767",
-              "description": "Select only sizes with this width.",
-              "minimum": "0",
-              "format": "int32"
-            },
-            "ids": {
-              "description": "Select only sizes with these IDs.",
-              "format": "int64",
-              "location": "query",
-              "type": "string",
-              "repeated": true
-            },
-            "profileId": {
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "required": true,
-              "description": "User profile ID associated with this request."
-            },
-            "iabStandard": {
-              "description": "Select only IAB standard sizes.",
-              "location": "query",
-              "type": "boolean"
-            },
-            "height": {
-              "minimum": "0",
-              "location": "query",
-              "type": "integer",
-              "format": "int32",
-              "maximum": "32767",
-              "description": "Select only sizes with this height."
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET"
-        },
-        "insert": {
-          "path": "userprofiles/{profileId}/sizes",
-          "response": {
-            "$ref": "Size"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "request": {
-            "$ref": "Size"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "POST",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "type": "string"
-            }
-          },
-          "id": "dfareporting.sizes.insert",
-          "flatPath": "userprofiles/{profileId}/sizes",
-          "description": "Inserts a new size."
-        }
-      }
-    },
-    "placements": {
-      "methods": {
-        "insert": {
-          "path": "userprofiles/{profileId}/placements",
-          "httpMethod": "POST",
-          "request": {
-            "$ref": "Placement"
-          },
-          "id": "dfareporting.placements.insert",
-          "description": "Inserts a new placement.",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "type": "string",
-              "format": "int64"
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/placements",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "Placement"
-          }
-        },
-        "generatetags": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "response": {
-            "$ref": "PlacementsGenerateTagsResponse"
-          },
-          "id": "dfareporting.placements.generatetags",
-          "httpMethod": "POST",
-          "path": "userprofiles/{profileId}/placements/generatetags",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Generates tags for a placement.",
-          "flatPath": "userprofiles/{profileId}/placements/generatetags",
-          "parameters": {
-            "tagFormats": {
-              "description": "Tag formats to generate for these placements. *Note:* PLACEMENT_TAG_STANDARD can only be generated for 1x1 placements.",
-              "type": "string",
-              "location": "query",
-              "repeated": true,
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                ""
-              ],
-              "enum": [
-                "PLACEMENT_TAG_STANDARD",
-                "PLACEMENT_TAG_IFRAME_JAVASCRIPT",
-                "PLACEMENT_TAG_IFRAME_ILAYER",
-                "PLACEMENT_TAG_INTERNAL_REDIRECT",
-                "PLACEMENT_TAG_JAVASCRIPT",
-                "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT",
-                "PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT",
-                "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT",
-                "PLACEMENT_TAG_CLICK_COMMANDS",
-                "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH",
-                "PLACEMENT_TAG_TRACKING",
-                "PLACEMENT_TAG_TRACKING_IFRAME",
-                "PLACEMENT_TAG_TRACKING_JAVASCRIPT",
-                "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_3",
-                "PLACEMENT_TAG_IFRAME_JAVASCRIPT_LEGACY",
-                "PLACEMENT_TAG_JAVASCRIPT_LEGACY",
-                "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT_LEGACY",
-                "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT_LEGACY",
-                "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_4"
-              ]
-            },
-            "campaignId": {
-              "location": "query",
-              "format": "int64",
-              "description": "Generate placements belonging to this campaign. This is a required field.",
-              "type": "string"
-            },
-            "placementIds": {
-              "description": "Generate tags for these placements.",
-              "repeated": true,
-              "format": "int64",
-              "type": "string",
-              "location": "query"
-            },
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "location": "path",
-              "format": "int64"
-            }
-          }
-        },
-        "get": {
-          "flatPath": "userprofiles/{profileId}/placements/{id}",
-          "path": "userprofiles/{profileId}/placements/{id}",
-          "id": "dfareporting.placements.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "id": {
-              "type": "string",
-              "location": "path",
-              "format": "int64",
-              "required": true,
-              "description": "Placement ID."
-            },
-            "profileId": {
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "format": "int64",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "response": {
-            "$ref": "Placement"
-          },
-          "httpMethod": "GET",
-          "description": "Gets one placement by ID."
-        },
-        "update": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Updates an existing placement.",
-          "request": {
-            "$ref": "Placement"
-          },
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/placements",
-          "httpMethod": "PUT",
-          "flatPath": "userprofiles/{profileId}/placements",
-          "id": "dfareporting.placements.update",
-          "response": {
-            "$ref": "Placement"
-          }
-        },
-        "list": {
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "advertiserIds": {
-              "format": "int64",
-              "location": "query",
-              "repeated": true,
-              "type": "string",
-              "description": "Select only placements that belong to these advertisers."
-            },
-            "pricingTypes": {
-              "description": "Select only placements with these pricing types.",
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                "",
-                "",
-                ""
-              ],
-              "type": "string",
-              "enum": [
-                "PRICING_TYPE_CPM",
-                "PRICING_TYPE_CPC",
-                "PRICING_TYPE_CPA",
-                "PRICING_TYPE_FLAT_RATE_IMPRESSIONS",
-                "PRICING_TYPE_FLAT_RATE_CLICKS",
-                "PRICING_TYPE_CPM_ACTIVEVIEW"
-              ],
-              "repeated": true
-            },
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "type": "string"
-            },
-            "campaignIds": {
-              "format": "int64",
-              "type": "string",
-              "description": "Select only placements that belong to these campaigns.",
-              "location": "query",
-              "repeated": true
-            },
-            "paymentSource": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "type": "string",
-              "enum": [
-                "PLACEMENT_AGENCY_PAID",
-                "PLACEMENT_PUBLISHER_PAID"
-              ],
-              "description": "Select only placements with this payment source."
-            },
-            "sortField": {
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Field by which to sort the list.",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "location": "query",
-              "default": "ID"
-            },
-            "minEndDate": {
-              "location": "query",
-              "description": "Select only placements or placement groups whose end date is on or after the specified minEndDate. The date should be formatted as \"yyyy-MM-dd\".",
-              "type": "string"
-            },
-            "placementStrategyIds": {
-              "description": "Select only placements that are associated with these placement strategies.",
-              "type": "string",
-              "repeated": true,
-              "format": "int64",
-              "location": "query"
-            },
-            "compatibilities": {
-              "type": "string",
-              "description": "Select only placements that are associated with these compatibilities. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are for rendering in mobile apps. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard.",
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                "",
-                "",
-                ""
-              ],
-              "enum": [
-                "DISPLAY",
-                "DISPLAY_INTERSTITIAL",
-                "APP",
-                "APP_INTERSTITIAL",
-                "IN_STREAM_VIDEO",
-                "IN_STREAM_AUDIO"
-              ],
-              "location": "query",
-              "repeated": true
-            },
-            "groupIds": {
-              "location": "query",
-              "description": "Select only placements that belong to these placement groups.",
-              "format": "int64",
-              "repeated": true,
-              "type": "string"
-            },
-            "maxEndDate": {
-              "location": "query",
-              "description": "Select only placements or placement groups whose end date is on or before the specified maxEndDate. The date should be formatted as \"yyyy-MM-dd\".",
-              "type": "string"
-            },
-            "ids": {
-              "location": "query",
-              "repeated": true,
-              "format": "int64",
-              "description": "Select only placements with these IDs.",
-              "type": "string"
-            },
-            "archived": {
-              "description": "Select only archived placements. Don't set this field to select both archived and non-archived placements.",
-              "type": "boolean",
-              "location": "query"
-            },
-            "sortOrder": {
-              "type": "string",
-              "location": "query",
-              "default": "ASCENDING",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Order of sorted results.",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ]
-            },
-            "maxResults": {
-              "default": "1000",
-              "minimum": "0",
-              "location": "query",
-              "type": "integer",
-              "format": "int32",
-              "description": "Maximum number of results to return.",
-              "maximum": "1000"
-            },
-            "minStartDate": {
-              "description": "Select only placements or placement groups whose start date is on or after the specified minStartDate. The date should be formatted as \"yyyy-MM-dd\".",
-              "location": "query",
-              "type": "string"
-            },
-            "siteIds": {
-              "description": "Select only placements that are associated with these sites.",
-              "type": "string",
-              "location": "query",
-              "repeated": true,
-              "format": "int64"
-            },
-            "maxStartDate": {
-              "type": "string",
-              "description": "Select only placements or placement groups whose start date is on or before the specified maxStartDate. The date should be formatted as \"yyyy-MM-dd\".",
-              "location": "query"
-            },
-            "contentCategoryIds": {
-              "description": "Select only placements that are associated with these content categories.",
-              "format": "int64",
-              "repeated": true,
-              "location": "query",
-              "type": "string"
-            },
-            "directorySiteIds": {
-              "location": "query",
-              "description": "Select only placements that are associated with these directory sites.",
-              "format": "int64",
-              "type": "string",
-              "repeated": true
-            },
-            "pageToken": {
-              "location": "query",
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page."
-            },
-            "searchString": {
-              "location": "query",
-              "description": "Allows searching for placements by name or ID. Wildcards (*) are allowed. For example, \"placement*2015\" will return placements with names like \"placement June 2015\", \"placement May 2015\", or simply \"placements 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"placement\" will match placements with name \"my placement\", \"placement 2015\", or simply \"placement\" .",
-              "type": "string"
-            },
-            "sizeIds": {
-              "description": "Select only placements that are associated with these sizes.",
-              "format": "int64",
-              "location": "query",
-              "repeated": true,
-              "type": "string"
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/placements",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "PlacementsListResponse"
-          },
-          "id": "dfareporting.placements.list",
-          "path": "userprofiles/{profileId}/placements",
-          "description": "Retrieves a list of placements, possibly filtered. This method supports paging."
-        },
-        "patch": {
-          "description": "Updates an existing placement. This method supports patch semantics.",
-          "httpMethod": "PATCH",
-          "path": "userprofiles/{profileId}/placements",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "format": "int64"
-            },
-            "id": {
-              "format": "int64",
-              "required": true,
-              "type": "string",
-              "location": "query",
-              "description": "Placement ID."
-            }
-          },
-          "request": {
-            "$ref": "Placement"
-          },
-          "id": "dfareporting.placements.patch",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "Placement"
-          },
-          "flatPath": "userprofiles/{profileId}/placements",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        }
-      }
-    },
-    "mobileCarriers": {
-      "methods": {
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/mobileCarriers",
-          "path": "userprofiles/{profileId}/mobileCarriers",
-          "description": "Retrieves a list of mobile carriers.",
-          "id": "dfareporting.mobileCarriers.list",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "required": true,
-              "location": "path",
-              "type": "string"
-            }
-          },
-          "response": {
-            "$ref": "MobileCarriersListResponse"
-          }
-        },
-        "get": {
-          "description": "Gets one mobile carrier by ID.",
-          "path": "userprofiles/{profileId}/mobileCarriers/{id}",
-          "parameters": {
-            "id": {
-              "required": true,
-              "format": "int64",
-              "description": "Mobile carrier ID.",
-              "location": "path",
-              "type": "string"
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "format": "int64"
-            }
-          },
-          "response": {
-            "$ref": "MobileCarrier"
-          },
-          "id": "dfareporting.mobileCarriers.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/mobileCarriers/{id}",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        }
-      }
-    },
-    "platformTypes": {
-      "methods": {
-        "get": {
-          "description": "Gets one platform type by ID.",
-          "id": "dfareporting.platformTypes.get",
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "flatPath": "userprofiles/{profileId}/platformTypes/{id}",
-          "response": {
-            "$ref": "PlatformType"
-          },
-          "parameters": {
-            "id": {
-              "type": "string",
-              "format": "int64",
-              "description": "Platform type ID.",
-              "required": true,
-              "location": "path"
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "format": "int64"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/platformTypes/{id}"
-        },
-        "list": {
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/platformTypes",
-          "response": {
-            "$ref": "PlatformTypesListResponse"
-          },
-          "httpMethod": "GET",
-          "id": "dfareporting.platformTypes.list",
-          "path": "userprofiles/{profileId}/platformTypes",
-          "description": "Retrieves a list of platform types.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ]
-        }
-      }
-    },
-    "orders": {
-      "methods": {
-        "list": {
-          "flatPath": "userprofiles/{profileId}/projects/{projectId}/orders",
-          "parameterOrder": [
-            "profileId",
-            "projectId"
-          ],
-          "id": "dfareporting.orders.list",
-          "parameters": {
-            "pageToken": {
-              "location": "query",
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page."
-            },
-            "searchString": {
-              "location": "query",
-              "description": "Allows searching for orders by name or ID. Wildcards (*) are allowed. For example, \"order*2015\" will return orders with names like \"order June 2015\", \"order April 2015\", or simply \"order 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"order\" will match orders with name \"my order\", \"order 2015\", or simply \"order\".",
-              "type": "string"
-            },
-            "sortOrder": {
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "description": "Order of sorted results.",
-              "default": "ASCENDING",
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "type": "string"
-            },
-            "sortField": {
-              "type": "string",
-              "default": "ID",
-              "description": "Field by which to sort the list.",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "enum": [
-                "ID",
-                "NAME"
-              ]
-            },
-            "siteId": {
-              "description": "Select only orders that are associated with these site IDs.",
-              "type": "string",
-              "format": "int64",
-              "location": "query",
-              "repeated": true
-            },
-            "maxResults": {
-              "location": "query",
-              "maximum": "1000",
-              "type": "integer",
-              "description": "Maximum number of results to return.",
-              "default": "1000",
-              "minimum": "0",
-              "format": "int32"
-            },
-            "ids": {
-              "repeated": true,
-              "description": "Select only orders with these IDs.",
-              "format": "int64",
-              "type": "string",
-              "location": "query"
-            },
-            "projectId": {
-              "format": "int64",
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "description": "Project ID for orders."
-            },
-            "profileId": {
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string"
-            }
-          },
-          "description": "Retrieves a list of orders, possibly filtered. This method supports paging.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/projects/{projectId}/orders",
-          "response": {
-            "$ref": "OrdersListResponse"
-          }
-        },
-        "get": {
-          "parameterOrder": [
-            "profileId",
-            "projectId",
-            "id"
-          ],
-          "flatPath": "userprofiles/{profileId}/projects/{projectId}/orders/{id}",
-          "path": "userprofiles/{profileId}/projects/{projectId}/orders/{id}",
-          "id": "dfareporting.orders.get",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true
-            },
-            "id": {
-              "location": "path",
-              "required": true,
-              "description": "Order ID.",
-              "format": "int64",
-              "type": "string"
-            },
-            "projectId": {
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "required": true,
-              "description": "Project ID for orders."
-            }
-          },
-          "description": "Gets one order by ID.",
-          "response": {
-            "$ref": "Order"
-          },
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        }
-      }
-    },
-    "accountPermissions": {
-      "methods": {
-        "get": {
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "AccountPermission"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "path": "userprofiles/{profileId}/accountPermissions/{id}",
-          "description": "Gets one account permission by ID.",
-          "flatPath": "userprofiles/{profileId}/accountPermissions/{id}",
-          "id": "dfareporting.accountPermissions.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "description": "User profile ID associated with this request."
-            },
-            "id": {
-              "description": "Account permission ID.",
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "format": "int64"
-            }
-          }
-        },
-        "list": {
-          "flatPath": "userprofiles/{profileId}/accountPermissions",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.accountPermissions.list",
-          "response": {
-            "$ref": "AccountPermissionsListResponse"
-          },
-          "path": "userprofiles/{profileId}/accountPermissions",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Retrieves the list of account permissions.",
-          "httpMethod": "GET",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "format": "int64"
-            }
-          }
-        }
-      }
-    },
-    "advertisers": {
-      "methods": {
-        "patch": {
-          "description": "Updates an existing advertiser. This method supports patch semantics.",
-          "id": "dfareporting.advertisers.patch",
-          "request": {
-            "$ref": "Advertiser"
-          },
-          "httpMethod": "PATCH",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            },
-            "id": {
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "description": "Advertiser ID.",
-              "location": "query"
-            }
-          },
-          "path": "userprofiles/{profileId}/advertisers",
-          "flatPath": "userprofiles/{profileId}/advertisers",
-          "response": {
-            "$ref": "Advertiser"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "get": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "type": "string",
-              "format": "int64"
-            },
-            "id": {
-              "required": true,
-              "type": "string",
-              "description": "Advertiser ID.",
-              "location": "path",
-              "format": "int64"
-            }
-          },
-          "httpMethod": "GET",
-          "description": "Gets one advertiser by ID.",
-          "path": "userprofiles/{profileId}/advertisers/{id}",
-          "flatPath": "userprofiles/{profileId}/advertisers/{id}",
-          "response": {
-            "$ref": "Advertiser"
-          },
-          "id": "dfareporting.advertisers.get"
-        },
-        "insert": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "POST",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "required": true
-            }
-          },
-          "description": "Inserts a new advertiser.",
-          "request": {
-            "$ref": "Advertiser"
-          },
-          "id": "dfareporting.advertisers.insert",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "flatPath": "userprofiles/{profileId}/advertisers",
-          "response": {
-            "$ref": "Advertiser"
-          },
-          "path": "userprofiles/{profileId}/advertisers"
-        },
-        "list": {
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "sortOrder": {
-              "location": "query",
-              "type": "string",
-              "default": "ASCENDING",
-              "description": "Order of sorted results.",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "type": "string"
-            },
-            "status": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "enum": [
-                "APPROVED",
-                "ON_HOLD"
-              ],
-              "type": "string",
-              "description": "Select only advertisers with the specified status."
-            },
-            "sortField": {
-              "description": "Field by which to sort the list.",
-              "default": "ID",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query"
-            },
-            "advertiserGroupIds": {
-              "type": "string",
-              "format": "int64",
-              "location": "query",
-              "repeated": true,
-              "description": "Select only advertisers with these advertiser group IDs."
-            },
-            "subaccountId": {
-              "location": "query",
-              "format": "int64",
-              "type": "string",
-              "description": "Select only advertisers with these subaccount IDs."
-            },
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page."
-            },
-            "floodlightConfigurationIds": {
-              "location": "query",
-              "description": "Select only advertisers with these floodlight configuration IDs.",
-              "format": "int64",
-              "type": "string",
-              "repeated": true
-            },
-            "includeAdvertisersWithoutGroupsOnly": {
-              "type": "boolean",
-              "location": "query",
-              "description": "Select only advertisers which do not belong to any advertiser group."
-            },
-            "onlyParent": {
-              "description": "Select only advertisers which use another advertiser's floodlight configuration.",
-              "type": "boolean",
-              "location": "query"
-            },
-            "searchString": {
-              "location": "query",
-              "type": "string",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"advertiser*2015\" will return objects with names like \"advertiser June 2015\", \"advertiser April 2015\", or simply \"advertiser 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"advertiser\" will match objects with name \"my advertiser\", \"advertiser 2015\", or simply \"advertiser\" ."
-            },
-            "maxResults": {
-              "type": "integer",
-              "minimum": "0",
-              "maximum": "1000",
-              "description": "Maximum number of results to return.",
-              "format": "int32",
-              "default": "1000",
-              "location": "query"
-            },
-            "ids": {
-              "format": "int64",
-              "repeated": true,
-              "type": "string",
-              "location": "query",
-              "description": "Select only advertisers with these IDs."
-            }
-          },
-          "description": "Retrieves a list of advertisers, possibly filtered. This method supports paging.",
-          "path": "userprofiles/{profileId}/advertisers",
-          "response": {
-            "$ref": "AdvertisersListResponse"
-          },
-          "id": "dfareporting.advertisers.list",
-          "flatPath": "userprofiles/{profileId}/advertisers",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "update": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Updates an existing advertiser.",
-          "request": {
-            "$ref": "Advertiser"
-          },
-          "path": "userprofiles/{profileId}/advertisers",
-          "httpMethod": "PUT",
-          "flatPath": "userprofiles/{profileId}/advertisers",
-          "response": {
-            "$ref": "Advertiser"
-          },
-          "id": "dfareporting.advertisers.update",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64",
-              "type": "string"
-            }
-          }
-        }
-      }
-    },
-    "connectionTypes": {
-      "methods": {
-        "get": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Gets one connection type by ID.",
-          "id": "dfareporting.connectionTypes.get",
-          "flatPath": "userprofiles/{profileId}/connectionTypes/{id}",
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "path": "userprofiles/{profileId}/connectionTypes/{id}",
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "location": "path",
-              "required": true
-            },
-            "id": {
-              "format": "int64",
-              "location": "path",
-              "required": true,
-              "description": "Connection type ID.",
-              "type": "string"
-            }
-          },
-          "response": {
-            "$ref": "ConnectionType"
-          }
-        },
-        "list": {
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64"
-            }
-          },
-          "httpMethod": "GET",
-          "id": "dfareporting.connectionTypes.list",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/connectionTypes",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Retrieves a list of connection types.",
-          "response": {
-            "$ref": "ConnectionTypesListResponse"
-          },
-          "flatPath": "userprofiles/{profileId}/connectionTypes"
-        }
-      }
-    },
-    "advertiserGroups": {
-      "methods": {
-        "patch": {
-          "response": {
-            "$ref": "AdvertiserGroup"
-          },
-          "id": "dfareporting.advertiserGroups.patch",
-          "request": {
-            "$ref": "AdvertiserGroup"
-          },
-          "parameters": {
-            "id": {
-              "format": "int64",
-              "type": "string",
-              "description": "AdvertiserGroup ID.",
-              "required": true,
-              "location": "query"
-            },
-            "profileId": {
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "format": "int64",
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "description": "Updates an existing advertiser group. This method supports patch semantics.",
-          "path": "userprofiles/{profileId}/advertiserGroups",
-          "httpMethod": "PATCH",
-          "flatPath": "userprofiles/{profileId}/advertiserGroups"
-        },
-        "get": {
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "description": "Gets one advertiser group by ID.",
-          "response": {
-            "$ref": "AdvertiserGroup"
-          },
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.advertiserGroups.get",
-          "path": "userprofiles/{profileId}/advertiserGroups/{id}",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "location": "path"
-            },
-            "id": {
-              "location": "path",
-              "description": "Advertiser group ID.",
-              "format": "int64",
-              "type": "string",
-              "required": true
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/advertiserGroups/{id}"
-        },
-        "list": {
-          "path": "userprofiles/{profileId}/advertiserGroups",
-          "parameters": {
-            "sortField": {
-              "type": "string",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "description": "Field by which to sort the list.",
-              "location": "query",
-              "default": "ID",
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            },
-            "pageToken": {
-              "description": "Value of the nextPageToken from the previous result page.",
-              "type": "string",
-              "location": "query"
-            },
-            "ids": {
-              "type": "string",
-              "format": "int64",
-              "location": "query",
-              "repeated": true,
-              "description": "Select only advertiser groups with these IDs."
-            },
-            "maxResults": {
-              "location": "query",
-              "format": "int32",
-              "type": "integer",
-              "description": "Maximum number of results to return.",
-              "default": "1000",
-              "minimum": "0",
-              "maximum": "1000"
-            },
-            "sortOrder": {
-              "type": "string",
-              "default": "ASCENDING",
-              "location": "query",
-              "description": "Order of sorted results.",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            },
-            "searchString": {
-              "location": "query",
-              "type": "string",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"advertiser*2015\" will return objects with names like \"advertiser group June 2015\", \"advertiser group April 2015\", or simply \"advertiser group 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"advertisergroup\" will match objects with name \"my advertisergroup\", \"advertisergroup 2015\", or simply \"advertisergroup\"."
-            },
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "AdvertiserGroupsListResponse"
-          },
-          "flatPath": "userprofiles/{profileId}/advertiserGroups",
-          "id": "dfareporting.advertiserGroups.list",
-          "description": "Retrieves a list of advertiser groups, possibly filtered. This method supports paging.",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "httpMethod": "GET"
-        },
-        "delete": {
-          "httpMethod": "DELETE",
-          "flatPath": "userprofiles/{profileId}/advertiserGroups/{id}",
-          "id": "dfareporting.advertiserGroups.delete",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "location": "path"
-            },
-            "id": {
-              "format": "int64",
-              "type": "string",
-              "location": "path",
-              "description": "Advertiser group ID.",
-              "required": true
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/advertiserGroups/{id}",
-          "description": "Deletes an existing advertiser group."
-        },
-        "update": {
-          "response": {
-            "$ref": "AdvertiserGroup"
-          },
-          "path": "userprofiles/{profileId}/advertiserGroups",
-          "request": {
-            "$ref": "AdvertiserGroup"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/advertiserGroups",
-          "httpMethod": "PUT",
-          "id": "dfareporting.advertiserGroups.update",
-          "description": "Updates an existing advertiser group.",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            }
-          }
-        },
-        "insert": {
-          "request": {
-            "$ref": "AdvertiserGroup"
-          },
-          "response": {
-            "$ref": "AdvertiserGroup"
-          },
-          "httpMethod": "POST",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "format": "int64",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.advertiserGroups.insert",
-          "description": "Inserts a new advertiser group.",
-          "path": "userprofiles/{profileId}/advertiserGroups",
-          "flatPath": "userprofiles/{profileId}/advertiserGroups"
-        }
-      }
-    },
-    "accounts": {
-      "methods": {
-        "get": {
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "type": "string"
-            },
-            "id": {
-              "format": "int64",
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "description": "Account ID."
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "id": "dfareporting.accounts.get",
-          "description": "Gets one account by ID.",
-          "flatPath": "userprofiles/{profileId}/accounts/{id}",
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/accounts/{id}",
-          "response": {
-            "$ref": "Account"
-          }
-        },
-        "list": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "sortField": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "type": "string",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "description": "Field by which to sort the list.",
-              "location": "query",
-              "default": "ID"
-            },
-            "profileId": {
-              "format": "int64",
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            },
-            "maxResults": {
-              "minimum": "0",
-              "default": "1000",
-              "format": "int32",
-              "maximum": "1000",
-              "type": "integer",
-              "location": "query",
-              "description": "Maximum number of results to return."
-            },
-            "ids": {
-              "location": "query",
-              "description": "Select only accounts with these IDs.",
-              "format": "int64",
-              "repeated": true,
-              "type": "string"
-            },
-            "active": {
-              "location": "query",
-              "description": "Select only active accounts. Don't set this field to select both active and non-active accounts.",
-              "type": "boolean"
-            },
-            "searchString": {
-              "type": "string",
-              "location": "query",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"account*2015\" will return objects with names like \"account June 2015\", \"account April 2015\", or simply \"account 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"account\" will match objects with name \"my account\", \"account 2015\", or simply \"account\"."
-            },
-            "sortOrder": {
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "default": "ASCENDING",
-              "description": "Order of sorted results.",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "type": "string"
-            },
-            "pageToken": {
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query",
-              "type": "string"
-            }
-          },
-          "description": "Retrieves the list of accounts, possibly filtered. This method supports paging.",
-          "flatPath": "userprofiles/{profileId}/accounts",
-          "response": {
-            "$ref": "AccountsListResponse"
-          },
-          "path": "userprofiles/{profileId}/accounts",
-          "id": "dfareporting.accounts.list"
-        },
-        "patch": {
-          "httpMethod": "PATCH",
-          "request": {
-            "$ref": "Account"
-          },
-          "path": "userprofiles/{profileId}/accounts",
-          "flatPath": "userprofiles/{profileId}/accounts",
-          "parameters": {
-            "id": {
-              "required": true,
-              "description": "Account ID.",
-              "format": "int64",
-              "type": "string",
-              "location": "query"
-            },
-            "profileId": {
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "id": "dfareporting.accounts.patch",
-          "response": {
-            "$ref": "Account"
-          },
-          "description": "Updates an existing account. This method supports patch semantics.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        },
-        "update": {
-          "flatPath": "userprofiles/{profileId}/accounts",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "format": "int64"
-            }
-          },
-          "id": "dfareporting.accounts.update",
-          "description": "Updates an existing account.",
-          "response": {
-            "$ref": "Account"
-          },
-          "request": {
-            "$ref": "Account"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/accounts",
-          "httpMethod": "PUT",
-          "parameterOrder": [
-            "profileId"
-          ]
-        }
-      }
-    },
-    "sites": {
-      "methods": {
-        "update": {
-          "description": "Updates an existing site.",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "response": {
-            "$ref": "Site"
-          },
-          "flatPath": "userprofiles/{profileId}/sites",
-          "path": "userprofiles/{profileId}/sites",
-          "httpMethod": "PUT",
-          "request": {
-            "$ref": "Site"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.sites.update"
-        },
-        "get": {
-          "flatPath": "userprofiles/{profileId}/sites/{id}",
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.sites.get",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "format": "int64"
-            },
-            "id": {
-              "type": "string",
-              "description": "Site ID.",
-              "format": "int64",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "description": "Gets one site by ID.",
-          "response": {
-            "$ref": "Site"
-          },
-          "path": "userprofiles/{profileId}/sites/{id}",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        },
-        "patch": {
-          "description": "Updates an existing site. This method supports patch semantics.",
-          "id": "dfareporting.sites.patch",
-          "parameters": {
-            "id": {
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "description": "Site ID.",
-              "location": "query"
-            },
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64"
-            }
-          },
-          "response": {
-            "$ref": "Site"
-          },
-          "httpMethod": "PATCH",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "flatPath": "userprofiles/{profileId}/sites",
-          "path": "userprofiles/{profileId}/sites",
-          "request": {
-            "$ref": "Site"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Retrieves a list of sites, possibly filtered. This method supports paging.",
-          "path": "userprofiles/{profileId}/sites",
-          "httpMethod": "GET",
-          "id": "dfareporting.sites.list",
-          "parameters": {
-            "sortOrder": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "default": "ASCENDING",
-              "location": "query",
-              "type": "string",
-              "description": "Order of sorted results.",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ]
-            },
-            "campaignIds": {
-              "format": "int64",
-              "location": "query",
-              "description": "Select only sites with these campaign IDs.",
-              "repeated": true,
-              "type": "string"
-            },
-            "directorySiteIds": {
-              "type": "string",
-              "repeated": true,
-              "location": "query",
-              "format": "int64",
-              "description": "Select only sites with these directory site IDs."
-            },
-            "approved": {
-              "type": "boolean",
-              "description": "Select only approved sites.",
-              "location": "query"
-            },
-            "maxResults": {
-              "minimum": "0",
-              "maximum": "1000",
-              "description": "Maximum number of results to return.",
-              "format": "int32",
-              "default": "1000",
-              "location": "query",
-              "type": "integer"
-            },
-            "profileId": {
-              "format": "int64",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "location": "path"
-            },
-            "sortField": {
-              "description": "Field by which to sort the list.",
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "type": "string",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "default": "ID"
-            },
-            "subaccountId": {
-              "location": "query",
-              "type": "string",
-              "description": "Select only sites with this subaccount ID.",
-              "format": "int64"
-            },
-            "ids": {
-              "format": "int64",
-              "type": "string",
-              "description": "Select only sites with these IDs.",
-              "repeated": true,
-              "location": "query"
-            },
-            "adWordsSite": {
-              "description": "Select only AdWords sites.",
-              "type": "boolean",
-              "location": "query"
-            },
-            "acceptsPublisherPaidPlacements": {
-              "type": "boolean",
-              "location": "query",
-              "description": "Select only sites that accept publisher paid placements."
-            },
-            "acceptsInStreamVideoPlacements": {
-              "location": "query",
-              "description": "This search filter is no longer supported and will have no effect on the results returned.",
-              "type": "boolean"
-            },
-            "searchString": {
-              "description": "Allows searching for objects by name, ID or keyName. Wildcards (*) are allowed. For example, \"site*2015\" will return objects with names like \"site June 2015\", \"site April 2015\", or simply \"site 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"site\" will match objects with name \"my site\", \"site 2015\", or simply \"site\".",
-              "location": "query",
-              "type": "string"
-            },
-            "acceptsInterstitialPlacements": {
-              "location": "query",
-              "type": "boolean",
-              "description": "This search filter is no longer supported and will have no effect on the results returned."
-            },
-            "unmappedSite": {
-              "description": "Select only sites that have not been mapped to a directory site.",
-              "location": "query",
-              "type": "boolean"
-            },
-            "pageToken": {
-              "description": "Value of the nextPageToken from the previous result page.",
-              "type": "string",
-              "location": "query"
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "flatPath": "userprofiles/{profileId}/sites",
-          "response": {
-            "$ref": "SitesListResponse"
-          }
-        },
-        "insert": {
-          "id": "dfareporting.sites.insert",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "flatPath": "userprofiles/{profileId}/sites",
-          "path": "userprofiles/{profileId}/sites",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "type": "string",
-              "location": "path",
-              "required": true
-            }
-          },
-          "response": {
-            "$ref": "Site"
-          },
-          "description": "Inserts a new site.",
-          "httpMethod": "POST",
-          "request": {
-            "$ref": "Site"
-          }
-        }
-      }
-    },
-    "floodlightActivities": {
-      "methods": {
-        "update": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/floodlightActivities",
-          "id": "dfareporting.floodlightActivities.update",
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "format": "int64",
-              "required": true,
-              "location": "path",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "httpMethod": "PUT",
-          "path": "userprofiles/{profileId}/floodlightActivities",
-          "response": {
-            "$ref": "FloodlightActivity"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Updates an existing floodlight activity.",
-          "request": {
-            "$ref": "FloodlightActivity"
-          }
-        },
-        "list": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "flatPath": "userprofiles/{profileId}/floodlightActivities",
-          "response": {
-            "$ref": "FloodlightActivitiesListResponse"
-          },
-          "id": "dfareporting.floodlightActivities.list",
-          "parameters": {
-            "floodlightActivityGroupName": {
-              "description": "Select only floodlight activities with the specified floodlight activity group name.",
-              "location": "query",
-              "type": "string"
-            },
-            "sortField": {
-              "description": "Field by which to sort the list.",
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "default": "ID",
-              "type": "string",
-              "enum": [
-                "ID",
-                "NAME"
-              ]
-            },
-            "pageToken": {
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query",
-              "type": "string"
-            },
-            "floodlightActivityGroupIds": {
-              "location": "query",
-              "format": "int64",
-              "repeated": true,
-              "type": "string",
-              "description": "Select only floodlight activities with the specified floodlight activity group IDs."
-            },
-            "advertiserId": {
-              "format": "int64",
-              "location": "query",
-              "description": "Select only floodlight activities for the specified advertiser ID. Must specify either ids, advertiserId, or floodlightConfigurationId for a non-empty result.",
-              "type": "string"
-            },
-            "maxResults": {
-              "maximum": "1000",
-              "minimum": "0",
-              "default": "1000",
-              "format": "int32",
-              "type": "integer",
-              "description": "Maximum number of results to return.",
-              "location": "query"
-            },
-            "searchString": {
-              "type": "string",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"floodlightactivity*2015\" will return objects with names like \"floodlightactivity June 2015\", \"floodlightactivity April 2015\", or simply \"floodlightactivity 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"floodlightactivity\" will match objects with name \"my floodlightactivity activity\", \"floodlightactivity 2015\", or simply \"floodlightactivity\".",
-              "location": "query"
-            },
-            "floodlightConfigurationId": {
-              "description": "Select only floodlight activities for the specified floodlight configuration ID. Must specify either ids, advertiserId, or floodlightConfigurationId for a non-empty result.",
-              "location": "query",
-              "format": "int64",
-              "type": "string"
-            },
-            "floodlightActivityGroupTagString": {
-              "location": "query",
-              "type": "string",
-              "description": "Select only floodlight activities with the specified floodlight activity group tag string."
-            },
-            "floodlightActivityGroupType": {
-              "description": "Select only floodlight activities with the specified floodlight activity group type.",
-              "type": "string",
-              "enum": [
-                "COUNTER",
-                "SALE"
-              ],
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            },
-            "profileId": {
-              "type": "string",
-              "format": "int64",
-              "required": true,
-              "location": "path",
-              "description": "User profile ID associated with this request."
-            },
-            "sortOrder": {
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Order of sorted results.",
-              "default": "ASCENDING",
-              "type": "string",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ]
-            },
-            "tagString": {
-              "location": "query",
-              "description": "Select only floodlight activities with the specified tag string.",
-              "type": "string"
-            },
-            "ids": {
-              "format": "int64",
-              "type": "string",
-              "repeated": true,
-              "location": "query",
-              "description": "Select only floodlight activities with the specified IDs. Must specify either ids, advertiserId, or floodlightConfigurationId for a non-empty result."
-            }
-          },
-          "path": "userprofiles/{profileId}/floodlightActivities",
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Retrieves a list of floodlight activities, possibly filtered. This method supports paging."
-        },
-        "generatetag": {
-          "description": "Generates a tag for a floodlight activity.",
-          "id": "dfareporting.floodlightActivities.generatetag",
-          "httpMethod": "POST",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "description": "User profile ID associated with this request."
-            },
-            "floodlightActivityId": {
-              "format": "int64",
-              "location": "query",
-              "type": "string",
-              "description": "Floodlight activity ID for which we want to generate a tag."
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/floodlightActivities/generatetag",
-          "flatPath": "userprofiles/{profileId}/floodlightActivities/generatetag",
-          "response": {
-            "$ref": "FloodlightActivitiesGenerateTagResponse"
-          }
-        },
-        "delete": {
-          "description": "Deletes an existing floodlight activity.",
-          "path": "userprofiles/{profileId}/floodlightActivities/{id}",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "type": "string",
-              "required": true
-            },
-            "id": {
-              "format": "int64",
-              "description": "Floodlight activity ID.",
-              "location": "path",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "id": "dfareporting.floodlightActivities.delete",
-          "httpMethod": "DELETE",
-          "flatPath": "userprofiles/{profileId}/floodlightActivities/{id}"
-        },
-        "insert": {
-          "httpMethod": "POST",
-          "path": "userprofiles/{profileId}/floodlightActivities",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true,
-              "format": "int64"
-            }
-          },
-          "description": "Inserts a new floodlight activity.",
-          "flatPath": "userprofiles/{profileId}/floodlightActivities",
-          "id": "dfareporting.floodlightActivities.insert",
-          "request": {
-            "$ref": "FloodlightActivity"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "response": {
-            "$ref": "FloodlightActivity"
-          }
-        },
-        "get": {
-          "description": "Gets one floodlight activity by ID.",
-          "flatPath": "userprofiles/{profileId}/floodlightActivities/{id}",
-          "httpMethod": "GET",
-          "id": "dfareporting.floodlightActivities.get",
-          "parameters": {
-            "id": {
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "Floodlight activity ID."
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "type": "string"
-            }
-          },
-          "response": {
-            "$ref": "FloodlightActivity"
-          },
-          "path": "userprofiles/{profileId}/floodlightActivities/{id}",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        },
-        "patch": {
-          "parameters": {
-            "id": {
-              "type": "string",
-              "format": "int64",
-              "description": "FloodlightActivity ID.",
-              "location": "query",
-              "required": true
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "format": "int64"
-            }
-          },
-          "path": "userprofiles/{profileId}/floodlightActivities",
-          "flatPath": "userprofiles/{profileId}/floodlightActivities",
-          "httpMethod": "PATCH",
-          "response": {
-            "$ref": "FloodlightActivity"
-          },
-          "id": "dfareporting.floodlightActivities.patch",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "description": "Updates an existing floodlight activity. This method supports patch semantics.",
-          "request": {
-            "$ref": "FloodlightActivity"
-          }
-        }
-      }
-    },
-    "reports": {
-      "resources": {
-        "compatibleFields": {
-          "methods": {
-            "query": {
-              "flatPath": "userprofiles/{profileId}/reports/compatiblefields/query",
-              "path": "userprofiles/{profileId}/reports/compatiblefields/query",
-              "httpMethod": "POST",
-              "response": {
-                "$ref": "CompatibleFields"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/dfareporting"
-              ],
-              "description": "Returns the fields that are compatible to be selected in the respective sections of a report criteria, given the fields already selected in the input report and user permissions.",
-              "request": {
-                "$ref": "Report"
-              },
-              "parameters": {
-                "profileId": {
-                  "location": "path",
-                  "format": "int64",
-                  "required": true,
-                  "type": "string",
-                  "description": "The Campaign Manager 360 user profile ID."
+            "methods": {
+                "delete": {
+                    "description": "Deletes an existing content category.",
+                    "flatPath": "userprofiles/{profileId}/contentCategories/{id}",
+                    "httpMethod": "DELETE",
+                    "id": "dfareporting.contentCategories.delete",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Content category ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/contentCategories/{id}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "get": {
+                    "description": "Gets one content category by ID.",
+                    "flatPath": "userprofiles/{profileId}/contentCategories/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.contentCategories.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Content category ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/contentCategories/{id}",
+                    "response": {
+                        "$ref": "ContentCategory"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new content category.",
+                    "flatPath": "userprofiles/{profileId}/contentCategories",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.contentCategories.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/contentCategories",
+                    "request": {
+                        "$ref": "ContentCategory"
+                    },
+                    "response": {
+                        "$ref": "ContentCategory"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of content categories, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/contentCategories",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.contentCategories.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "ids": {
+                            "description": "Select only content categories with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"contentcategory*2015\" will return objects with names like \"contentcategory June 2015\", \"contentcategory April 2015\", or simply \"contentcategory 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"contentcategory\" will match objects with name \"my contentcategory\", \"contentcategory 2015\", or simply \"contentcategory\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/contentCategories",
+                    "response": {
+                        "$ref": "ContentCategoriesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing content category. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/contentCategories",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.contentCategories.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "ContentCategory ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/contentCategories",
+                    "request": {
+                        "$ref": "ContentCategory"
+                    },
+                    "response": {
+                        "$ref": "ContentCategory"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing content category.",
+                    "flatPath": "userprofiles/{profileId}/contentCategories",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.contentCategories.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/contentCategories",
+                    "request": {
+                        "$ref": "ContentCategory"
+                    },
+                    "response": {
+                        "$ref": "ContentCategory"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
                 }
-              },
-              "id": "dfareporting.reports.compatibleFields.query",
-              "parameterOrder": [
-                "profileId"
-              ]
             }
-          }
+        },
+        "conversions": {
+            "methods": {
+                "batchinsert": {
+                    "description": "Inserts conversions.",
+                    "flatPath": "userprofiles/{profileId}/conversions/batchinsert",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.conversions.batchinsert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/conversions/batchinsert",
+                    "request": {
+                        "$ref": "ConversionsBatchInsertRequest"
+                    },
+                    "response": {
+                        "$ref": "ConversionsBatchInsertResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ddmconversions"
+                    ]
+                },
+                "batchupdate": {
+                    "description": "Updates existing conversions.",
+                    "flatPath": "userprofiles/{profileId}/conversions/batchupdate",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.conversions.batchupdate",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/conversions/batchupdate",
+                    "request": {
+                        "$ref": "ConversionsBatchUpdateRequest"
+                    },
+                    "response": {
+                        "$ref": "ConversionsBatchUpdateResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ddmconversions"
+                    ]
+                }
+            }
+        },
+        "countries": {
+            "methods": {
+                "get": {
+                    "description": "Gets one country by ID.",
+                    "flatPath": "userprofiles/{profileId}/countries/{dartId}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.countries.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "dartId"
+                    ],
+                    "parameters": {
+                        "dartId": {
+                            "description": "Country DART ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/countries/{dartId}",
+                    "response": {
+                        "$ref": "Country"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of countries.",
+                    "flatPath": "userprofiles/{profileId}/countries",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.countries.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/countries",
+                    "response": {
+                        "$ref": "CountriesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "creativeAssets": {
+            "methods": {
+                "insert": {
+                    "description": "Inserts a new creative asset.",
+                    "flatPath": "userprofiles/{profileId}/creativeAssets/{advertiserId}/creativeAssets",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.creativeAssets.insert",
+                    "mediaUpload": {
+                        "accept": [
+                            "*/*"
+                        ],
+                        "maxSize": "1073741824",
+                        "protocols": {
+                            "simple": {
+                                "multipart": true,
+                                "path": "/upload/dfareporting/v3.3/userprofiles/{profileId}/creativeAssets/{advertiserId}/creativeAssets"
+                            }
+                        }
+                    },
+                    "parameterOrder": [
+                        "profileId",
+                        "advertiserId"
+                    ],
+                    "parameters": {
+                        "advertiserId": {
+                            "description": "Advertiser ID of this creative. This is a required field.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeAssets/{advertiserId}/creativeAssets",
+                    "request": {
+                        "$ref": "CreativeAssetMetadata"
+                    },
+                    "response": {
+                        "$ref": "CreativeAssetMetadata"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ],
+                    "supportsMediaUpload": true
+                }
+            }
+        },
+        "creativeFieldValues": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes an existing creative field value.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}",
+                    "httpMethod": "DELETE",
+                    "id": "dfareporting.creativeFieldValues.delete",
+                    "parameterOrder": [
+                        "profileId",
+                        "creativeFieldId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "creativeFieldId": {
+                            "description": "Creative field ID for this creative field value.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "id": {
+                            "description": "Creative Field Value ID",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "get": {
+                    "description": "Gets one creative field value by ID.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.creativeFieldValues.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "creativeFieldId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "creativeFieldId": {
+                            "description": "Creative field ID for this creative field value.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "id": {
+                            "description": "Creative Field Value ID",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}",
+                    "response": {
+                        "$ref": "CreativeFieldValue"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new creative field value.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.creativeFieldValues.insert",
+                    "parameterOrder": [
+                        "profileId",
+                        "creativeFieldId"
+                    ],
+                    "parameters": {
+                        "creativeFieldId": {
+                            "description": "Creative field ID for this creative field value.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
+                    "request": {
+                        "$ref": "CreativeFieldValue"
+                    },
+                    "response": {
+                        "$ref": "CreativeFieldValue"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of creative field values, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.creativeFieldValues.list",
+                    "parameterOrder": [
+                        "profileId",
+                        "creativeFieldId"
+                    ],
+                    "parameters": {
+                        "creativeFieldId": {
+                            "description": "Creative field ID for this creative field value.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only creative field values with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for creative field values by their values. Wildcards (e.g. *) are not allowed.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "VALUE"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
+                    "response": {
+                        "$ref": "CreativeFieldValuesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing creative field value. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.creativeFieldValues.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "creativeFieldId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "creativeFieldId": {
+                            "description": "CreativeField ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "id": {
+                            "description": "CreativeFieldValue ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
+                    "request": {
+                        "$ref": "CreativeFieldValue"
+                    },
+                    "response": {
+                        "$ref": "CreativeFieldValue"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing creative field value.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.creativeFieldValues.update",
+                    "parameterOrder": [
+                        "profileId",
+                        "creativeFieldId"
+                    ],
+                    "parameters": {
+                        "creativeFieldId": {
+                            "description": "Creative field ID for this creative field value.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
+                    "request": {
+                        "$ref": "CreativeFieldValue"
+                    },
+                    "response": {
+                        "$ref": "CreativeFieldValue"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "creativeFields": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes an existing creative field.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields/{id}",
+                    "httpMethod": "DELETE",
+                    "id": "dfareporting.creativeFields.delete",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Creative Field ID",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields/{id}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "get": {
+                    "description": "Gets one creative field by ID.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.creativeFields.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Creative Field ID",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields/{id}",
+                    "response": {
+                        "$ref": "CreativeField"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new creative field.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.creativeFields.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields",
+                    "request": {
+                        "$ref": "CreativeField"
+                    },
+                    "response": {
+                        "$ref": "CreativeField"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of creative fields, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.creativeFields.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserIds": {
+                            "description": "Select only creative fields that belong to these advertisers.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only creative fields with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for creative fields by name or ID. Wildcards (*) are allowed. For example, \"creativefield*2015\" will return creative fields with names like \"creativefield June 2015\", \"creativefield April 2015\", or simply \"creativefield 2015\". Most of the searches also add wild-cards implicitly at the start and the end of the search string. For example, a search string of \"creativefield\" will match creative fields with the name \"my creativefield\", \"creativefield 2015\", or simply \"creativefield\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields",
+                    "response": {
+                        "$ref": "CreativeFieldsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing creative field. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.creativeFields.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "CreativeField ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields",
+                    "request": {
+                        "$ref": "CreativeField"
+                    },
+                    "response": {
+                        "$ref": "CreativeField"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing creative field.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.creativeFields.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields",
+                    "request": {
+                        "$ref": "CreativeField"
+                    },
+                    "response": {
+                        "$ref": "CreativeField"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "creativeGroups": {
+            "methods": {
+                "get": {
+                    "description": "Gets one creative group by ID.",
+                    "flatPath": "userprofiles/{profileId}/creativeGroups/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.creativeGroups.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Creative group ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeGroups/{id}",
+                    "response": {
+                        "$ref": "CreativeGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new creative group.",
+                    "flatPath": "userprofiles/{profileId}/creativeGroups",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.creativeGroups.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeGroups",
+                    "request": {
+                        "$ref": "CreativeGroup"
+                    },
+                    "response": {
+                        "$ref": "CreativeGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of creative groups, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/creativeGroups",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.creativeGroups.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserIds": {
+                            "description": "Select only creative groups that belong to these advertisers.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "groupNumber": {
+                            "description": "Select only creative groups that belong to this subgroup.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "2",
+                            "minimum": "1",
+                            "type": "integer"
+                        },
+                        "ids": {
+                            "description": "Select only creative groups with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for creative groups by name or ID. Wildcards (*) are allowed. For example, \"creativegroup*2015\" will return creative groups with names like \"creativegroup June 2015\", \"creativegroup April 2015\", or simply \"creativegroup 2015\". Most of the searches also add wild-cards implicitly at the start and the end of the search string. For example, a search string of \"creativegroup\" will match creative groups with the name \"my creativegroup\", \"creativegroup 2015\", or simply \"creativegroup\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeGroups",
+                    "response": {
+                        "$ref": "CreativeGroupsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing creative group. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/creativeGroups",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.creativeGroups.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "CreativeGroup ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeGroups",
+                    "request": {
+                        "$ref": "CreativeGroup"
+                    },
+                    "response": {
+                        "$ref": "CreativeGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing creative group.",
+                    "flatPath": "userprofiles/{profileId}/creativeGroups",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.creativeGroups.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeGroups",
+                    "request": {
+                        "$ref": "CreativeGroup"
+                    },
+                    "response": {
+                        "$ref": "CreativeGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "creatives": {
+            "methods": {
+                "get": {
+                    "description": "Gets one creative by ID.",
+                    "flatPath": "userprofiles/{profileId}/creatives/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.creatives.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Creative ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creatives/{id}",
+                    "response": {
+                        "$ref": "Creative"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new creative.",
+                    "flatPath": "userprofiles/{profileId}/creatives",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.creatives.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creatives",
+                    "request": {
+                        "$ref": "Creative"
+                    },
+                    "response": {
+                        "$ref": "Creative"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of creatives, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/creatives",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.creatives.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "active": {
+                            "description": "Select only active creatives. Leave blank to select active and inactive creatives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "advertiserId": {
+                            "description": "Select only creatives with this advertiser ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "archived": {
+                            "description": "Select only archived creatives. Leave blank to select archived and unarchived creatives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "campaignId": {
+                            "description": "Select only creatives with this campaign ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "companionCreativeIds": {
+                            "description": "Select only in-stream video creatives with these companion IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "creativeFieldIds": {
+                            "description": "Select only creatives with these creative field IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only creatives with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "renderingIds": {
+                            "description": "Select only creatives with these rendering IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"creative*2015\" will return objects with names like \"creative June 2015\", \"creative April 2015\", or simply \"creative 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"creative\" will match objects with name \"my creative\", \"creative 2015\", or simply \"creative\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sizeIds": {
+                            "description": "Select only creatives with these size IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "studioCreativeId": {
+                            "description": "Select only creatives corresponding to this Studio creative ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "types": {
+                            "description": "Select only creatives with these creative types.",
+                            "enum": [
+                                "IMAGE",
+                                "DISPLAY_REDIRECT",
+                                "CUSTOM_DISPLAY",
+                                "INTERNAL_REDIRECT",
+                                "CUSTOM_DISPLAY_INTERSTITIAL",
+                                "INTERSTITIAL_INTERNAL_REDIRECT",
+                                "TRACKING_TEXT",
+                                "RICH_MEDIA_DISPLAY_BANNER",
+                                "RICH_MEDIA_INPAGE_FLOATING",
+                                "RICH_MEDIA_IM_EXPAND",
+                                "RICH_MEDIA_DISPLAY_EXPANDING",
+                                "RICH_MEDIA_DISPLAY_INTERSTITIAL",
+                                "RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL",
+                                "RICH_MEDIA_MOBILE_IN_APP",
+                                "FLASH_INPAGE",
+                                "INSTREAM_VIDEO",
+                                "VPAID_LINEAR_VIDEO",
+                                "VPAID_NON_LINEAR_VIDEO",
+                                "INSTREAM_VIDEO_REDIRECT",
+                                "RICH_MEDIA_PEEL_DOWN",
+                                "HTML5_BANNER",
+                                "DISPLAY",
+                                "DISPLAY_IMAGE_GALLERY",
+                                "BRAND_SAFE_DEFAULT_INSTREAM_VIDEO",
+                                "INSTREAM_AUDIO"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creatives",
+                    "response": {
+                        "$ref": "CreativesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing creative. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/creatives",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.creatives.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Creative ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creatives",
+                    "request": {
+                        "$ref": "Creative"
+                    },
+                    "response": {
+                        "$ref": "Creative"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing creative.",
+                    "flatPath": "userprofiles/{profileId}/creatives",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.creatives.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creatives",
+                    "request": {
+                        "$ref": "Creative"
+                    },
+                    "response": {
+                        "$ref": "Creative"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "dimensionValues": {
+            "methods": {
+                "query": {
+                    "description": "Retrieves list of report dimension values for a list of filters.",
+                    "flatPath": "userprofiles/{profileId}/dimensionvalues/query",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.dimensionValues.query",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "maxResults": {
+                            "default": "100",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "100",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The value of the nextToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "The Campaign Manager 360 user profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/dimensionvalues/query",
+                    "request": {
+                        "$ref": "DimensionValueRequest"
+                    },
+                    "response": {
+                        "$ref": "DimensionValueList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfareporting"
+                    ]
+                }
+            }
+        },
+        "directorySites": {
+            "methods": {
+                "get": {
+                    "description": "Gets one directory site by ID.",
+                    "flatPath": "userprofiles/{profileId}/directorySites/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.directorySites.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Directory site ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/directorySites/{id}",
+                    "response": {
+                        "$ref": "DirectorySite"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new directory site.",
+                    "flatPath": "userprofiles/{profileId}/directorySites",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.directorySites.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/directorySites",
+                    "request": {
+                        "$ref": "DirectorySite"
+                    },
+                    "response": {
+                        "$ref": "DirectorySite"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of directory sites, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/directorySites",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.directorySites.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "acceptsInStreamVideoPlacements": {
+                            "description": "This search filter is no longer supported and will have no effect on the results returned.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "acceptsInterstitialPlacements": {
+                            "description": "This search filter is no longer supported and will have no effect on the results returned.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "acceptsPublisherPaidPlacements": {
+                            "description": "Select only directory sites that accept publisher paid placements. This field can be left blank.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "active": {
+                            "description": "Select only active directory sites. Leave blank to retrieve both active and inactive directory sites.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "dfpNetworkCode": {
+                            "description": "Select only directory sites with this Ad Manager network code.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only directory sites with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name, ID or URL. Wildcards (*) are allowed. For example, \"directory site*2015\" will return objects with names like \"directory site June 2015\", \"directory site April 2015\", or simply \"directory site 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"directory site\" will match objects with name \"my directory site\", \"directory site 2015\" or simply, \"directory site\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/directorySites",
+                    "response": {
+                        "$ref": "DirectorySitesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "dynamicTargetingKeys": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes an existing dynamic targeting key.",
+                    "flatPath": "userprofiles/{profileId}/dynamicTargetingKeys/{objectId}",
+                    "httpMethod": "DELETE",
+                    "id": "dfareporting.dynamicTargetingKeys.delete",
+                    "parameterOrder": [
+                        "profileId",
+                        "objectId",
+                        "name",
+                        "objectType"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "Name of this dynamic targeting key. This is a required field. Must be less than 256 characters long and cannot contain commas. All characters are converted to lowercase.",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "objectId": {
+                            "description": "ID of the object of this dynamic targeting key. This is a required field.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "objectType": {
+                            "description": "Type of the object of this dynamic targeting key. This is a required field.",
+                            "enum": [
+                                "OBJECT_ADVERTISER",
+                                "OBJECT_AD",
+                                "OBJECT_CREATIVE",
+                                "OBJECT_PLACEMENT"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/dynamicTargetingKeys/{objectId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new dynamic targeting key. Keys must be created at the advertiser level before being assigned to the advertiser's ads, creatives, or placements. There is a maximum of 1000 keys per advertiser, out of which a maximum of 20 keys can be assigned per ad, creative, or placement.",
+                    "flatPath": "userprofiles/{profileId}/dynamicTargetingKeys",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.dynamicTargetingKeys.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/dynamicTargetingKeys",
+                    "request": {
+                        "$ref": "DynamicTargetingKey"
+                    },
+                    "response": {
+                        "$ref": "DynamicTargetingKey"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of dynamic targeting keys.",
+                    "flatPath": "userprofiles/{profileId}/dynamicTargetingKeys",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.dynamicTargetingKeys.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserId": {
+                            "description": "Select only dynamic targeting keys whose object has this advertiser ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "names": {
+                            "description": "Select only dynamic targeting keys exactly matching these names.",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "objectId": {
+                            "description": "Select only dynamic targeting keys with this object ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "objectType": {
+                            "description": "Select only dynamic targeting keys with this object type.",
+                            "enum": [
+                                "OBJECT_ADVERTISER",
+                                "OBJECT_AD",
+                                "OBJECT_CREATIVE",
+                                "OBJECT_PLACEMENT"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/dynamicTargetingKeys",
+                    "response": {
+                        "$ref": "DynamicTargetingKeysListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "eventTags": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes an existing event tag.",
+                    "flatPath": "userprofiles/{profileId}/eventTags/{id}",
+                    "httpMethod": "DELETE",
+                    "id": "dfareporting.eventTags.delete",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Event tag ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/eventTags/{id}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "get": {
+                    "description": "Gets one event tag by ID.",
+                    "flatPath": "userprofiles/{profileId}/eventTags/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.eventTags.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Event tag ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/eventTags/{id}",
+                    "response": {
+                        "$ref": "EventTag"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new event tag.",
+                    "flatPath": "userprofiles/{profileId}/eventTags",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.eventTags.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/eventTags",
+                    "request": {
+                        "$ref": "EventTag"
+                    },
+                    "response": {
+                        "$ref": "EventTag"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of event tags, possibly filtered.",
+                    "flatPath": "userprofiles/{profileId}/eventTags",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.eventTags.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "adId": {
+                            "description": "Select only event tags that belong to this ad.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "advertiserId": {
+                            "description": "Select only event tags that belong to this advertiser.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "campaignId": {
+                            "description": "Select only event tags that belong to this campaign.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "definitionsOnly": {
+                            "description": "Examine only the specified campaign or advertiser's event tags for matching selector criteria. When set to false, the parent advertiser and parent campaign of the specified ad or campaign is examined as well. In addition, when set to false, the status field is examined as well, along with the enabledByDefault field. This parameter can not be set to true when adId is specified as ads do not define their own even tags.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "enabled": {
+                            "description": "Select only enabled event tags. What is considered enabled or disabled depends on the definitionsOnly parameter. When definitionsOnly is set to true, only the specified advertiser or campaign's event tags' enabledByDefault field is examined. When definitionsOnly is set to false, the specified ad or specified campaign's parent advertiser's or parent campaign's event tags' enabledByDefault and status fields are examined as well.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "eventTagTypes": {
+                            "description": "Select only event tags with the specified event tag types. Event tag types can be used to specify whether to use a third-party pixel, a third-party JavaScript URL, or a third-party click-through URL for either impression or click tracking.",
+                            "enum": [
+                                "IMPRESSION_IMAGE_EVENT_TAG",
+                                "IMPRESSION_JAVASCRIPT_EVENT_TAG",
+                                "CLICK_THROUGH_EVENT_TAG"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only event tags with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"eventtag*2015\" will return objects with names like \"eventtag June 2015\", \"eventtag April 2015\", or simply \"eventtag 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"eventtag\" will match objects with name \"my eventtag\", \"eventtag 2015\", or simply \"eventtag\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/eventTags",
+                    "response": {
+                        "$ref": "EventTagsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing event tag. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/eventTags",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.eventTags.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "EventTag ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/eventTags",
+                    "request": {
+                        "$ref": "EventTag"
+                    },
+                    "response": {
+                        "$ref": "EventTag"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing event tag.",
+                    "flatPath": "userprofiles/{profileId}/eventTags",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.eventTags.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/eventTags",
+                    "request": {
+                        "$ref": "EventTag"
+                    },
+                    "response": {
+                        "$ref": "EventTag"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
         "files": {
-          "methods": {
-            "get": {
-              "flatPath": "userprofiles/{profileId}/reports/{reportId}/files/{fileId}",
-              "response": {
-                "$ref": "File"
-              },
-              "parameterOrder": [
-                "profileId",
-                "reportId",
-                "fileId"
-              ],
-              "httpMethod": "GET",
-              "description": "Retrieves a report file by its report ID and file ID. This method supports media download.",
-              "path": "userprofiles/{profileId}/reports/{reportId}/files/{fileId}",
-              "supportsMediaDownload": true,
-              "parameters": {
-                "reportId": {
-                  "type": "string",
-                  "format": "int64",
-                  "description": "The ID of the report.",
-                  "location": "path",
-                  "required": true
+            "methods": {
+                "get": {
+                    "description": "Retrieves a report file by its report ID and file ID. This method supports media download.",
+                    "flatPath": "reports/{reportId}/files/{fileId}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.files.get",
+                    "parameterOrder": [
+                        "reportId",
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the report file.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "reportId": {
+                            "description": "The ID of the report.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "reports/{reportId}/files/{fileId}",
+                    "response": {
+                        "$ref": "File"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfareporting"
+                    ],
+                    "supportsMediaDownload": true
                 },
-                "fileId": {
-                  "description": "The ID of the report file.",
-                  "location": "path",
-                  "required": true,
-                  "format": "int64",
-                  "type": "string"
-                },
-                "profileId": {
-                  "required": true,
-                  "description": "The Campaign Manager 360 user profile ID.",
-                  "type": "string",
-                  "location": "path",
-                  "format": "int64"
+                "list": {
+                    "description": "Lists files for a user profile.",
+                    "flatPath": "userprofiles/{profileId}/files",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.files.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "maxResults": {
+                            "default": "10",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "10",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The value of the nextToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "The Campaign Manager 360 user profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "scope": {
+                            "default": "MINE",
+                            "description": "The scope that defines which results are returned.",
+                            "enum": [
+                                "ALL",
+                                "MINE",
+                                "SHARED_WITH_ME"
+                            ],
+                            "enumDescriptions": [
+                                "All files in account.",
+                                "My files.",
+                                "Files shared with me."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "LAST_MODIFIED_TIME",
+                            "description": "The field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "LAST_MODIFIED_TIME"
+                            ],
+                            "enumDescriptions": [
+                                "Sort by file ID.",
+                                "Sort by 'lastmodifiedAt' field."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "DESCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "Ascending order.",
+                                "Descending order."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/files",
+                    "response": {
+                        "$ref": "FileList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfareporting"
+                    ]
                 }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/dfareporting"
-              ],
-              "id": "dfareporting.reports.files.get"
+            }
+        },
+        "floodlightActivities": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes an existing floodlight activity.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivities/{id}",
+                    "httpMethod": "DELETE",
+                    "id": "dfareporting.floodlightActivities.delete",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Floodlight activity ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivities/{id}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "generatetag": {
+                    "description": "Generates a tag for a floodlight activity.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivities/generatetag",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.floodlightActivities.generatetag",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "floodlightActivityId": {
+                            "description": "Floodlight activity ID for which we want to generate a tag.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivities/generatetag",
+                    "response": {
+                        "$ref": "FloodlightActivitiesGenerateTagResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "get": {
+                    "description": "Gets one floodlight activity by ID.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivities/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.floodlightActivities.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Floodlight activity ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivities/{id}",
+                    "response": {
+                        "$ref": "FloodlightActivity"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new floodlight activity.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivities",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.floodlightActivities.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivities",
+                    "request": {
+                        "$ref": "FloodlightActivity"
+                    },
+                    "response": {
+                        "$ref": "FloodlightActivity"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of floodlight activities, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivities",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.floodlightActivities.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserId": {
+                            "description": "Select only floodlight activities for the specified advertiser ID. Must specify either ids, advertiserId, or floodlightConfigurationId for a non-empty result.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "floodlightActivityGroupIds": {
+                            "description": "Select only floodlight activities with the specified floodlight activity group IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "floodlightActivityGroupName": {
+                            "description": "Select only floodlight activities with the specified floodlight activity group name.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "floodlightActivityGroupTagString": {
+                            "description": "Select only floodlight activities with the specified floodlight activity group tag string.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "floodlightActivityGroupType": {
+                            "description": "Select only floodlight activities with the specified floodlight activity group type.",
+                            "enum": [
+                                "COUNTER",
+                                "SALE"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "floodlightConfigurationId": {
+                            "description": "Select only floodlight activities for the specified floodlight configuration ID. Must specify either ids, advertiserId, or floodlightConfigurationId for a non-empty result.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only floodlight activities with the specified IDs. Must specify either ids, advertiserId, or floodlightConfigurationId for a non-empty result.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"floodlightactivity*2015\" will return objects with names like \"floodlightactivity June 2015\", \"floodlightactivity April 2015\", or simply \"floodlightactivity 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"floodlightactivity\" will match objects with name \"my floodlightactivity activity\", \"floodlightactivity 2015\", or simply \"floodlightactivity\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "tagString": {
+                            "description": "Select only floodlight activities with the specified tag string.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivities",
+                    "response": {
+                        "$ref": "FloodlightActivitiesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing floodlight activity. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivities",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.floodlightActivities.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "FloodlightActivity ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivities",
+                    "request": {
+                        "$ref": "FloodlightActivity"
+                    },
+                    "response": {
+                        "$ref": "FloodlightActivity"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing floodlight activity.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivities",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.floodlightActivities.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivities",
+                    "request": {
+                        "$ref": "FloodlightActivity"
+                    },
+                    "response": {
+                        "$ref": "FloodlightActivity"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "floodlightActivityGroups": {
+            "methods": {
+                "get": {
+                    "description": "Gets one floodlight activity group by ID.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivityGroups/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.floodlightActivityGroups.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Floodlight activity Group ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivityGroups/{id}",
+                    "response": {
+                        "$ref": "FloodlightActivityGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new floodlight activity group.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivityGroups",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.floodlightActivityGroups.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivityGroups",
+                    "request": {
+                        "$ref": "FloodlightActivityGroup"
+                    },
+                    "response": {
+                        "$ref": "FloodlightActivityGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of floodlight activity groups, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivityGroups",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.floodlightActivityGroups.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserId": {
+                            "description": "Select only floodlight activity groups with the specified advertiser ID. Must specify either advertiserId or floodlightConfigurationId for a non-empty result.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "floodlightConfigurationId": {
+                            "description": "Select only floodlight activity groups with the specified floodlight configuration ID. Must specify either advertiserId, or floodlightConfigurationId for a non-empty result.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only floodlight activity groups with the specified IDs. Must specify either advertiserId or floodlightConfigurationId for a non-empty result.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"floodlightactivitygroup*2015\" will return objects with names like \"floodlightactivitygroup June 2015\", \"floodlightactivitygroup April 2015\", or simply \"floodlightactivitygroup 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"floodlightactivitygroup\" will match objects with name \"my floodlightactivitygroup activity\", \"floodlightactivitygroup 2015\", or simply \"floodlightactivitygroup\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "type": {
+                            "description": "Select only floodlight activity groups with the specified floodlight activity group type.",
+                            "enum": [
+                                "COUNTER",
+                                "SALE"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivityGroups",
+                    "response": {
+                        "$ref": "FloodlightActivityGroupsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing floodlight activity group. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivityGroups",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.floodlightActivityGroups.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "FloodlightActivityGroup ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivityGroups",
+                    "request": {
+                        "$ref": "FloodlightActivityGroup"
+                    },
+                    "response": {
+                        "$ref": "FloodlightActivityGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing floodlight activity group.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivityGroups",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.floodlightActivityGroups.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivityGroups",
+                    "request": {
+                        "$ref": "FloodlightActivityGroup"
+                    },
+                    "response": {
+                        "$ref": "FloodlightActivityGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "floodlightConfigurations": {
+            "methods": {
+                "get": {
+                    "description": "Gets one floodlight configuration by ID.",
+                    "flatPath": "userprofiles/{profileId}/floodlightConfigurations/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.floodlightConfigurations.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Floodlight configuration ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightConfigurations/{id}",
+                    "response": {
+                        "$ref": "FloodlightConfiguration"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of floodlight configurations, possibly filtered.",
+                    "flatPath": "userprofiles/{profileId}/floodlightConfigurations",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.floodlightConfigurations.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "ids": {
+                            "description": "Set of IDs of floodlight configurations to retrieve. Required field; otherwise an empty list will be returned.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightConfigurations",
+                    "response": {
+                        "$ref": "FloodlightConfigurationsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing floodlight configuration. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/floodlightConfigurations",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.floodlightConfigurations.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "FloodlightConfiguration ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightConfigurations",
+                    "request": {
+                        "$ref": "FloodlightConfiguration"
+                    },
+                    "response": {
+                        "$ref": "FloodlightConfiguration"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing floodlight configuration.",
+                    "flatPath": "userprofiles/{profileId}/floodlightConfigurations",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.floodlightConfigurations.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightConfigurations",
+                    "request": {
+                        "$ref": "FloodlightConfiguration"
+                    },
+                    "response": {
+                        "$ref": "FloodlightConfiguration"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "inventoryItems": {
+            "methods": {
+                "get": {
+                    "description": "Gets one inventory item by ID.",
+                    "flatPath": "userprofiles/{profileId}/projects/{projectId}/inventoryItems/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.inventoryItems.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "projectId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Inventory item ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "projectId": {
+                            "description": "Project ID for order documents.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/projects/{projectId}/inventoryItems/{id}",
+                    "response": {
+                        "$ref": "InventoryItem"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of inventory items, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/projects/{projectId}/inventoryItems",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.inventoryItems.list",
+                    "parameterOrder": [
+                        "profileId",
+                        "projectId"
+                    ],
+                    "parameters": {
+                        "ids": {
+                            "description": "Select only inventory items with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "inPlan": {
+                            "description": "Select only inventory items that are in plan.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "orderId": {
+                            "description": "Select only inventory items that belong to specified orders.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "projectId": {
+                            "description": "Project ID for order documents.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "siteId": {
+                            "description": "Select only inventory items that are associated with these sites.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "type": {
+                            "description": "Select only inventory items with this type.",
+                            "enum": [
+                                "PLANNING_PLACEMENT_TYPE_REGULAR",
+                                "PLANNING_PLACEMENT_TYPE_CREDIT"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/projects/{projectId}/inventoryItems",
+                    "response": {
+                        "$ref": "InventoryItemsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "languages": {
+            "methods": {
+                "list": {
+                    "description": "Retrieves a list of languages.",
+                    "flatPath": "userprofiles/{profileId}/languages",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.languages.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/languages",
+                    "response": {
+                        "$ref": "LanguagesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "metros": {
+            "methods": {
+                "list": {
+                    "description": "Retrieves a list of metros.",
+                    "flatPath": "userprofiles/{profileId}/metros",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.metros.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/metros",
+                    "response": {
+                        "$ref": "MetrosListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "mobileApps": {
+            "methods": {
+                "get": {
+                    "description": "Gets one mobile app by ID.",
+                    "flatPath": "userprofiles/{profileId}/mobileApps/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.mobileApps.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Mobile app ID.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/mobileApps/{id}",
+                    "response": {
+                        "$ref": "MobileApp"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves list of available mobile apps.",
+                    "flatPath": "userprofiles/{profileId}/mobileApps",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.mobileApps.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "directories": {
+                            "description": "Select only apps from these directories.",
+                            "enum": [
+                                "UNKNOWN",
+                                "APPLE_APP_STORE",
+                                "GOOGLE_PLAY_STORE"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only apps with these IDs.",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"app*2015\" will return objects with names like \"app Jan 2018\", \"app Jan 2018\", or simply \"app 2018\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"app\" will match objects with name \"my app\", \"app 2018\", or simply \"app\".",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/mobileApps",
+                    "response": {
+                        "$ref": "MobileAppsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "mobileCarriers": {
+            "methods": {
+                "get": {
+                    "description": "Gets one mobile carrier by ID.",
+                    "flatPath": "userprofiles/{profileId}/mobileCarriers/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.mobileCarriers.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Mobile carrier ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/mobileCarriers/{id}",
+                    "response": {
+                        "$ref": "MobileCarrier"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of mobile carriers.",
+                    "flatPath": "userprofiles/{profileId}/mobileCarriers",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.mobileCarriers.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/mobileCarriers",
+                    "response": {
+                        "$ref": "MobileCarriersListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "operatingSystemVersions": {
+            "methods": {
+                "get": {
+                    "description": "Gets one operating system version by ID.",
+                    "flatPath": "userprofiles/{profileId}/operatingSystemVersions/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.operatingSystemVersions.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Operating system version ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/operatingSystemVersions/{id}",
+                    "response": {
+                        "$ref": "OperatingSystemVersion"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of operating system versions.",
+                    "flatPath": "userprofiles/{profileId}/operatingSystemVersions",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.operatingSystemVersions.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/operatingSystemVersions",
+                    "response": {
+                        "$ref": "OperatingSystemVersionsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "operatingSystems": {
+            "methods": {
+                "get": {
+                    "description": "Gets one operating system by DART ID.",
+                    "flatPath": "userprofiles/{profileId}/operatingSystems/{dartId}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.operatingSystems.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "dartId"
+                    ],
+                    "parameters": {
+                        "dartId": {
+                            "description": "Operating system DART ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/operatingSystems/{dartId}",
+                    "response": {
+                        "$ref": "OperatingSystem"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of operating systems.",
+                    "flatPath": "userprofiles/{profileId}/operatingSystems",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.operatingSystems.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/operatingSystems",
+                    "response": {
+                        "$ref": "OperatingSystemsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "orderDocuments": {
+            "methods": {
+                "get": {
+                    "description": "Gets one order document by ID.",
+                    "flatPath": "userprofiles/{profileId}/projects/{projectId}/orderDocuments/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.orderDocuments.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "projectId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Order document ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "projectId": {
+                            "description": "Project ID for order documents.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/projects/{projectId}/orderDocuments/{id}",
+                    "response": {
+                        "$ref": "OrderDocument"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of order documents, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/projects/{projectId}/orderDocuments",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.orderDocuments.list",
+                    "parameterOrder": [
+                        "profileId",
+                        "projectId"
+                    ],
+                    "parameters": {
+                        "approved": {
+                            "description": "Select only order documents that have been approved by at least one user.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ids": {
+                            "description": "Select only order documents with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "orderId": {
+                            "description": "Select only order documents for specified orders.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "projectId": {
+                            "description": "Project ID for order documents.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for order documents by name or ID. Wildcards (*) are allowed. For example, \"orderdocument*2015\" will return order documents with names like \"orderdocument June 2015\", \"orderdocument April 2015\", or simply \"orderdocument 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"orderdocument\" will match order documents with name \"my orderdocument\", \"orderdocument 2015\", or simply \"orderdocument\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "siteId": {
+                            "description": "Select only order documents that are associated with these sites.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/projects/{projectId}/orderDocuments",
+                    "response": {
+                        "$ref": "OrderDocumentsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "orders": {
+            "methods": {
+                "get": {
+                    "description": "Gets one order by ID.",
+                    "flatPath": "userprofiles/{profileId}/projects/{projectId}/orders/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.orders.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "projectId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Order ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "projectId": {
+                            "description": "Project ID for orders.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/projects/{projectId}/orders/{id}",
+                    "response": {
+                        "$ref": "Order"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of orders, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/projects/{projectId}/orders",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.orders.list",
+                    "parameterOrder": [
+                        "profileId",
+                        "projectId"
+                    ],
+                    "parameters": {
+                        "ids": {
+                            "description": "Select only orders with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "projectId": {
+                            "description": "Project ID for orders.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for orders by name or ID. Wildcards (*) are allowed. For example, \"order*2015\" will return orders with names like \"order June 2015\", \"order April 2015\", or simply \"order 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"order\" will match orders with name \"my order\", \"order 2015\", or simply \"order\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "siteId": {
+                            "description": "Select only orders that are associated with these site IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/projects/{projectId}/orders",
+                    "response": {
+                        "$ref": "OrdersListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "placementGroups": {
+            "methods": {
+                "get": {
+                    "description": "Gets one placement group by ID.",
+                    "flatPath": "userprofiles/{profileId}/placementGroups/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.placementGroups.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Placement group ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementGroups/{id}",
+                    "response": {
+                        "$ref": "PlacementGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new placement group.",
+                    "flatPath": "userprofiles/{profileId}/placementGroups",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.placementGroups.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementGroups",
+                    "request": {
+                        "$ref": "PlacementGroup"
+                    },
+                    "response": {
+                        "$ref": "PlacementGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of placement groups, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/placementGroups",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.placementGroups.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserIds": {
+                            "description": "Select only placement groups that belong to these advertisers.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "archived": {
+                            "description": "Select only archived placements. Don't set this field to select both archived and non-archived placements.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "campaignIds": {
+                            "description": "Select only placement groups that belong to these campaigns.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "contentCategoryIds": {
+                            "description": "Select only placement groups that are associated with these content categories.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "directorySiteIds": {
+                            "description": "Select only placement groups that are associated with these directory sites.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only placement groups with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxEndDate": {
+                            "description": "Select only placements or placement groups whose end date is on or before the specified maxEndDate. The date should be formatted as \"yyyy-MM-dd\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "800",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "800",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "maxStartDate": {
+                            "description": "Select only placements or placement groups whose start date is on or before the specified maxStartDate. The date should be formatted as \"yyyy-MM-dd\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "minEndDate": {
+                            "description": "Select only placements or placement groups whose end date is on or after the specified minEndDate. The date should be formatted as \"yyyy-MM-dd\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "minStartDate": {
+                            "description": "Select only placements or placement groups whose start date is on or after the specified minStartDate. The date should be formatted as \"yyyy-MM-dd\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "placementGroupType": {
+                            "description": "Select only placement groups belonging with this group type. A package is a simple group of placements that acts as a single pricing point for a group of tags. A roadblock is a group of placements that not only acts as a single pricing point but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned placements to be marked as primary for reporting.",
+                            "enum": [
+                                "PLACEMENT_PACKAGE",
+                                "PLACEMENT_ROADBLOCK"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "placementStrategyIds": {
+                            "description": "Select only placement groups that are associated with these placement strategies.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "pricingTypes": {
+                            "description": "Select only placement groups with these pricing types.",
+                            "enum": [
+                                "PRICING_TYPE_CPM",
+                                "PRICING_TYPE_CPC",
+                                "PRICING_TYPE_CPA",
+                                "PRICING_TYPE_FLAT_RATE_IMPRESSIONS",
+                                "PRICING_TYPE_FLAT_RATE_CLICKS",
+                                "PRICING_TYPE_CPM_ACTIVEVIEW"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for placement groups by name or ID. Wildcards (*) are allowed. For example, \"placement*2015\" will return placement groups with names like \"placement group June 2015\", \"placement group May 2015\", or simply \"placements 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"placementgroup\" will match placement groups with name \"my placementgroup\", \"placementgroup 2015\", or simply \"placementgroup\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "siteIds": {
+                            "description": "Select only placement groups that are associated with these sites.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementGroups",
+                    "response": {
+                        "$ref": "PlacementGroupsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing placement group. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/placementGroups",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.placementGroups.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "PlacementGroup ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementGroups",
+                    "request": {
+                        "$ref": "PlacementGroup"
+                    },
+                    "response": {
+                        "$ref": "PlacementGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing placement group.",
+                    "flatPath": "userprofiles/{profileId}/placementGroups",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.placementGroups.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementGroups",
+                    "request": {
+                        "$ref": "PlacementGroup"
+                    },
+                    "response": {
+                        "$ref": "PlacementGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "placementStrategies": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes an existing placement strategy.",
+                    "flatPath": "userprofiles/{profileId}/placementStrategies/{id}",
+                    "httpMethod": "DELETE",
+                    "id": "dfareporting.placementStrategies.delete",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Placement strategy ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementStrategies/{id}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "get": {
+                    "description": "Gets one placement strategy by ID.",
+                    "flatPath": "userprofiles/{profileId}/placementStrategies/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.placementStrategies.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Placement strategy ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementStrategies/{id}",
+                    "response": {
+                        "$ref": "PlacementStrategy"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new placement strategy.",
+                    "flatPath": "userprofiles/{profileId}/placementStrategies",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.placementStrategies.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementStrategies",
+                    "request": {
+                        "$ref": "PlacementStrategy"
+                    },
+                    "response": {
+                        "$ref": "PlacementStrategy"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of placement strategies, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/placementStrategies",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.placementStrategies.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "ids": {
+                            "description": "Select only placement strategies with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"placementstrategy*2015\" will return objects with names like \"placementstrategy June 2015\", \"placementstrategy April 2015\", or simply \"placementstrategy 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"placementstrategy\" will match objects with name \"my placementstrategy\", \"placementstrategy 2015\", or simply \"placementstrategy\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementStrategies",
+                    "response": {
+                        "$ref": "PlacementStrategiesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing placement strategy. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/placementStrategies",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.placementStrategies.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "PlacementStrategy ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementStrategies",
+                    "request": {
+                        "$ref": "PlacementStrategy"
+                    },
+                    "response": {
+                        "$ref": "PlacementStrategy"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing placement strategy.",
+                    "flatPath": "userprofiles/{profileId}/placementStrategies",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.placementStrategies.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementStrategies",
+                    "request": {
+                        "$ref": "PlacementStrategy"
+                    },
+                    "response": {
+                        "$ref": "PlacementStrategy"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "placements": {
+            "methods": {
+                "generatetags": {
+                    "description": "Generates tags for a placement.",
+                    "flatPath": "userprofiles/{profileId}/placements/generatetags",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.placements.generatetags",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "campaignId": {
+                            "description": "Generate placements belonging to this campaign. This is a required field.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "placementIds": {
+                            "description": "Generate tags for these placements.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "tagFormats": {
+                            "description": "Tag formats to generate for these placements. *Note:* PLACEMENT_TAG_STANDARD can only be generated for 1x1 placements.",
+                            "enum": [
+                                "PLACEMENT_TAG_STANDARD",
+                                "PLACEMENT_TAG_IFRAME_JAVASCRIPT",
+                                "PLACEMENT_TAG_IFRAME_ILAYER",
+                                "PLACEMENT_TAG_INTERNAL_REDIRECT",
+                                "PLACEMENT_TAG_JAVASCRIPT",
+                                "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT",
+                                "PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT",
+                                "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT",
+                                "PLACEMENT_TAG_CLICK_COMMANDS",
+                                "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH",
+                                "PLACEMENT_TAG_TRACKING",
+                                "PLACEMENT_TAG_TRACKING_IFRAME",
+                                "PLACEMENT_TAG_TRACKING_JAVASCRIPT",
+                                "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_3",
+                                "PLACEMENT_TAG_IFRAME_JAVASCRIPT_LEGACY",
+                                "PLACEMENT_TAG_JAVASCRIPT_LEGACY",
+                                "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT_LEGACY",
+                                "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT_LEGACY",
+                                "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_4"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placements/generatetags",
+                    "response": {
+                        "$ref": "PlacementsGenerateTagsResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "get": {
+                    "description": "Gets one placement by ID.",
+                    "flatPath": "userprofiles/{profileId}/placements/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.placements.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Placement ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placements/{id}",
+                    "response": {
+                        "$ref": "Placement"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new placement.",
+                    "flatPath": "userprofiles/{profileId}/placements",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.placements.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placements",
+                    "request": {
+                        "$ref": "Placement"
+                    },
+                    "response": {
+                        "$ref": "Placement"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of placements, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/placements",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.placements.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserIds": {
+                            "description": "Select only placements that belong to these advertisers.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "archived": {
+                            "description": "Select only archived placements. Don't set this field to select both archived and non-archived placements.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "campaignIds": {
+                            "description": "Select only placements that belong to these campaigns.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "compatibilities": {
+                            "description": "Select only placements that are associated with these compatibilities. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are for rendering in mobile apps. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard.",
+                            "enum": [
+                                "DISPLAY",
+                                "DISPLAY_INTERSTITIAL",
+                                "APP",
+                                "APP_INTERSTITIAL",
+                                "IN_STREAM_VIDEO",
+                                "IN_STREAM_AUDIO"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "contentCategoryIds": {
+                            "description": "Select only placements that are associated with these content categories.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "directorySiteIds": {
+                            "description": "Select only placements that are associated with these directory sites.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "groupIds": {
+                            "description": "Select only placements that belong to these placement groups.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only placements with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxEndDate": {
+                            "description": "Select only placements or placement groups whose end date is on or before the specified maxEndDate. The date should be formatted as \"yyyy-MM-dd\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "maxStartDate": {
+                            "description": "Select only placements or placement groups whose start date is on or before the specified maxStartDate. The date should be formatted as \"yyyy-MM-dd\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "minEndDate": {
+                            "description": "Select only placements or placement groups whose end date is on or after the specified minEndDate. The date should be formatted as \"yyyy-MM-dd\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "minStartDate": {
+                            "description": "Select only placements or placement groups whose start date is on or after the specified minStartDate. The date should be formatted as \"yyyy-MM-dd\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "paymentSource": {
+                            "description": "Select only placements with this payment source.",
+                            "enum": [
+                                "PLACEMENT_AGENCY_PAID",
+                                "PLACEMENT_PUBLISHER_PAID"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "placementStrategyIds": {
+                            "description": "Select only placements that are associated with these placement strategies.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "pricingTypes": {
+                            "description": "Select only placements with these pricing types.",
+                            "enum": [
+                                "PRICING_TYPE_CPM",
+                                "PRICING_TYPE_CPC",
+                                "PRICING_TYPE_CPA",
+                                "PRICING_TYPE_FLAT_RATE_IMPRESSIONS",
+                                "PRICING_TYPE_FLAT_RATE_CLICKS",
+                                "PRICING_TYPE_CPM_ACTIVEVIEW"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for placements by name or ID. Wildcards (*) are allowed. For example, \"placement*2015\" will return placements with names like \"placement June 2015\", \"placement May 2015\", or simply \"placements 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"placement\" will match placements with name \"my placement\", \"placement 2015\", or simply \"placement\" .",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "siteIds": {
+                            "description": "Select only placements that are associated with these sites.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "sizeIds": {
+                            "description": "Select only placements that are associated with these sizes.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placements",
+                    "response": {
+                        "$ref": "PlacementsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing placement. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/placements",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.placements.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Placement ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placements",
+                    "request": {
+                        "$ref": "Placement"
+                    },
+                    "response": {
+                        "$ref": "Placement"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing placement.",
+                    "flatPath": "userprofiles/{profileId}/placements",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.placements.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placements",
+                    "request": {
+                        "$ref": "Placement"
+                    },
+                    "response": {
+                        "$ref": "Placement"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "platformTypes": {
+            "methods": {
+                "get": {
+                    "description": "Gets one platform type by ID.",
+                    "flatPath": "userprofiles/{profileId}/platformTypes/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.platformTypes.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Platform type ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/platformTypes/{id}",
+                    "response": {
+                        "$ref": "PlatformType"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of platform types.",
+                    "flatPath": "userprofiles/{profileId}/platformTypes",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.platformTypes.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/platformTypes",
+                    "response": {
+                        "$ref": "PlatformTypesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "postalCodes": {
+            "methods": {
+                "get": {
+                    "description": "Gets one postal code by ID.",
+                    "flatPath": "userprofiles/{profileId}/postalCodes/{code}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.postalCodes.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "code"
+                    ],
+                    "parameters": {
+                        "code": {
+                            "description": "Postal code ID.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/postalCodes/{code}",
+                    "response": {
+                        "$ref": "PostalCode"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of postal codes.",
+                    "flatPath": "userprofiles/{profileId}/postalCodes",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.postalCodes.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/postalCodes",
+                    "response": {
+                        "$ref": "PostalCodesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "projects": {
+            "methods": {
+                "get": {
+                    "description": "Gets one project by ID.",
+                    "flatPath": "userprofiles/{profileId}/projects/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.projects.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Project ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/projects/{id}",
+                    "response": {
+                        "$ref": "Project"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of projects, possibly filtered. This method supports paging .",
+                    "flatPath": "userprofiles/{profileId}/projects",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.projects.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserIds": {
+                            "description": "Select only projects with these advertiser IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only projects with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for projects by name or ID. Wildcards (*) are allowed. For example, \"project*2015\" will return projects with names like \"project June 2015\", \"project April 2015\", or simply \"project 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"project\" will match projects with name \"my project\", \"project 2015\", or simply \"project\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/projects",
+                    "response": {
+                        "$ref": "ProjectsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "regions": {
+            "methods": {
+                "list": {
+                    "description": "Retrieves a list of regions.",
+                    "flatPath": "userprofiles/{profileId}/regions",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.regions.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/regions",
+                    "response": {
+                        "$ref": "RegionsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "remarketingListShares": {
+            "methods": {
+                "get": {
+                    "description": "Gets one remarketing list share by remarketing list ID.",
+                    "flatPath": "userprofiles/{profileId}/remarketingListShares/{remarketingListId}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.remarketingListShares.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "remarketingListId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "remarketingListId": {
+                            "description": "Remarketing list ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/remarketingListShares/{remarketingListId}",
+                    "response": {
+                        "$ref": "RemarketingListShare"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing remarketing list share. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/remarketingListShares",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.remarketingListShares.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "RemarketingList ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/remarketingListShares",
+                    "request": {
+                        "$ref": "RemarketingListShare"
+                    },
+                    "response": {
+                        "$ref": "RemarketingListShare"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing remarketing list share.",
+                    "flatPath": "userprofiles/{profileId}/remarketingListShares",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.remarketingListShares.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/remarketingListShares",
+                    "request": {
+                        "$ref": "RemarketingListShare"
+                    },
+                    "response": {
+                        "$ref": "RemarketingListShare"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "remarketingLists": {
+            "methods": {
+                "get": {
+                    "description": "Gets one remarketing list by ID.",
+                    "flatPath": "userprofiles/{profileId}/remarketingLists/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.remarketingLists.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Remarketing list ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/remarketingLists/{id}",
+                    "response": {
+                        "$ref": "RemarketingList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new remarketing list.",
+                    "flatPath": "userprofiles/{profileId}/remarketingLists",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.remarketingLists.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/remarketingLists",
+                    "request": {
+                        "$ref": "RemarketingList"
+                    },
+                    "response": {
+                        "$ref": "RemarketingList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of remarketing lists, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/remarketingLists",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.remarketingLists.list",
+                    "parameterOrder": [
+                        "profileId",
+                        "advertiserId"
+                    ],
+                    "parameters": {
+                        "active": {
+                            "description": "Select only active or only inactive remarketing lists.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "advertiserId": {
+                            "description": "Select only remarketing lists owned by this advertiser.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "floodlightActivityId": {
+                            "description": "Select only remarketing lists that have this floodlight activity ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "name": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"remarketing list*2015\" will return objects with names like \"remarketing list June 2015\", \"remarketing list April 2015\", or simply \"remarketing list 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"remarketing list\" will match objects with name \"my remarketing list\", \"remarketing list 2015\", or simply \"remarketing list\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/remarketingLists",
+                    "response": {
+                        "$ref": "RemarketingListsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing remarketing list. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/remarketingLists",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.remarketingLists.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "RemarketingList ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/remarketingLists",
+                    "request": {
+                        "$ref": "RemarketingList"
+                    },
+                    "response": {
+                        "$ref": "RemarketingList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing remarketing list.",
+                    "flatPath": "userprofiles/{profileId}/remarketingLists",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.remarketingLists.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/remarketingLists",
+                    "request": {
+                        "$ref": "RemarketingList"
+                    },
+                    "response": {
+                        "$ref": "RemarketingList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "reports": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes a report by its ID.",
+                    "flatPath": "userprofiles/{profileId}/reports/{reportId}",
+                    "httpMethod": "DELETE",
+                    "id": "dfareporting.reports.delete",
+                    "parameterOrder": [
+                        "profileId",
+                        "reportId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "The Campaign Manager 360 user profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "reportId": {
+                            "description": "The ID of the report.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/reports/{reportId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfareporting"
+                    ]
+                },
+                "get": {
+                    "description": "Retrieves a report by its ID.",
+                    "flatPath": "userprofiles/{profileId}/reports/{reportId}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.reports.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "reportId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "The Campaign Manager 360 user profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "reportId": {
+                            "description": "The ID of the report.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/reports/{reportId}",
+                    "response": {
+                        "$ref": "Report"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfareporting"
+                    ]
+                },
+                "insert": {
+                    "description": "Creates a report.",
+                    "flatPath": "userprofiles/{profileId}/reports",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.reports.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "The Campaign Manager 360 user profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/reports",
+                    "request": {
+                        "$ref": "Report"
+                    },
+                    "response": {
+                        "$ref": "Report"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfareporting"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves list of reports.",
+                    "flatPath": "userprofiles/{profileId}/reports",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.reports.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "maxResults": {
+                            "default": "10",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "10",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The value of the nextToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "The Campaign Manager 360 user profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "scope": {
+                            "default": "MINE",
+                            "description": "The scope that defines which results are returned.",
+                            "enum": [
+                                "ALL",
+                                "MINE"
+                            ],
+                            "enumDescriptions": [
+                                "All reports in account.",
+                                "My reports."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "LAST_MODIFIED_TIME",
+                            "description": "The field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "LAST_MODIFIED_TIME",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "Sort by report ID.",
+                                "Sort by 'lastModifiedTime' field.",
+                                "Sort by name of reports."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "DESCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "Ascending order.",
+                                "Descending order."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/reports",
+                    "response": {
+                        "$ref": "ReportList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfareporting"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing report. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/reports/{reportId}",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.reports.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "reportId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "The DFA user profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "reportId": {
+                            "description": "The ID of the report.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/reports/{reportId}",
+                    "request": {
+                        "$ref": "Report"
+                    },
+                    "response": {
+                        "$ref": "Report"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfareporting"
+                    ]
+                },
+                "run": {
+                    "description": "Runs a report.",
+                    "flatPath": "userprofiles/{profileId}/reports/{reportId}/run",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.reports.run",
+                    "parameterOrder": [
+                        "profileId",
+                        "reportId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "The Campaign Manager 360 user profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "reportId": {
+                            "description": "The ID of the report.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "synchronous": {
+                            "default": "false",
+                            "description": "If set and true, tries to run the report synchronously.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/reports/{reportId}/run",
+                    "response": {
+                        "$ref": "File"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfareporting"
+                    ]
+                },
+                "update": {
+                    "description": "Updates a report.",
+                    "flatPath": "userprofiles/{profileId}/reports/{reportId}",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.reports.update",
+                    "parameterOrder": [
+                        "profileId",
+                        "reportId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "The Campaign Manager 360 user profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "reportId": {
+                            "description": "The ID of the report.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/reports/{reportId}",
+                    "request": {
+                        "$ref": "Report"
+                    },
+                    "response": {
+                        "$ref": "Report"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfareporting"
+                    ]
+                }
             },
-            "list": {
-              "response": {
-                "$ref": "FileList"
-              },
-              "parameters": {
-                "profileId": {
-                  "location": "path",
-                  "description": "The Campaign Manager 360 user profile ID.",
-                  "type": "string",
-                  "format": "int64",
-                  "required": true
+            "resources": {
+                "compatibleFields": {
+                    "methods": {
+                        "query": {
+                            "description": "Returns the fields that are compatible to be selected in the respective sections of a report criteria, given the fields already selected in the input report and user permissions.",
+                            "flatPath": "userprofiles/{profileId}/reports/compatiblefields/query",
+                            "httpMethod": "POST",
+                            "id": "dfareporting.reports.compatibleFields.query",
+                            "parameterOrder": [
+                                "profileId"
+                            ],
+                            "parameters": {
+                                "profileId": {
+                                    "description": "The Campaign Manager 360 user profile ID.",
+                                    "format": "int64",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "userprofiles/{profileId}/reports/compatiblefields/query",
+                            "request": {
+                                "$ref": "Report"
+                            },
+                            "response": {
+                                "$ref": "CompatibleFields"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/dfareporting"
+                            ]
+                        }
+                    }
+                },
+                "files": {
+                    "methods": {
+                        "get": {
+                            "description": "Retrieves a report file by its report ID and file ID. This method supports media download.",
+                            "flatPath": "userprofiles/{profileId}/reports/{reportId}/files/{fileId}",
+                            "httpMethod": "GET",
+                            "id": "dfareporting.reports.files.get",
+                            "parameterOrder": [
+                                "profileId",
+                                "reportId",
+                                "fileId"
+                            ],
+                            "parameters": {
+                                "fileId": {
+                                    "description": "The ID of the report file.",
+                                    "format": "int64",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "The Campaign Manager 360 user profile ID.",
+                                    "format": "int64",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "reportId": {
+                                    "description": "The ID of the report.",
+                                    "format": "int64",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "userprofiles/{profileId}/reports/{reportId}/files/{fileId}",
+                            "response": {
+                                "$ref": "File"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/dfareporting"
+                            ],
+                            "supportsMediaDownload": true
+                        },
+                        "list": {
+                            "description": "Lists files for a report.",
+                            "flatPath": "userprofiles/{profileId}/reports/{reportId}/files",
+                            "httpMethod": "GET",
+                            "id": "dfareporting.reports.files.list",
+                            "parameterOrder": [
+                                "profileId",
+                                "reportId"
+                            ],
+                            "parameters": {
+                                "maxResults": {
+                                    "default": "10",
+                                    "description": "Maximum number of results to return.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "maximum": "10",
+                                    "minimum": "0",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The value of the nextToken from the previous result page.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "The Campaign Manager 360 user profile ID.",
+                                    "format": "int64",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "reportId": {
+                                    "description": "The ID of the parent report.",
+                                    "format": "int64",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "sortField": {
+                                    "default": "LAST_MODIFIED_TIME",
+                                    "description": "The field by which to sort the list.",
+                                    "enum": [
+                                        "ID",
+                                        "LAST_MODIFIED_TIME"
+                                    ],
+                                    "enumDescriptions": [
+                                        "",
+                                        ""
+                                    ],
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "sortOrder": {
+                                    "default": "DESCENDING",
+                                    "description": "Order of sorted results.",
+                                    "enum": [
+                                        "ASCENDING",
+                                        "DESCENDING"
+                                    ],
+                                    "enumDescriptions": [
+                                        "",
+                                        ""
+                                    ],
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "userprofiles/{profileId}/reports/{reportId}/files",
+                            "response": {
+                                "$ref": "FileList"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/dfareporting"
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "sites": {
+            "methods": {
+                "get": {
+                    "description": "Gets one site by ID.",
+                    "flatPath": "userprofiles/{profileId}/sites/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.sites.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Site ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/sites/{id}",
+                    "response": {
+                        "$ref": "Site"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new site.",
+                    "flatPath": "userprofiles/{profileId}/sites",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.sites.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/sites",
+                    "request": {
+                        "$ref": "Site"
+                    },
+                    "response": {
+                        "$ref": "Site"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of sites, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/sites",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.sites.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "acceptsInStreamVideoPlacements": {
+                            "description": "This search filter is no longer supported and will have no effect on the results returned.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "acceptsInterstitialPlacements": {
+                            "description": "This search filter is no longer supported and will have no effect on the results returned.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "acceptsPublisherPaidPlacements": {
+                            "description": "Select only sites that accept publisher paid placements.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "adWordsSite": {
+                            "description": "Select only AdWords sites.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "approved": {
+                            "description": "Select only approved sites.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "campaignIds": {
+                            "description": "Select only sites with these campaign IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "directorySiteIds": {
+                            "description": "Select only sites with these directory site IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only sites with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name, ID or keyName. Wildcards (*) are allowed. For example, \"site*2015\" will return objects with names like \"site June 2015\", \"site April 2015\", or simply \"site 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"site\" will match objects with name \"my site\", \"site 2015\", or simply \"site\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "subaccountId": {
+                            "description": "Select only sites with this subaccount ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "unmappedSite": {
+                            "description": "Select only sites that have not been mapped to a directory site.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/sites",
+                    "response": {
+                        "$ref": "SitesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing site. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/sites",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.sites.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Site ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/sites",
+                    "request": {
+                        "$ref": "Site"
+                    },
+                    "response": {
+                        "$ref": "Site"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing site.",
+                    "flatPath": "userprofiles/{profileId}/sites",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.sites.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/sites",
+                    "request": {
+                        "$ref": "Site"
+                    },
+                    "response": {
+                        "$ref": "Site"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "sizes": {
+            "methods": {
+                "get": {
+                    "description": "Gets one size by ID.",
+                    "flatPath": "userprofiles/{profileId}/sizes/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.sizes.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Size ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/sizes/{id}",
+                    "response": {
+                        "$ref": "Size"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new size.",
+                    "flatPath": "userprofiles/{profileId}/sizes",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.sizes.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/sizes",
+                    "request": {
+                        "$ref": "Size"
+                    },
+                    "response": {
+                        "$ref": "Size"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of sizes, possibly filtered. Retrieved sizes are globally unique and may include values not currently in use by your account. Due to this, the list of sizes returned by this method may differ from the list seen in the Trafficking UI.",
+                    "flatPath": "userprofiles/{profileId}/sizes",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.sizes.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "height": {
+                            "description": "Select only sizes with this height.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "32767",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "iabStandard": {
+                            "description": "Select only IAB standard sizes.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ids": {
+                            "description": "Select only sizes with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "width": {
+                            "description": "Select only sizes with this width.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "32767",
+                            "minimum": "0",
+                            "type": "integer"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/sizes",
+                    "response": {
+                        "$ref": "SizesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "subaccounts": {
+            "methods": {
+                "get": {
+                    "description": "Gets one subaccount by ID.",
+                    "flatPath": "userprofiles/{profileId}/subaccounts/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.subaccounts.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Subaccount ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/subaccounts/{id}",
+                    "response": {
+                        "$ref": "Subaccount"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new subaccount.",
+                    "flatPath": "userprofiles/{profileId}/subaccounts",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.subaccounts.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/subaccounts",
+                    "request": {
+                        "$ref": "Subaccount"
+                    },
+                    "response": {
+                        "$ref": "Subaccount"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Gets a list of subaccounts, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/subaccounts",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.subaccounts.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "ids": {
+                            "description": "Select only subaccounts with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"subaccount*2015\" will return objects with names like \"subaccount June 2015\", \"subaccount April 2015\", or simply \"subaccount 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"subaccount\" will match objects with name \"my subaccount\", \"subaccount 2015\", or simply \"subaccount\" .",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/subaccounts",
+                    "response": {
+                        "$ref": "SubaccountsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing subaccount. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/subaccounts",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.subaccounts.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Subaccount ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/subaccounts",
+                    "request": {
+                        "$ref": "Subaccount"
+                    },
+                    "response": {
+                        "$ref": "Subaccount"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing subaccount.",
+                    "flatPath": "userprofiles/{profileId}/subaccounts",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.subaccounts.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/subaccounts",
+                    "request": {
+                        "$ref": "Subaccount"
+                    },
+                    "response": {
+                        "$ref": "Subaccount"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "targetableRemarketingLists": {
+            "methods": {
+                "get": {
+                    "description": "Gets one remarketing list by ID.",
+                    "flatPath": "userprofiles/{profileId}/targetableRemarketingLists/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.targetableRemarketingLists.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Remarketing list ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/targetableRemarketingLists/{id}",
+                    "response": {
+                        "$ref": "TargetableRemarketingList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of targetable remarketing lists, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/targetableRemarketingLists",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.targetableRemarketingLists.list",
+                    "parameterOrder": [
+                        "profileId",
+                        "advertiserId"
+                    ],
+                    "parameters": {
+                        "active": {
+                            "description": "Select only active or only inactive targetable remarketing lists.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "advertiserId": {
+                            "description": "Select only targetable remarketing lists targetable by these advertisers.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "name": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"remarketing list*2015\" will return objects with names like \"remarketing list June 2015\", \"remarketing list April 2015\", or simply \"remarketing list 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"remarketing list\" will match objects with name \"my remarketing list\", \"remarketing list 2015\", or simply \"remarketing list\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/targetableRemarketingLists",
+                    "response": {
+                        "$ref": "TargetableRemarketingListsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "targetingTemplates": {
+            "methods": {
+                "get": {
+                    "description": "Gets one targeting template by ID.",
+                    "flatPath": "userprofiles/{profileId}/targetingTemplates/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.targetingTemplates.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Targeting template ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/targetingTemplates/{id}",
+                    "response": {
+                        "$ref": "TargetingTemplate"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new targeting template.",
+                    "flatPath": "userprofiles/{profileId}/targetingTemplates",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.targetingTemplates.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/targetingTemplates",
+                    "request": {
+                        "$ref": "TargetingTemplate"
+                    },
+                    "response": {
+                        "$ref": "TargetingTemplate"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of targeting templates, optionally filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/targetingTemplates",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.targetingTemplates.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserId": {
+                            "description": "Select only targeting templates with this advertiser ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only targeting templates with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"template*2015\" will return objects with names like \"template June 2015\", \"template April 2015\", or simply \"template 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"template\" will match objects with name \"my template\", \"template 2015\", or simply \"template\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/targetingTemplates",
+                    "response": {
+                        "$ref": "TargetingTemplatesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing targeting template. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/targetingTemplates",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.targetingTemplates.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "TargetingTemplate ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/targetingTemplates",
+                    "request": {
+                        "$ref": "TargetingTemplate"
+                    },
+                    "response": {
+                        "$ref": "TargetingTemplate"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing targeting template.",
+                    "flatPath": "userprofiles/{profileId}/targetingTemplates",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.targetingTemplates.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/targetingTemplates",
+                    "request": {
+                        "$ref": "TargetingTemplate"
+                    },
+                    "response": {
+                        "$ref": "TargetingTemplate"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "userProfiles": {
+            "methods": {
+                "get": {
+                    "description": "Gets one user profile by ID.",
+                    "flatPath": "userprofiles/{profileId}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.userProfiles.get",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "The user profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}",
+                    "response": {
+                        "$ref": "UserProfile"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ddmconversions",
+                        "https://www.googleapis.com/auth/dfareporting",
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves list of user profiles for a user.",
+                    "flatPath": "userprofiles",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.userProfiles.list",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "userprofiles",
+                    "response": {
+                        "$ref": "UserProfileList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ddmconversions",
+                        "https://www.googleapis.com/auth/dfareporting",
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "userRolePermissionGroups": {
+            "methods": {
+                "get": {
+                    "description": "Gets one user role permission group by ID.",
+                    "flatPath": "userprofiles/{profileId}/userRolePermissionGroups/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.userRolePermissionGroups.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "User role permission group ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/userRolePermissionGroups/{id}",
+                    "response": {
+                        "$ref": "UserRolePermissionGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Gets a list of all supported user role permission groups.",
+                    "flatPath": "userprofiles/{profileId}/userRolePermissionGroups",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.userRolePermissionGroups.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/userRolePermissionGroups",
+                    "response": {
+                        "$ref": "UserRolePermissionGroupsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "userRolePermissions": {
+            "methods": {
+                "get": {
+                    "description": "Gets one user role permission by ID.",
+                    "flatPath": "userprofiles/{profileId}/userRolePermissions/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.userRolePermissions.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "User role permission ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/userRolePermissions/{id}",
+                    "response": {
+                        "$ref": "UserRolePermission"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Gets a list of user role permissions, possibly filtered.",
+                    "flatPath": "userprofiles/{profileId}/userRolePermissions",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.userRolePermissions.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "ids": {
+                            "description": "Select only user role permissions with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/userRolePermissions",
+                    "response": {
+                        "$ref": "UserRolePermissionsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "userRoles": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes an existing user role.",
+                    "flatPath": "userprofiles/{profileId}/userRoles/{id}",
+                    "httpMethod": "DELETE",
+                    "id": "dfareporting.userRoles.delete",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "User role ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/userRoles/{id}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "get": {
+                    "description": "Gets one user role by ID.",
+                    "flatPath": "userprofiles/{profileId}/userRoles/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.userRoles.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "User role ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/userRoles/{id}",
+                    "response": {
+                        "$ref": "UserRole"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new user role.",
+                    "flatPath": "userprofiles/{profileId}/userRoles",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.userRoles.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/userRoles",
+                    "request": {
+                        "$ref": "UserRole"
+                    },
+                    "response": {
+                        "$ref": "UserRole"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of user roles, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/userRoles",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.userRoles.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "accountUserRoleOnly": {
+                            "description": "Select only account level user roles not associated with any specific subaccount.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ids": {
+                            "description": "Select only user roles with the specified IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"userrole*2015\" will return objects with names like \"userrole June 2015\", \"userrole April 2015\", or simply \"userrole 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"userrole\" will match objects with name \"my userrole\", \"userrole 2015\", or simply \"userrole\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "subaccountId": {
+                            "description": "Select only user roles that belong to this subaccount.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/userRoles",
+                    "response": {
+                        "$ref": "UserRolesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing user role. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/userRoles",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.userRoles.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "UserRole ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/userRoles",
+                    "request": {
+                        "$ref": "UserRole"
+                    },
+                    "response": {
+                        "$ref": "UserRole"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing user role.",
+                    "flatPath": "userprofiles/{profileId}/userRoles",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.userRoles.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/userRoles",
+                    "request": {
+                        "$ref": "UserRole"
+                    },
+                    "response": {
+                        "$ref": "UserRole"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "videoFormats": {
+            "methods": {
+                "get": {
+                    "description": "Gets one video format by ID.",
+                    "flatPath": "userprofiles/{profileId}/videoFormats/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.videoFormats.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Video format ID.",
+                            "format": "int32",
+                            "location": "path",
+                            "required": true,
+                            "type": "integer"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/videoFormats/{id}",
+                    "response": {
+                        "$ref": "VideoFormat"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Lists available video formats.",
+                    "flatPath": "userprofiles/{profileId}/videoFormats",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.videoFormats.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/videoFormats",
+                    "response": {
+                        "$ref": "VideoFormatsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        }
+    },
+    "revision": "20210210",
+    "rootUrl": "https://dfareporting.googleapis.com/",
+    "schemas": {
+        "Account": {
+            "description": "Contains properties of a Campaign Manager account.",
+            "id": "Account",
+            "properties": {
+                "accountPermissionIds": {
+                    "description": "Account permissions assigned to this account.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "accountProfile": {
+                    "description": "Profile for this account. This is a read-only field that can be left blank.",
+                    "enum": [
+                        "ACCOUNT_PROFILE_BASIC",
+                        "ACCOUNT_PROFILE_STANDARD"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "active": {
+                    "description": "Whether this account is active.",
+                    "type": "boolean"
+                },
+                "activeAdsLimitTier": {
+                    "description": "Maximum number of active ads allowed for this account.",
+                    "enum": [
+                        "ACTIVE_ADS_TIER_40K",
+                        "ACTIVE_ADS_TIER_75K",
+                        "ACTIVE_ADS_TIER_100K",
+                        "ACTIVE_ADS_TIER_200K",
+                        "ACTIVE_ADS_TIER_300K",
+                        "ACTIVE_ADS_TIER_500K",
+                        "ACTIVE_ADS_TIER_750K",
+                        "ACTIVE_ADS_TIER_1M"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "activeViewOptOut": {
+                    "description": "Whether to serve creatives with Active View tags. If disabled, viewability data will not be available for any impressions.",
+                    "type": "boolean"
+                },
+                "availablePermissionIds": {
+                    "description": "User role permissions available to the user roles of this account.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "countryId": {
+                    "description": "ID of the country associated with this account.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "currencyId": {
+                    "description": "ID of currency associated with this account. This is a required field. Acceptable values are: - \"1\" for USD - \"2\" for GBP - \"3\" for ESP - \"4\" for SEK - \"5\" for CAD - \"6\" for JPY - \"7\" for DEM - \"8\" for AUD - \"9\" for FRF - \"10\" for ITL - \"11\" for DKK - \"12\" for NOK - \"13\" for FIM - \"14\" for ZAR - \"15\" for IEP - \"16\" for NLG - \"17\" for EUR - \"18\" for KRW - \"19\" for TWD - \"20\" for SGD - \"21\" for CNY - \"22\" for HKD - \"23\" for NZD - \"24\" for MYR - \"25\" for BRL - \"26\" for PTE - \"28\" for CLP - \"29\" for TRY - \"30\" for ARS - \"31\" for PEN - \"32\" for ILS - \"33\" for CHF - \"34\" for VEF - \"35\" for COP - \"36\" for GTQ - \"37\" for PLN - \"39\" for INR - \"40\" for THB - \"41\" for IDR - \"42\" for CZK - \"43\" for RON - \"44\" for HUF - \"45\" for RUB - \"46\" for AED - \"47\" for BGN - \"48\" for HRK - \"49\" for MXN - \"50\" for NGN - \"51\" for EGP ",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "defaultCreativeSizeId": {
+                    "description": "Default placement dimensions for this account.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "description": {
+                    "description": "Description of this account.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this account. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#account\".",
+                    "type": "string"
+                },
+                "locale": {
+                    "description": "Locale of this account. Acceptable values are: - \"cs\" (Czech) - \"de\" (German) - \"en\" (English) - \"en-GB\" (English United Kingdom) - \"es\" (Spanish) - \"fr\" (French) - \"it\" (Italian) - \"ja\" (Japanese) - \"ko\" (Korean) - \"pl\" (Polish) - \"pt-BR\" (Portuguese Brazil) - \"ru\" (Russian) - \"sv\" (Swedish) - \"tr\" (Turkish) - \"zh-CN\" (Chinese Simplified) - \"zh-TW\" (Chinese Traditional) ",
+                    "type": "string"
+                },
+                "maximumImageSize": {
+                    "description": "Maximum image size allowed for this account, in kilobytes. Value must be greater than or equal to 1.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this account. This is a required field, and must be less than 128 characters long and be globally unique.",
+                    "type": "string"
+                },
+                "nielsenOcrEnabled": {
+                    "description": "Whether campaigns created in this account will be enabled for Nielsen OCR reach ratings by default.",
+                    "type": "boolean"
+                },
+                "reportsConfiguration": {
+                    "$ref": "ReportsConfiguration",
+                    "description": "Reporting configuration of this account."
+                },
+                "shareReportsWithTwitter": {
+                    "description": "Share Path to Conversion reports with Twitter.",
+                    "type": "boolean"
+                },
+                "teaserSizeLimit": {
+                    "description": "File size limit in kilobytes of Rich Media teaser creatives. Acceptable values are 1 to 10240, inclusive.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AccountActiveAdSummary": {
+            "description": "Gets a summary of active ads in an account.",
+            "id": "AccountActiveAdSummary",
+            "properties": {
+                "accountId": {
+                    "description": "ID of the account.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "activeAds": {
+                    "description": "Ads that have been activated for the account",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "activeAdsLimitTier": {
+                    "description": "Maximum number of active ads allowed for the account.",
+                    "enum": [
+                        "ACTIVE_ADS_TIER_40K",
+                        "ACTIVE_ADS_TIER_75K",
+                        "ACTIVE_ADS_TIER_100K",
+                        "ACTIVE_ADS_TIER_200K",
+                        "ACTIVE_ADS_TIER_300K",
+                        "ACTIVE_ADS_TIER_500K",
+                        "ACTIVE_ADS_TIER_750K",
+                        "ACTIVE_ADS_TIER_1M"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "availableAds": {
+                    "description": "Ads that can be activated for the account.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountActiveAdSummary\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AccountPermission": {
+            "description": "AccountPermissions contains information about a particular account permission. Some features of Campaign Manager require an account permission to be present in the account.",
+            "id": "AccountPermission",
+            "properties": {
+                "accountProfiles": {
+                    "description": "Account profiles associated with this account permission. Possible values are: - \"ACCOUNT_PROFILE_BASIC\" - \"ACCOUNT_PROFILE_STANDARD\" ",
+                    "items": {
+                        "enum": [
+                            "ACCOUNT_PROFILE_BASIC",
+                            "ACCOUNT_PROFILE_STANDARD"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "id": {
+                    "description": "ID of this account permission.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountPermission\".",
+                    "type": "string"
+                },
+                "level": {
+                    "description": "Administrative level required to enable this account permission.",
+                    "enum": [
+                        "USER",
+                        "ADMINISTRATOR"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this account permission.",
+                    "type": "string"
+                },
+                "permissionGroupId": {
+                    "description": "Permission group of this account permission.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AccountPermissionGroup": {
+            "description": "AccountPermissionGroups contains a mapping of permission group IDs to names. A permission group is a grouping of account permissions.",
+            "id": "AccountPermissionGroup",
+            "properties": {
+                "id": {
+                    "description": "ID of this account permission group.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountPermissionGroup\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this account permission group.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AccountPermissionGroupsListResponse": {
+            "description": "Account Permission Group List Response",
+            "id": "AccountPermissionGroupsListResponse",
+            "properties": {
+                "accountPermissionGroups": {
+                    "description": "Account permission group collection.",
+                    "items": {
+                        "$ref": "AccountPermissionGroup"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountPermissionGroupsListResponse\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AccountPermissionsListResponse": {
+            "description": "Account Permission List Response",
+            "id": "AccountPermissionsListResponse",
+            "properties": {
+                "accountPermissions": {
+                    "description": "Account permission collection.",
+                    "items": {
+                        "$ref": "AccountPermission"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountPermissionsListResponse\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AccountUserProfile": {
+            "description": "AccountUserProfiles contains properties of a Campaign Manager user profile. This resource is specifically for managing user profiles, whereas UserProfiles is for accessing the API.",
+            "id": "AccountUserProfile",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of the user profile. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "active": {
+                    "description": "Whether this user profile is active. This defaults to false, and must be set true on insert for the user profile to be usable.",
+                    "type": "boolean"
+                },
+                "advertiserFilter": {
+                    "$ref": "ObjectFilter",
+                    "description": "Filter that describes which advertisers are visible to the user profile."
+                },
+                "campaignFilter": {
+                    "$ref": "ObjectFilter",
+                    "description": "Filter that describes which campaigns are visible to the user profile."
+                },
+                "comments": {
+                    "description": "Comments for this user profile.",
+                    "type": "string"
+                },
+                "email": {
+                    "description": "Email of the user profile. The email addresss must be linked to a Google Account. This field is required on insertion and is read-only after insertion.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of the user profile. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountUserProfile\".",
+                    "type": "string"
+                },
+                "locale": {
+                    "description": "Locale of the user profile. This is a required field. Acceptable values are: - \"cs\" (Czech) - \"de\" (German) - \"en\" (English) - \"en-GB\" (English United Kingdom) - \"es\" (Spanish) - \"fr\" (French) - \"it\" (Italian) - \"ja\" (Japanese) - \"ko\" (Korean) - \"pl\" (Polish) - \"pt-BR\" (Portuguese Brazil) - \"ru\" (Russian) - \"sv\" (Swedish) - \"tr\" (Turkish) - \"zh-CN\" (Chinese Simplified) - \"zh-TW\" (Chinese Traditional) ",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of the user profile. This is a required field. Must be less than 64 characters long, must be globally unique, and cannot contain whitespace or any of the following characters: \"&;<>\"#%,\".",
+                    "type": "string"
+                },
+                "siteFilter": {
+                    "$ref": "ObjectFilter",
+                    "description": "Filter that describes which sites are visible to the user profile."
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of the user profile. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "traffickerType": {
+                    "description": "Trafficker type of this user profile. This is a read-only field.",
+                    "enum": [
+                        "INTERNAL_NON_TRAFFICKER",
+                        "INTERNAL_TRAFFICKER",
+                        "EXTERNAL_TRAFFICKER"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "userAccessType": {
+                    "description": "User type of the user profile. This is a read-only field that can be left blank.",
+                    "enum": [
+                        "NORMAL_USER",
+                        "SUPER_USER",
+                        "INTERNAL_ADMINISTRATOR",
+                        "READ_ONLY_SUPER_USER"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "userRoleFilter": {
+                    "$ref": "ObjectFilter",
+                    "description": "Filter that describes which user roles are visible to the user profile."
+                },
+                "userRoleId": {
+                    "description": "User role ID of the user profile. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AccountUserProfilesListResponse": {
+            "description": "Account User Profile List Response",
+            "id": "AccountUserProfilesListResponse",
+            "properties": {
+                "accountUserProfiles": {
+                    "description": "Account user profile collection.",
+                    "items": {
+                        "$ref": "AccountUserProfile"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountUserProfilesListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AccountsListResponse": {
+            "description": "Account List Response",
+            "id": "AccountsListResponse",
+            "properties": {
+                "accounts": {
+                    "description": "Account collection.",
+                    "items": {
+                        "$ref": "Account"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Activities": {
+            "description": "Represents an activity group.",
+            "id": "Activities",
+            "properties": {
+                "filters": {
+                    "description": "List of activity filters. The dimension values need to be all either of type \"dfa:activity\" or \"dfa:activityGroup\".",
+                    "items": {
+                        "$ref": "DimensionValue"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#activities.",
+                    "type": "string"
+                },
+                "metricNames": {
+                    "description": "List of names of floodlight activity metrics.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Ad": {
+            "description": "Contains properties of a Campaign Manager ad.",
+            "id": "Ad",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this ad. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "active": {
+                    "description": "Whether this ad is active. When true, archived must be false.",
+                    "type": "boolean"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this ad. This is a required field on insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "archived": {
+                    "description": "Whether this ad is archived. When true, active must be false.",
+                    "type": "boolean"
+                },
+                "audienceSegmentId": {
+                    "description": "Audience segment ID that is being targeted for this ad. Applicable when type is AD_SERVING_STANDARD_AD.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "campaignId": {
+                    "description": "Campaign ID of this ad. This is a required field on insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "campaignIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the campaign. This is a read-only, auto-generated field."
+                },
+                "clickThroughUrl": {
+                    "$ref": "ClickThroughUrl",
+                    "description": "Click-through URL for this ad. This is a required field on insertion. Applicable when type is AD_SERVING_CLICK_TRACKER."
+                },
+                "clickThroughUrlSuffixProperties": {
+                    "$ref": "ClickThroughUrlSuffixProperties",
+                    "description": "Click-through URL suffix properties for this ad. Applies to the URL in the ad or (if overriding ad properties) the URL in the creative."
+                },
+                "comments": {
+                    "description": "Comments for this ad.",
+                    "type": "string"
+                },
+                "compatibility": {
+                    "description": "Compatibility of this ad. Applicable when type is AD_SERVING_DEFAULT_AD. DISPLAY and DISPLAY_INTERSTITIAL refer to either rendering on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are only used for existing default ads. New mobile placements must be assigned DISPLAY or DISPLAY_INTERSTITIAL and default ads created for those placements will be limited to those compatibility types. IN_STREAM_VIDEO refers to rendering in-stream video ads developed with the VAST standard.",
+                    "enum": [
+                        "DISPLAY",
+                        "DISPLAY_INTERSTITIAL",
+                        "APP",
+                        "APP_INTERSTITIAL",
+                        "IN_STREAM_VIDEO",
+                        "IN_STREAM_AUDIO"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "createInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the creation of this ad. This is a read-only field."
+                },
+                "creativeGroupAssignments": {
+                    "description": "Creative group assignments for this ad. Applicable when type is AD_SERVING_CLICK_TRACKER. Only one assignment per creative group number is allowed for a maximum of two assignments.",
+                    "items": {
+                        "$ref": "CreativeGroupAssignment"
+                    },
+                    "type": "array"
+                },
+                "creativeRotation": {
+                    "$ref": "CreativeRotation",
+                    "description": "Creative rotation for this ad. Applicable when type is AD_SERVING_DEFAULT_AD, AD_SERVING_STANDARD_AD, or AD_SERVING_TRACKING. When type is AD_SERVING_DEFAULT_AD, this field should have exactly one creativeAssignment ."
+                },
+                "dayPartTargeting": {
+                    "$ref": "DayPartTargeting",
+                    "description": "Time and day targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD."
+                },
+                "defaultClickThroughEventTagProperties": {
+                    "$ref": "DefaultClickThroughEventTagProperties",
+                    "description": "Default click-through event tag properties for this ad."
+                },
+                "deliverySchedule": {
+                    "$ref": "DeliverySchedule",
+                    "description": "Delivery schedule information for this ad. Applicable when type is AD_SERVING_STANDARD_AD or AD_SERVING_TRACKING. This field along with subfields priority and impressionRatio are required on insertion when type is AD_SERVING_STANDARD_AD."
+                },
+                "dynamicClickTracker": {
+                    "description": "Whether this ad is a dynamic click tracker. Applicable when type is AD_SERVING_CLICK_TRACKER. This is a required field on insert, and is read-only after insert.",
+                    "type": "boolean"
+                },
+                "endTime": {
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "eventTagOverrides": {
+                    "description": "Event tag overrides for this ad.",
+                    "items": {
+                        "$ref": "EventTagOverride"
+                    },
+                    "type": "array"
+                },
+                "geoTargeting": {
+                    "$ref": "GeoTargeting",
+                    "description": "Geographical targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD."
+                },
+                "id": {
+                    "description": "ID of this ad. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this ad. This is a read-only, auto-generated field."
+                },
+                "keyValueTargetingExpression": {
+                    "$ref": "KeyValueTargetingExpression",
+                    "description": "Key-value targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#ad\".",
+                    "type": "string"
+                },
+                "languageTargeting": {
+                    "$ref": "LanguageTargeting",
+                    "description": "Language targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD."
+                },
+                "lastModifiedInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the most recent modification of this ad. This is a read-only field."
+                },
+                "name": {
+                    "description": "Name of this ad. This is a required field and must be less than 256 characters long.",
+                    "type": "string"
+                },
+                "placementAssignments": {
+                    "description": "Placement assignments for this ad.",
+                    "items": {
+                        "$ref": "PlacementAssignment"
+                    },
+                    "type": "array"
+                },
+                "remarketingListExpression": {
+                    "$ref": "ListTargetingExpression",
+                    "description": "Remarketing list targeting expression for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD."
+                },
+                "size": {
+                    "$ref": "Size",
+                    "description": "Size of this ad. Applicable when type is AD_SERVING_DEFAULT_AD."
+                },
+                "sslCompliant": {
+                    "description": "Whether this ad is ssl compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.",
+                    "type": "boolean"
+                },
+                "sslRequired": {
+                    "description": "Whether this ad requires ssl. This is a read-only field that is auto-generated when the ad is inserted or updated.",
+                    "type": "boolean"
+                },
+                "startTime": {
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this ad. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "targetingTemplateId": {
+                    "description": "Targeting template ID, used to apply preconfigured targeting information to this ad. This cannot be set while any of dayPartTargeting, geoTargeting, keyValueTargetingExpression, languageTargeting, remarketingListExpression, or technologyTargeting are set. Applicable when type is AD_SERVING_STANDARD_AD.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "technologyTargeting": {
+                    "$ref": "TechnologyTargeting",
+                    "description": "Technology platform targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD."
+                },
+                "type": {
+                    "description": "Type of ad. This is a required field on insertion. Note that default ads ( AD_SERVING_DEFAULT_AD) cannot be created directly (see Creative resource).",
+                    "enum": [
+                        "AD_SERVING_STANDARD_AD",
+                        "AD_SERVING_DEFAULT_AD",
+                        "AD_SERVING_CLICK_TRACKER",
+                        "AD_SERVING_TRACKING",
+                        "AD_SERVING_BRAND_SAFE_AD"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AdBlockingConfiguration": {
+            "description": "Campaign ad blocking settings.",
+            "id": "AdBlockingConfiguration",
+            "properties": {
+                "clickThroughUrl": {
+                    "description": "Click-through URL used by brand-neutral ads. This is a required field when overrideClickThroughUrl is set to true.",
+                    "type": "string"
+                },
+                "creativeBundleId": {
+                    "description": "ID of a creative bundle to use for this campaign. If set, brand-neutral ads will select creatives from this bundle. Otherwise, a default transparent pixel will be used.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "enabled": {
+                    "description": "Whether this campaign has enabled ad blocking. When true, ad blocking is enabled for placements in the campaign, but this may be overridden by site and placement settings. When false, ad blocking is disabled for all placements under the campaign, regardless of site and placement settings.",
+                    "type": "boolean"
+                },
+                "overrideClickThroughUrl": {
+                    "description": "Whether the brand-neutral ad's click-through URL comes from the campaign's creative bundle or the override URL. Must be set to true if ad blocking is enabled and no creative bundle is configured.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "AdSlot": {
+            "description": "Ad Slot",
+            "id": "AdSlot",
+            "properties": {
+                "comment": {
+                    "description": "Comment for this ad slot.",
+                    "type": "string"
+                },
+                "compatibility": {
+                    "description": "Ad slot compatibility. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop, mobile devices or in mobile apps for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are for rendering in mobile apps. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard.",
+                    "enum": [
+                        "DISPLAY",
+                        "DISPLAY_INTERSTITIAL",
+                        "APP",
+                        "APP_INTERSTITIAL",
+                        "IN_STREAM_VIDEO",
+                        "IN_STREAM_AUDIO"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "height": {
+                    "description": "Height of this ad slot.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "linkedPlacementId": {
+                    "description": "ID of the placement from an external platform that is linked to this ad slot.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this ad slot.",
+                    "type": "string"
+                },
+                "paymentSourceType": {
+                    "description": "Payment source type of this ad slot.",
+                    "enum": [
+                        "PLANNING_PAYMENT_SOURCE_TYPE_AGENCY_PAID",
+                        "PLANNING_PAYMENT_SOURCE_TYPE_PUBLISHER_PAID"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "primary": {
+                    "description": "Primary ad slot of a roadblock inventory item.",
+                    "type": "boolean"
+                },
+                "width": {
+                    "description": "Width of this ad slot.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AdsListResponse": {
+            "description": "Ad List Response",
+            "id": "AdsListResponse",
+            "properties": {
+                "ads": {
+                    "description": "Ad collection.",
+                    "items": {
+                        "$ref": "Ad"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#adsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Advertiser": {
+            "description": "Contains properties of a Campaign Manager advertiser.",
+            "id": "Advertiser",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this advertiser.This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserGroupId": {
+                    "description": "ID of the advertiser group this advertiser belongs to. You can group advertisers for reporting purposes, allowing you to see aggregated information for all advertisers in each group.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "clickThroughUrlSuffix": {
+                    "description": "Suffix added to click-through URL of ad creative associations under this advertiser. Must be less than 129 characters long.",
+                    "type": "string"
+                },
+                "defaultClickThroughEventTagId": {
+                    "description": "ID of the click-through event tag to apply by default to the landing pages of this advertiser's campaigns.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "defaultEmail": {
+                    "description": "Default email address used in sender field for tag emails.",
+                    "type": "string"
+                },
+                "floodlightConfigurationId": {
+                    "description": "Floodlight configuration ID of this advertiser. The floodlight configuration ID will be created automatically, so on insert this field should be left blank. This field can be set to another advertiser's floodlight configuration ID in order to share that advertiser's floodlight configuration with this advertiser, so long as: - This advertiser's original floodlight configuration is not already associated with floodlight activities or floodlight activity groups. - This advertiser's original floodlight configuration is not already shared with another advertiser. ",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "floodlightConfigurationIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field."
+                },
+                "id": {
+                    "description": "ID of this advertiser. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this advertiser. This is a read-only, auto-generated field."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiser\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this advertiser. This is a required field and must be less than 256 characters long and unique among advertisers of the same account.",
+                    "type": "string"
+                },
+                "originalFloodlightConfigurationId": {
+                    "description": "Original floodlight configuration before any sharing occurred. Set the floodlightConfigurationId of this advertiser to originalFloodlightConfigurationId to unshare the advertiser's current floodlight configuration. You cannot unshare an advertiser's floodlight configuration if the shared configuration has activities associated with any campaign or placement.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "Status of this advertiser.",
+                    "enum": [
+                        "APPROVED",
+                        "ON_HOLD"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this advertiser.This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "suspended": {
+                    "description": "Suspension status of this advertiser.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "AdvertiserGroup": {
+            "description": "Groups advertisers together so that reports can be generated for the entire group at once.",
+            "id": "AdvertiserGroup",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this advertiser group. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this advertiser group. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiserGroup\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this advertiser group. This is a required field and must be less than 256 characters long and unique among advertiser groups of the same account.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AdvertiserGroupsListResponse": {
+            "description": "Advertiser Group List Response",
+            "id": "AdvertiserGroupsListResponse",
+            "properties": {
+                "advertiserGroups": {
+                    "description": "Advertiser group collection.",
+                    "items": {
+                        "$ref": "AdvertiserGroup"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiserGroupsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AdvertiserLandingPagesListResponse": {
+            "description": "Landing Page List Response",
+            "id": "AdvertiserLandingPagesListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiserLandingPagesListResponse\".",
+                    "type": "string"
+                },
+                "landingPages": {
+                    "description": "Landing page collection",
+                    "items": {
+                        "$ref": "LandingPage"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AdvertisersListResponse": {
+            "description": "Advertiser List Response",
+            "id": "AdvertisersListResponse",
+            "properties": {
+                "advertisers": {
+                    "description": "Advertiser collection.",
+                    "items": {
+                        "$ref": "Advertiser"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertisersListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AudienceSegment": {
+            "description": "Audience Segment.",
+            "id": "AudienceSegment",
+            "properties": {
+                "allocation": {
+                    "description": "Weight allocated to this segment. The weight assigned will be understood in proportion to the weights assigned to other segments in the same segment group. Acceptable values are 1 to 1000, inclusive.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "id": {
+                    "description": "ID of this audience segment. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this audience segment. This is a required field and must be less than 65 characters long.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AudienceSegmentGroup": {
+            "description": "Audience Segment Group.",
+            "id": "AudienceSegmentGroup",
+            "properties": {
+                "audienceSegments": {
+                    "description": "Audience segments assigned to this group. The number of segments must be between 2 and 100.",
+                    "items": {
+                        "$ref": "AudienceSegment"
+                    },
+                    "type": "array"
+                },
+                "id": {
+                    "description": "ID of this audience segment group. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this audience segment group. This is a required field and must be less than 65 characters long.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Browser": {
+            "description": "Contains information about a browser that can be targeted by ads.",
+            "id": "Browser",
+            "properties": {
+                "browserVersionId": {
+                    "description": "ID referring to this grouping of browser and version numbers. This is the ID used for targeting.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "dartId": {
+                    "description": "DART ID of this browser. This is the ID used when generating reports.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#browser\".",
+                    "type": "string"
+                },
+                "majorVersion": {
+                    "description": "Major version number (leftmost number) of this browser. For example, for Chrome 5.0.376.86 beta, this field should be set to 5. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.",
+                    "type": "string"
+                },
+                "minorVersion": {
+                    "description": "Minor version number (number after first dot on left) of this browser. For example, for Chrome 5.0.375.86 beta, this field should be set to 0. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this browser.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "BrowsersListResponse": {
+            "description": "Browser List Response",
+            "id": "BrowsersListResponse",
+            "properties": {
+                "browsers": {
+                    "description": "Browser collection.",
+                    "items": {
+                        "$ref": "Browser"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#browsersListResponse\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Campaign": {
+            "description": "Contains properties of a Campaign Manager campaign.",
+            "id": "Campaign",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this campaign. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "adBlockingConfiguration": {
+                    "$ref": "AdBlockingConfiguration",
+                    "description": "Ad blocking settings for this campaign."
+                },
+                "additionalCreativeOptimizationConfigurations": {
+                    "description": "Additional creative optimization configurations for the campaign.",
+                    "items": {
+                        "$ref": "CreativeOptimizationConfiguration"
+                    },
+                    "type": "array"
+                },
+                "advertiserGroupId": {
+                    "description": "Advertiser group ID of the associated advertiser.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this campaign. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the advertiser ID of this campaign. This is a read-only, auto-generated field."
+                },
+                "archived": {
+                    "description": "Whether this campaign has been archived.",
+                    "type": "boolean"
+                },
+                "audienceSegmentGroups": {
+                    "description": "Audience segment groups assigned to this campaign. Cannot have more than 300 segment groups.",
+                    "items": {
+                        "$ref": "AudienceSegmentGroup"
+                    },
+                    "type": "array"
+                },
+                "billingInvoiceCode": {
+                    "description": "Billing invoice code included in the Campaign Manager client billing invoices associated with the campaign.",
+                    "type": "string"
+                },
+                "clickThroughUrlSuffixProperties": {
+                    "$ref": "ClickThroughUrlSuffixProperties",
+                    "description": "Click-through URL suffix override properties for this campaign."
+                },
+                "comment": {
+                    "description": "Arbitrary comments about this campaign. Must be less than 256 characters long.",
+                    "type": "string"
+                },
+                "createInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the creation of this campaign. This is a read-only field."
+                },
+                "creativeGroupIds": {
+                    "description": "List of creative group IDs that are assigned to the campaign.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "creativeOptimizationConfiguration": {
+                    "$ref": "CreativeOptimizationConfiguration",
+                    "description": "Creative optimization configuration for the campaign."
+                },
+                "defaultClickThroughEventTagProperties": {
+                    "$ref": "DefaultClickThroughEventTagProperties",
+                    "description": "Click-through event tag ID override properties for this campaign."
+                },
+                "defaultLandingPageId": {
+                    "description": "The default landing page ID for this campaign.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "endDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "eventTagOverrides": {
+                    "description": "Overrides that can be used to activate or deactivate advertiser event tags.",
+                    "items": {
+                        "$ref": "EventTagOverride"
+                    },
+                    "type": "array"
+                },
+                "externalId": {
+                    "description": "External ID for this campaign.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this campaign. This is a read-only auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this campaign. This is a read-only, auto-generated field."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaign\".",
+                    "type": "string"
+                },
+                "lastModifiedInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the most recent modification of this campaign. This is a read-only field."
+                },
+                "name": {
+                    "description": "Name of this campaign. This is a required field and must be less than 256 characters long and unique among campaigns of the same advertiser.",
+                    "type": "string"
+                },
+                "nielsenOcrEnabled": {
+                    "description": "Whether Nielsen reports are enabled for this campaign.",
+                    "type": "boolean"
+                },
+                "startDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this campaign. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "traffickerEmails": {
+                    "description": "Campaign trafficker contact emails.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "CampaignCreativeAssociation": {
+            "description": "Identifies a creative which has been associated with a given campaign.",
+            "id": "CampaignCreativeAssociation",
+            "properties": {
+                "creativeId": {
+                    "description": "ID of the creative associated with the campaign. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaignCreativeAssociation\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CampaignCreativeAssociationsListResponse": {
+            "description": "Campaign Creative Association List Response",
+            "id": "CampaignCreativeAssociationsListResponse",
+            "properties": {
+                "campaignCreativeAssociations": {
+                    "description": "Campaign creative association collection",
+                    "items": {
+                        "$ref": "CampaignCreativeAssociation"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaignCreativeAssociationsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CampaignsListResponse": {
+            "description": "Campaign List Response",
+            "id": "CampaignsListResponse",
+            "properties": {
+                "campaigns": {
+                    "description": "Campaign collection.",
+                    "items": {
+                        "$ref": "Campaign"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaignsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ChangeLog": {
+            "description": "Describes a change that a user has made to a resource.",
+            "id": "ChangeLog",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of the modified object.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "action": {
+                    "description": "Action which caused the change.",
+                    "type": "string"
+                },
+                "changeTime": {
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "fieldName": {
+                    "description": "Field name of the object which changed.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this change log.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#changeLog\".",
+                    "type": "string"
+                },
+                "newValue": {
+                    "description": "New value of the object field.",
+                    "type": "string"
+                },
+                "objectId": {
+                    "description": "ID of the object of this change log. The object could be a campaign, placement, ad, or other type.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "objectType": {
+                    "description": "Object type of the change log.",
+                    "type": "string"
+                },
+                "oldValue": {
+                    "description": "Old value of the object field.",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of the modified object.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "transactionId": {
+                    "description": "Transaction ID of this change log. When a single API call results in many changes, each change will have a separate ID in the change log but will share the same transactionId.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "userProfileId": {
+                    "description": "ID of the user who modified the object.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "userProfileName": {
+                    "description": "User profile name of the user who modified the object.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ChangeLogsListResponse": {
+            "description": "Change Log List Response",
+            "id": "ChangeLogsListResponse",
+            "properties": {
+                "changeLogs": {
+                    "description": "Change log collection.",
+                    "items": {
+                        "$ref": "ChangeLog"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#changeLogsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CitiesListResponse": {
+            "description": "City List Response",
+            "id": "CitiesListResponse",
+            "properties": {
+                "cities": {
+                    "description": "City collection.",
+                    "items": {
+                        "$ref": "City"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#citiesListResponse\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "City": {
+            "description": "Contains information about a city that can be targeted by ads.",
+            "id": "City",
+            "properties": {
+                "countryCode": {
+                    "description": "Country code of the country to which this city belongs.",
+                    "type": "string"
+                },
+                "countryDartId": {
+                    "description": "DART ID of the country to which this city belongs.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "dartId": {
+                    "description": "DART ID of this city. This is the ID used for targeting and generating reports.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#city\".",
+                    "type": "string"
+                },
+                "metroCode": {
+                    "description": "Metro region code of the metro region (DMA) to which this city belongs.",
+                    "type": "string"
+                },
+                "metroDmaId": {
+                    "description": "ID of the metro region (DMA) to which this city belongs.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this city.",
+                    "type": "string"
+                },
+                "regionCode": {
+                    "description": "Region code of the region to which this city belongs.",
+                    "type": "string"
+                },
+                "regionDartId": {
+                    "description": "DART ID of the region to which this city belongs.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ClickTag": {
+            "description": "Creative Click Tag.",
+            "id": "ClickTag",
+            "properties": {
+                "clickThroughUrl": {
+                    "$ref": "CreativeClickThroughUrl",
+                    "description": "Parameter value for the specified click tag. This field contains a click-through url."
+                },
+                "eventName": {
+                    "description": "Advertiser event name associated with the click tag. This field is used by DISPLAY_IMAGE_GALLERY and HTML5_BANNER creatives. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Parameter name for the specified click tag. For DISPLAY_IMAGE_GALLERY creative assets, this field must match the value of the creative asset's creativeAssetId.name field.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ClickThroughUrl": {
+            "description": "Click-through URL",
+            "id": "ClickThroughUrl",
+            "properties": {
+                "computedClickThroughUrl": {
+                    "description": "Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows: - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field. - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field. - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field. ",
+                    "type": "string"
+                },
+                "customClickThroughUrl": {
+                    "description": "Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.",
+                    "type": "string"
+                },
+                "defaultLandingPage": {
+                    "description": "Whether the campaign default landing page is used.",
+                    "type": "boolean"
+                },
+                "landingPageId": {
+                    "description": "ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ClickThroughUrlSuffixProperties": {
+            "description": "Click Through URL Suffix settings.",
+            "id": "ClickThroughUrlSuffixProperties",
+            "properties": {
+                "clickThroughUrlSuffix": {
+                    "description": "Click-through URL suffix to apply to all ads in this entity's scope. Must be less than 128 characters long.",
+                    "type": "string"
+                },
+                "overrideInheritedSuffix": {
+                    "description": "Whether this entity should override the inherited click-through URL suffix with its own defined value.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "CompanionClickThroughOverride": {
+            "description": "Companion Click-through override.",
+            "id": "CompanionClickThroughOverride",
+            "properties": {
+                "clickThroughUrl": {
+                    "$ref": "ClickThroughUrl",
+                    "description": "Click-through URL of this companion click-through override."
+                },
+                "creativeId": {
+                    "description": "ID of the creative for this companion click-through override.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CompanionSetting": {
+            "description": "Companion Settings",
+            "id": "CompanionSetting",
+            "properties": {
+                "companionsDisabled": {
+                    "description": "Whether companions are disabled for this placement.",
+                    "type": "boolean"
+                },
+                "enabledSizes": {
+                    "description": "Allowlist of companion sizes to be served to this placement. Set this list to null or empty to serve all companion sizes.",
+                    "items": {
+                        "$ref": "Size"
+                    },
+                    "type": "array"
+                },
+                "imageOnly": {
+                    "description": "Whether to serve only static images as companions.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#companionSetting\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CompatibleFields": {
+            "description": "Represents a response to the queryCompatibleFields method.",
+            "id": "CompatibleFields",
+            "properties": {
+                "crossDimensionReachReportCompatibleFields": {
+                    "$ref": "CrossDimensionReachReportCompatibleFields",
+                    "description": "Contains items that are compatible to be selected for a report of type \"CROSS_DIMENSION_REACH\"."
+                },
+                "floodlightReportCompatibleFields": {
+                    "$ref": "FloodlightReportCompatibleFields",
+                    "description": "Contains items that are compatible to be selected for a report of type \"FLOODLIGHT\"."
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#compatibleFields.",
+                    "type": "string"
+                },
+                "pathToConversionReportCompatibleFields": {
+                    "$ref": "PathToConversionReportCompatibleFields",
+                    "description": "Contains items that are compatible to be selected for a report of type \"PATH_TO_CONVERSION\"."
+                },
+                "reachReportCompatibleFields": {
+                    "$ref": "ReachReportCompatibleFields",
+                    "description": "Contains items that are compatible to be selected for a report of type \"REACH\"."
+                },
+                "reportCompatibleFields": {
+                    "$ref": "ReportCompatibleFields",
+                    "description": "Contains items that are compatible to be selected for a report of type \"STANDARD\"."
+                }
+            },
+            "type": "object"
+        },
+        "ConnectionType": {
+            "description": "Contains information about an internet connection type that can be targeted by ads. Clients can use the connection type to target mobile vs. broadband users.",
+            "id": "ConnectionType",
+            "properties": {
+                "id": {
+                    "description": "ID of this connection type.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#connectionType\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this connection type.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ConnectionTypesListResponse": {
+            "description": "Connection Type List Response",
+            "id": "ConnectionTypesListResponse",
+            "properties": {
+                "connectionTypes": {
+                    "description": "Collection of connection types such as broadband and mobile.",
+                    "items": {
+                        "$ref": "ConnectionType"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#connectionTypesListResponse\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ContentCategoriesListResponse": {
+            "description": "Content Category List Response",
+            "id": "ContentCategoriesListResponse",
+            "properties": {
+                "contentCategories": {
+                    "description": "Content category collection.",
+                    "items": {
+                        "$ref": "ContentCategory"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#contentCategoriesListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ContentCategory": {
+            "description": "Organizes placements according to the contents of their associated webpages.",
+            "id": "ContentCategory",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this content category. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this content category. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#contentCategory\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this content category. This is a required field and must be less than 256 characters long and unique among content categories of the same account.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Conversion": {
+            "description": "A Conversion represents when a user successfully performs a desired action after seeing an ad.",
+            "id": "Conversion",
+            "properties": {
+                "childDirectedTreatment": {
+                    "description": "Whether this particular request may come from a user under the age of 13, under COPPA compliance.",
+                    "type": "boolean"
+                },
+                "customVariables": {
+                    "description": "Custom floodlight variables.",
+                    "items": {
+                        "$ref": "CustomFloodlightVariable"
+                    },
+                    "type": "array"
+                },
+                "encryptedUserId": {
+                    "description": "The alphanumeric encrypted user ID. When set, encryptionInfo should also be specified. This field is mutually exclusive with encryptedUserIdCandidates[], matchId, mobileDeviceId and gclid. This or encryptedUserIdCandidates[] or matchId or mobileDeviceId or gclid is a required field.",
+                    "type": "string"
+                },
+                "encryptedUserIdCandidates": {
+                    "description": "A list of the alphanumeric encrypted user IDs. Any user ID with exposure prior to the conversion timestamp will be used in the inserted conversion. If no such user ID is found then the conversion will be rejected with INVALID_ARGUMENT error. When set, encryptionInfo should also be specified. This field may only be used when calling batchinsert; it is not supported by batchupdate. This field is mutually exclusive with encryptedUserId, matchId, mobileDeviceId and gclid. This or encryptedUserId or matchId or mobileDeviceId or gclid is a required field.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "floodlightActivityId": {
+                    "description": "Floodlight Activity ID of this conversion. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "floodlightConfigurationId": {
+                    "description": "Floodlight Configuration ID of this conversion. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "gclid": {
+                    "description": "The Google click ID. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[], matchId and mobileDeviceId. This or encryptedUserId or encryptedUserIdCandidates[] or matchId or mobileDeviceId is a required field.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversion\".",
+                    "type": "string"
+                },
+                "limitAdTracking": {
+                    "description": "Whether Limit Ad Tracking is enabled. When set to true, the conversion will be used for reporting but not targeting. This will prevent remarketing.",
+                    "type": "boolean"
+                },
+                "matchId": {
+                    "description": "The match ID field. A match ID is your own first-party identifier that has been synced with Google using the match ID feature in Floodlight. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[],mobileDeviceId and gclid. This or encryptedUserId or encryptedUserIdCandidates[] or mobileDeviceId or gclid is a required field.",
+                    "type": "string"
+                },
+                "mobileDeviceId": {
+                    "description": "The mobile device ID. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[], matchId and gclid. This or encryptedUserId or encryptedUserIdCandidates[] or matchId or gclid is a required field.",
+                    "type": "string"
+                },
+                "nonPersonalizedAd": {
+                    "description": "Whether the conversion was for a non personalized ad.",
+                    "type": "boolean"
+                },
+                "ordinal": {
+                    "description": "The ordinal of the conversion. Use this field to control how conversions of the same user and day are de-duplicated. This is a required field.",
+                    "type": "string"
+                },
+                "quantity": {
+                    "description": "The quantity of the conversion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "timestampMicros": {
+                    "description": "The timestamp of conversion, in Unix epoch micros. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "treatmentForUnderage": {
+                    "description": "Whether this particular request may come from a user under the age of 16 (may differ by country), under compliance with the European Union's General Data Protection Regulation (GDPR).",
+                    "type": "boolean"
+                },
+                "value": {
+                    "description": "The value of the conversion.",
+                    "format": "double",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "ConversionError": {
+            "description": "The error code and description for a conversion that failed to insert or update.",
+            "id": "ConversionError",
+            "properties": {
+                "code": {
+                    "description": "The error code.",
+                    "enum": [
+                        "INVALID_ARGUMENT",
+                        "INTERNAL",
+                        "PERMISSION_DENIED",
+                        "NOT_FOUND"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionError\".",
+                    "type": "string"
+                },
+                "message": {
+                    "description": "A description of the error.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ConversionStatus": {
+            "description": "The original conversion that was inserted or updated and whether there were any errors.",
+            "id": "ConversionStatus",
+            "properties": {
+                "conversion": {
+                    "$ref": "Conversion",
+                    "description": "The original conversion that was inserted or updated."
+                },
+                "errors": {
+                    "description": "A list of errors related to this conversion.",
+                    "items": {
+                        "$ref": "ConversionError"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionStatus\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ConversionsBatchInsertRequest": {
+            "description": "Insert Conversions Request.",
+            "id": "ConversionsBatchInsertRequest",
+            "properties": {
+                "conversions": {
+                    "description": "The set of conversions to insert.",
+                    "items": {
+                        "$ref": "Conversion"
+                    },
+                    "type": "array"
+                },
+                "encryptionInfo": {
+                    "$ref": "EncryptionInfo",
+                    "description": "Describes how encryptedUserId or encryptedUserIdCandidates[] is encrypted. This is a required field if encryptedUserId or encryptedUserIdCandidates[] is used."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionsBatchInsertRequest\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ConversionsBatchInsertResponse": {
+            "description": "Insert Conversions Response.",
+            "id": "ConversionsBatchInsertResponse",
+            "properties": {
+                "hasFailures": {
+                    "description": "Indicates that some or all conversions failed to insert.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionsBatchInsertResponse\".",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "The insert status of each conversion. Statuses are returned in the same order that conversions are inserted.",
+                    "items": {
+                        "$ref": "ConversionStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ConversionsBatchUpdateRequest": {
+            "description": "Update Conversions Request.",
+            "id": "ConversionsBatchUpdateRequest",
+            "properties": {
+                "conversions": {
+                    "description": "The set of conversions to update.",
+                    "items": {
+                        "$ref": "Conversion"
+                    },
+                    "type": "array"
+                },
+                "encryptionInfo": {
+                    "$ref": "EncryptionInfo",
+                    "description": "Describes how encryptedUserId is encrypted. This is a required field if encryptedUserId is used."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionsBatchUpdateRequest\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ConversionsBatchUpdateResponse": {
+            "description": "Update Conversions Response.",
+            "id": "ConversionsBatchUpdateResponse",
+            "properties": {
+                "hasFailures": {
+                    "description": "Indicates that some or all conversions failed to update.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionsBatchUpdateResponse\".",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "The update status of each conversion. Statuses are returned in the same order that conversions are updated.",
+                    "items": {
+                        "$ref": "ConversionStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "CountriesListResponse": {
+            "description": "Country List Response",
+            "id": "CountriesListResponse",
+            "properties": {
+                "countries": {
+                    "description": "Country collection.",
+                    "items": {
+                        "$ref": "Country"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#countriesListResponse\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Country": {
+            "description": "Contains information about a country that can be targeted by ads.",
+            "id": "Country",
+            "properties": {
+                "countryCode": {
+                    "description": "Country code.",
+                    "type": "string"
+                },
+                "dartId": {
+                    "description": "DART ID of this country. This is the ID used for targeting and generating reports.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#country\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this country.",
+                    "type": "string"
+                },
+                "sslEnabled": {
+                    "description": "Whether ad serving supports secure servers in this country.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "Creative": {
+            "description": "Contains properties of a Creative.",
+            "id": "Creative",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "active": {
+                    "description": "Whether the creative is active. Applicable to all creative types.",
+                    "type": "boolean"
+                },
+                "adParameters": {
+                    "description": "Ad parameters user for VPAID creative. This is a read-only field. Applicable to the following creative types: all VPAID.",
+                    "type": "string"
+                },
+                "adTagKeys": {
+                    "description": "Keywords for a Rich Media creative. Keywords let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use keywords to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "additionalSizes": {
+                    "description": "Additional sizes associated with a responsive creative. When inserting or updating a creative either the size ID field or size width and height fields can be used. Applicable to DISPLAY creatives when the primary asset type is HTML_IMAGE.",
+                    "items": {
+                        "$ref": "Size"
+                    },
+                    "type": "array"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this creative. This is a required field. Applicable to all creative types.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "allowScriptAccess": {
+                    "description": "Whether script access is allowed for this creative. This is a read-only and deprecated field which will automatically be set to true on update. Applicable to the following creative types: FLASH_INPAGE.",
+                    "type": "boolean"
+                },
+                "archived": {
+                    "description": "Whether the creative is archived. Applicable to all creative types.",
+                    "type": "boolean"
+                },
+                "artworkType": {
+                    "description": "Type of artwork used for the creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
+                    "enum": [
+                        "ARTWORK_TYPE_FLASH",
+                        "ARTWORK_TYPE_HTML5",
+                        "ARTWORK_TYPE_MIXED",
+                        "ARTWORK_TYPE_IMAGE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "authoringSource": {
+                    "description": "Source application where creative was authored. Presently, only DBM authored creatives will have this field set. Applicable to all creative types.",
+                    "enum": [
+                        "CREATIVE_AUTHORING_SOURCE_DCM",
+                        "CREATIVE_AUTHORING_SOURCE_DBM",
+                        "CREATIVE_AUTHORING_SOURCE_STUDIO",
+                        "CREATIVE_AUTHORING_SOURCE_GWD"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "authoringTool": {
+                    "description": "Authoring tool for HTML5 banner creatives. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.",
+                    "enum": [
+                        "NINJA",
+                        "SWIFFY"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "autoAdvanceImages": {
+                    "description": "Whether images are automatically advanced for image gallery creatives. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY.",
+                    "type": "boolean"
+                },
+                "backgroundColor": {
+                    "description": "The 6-character HTML color code, beginning with #, for the background of the window area where the Flash file is displayed. Default is white. Applicable to the following creative types: FLASH_INPAGE.",
+                    "type": "string"
+                },
+                "backupImageClickThroughUrl": {
+                    "$ref": "CreativeClickThroughUrl",
+                    "description": "Click-through URL for backup image. Applicable to ENHANCED_BANNER when the primary asset type is not HTML_IMAGE."
+                },
+                "backupImageFeatures": {
+                    "description": "List of feature dependencies that will cause a backup image to be served if the browser that serves the ad does not support them. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative asset correctly. This field is initially auto-generated to contain all features detected by Campaign Manager for all the assets of this creative and can then be modified by the client. To reset this field, copy over all the creativeAssets' detected features. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
+                    "items": {
+                        "enum": [
+                            "CSS_FONT_FACE",
+                            "CSS_BACKGROUND_SIZE",
+                            "CSS_BORDER_IMAGE",
+                            "CSS_BORDER_RADIUS",
+                            "CSS_BOX_SHADOW",
+                            "CSS_FLEX_BOX",
+                            "CSS_HSLA",
+                            "CSS_MULTIPLE_BGS",
+                            "CSS_OPACITY",
+                            "CSS_RGBA",
+                            "CSS_TEXT_SHADOW",
+                            "CSS_ANIMATIONS",
+                            "CSS_COLUMNS",
+                            "CSS_GENERATED_CONTENT",
+                            "CSS_GRADIENTS",
+                            "CSS_REFLECTIONS",
+                            "CSS_TRANSFORMS",
+                            "CSS_TRANSFORMS3D",
+                            "CSS_TRANSITIONS",
+                            "APPLICATION_CACHE",
+                            "CANVAS",
+                            "CANVAS_TEXT",
+                            "DRAG_AND_DROP",
+                            "HASH_CHANGE",
+                            "HISTORY",
+                            "AUDIO",
+                            "VIDEO",
+                            "INDEXED_DB",
+                            "INPUT_ATTR_AUTOCOMPLETE",
+                            "INPUT_ATTR_AUTOFOCUS",
+                            "INPUT_ATTR_LIST",
+                            "INPUT_ATTR_PLACEHOLDER",
+                            "INPUT_ATTR_MAX",
+                            "INPUT_ATTR_MIN",
+                            "INPUT_ATTR_MULTIPLE",
+                            "INPUT_ATTR_PATTERN",
+                            "INPUT_ATTR_REQUIRED",
+                            "INPUT_ATTR_STEP",
+                            "INPUT_TYPE_SEARCH",
+                            "INPUT_TYPE_TEL",
+                            "INPUT_TYPE_URL",
+                            "INPUT_TYPE_EMAIL",
+                            "INPUT_TYPE_DATETIME",
+                            "INPUT_TYPE_DATE",
+                            "INPUT_TYPE_MONTH",
+                            "INPUT_TYPE_WEEK",
+                            "INPUT_TYPE_TIME",
+                            "INPUT_TYPE_DATETIME_LOCAL",
+                            "INPUT_TYPE_NUMBER",
+                            "INPUT_TYPE_RANGE",
+                            "INPUT_TYPE_COLOR",
+                            "LOCAL_STORAGE",
+                            "POST_MESSAGE",
+                            "SESSION_STORAGE",
+                            "WEB_SOCKETS",
+                            "WEB_SQL_DATABASE",
+                            "WEB_WORKERS",
+                            "GEO_LOCATION",
+                            "INLINE_SVG",
+                            "SMIL",
+                            "SVG_HREF",
+                            "SVG_CLIP_PATHS",
+                            "TOUCH",
+                            "WEBGL",
+                            "SVG_FILTERS",
+                            "SVG_FE_IMAGE"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "backupImageReportingLabel": {
+                    "description": "Reporting label used for HTML5 banner backup image. Applicable to the following creative types: DISPLAY when the primary asset type is not HTML_IMAGE.",
+                    "type": "string"
+                },
+                "backupImageTargetWindow": {
+                    "$ref": "TargetWindow",
+                    "description": "Target window for backup image. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE."
+                },
+                "clickTags": {
+                    "description": "Click tags of the creative. For DISPLAY, FLASH_INPAGE, and HTML5_BANNER creatives, this is a subset of detected click tags for the assets associated with this creative. After creating a flash asset, detected click tags will be returned in the creativeAssetMetadata. When inserting the creative, populate the creative clickTags field using the creativeAssetMetadata.clickTags field. For DISPLAY_IMAGE_GALLERY creatives, there should be exactly one entry in this list for each image creative asset. A click tag is matched with a corresponding creative asset by matching the clickTag.name field with the creativeAsset.assetIdentifier.name field. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
+                    "items": {
+                        "$ref": "ClickTag"
+                    },
+                    "type": "array"
+                },
+                "commercialId": {
+                    "description": "Industry standard ID assigned to creative for reach and frequency. Applicable to INSTREAM_VIDEO_REDIRECT creatives.",
+                    "type": "string"
+                },
+                "companionCreatives": {
+                    "description": "List of companion creatives assigned to an in-Stream video creative. Acceptable values include IDs of existing flash and image creatives. Applicable to the following creative types: all VPAID, all INSTREAM_AUDIO and all INSTREAM_VIDEO with dynamicAssetSelection set to false.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "compatibility": {
+                    "description": "Compatibilities associated with this creative. This is a read-only field. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are for rendering in mobile apps. Only pre-existing creatives may have these compatibilities since new creatives will either be assigned DISPLAY or DISPLAY_INTERSTITIAL instead. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. IN_STREAM_AUDIO refers to rendering in in-stream audio ads developed with the VAST standard. Applicable to all creative types. Acceptable values are: - \"APP\" - \"APP_INTERSTITIAL\" - \"IN_STREAM_VIDEO\" - \"IN_STREAM_AUDIO\" - \"DISPLAY\" - \"DISPLAY_INTERSTITIAL\" ",
+                    "items": {
+                        "enum": [
+                            "DISPLAY",
+                            "DISPLAY_INTERSTITIAL",
+                            "APP",
+                            "APP_INTERSTITIAL",
+                            "IN_STREAM_VIDEO",
+                            "IN_STREAM_AUDIO"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "convertFlashToHtml5": {
+                    "description": "Whether Flash assets associated with the creative need to be automatically converted to HTML5. This flag is enabled by default and users can choose to disable it if they don't want the system to generate and use HTML5 asset for this creative. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
+                    "type": "boolean"
+                },
+                "counterCustomEvents": {
+                    "description": "List of counter events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID.",
+                    "items": {
+                        "$ref": "CreativeCustomEvent"
+                    },
+                    "type": "array"
+                },
+                "creativeAssetSelection": {
+                    "$ref": "CreativeAssetSelection",
+                    "description": "Required if dynamicAssetSelection is true."
+                },
+                "creativeAssets": {
+                    "description": "Assets associated with a creative. Applicable to all but the following creative types: INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and REDIRECT",
+                    "items": {
+                        "$ref": "CreativeAsset"
+                    },
+                    "type": "array"
+                },
+                "creativeFieldAssignments": {
+                    "description": "Creative field assignments for this creative. Applicable to all creative types.",
+                    "items": {
+                        "$ref": "CreativeFieldAssignment"
+                    },
+                    "type": "array"
+                },
+                "customKeyValues": {
+                    "description": "Custom key-values for a Rich Media creative. Key-values let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use key-values to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "dynamicAssetSelection": {
+                    "description": "Set this to true to enable the use of rules to target individual assets in this creative. When set to true creativeAssetSelection must be set. This also controls asset-level companions. When this is true, companion creatives should be assigned to creative assets. Learn more. Applicable to INSTREAM_VIDEO creatives.",
+                    "type": "boolean"
+                },
+                "exitCustomEvents": {
+                    "description": "List of exit events configured for the creative. For DISPLAY and DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags, For DISPLAY, an event is also created from the backupImageReportingLabel. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
+                    "items": {
+                        "$ref": "CreativeCustomEvent"
+                    },
+                    "type": "array"
+                },
+                "fsCommand": {
+                    "$ref": "FsCommand",
+                    "description": "OpenWindow FSCommand of this creative. This lets the SWF file communicate with either Flash Player or the program hosting Flash Player, such as a web browser. This is only triggered if allowScriptAccess field is true. Applicable to the following creative types: FLASH_INPAGE."
+                },
+                "htmlCode": {
+                    "description": "HTML code for the creative. This is a required field when applicable. This field is ignored if htmlCodeLocked is true. Applicable to the following creative types: all CUSTOM, FLASH_INPAGE, and HTML5_BANNER, and all RICH_MEDIA.",
+                    "type": "string"
+                },
+                "htmlCodeLocked": {
+                    "description": "Whether HTML code is generated by Campaign Manager or manually entered. Set to true to ignore changes to htmlCode. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "ID of this creative. This is a read-only, auto-generated field. Applicable to all creative types.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this creative. This is a read-only field. Applicable to all creative types."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creative\".",
+                    "type": "string"
+                },
+                "lastModifiedInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Creative last modification information. This is a read-only field. Applicable to all creative types."
+                },
+                "latestTraffickedCreativeId": {
+                    "description": "Latest Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "mediaDescription": {
+                    "description": "Description of the audio or video ad. Applicable to the following creative types: all INSTREAM_VIDEO, INSTREAM_AUDIO, and all VPAID.",
+                    "type": "string"
+                },
+                "mediaDuration": {
+                    "description": "Creative audio or video duration in seconds. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO, INSTREAM_AUDIO, all RICH_MEDIA, and all VPAID.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "name": {
+                    "description": "Name of the creative. This is a required field and must be less than 256 characters long. Applicable to all creative types.",
+                    "type": "string"
+                },
+                "overrideCss": {
+                    "description": "Override CSS value for rich media creatives. Applicable to the following creative types: all RICH_MEDIA.",
+                    "type": "string"
+                },
+                "progressOffset": {
+                    "$ref": "VideoOffset",
+                    "description": "Amount of time to play the video before counting a view. Applicable to the following creative types: all INSTREAM_VIDEO."
+                },
+                "redirectUrl": {
+                    "description": "URL of hosted image or hosted video or another ad tag. For INSTREAM_VIDEO_REDIRECT creatives this is the in-stream video redirect URL. The standard for a VAST (Video Ad Serving Template) ad response allows for a redirect link to another VAST 2.0 or 3.0 call. This is a required field when applicable. Applicable to the following creative types: DISPLAY_REDIRECT, INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO_REDIRECT",
+                    "type": "string"
+                },
+                "renderingId": {
+                    "description": "ID of current rendering version. This is a read-only field. Applicable to all creative types.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "renderingIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the rendering ID of this creative. This is a read-only field. Applicable to all creative types."
+                },
+                "requiredFlashPluginVersion": {
+                    "description": "The minimum required Flash plugin version for this creative. For example, 11.2.202.235. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
+                    "type": "string"
+                },
+                "requiredFlashVersion": {
+                    "description": "The internal Flash version for this creative as calculated by Studio. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "size": {
+                    "$ref": "Size",
+                    "description": "Size associated with this creative. When inserting or updating a creative either the size ID field or size width and height fields can be used. This is a required field when applicable; however for IMAGE, FLASH_INPAGE creatives, and for DISPLAY creatives with a primary asset of type HTML_IMAGE, if left blank, this field will be automatically set using the actual size of the associated image assets. Applicable to the following creative types: DISPLAY, DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA."
+                },
+                "skipOffset": {
+                    "$ref": "VideoOffset",
+                    "description": "Amount of time to play the video before the skip button appears. Applicable to the following creative types: all INSTREAM_VIDEO."
+                },
+                "skippable": {
+                    "description": "Whether the user can choose to skip the creative. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.",
+                    "type": "boolean"
+                },
+                "sslCompliant": {
+                    "description": "Whether the creative is SSL-compliant. This is a read-only field. Applicable to all creative types.",
+                    "type": "boolean"
+                },
+                "sslOverride": {
+                    "description": "Whether creative should be treated as SSL compliant even if the system scan shows it's not. Applicable to all creative types.",
+                    "type": "boolean"
+                },
+                "studioAdvertiserId": {
+                    "description": "Studio advertiser ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "studioCreativeId": {
+                    "description": "Studio creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "studioTraffickedCreativeId": {
+                    "description": "Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "thirdPartyBackupImageImpressionsUrl": {
+                    "description": "Third-party URL used to record backup image impressions. Applicable to the following creative types: all RICH_MEDIA.",
+                    "type": "string"
+                },
+                "thirdPartyRichMediaImpressionsUrl": {
+                    "description": "Third-party URL used to record rich media impressions. Applicable to the following creative types: all RICH_MEDIA.",
+                    "type": "string"
+                },
+                "thirdPartyUrls": {
+                    "description": "Third-party URLs for tracking in-stream creative events. Applicable to the following creative types: all INSTREAM_VIDEO, all INSTREAM_AUDIO, and all VPAID.",
+                    "items": {
+                        "$ref": "ThirdPartyTrackingUrl"
+                    },
+                    "type": "array"
+                },
+                "timerCustomEvents": {
+                    "description": "List of timer events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset is not HTML_IMAGE.",
+                    "items": {
+                        "$ref": "CreativeCustomEvent"
+                    },
+                    "type": "array"
+                },
+                "totalFileSize": {
+                    "description": "Combined size of all creative assets. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Type of this creative. This is a required field. Applicable to all creative types. *Note:* FLASH_INPAGE, HTML5_BANNER, and IMAGE are only used for existing creatives. New creatives should use DISPLAY as a replacement for these types.",
+                    "enum": [
+                        "IMAGE",
+                        "DISPLAY_REDIRECT",
+                        "CUSTOM_DISPLAY",
+                        "INTERNAL_REDIRECT",
+                        "CUSTOM_DISPLAY_INTERSTITIAL",
+                        "INTERSTITIAL_INTERNAL_REDIRECT",
+                        "TRACKING_TEXT",
+                        "RICH_MEDIA_DISPLAY_BANNER",
+                        "RICH_MEDIA_INPAGE_FLOATING",
+                        "RICH_MEDIA_IM_EXPAND",
+                        "RICH_MEDIA_DISPLAY_EXPANDING",
+                        "RICH_MEDIA_DISPLAY_INTERSTITIAL",
+                        "RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL",
+                        "RICH_MEDIA_MOBILE_IN_APP",
+                        "FLASH_INPAGE",
+                        "INSTREAM_VIDEO",
+                        "VPAID_LINEAR_VIDEO",
+                        "VPAID_NON_LINEAR_VIDEO",
+                        "INSTREAM_VIDEO_REDIRECT",
+                        "RICH_MEDIA_PEEL_DOWN",
+                        "HTML5_BANNER",
+                        "DISPLAY",
+                        "DISPLAY_IMAGE_GALLERY",
+                        "BRAND_SAFE_DEFAULT_INSTREAM_VIDEO",
+                        "INSTREAM_AUDIO"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "universalAdId": {
+                    "$ref": "UniversalAdId",
+                    "description": "A Universal Ad ID as per the VAST 4.0 spec. Applicable to the following creative types: INSTREAM_AUDIO and INSTREAM_VIDEO and VPAID."
+                },
+                "version": {
+                    "description": "The version number helps you keep track of multiple versions of your creative in your reports. The version number will always be auto-generated during insert operations to start at 1. For tracking creatives the version cannot be incremented and will always remain at 1. For all other creative types the version can be incremented only by 1 during update operations. In addition, the version will be automatically incremented by 1 when undergoing Rich Media creative merging. Applicable to all creative types.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeAsset": {
+            "description": "Creative Asset.",
+            "id": "CreativeAsset",
+            "properties": {
+                "actionScript3": {
+                    "description": "Whether ActionScript3 is enabled for the flash asset. This is a read-only field. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
+                    "type": "boolean"
+                },
+                "active": {
+                    "description": "Whether the video or audio asset is active. This is a read-only field for VPAID_NON_LINEAR_VIDEO assets. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID.",
+                    "type": "boolean"
+                },
+                "additionalSizes": {
+                    "description": "Additional sizes associated with this creative asset. HTML5 asset generated by compatible software such as GWD will be able to support more sizes this creative asset can render.",
+                    "items": {
+                        "$ref": "Size"
+                    },
+                    "type": "array"
+                },
+                "alignment": {
+                    "description": "Possible alignments for an asset. This is a read-only field. Applicable to the following creative types: RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL .",
+                    "enum": [
+                        "ALIGNMENT_TOP",
+                        "ALIGNMENT_RIGHT",
+                        "ALIGNMENT_BOTTOM",
+                        "ALIGNMENT_LEFT"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "artworkType": {
+                    "description": "Artwork type of rich media creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.",
+                    "enum": [
+                        "ARTWORK_TYPE_FLASH",
+                        "ARTWORK_TYPE_HTML5",
+                        "ARTWORK_TYPE_MIXED",
+                        "ARTWORK_TYPE_IMAGE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "assetIdentifier": {
+                    "$ref": "CreativeAssetId",
+                    "description": "Identifier of this asset. This is the same identifier returned during creative asset insert operation. This is a required field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT."
+                },
+                "audioBitRate": {
+                    "description": "Audio stream bit rate in kbps. This is a read-only field. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "audioSampleRate": {
+                    "description": "Audio sample bit rate in hertz. This is a read-only field. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "backupImageExit": {
+                    "$ref": "CreativeCustomEvent",
+                    "description": "Exit event configured for the backup image. Applicable to the following creative types: all RICH_MEDIA."
+                },
+                "bitRate": {
+                    "description": "Detected bit-rate for audio or video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "childAssetType": {
+                    "description": "Rich media child asset type. This is a read-only field. Applicable to the following creative types: all VPAID.",
+                    "enum": [
+                        "CHILD_ASSET_TYPE_FLASH",
+                        "CHILD_ASSET_TYPE_VIDEO",
+                        "CHILD_ASSET_TYPE_IMAGE",
+                        "CHILD_ASSET_TYPE_DATA"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "collapsedSize": {
+                    "$ref": "Size",
+                    "description": "Size of an asset when collapsed. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN."
+                },
+                "companionCreativeIds": {
+                    "description": "List of companion creatives assigned to an in-stream video creative asset. Acceptable values include IDs of existing flash and image creatives. Applicable to INSTREAM_VIDEO creative type with dynamicAssetSelection set to true.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "customStartTimeValue": {
+                    "description": "Custom start time in seconds for making the asset visible. Applicable to the following creative types: all RICH_MEDIA. Value must be greater than or equal to 0.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "detectedFeatures": {
+                    "description": "List of feature dependencies for the creative asset that are detected by Campaign Manager. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative correctly. This is a read-only, auto-generated field. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
+                    "items": {
+                        "enum": [
+                            "CSS_FONT_FACE",
+                            "CSS_BACKGROUND_SIZE",
+                            "CSS_BORDER_IMAGE",
+                            "CSS_BORDER_RADIUS",
+                            "CSS_BOX_SHADOW",
+                            "CSS_FLEX_BOX",
+                            "CSS_HSLA",
+                            "CSS_MULTIPLE_BGS",
+                            "CSS_OPACITY",
+                            "CSS_RGBA",
+                            "CSS_TEXT_SHADOW",
+                            "CSS_ANIMATIONS",
+                            "CSS_COLUMNS",
+                            "CSS_GENERATED_CONTENT",
+                            "CSS_GRADIENTS",
+                            "CSS_REFLECTIONS",
+                            "CSS_TRANSFORMS",
+                            "CSS_TRANSFORMS3D",
+                            "CSS_TRANSITIONS",
+                            "APPLICATION_CACHE",
+                            "CANVAS",
+                            "CANVAS_TEXT",
+                            "DRAG_AND_DROP",
+                            "HASH_CHANGE",
+                            "HISTORY",
+                            "AUDIO",
+                            "VIDEO",
+                            "INDEXED_DB",
+                            "INPUT_ATTR_AUTOCOMPLETE",
+                            "INPUT_ATTR_AUTOFOCUS",
+                            "INPUT_ATTR_LIST",
+                            "INPUT_ATTR_PLACEHOLDER",
+                            "INPUT_ATTR_MAX",
+                            "INPUT_ATTR_MIN",
+                            "INPUT_ATTR_MULTIPLE",
+                            "INPUT_ATTR_PATTERN",
+                            "INPUT_ATTR_REQUIRED",
+                            "INPUT_ATTR_STEP",
+                            "INPUT_TYPE_SEARCH",
+                            "INPUT_TYPE_TEL",
+                            "INPUT_TYPE_URL",
+                            "INPUT_TYPE_EMAIL",
+                            "INPUT_TYPE_DATETIME",
+                            "INPUT_TYPE_DATE",
+                            "INPUT_TYPE_MONTH",
+                            "INPUT_TYPE_WEEK",
+                            "INPUT_TYPE_TIME",
+                            "INPUT_TYPE_DATETIME_LOCAL",
+                            "INPUT_TYPE_NUMBER",
+                            "INPUT_TYPE_RANGE",
+                            "INPUT_TYPE_COLOR",
+                            "LOCAL_STORAGE",
+                            "POST_MESSAGE",
+                            "SESSION_STORAGE",
+                            "WEB_SOCKETS",
+                            "WEB_SQL_DATABASE",
+                            "WEB_WORKERS",
+                            "GEO_LOCATION",
+                            "INLINE_SVG",
+                            "SMIL",
+                            "SVG_HREF",
+                            "SVG_CLIP_PATHS",
+                            "TOUCH",
+                            "WEBGL",
+                            "SVG_FILTERS",
+                            "SVG_FE_IMAGE"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "displayType": {
+                    "description": "Type of rich media asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.",
+                    "enum": [
+                        "ASSET_DISPLAY_TYPE_INPAGE",
+                        "ASSET_DISPLAY_TYPE_FLOATING",
+                        "ASSET_DISPLAY_TYPE_OVERLAY",
+                        "ASSET_DISPLAY_TYPE_EXPANDING",
+                        "ASSET_DISPLAY_TYPE_FLASH_IN_FLASH",
+                        "ASSET_DISPLAY_TYPE_FLASH_IN_FLASH_EXPANDING",
+                        "ASSET_DISPLAY_TYPE_PEEL_DOWN",
+                        "ASSET_DISPLAY_TYPE_VPAID_LINEAR",
+                        "ASSET_DISPLAY_TYPE_VPAID_NON_LINEAR",
+                        "ASSET_DISPLAY_TYPE_BACKDROP"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "duration": {
+                    "description": "Duration in seconds for which an asset will be displayed. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and VPAID_LINEAR_VIDEO. Value must be greater than or equal to 1.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "durationType": {
+                    "description": "Duration type for which an asset will be displayed. Applicable to the following creative types: all RICH_MEDIA.",
+                    "enum": [
+                        "ASSET_DURATION_TYPE_AUTO",
+                        "ASSET_DURATION_TYPE_NONE",
+                        "ASSET_DURATION_TYPE_CUSTOM"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "expandedDimension": {
+                    "$ref": "Size",
+                    "description": "Detected expanded dimension for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID."
+                },
+                "fileSize": {
+                    "description": "File size associated with this creative asset. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "flashVersion": {
+                    "description": "Flash version of the asset. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "frameRate": {
+                    "description": "Video frame rate for video asset in frames per second. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "hideFlashObjects": {
+                    "description": "Whether to hide Flash objects flag for an asset. Applicable to the following creative types: all RICH_MEDIA.",
+                    "type": "boolean"
+                },
+                "hideSelectionBoxes": {
+                    "description": "Whether to hide selection boxes flag for an asset. Applicable to the following creative types: all RICH_MEDIA.",
+                    "type": "boolean"
+                },
+                "horizontallyLocked": {
+                    "description": "Whether the asset is horizontally locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "Numeric ID of this creative asset. This is a required field and should not be modified. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the asset. This is a read-only, auto-generated field."
+                },
+                "mediaDuration": {
+                    "description": "Detected duration for audio or video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "mimeType": {
+                    "description": "Detected MIME type for audio or video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID.",
+                    "type": "string"
+                },
+                "offset": {
+                    "$ref": "OffsetPosition",
+                    "description": "Offset position for an asset in collapsed mode. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, only applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN."
+                },
+                "orientation": {
+                    "description": "Orientation of video asset. This is a read-only, auto-generated field.",
+                    "enum": [
+                        "LANDSCAPE",
+                        "PORTRAIT",
+                        "SQUARE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "originalBackup": {
+                    "description": "Whether the backup asset is original or changed by the user in Campaign Manager. Applicable to the following creative types: all RICH_MEDIA.",
+                    "type": "boolean"
+                },
+                "politeLoad": {
+                    "description": "Whether this asset is used as a polite load asset.",
+                    "type": "boolean"
+                },
+                "position": {
+                    "$ref": "OffsetPosition",
+                    "description": "Offset position for an asset. Applicable to the following creative types: all RICH_MEDIA."
+                },
+                "positionLeftUnit": {
+                    "description": "Offset left unit for an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.",
+                    "enum": [
+                        "OFFSET_UNIT_PIXEL",
+                        "OFFSET_UNIT_PERCENT",
+                        "OFFSET_UNIT_PIXEL_FROM_CENTER"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "positionTopUnit": {
+                    "description": "Offset top unit for an asset. This is a read-only field if the asset displayType is ASSET_DISPLAY_TYPE_OVERLAY. Applicable to the following creative types: all RICH_MEDIA.",
+                    "enum": [
+                        "OFFSET_UNIT_PIXEL",
+                        "OFFSET_UNIT_PERCENT",
+                        "OFFSET_UNIT_PIXEL_FROM_CENTER"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "progressiveServingUrl": {
+                    "description": "Progressive URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.",
+                    "type": "string"
+                },
+                "pushdown": {
+                    "description": "Whether the asset pushes down other content. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable when the asset offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height.",
+                    "type": "boolean"
+                },
+                "pushdownDuration": {
+                    "description": "Pushdown duration in seconds for an asset. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable when the asset pushdown field is true, the offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height. Acceptable values are 0 to 9.99, inclusive.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "role": {
+                    "description": "Role of the asset in relation to creative. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT. This is a required field. PRIMARY applies to DISPLAY, FLASH_INPAGE, HTML5_BANNER, IMAGE, DISPLAY_IMAGE_GALLERY, all RICH_MEDIA (which may contain multiple primary assets), and all VPAID creatives. BACKUP_IMAGE applies to FLASH_INPAGE, HTML5_BANNER, all RICH_MEDIA, and all VPAID creatives. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE. ADDITIONAL_IMAGE and ADDITIONAL_FLASH apply to FLASH_INPAGE creatives. OTHER refers to assets from sources other than Campaign Manager, such as Studio uploaded assets, applicable to all RICH_MEDIA and all VPAID creatives. PARENT_VIDEO refers to videos uploaded by the user in Campaign Manager and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives. TRANSCODED_VIDEO refers to videos transcoded by Campaign Manager from PARENT_VIDEO assets and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives. ALTERNATE_VIDEO refers to the Campaign Manager representation of child asset videos from Studio, and is applicable to VPAID_LINEAR_VIDEO creatives. These cannot be added or removed within Campaign Manager. For VPAID_LINEAR_VIDEO creatives, PARENT_VIDEO, TRANSCODED_VIDEO and ALTERNATE_VIDEO assets that are marked active serve as backup in case the VPAID creative cannot be served. Only PARENT_VIDEO assets can be added or removed for an INSTREAM_VIDEO or VPAID_LINEAR_VIDEO creative. PARENT_AUDIO refers to audios uploaded by the user in Campaign Manager and is applicable to INSTREAM_AUDIO creatives. TRANSCODED_AUDIO refers to audios transcoded by Campaign Manager from PARENT_AUDIO assets and is applicable to INSTREAM_AUDIO creatives. ",
+                    "enum": [
+                        "PRIMARY",
+                        "BACKUP_IMAGE",
+                        "ADDITIONAL_IMAGE",
+                        "ADDITIONAL_FLASH",
+                        "PARENT_VIDEO",
+                        "TRANSCODED_VIDEO",
+                        "OTHER",
+                        "ALTERNATE_VIDEO",
+                        "PARENT_AUDIO",
+                        "TRANSCODED_AUDIO"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "size": {
+                    "$ref": "Size",
+                    "description": "Size associated with this creative asset. This is a required field when applicable; however for IMAGE and FLASH_INPAGE, creatives if left blank, this field will be automatically set using the actual size of the associated image asset. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE."
+                },
+                "sslCompliant": {
+                    "description": "Whether the asset is SSL-compliant. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.",
+                    "type": "boolean"
+                },
+                "startTimeType": {
+                    "description": "Initial wait time type before making the asset visible. Applicable to the following creative types: all RICH_MEDIA.",
+                    "enum": [
+                        "ASSET_START_TIME_TYPE_NONE",
+                        "ASSET_START_TIME_TYPE_CUSTOM"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "streamingServingUrl": {
+                    "description": "Streaming URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.",
+                    "type": "string"
+                },
+                "transparency": {
+                    "description": "Whether the asset is transparent. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable to HTML5 assets.",
+                    "type": "boolean"
+                },
+                "verticallyLocked": {
+                    "description": "Whether the asset is vertically locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.",
+                    "type": "boolean"
+                },
+                "windowMode": {
+                    "description": "Window mode options for flash assets. Applicable to the following creative types: FLASH_INPAGE, RICH_MEDIA_DISPLAY_EXPANDING, RICH_MEDIA_IM_EXPAND, RICH_MEDIA_DISPLAY_BANNER, and RICH_MEDIA_INPAGE_FLOATING.",
+                    "enum": [
+                        "OPAQUE",
+                        "WINDOW",
+                        "TRANSPARENT"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "zIndex": {
+                    "description": "zIndex value of an asset. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable to assets whose displayType is NOT one of the following types: ASSET_DISPLAY_TYPE_INPAGE or ASSET_DISPLAY_TYPE_OVERLAY. Acceptable values are -999999999 to 999999999, inclusive.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "zipFilename": {
+                    "description": "File name of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.",
+                    "type": "string"
+                },
+                "zipFilesize": {
+                    "description": "Size of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeAssetId": {
+            "description": "Creative Asset ID.",
+            "id": "CreativeAssetId",
+            "properties": {
+                "name": {
+                    "description": "Name of the creative asset. This is a required field while inserting an asset. After insertion, this assetIdentifier is used to identify the uploaded asset. Characters in the name must be alphanumeric or one of the following: \".-_ \". Spaces are allowed.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Type of asset to upload. This is a required field. FLASH and IMAGE are no longer supported for new uploads. All image assets should use HTML_IMAGE.",
+                    "enum": [
+                        "IMAGE",
+                        "FLASH",
+                        "VIDEO",
+                        "HTML",
+                        "HTML_IMAGE",
+                        "AUDIO"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeAssetMetadata": {
+            "description": "CreativeAssets contains properties of a creative asset file which will be uploaded or has already been uploaded. Refer to the creative sample code for how to upload assets and insert a creative.",
+            "id": "CreativeAssetMetadata",
+            "properties": {
+                "assetIdentifier": {
+                    "$ref": "CreativeAssetId",
+                    "description": "ID of the creative asset. This is a required field."
+                },
+                "clickTags": {
+                    "description": "List of detected click tags for assets. This is a read-only, auto-generated field. This field is empty for a rich media asset.",
+                    "items": {
+                        "$ref": "ClickTag"
+                    },
+                    "type": "array"
+                },
+                "detectedFeatures": {
+                    "description": "List of feature dependencies for the creative asset that are detected by Campaign Manager. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative correctly. This is a read-only, auto-generated field.",
+                    "items": {
+                        "enum": [
+                            "CSS_FONT_FACE",
+                            "CSS_BACKGROUND_SIZE",
+                            "CSS_BORDER_IMAGE",
+                            "CSS_BORDER_RADIUS",
+                            "CSS_BOX_SHADOW",
+                            "CSS_FLEX_BOX",
+                            "CSS_HSLA",
+                            "CSS_MULTIPLE_BGS",
+                            "CSS_OPACITY",
+                            "CSS_RGBA",
+                            "CSS_TEXT_SHADOW",
+                            "CSS_ANIMATIONS",
+                            "CSS_COLUMNS",
+                            "CSS_GENERATED_CONTENT",
+                            "CSS_GRADIENTS",
+                            "CSS_REFLECTIONS",
+                            "CSS_TRANSFORMS",
+                            "CSS_TRANSFORMS3D",
+                            "CSS_TRANSITIONS",
+                            "APPLICATION_CACHE",
+                            "CANVAS",
+                            "CANVAS_TEXT",
+                            "DRAG_AND_DROP",
+                            "HASH_CHANGE",
+                            "HISTORY",
+                            "AUDIO",
+                            "VIDEO",
+                            "INDEXED_DB",
+                            "INPUT_ATTR_AUTOCOMPLETE",
+                            "INPUT_ATTR_AUTOFOCUS",
+                            "INPUT_ATTR_LIST",
+                            "INPUT_ATTR_PLACEHOLDER",
+                            "INPUT_ATTR_MAX",
+                            "INPUT_ATTR_MIN",
+                            "INPUT_ATTR_MULTIPLE",
+                            "INPUT_ATTR_PATTERN",
+                            "INPUT_ATTR_REQUIRED",
+                            "INPUT_ATTR_STEP",
+                            "INPUT_TYPE_SEARCH",
+                            "INPUT_TYPE_TEL",
+                            "INPUT_TYPE_URL",
+                            "INPUT_TYPE_EMAIL",
+                            "INPUT_TYPE_DATETIME",
+                            "INPUT_TYPE_DATE",
+                            "INPUT_TYPE_MONTH",
+                            "INPUT_TYPE_WEEK",
+                            "INPUT_TYPE_TIME",
+                            "INPUT_TYPE_DATETIME_LOCAL",
+                            "INPUT_TYPE_NUMBER",
+                            "INPUT_TYPE_RANGE",
+                            "INPUT_TYPE_COLOR",
+                            "LOCAL_STORAGE",
+                            "POST_MESSAGE",
+                            "SESSION_STORAGE",
+                            "WEB_SOCKETS",
+                            "WEB_SQL_DATABASE",
+                            "WEB_WORKERS",
+                            "GEO_LOCATION",
+                            "INLINE_SVG",
+                            "SMIL",
+                            "SVG_HREF",
+                            "SVG_CLIP_PATHS",
+                            "TOUCH",
+                            "WEBGL",
+                            "SVG_FILTERS",
+                            "SVG_FE_IMAGE"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "id": {
+                    "description": "Numeric ID of the asset. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the numeric ID of the asset. This is a read-only, auto-generated field."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeAssetMetadata\".",
+                    "type": "string"
+                },
+                "warnedValidationRules": {
+                    "description": "Rules validated during code generation that generated a warning. This is a read-only, auto-generated field. Possible values are: - \"ADMOB_REFERENCED\" - \"ASSET_FORMAT_UNSUPPORTED_DCM\" - \"ASSET_INVALID\" - \"CLICK_TAG_HARD_CODED\" - \"CLICK_TAG_INVALID\" - \"CLICK_TAG_IN_GWD\" - \"CLICK_TAG_MISSING\" - \"CLICK_TAG_MORE_THAN_ONE\" - \"CLICK_TAG_NON_TOP_LEVEL\" - \"COMPONENT_UNSUPPORTED_DCM\" - \"ENABLER_UNSUPPORTED_METHOD_DCM\" - \"EXTERNAL_FILE_REFERENCED\" - \"FILE_DETAIL_EMPTY\" - \"FILE_TYPE_INVALID\" - \"GWD_PROPERTIES_INVALID\" - \"HTML5_FEATURE_UNSUPPORTED\" - \"LINKED_FILE_NOT_FOUND\" - \"MAX_FLASH_VERSION_11\" - \"MRAID_REFERENCED\" - \"NOT_SSL_COMPLIANT\" - \"ORPHANED_ASSET\" - \"PRIMARY_HTML_MISSING\" - \"SVG_INVALID\" - \"ZIP_INVALID\" ",
+                    "items": {
+                        "enum": [
+                            "CLICK_TAG_NON_TOP_LEVEL",
+                            "CLICK_TAG_MISSING",
+                            "CLICK_TAG_MORE_THAN_ONE",
+                            "CLICK_TAG_INVALID",
+                            "ORPHANED_ASSET",
+                            "PRIMARY_HTML_MISSING",
+                            "EXTERNAL_FILE_REFERENCED",
+                            "MRAID_REFERENCED",
+                            "ADMOB_REFERENCED",
+                            "FILE_TYPE_INVALID",
+                            "ZIP_INVALID",
+                            "LINKED_FILE_NOT_FOUND",
+                            "MAX_FLASH_VERSION_11",
+                            "NOT_SSL_COMPLIANT",
+                            "FILE_DETAIL_EMPTY",
+                            "ASSET_INVALID",
+                            "GWD_PROPERTIES_INVALID",
+                            "ENABLER_UNSUPPORTED_METHOD_DCM",
+                            "ASSET_FORMAT_UNSUPPORTED_DCM",
+                            "COMPONENT_UNSUPPORTED_DCM",
+                            "HTML5_FEATURE_UNSUPPORTED",
+                            "CLICK_TAG_IN_GWD",
+                            "CLICK_TAG_HARD_CODED",
+                            "SVG_INVALID"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeAssetSelection": {
+            "description": "Encapsulates the list of rules for asset selection and a default asset in case none of the rules match. Applicable to INSTREAM_VIDEO creatives.",
+            "id": "CreativeAssetSelection",
+            "properties": {
+                "defaultAssetId": {
+                    "description": "A creativeAssets[].id. This should refer to one of the parent assets in this creative, and will be served if none of the rules match. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "rules": {
+                    "description": "Rules determine which asset will be served to a viewer. Rules will be evaluated in the order in which they are stored in this list. This list must contain at least one rule. Applicable to INSTREAM_VIDEO creatives.",
+                    "items": {
+                        "$ref": "Rule"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeAssignment": {
+            "description": "Creative Assignment.",
+            "id": "CreativeAssignment",
+            "properties": {
+                "active": {
+                    "description": "Whether this creative assignment is active. When true, the creative will be included in the ad's rotation.",
+                    "type": "boolean"
+                },
+                "applyEventTags": {
+                    "description": "Whether applicable event tags should fire when this creative assignment is rendered. If this value is unset when the ad is inserted or updated, it will default to true for all creative types EXCEPT for INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO.",
+                    "type": "boolean"
+                },
+                "clickThroughUrl": {
+                    "$ref": "ClickThroughUrl",
+                    "description": "Click-through URL of the creative assignment."
+                },
+                "companionCreativeOverrides": {
+                    "description": "Companion creative overrides for this creative assignment. Applicable to video ads.",
+                    "items": {
+                        "$ref": "CompanionClickThroughOverride"
+                    },
+                    "type": "array"
+                },
+                "creativeGroupAssignments": {
+                    "description": "Creative group assignments for this creative assignment. Only one assignment per creative group number is allowed for a maximum of two assignments.",
+                    "items": {
+                        "$ref": "CreativeGroupAssignment"
+                    },
+                    "type": "array"
+                },
+                "creativeId": {
+                    "description": "ID of the creative to be assigned. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "creativeIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the creative. This is a read-only, auto-generated field."
+                },
+                "endTime": {
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "richMediaExitOverrides": {
+                    "description": "Rich media exit overrides for this creative assignment. Applicable when the creative type is any of the following: - DISPLAY - RICH_MEDIA_INPAGE - RICH_MEDIA_INPAGE_FLOATING - RICH_MEDIA_IM_EXPAND - RICH_MEDIA_EXPANDING - RICH_MEDIA_INTERSTITIAL_FLOAT - RICH_MEDIA_MOBILE_IN_APP - RICH_MEDIA_MULTI_FLOATING - RICH_MEDIA_PEEL_DOWN - VPAID_LINEAR - VPAID_NON_LINEAR ",
+                    "items": {
+                        "$ref": "RichMediaExitOverride"
+                    },
+                    "type": "array"
+                },
+                "sequence": {
+                    "description": "Sequence number of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_SEQUENTIAL. Acceptable values are 1 to 65535, inclusive.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "sslCompliant": {
+                    "description": "Whether the creative to be assigned is SSL-compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.",
+                    "type": "boolean"
+                },
+                "startTime": {
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "weight": {
+                    "description": "Weight of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_RANDOM. Value must be greater than or equal to 1.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeClickThroughUrl": {
+            "description": "Click-through URL",
+            "id": "CreativeClickThroughUrl",
+            "properties": {
+                "computedClickThroughUrl": {
+                    "description": "Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows: - If landingPageId is specified then that landing page's URL is assigned to this field. - Otherwise, the customClickThroughUrl is assigned to this field. ",
+                    "type": "string"
+                },
+                "customClickThroughUrl": {
+                    "description": "Custom click-through URL. Applicable if the landingPageId field is left unset.",
+                    "type": "string"
+                },
+                "landingPageId": {
+                    "description": "ID of the landing page for the click-through URL.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeCustomEvent": {
+            "description": "Creative Custom Event.",
+            "id": "CreativeCustomEvent",
+            "properties": {
+                "advertiserCustomEventId": {
+                    "description": "Unique ID of this event used by Reporting and Data Transfer. This is a read-only field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserCustomEventName": {
+                    "description": "User-entered name for the event.",
+                    "type": "string"
+                },
+                "advertiserCustomEventType": {
+                    "description": "Type of the event. This is a read-only field.",
+                    "enum": [
+                        "ADVERTISER_EVENT_TIMER",
+                        "ADVERTISER_EVENT_EXIT",
+                        "ADVERTISER_EVENT_COUNTER"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "artworkLabel": {
+                    "description": "Artwork label column, used to link events in Campaign Manager back to events in Studio. This is a required field and should not be modified after insertion.",
+                    "type": "string"
+                },
+                "artworkType": {
+                    "description": "Artwork type used by the creative.This is a read-only field.",
+                    "enum": [
+                        "ARTWORK_TYPE_FLASH",
+                        "ARTWORK_TYPE_HTML5",
+                        "ARTWORK_TYPE_MIXED",
+                        "ARTWORK_TYPE_IMAGE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "exitClickThroughUrl": {
+                    "$ref": "CreativeClickThroughUrl",
+                    "description": "Exit click-through URL for the event. This field is used only for exit events."
+                },
+                "id": {
+                    "description": "ID of this event. This is a required field and should not be modified after insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "popupWindowProperties": {
+                    "$ref": "PopupWindowProperties",
+                    "description": "Properties for rich media popup windows. This field is used only for exit events."
+                },
+                "targetType": {
+                    "description": "Target type used by the event.",
+                    "enum": [
+                        "TARGET_BLANK",
+                        "TARGET_TOP",
+                        "TARGET_SELF",
+                        "TARGET_PARENT",
+                        "TARGET_POPUP"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "videoReportingId": {
+                    "description": "Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeField": {
+            "description": "Contains properties of a creative field.",
+            "id": "CreativeField",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this creative field. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this creative field. This is a required field on insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "id": {
+                    "description": "ID of this creative field. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeField\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this creative field. This is a required field and must be less than 256 characters long and unique among creative fields of the same advertiser.",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this creative field. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeFieldAssignment": {
+            "description": "Creative Field Assignment.",
+            "id": "CreativeFieldAssignment",
+            "properties": {
+                "creativeFieldId": {
+                    "description": "ID of the creative field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "creativeFieldValueId": {
+                    "description": "ID of the creative field value.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeFieldValue": {
+            "description": "Contains properties of a creative field value.",
+            "id": "CreativeFieldValue",
+            "properties": {
+                "id": {
+                    "description": "ID of this creative field value. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeFieldValue\".",
+                    "type": "string"
+                },
+                "value": {
+                    "description": "Value of this creative field value. It needs to be less than 256 characters in length and unique per creative field.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeFieldValuesListResponse": {
+            "description": "Creative Field Value List Response",
+            "id": "CreativeFieldValuesListResponse",
+            "properties": {
+                "creativeFieldValues": {
+                    "description": "Creative field value collection.",
+                    "items": {
+                        "$ref": "CreativeFieldValue"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeFieldValuesListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeFieldsListResponse": {
+            "description": "Creative Field List Response",
+            "id": "CreativeFieldsListResponse",
+            "properties": {
+                "creativeFields": {
+                    "description": "Creative field collection.",
+                    "items": {
+                        "$ref": "CreativeField"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeFieldsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeGroup": {
+            "description": "Contains properties of a creative group.",
+            "id": "CreativeGroup",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this creative group. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this creative group. This is a required field on insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "groupNumber": {
+                    "description": "Subgroup of the creative group. Assign your creative groups to a subgroup in order to filter or manage them more easily. This field is required on insertion and is read-only after insertion. Acceptable values are 1 to 2, inclusive.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "id": {
+                    "description": "ID of this creative group. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeGroup\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this creative group. This is a required field and must be less than 256 characters long and unique among creative groups of the same advertiser.",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this creative group. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeGroupAssignment": {
+            "description": "Creative Group Assignment.",
+            "id": "CreativeGroupAssignment",
+            "properties": {
+                "creativeGroupId": {
+                    "description": "ID of the creative group to be assigned.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "creativeGroupNumber": {
+                    "description": "Creative group number of the creative group assignment.",
+                    "enum": [
+                        "CREATIVE_GROUP_ONE",
+                        "CREATIVE_GROUP_TWO"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeGroupsListResponse": {
+            "description": "Creative Group List Response",
+            "id": "CreativeGroupsListResponse",
+            "properties": {
+                "creativeGroups": {
+                    "description": "Creative group collection.",
+                    "items": {
+                        "$ref": "CreativeGroup"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeGroupsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeOptimizationConfiguration": {
+            "description": "Creative optimization settings.",
+            "id": "CreativeOptimizationConfiguration",
+            "properties": {
+                "id": {
+                    "description": "ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this creative optimization config. This is a required field and must be less than 129 characters long.",
+                    "type": "string"
+                },
+                "optimizationActivitys": {
+                    "description": "List of optimization activities associated with this configuration.",
+                    "items": {
+                        "$ref": "OptimizationActivity"
+                    },
+                    "type": "array"
+                },
+                "optimizationModel": {
+                    "description": "Optimization model for this configuration.",
+                    "enum": [
+                        "CLICK",
+                        "POST_CLICK",
+                        "POST_IMPRESSION",
+                        "POST_CLICK_AND_IMPRESSION",
+                        "VIDEO_COMPLETION"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeRotation": {
+            "description": "Creative Rotation.",
+            "id": "CreativeRotation",
+            "properties": {
+                "creativeAssignments": {
+                    "description": "Creative assignments in this creative rotation.",
+                    "items": {
+                        "$ref": "CreativeAssignment"
+                    },
+                    "type": "array"
+                },
+                "creativeOptimizationConfigurationId": {
+                    "description": "Creative optimization configuration that is used by this ad. It should refer to one of the existing optimization configurations in the ad's campaign. If it is unset or set to 0, then the campaign's default optimization configuration will be used for this ad.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Type of creative rotation. Can be used to specify whether to use sequential or random rotation.",
+                    "enum": [
+                        "CREATIVE_ROTATION_TYPE_SEQUENTIAL",
+                        "CREATIVE_ROTATION_TYPE_RANDOM"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "weightCalculationStrategy": {
+                    "description": "Strategy for calculating weights. Used with CREATIVE_ROTATION_TYPE_RANDOM.",
+                    "enum": [
+                        "WEIGHT_STRATEGY_EQUAL",
+                        "WEIGHT_STRATEGY_CUSTOM",
+                        "WEIGHT_STRATEGY_HIGHEST_CTR",
+                        "WEIGHT_STRATEGY_OPTIMIZED"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativesListResponse": {
+            "description": "Creative List Response",
+            "id": "CreativesListResponse",
+            "properties": {
+                "creatives": {
+                    "description": "Creative collection.",
+                    "items": {
+                        "$ref": "Creative"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativesListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CrossDimensionReachReportCompatibleFields": {
+            "description": "Represents fields that are compatible to be selected for a report of type \"CROSS_DIMENSION_REACH\".",
+            "id": "CrossDimensionReachReportCompatibleFields",
+            "properties": {
+                "breakdown": {
+                    "description": "Dimensions which are compatible to be selected in the \"breakdown\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "dimensionFilters": {
+                    "description": "Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#crossDimensionReachReportCompatibleFields.",
+                    "type": "string"
+                },
+                "metrics": {
+                    "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                },
+                "overlapMetrics": {
+                    "description": "Metrics which are compatible to be selected in the \"overlapMetricNames\" section of the report.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "CustomFloodlightVariable": {
+            "description": "A custom floodlight variable.",
+            "id": "CustomFloodlightVariable",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customFloodlightVariable\".",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "The type of custom floodlight variable to supply a value for. These map to the \"u[1-20]=\" in the tags.",
+                    "enum": [
+                        "U1",
+                        "U2",
+                        "U3",
+                        "U4",
+                        "U5",
+                        "U6",
+                        "U7",
+                        "U8",
+                        "U9",
+                        "U10",
+                        "U11",
+                        "U12",
+                        "U13",
+                        "U14",
+                        "U15",
+                        "U16",
+                        "U17",
+                        "U18",
+                        "U19",
+                        "U20",
+                        "U21",
+                        "U22",
+                        "U23",
+                        "U24",
+                        "U25",
+                        "U26",
+                        "U27",
+                        "U28",
+                        "U29",
+                        "U30",
+                        "U31",
+                        "U32",
+                        "U33",
+                        "U34",
+                        "U35",
+                        "U36",
+                        "U37",
+                        "U38",
+                        "U39",
+                        "U40",
+                        "U41",
+                        "U42",
+                        "U43",
+                        "U44",
+                        "U45",
+                        "U46",
+                        "U47",
+                        "U48",
+                        "U49",
+                        "U50",
+                        "U51",
+                        "U52",
+                        "U53",
+                        "U54",
+                        "U55",
+                        "U56",
+                        "U57",
+                        "U58",
+                        "U59",
+                        "U60",
+                        "U61",
+                        "U62",
+                        "U63",
+                        "U64",
+                        "U65",
+                        "U66",
+                        "U67",
+                        "U68",
+                        "U69",
+                        "U70",
+                        "U71",
+                        "U72",
+                        "U73",
+                        "U74",
+                        "U75",
+                        "U76",
+                        "U77",
+                        "U78",
+                        "U79",
+                        "U80",
+                        "U81",
+                        "U82",
+                        "U83",
+                        "U84",
+                        "U85",
+                        "U86",
+                        "U87",
+                        "U88",
+                        "U89",
+                        "U90",
+                        "U91",
+                        "U92",
+                        "U93",
+                        "U94",
+                        "U95",
+                        "U96",
+                        "U97",
+                        "U98",
+                        "U99",
+                        "U100"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "value": {
+                    "description": "The value of the custom floodlight variable. The length of string must not exceed 100 characters.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CustomRichMediaEvents": {
+            "description": "Represents a Custom Rich Media Events group.",
+            "id": "CustomRichMediaEvents",
+            "properties": {
+                "filteredEventIds": {
+                    "description": "List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.",
+                    "items": {
+                        "$ref": "DimensionValue"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#customRichMediaEvents.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CustomViewabilityMetric": {
+            "description": "Custom Viewability Metric",
+            "id": "CustomViewabilityMetric",
+            "properties": {
+                "configuration": {
+                    "$ref": "CustomViewabilityMetricConfiguration",
+                    "description": "Configuration of the custom viewability metric."
+                },
+                "id": {
+                    "description": "ID of the custom viewability metric.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of the custom viewability metric.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CustomViewabilityMetricConfiguration": {
+            "description": "The attributes, like playtime and percent onscreen, that define the Custom Viewability Metric.",
+            "id": "CustomViewabilityMetricConfiguration",
+            "properties": {
+                "audible": {
+                    "description": "Whether the video must be audible to count an impression.",
+                    "type": "boolean"
+                },
+                "timeMillis": {
+                    "description": "The time in milliseconds the video must play for the Custom Viewability Metric to count an impression. If both this and timePercent are specified, the earlier of the two will be used.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "timePercent": {
+                    "description": "The percentage of video that must play for the Custom Viewability Metric to count an impression. If both this and timeMillis are specified, the earlier of the two will be used.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "viewabilityPercent": {
+                    "description": "The percentage of video that must be on screen for the Custom Viewability Metric to count an impression.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "DateRange": {
+            "description": "Represents a date range.",
+            "id": "DateRange",
+            "properties": {
+                "endDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#dateRange.",
+                    "type": "string"
+                },
+                "relativeDateRange": {
+                    "description": "The date range relative to the date of when the report is run.",
+                    "enum": [
+                        "TODAY",
+                        "YESTERDAY",
+                        "WEEK_TO_DATE",
+                        "MONTH_TO_DATE",
+                        "QUARTER_TO_DATE",
+                        "YEAR_TO_DATE",
+                        "PREVIOUS_WEEK",
+                        "PREVIOUS_MONTH",
+                        "PREVIOUS_QUARTER",
+                        "PREVIOUS_YEAR",
+                        "LAST_7_DAYS",
+                        "LAST_30_DAYS",
+                        "LAST_90_DAYS",
+                        "LAST_365_DAYS",
+                        "LAST_24_MONTHS",
+                        "LAST_14_DAYS",
+                        "LAST_60_DAYS"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "startDate": {
+                    "format": "date",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DayPartTargeting": {
+            "description": "Day Part Targeting.",
+            "id": "DayPartTargeting",
+            "properties": {
+                "daysOfWeek": {
+                    "description": "Days of the week when the ad will serve. Acceptable values are: - \"SUNDAY\" - \"MONDAY\" - \"TUESDAY\" - \"WEDNESDAY\" - \"THURSDAY\" - \"FRIDAY\" - \"SATURDAY\" ",
+                    "items": {
+                        "enum": [
+                            "MONDAY",
+                            "TUESDAY",
+                            "WEDNESDAY",
+                            "THURSDAY",
+                            "FRIDAY",
+                            "SATURDAY",
+                            "SUNDAY"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "hoursOfDay": {
+                    "description": "Hours of the day when the ad will serve, where 0 is midnight to 1 AM and 23 is 11 PM to midnight. Can be specified with days of week, in which case the ad would serve during these hours on the specified days. For example if Monday, Wednesday, Friday are the days of week specified and 9-10am, 3-5pm (hours 9, 15, and 16) is specified, the ad would serve Monday, Wednesdays, and Fridays at 9-10am and 3-5pm. Acceptable values are 0 to 23, inclusive.",
+                    "items": {
+                        "format": "int32",
+                        "type": "integer"
+                    },
+                    "type": "array"
+                },
+                "userLocalTime": {
+                    "description": "Whether or not to use the user's local time. If false, the America/New York time zone applies.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "DeepLink": {
+            "description": "Contains information about a landing page deep link.",
+            "id": "DeepLink",
+            "properties": {
+                "appUrl": {
+                    "description": "The URL of the mobile app being linked to.",
+                    "type": "string"
+                },
+                "fallbackUrl": {
+                    "description": "The fallback URL. This URL will be served to users who do not have the mobile app installed.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#deepLink\".",
+                    "type": "string"
+                },
+                "mobileApp": {
+                    "$ref": "MobileApp",
+                    "description": "The mobile app targeted by this deep link."
+                },
+                "remarketingListIds": {
+                    "description": "Ads served to users on these remarketing lists will use this deep link. Applicable when mobileApp.directory is APPLE_APP_STORE.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "DefaultClickThroughEventTagProperties": {
+            "description": "Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign's setting further.",
+            "id": "DefaultClickThroughEventTagProperties",
+            "properties": {
+                "defaultClickThroughEventTagId": {
+                    "description": "ID of the click-through event tag to apply to all ads in this entity's scope.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "overrideInheritedEventTag": {
+                    "description": "Whether this entity should override the inherited default click-through event tag with its own defined value.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "DeliverySchedule": {
+            "description": "Delivery Schedule.",
+            "id": "DeliverySchedule",
+            "properties": {
+                "frequencyCap": {
+                    "$ref": "FrequencyCap",
+                    "description": "Limit on the number of times an individual user can be served the ad within a specified period of time."
+                },
+                "hardCutoff": {
+                    "description": "Whether or not hard cutoff is enabled. If true, the ad will not serve after the end date and time. Otherwise the ad will continue to be served until it has reached its delivery goals.",
+                    "type": "boolean"
+                },
+                "impressionRatio": {
+                    "description": "Impression ratio for this ad. This ratio determines how often each ad is served relative to the others. For example, if ad A has an impression ratio of 1 and ad B has an impression ratio of 3, then Campaign Manager will serve ad B three times as often as ad A. Acceptable values are 1 to 10, inclusive.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "priority": {
+                    "description": "Serving priority of an ad, with respect to other ads. The lower the priority number, the greater the priority with which it is served.",
+                    "enum": [
+                        "AD_PRIORITY_01",
+                        "AD_PRIORITY_02",
+                        "AD_PRIORITY_03",
+                        "AD_PRIORITY_04",
+                        "AD_PRIORITY_05",
+                        "AD_PRIORITY_06",
+                        "AD_PRIORITY_07",
+                        "AD_PRIORITY_08",
+                        "AD_PRIORITY_09",
+                        "AD_PRIORITY_10",
+                        "AD_PRIORITY_11",
+                        "AD_PRIORITY_12",
+                        "AD_PRIORITY_13",
+                        "AD_PRIORITY_14",
+                        "AD_PRIORITY_15",
+                        "AD_PRIORITY_16"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DfpSettings": {
+            "description": "Google Ad Manager Settings",
+            "id": "DfpSettings",
+            "properties": {
+                "dfpNetworkCode": {
+                    "description": "Ad Manager network code for this directory site.",
+                    "type": "string"
+                },
+                "dfpNetworkName": {
+                    "description": "Ad Manager network name for this directory site.",
+                    "type": "string"
+                },
+                "programmaticPlacementAccepted": {
+                    "description": "Whether this directory site accepts programmatic placements.",
+                    "type": "boolean"
+                },
+                "pubPaidPlacementAccepted": {
+                    "description": "Whether this directory site accepts publisher-paid tags.",
+                    "type": "boolean"
+                },
+                "publisherPortalOnly": {
+                    "description": "Whether this directory site is available only via Publisher Portal.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "Dimension": {
+            "description": "Represents a dimension.",
+            "id": "Dimension",
+            "properties": {
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#dimension.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The dimension name, e.g. dfa:advertiser",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DimensionFilter": {
+            "description": "Represents a dimension filter.",
+            "id": "DimensionFilter",
+            "properties": {
+                "dimensionName": {
+                    "description": "The name of the dimension to filter.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#dimensionFilter.",
+                    "type": "string"
+                },
+                "value": {
+                    "description": "The value of the dimension to filter.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DimensionValue": {
+            "description": "Represents a DimensionValue resource.",
+            "id": "DimensionValue",
+            "properties": {
+                "dimensionName": {
+                    "description": "The name of the dimension.",
+                    "type": "string"
+                },
+                "etag": {
+                    "description": "The eTag of this response for caching purposes.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "The ID associated with the value if available.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#dimensionValue.",
+                    "type": "string"
+                },
+                "matchType": {
+                    "description": "Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.",
+                    "enum": [
+                        "EXACT",
+                        "BEGINS_WITH",
+                        "CONTAINS",
+                        "WILDCARD_EXPRESSION"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "value": {
+                    "description": "The value of the dimension.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DimensionValueList": {
+            "description": "Represents the list of DimensionValue resources.",
+            "id": "DimensionValueList",
+            "properties": {
+                "etag": {
+                    "description": "The eTag of this response for caching purposes.",
+                    "type": "string"
+                },
+                "items": {
+                    "description": "The dimension values returned in this response.",
+                    "items": {
+                        "$ref": "DimensionValue"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of list this is, in this case dfareporting#dimensionValueList.",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Continuation token used to page through dimension values. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DimensionValueRequest": {
+            "description": "Represents a DimensionValuesRequest.",
+            "id": "DimensionValueRequest",
+            "properties": {
+                "dimensionName": {
+                    "annotations": {
+                        "required": [
+                            "dfareporting.dimensionValues.query"
+                        ]
+                    },
+                    "description": "The name of the dimension for which values should be requested.",
+                    "type": "string"
+                },
+                "endDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "filters": {
+                    "description": "The list of filters by which to filter values. The filters are ANDed.",
+                    "items": {
+                        "$ref": "DimensionFilter"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of request this is, in this case dfareporting#dimensionValueRequest .",
+                    "type": "string"
+                },
+                "startDate": {
+                    "format": "date",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DirectorySite": {
+            "description": "DirectorySites contains properties of a website from the Site Directory. Sites need to be added to an account via the Sites resource before they can be assigned to a placement.",
+            "id": "DirectorySite",
+            "properties": {
+                "active": {
+                    "description": "Whether this directory site is active.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "ID of this directory site. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this directory site. This is a read-only, auto-generated field."
+                },
+                "inpageTagFormats": {
+                    "description": "Tag types for regular placements. Acceptable values are: - \"STANDARD\" - \"IFRAME_JAVASCRIPT_INPAGE\" - \"INTERNAL_REDIRECT_INPAGE\" - \"JAVASCRIPT_INPAGE\" ",
+                    "items": {
+                        "enum": [
+                            "STANDARD",
+                            "IFRAME_JAVASCRIPT_INPAGE",
+                            "INTERNAL_REDIRECT_INPAGE",
+                            "JAVASCRIPT_INPAGE"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "interstitialTagFormats": {
+                    "description": "Tag types for interstitial placements. Acceptable values are: - \"IFRAME_JAVASCRIPT_INTERSTITIAL\" - \"INTERNAL_REDIRECT_INTERSTITIAL\" - \"JAVASCRIPT_INTERSTITIAL\" ",
+                    "items": {
+                        "enum": [
+                            "IFRAME_JAVASCRIPT_INTERSTITIAL",
+                            "INTERNAL_REDIRECT_INTERSTITIAL",
+                            "JAVASCRIPT_INTERSTITIAL"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#directorySite\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this directory site.",
+                    "type": "string"
+                },
+                "settings": {
+                    "$ref": "DirectorySiteSettings",
+                    "description": "Directory site settings."
+                },
+                "url": {
+                    "description": "URL of this directory site.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DirectorySiteSettings": {
+            "description": "Directory Site Settings",
+            "id": "DirectorySiteSettings",
+            "properties": {
+                "activeViewOptOut": {
+                    "description": "Whether this directory site has disabled active view creatives.",
+                    "type": "boolean"
+                },
+                "dfpSettings": {
+                    "$ref": "DfpSettings",
+                    "description": "Directory site Ad Manager settings."
+                },
+                "instreamVideoPlacementAccepted": {
+                    "description": "Whether this site accepts in-stream video ads.",
+                    "type": "boolean"
+                },
+                "interstitialPlacementAccepted": {
+                    "description": "Whether this site accepts interstitial ads.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "DirectorySitesListResponse": {
+            "description": "Directory Site List Response",
+            "id": "DirectorySitesListResponse",
+            "properties": {
+                "directorySites": {
+                    "description": "Directory site collection.",
+                    "items": {
+                        "$ref": "DirectorySite"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#directorySitesListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DynamicTargetingKey": {
+            "description": "Contains properties of a dynamic targeting key. Dynamic targeting keys are unique, user-friendly labels, created at the advertiser level in DCM, that can be assigned to ads, creatives, and placements and used for targeting with Studio dynamic creatives. Use these labels instead of numeric Campaign Manager IDs (such as placement IDs) to save time and avoid errors in your dynamic feeds.",
+            "id": "DynamicTargetingKey",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#dynamicTargetingKey\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this dynamic targeting key. This is a required field. Must be less than 256 characters long and cannot contain commas. All characters are converted to lowercase.",
+                    "type": "string"
+                },
+                "objectId": {
+                    "description": "ID of the object of this dynamic targeting key. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "objectType": {
+                    "description": "Type of the object of this dynamic targeting key. This is a required field.",
+                    "enum": [
+                        "OBJECT_ADVERTISER",
+                        "OBJECT_AD",
+                        "OBJECT_CREATIVE",
+                        "OBJECT_PLACEMENT"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DynamicTargetingKeysListResponse": {
+            "description": "Dynamic Targeting Key List Response",
+            "id": "DynamicTargetingKeysListResponse",
+            "properties": {
+                "dynamicTargetingKeys": {
+                    "description": "Dynamic targeting key collection.",
+                    "items": {
+                        "$ref": "DynamicTargetingKey"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#dynamicTargetingKeysListResponse\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "EncryptionInfo": {
+            "description": "A description of how user IDs are encrypted.",
+            "id": "EncryptionInfo",
+            "properties": {
+                "encryptionEntityId": {
+                    "description": "The encryption entity ID. This should match the encryption configuration for ad serving or Data Transfer.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "encryptionEntityType": {
+                    "description": "The encryption entity type. This should match the encryption configuration for ad serving or Data Transfer.",
+                    "enum": [
+                        "ENCRYPTION_ENTITY_TYPE_UNKNOWN",
+                        "DCM_ACCOUNT",
+                        "DCM_ADVERTISER",
+                        "DBM_PARTNER",
+                        "DBM_ADVERTISER",
+                        "ADWORDS_CUSTOMER",
+                        "DFP_NETWORK_CODE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "encryptionSource": {
+                    "description": "Describes whether the encrypted cookie was received from ad serving (the %m macro) or from Data Transfer.",
+                    "enum": [
+                        "ENCRYPTION_SCOPE_UNKNOWN",
+                        "AD_SERVING",
+                        "DATA_TRANSFER"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#encryptionInfo\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "EventTag": {
+            "description": "Contains properties of an event tag.",
+            "id": "EventTag",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this event tag. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this event tag. This field or the campaignId field is required on insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "campaignId": {
+                    "description": "Campaign ID of this event tag. This field or the advertiserId field is required on insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "campaignIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the campaign. This is a read-only, auto-generated field."
+                },
+                "enabledByDefault": {
+                    "description": "Whether this event tag should be automatically enabled for all of the advertiser's campaigns and ads.",
+                    "type": "boolean"
+                },
+                "excludeFromAdxRequests": {
+                    "description": "Whether to remove this event tag from ads that are trafficked through Display & Video 360 to Ad Exchange. This may be useful if the event tag uses a pixel that is unapproved for Ad Exchange bids on one or more networks, such as the Google Display Network.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "ID of this event tag. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#eventTag\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this event tag. This is a required field and must be less than 256 characters long.",
+                    "type": "string"
+                },
+                "siteFilterType": {
+                    "description": "Site filter type for this event tag. If no type is specified then the event tag will be applied to all sites.",
+                    "enum": [
+                        "WHITELIST",
+                        "BLACKLIST"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "siteIds": {
+                    "description": "Filter list of site IDs associated with this event tag. The siteFilterType determines whether this is a allowlist or blocklist filter.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "sslCompliant": {
+                    "description": "Whether this tag is SSL-compliant or not. This is a read-only field.",
+                    "type": "boolean"
+                },
+                "status": {
+                    "description": "Status of this event tag. Must be ENABLED for this event tag to fire. This is a required field.",
+                    "enum": [
+                        "ENABLED",
+                        "DISABLED"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this event tag. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Event tag type. Can be used to specify whether to use a third-party pixel, a third-party JavaScript URL, or a third-party click-through URL for either impression or click tracking. This is a required field.",
+                    "enum": [
+                        "IMPRESSION_IMAGE_EVENT_TAG",
+                        "IMPRESSION_JAVASCRIPT_EVENT_TAG",
+                        "CLICK_THROUGH_EVENT_TAG"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "url": {
+                    "description": "Payload URL for this event tag. The URL on a click-through event tag should have a landing page URL appended to the end of it. This field is required on insertion.",
+                    "type": "string"
+                },
+                "urlEscapeLevels": {
+                    "description": "Number of times the landing page URL should be URL-escaped before being appended to the click-through event tag URL. Only applies to click-through event tags as specified by the event tag type.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "EventTagOverride": {
+            "description": "Event tag override information.",
+            "id": "EventTagOverride",
+            "properties": {
+                "enabled": {
+                    "description": "Whether this override is enabled.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "ID of this event tag override. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "EventTagsListResponse": {
+            "description": "Event Tag List Response",
+            "id": "EventTagsListResponse",
+            "properties": {
+                "eventTags": {
+                    "description": "Event tag collection.",
+                    "items": {
+                        "$ref": "EventTag"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#eventTagsListResponse\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "File": {
+            "description": "Represents a File resource. A file contains the metadata for a report run. It shows the status of the run and holds the URLs to the generated report data if the run is finished and the status is \"REPORT_AVAILABLE\".",
+            "id": "File",
+            "properties": {
+                "dateRange": {
+                    "$ref": "DateRange",
+                    "description": "The date range for which the file has report data. The date range will always be the absolute date range for which the report is run."
+                },
+                "etag": {
+                    "description": "Etag of this resource.",
+                    "type": "string"
+                },
+                "fileName": {
+                    "description": "The filename of the file.",
+                    "type": "string"
+                },
+                "format": {
+                    "description": "The output format of the report. Only available once the file is available.",
+                    "enum": [
+                        "CSV",
+                        "EXCEL"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "id": {
+                    "description": "The unique ID of this report file.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#file\".",
+                    "type": "string"
+                },
+                "lastModifiedTime": {
+                    "description": "The timestamp in milliseconds since epoch when this file was last modified.",
+                    "format": "int64",
+                    "type": "string"
                 },
                 "reportId": {
-                  "type": "string",
-                  "required": true,
-                  "format": "int64",
-                  "description": "The ID of the parent report.",
-                  "location": "path"
+                    "description": "The ID of the report this file was generated from.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "The status of the report file.",
+                    "enum": [
+                        "PROCESSING",
+                        "REPORT_AVAILABLE",
+                        "FAILED",
+                        "CANCELLED"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "urls": {
+                    "description": "The URLs where the completed report file can be downloaded.",
+                    "properties": {
+                        "apiUrl": {
+                            "description": "The URL for downloading the report data through the API.",
+                            "type": "string"
+                        },
+                        "browserUrl": {
+                            "description": "The URL for downloading the report data through a browser.",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "FileList": {
+            "description": "List of files for a report.",
+            "id": "FileList",
+            "properties": {
+                "etag": {
+                    "description": "Etag of this resource.",
+                    "type": "string"
+                },
+                "items": {
+                    "description": "The files returned in this response.",
+                    "items": {
+                        "$ref": "File"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#fileList\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Continuation token used to page through files. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Flight": {
+            "description": "Flight",
+            "id": "Flight",
+            "properties": {
+                "endDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "rateOrCost": {
+                    "description": "Rate or cost of this flight.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "startDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "units": {
+                    "description": "Units of this flight.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FloodlightActivitiesGenerateTagResponse": {
+            "description": "Floodlight Activity GenerateTag Response",
+            "id": "FloodlightActivitiesGenerateTagResponse",
+            "properties": {
+                "floodlightActivityTag": {
+                    "description": "Generated tag for this Floodlight activity. For global site tags, this is the event snippet.",
+                    "type": "string"
+                },
+                "globalSiteTagGlobalSnippet": {
+                    "description": "The global snippet section of a global site tag. The global site tag sets new cookies on your domain, which will store a unique identifier for a user or the ad click that brought the user to your site. Learn more.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivitiesGenerateTagResponse\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FloodlightActivitiesListResponse": {
+            "description": "Floodlight Activity List Response",
+            "id": "FloodlightActivitiesListResponse",
+            "properties": {
+                "floodlightActivities": {
+                    "description": "Floodlight activity collection.",
+                    "items": {
+                        "$ref": "FloodlightActivity"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivitiesListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FloodlightActivity": {
+            "description": "Contains properties of a Floodlight activity.",
+            "id": "FloodlightActivity",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this floodlight activity. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's advertiser or the existing activity's advertiser.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "cacheBustingType": {
+                    "description": "Code type used for cache busting in the generated tag. Applicable only when floodlightActivityGroupType is COUNTER and countingMethod is STANDARD_COUNTING or UNIQUE_COUNTING.",
+                    "enum": [
+                        "JAVASCRIPT",
+                        "ACTIVE_SERVER_PAGE",
+                        "JSP",
+                        "PHP",
+                        "COLD_FUSION"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "countingMethod": {
+                    "description": "Counting method for conversions for this floodlight activity. This is a required field.",
+                    "enum": [
+                        "STANDARD_COUNTING",
+                        "UNIQUE_COUNTING",
+                        "SESSION_COUNTING",
+                        "TRANSACTIONS_COUNTING",
+                        "ITEMS_SOLD_COUNTING"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "defaultTags": {
+                    "description": "Dynamic floodlight tags.",
+                    "items": {
+                        "$ref": "FloodlightActivityDynamicTag"
+                    },
+                    "type": "array"
+                },
+                "expectedUrl": {
+                    "description": "URL where this tag will be deployed. If specified, must be less than 256 characters long.",
+                    "type": "string"
+                },
+                "floodlightActivityGroupId": {
+                    "description": "Floodlight activity group ID of this floodlight activity. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "floodlightActivityGroupName": {
+                    "description": "Name of the associated floodlight activity group. This is a read-only field.",
+                    "type": "string"
+                },
+                "floodlightActivityGroupTagString": {
+                    "description": "Tag string of the associated floodlight activity group. This is a read-only field.",
+                    "type": "string"
+                },
+                "floodlightActivityGroupType": {
+                    "description": "Type of the associated floodlight activity group. This is a read-only field.",
+                    "enum": [
+                        "COUNTER",
+                        "SALE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "floodlightConfigurationId": {
+                    "description": "Floodlight configuration ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's floodlight configuration or from the existing activity's floodlight configuration.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "floodlightConfigurationIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field."
+                },
+                "floodlightTagType": {
+                    "description": "The type of Floodlight tag this activity will generate. This is a required field.",
+                    "enum": [
+                        "IFRAME",
+                        "IMAGE",
+                        "GLOBAL_SITE_TAG"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "hidden": {
+                    "description": "Whether this activity is archived.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "ID of this floodlight activity. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this floodlight activity. This is a read-only, auto-generated field."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivity\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this floodlight activity. This is a required field. Must be less than 129 characters long and cannot contain quotes.",
+                    "type": "string"
+                },
+                "notes": {
+                    "description": "General notes or implementation instructions for the tag.",
+                    "type": "string"
+                },
+                "publisherTags": {
+                    "description": "Publisher dynamic floodlight tags.",
+                    "items": {
+                        "$ref": "FloodlightActivityPublisherDynamicTag"
+                    },
+                    "type": "array"
+                },
+                "secure": {
+                    "description": "Whether this tag should use SSL.",
+                    "type": "boolean"
+                },
+                "sslCompliant": {
+                    "description": "Whether the floodlight activity is SSL-compliant. This is a read-only field, its value detected by the system from the floodlight tags.",
+                    "type": "boolean"
+                },
+                "sslRequired": {
+                    "description": "Whether this floodlight activity must be SSL-compliant.",
+                    "type": "boolean"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this floodlight activity. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "tagFormat": {
+                    "description": "Tag format type for the floodlight activity. If left blank, the tag format will default to HTML.",
+                    "enum": [
+                        "HTML",
+                        "XHTML"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "tagString": {
+                    "description": "Value of the cat= parameter in the floodlight tag, which the ad servers use to identify the activity. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being a-z0-9[ _ ]. This tag string must also be unique among activities of the same activity group. This field is read-only after insertion.",
+                    "type": "string"
+                },
+                "userDefinedVariableTypes": {
+                    "description": "List of the user-defined variables used by this conversion tag. These map to the \"u[1-100]=\" in the tags. Each of these can have a user defined type. Acceptable values are U1 to U100, inclusive. ",
+                    "items": {
+                        "enum": [
+                            "U1",
+                            "U2",
+                            "U3",
+                            "U4",
+                            "U5",
+                            "U6",
+                            "U7",
+                            "U8",
+                            "U9",
+                            "U10",
+                            "U11",
+                            "U12",
+                            "U13",
+                            "U14",
+                            "U15",
+                            "U16",
+                            "U17",
+                            "U18",
+                            "U19",
+                            "U20",
+                            "U21",
+                            "U22",
+                            "U23",
+                            "U24",
+                            "U25",
+                            "U26",
+                            "U27",
+                            "U28",
+                            "U29",
+                            "U30",
+                            "U31",
+                            "U32",
+                            "U33",
+                            "U34",
+                            "U35",
+                            "U36",
+                            "U37",
+                            "U38",
+                            "U39",
+                            "U40",
+                            "U41",
+                            "U42",
+                            "U43",
+                            "U44",
+                            "U45",
+                            "U46",
+                            "U47",
+                            "U48",
+                            "U49",
+                            "U50",
+                            "U51",
+                            "U52",
+                            "U53",
+                            "U54",
+                            "U55",
+                            "U56",
+                            "U57",
+                            "U58",
+                            "U59",
+                            "U60",
+                            "U61",
+                            "U62",
+                            "U63",
+                            "U64",
+                            "U65",
+                            "U66",
+                            "U67",
+                            "U68",
+                            "U69",
+                            "U70",
+                            "U71",
+                            "U72",
+                            "U73",
+                            "U74",
+                            "U75",
+                            "U76",
+                            "U77",
+                            "U78",
+                            "U79",
+                            "U80",
+                            "U81",
+                            "U82",
+                            "U83",
+                            "U84",
+                            "U85",
+                            "U86",
+                            "U87",
+                            "U88",
+                            "U89",
+                            "U90",
+                            "U91",
+                            "U92",
+                            "U93",
+                            "U94",
+                            "U95",
+                            "U96",
+                            "U97",
+                            "U98",
+                            "U99",
+                            "U100"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "FloodlightActivityDynamicTag": {
+            "description": "Dynamic Tag",
+            "id": "FloodlightActivityDynamicTag",
+            "properties": {
+                "id": {
+                    "description": "ID of this dynamic tag. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this tag.",
+                    "type": "string"
+                },
+                "tag": {
+                    "description": "Tag code.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FloodlightActivityGroup": {
+            "description": "Contains properties of a Floodlight activity group.",
+            "id": "FloodlightActivityGroup",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this floodlight activity group. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this floodlight activity group. If this field is left blank, the value will be copied over either from the floodlight configuration's advertiser or from the existing activity group's advertiser.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "floodlightConfigurationId": {
+                    "description": "Floodlight configuration ID of this floodlight activity group. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "floodlightConfigurationIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field."
+                },
+                "id": {
+                    "description": "ID of this floodlight activity group. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this floodlight activity group. This is a read-only, auto-generated field."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivityGroup\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this floodlight activity group. This is a required field. Must be less than 65 characters long and cannot contain quotes.",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this floodlight activity group. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "tagString": {
+                    "description": "Value of the type= parameter in the floodlight tag, which the ad servers use to identify the activity group that the activity belongs to. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being a-z0-9[ _ ]. This tag string must also be unique among activity groups of the same floodlight configuration. This field is read-only after insertion.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Type of the floodlight activity group. This is a required field that is read-only after insertion.",
+                    "enum": [
+                        "COUNTER",
+                        "SALE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FloodlightActivityGroupsListResponse": {
+            "description": "Floodlight Activity Group List Response",
+            "id": "FloodlightActivityGroupsListResponse",
+            "properties": {
+                "floodlightActivityGroups": {
+                    "description": "Floodlight activity group collection.",
+                    "items": {
+                        "$ref": "FloodlightActivityGroup"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivityGroupsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FloodlightActivityPublisherDynamicTag": {
+            "description": "Publisher Dynamic Tag",
+            "id": "FloodlightActivityPublisherDynamicTag",
+            "properties": {
+                "clickThrough": {
+                    "description": "Whether this tag is applicable only for click-throughs.",
+                    "type": "boolean"
+                },
+                "directorySiteId": {
+                    "description": "Directory site ID of this dynamic tag. This is a write-only field that can be used as an alternative to the siteId field. When this resource is retrieved, only the siteId field will be populated.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "dynamicTag": {
+                    "$ref": "FloodlightActivityDynamicTag",
+                    "description": "Dynamic floodlight tag."
+                },
+                "siteId": {
+                    "description": "Site ID of this dynamic tag.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "siteIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the site. This is a read-only, auto-generated field."
+                },
+                "viewThrough": {
+                    "description": "Whether this tag is applicable only for view-throughs.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "FloodlightConfiguration": {
+            "description": "Contains properties of a Floodlight configuration.",
+            "id": "FloodlightConfiguration",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this floodlight configuration. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of the parent advertiser of this floodlight configuration.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "analyticsDataSharingEnabled": {
+                    "description": "Whether advertiser data is shared with Google Analytics.",
+                    "type": "boolean"
+                },
+                "customViewabilityMetric": {
+                    "$ref": "CustomViewabilityMetric",
+                    "description": "Custom Viewability metric for the floodlight configuration."
+                },
+                "exposureToConversionEnabled": {
+                    "description": "Whether the exposure-to-conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.",
+                    "type": "boolean"
+                },
+                "firstDayOfWeek": {
+                    "description": "Day that will be counted as the first day of the week in reports. This is a required field.",
+                    "enum": [
+                        "MONDAY",
+                        "SUNDAY"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this floodlight configuration. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this floodlight configuration. This is a read-only, auto-generated field."
+                },
+                "inAppAttributionTrackingEnabled": {
+                    "description": "Whether in-app attribution tracking is enabled.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightConfiguration\".",
+                    "type": "string"
+                },
+                "lookbackConfiguration": {
+                    "$ref": "LookbackConfiguration",
+                    "description": "Lookback window settings for this floodlight configuration."
+                },
+                "naturalSearchConversionAttributionOption": {
+                    "description": "Types of attribution options for natural search conversions.",
+                    "enum": [
+                        "EXCLUDE_NATURAL_SEARCH_CONVERSION_ATTRIBUTION",
+                        "INCLUDE_NATURAL_SEARCH_CONVERSION_ATTRIBUTION",
+                        "INCLUDE_NATURAL_SEARCH_TIERED_CONVERSION_ATTRIBUTION"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "omnitureSettings": {
+                    "$ref": "OmnitureSettings",
+                    "description": "Settings for Campaign Manager Omniture integration."
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this floodlight configuration. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "tagSettings": {
+                    "$ref": "TagSettings",
+                    "description": "Configuration settings for dynamic and image floodlight tags."
+                },
+                "thirdPartyAuthenticationTokens": {
+                    "description": "List of third-party authentication tokens enabled for this configuration.",
+                    "items": {
+                        "$ref": "ThirdPartyAuthenticationToken"
+                    },
+                    "type": "array"
+                },
+                "userDefinedVariableConfigurations": {
+                    "description": "List of user defined variables enabled for this configuration.",
+                    "items": {
+                        "$ref": "UserDefinedVariableConfiguration"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "FloodlightConfigurationsListResponse": {
+            "description": "Floodlight Configuration List Response",
+            "id": "FloodlightConfigurationsListResponse",
+            "properties": {
+                "floodlightConfigurations": {
+                    "description": "Floodlight configuration collection.",
+                    "items": {
+                        "$ref": "FloodlightConfiguration"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightConfigurationsListResponse\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FloodlightReportCompatibleFields": {
+            "description": "Represents fields that are compatible to be selected for a report of type \"FlOODLIGHT\".",
+            "id": "FloodlightReportCompatibleFields",
+            "properties": {
+                "dimensionFilters": {
+                    "description": "Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "dimensions": {
+                    "description": "Dimensions which are compatible to be selected in the \"dimensions\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#floodlightReportCompatibleFields.",
+                    "type": "string"
+                },
+                "metrics": {
+                    "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "FrequencyCap": {
+            "description": "Frequency Cap.",
+            "id": "FrequencyCap",
+            "properties": {
+                "duration": {
+                    "description": "Duration of time, in seconds, for this frequency cap. The maximum duration is 90 days. Acceptable values are 1 to 7776000, inclusive.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "impressions": {
+                    "description": "Number of times an individual user can be served the ad within the specified duration. Acceptable values are 1 to 15, inclusive.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FsCommand": {
+            "description": "FsCommand.",
+            "id": "FsCommand",
+            "properties": {
+                "left": {
+                    "description": "Distance from the left of the browser.Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "positionOption": {
+                    "description": "Position in the browser where the window will open.",
+                    "enum": [
+                        "CENTERED",
+                        "DISTANCE_FROM_TOP_LEFT_CORNER"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "top": {
+                    "description": "Distance from the top of the browser. Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "windowHeight": {
+                    "description": "Height of the window.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "windowWidth": {
+                    "description": "Width of the window.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "GeoTargeting": {
+            "description": "Geographical Targeting.",
+            "id": "GeoTargeting",
+            "properties": {
+                "cities": {
+                    "description": "Cities to be targeted. For each city only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a city, do not target or exclude the country of the city, and do not target the metro or region of the city.",
+                    "items": {
+                        "$ref": "City"
+                    },
+                    "type": "array"
+                },
+                "countries": {
+                    "description": "Countries to be targeted or excluded from targeting, depending on the setting of the excludeCountries field. For each country only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting or excluding a country, do not target regions, cities, metros, or postal codes in the same country.",
+                    "items": {
+                        "$ref": "Country"
+                    },
+                    "type": "array"
+                },
+                "excludeCountries": {
+                    "description": "Whether or not to exclude the countries in the countries field from targeting. If false, the countries field refers to countries which will be targeted by the ad.",
+                    "type": "boolean"
+                },
+                "metros": {
+                    "description": "Metros to be targeted. For each metro only dmaId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a metro, do not target or exclude the country of the metro.",
+                    "items": {
+                        "$ref": "Metro"
+                    },
+                    "type": "array"
+                },
+                "postalCodes": {
+                    "description": "Postal codes to be targeted. For each postal code only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a postal code, do not target or exclude the country of the postal code.",
+                    "items": {
+                        "$ref": "PostalCode"
+                    },
+                    "type": "array"
+                },
+                "regions": {
+                    "description": "Regions to be targeted. For each region only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a region, do not target or exclude the country of the region.",
+                    "items": {
+                        "$ref": "Region"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "InventoryItem": {
+            "description": "Represents a buy from the Planning inventory store.",
+            "id": "InventoryItem",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "adSlots": {
+                    "description": "Ad slots of this inventory item. If this inventory item represents a standalone placement, there will be exactly one ad slot. If this inventory item represents a placement group, there will be more than one ad slot, each representing one child placement in that placement group.",
+                    "items": {
+                        "$ref": "AdSlot"
+                    },
+                    "type": "array"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "contentCategoryId": {
+                    "description": "Content category ID of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "estimatedClickThroughRate": {
+                    "description": "Estimated click-through rate of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "estimatedConversionRate": {
+                    "description": "Estimated conversion rate of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "inPlan": {
+                    "description": "Whether this inventory item is in plan.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#inventoryItem\".",
+                    "type": "string"
+                },
+                "lastModifiedInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the most recent modification of this inventory item."
+                },
+                "name": {
+                    "description": "Name of this inventory item. For standalone inventory items, this is the same name as that of its only ad slot. For group inventory items, this can differ from the name of any of its ad slots.",
+                    "type": "string"
+                },
+                "negotiationChannelId": {
+                    "description": "Negotiation channel ID of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "orderId": {
+                    "description": "Order ID of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "placementStrategyId": {
+                    "description": "Placement strategy ID of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "pricing": {
+                    "$ref": "Pricing",
+                    "description": "Pricing of this inventory item."
+                },
+                "projectId": {
+                    "description": "Project ID of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "rfpId": {
+                    "description": "RFP ID of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "siteId": {
+                    "description": "ID of the site this inventory item is associated with.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Type of inventory item.",
+                    "enum": [
+                        "PLANNING_PLACEMENT_TYPE_REGULAR",
+                        "PLANNING_PLACEMENT_TYPE_CREDIT"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "InventoryItemsListResponse": {
+            "description": "Inventory item List Response",
+            "id": "InventoryItemsListResponse",
+            "properties": {
+                "inventoryItems": {
+                    "description": "Inventory item collection",
+                    "items": {
+                        "$ref": "InventoryItem"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#inventoryItemsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "KeyValueTargetingExpression": {
+            "description": "Key Value Targeting Expression.",
+            "id": "KeyValueTargetingExpression",
+            "properties": {
+                "expression": {
+                    "description": "Keyword expression being targeted by the ad.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LandingPage": {
+            "description": "Contains information about where a user's browser is taken after the user clicks an ad.",
+            "id": "LandingPage",
+            "properties": {
+                "advertiserId": {
+                    "description": "Advertiser ID of this landing page. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "archived": {
+                    "description": "Whether this landing page has been archived.",
+                    "type": "boolean"
+                },
+                "deepLinks": {
+                    "description": "Links that will direct the user to a mobile app, if installed.",
+                    "items": {
+                        "$ref": "DeepLink"
+                    },
+                    "type": "array"
+                },
+                "id": {
+                    "description": "ID of this landing page. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#landingPage\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this landing page. This is a required field. It must be less than 256 characters long.",
+                    "type": "string"
+                },
+                "url": {
+                    "description": "URL of this landing page. This is a required field.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Language": {
+            "description": "Contains information about a language that can be targeted by ads.",
+            "id": "Language",
+            "properties": {
+                "id": {
+                    "description": "Language ID of this language. This is the ID used for targeting and generating reports.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#language\".",
+                    "type": "string"
+                },
+                "languageCode": {
+                    "description": "Format of language code is an ISO 639 two-letter language code optionally followed by an underscore followed by an ISO 3166 code. Examples are \"en\" for English or \"zh_CN\" for Simplified Chinese.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this language.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LanguageTargeting": {
+            "description": "Language Targeting.",
+            "id": "LanguageTargeting",
+            "properties": {
+                "languages": {
+                    "description": "Languages that this ad targets. For each language only languageId is required. The other fields are populated automatically when the ad is inserted or updated.",
+                    "items": {
+                        "$ref": "Language"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "LanguagesListResponse": {
+            "description": "Language List Response",
+            "id": "LanguagesListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#languagesListResponse\".",
+                    "type": "string"
+                },
+                "languages": {
+                    "description": "Language collection.",
+                    "items": {
+                        "$ref": "Language"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "LastModifiedInfo": {
+            "description": "Modification timestamp.",
+            "id": "LastModifiedInfo",
+            "properties": {
+                "time": {
+                    "description": "Timestamp of the last change in milliseconds since epoch.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListPopulationClause": {
+            "description": "A group clause made up of list population terms representing constraints joined by ORs.",
+            "id": "ListPopulationClause",
+            "properties": {
+                "terms": {
+                    "description": "Terms of this list population clause. Each clause is made up of list population terms representing constraints and are joined by ORs.",
+                    "items": {
+                        "$ref": "ListPopulationTerm"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListPopulationRule": {
+            "description": "Remarketing List Population Rule.",
+            "id": "ListPopulationRule",
+            "properties": {
+                "floodlightActivityId": {
+                    "description": "Floodlight activity ID associated with this rule. This field can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "floodlightActivityName": {
+                    "description": "Name of floodlight activity associated with this rule. This is a read-only, auto-generated field.",
+                    "type": "string"
+                },
+                "listPopulationClauses": {
+                    "description": "Clauses that make up this list population rule. Clauses are joined by ANDs, and the clauses themselves are made up of list population terms which are joined by ORs.",
+                    "items": {
+                        "$ref": "ListPopulationClause"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListPopulationTerm": {
+            "description": "Remarketing List Population Rule Term.",
+            "id": "ListPopulationTerm",
+            "properties": {
+                "contains": {
+                    "description": "Will be true if the term should check if the user is in the list and false if the term should check if the user is not in the list. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM. False by default.",
+                    "type": "boolean"
+                },
+                "negation": {
+                    "description": "Whether to negate the comparison result of this term during rule evaluation. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.",
+                    "type": "boolean"
+                },
+                "operator": {
+                    "description": "Comparison operator of this term. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.",
+                    "enum": [
+                        "NUM_EQUALS",
+                        "NUM_LESS_THAN",
+                        "NUM_LESS_THAN_EQUAL",
+                        "NUM_GREATER_THAN",
+                        "NUM_GREATER_THAN_EQUAL",
+                        "STRING_EQUALS",
+                        "STRING_CONTAINS"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "remarketingListId": {
+                    "description": "ID of the list in question. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "List population term type determines the applicable fields in this object. If left unset or set to CUSTOM_VARIABLE_TERM, then variableName, variableFriendlyName, operator, value, and negation are applicable. If set to LIST_MEMBERSHIP_TERM then remarketingListId and contains are applicable. If set to REFERRER_TERM then operator, value, and negation are applicable.",
+                    "enum": [
+                        "CUSTOM_VARIABLE_TERM",
+                        "LIST_MEMBERSHIP_TERM",
+                        "REFERRER_TERM"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "value": {
+                    "description": "Literal to compare the variable to. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.",
+                    "type": "string"
+                },
+                "variableFriendlyName": {
+                    "description": "Friendly name of this term's variable. This is a read-only, auto-generated field. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM.",
+                    "type": "string"
+                },
+                "variableName": {
+                    "description": "Name of the variable (U1, U2, etc.) being compared in this term. This field is only relevant when type is set to null, CUSTOM_VARIABLE_TERM or REFERRER_TERM.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListTargetingExpression": {
+            "description": "Remarketing List Targeting Expression.",
+            "id": "ListTargetingExpression",
+            "properties": {
+                "expression": {
+                    "description": "Expression describing which lists are being targeted by the ad.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LookbackConfiguration": {
+            "description": "Lookback configuration settings.",
+            "id": "LookbackConfiguration",
+            "properties": {
+                "clickDuration": {
+                    "description": "Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used. Acceptable values are 0 to 90, inclusive.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "postImpressionActivitiesDuration": {
+                    "description": "Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used. Acceptable values are 0 to 90, inclusive.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "Metric": {
+            "description": "Represents a metric.",
+            "id": "Metric",
+            "properties": {
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#metric.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The metric name, e.g. dfa:impressions",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Metro": {
+            "description": "Contains information about a metro region that can be targeted by ads.",
+            "id": "Metro",
+            "properties": {
+                "countryCode": {
+                    "description": "Country code of the country to which this metro region belongs.",
+                    "type": "string"
+                },
+                "countryDartId": {
+                    "description": "DART ID of the country to which this metro region belongs.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "dartId": {
+                    "description": "DART ID of this metro region.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "dmaId": {
+                    "description": "DMA ID of this metro region. This is the ID used for targeting and generating reports, and is equivalent to metro_code.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#metro\".",
+                    "type": "string"
+                },
+                "metroCode": {
+                    "description": "Metro code of this metro region. This is equivalent to dma_id.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this metro region.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MetrosListResponse": {
+            "description": "Metro List Response",
+            "id": "MetrosListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#metrosListResponse\".",
+                    "type": "string"
+                },
+                "metros": {
+                    "description": "Metro collection.",
+                    "items": {
+                        "$ref": "Metro"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "MobileApp": {
+            "description": "Contains information about a mobile app. Used as a landing page deep link.",
+            "id": "MobileApp",
+            "properties": {
+                "directory": {
+                    "description": "Mobile app directory.",
+                    "enum": [
+                        "UNKNOWN",
+                        "APPLE_APP_STORE",
+                        "GOOGLE_PLAY_STORE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this mobile app.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#mobileApp\".",
+                    "type": "string"
+                },
+                "publisherName": {
+                    "description": "Publisher name.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Title of this mobile app.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MobileAppsListResponse": {
+            "description": "Mobile app List Response",
+            "id": "MobileAppsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#mobileAppsListResponse\".",
+                    "type": "string"
+                },
+                "mobileApps": {
+                    "description": "Mobile apps collection.",
+                    "items": {
+                        "$ref": "MobileApp"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MobileCarrier": {
+            "description": "Contains information about a mobile carrier that can be targeted by ads.",
+            "id": "MobileCarrier",
+            "properties": {
+                "countryCode": {
+                    "description": "Country code of the country to which this mobile carrier belongs.",
+                    "type": "string"
+                },
+                "countryDartId": {
+                    "description": "DART ID of the country to which this mobile carrier belongs.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this mobile carrier.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#mobileCarrier\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this mobile carrier.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MobileCarriersListResponse": {
+            "description": "Mobile Carrier List Response",
+            "id": "MobileCarriersListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#mobileCarriersListResponse\".",
+                    "type": "string"
+                },
+                "mobileCarriers": {
+                    "description": "Mobile carrier collection.",
+                    "items": {
+                        "$ref": "MobileCarrier"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ObjectFilter": {
+            "description": "Object Filter.",
+            "id": "ObjectFilter",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#objectFilter\".",
+                    "type": "string"
+                },
+                "objectIds": {
+                    "description": "Applicable when status is ASSIGNED. The user has access to objects with these object IDs.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "status": {
+                    "description": "Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.",
+                    "enum": [
+                        "NONE",
+                        "ASSIGNED",
+                        "ALL"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "OffsetPosition": {
+            "description": "Offset Position.",
+            "id": "OffsetPosition",
+            "properties": {
+                "left": {
+                    "description": "Offset distance from left side of an asset or a window.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "top": {
+                    "description": "Offset distance from top side of an asset or a window.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "OmnitureSettings": {
+            "description": "Omniture Integration Settings.",
+            "id": "OmnitureSettings",
+            "properties": {
+                "omnitureCostDataEnabled": {
+                    "description": "Whether placement cost data will be sent to Omniture. This property can be enabled only if omnitureIntegrationEnabled is true.",
+                    "type": "boolean"
+                },
+                "omnitureIntegrationEnabled": {
+                    "description": "Whether Omniture integration is enabled. This property can be enabled only when the \"Advanced Ad Serving\" account setting is enabled.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "OperatingSystem": {
+            "description": "Contains information about an operating system that can be targeted by ads.",
+            "id": "OperatingSystem",
+            "properties": {
+                "dartId": {
+                    "description": "DART ID of this operating system. This is the ID used for targeting.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "desktop": {
+                    "description": "Whether this operating system is for desktop.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#operatingSystem\".",
+                    "type": "string"
+                },
+                "mobile": {
+                    "description": "Whether this operating system is for mobile.",
+                    "type": "boolean"
+                },
+                "name": {
+                    "description": "Name of this operating system.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "OperatingSystemVersion": {
+            "description": "Contains information about a particular version of an operating system that can be targeted by ads.",
+            "id": "OperatingSystemVersion",
+            "properties": {
+                "id": {
+                    "description": "ID of this operating system version.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#operatingSystemVersion\".",
+                    "type": "string"
+                },
+                "majorVersion": {
+                    "description": "Major version (leftmost number) of this operating system version.",
+                    "type": "string"
+                },
+                "minorVersion": {
+                    "description": "Minor version (number after the first dot) of this operating system version.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this operating system version.",
+                    "type": "string"
+                },
+                "operatingSystem": {
+                    "$ref": "OperatingSystem",
+                    "description": "Operating system of this operating system version."
+                }
+            },
+            "type": "object"
+        },
+        "OperatingSystemVersionsListResponse": {
+            "description": "Operating System Version List Response",
+            "id": "OperatingSystemVersionsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#operatingSystemVersionsListResponse\".",
+                    "type": "string"
+                },
+                "operatingSystemVersions": {
+                    "description": "Operating system version collection.",
+                    "items": {
+                        "$ref": "OperatingSystemVersion"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "OperatingSystemsListResponse": {
+            "description": "Operating System List Response",
+            "id": "OperatingSystemsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#operatingSystemsListResponse\".",
+                    "type": "string"
+                },
+                "operatingSystems": {
+                    "description": "Operating system collection.",
+                    "items": {
+                        "$ref": "OperatingSystem"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "OptimizationActivity": {
+            "description": "Creative optimization activity.",
+            "id": "OptimizationActivity",
+            "properties": {
+                "floodlightActivityId": {
+                    "description": "Floodlight activity ID of this optimization activity. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "floodlightActivityIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field."
+                },
+                "weight": {
+                    "description": "Weight associated with this optimization. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities. Value must be greater than or equal to 1.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "Order": {
+            "description": "Describes properties of a Planning order.",
+            "id": "Order",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this order.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this order.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "approverUserProfileIds": {
+                    "description": "IDs for users that have to approve documents created for this order.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "buyerInvoiceId": {
+                    "description": "Buyer invoice ID associated with this order.",
+                    "type": "string"
+                },
+                "buyerOrganizationName": {
+                    "description": "Name of the buyer organization.",
+                    "type": "string"
+                },
+                "comments": {
+                    "description": "Comments in this order.",
+                    "type": "string"
+                },
+                "contacts": {
+                    "description": "Contacts for this order.",
+                    "items": {
+                        "$ref": "OrderContact"
+                    },
+                    "type": "array"
+                },
+                "id": {
+                    "description": "ID of this order. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#order\".",
+                    "type": "string"
+                },
+                "lastModifiedInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the most recent modification of this order."
+                },
+                "name": {
+                    "description": "Name of this order.",
+                    "type": "string"
+                },
+                "notes": {
+                    "description": "Notes of this order.",
+                    "type": "string"
+                },
+                "planningTermId": {
+                    "description": "ID of the terms and conditions template used in this order.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "projectId": {
+                    "description": "Project ID of this order.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "sellerOrderId": {
+                    "description": "Seller order ID associated with this order.",
+                    "type": "string"
+                },
+                "sellerOrganizationName": {
+                    "description": "Name of the seller organization.",
+                    "type": "string"
+                },
+                "siteId": {
+                    "description": "Site IDs this order is associated with.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "siteNames": {
+                    "description": "Free-form site names this order is associated with.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this order.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "termsAndConditions": {
+                    "description": "Terms and conditions of this order.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "OrderContact": {
+            "description": "Contact of an order.",
+            "id": "OrderContact",
+            "properties": {
+                "contactInfo": {
+                    "description": "Free-form information about this contact. It could be any information related to this contact in addition to type, title, name, and signature user profile ID.",
+                    "type": "string"
+                },
+                "contactName": {
+                    "description": "Name of this contact.",
+                    "type": "string"
+                },
+                "contactTitle": {
+                    "description": "Title of this contact.",
+                    "type": "string"
+                },
+                "contactType": {
+                    "description": "Type of this contact.",
+                    "enum": [
+                        "PLANNING_ORDER_CONTACT_BUYER_CONTACT",
+                        "PLANNING_ORDER_CONTACT_BUYER_BILLING_CONTACT",
+                        "PLANNING_ORDER_CONTACT_SELLER_CONTACT"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "signatureUserProfileId": {
+                    "description": "ID of the user profile containing the signature that will be embedded into order documents.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "OrderDocument": {
+            "description": "Contains properties of a Planning order document.",
+            "id": "OrderDocument",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this order document.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this order document.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "amendedOrderDocumentId": {
+                    "description": "The amended order document ID of this order document. An order document can be created by optionally amending another order document so that the change history can be preserved.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "approvedByUserProfileIds": {
+                    "description": "IDs of users who have approved this order document.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "cancelled": {
+                    "description": "Whether this order document is cancelled.",
+                    "type": "boolean"
+                },
+                "createdInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the creation of this order document."
+                },
+                "effectiveDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this order document.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#orderDocument\".",
+                    "type": "string"
+                },
+                "lastSentRecipients": {
+                    "description": "List of email addresses that received the last sent document.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "lastSentTime": {
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "orderId": {
+                    "description": "ID of the order from which this order document is created.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "projectId": {
+                    "description": "Project ID of this order document.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "signed": {
+                    "description": "Whether this order document has been signed.",
+                    "type": "boolean"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this order document.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Title of this order document.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Type of this order document",
+                    "enum": [
+                        "PLANNING_ORDER_TYPE_INSERTION_ORDER",
+                        "PLANNING_ORDER_TYPE_CHANGE_ORDER"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "OrderDocumentsListResponse": {
+            "description": "Order document List Response",
+            "id": "OrderDocumentsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#orderDocumentsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "orderDocuments": {
+                    "description": "Order document collection",
+                    "items": {
+                        "$ref": "OrderDocument"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "OrdersListResponse": {
+            "description": "Order List Response",
+            "id": "OrdersListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#ordersListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "orders": {
+                    "description": "Order collection.",
+                    "items": {
+                        "$ref": "Order"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PathToConversionReportCompatibleFields": {
+            "description": "Represents fields that are compatible to be selected for a report of type \"PATH_TO_CONVERSION\".",
+            "id": "PathToConversionReportCompatibleFields",
+            "properties": {
+                "conversionDimensions": {
+                    "description": "Conversion dimensions which are compatible to be selected in the \"conversionDimensions\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "customFloodlightVariables": {
+                    "description": "Custom floodlight variables which are compatible to be selected in the \"customFloodlightVariables\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#pathToConversionReportCompatibleFields.",
+                    "type": "string"
+                },
+                "metrics": {
+                    "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                },
+                "perInteractionDimensions": {
+                    "description": "Per-interaction dimensions which are compatible to be selected in the \"perInteractionDimensions\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Placement": {
+            "description": "Contains properties of a placement.",
+            "id": "Placement",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this placement. This field can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "adBlockingOptOut": {
+                    "description": "Whether this placement opts out of ad blocking. When true, ad blocking is disabled for this placement. When false, the campaign and site settings take effect.",
+                    "type": "boolean"
+                },
+                "additionalSizes": {
+                    "description": "Additional sizes associated with this placement. When inserting or updating a placement, only the size ID field is used.",
+                    "items": {
+                        "$ref": "Size"
+                    },
+                    "type": "array"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this placement. This field can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "archived": {
+                    "description": "Whether this placement is archived.",
+                    "type": "boolean"
+                },
+                "campaignId": {
+                    "description": "Campaign ID of this placement. This field is a required field on insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "campaignIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the campaign. This is a read-only, auto-generated field."
+                },
+                "comment": {
+                    "description": "Comments for this placement.",
+                    "type": "string"
+                },
+                "compatibility": {
+                    "description": "Placement compatibility. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering on desktop, on mobile devices or in mobile apps for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are no longer allowed for new placement insertions. Instead, use DISPLAY or DISPLAY_INTERSTITIAL. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. This field is required on insertion.",
+                    "enum": [
+                        "DISPLAY",
+                        "DISPLAY_INTERSTITIAL",
+                        "APP",
+                        "APP_INTERSTITIAL",
+                        "IN_STREAM_VIDEO",
+                        "IN_STREAM_AUDIO"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "contentCategoryId": {
+                    "description": "ID of the content category assigned to this placement.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "createInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the creation of this placement. This is a read-only field."
+                },
+                "directorySiteId": {
+                    "description": "Directory site ID of this placement. On insert, you must set either this field or the siteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "directorySiteIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the directory site. This is a read-only, auto-generated field."
+                },
+                "externalId": {
+                    "description": "External ID for this placement.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this placement. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this placement. This is a read-only, auto-generated field."
+                },
+                "keyName": {
+                    "description": "Key name of this placement. This is a read-only, auto-generated field.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placement\".",
+                    "type": "string"
+                },
+                "lastModifiedInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the most recent modification of this placement. This is a read-only field."
+                },
+                "lookbackConfiguration": {
+                    "$ref": "LookbackConfiguration",
+                    "description": "Lookback window settings for this placement."
+                },
+                "name": {
+                    "description": "Name of this placement.This is a required field and must be less than or equal to 256 characters long.",
+                    "type": "string"
+                },
+                "paymentApproved": {
+                    "description": "Whether payment was approved for this placement. This is a read-only field relevant only to publisher-paid placements.",
+                    "type": "boolean"
+                },
+                "paymentSource": {
+                    "description": "Payment source for this placement. This is a required field that is read-only after insertion.",
+                    "enum": [
+                        "PLACEMENT_AGENCY_PAID",
+                        "PLACEMENT_PUBLISHER_PAID"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "placementGroupId": {
+                    "description": "ID of this placement's group, if applicable.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "placementGroupIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the placement group. This is a read-only, auto-generated field."
+                },
+                "placementStrategyId": {
+                    "description": "ID of the placement strategy assigned to this placement.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "pricingSchedule": {
+                    "$ref": "PricingSchedule",
+                    "description": "Pricing schedule of this placement. This field is required on insertion, specifically subfields startDate, endDate and pricingType."
+                },
+                "primary": {
+                    "description": "Whether this placement is the primary placement of a roadblock (placement group). You cannot change this field from true to false. Setting this field to true will automatically set the primary field on the original primary placement of the roadblock to false, and it will automatically set the roadblock's primaryPlacementId field to the ID of this placement.",
+                    "type": "boolean"
+                },
+                "publisherUpdateInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the last publisher update. This is a read-only field."
+                },
+                "siteId": {
+                    "description": "Site ID associated with this placement. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "siteIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the site. This is a read-only, auto-generated field."
+                },
+                "size": {
+                    "$ref": "Size",
+                    "description": "Size associated with this placement. When inserting or updating a placement, only the size ID field is used. This field is required on insertion."
+                },
+                "sslRequired": {
+                    "description": "Whether creatives assigned to this placement must be SSL-compliant.",
+                    "type": "boolean"
+                },
+                "status": {
+                    "description": "Third-party placement status.",
+                    "enum": [
+                        "PENDING_REVIEW",
+                        "PAYMENT_ACCEPTED",
+                        "PAYMENT_REJECTED",
+                        "ACKNOWLEDGE_REJECTION",
+                        "ACKNOWLEDGE_ACCEPTANCE",
+                        "DRAFT"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this placement. This field can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "tagFormats": {
+                    "description": "Tag formats to generate for this placement. This field is required on insertion. Acceptable values are: - \"PLACEMENT_TAG_STANDARD\" - \"PLACEMENT_TAG_IFRAME_JAVASCRIPT\" - \"PLACEMENT_TAG_IFRAME_ILAYER\" - \"PLACEMENT_TAG_INTERNAL_REDIRECT\" - \"PLACEMENT_TAG_JAVASCRIPT\" - \"PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT\" - \"PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT\" - \"PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT\" - \"PLACEMENT_TAG_CLICK_COMMANDS\" - \"PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH\" - \"PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_3\" - \"PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_4\" - \"PLACEMENT_TAG_TRACKING\" - \"PLACEMENT_TAG_TRACKING_IFRAME\" - \"PLACEMENT_TAG_TRACKING_JAVASCRIPT\" ",
+                    "items": {
+                        "enum": [
+                            "PLACEMENT_TAG_STANDARD",
+                            "PLACEMENT_TAG_IFRAME_JAVASCRIPT",
+                            "PLACEMENT_TAG_IFRAME_ILAYER",
+                            "PLACEMENT_TAG_INTERNAL_REDIRECT",
+                            "PLACEMENT_TAG_JAVASCRIPT",
+                            "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT",
+                            "PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT",
+                            "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT",
+                            "PLACEMENT_TAG_CLICK_COMMANDS",
+                            "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH",
+                            "PLACEMENT_TAG_TRACKING",
+                            "PLACEMENT_TAG_TRACKING_IFRAME",
+                            "PLACEMENT_TAG_TRACKING_JAVASCRIPT",
+                            "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_3",
+                            "PLACEMENT_TAG_IFRAME_JAVASCRIPT_LEGACY",
+                            "PLACEMENT_TAG_JAVASCRIPT_LEGACY",
+                            "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT_LEGACY",
+                            "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT_LEGACY",
+                            "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_4"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "tagSetting": {
+                    "$ref": "TagSetting",
+                    "description": "Tag settings for this placement."
+                },
+                "videoActiveViewOptOut": {
+                    "description": "Whether Verification and ActiveView are disabled for in-stream video creatives for this placement. The same setting videoActiveViewOptOut exists on the site level -- the opt out occurs if either of these settings are true. These settings are distinct from DirectorySites.settings.activeViewOptOut or Sites.siteSettings.activeViewOptOut which only apply to display ads. However, Accounts.activeViewOptOut opts out both video traffic, as well as display ads, from Verification and ActiveView.",
+                    "type": "boolean"
+                },
+                "videoSettings": {
+                    "$ref": "VideoSettings",
+                    "description": "A collection of settings which affect video creatives served through this placement. Applicable to placements with IN_STREAM_VIDEO compatibility."
+                },
+                "vpaidAdapterChoice": {
+                    "description": "VPAID adapter setting for this placement. Controls which VPAID format the measurement adapter will use for in-stream video creatives assigned to this placement. *Note:* Flash is no longer supported. This field now defaults to HTML5 when the following values are provided: FLASH, BOTH.",
+                    "enum": [
+                        "DEFAULT",
+                        "FLASH",
+                        "HTML5",
+                        "BOTH"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PlacementAssignment": {
+            "description": "Placement Assignment.",
+            "id": "PlacementAssignment",
+            "properties": {
+                "active": {
+                    "description": "Whether this placement assignment is active. When true, the placement will be included in the ad's rotation.",
+                    "type": "boolean"
+                },
+                "placementId": {
+                    "description": "ID of the placement to be assigned. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "placementIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the placement. This is a read-only, auto-generated field."
+                },
+                "sslRequired": {
+                    "description": "Whether the placement to be assigned requires SSL. This is a read-only field that is auto-generated when the ad is inserted or updated.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "PlacementGroup": {
+            "description": "Contains properties of a package or roadblock.",
+            "id": "PlacementGroup",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this placement group. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this placement group. This is a required field on insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "archived": {
+                    "description": "Whether this placement group is archived.",
+                    "type": "boolean"
+                },
+                "campaignId": {
+                    "description": "Campaign ID of this placement group. This field is required on insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "campaignIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the campaign. This is a read-only, auto-generated field."
+                },
+                "childPlacementIds": {
+                    "description": "IDs of placements which are assigned to this placement group. This is a read-only, auto-generated field.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "comment": {
+                    "description": "Comments for this placement group.",
+                    "type": "string"
+                },
+                "contentCategoryId": {
+                    "description": "ID of the content category assigned to this placement group.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "createInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the creation of this placement group. This is a read-only field."
+                },
+                "directorySiteId": {
+                    "description": "Directory site ID associated with this placement group. On insert, you must set either this field or the site_id field to specify the site associated with this placement group. This is a required field that is read-only after insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "directorySiteIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the directory site. This is a read-only, auto-generated field."
+                },
+                "externalId": {
+                    "description": "External ID for this placement.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this placement group. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this placement group. This is a read-only, auto-generated field."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementGroup\".",
+                    "type": "string"
+                },
+                "lastModifiedInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the most recent modification of this placement group. This is a read-only field."
+                },
+                "name": {
+                    "description": "Name of this placement group. This is a required field and must be less than 256 characters long.",
+                    "type": "string"
+                },
+                "placementGroupType": {
+                    "description": "Type of this placement group. A package is a simple group of placements that acts as a single pricing point for a group of tags. A roadblock is a group of placements that not only acts as a single pricing point, but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned placements to be marked as primary for reporting. This field is required on insertion.",
+                    "enum": [
+                        "PLACEMENT_PACKAGE",
+                        "PLACEMENT_ROADBLOCK"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "placementStrategyId": {
+                    "description": "ID of the placement strategy assigned to this placement group.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "pricingSchedule": {
+                    "$ref": "PricingSchedule",
+                    "description": "Pricing schedule of this placement group. This field is required on insertion."
+                },
+                "primaryPlacementId": {
+                    "description": "ID of the primary placement, used to calculate the media cost of a roadblock (placement group). Modifying this field will automatically modify the primary field on all affected roadblock child placements.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "primaryPlacementIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the primary placement. This is a read-only, auto-generated field."
+                },
+                "siteId": {
+                    "description": "Site ID associated with this placement group. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement group. This is a required field that is read-only after insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "siteIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the site. This is a read-only, auto-generated field."
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this placement group. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PlacementGroupsListResponse": {
+            "description": "Placement Group List Response",
+            "id": "PlacementGroupsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementGroupsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "placementGroups": {
+                    "description": "Placement group collection.",
+                    "items": {
+                        "$ref": "PlacementGroup"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PlacementStrategiesListResponse": {
+            "description": "Placement Strategy List Response",
+            "id": "PlacementStrategiesListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementStrategiesListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "placementStrategies": {
+                    "description": "Placement strategy collection.",
+                    "items": {
+                        "$ref": "PlacementStrategy"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PlacementStrategy": {
+            "description": "Contains properties of a placement strategy.",
+            "id": "PlacementStrategy",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this placement strategy.This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this placement strategy. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementStrategy\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this placement strategy. This is a required field. It must be less than 256 characters long and unique among placement strategies of the same account.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PlacementTag": {
+            "description": "Placement Tag",
+            "id": "PlacementTag",
+            "properties": {
+                "placementId": {
+                    "description": "Placement ID",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "tagDatas": {
+                    "description": "Tags generated for this placement.",
+                    "items": {
+                        "$ref": "TagData"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PlacementsGenerateTagsResponse": {
+            "description": "Placement GenerateTags Response",
+            "id": "PlacementsGenerateTagsResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementsGenerateTagsResponse\".",
+                    "type": "string"
+                },
+                "placementTags": {
+                    "description": "Set of generated tags for the specified placements.",
+                    "items": {
+                        "$ref": "PlacementTag"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PlacementsListResponse": {
+            "description": "Placement List Response",
+            "id": "PlacementsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "placements": {
+                    "description": "Placement collection.",
+                    "items": {
+                        "$ref": "Placement"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PlatformType": {
+            "description": "Contains information about a platform type that can be targeted by ads.",
+            "id": "PlatformType",
+            "properties": {
+                "id": {
+                    "description": "ID of this platform type.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#platformType\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this platform type.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PlatformTypesListResponse": {
+            "description": "Platform Type List Response",
+            "id": "PlatformTypesListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#platformTypesListResponse\".",
+                    "type": "string"
+                },
+                "platformTypes": {
+                    "description": "Platform type collection.",
+                    "items": {
+                        "$ref": "PlatformType"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PopupWindowProperties": {
+            "description": "Popup Window Properties.",
+            "id": "PopupWindowProperties",
+            "properties": {
+                "dimension": {
+                    "$ref": "Size",
+                    "description": "Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID"
+                },
+                "offset": {
+                    "$ref": "OffsetPosition",
+                    "description": "Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES."
+                },
+                "positionType": {
+                    "description": "Popup window position either centered or at specific coordinate.",
+                    "enum": [
+                        "CENTER",
+                        "COORDINATES"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "showAddressBar": {
+                    "description": "Whether to display the browser address bar.",
+                    "type": "boolean"
+                },
+                "showMenuBar": {
+                    "description": "Whether to display the browser menu bar.",
+                    "type": "boolean"
+                },
+                "showScrollBar": {
+                    "description": "Whether to display the browser scroll bar.",
+                    "type": "boolean"
+                },
+                "showStatusBar": {
+                    "description": "Whether to display the browser status bar.",
+                    "type": "boolean"
+                },
+                "showToolBar": {
+                    "description": "Whether to display the browser tool bar.",
+                    "type": "boolean"
+                },
+                "title": {
+                    "description": "Title of popup window.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PostalCode": {
+            "description": "Contains information about a postal code that can be targeted by ads.",
+            "id": "PostalCode",
+            "properties": {
+                "code": {
+                    "description": "Postal code. This is equivalent to the id field.",
+                    "type": "string"
+                },
+                "countryCode": {
+                    "description": "Country code of the country to which this postal code belongs.",
+                    "type": "string"
+                },
+                "countryDartId": {
+                    "description": "DART ID of the country to which this postal code belongs.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this postal code.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#postalCode\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PostalCodesListResponse": {
+            "description": "Postal Code List Response",
+            "id": "PostalCodesListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#postalCodesListResponse\".",
+                    "type": "string"
+                },
+                "postalCodes": {
+                    "description": "Postal code collection.",
+                    "items": {
+                        "$ref": "PostalCode"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Pricing": {
+            "description": "Pricing Information",
+            "id": "Pricing",
+            "properties": {
+                "capCostType": {
+                    "description": "Cap cost type of this inventory item.",
+                    "enum": [
+                        "PLANNING_PLACEMENT_CAP_COST_TYPE_NONE",
+                        "PLANNING_PLACEMENT_CAP_COST_TYPE_MONTHLY",
+                        "PLANNING_PLACEMENT_CAP_COST_TYPE_CUMULATIVE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "endDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "flights": {
+                    "description": "Flights of this inventory item. A flight (a.k.a. pricing period) represents the inventory item pricing information for a specific period of time.",
+                    "items": {
+                        "$ref": "Flight"
+                    },
+                    "type": "array"
+                },
+                "groupType": {
+                    "description": "Group type of this inventory item if it represents a placement group. Is null otherwise. There are two type of placement groups: PLANNING_PLACEMENT_GROUP_TYPE_PACKAGE is a simple group of inventory items that acts as a single pricing point for a group of tags. PLANNING_PLACEMENT_GROUP_TYPE_ROADBLOCK is a group of inventory items that not only acts as a single pricing point, but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned inventory items to be marked as primary.",
+                    "enum": [
+                        "PLANNING_PLACEMENT_GROUP_TYPE_PACKAGE",
+                        "PLANNING_PLACEMENT_GROUP_TYPE_ROADBLOCK"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "pricingType": {
+                    "description": "Pricing type of this inventory item.",
+                    "enum": [
+                        "PLANNING_PLACEMENT_PRICING_TYPE_IMPRESSIONS",
+                        "PLANNING_PLACEMENT_PRICING_TYPE_CPM",
+                        "PLANNING_PLACEMENT_PRICING_TYPE_CLICKS",
+                        "PLANNING_PLACEMENT_PRICING_TYPE_CPC",
+                        "PLANNING_PLACEMENT_PRICING_TYPE_CPA",
+                        "PLANNING_PLACEMENT_PRICING_TYPE_FLAT_RATE_IMPRESSIONS",
+                        "PLANNING_PLACEMENT_PRICING_TYPE_FLAT_RATE_CLICKS",
+                        "PLANNING_PLACEMENT_PRICING_TYPE_CPM_ACTIVEVIEW"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "startDate": {
+                    "format": "date",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PricingSchedule": {
+            "description": "Pricing Schedule",
+            "id": "PricingSchedule",
+            "properties": {
+                "capCostOption": {
+                    "description": "Placement cap cost option.",
+                    "enum": [
+                        "CAP_COST_NONE",
+                        "CAP_COST_MONTHLY",
+                        "CAP_COST_CUMULATIVE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "disregardOverdelivery": {
+                    "description": "Whether cap costs are ignored by ad serving.",
+                    "type": "boolean"
+                },
+                "endDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "flighted": {
+                    "description": "Whether this placement is flighted. If true, pricing periods will be computed automatically.",
+                    "type": "boolean"
+                },
+                "floodlightActivityId": {
+                    "description": "Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING_TYPE_CPA.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "pricingPeriods": {
+                    "description": "Pricing periods for this placement.",
+                    "items": {
+                        "$ref": "PricingSchedulePricingPeriod"
+                    },
+                    "type": "array"
+                },
+                "pricingType": {
+                    "description": "Placement pricing type. This field is required on insertion.",
+                    "enum": [
+                        "PRICING_TYPE_CPM",
+                        "PRICING_TYPE_CPC",
+                        "PRICING_TYPE_CPA",
+                        "PRICING_TYPE_FLAT_RATE_IMPRESSIONS",
+                        "PRICING_TYPE_FLAT_RATE_CLICKS",
+                        "PRICING_TYPE_CPM_ACTIVEVIEW"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "startDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "testingStartDate": {
+                    "format": "date",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PricingSchedulePricingPeriod": {
+            "description": "Pricing Period",
+            "id": "PricingSchedulePricingPeriod",
+            "properties": {
+                "endDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "pricingComment": {
+                    "description": "Comments for this pricing period.",
+                    "type": "string"
+                },
+                "rateOrCostNanos": {
+                    "description": "Rate or cost of this pricing period in nanos (i.e., multipled by 1000000000). Acceptable values are 0 to 1000000000000000000, inclusive.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "startDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "units": {
+                    "description": "Units of this pricing period. Acceptable values are 0 to 10000000000, inclusive.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Project": {
+            "description": "Contains properties of a Planning project.",
+            "id": "Project",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this project.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this project.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "audienceAgeGroup": {
+                    "description": "Audience age group of this project.",
+                    "enum": [
+                        "PLANNING_AUDIENCE_AGE_18_24",
+                        "PLANNING_AUDIENCE_AGE_25_34",
+                        "PLANNING_AUDIENCE_AGE_35_44",
+                        "PLANNING_AUDIENCE_AGE_45_54",
+                        "PLANNING_AUDIENCE_AGE_55_64",
+                        "PLANNING_AUDIENCE_AGE_65_OR_MORE",
+                        "PLANNING_AUDIENCE_AGE_UNKNOWN"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "audienceGender": {
+                    "description": "Audience gender of this project.",
+                    "enum": [
+                        "PLANNING_AUDIENCE_GENDER_MALE",
+                        "PLANNING_AUDIENCE_GENDER_FEMALE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "budget": {
+                    "description": "Budget of this project in the currency specified by the current account. The value stored in this field represents only the non-fractional amount. For example, for USD, the smallest value that can be represented by this field is 1 US dollar.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "clientBillingCode": {
+                    "description": "Client billing code of this project.",
+                    "type": "string"
+                },
+                "clientName": {
+                    "description": "Name of the project client.",
+                    "type": "string"
+                },
+                "endDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this project. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#project\".",
+                    "type": "string"
+                },
+                "lastModifiedInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the most recent modification of this project."
+                },
+                "name": {
+                    "description": "Name of this project.",
+                    "type": "string"
+                },
+                "overview": {
+                    "description": "Overview of this project.",
+                    "type": "string"
+                },
+                "startDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this project.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "targetClicks": {
+                    "description": "Number of clicks that the advertiser is targeting.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "targetConversions": {
+                    "description": "Number of conversions that the advertiser is targeting.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "targetCpaNanos": {
+                    "description": "CPA that the advertiser is targeting.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "targetCpcNanos": {
+                    "description": "CPC that the advertiser is targeting.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "targetCpmActiveViewNanos": {
+                    "description": "vCPM from Active View that the advertiser is targeting.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "targetCpmNanos": {
+                    "description": "CPM that the advertiser is targeting.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "targetImpressions": {
+                    "description": "Number of impressions that the advertiser is targeting.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ProjectsListResponse": {
+            "description": "Project List Response",
+            "id": "ProjectsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#projectsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "projects": {
+                    "description": "Project collection.",
+                    "items": {
+                        "$ref": "Project"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ReachReportCompatibleFields": {
+            "description": "Represents fields that are compatible to be selected for a report of type \"REACH\".",
+            "id": "ReachReportCompatibleFields",
+            "properties": {
+                "dimensionFilters": {
+                    "description": "Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "dimensions": {
+                    "description": "Dimensions which are compatible to be selected in the \"dimensions\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#reachReportCompatibleFields.",
+                    "type": "string"
+                },
+                "metrics": {
+                    "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                },
+                "pivotedActivityMetrics": {
+                    "description": "Metrics which are compatible to be selected as activity metrics to pivot on in the \"activities\" section of the report.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                },
+                "reachByFrequencyMetrics": {
+                    "description": "Metrics which are compatible to be selected in the \"reachByFrequencyMetricNames\" section of the report.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Recipient": {
+            "description": "Represents a recipient.",
+            "id": "Recipient",
+            "properties": {
+                "deliveryType": {
+                    "annotations": {
+                        "required": [
+                            "dfareporting.reports.insert",
+                            "dfareporting.reports.update"
+                        ]
+                    },
+                    "description": "The delivery type for the recipient.",
+                    "enum": [
+                        "LINK",
+                        "ATTACHMENT"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "email": {
+                    "annotations": {
+                        "required": [
+                            "dfareporting.reports.insert",
+                            "dfareporting.reports.update"
+                        ]
+                    },
+                    "description": "The email address of the recipient.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#recipient.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Region": {
+            "description": "Contains information about a region that can be targeted by ads.",
+            "id": "Region",
+            "properties": {
+                "countryCode": {
+                    "description": "Country code of the country to which this region belongs.",
+                    "type": "string"
+                },
+                "countryDartId": {
+                    "description": "DART ID of the country to which this region belongs.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "dartId": {
+                    "description": "DART ID of this region.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#region\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this region.",
+                    "type": "string"
+                },
+                "regionCode": {
+                    "description": "Region code.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RegionsListResponse": {
+            "description": "Region List Response",
+            "id": "RegionsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#regionsListResponse\".",
+                    "type": "string"
+                },
+                "regions": {
+                    "description": "Region collection.",
+                    "items": {
+                        "$ref": "Region"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "RemarketingList": {
+            "description": "Contains properties of a remarketing list. Remarketing enables you to create lists of users who have performed specific actions on a site, then target ads to members of those lists. This resource can be used to manage remarketing lists that are owned by your advertisers. To see all remarketing lists that are visible to your advertisers, including those that are shared to your advertiser or account, use the TargetableRemarketingLists resource.",
+            "id": "RemarketingList",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "active": {
+                    "description": "Whether this remarketing list is active.",
+                    "type": "boolean"
+                },
+                "advertiserId": {
+                    "description": "Dimension value for the advertiser ID that owns this remarketing list. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "description": {
+                    "description": "Remarketing list description.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Remarketing list ID. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#remarketingList\".",
+                    "type": "string"
+                },
+                "lifeSpan": {
+                    "description": "Number of days that a user should remain in the remarketing list without an impression. Acceptable values are 1 to 540, inclusive.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "listPopulationRule": {
+                    "$ref": "ListPopulationRule",
+                    "description": "Rule used to populate the remarketing list with users."
+                },
+                "listSize": {
+                    "description": "Number of users currently in the list. This is a read-only field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "listSource": {
+                    "description": "Product from which this remarketing list was originated.",
+                    "enum": [
+                        "REMARKETING_LIST_SOURCE_OTHER",
+                        "REMARKETING_LIST_SOURCE_ADX",
+                        "REMARKETING_LIST_SOURCE_DFP",
+                        "REMARKETING_LIST_SOURCE_XFP",
+                        "REMARKETING_LIST_SOURCE_DFA",
+                        "REMARKETING_LIST_SOURCE_GA",
+                        "REMARKETING_LIST_SOURCE_YOUTUBE",
+                        "REMARKETING_LIST_SOURCE_DBM",
+                        "REMARKETING_LIST_SOURCE_GPLUS",
+                        "REMARKETING_LIST_SOURCE_DMP",
+                        "REMARKETING_LIST_SOURCE_PLAY_STORE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of the remarketing list. This is a required field. Must be no greater than 128 characters long.",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RemarketingListShare": {
+            "description": "Contains properties of a remarketing list's sharing information. Sharing allows other accounts or advertisers to target to your remarketing lists. This resource can be used to manage remarketing list sharing to other accounts and advertisers.",
+            "id": "RemarketingListShare",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#remarketingListShare\".",
+                    "type": "string"
+                },
+                "remarketingListId": {
+                    "description": "Remarketing list ID. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "sharedAccountIds": {
+                    "description": "Accounts that the remarketing list is shared with.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "sharedAdvertiserIds": {
+                    "description": "Advertisers that the remarketing list is shared with.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "RemarketingListsListResponse": {
+            "description": "Remarketing list response",
+            "id": "RemarketingListsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#remarketingListsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "remarketingLists": {
+                    "description": "Remarketing list collection.",
+                    "items": {
+                        "$ref": "RemarketingList"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Report": {
+            "description": "Represents a Report resource.",
+            "id": "Report",
+            "properties": {
+                "accountId": {
+                    "annotations": {
+                        "required": [
+                            "dfareporting.reports.update"
+                        ]
+                    },
+                    "description": "The account ID to which this report belongs.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "criteria": {
+                    "description": "The report criteria for a report of type \"STANDARD\".",
+                    "properties": {
+                        "activities": {
+                            "$ref": "Activities",
+                            "description": "Activity group."
+                        },
+                        "customRichMediaEvents": {
+                            "$ref": "CustomRichMediaEvents",
+                            "description": "Custom Rich Media Events group."
+                        },
+                        "dateRange": {
+                            "$ref": "DateRange",
+                            "description": "The date range for which this report should be run."
+                        },
+                        "dimensionFilters": {
+                            "description": "The list of filters on which dimensions are filtered. Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.",
+                            "items": {
+                                "$ref": "DimensionValue"
+                            },
+                            "type": "array"
+                        },
+                        "dimensions": {
+                            "description": "The list of standard dimensions the report should include.",
+                            "items": {
+                                "$ref": "SortedDimension"
+                            },
+                            "type": "array"
+                        },
+                        "metricNames": {
+                            "description": "The list of names of metrics the report should include.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        }
+                    },
+                    "type": "object"
+                },
+                "crossDimensionReachCriteria": {
+                    "description": "The report criteria for a report of type \"CROSS_DIMENSION_REACH\".",
+                    "properties": {
+                        "breakdown": {
+                            "description": "The list of dimensions the report should include.",
+                            "items": {
+                                "$ref": "SortedDimension"
+                            },
+                            "type": "array"
+                        },
+                        "dateRange": {
+                            "$ref": "DateRange",
+                            "description": "The date range this report should be run for."
+                        },
+                        "dimension": {
+                            "description": "The dimension option.",
+                            "enum": [
+                                "ADVERTISER",
+                                "CAMPAIGN",
+                                "SITE_BY_ADVERTISER",
+                                "SITE_BY_CAMPAIGN"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "type": "string"
+                        },
+                        "dimensionFilters": {
+                            "description": "The list of filters on which dimensions are filtered.",
+                            "items": {
+                                "$ref": "DimensionValue"
+                            },
+                            "type": "array"
+                        },
+                        "metricNames": {
+                            "description": "The list of names of metrics the report should include.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        },
+                        "overlapMetricNames": {
+                            "description": "The list of names of overlap metrics the report should include.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        },
+                        "pivoted": {
+                            "description": "Whether the report is pivoted or not. Defaults to true.",
+                            "type": "boolean"
+                        }
+                    },
+                    "type": "object"
+                },
+                "delivery": {
+                    "description": "The report's email delivery settings.",
+                    "properties": {
+                        "emailOwner": {
+                            "description": "Whether the report should be emailed to the report owner.",
+                            "type": "boolean"
+                        },
+                        "emailOwnerDeliveryType": {
+                            "description": "The type of delivery for the owner to receive, if enabled.",
+                            "enum": [
+                                "LINK",
+                                "ATTACHMENT"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "type": "string"
+                        },
+                        "message": {
+                            "description": "The message to be sent with each email.",
+                            "type": "string"
+                        },
+                        "recipients": {
+                            "description": "The list of recipients to which to email the report.",
+                            "items": {
+                                "$ref": "Recipient"
+                            },
+                            "type": "array"
+                        }
+                    },
+                    "type": "object"
+                },
+                "etag": {
+                    "description": "The eTag of this response for caching purposes.",
+                    "type": "string"
+                },
+                "fileName": {
+                    "description": "The filename used when generating report files for this report.",
+                    "type": "string"
+                },
+                "floodlightCriteria": {
+                    "description": "The report criteria for a report of type \"FLOODLIGHT\".",
+                    "properties": {
+                        "customRichMediaEvents": {
+                            "description": "The list of custom rich media events to include.",
+                            "items": {
+                                "$ref": "DimensionValue"
+                            },
+                            "type": "array"
+                        },
+                        "dateRange": {
+                            "$ref": "DateRange",
+                            "description": "The date range this report should be run for."
+                        },
+                        "dimensionFilters": {
+                            "description": "The list of filters on which dimensions are filtered. Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.",
+                            "items": {
+                                "$ref": "DimensionValue"
+                            },
+                            "type": "array"
+                        },
+                        "dimensions": {
+                            "description": "The list of dimensions the report should include.",
+                            "items": {
+                                "$ref": "SortedDimension"
+                            },
+                            "type": "array"
+                        },
+                        "floodlightConfigId": {
+                            "$ref": "DimensionValue",
+                            "description": "The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'."
+                        },
+                        "metricNames": {
+                            "description": "The list of names of metrics the report should include.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        },
+                        "reportProperties": {
+                            "description": "The properties of the report.",
+                            "properties": {
+                                "includeAttributedIPConversions": {
+                                    "description": "Include conversions that have no cookie, but do have an exposure path.",
+                                    "type": "boolean"
+                                },
+                                "includeUnattributedCookieConversions": {
+                                    "description": "Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.",
+                                    "type": "boolean"
+                                },
+                                "includeUnattributedIPConversions": {
+                                    "description": "Include conversions that have no associated cookies and no exposures. It\u2019s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.",
+                                    "type": "boolean"
+                                }
+                            },
+                            "type": "object"
+                        }
+                    },
+                    "type": "object"
+                },
+                "format": {
+                    "description": "The output format of the report. If not specified, default format is \"CSV\". Note that the actual format in the completed report file might differ if for instance the report's size exceeds the format's capabilities. \"CSV\" will then be the fallback format.",
+                    "enum": [
+                        "CSV",
+                        "EXCEL"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "id": {
+                    "annotations": {
+                        "required": [
+                            "dfareporting.reports.update"
+                        ]
+                    },
+                    "description": "The unique ID identifying this report resource.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#report.",
+                    "type": "string"
+                },
+                "lastModifiedTime": {
+                    "annotations": {
+                        "required": [
+                            "dfareporting.reports.update"
+                        ]
+                    },
+                    "description": "The timestamp (in milliseconds since epoch) of when this report was last modified.",
+                    "format": "uint64",
+                    "type": "string"
+                },
+                "name": {
+                    "annotations": {
+                        "required": [
+                            "dfareporting.reports.insert",
+                            "dfareporting.reports.update"
+                        ]
+                    },
+                    "description": "The name of the report.",
+                    "type": "string"
+                },
+                "ownerProfileId": {
+                    "annotations": {
+                        "required": [
+                            "dfareporting.reports.update"
+                        ]
+                    },
+                    "description": "The user profile id of the owner of this report.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "pathToConversionCriteria": {
+                    "description": "The report criteria for a report of type \"PATH_TO_CONVERSION\".",
+                    "properties": {
+                        "activityFilters": {
+                            "description": "The list of 'dfa:activity' values to filter on.",
+                            "items": {
+                                "$ref": "DimensionValue"
+                            },
+                            "type": "array"
+                        },
+                        "conversionDimensions": {
+                            "description": "The list of conversion dimensions the report should include.",
+                            "items": {
+                                "$ref": "SortedDimension"
+                            },
+                            "type": "array"
+                        },
+                        "customFloodlightVariables": {
+                            "description": "The list of custom floodlight variables the report should include.",
+                            "items": {
+                                "$ref": "SortedDimension"
+                            },
+                            "type": "array"
+                        },
+                        "customRichMediaEvents": {
+                            "description": "The list of custom rich media events to include.",
+                            "items": {
+                                "$ref": "DimensionValue"
+                            },
+                            "type": "array"
+                        },
+                        "dateRange": {
+                            "$ref": "DateRange",
+                            "description": "The date range this report should be run for."
+                        },
+                        "floodlightConfigId": {
+                            "$ref": "DimensionValue",
+                            "description": "The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'."
+                        },
+                        "metricNames": {
+                            "description": "The list of names of metrics the report should include.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        },
+                        "perInteractionDimensions": {
+                            "description": "The list of per interaction dimensions the report should include.",
+                            "items": {
+                                "$ref": "SortedDimension"
+                            },
+                            "type": "array"
+                        },
+                        "reportProperties": {
+                            "description": "The properties of the report.",
+                            "properties": {
+                                "clicksLookbackWindow": {
+                                    "description": "CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.",
+                                    "format": "int32",
+                                    "type": "integer"
+                                },
+                                "impressionsLookbackWindow": {
+                                    "description": "CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.",
+                                    "format": "int32",
+                                    "type": "integer"
+                                },
+                                "includeAttributedIPConversions": {
+                                    "description": "Deprecated: has no effect.",
+                                    "type": "boolean"
+                                },
+                                "includeUnattributedCookieConversions": {
+                                    "description": "Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.",
+                                    "type": "boolean"
+                                },
+                                "includeUnattributedIPConversions": {
+                                    "description": "Include conversions that have no associated cookies and no exposures. It\u2019s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.",
+                                    "type": "boolean"
+                                },
+                                "maximumClickInteractions": {
+                                    "description": "The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.",
+                                    "format": "int32",
+                                    "type": "integer"
+                                },
+                                "maximumImpressionInteractions": {
+                                    "description": "The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.",
+                                    "format": "int32",
+                                    "type": "integer"
+                                },
+                                "maximumInteractionGap": {
+                                    "description": "The maximum amount of time that can take place between interactions (clicks or impressions) by the same user. Valid values: 1-90.",
+                                    "format": "int32",
+                                    "type": "integer"
+                                },
+                                "pivotOnInteractionPath": {
+                                    "description": "Enable pivoting on interaction path.",
+                                    "type": "boolean"
+                                }
+                            },
+                            "type": "object"
+                        }
+                    },
+                    "type": "object"
+                },
+                "reachCriteria": {
+                    "description": "The report criteria for a report of type \"REACH\".",
+                    "properties": {
+                        "activities": {
+                            "$ref": "Activities",
+                            "description": "Activity group."
+                        },
+                        "customRichMediaEvents": {
+                            "$ref": "CustomRichMediaEvents",
+                            "description": "Custom Rich Media Events group."
+                        },
+                        "dateRange": {
+                            "$ref": "DateRange",
+                            "description": "The date range this report should be run for."
+                        },
+                        "dimensionFilters": {
+                            "description": "The list of filters on which dimensions are filtered. Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.",
+                            "items": {
+                                "$ref": "DimensionValue"
+                            },
+                            "type": "array"
+                        },
+                        "dimensions": {
+                            "description": "The list of dimensions the report should include.",
+                            "items": {
+                                "$ref": "SortedDimension"
+                            },
+                            "type": "array"
+                        },
+                        "enableAllDimensionCombinations": {
+                            "description": "Whether to enable all reach dimension combinations in the report. Defaults to false. If enabled, the date range of the report should be within the last 42 days.",
+                            "type": "boolean"
+                        },
+                        "metricNames": {
+                            "description": "The list of names of metrics the report should include.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        },
+                        "reachByFrequencyMetricNames": {
+                            "description": "The list of names of Reach By Frequency metrics the report should include.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        }
+                    },
+                    "type": "object"
+                },
+                "schedule": {
+                    "description": "The report's schedule. Can only be set if the report's 'dateRange' is a relative date range and the relative date range is not \"TODAY\".",
+                    "properties": {
+                        "active": {
+                            "annotations": {
+                                "required": [
+                                    "dfareporting.reports.insert",
+                                    "dfareporting.reports.update"
+                                ]
+                            },
+                            "description": "Whether the schedule is active or not. Must be set to either true or false.",
+                            "type": "boolean"
+                        },
+                        "every": {
+                            "description": "Defines every how many days, weeks or months the report should be run. Needs to be set when \"repeats\" is either \"DAILY\", \"WEEKLY\" or \"MONTHLY\".",
+                            "format": "int32",
+                            "type": "integer"
+                        },
+                        "expirationDate": {
+                            "format": "date",
+                            "type": "string"
+                        },
+                        "repeats": {
+                            "annotations": {
+                                "required": [
+                                    "dfareporting.reports.insert",
+                                    "dfareporting.reports.update"
+                                ]
+                            },
+                            "description": "The interval for which the report is repeated. Note: - \"DAILY\" also requires field \"every\" to be set. - \"WEEKLY\" also requires fields \"every\" and \"repeatsOnWeekDays\" to be set. - \"MONTHLY\" also requires fields \"every\" and \"runsOnDayOfMonth\" to be set. ",
+                            "type": "string"
+                        },
+                        "repeatsOnWeekDays": {
+                            "description": "List of week days \"WEEKLY\" on which scheduled reports should run.",
+                            "items": {
+                                "enum": [
+                                    "SUNDAY",
+                                    "MONDAY",
+                                    "TUESDAY",
+                                    "WEDNESDAY",
+                                    "THURSDAY",
+                                    "FRIDAY",
+                                    "SATURDAY"
+                                ],
+                                "enumDescriptions": [
+                                    "",
+                                    "",
+                                    "",
+                                    "",
+                                    "",
+                                    "",
+                                    ""
+                                ],
+                                "type": "string"
+                            },
+                            "type": "array"
+                        },
+                        "runsOnDayOfMonth": {
+                            "description": "Enum to define for \"MONTHLY\" scheduled reports whether reports should be repeated on the same day of the month as \"startDate\" or the same day of the week of the month. Example: If 'startDate' is Monday, April 2nd 2012 (2012-04-02), \"DAY_OF_MONTH\" would run subsequent reports on the 2nd of every Month, and \"WEEK_OF_MONTH\" would run subsequent reports on the first Monday of the month.",
+                            "enum": [
+                                "DAY_OF_MONTH",
+                                "WEEK_OF_MONTH"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "type": "string"
+                        },
+                        "startDate": {
+                            "format": "date",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "subAccountId": {
+                    "description": "The subaccount ID to which this report belongs if applicable.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "type": {
+                    "annotations": {
+                        "required": [
+                            "dfareporting.reports.insert",
+                            "dfareporting.reports.update"
+                        ]
+                    },
+                    "description": "The type of the report.",
+                    "enum": [
+                        "STANDARD",
+                        "REACH",
+                        "PATH_TO_CONVERSION",
+                        "CROSS_DIMENSION_REACH",
+                        "FLOODLIGHT"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReportCompatibleFields": {
+            "description": "Represents fields that are compatible to be selected for a report of type \"STANDARD\".",
+            "id": "ReportCompatibleFields",
+            "properties": {
+                "dimensionFilters": {
+                    "description": "Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "dimensions": {
+                    "description": "Dimensions which are compatible to be selected in the \"dimensions\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#reportCompatibleFields.",
+                    "type": "string"
+                },
+                "metrics": {
+                    "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                },
+                "pivotedActivityMetrics": {
+                    "description": "Metrics which are compatible to be selected as activity metrics to pivot on in the \"activities\" section of the report.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ReportList": {
+            "description": "Represents the list of reports.",
+            "id": "ReportList",
+            "properties": {
+                "etag": {
+                    "description": "The eTag of this response for caching purposes.",
+                    "type": "string"
+                },
+                "items": {
+                    "description": "The reports returned in this response.",
+                    "items": {
+                        "$ref": "Report"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of list this is, in this case dfareporting#reportList.",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Continuation token used to page through reports. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReportsConfiguration": {
+            "description": "Reporting Configuration",
+            "id": "ReportsConfiguration",
+            "properties": {
+                "exposureToConversionEnabled": {
+                    "description": "Whether the exposure to conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.",
+                    "type": "boolean"
+                },
+                "lookbackConfiguration": {
+                    "$ref": "LookbackConfiguration",
+                    "description": "Default lookback windows for new advertisers in this account."
+                },
+                "reportGenerationTimeZoneId": {
+                    "description": "Report generation time zone ID of this account. This is a required field that can only be changed by a superuser. Acceptable values are: - \"1\" for \"America/New_York\" - \"2\" for \"Europe/London\" - \"3\" for \"Europe/Paris\" - \"4\" for \"Africa/Johannesburg\" - \"5\" for \"Asia/Jerusalem\" - \"6\" for \"Asia/Shanghai\" - \"7\" for \"Asia/Hong_Kong\" - \"8\" for \"Asia/Tokyo\" - \"9\" for \"Australia/Sydney\" - \"10\" for \"Asia/Dubai\" - \"11\" for \"America/Los_Angeles\" - \"12\" for \"Pacific/Auckland\" - \"13\" for \"America/Sao_Paulo\" - \"16\" for \"America/Asuncion\" - \"17\" for \"America/Chicago\" - \"18\" for \"America/Denver\" - \"19\" for \"America/St_Johns\" - \"20\" for \"Asia/Dhaka\" - \"21\" for \"Asia/Jakarta\" - \"22\" for \"Asia/Kabul\" - \"23\" for \"Asia/Karachi\" - \"24\" for \"Asia/Calcutta\" - \"25\" for \"Asia/Pyongyang\" - \"26\" for \"Asia/Rangoon\" - \"27\" for \"Atlantic/Cape_Verde\" - \"28\" for \"Atlantic/South_Georgia\" - \"29\" for \"Australia/Adelaide\" - \"30\" for \"Australia/Lord_Howe\" - \"31\" for \"Europe/Moscow\" - \"32\" for \"Pacific/Kiritimati\" - \"35\" for \"Pacific/Norfolk\" - \"36\" for \"Pacific/Tongatapu\" ",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RichMediaExitOverride": {
+            "description": "Rich Media Exit Override.",
+            "id": "RichMediaExitOverride",
+            "properties": {
+                "clickThroughUrl": {
+                    "$ref": "ClickThroughUrl",
+                    "description": "Click-through URL of this rich media exit override. Applicable if the enabled field is set to true."
+                },
+                "enabled": {
+                    "description": "Whether to use the clickThroughUrl. If false, the creative-level exit will be used.",
+                    "type": "boolean"
+                },
+                "exitId": {
+                    "description": "ID for the override to refer to a specific exit in the creative.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Rule": {
+            "description": "A rule associates an asset with a targeting template for asset-level targeting. Applicable to INSTREAM_VIDEO creatives.",
+            "id": "Rule",
+            "properties": {
+                "assetId": {
+                    "description": "A creativeAssets[].id. This should refer to one of the parent assets in this creative. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "A user-friendly name for this rule. This is a required field.",
+                    "type": "string"
+                },
+                "targetingTemplateId": {
+                    "description": "A targeting template ID. The targeting from the targeting template will be used to determine whether this asset should be served. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Site": {
+            "description": "Contains properties of a site.",
+            "id": "Site",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this site. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "approved": {
+                    "description": "Whether this site is approved.",
+                    "type": "boolean"
+                },
+                "directorySiteId": {
+                    "description": "Directory site associated with this site. This is a required field that is read-only after insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "directorySiteIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the directory site. This is a read-only, auto-generated field."
+                },
+                "id": {
+                    "description": "ID of this site. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this site. This is a read-only, auto-generated field."
+                },
+                "keyName": {
+                    "description": "Key name of this site. This is a read-only, auto-generated field.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#site\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this site.This is a required field. Must be less than 128 characters long. If this site is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this site is a top-level site, and the name must be unique among top-level sites of the same account.",
+                    "type": "string"
+                },
+                "siteContacts": {
+                    "description": "Site contacts.",
+                    "items": {
+                        "$ref": "SiteContact"
+                    },
+                    "type": "array"
+                },
+                "siteSettings": {
+                    "$ref": "SiteSettings",
+                    "description": "Site-wide settings."
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this site. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "videoSettings": {
+                    "$ref": "SiteVideoSettings",
+                    "description": "Default video settings for new placements created under this site. This value will be used to populate the placements.videoSettings field, when no value is specified for the new placement."
+                }
+            },
+            "type": "object"
+        },
+        "SiteCompanionSetting": {
+            "description": "Companion Settings",
+            "id": "SiteCompanionSetting",
+            "properties": {
+                "companionsDisabled": {
+                    "description": "Whether companions are disabled for this site template.",
+                    "type": "boolean"
+                },
+                "enabledSizes": {
+                    "description": "Allowlist of companion sizes to be served via this site template. Set this list to null or empty to serve all companion sizes.",
+                    "items": {
+                        "$ref": "Size"
+                    },
+                    "type": "array"
+                },
+                "imageOnly": {
+                    "description": "Whether to serve only static images as companions.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#siteCompanionSetting\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SiteContact": {
+            "description": "Site Contact",
+            "id": "SiteContact",
+            "properties": {
+                "address": {
+                    "description": "Address of this site contact.",
+                    "type": "string"
+                },
+                "contactType": {
+                    "description": "Site contact type.",
+                    "enum": [
+                        "SALES_PERSON",
+                        "TRAFFICKER"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "email": {
+                    "description": "Email address of this site contact. This is a required field.",
+                    "type": "string"
+                },
+                "firstName": {
+                    "description": "First name of this site contact.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this site contact. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "lastName": {
+                    "description": "Last name of this site contact.",
+                    "type": "string"
+                },
+                "phone": {
+                    "description": "Primary phone number of this site contact.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Title or designation of this site contact.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SiteSettings": {
+            "description": "Site Settings",
+            "id": "SiteSettings",
+            "properties": {
+                "activeViewOptOut": {
+                    "description": "Whether active view creatives are disabled for this site.",
+                    "type": "boolean"
+                },
+                "adBlockingOptOut": {
+                    "description": "Whether this site opts out of ad blocking. When true, ad blocking is disabled for all placements under the site, regardless of the individual placement settings. When false, the campaign and placement settings take effect.",
+                    "type": "boolean"
+                },
+                "disableNewCookie": {
+                    "description": "Whether new cookies are disabled for this site.",
+                    "type": "boolean"
+                },
+                "tagSetting": {
+                    "$ref": "TagSetting",
+                    "description": "Configuration settings for dynamic and image floodlight tags."
+                },
+                "videoActiveViewOptOutTemplate": {
+                    "description": "Whether Verification and ActiveView for in-stream video creatives are disabled by default for new placements created under this site. This value will be used to populate the placement.videoActiveViewOptOut field, when no value is specified for the new placement.",
+                    "type": "boolean"
+                },
+                "vpaidAdapterChoiceTemplate": {
+                    "description": "Default VPAID adapter setting for new placements created under this site. This value will be used to populate the placements.vpaidAdapterChoice field, when no value is specified for the new placement. Controls which VPAID format the measurement adapter will use for in-stream video creatives assigned to the placement. The publisher's specifications will typically determine this setting. For VPAID creatives, the adapter format will match the VPAID format (HTML5 VPAID creatives use the HTML5 adapter). *Note:* Flash is no longer supported. This field now defaults to HTML5 when the following values are provided: FLASH, BOTH.",
+                    "enum": [
+                        "DEFAULT",
+                        "FLASH",
+                        "HTML5",
+                        "BOTH"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SiteSkippableSetting": {
+            "description": "Skippable Settings",
+            "id": "SiteSkippableSetting",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#siteSkippableSetting\".",
+                    "type": "string"
+                },
+                "progressOffset": {
+                    "$ref": "VideoOffset",
+                    "description": "Amount of time to play videos served to this site template before counting a view. Applicable when skippable is true."
+                },
+                "skipOffset": {
+                    "$ref": "VideoOffset",
+                    "description": "Amount of time to play videos served to this site before the skip button should appear. Applicable when skippable is true."
+                },
+                "skippable": {
+                    "description": "Whether the user can skip creatives served to this site. This will act as default for new placements created under this site.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "SiteTranscodeSetting": {
+            "description": "Transcode Settings",
+            "id": "SiteTranscodeSetting",
+            "properties": {
+                "enabledVideoFormats": {
+                    "description": "Allowlist of video formats to be served to this site template. Set this list to null or empty to serve all video formats.",
+                    "items": {
+                        "format": "int32",
+                        "type": "integer"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#siteTranscodeSetting\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SiteVideoSettings": {
+            "description": "Video Settings",
+            "id": "SiteVideoSettings",
+            "properties": {
+                "companionSettings": {
+                    "$ref": "SiteCompanionSetting",
+                    "description": "Settings for the companion creatives of video creatives served to this site."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#siteVideoSettings\".",
+                    "type": "string"
+                },
+                "orientation": {
+                    "description": "Orientation of a site template used for video. This will act as default for new placements created under this site.",
+                    "enum": [
+                        "ANY",
+                        "LANDSCAPE",
+                        "PORTRAIT"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "skippableSettings": {
+                    "$ref": "SiteSkippableSetting",
+                    "description": "Settings for the skippability of video creatives served to this site. This will act as default for new placements created under this site."
+                },
+                "transcodeSettings": {
+                    "$ref": "SiteTranscodeSetting",
+                    "description": "Settings for the transcodes of video creatives served to this site. This will act as default for new placements created under this site."
+                }
+            },
+            "type": "object"
+        },
+        "SitesListResponse": {
+            "description": "Site List Response",
+            "id": "SitesListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#sitesListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "sites": {
+                    "description": "Site collection.",
+                    "items": {
+                        "$ref": "Site"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Size": {
+            "description": "Represents the dimensions of ads, placements, creatives, or creative assets.",
+            "id": "Size",
+            "properties": {
+                "height": {
+                    "description": "Height of this size. Acceptable values are 0 to 32767, inclusive.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "iab": {
+                    "description": "IAB standard size. This is a read-only, auto-generated field.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "ID of this size. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#size\".",
+                    "type": "string"
+                },
+                "width": {
+                    "description": "Width of this size. Acceptable values are 0 to 32767, inclusive.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "SizesListResponse": {
+            "description": "Size List Response",
+            "id": "SizesListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#sizesListResponse\".",
+                    "type": "string"
+                },
+                "sizes": {
+                    "description": "Size collection.",
+                    "items": {
+                        "$ref": "Size"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "SkippableSetting": {
+            "description": "Skippable Settings",
+            "id": "SkippableSetting",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#skippableSetting\".",
+                    "type": "string"
+                },
+                "progressOffset": {
+                    "$ref": "VideoOffset",
+                    "description": "Amount of time to play videos served to this placement before counting a view. Applicable when skippable is true."
+                },
+                "skipOffset": {
+                    "$ref": "VideoOffset",
+                    "description": "Amount of time to play videos served to this placement before the skip button should appear. Applicable when skippable is true."
+                },
+                "skippable": {
+                    "description": "Whether the user can skip creatives served to this placement.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "SortedDimension": {
+            "description": "Represents a sorted dimension.",
+            "id": "SortedDimension",
+            "properties": {
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#sortedDimension.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The name of the dimension.",
+                    "type": "string"
                 },
                 "sortOrder": {
-                  "location": "query",
-                  "description": "Order of sorted results.",
-                  "default": "DESCENDING",
-                  "enum": [
-                    "ASCENDING",
-                    "DESCENDING"
-                  ],
-                  "type": "string",
-                  "enumDescriptions": [
-                    "",
-                    ""
-                  ]
-                },
-                "pageToken": {
-                  "location": "query",
-                  "description": "The value of the nextToken from the previous result page.",
-                  "type": "string"
-                },
-                "sortField": {
-                  "default": "LAST_MODIFIED_TIME",
-                  "location": "query",
-                  "enumDescriptions": [
-                    "",
-                    ""
-                  ],
-                  "enum": [
-                    "ID",
-                    "LAST_MODIFIED_TIME"
-                  ],
-                  "type": "string",
-                  "description": "The field by which to sort the list."
-                },
-                "maxResults": {
-                  "minimum": "0",
-                  "type": "integer",
-                  "location": "query",
-                  "default": "10",
-                  "maximum": "10",
-                  "description": "Maximum number of results to return.",
-                  "format": "int32"
+                    "description": "An optional sort order for the dimension column.",
+                    "enum": [
+                        "ASCENDING",
+                        "DESCENDING"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
                 }
-              },
-              "httpMethod": "GET",
-              "flatPath": "userprofiles/{profileId}/reports/{reportId}/files",
-              "description": "Lists files for a report.",
-              "id": "dfareporting.reports.files.list",
-              "scopes": [
-                "https://www.googleapis.com/auth/dfareporting"
-              ],
-              "path": "userprofiles/{profileId}/reports/{reportId}/files",
-              "parameterOrder": [
-                "profileId",
-                "reportId"
-              ]
-            }
-          }
+            },
+            "type": "object"
+        },
+        "Subaccount": {
+            "description": "Contains properties of a Campaign Manager subaccount.",
+            "id": "Subaccount",
+            "properties": {
+                "accountId": {
+                    "description": "ID of the account that contains this subaccount. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "availablePermissionIds": {
+                    "description": "IDs of the available user role permissions for this subaccount.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "id": {
+                    "description": "ID of this subaccount. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#subaccount\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this subaccount. This is a required field. Must be less than 128 characters long and be unique among subaccounts of the same account.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SubaccountsListResponse": {
+            "description": "Subaccount List Response",
+            "id": "SubaccountsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#subaccountsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "subaccounts": {
+                    "description": "Subaccount collection.",
+                    "items": {
+                        "$ref": "Subaccount"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "TagData": {
+            "description": "Placement Tag Data",
+            "id": "TagData",
+            "properties": {
+                "adId": {
+                    "description": "Ad associated with this placement tag. Applicable only when format is PLACEMENT_TAG_TRACKING.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "clickTag": {
+                    "description": "Tag string to record a click.",
+                    "type": "string"
+                },
+                "creativeId": {
+                    "description": "Creative associated with this placement tag. Applicable only when format is PLACEMENT_TAG_TRACKING.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "format": {
+                    "description": "TagData tag format of this tag.",
+                    "enum": [
+                        "PLACEMENT_TAG_STANDARD",
+                        "PLACEMENT_TAG_IFRAME_JAVASCRIPT",
+                        "PLACEMENT_TAG_IFRAME_ILAYER",
+                        "PLACEMENT_TAG_INTERNAL_REDIRECT",
+                        "PLACEMENT_TAG_JAVASCRIPT",
+                        "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT",
+                        "PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT",
+                        "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT",
+                        "PLACEMENT_TAG_CLICK_COMMANDS",
+                        "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH",
+                        "PLACEMENT_TAG_TRACKING",
+                        "PLACEMENT_TAG_TRACKING_IFRAME",
+                        "PLACEMENT_TAG_TRACKING_JAVASCRIPT",
+                        "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_3",
+                        "PLACEMENT_TAG_IFRAME_JAVASCRIPT_LEGACY",
+                        "PLACEMENT_TAG_JAVASCRIPT_LEGACY",
+                        "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT_LEGACY",
+                        "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT_LEGACY",
+                        "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_4"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "impressionTag": {
+                    "description": "Tag string for serving an ad.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TagSetting": {
+            "description": "Tag Settings",
+            "id": "TagSetting",
+            "properties": {
+                "additionalKeyValues": {
+                    "description": "Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field.",
+                    "type": "string"
+                },
+                "includeClickThroughUrls": {
+                    "description": "Whether static landing page URLs should be included in the tags. This setting applies only to placements.",
+                    "type": "boolean"
+                },
+                "includeClickTracking": {
+                    "description": "Whether click-tracking string should be included in the tags.",
+                    "type": "boolean"
+                },
+                "keywordOption": {
+                    "description": "Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.",
+                    "enum": [
+                        "PLACEHOLDER_WITH_LIST_OF_KEYWORDS",
+                        "IGNORE",
+                        "GENERATE_SEPARATE_TAG_FOR_EACH_KEYWORD"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TagSettings": {
+            "description": "Dynamic and Image Tag Settings.",
+            "id": "TagSettings",
+            "properties": {
+                "dynamicTagEnabled": {
+                    "description": "Whether dynamic floodlight tags are enabled.",
+                    "type": "boolean"
+                },
+                "imageTagEnabled": {
+                    "description": "Whether image tags are enabled.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "TargetWindow": {
+            "description": "Target Window.",
+            "id": "TargetWindow",
+            "properties": {
+                "customHtml": {
+                    "description": "User-entered value.",
+                    "type": "string"
+                },
+                "targetWindowOption": {
+                    "description": "Type of browser window for which the backup image of the flash creative can be displayed.",
+                    "enum": [
+                        "NEW_WINDOW",
+                        "CURRENT_WINDOW",
+                        "CUSTOM"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TargetableRemarketingList": {
+            "description": "Contains properties of a targetable remarketing list. Remarketing enables you to create lists of users who have performed specific actions on a site, then target ads to members of those lists. This resource is a read-only view of a remarketing list to be used to faciliate targeting ads to specific lists. Remarketing lists that are owned by your advertisers and those that are shared to your advertisers or account are accessible via this resource. To manage remarketing lists that are owned by your advertisers, use the RemarketingLists resource.",
+            "id": "TargetableRemarketingList",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "active": {
+                    "description": "Whether this targetable remarketing list is active.",
+                    "type": "boolean"
+                },
+                "advertiserId": {
+                    "description": "Dimension value for the advertiser ID that owns this targetable remarketing list.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser."
+                },
+                "description": {
+                    "description": "Targetable remarketing list description.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Targetable remarketing list ID.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#targetableRemarketingList\".",
+                    "type": "string"
+                },
+                "lifeSpan": {
+                    "description": "Number of days that a user should remain in the targetable remarketing list without an impression.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "listSize": {
+                    "description": "Number of users currently in the list. This is a read-only field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "listSource": {
+                    "description": "Product from which this targetable remarketing list was originated.",
+                    "enum": [
+                        "REMARKETING_LIST_SOURCE_OTHER",
+                        "REMARKETING_LIST_SOURCE_ADX",
+                        "REMARKETING_LIST_SOURCE_DFP",
+                        "REMARKETING_LIST_SOURCE_XFP",
+                        "REMARKETING_LIST_SOURCE_DFA",
+                        "REMARKETING_LIST_SOURCE_GA",
+                        "REMARKETING_LIST_SOURCE_YOUTUBE",
+                        "REMARKETING_LIST_SOURCE_DBM",
+                        "REMARKETING_LIST_SOURCE_GPLUS",
+                        "REMARKETING_LIST_SOURCE_DMP",
+                        "REMARKETING_LIST_SOURCE_PLAY_STORE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of the targetable remarketing list. Is no greater than 128 characters long.",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TargetableRemarketingListsListResponse": {
+            "description": "Targetable remarketing list response",
+            "id": "TargetableRemarketingListsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#targetableRemarketingListsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "targetableRemarketingLists": {
+                    "description": "Targetable remarketing list collection.",
+                    "items": {
+                        "$ref": "TargetableRemarketingList"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "TargetingTemplate": {
+            "description": "Contains properties of a targeting template. A targeting template encapsulates targeting information which can be reused across multiple ads.",
+            "id": "TargetingTemplate",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this targeting template. This field, if left unset, will be auto-generated on insert and is read-only after insert.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this targeting template. This is a required field on insert and is read-only after insert.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "dayPartTargeting": {
+                    "$ref": "DayPartTargeting",
+                    "description": "Time and day targeting criteria."
+                },
+                "geoTargeting": {
+                    "$ref": "GeoTargeting",
+                    "description": "Geographical targeting criteria."
+                },
+                "id": {
+                    "description": "ID of this targeting template. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "keyValueTargetingExpression": {
+                    "$ref": "KeyValueTargetingExpression",
+                    "description": "Key-value targeting criteria."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#targetingTemplate\".",
+                    "type": "string"
+                },
+                "languageTargeting": {
+                    "$ref": "LanguageTargeting",
+                    "description": "Language targeting criteria."
+                },
+                "listTargetingExpression": {
+                    "$ref": "ListTargetingExpression",
+                    "description": "Remarketing list targeting criteria."
+                },
+                "name": {
+                    "description": "Name of this targeting template. This field is required. It must be less than 256 characters long and unique within an advertiser.",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this targeting template. This field, if left unset, will be auto-generated on insert and is read-only after insert.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "technologyTargeting": {
+                    "$ref": "TechnologyTargeting",
+                    "description": "Technology platform targeting criteria."
+                }
+            },
+            "type": "object"
+        },
+        "TargetingTemplatesListResponse": {
+            "description": "Targeting Template List Response",
+            "id": "TargetingTemplatesListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#targetingTemplatesListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "targetingTemplates": {
+                    "description": "Targeting template collection.",
+                    "items": {
+                        "$ref": "TargetingTemplate"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "TechnologyTargeting": {
+            "description": "Technology Targeting.",
+            "id": "TechnologyTargeting",
+            "properties": {
+                "browsers": {
+                    "description": "Browsers that this ad targets. For each browser either set browserVersionId or dartId along with the version numbers. If both are specified, only browserVersionId will be used. The other fields are populated automatically when the ad is inserted or updated.",
+                    "items": {
+                        "$ref": "Browser"
+                    },
+                    "type": "array"
+                },
+                "connectionTypes": {
+                    "description": "Connection types that this ad targets. For each connection type only id is required. The other fields are populated automatically when the ad is inserted or updated.",
+                    "items": {
+                        "$ref": "ConnectionType"
+                    },
+                    "type": "array"
+                },
+                "mobileCarriers": {
+                    "description": "Mobile carriers that this ad targets. For each mobile carrier only id is required, and the other fields are populated automatically when the ad is inserted or updated. If targeting a mobile carrier, do not set targeting for any zip codes.",
+                    "items": {
+                        "$ref": "MobileCarrier"
+                    },
+                    "type": "array"
+                },
+                "operatingSystemVersions": {
+                    "description": "Operating system versions that this ad targets. To target all versions, use operatingSystems. For each operating system version, only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system version, do not set targeting for the corresponding operating system in operatingSystems.",
+                    "items": {
+                        "$ref": "OperatingSystemVersion"
+                    },
+                    "type": "array"
+                },
+                "operatingSystems": {
+                    "description": "Operating systems that this ad targets. To target specific versions, use operatingSystemVersions. For each operating system only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system, do not set targeting for operating system versions for the same operating system.",
+                    "items": {
+                        "$ref": "OperatingSystem"
+                    },
+                    "type": "array"
+                },
+                "platformTypes": {
+                    "description": "Platform types that this ad targets. For example, desktop, mobile, or tablet. For each platform type, only id is required, and the other fields are populated automatically when the ad is inserted or updated.",
+                    "items": {
+                        "$ref": "PlatformType"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ThirdPartyAuthenticationToken": {
+            "description": "Third Party Authentication Token",
+            "id": "ThirdPartyAuthenticationToken",
+            "properties": {
+                "name": {
+                    "description": "Name of the third-party authentication token.",
+                    "type": "string"
+                },
+                "value": {
+                    "description": "Value of the third-party authentication token. This is a read-only, auto-generated field.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ThirdPartyTrackingUrl": {
+            "description": "Third-party Tracking URL.",
+            "id": "ThirdPartyTrackingUrl",
+            "properties": {
+                "thirdPartyUrlType": {
+                    "description": "Third-party URL type for in-stream video and in-stream audio creatives.",
+                    "enum": [
+                        "IMPRESSION",
+                        "CLICK_TRACKING",
+                        "VIDEO_START",
+                        "VIDEO_FIRST_QUARTILE",
+                        "VIDEO_MIDPOINT",
+                        "VIDEO_THIRD_QUARTILE",
+                        "VIDEO_COMPLETE",
+                        "VIDEO_MUTE",
+                        "VIDEO_PAUSE",
+                        "VIDEO_REWIND",
+                        "VIDEO_FULLSCREEN",
+                        "VIDEO_STOP",
+                        "VIDEO_CUSTOM",
+                        "SURVEY",
+                        "RICH_MEDIA_IMPRESSION",
+                        "RICH_MEDIA_RM_IMPRESSION",
+                        "RICH_MEDIA_BACKUP_IMPRESSION",
+                        "VIDEO_SKIP",
+                        "VIDEO_PROGRESS"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "url": {
+                    "description": "URL for the specified third-party URL type.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TranscodeSetting": {
+            "description": "Transcode Settings",
+            "id": "TranscodeSetting",
+            "properties": {
+                "enabledVideoFormats": {
+                    "description": "Allowlist of video formats to be served to this placement. Set this list to null or empty to serve all video formats.",
+                    "items": {
+                        "format": "int32",
+                        "type": "integer"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#transcodeSetting\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UniversalAdId": {
+            "description": "A Universal Ad ID as per the VAST 4.0 spec. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and VPAID.",
+            "id": "UniversalAdId",
+            "properties": {
+                "registry": {
+                    "description": "Registry used for the Ad ID value.",
+                    "enum": [
+                        "OTHER",
+                        "AD_ID.ORG",
+                        "CLEARCAST",
+                        "DCM"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "value": {
+                    "description": "ID value for this creative. Only alphanumeric characters and the following symbols are valid: \"_/\\-\". Maximum length is 64 characters. Read only when registry is DCM.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UserDefinedVariableConfiguration": {
+            "description": "User Defined Variable configuration.",
+            "id": "UserDefinedVariableConfiguration",
+            "properties": {
+                "dataType": {
+                    "description": "Data type for the variable. This is a required field.",
+                    "enum": [
+                        "STRING",
+                        "NUMBER"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "reportName": {
+                    "description": "User-friendly name for the variable which will appear in reports. This is a required field, must be less than 64 characters long, and cannot contain the following characters: \"\"<>\".",
+                    "type": "string"
+                },
+                "variableType": {
+                    "description": "Variable name in the tag. This is a required field.",
+                    "enum": [
+                        "U1",
+                        "U2",
+                        "U3",
+                        "U4",
+                        "U5",
+                        "U6",
+                        "U7",
+                        "U8",
+                        "U9",
+                        "U10",
+                        "U11",
+                        "U12",
+                        "U13",
+                        "U14",
+                        "U15",
+                        "U16",
+                        "U17",
+                        "U18",
+                        "U19",
+                        "U20",
+                        "U21",
+                        "U22",
+                        "U23",
+                        "U24",
+                        "U25",
+                        "U26",
+                        "U27",
+                        "U28",
+                        "U29",
+                        "U30",
+                        "U31",
+                        "U32",
+                        "U33",
+                        "U34",
+                        "U35",
+                        "U36",
+                        "U37",
+                        "U38",
+                        "U39",
+                        "U40",
+                        "U41",
+                        "U42",
+                        "U43",
+                        "U44",
+                        "U45",
+                        "U46",
+                        "U47",
+                        "U48",
+                        "U49",
+                        "U50",
+                        "U51",
+                        "U52",
+                        "U53",
+                        "U54",
+                        "U55",
+                        "U56",
+                        "U57",
+                        "U58",
+                        "U59",
+                        "U60",
+                        "U61",
+                        "U62",
+                        "U63",
+                        "U64",
+                        "U65",
+                        "U66",
+                        "U67",
+                        "U68",
+                        "U69",
+                        "U70",
+                        "U71",
+                        "U72",
+                        "U73",
+                        "U74",
+                        "U75",
+                        "U76",
+                        "U77",
+                        "U78",
+                        "U79",
+                        "U80",
+                        "U81",
+                        "U82",
+                        "U83",
+                        "U84",
+                        "U85",
+                        "U86",
+                        "U87",
+                        "U88",
+                        "U89",
+                        "U90",
+                        "U91",
+                        "U92",
+                        "U93",
+                        "U94",
+                        "U95",
+                        "U96",
+                        "U97",
+                        "U98",
+                        "U99",
+                        "U100"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UserProfile": {
+            "description": "A UserProfile resource lets you list all DFA user profiles that are associated with a Google user account. The profile_id needs to be specified in other API requests. ",
+            "id": "UserProfile",
+            "properties": {
+                "accountId": {
+                    "description": "The account ID to which this profile belongs.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "accountName": {
+                    "description": "The account name this profile belongs to.",
+                    "type": "string"
+                },
+                "etag": {
+                    "description": "Etag of this resource.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userProfile\".",
+                    "type": "string"
+                },
+                "profileId": {
+                    "description": "The unique ID of the user profile.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "subAccountId": {
+                    "description": "The sub account ID this profile belongs to if applicable.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "subAccountName": {
+                    "description": "The sub account name this profile belongs to if applicable.",
+                    "type": "string"
+                },
+                "userName": {
+                    "description": "The user name.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UserProfileList": {
+            "description": "Represents the list of user profiles.",
+            "id": "UserProfileList",
+            "properties": {
+                "etag": {
+                    "description": "Etag of this resource.",
+                    "type": "string"
+                },
+                "items": {
+                    "description": "The user profiles returned in this response.",
+                    "items": {
+                        "$ref": "UserProfile"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userProfileList\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UserRole": {
+            "description": "Contains properties of auser role, which is used to manage user access.",
+            "id": "UserRole",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this user role. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "defaultUserRole": {
+                    "description": "Whether this is a default user role. Default user roles are created by the system for the account/subaccount and cannot be modified or deleted. Each default user role comes with a basic set of preassigned permissions.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "ID of this user role. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRole\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this user role. This is a required field. Must be less than 256 characters long. If this user role is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this user role is a top-level user role, and the name must be unique among top-level user roles of the same account.",
+                    "type": "string"
+                },
+                "parentUserRoleId": {
+                    "description": "ID of the user role that this user role is based on or copied from. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "permissions": {
+                    "description": "List of permissions associated with this user role.",
+                    "items": {
+                        "$ref": "UserRolePermission"
+                    },
+                    "type": "array"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this user role. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UserRolePermission": {
+            "description": "Contains properties of a user role permission.",
+            "id": "UserRolePermission",
+            "properties": {
+                "availability": {
+                    "description": "Levels of availability for a user role permission.",
+                    "enum": [
+                        "NOT_AVAILABLE_BY_DEFAULT",
+                        "ACCOUNT_BY_DEFAULT",
+                        "SUBACCOUNT_AND_ACCOUNT_BY_DEFAULT",
+                        "ACCOUNT_ALWAYS",
+                        "SUBACCOUNT_AND_ACCOUNT_ALWAYS"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this user role permission.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolePermission\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this user role permission.",
+                    "type": "string"
+                },
+                "permissionGroupId": {
+                    "description": "ID of the permission group that this user role permission belongs to.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UserRolePermissionGroup": {
+            "description": "Represents a grouping of related user role permissions.",
+            "id": "UserRolePermissionGroup",
+            "properties": {
+                "id": {
+                    "description": "ID of this user role permission.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolePermissionGroup\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this user role permission group.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UserRolePermissionGroupsListResponse": {
+            "description": "User Role Permission Group List Response",
+            "id": "UserRolePermissionGroupsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolePermissionGroupsListResponse\".",
+                    "type": "string"
+                },
+                "userRolePermissionGroups": {
+                    "description": "User role permission group collection.",
+                    "items": {
+                        "$ref": "UserRolePermissionGroup"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "UserRolePermissionsListResponse": {
+            "description": "User Role Permission List Response",
+            "id": "UserRolePermissionsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolePermissionsListResponse\".",
+                    "type": "string"
+                },
+                "userRolePermissions": {
+                    "description": "User role permission collection.",
+                    "items": {
+                        "$ref": "UserRolePermission"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "UserRolesListResponse": {
+            "description": "User Role List Response",
+            "id": "UserRolesListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolesListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "userRoles": {
+                    "description": "User role collection.",
+                    "items": {
+                        "$ref": "UserRole"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "VideoFormat": {
+            "description": "Contains information about supported video formats.",
+            "id": "VideoFormat",
+            "properties": {
+                "fileType": {
+                    "description": "File type of the video format.",
+                    "enum": [
+                        "FLV",
+                        "THREEGPP",
+                        "MP4",
+                        "WEBM",
+                        "M3U8"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of the video format.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#videoFormat\".",
+                    "type": "string"
+                },
+                "resolution": {
+                    "$ref": "Size",
+                    "description": "The resolution of this video format."
+                },
+                "targetBitRate": {
+                    "description": "The target bit rate of this video format.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "VideoFormatsListResponse": {
+            "description": "Video Format List Response",
+            "id": "VideoFormatsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#videoFormatsListResponse\".",
+                    "type": "string"
+                },
+                "videoFormats": {
+                    "description": "Video format collection.",
+                    "items": {
+                        "$ref": "VideoFormat"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "VideoOffset": {
+            "description": "Video Offset",
+            "id": "VideoOffset",
+            "properties": {
+                "offsetPercentage": {
+                    "description": "Duration, as a percentage of video duration. Do not set when offsetSeconds is set. Acceptable values are 0 to 100, inclusive.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "offsetSeconds": {
+                    "description": "Duration, in seconds. Do not set when offsetPercentage is set. Acceptable values are 0 to 86399, inclusive.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "VideoSettings": {
+            "description": "Video Settings",
+            "id": "VideoSettings",
+            "properties": {
+                "companionSettings": {
+                    "$ref": "CompanionSetting",
+                    "description": "Settings for the companion creatives of video creatives served to this placement."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#videoSettings\".",
+                    "type": "string"
+                },
+                "orientation": {
+                    "description": "Orientation of a video placement. If this value is set, placement will return assets matching the specified orientation.",
+                    "enum": [
+                        "ANY",
+                        "LANDSCAPE",
+                        "PORTRAIT"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "skippableSettings": {
+                    "$ref": "SkippableSetting",
+                    "description": "Settings for the skippability of video creatives served to this placement. If this object is provided, the creative-level skippable settings will be overridden."
+                },
+                "transcodeSettings": {
+                    "$ref": "TranscodeSetting",
+                    "description": "Settings for the transcodes of video creatives served to this placement. If this object is provided, the creative-level transcode settings will be overridden."
+                }
+            },
+            "type": "object"
         }
-      },
-      "methods": {
-        "run": {
-          "parameters": {
-            "reportId": {
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "description": "The ID of the report.",
-              "required": true
-            },
-            "synchronous": {
-              "location": "query",
-              "description": "If set and true, tries to run the report synchronously.",
-              "default": "false",
-              "type": "boolean"
-            },
-            "profileId": {
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "format": "int64",
-              "description": "The Campaign Manager 360 user profile ID."
-            }
-          },
-          "httpMethod": "POST",
-          "path": "userprofiles/{profileId}/reports/{reportId}/run",
-          "parameterOrder": [
-            "profileId",
-            "reportId"
-          ],
-          "response": {
-            "$ref": "File"
-          },
-          "flatPath": "userprofiles/{profileId}/reports/{reportId}/run",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfareporting"
-          ],
-          "id": "dfareporting.reports.run",
-          "description": "Runs a report."
-        },
-        "patch": {
-          "flatPath": "userprofiles/{profileId}/reports/{reportId}",
-          "id": "dfareporting.reports.patch",
-          "parameterOrder": [
-            "profileId",
-            "reportId"
-          ],
-          "httpMethod": "PATCH",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfareporting"
-          ],
-          "path": "userprofiles/{profileId}/reports/{reportId}",
-          "request": {
-            "$ref": "Report"
-          },
-          "parameters": {
-            "reportId": {
-              "type": "string",
-              "location": "path",
-              "format": "int64",
-              "required": true,
-              "description": "The ID of the report."
-            },
-            "profileId": {
-              "type": "string",
-              "description": "The DFA user profile ID.",
-              "required": true,
-              "location": "path",
-              "format": "int64"
-            }
-          },
-          "response": {
-            "$ref": "Report"
-          },
-          "description": "Updates an existing report. This method supports patch semantics."
-        },
-        "list": {
-          "response": {
-            "$ref": "ReportList"
-          },
-          "id": "dfareporting.reports.list",
-          "path": "userprofiles/{profileId}/reports",
-          "description": "Retrieves list of reports.",
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/reports",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfareporting"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "maxResults": {
-              "location": "query",
-              "description": "Maximum number of results to return.",
-              "maximum": "10",
-              "minimum": "0",
-              "type": "integer",
-              "format": "int32",
-              "default": "10"
-            },
-            "sortOrder": {
-              "location": "query",
-              "default": "DESCENDING",
-              "type": "string",
-              "description": "Order of sorted results.",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "enumDescriptions": [
-                "Ascending order.",
-                "Descending order."
-              ]
-            },
-            "profileId": {
-              "description": "The Campaign Manager 360 user profile ID.",
-              "type": "string",
-              "required": true,
-              "format": "int64",
-              "location": "path"
-            },
-            "scope": {
-              "location": "query",
-              "default": "MINE",
-              "type": "string",
-              "enumDescriptions": [
-                "All reports in account.",
-                "My reports."
-              ],
-              "description": "The scope that defines which results are returned.",
-              "enum": [
-                "ALL",
-                "MINE"
-              ]
-            },
-            "pageToken": {
-              "location": "query",
-              "description": "The value of the nextToken from the previous result page.",
-              "type": "string"
-            },
-            "sortField": {
-              "enumDescriptions": [
-                "Sort by report ID.",
-                "Sort by 'lastModifiedTime' field.",
-                "Sort by name of reports."
-              ],
-              "default": "LAST_MODIFIED_TIME",
-              "description": "The field by which to sort the list.",
-              "type": "string",
-              "location": "query",
-              "enum": [
-                "ID",
-                "LAST_MODIFIED_TIME",
-                "NAME"
-              ]
-            }
-          }
-        },
-        "update": {
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "description": "The Campaign Manager 360 user profile ID.",
-              "required": true
-            },
-            "reportId": {
-              "description": "The ID of the report.",
-              "type": "string",
-              "format": "int64",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfareporting"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "reportId"
-          ],
-          "httpMethod": "PUT",
-          "request": {
-            "$ref": "Report"
-          },
-          "response": {
-            "$ref": "Report"
-          },
-          "description": "Updates a report.",
-          "flatPath": "userprofiles/{profileId}/reports/{reportId}",
-          "id": "dfareporting.reports.update",
-          "path": "userprofiles/{profileId}/reports/{reportId}"
-        },
-        "get": {
-          "response": {
-            "$ref": "Report"
-          },
-          "path": "userprofiles/{profileId}/reports/{reportId}",
-          "parameterOrder": [
-            "profileId",
-            "reportId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfareporting"
-          ],
-          "httpMethod": "GET",
-          "description": "Retrieves a report by its ID.",
-          "id": "dfareporting.reports.get",
-          "parameters": {
-            "reportId": {
-              "format": "int64",
-              "location": "path",
-              "description": "The ID of the report.",
-              "required": true,
-              "type": "string"
-            },
-            "profileId": {
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "description": "The Campaign Manager 360 user profile ID.",
-              "required": true
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/reports/{reportId}"
-        },
-        "delete": {
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "description": "The Campaign Manager 360 user profile ID."
-            },
-            "reportId": {
-              "description": "The ID of the report.",
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "format": "int64"
-            }
-          },
-          "id": "dfareporting.reports.delete",
-          "parameterOrder": [
-            "profileId",
-            "reportId"
-          ],
-          "description": "Deletes a report by its ID.",
-          "path": "userprofiles/{profileId}/reports/{reportId}",
-          "flatPath": "userprofiles/{profileId}/reports/{reportId}",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfareporting"
-          ],
-          "httpMethod": "DELETE"
-        },
-        "insert": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "description": "The Campaign Manager 360 user profile ID.",
-              "format": "int64"
-            }
-          },
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfareporting"
-          ],
-          "description": "Creates a report.",
-          "request": {
-            "$ref": "Report"
-          },
-          "flatPath": "userprofiles/{profileId}/reports",
-          "id": "dfareporting.reports.insert",
-          "path": "userprofiles/{profileId}/reports",
-          "response": {
-            "$ref": "Report"
-          }
-        }
-      }
     },
-    "postalCodes": {
-      "methods": {
-        "list": {
-          "id": "dfareporting.postalCodes.list",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/postalCodes",
-          "response": {
-            "$ref": "PostalCodesListResponse"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Retrieves a list of postal codes.",
-          "httpMethod": "GET",
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "type": "string"
-            }
-          },
-          "path": "userprofiles/{profileId}/postalCodes"
-        },
-        "get": {
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            },
-            "code": {
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "description": "Postal code ID."
-            }
-          },
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/postalCodes/{code}",
-          "response": {
-            "$ref": "PostalCode"
-          },
-          "parameterOrder": [
-            "profileId",
-            "code"
-          ],
-          "flatPath": "userprofiles/{profileId}/postalCodes/{code}",
-          "id": "dfareporting.postalCodes.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Gets one postal code by ID."
-        }
-      }
-    },
-    "targetableRemarketingLists": {
-      "methods": {
-        "list": {
-          "id": "dfareporting.targetableRemarketingLists.list",
-          "path": "userprofiles/{profileId}/targetableRemarketingLists",
-          "parameters": {
-            "sortOrder": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Order of sorted results.",
-              "type": "string",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "location": "query",
-              "default": "ASCENDING"
-            },
-            "advertiserId": {
-              "type": "string",
-              "description": "Select only targetable remarketing lists targetable by these advertisers.",
-              "location": "query",
-              "format": "int64",
-              "required": true
-            },
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "type": "string"
-            },
-            "maxResults": {
-              "minimum": "0",
-              "type": "integer",
-              "description": "Maximum number of results to return.",
-              "location": "query",
-              "format": "int32",
-              "default": "1000",
-              "maximum": "1000"
-            },
-            "name": {
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"remarketing list*2015\" will return objects with names like \"remarketing list June 2015\", \"remarketing list April 2015\", or simply \"remarketing list 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"remarketing list\" will match objects with name \"my remarketing list\", \"remarketing list 2015\", or simply \"remarketing list\".",
-              "location": "query",
-              "type": "string"
-            },
-            "pageToken": {
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "type": "string"
-            },
-            "sortField": {
-              "type": "string",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "default": "ID",
-              "description": "Field by which to sort the list.",
-              "location": "query"
-            },
-            "active": {
-              "location": "query",
-              "description": "Select only active or only inactive targetable remarketing lists.",
-              "type": "boolean"
-            }
-          },
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "profileId",
-            "advertiserId"
-          ],
-          "description": "Retrieves a list of targetable remarketing lists, possibly filtered. This method supports paging.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/targetableRemarketingLists",
-          "response": {
-            "$ref": "TargetableRemarketingListsListResponse"
-          }
-        },
-        "get": {
-          "path": "userprofiles/{profileId}/targetableRemarketingLists/{id}",
-          "httpMethod": "GET",
-          "id": "dfareporting.targetableRemarketingLists.get",
-          "description": "Gets one remarketing list by ID.",
-          "flatPath": "userprofiles/{profileId}/targetableRemarketingLists/{id}",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "TargetableRemarketingList"
-          },
-          "parameters": {
-            "id": {
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "description": "Remarketing list ID.",
-              "required": true
-            },
-            "profileId": {
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        }
-      }
-    },
-    "countries": {
-      "methods": {
-        "list": {
-          "description": "Retrieves a list of countries.",
-          "response": {
-            "$ref": "CountriesListResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "format": "int64"
-            }
-          },
-          "path": "userprofiles/{profileId}/countries",
-          "id": "dfareporting.countries.list",
-          "flatPath": "userprofiles/{profileId}/countries",
-          "parameterOrder": [
-            "profileId"
-          ]
-        },
-        "get": {
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "dartId": {
-              "required": true,
-              "format": "int64",
-              "description": "Country DART ID.",
-              "location": "path",
-              "type": "string"
-            },
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "id": "dfareporting.countries.get",
-          "path": "userprofiles/{profileId}/countries/{dartId}",
-          "description": "Gets one country by ID.",
-          "flatPath": "userprofiles/{profileId}/countries/{dartId}",
-          "parameterOrder": [
-            "profileId",
-            "dartId"
-          ],
-          "response": {
-            "$ref": "Country"
-          }
-        }
-      }
-    },
-    "conversions": {
-      "methods": {
-        "batchupdate": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Updates existing conversions.",
-          "id": "dfareporting.conversions.batchupdate",
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "location": "path",
-              "type": "string"
-            }
-          },
-          "path": "userprofiles/{profileId}/conversions/batchupdate",
-          "response": {
-            "$ref": "ConversionsBatchUpdateResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/ddmconversions"
-          ],
-          "flatPath": "userprofiles/{profileId}/conversions/batchupdate",
-          "httpMethod": "POST",
-          "request": {
-            "$ref": "ConversionsBatchUpdateRequest"
-          }
-        },
-        "batchinsert": {
-          "flatPath": "userprofiles/{profileId}/conversions/batchinsert",
-          "scopes": [
-            "https://www.googleapis.com/auth/ddmconversions"
-          ],
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "required": true
-            }
-          },
-          "id": "dfareporting.conversions.batchinsert",
-          "path": "userprofiles/{profileId}/conversions/batchinsert",
-          "description": "Inserts conversions.",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "httpMethod": "POST",
-          "request": {
-            "$ref": "ConversionsBatchInsertRequest"
-          },
-          "response": {
-            "$ref": "ConversionsBatchInsertResponse"
-          }
-        }
-      }
-    },
-    "dynamicTargetingKeys": {
-      "methods": {
-        "delete": {
-          "parameterOrder": [
-            "profileId",
-            "objectId",
-            "name",
-            "objectType"
-          ],
-          "description": "Deletes an existing dynamic targeting key.",
-          "path": "userprofiles/{profileId}/dynamicTargetingKeys/{objectId}",
-          "httpMethod": "DELETE",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "name": {
-              "required": true,
-              "type": "string",
-              "description": "Name of this dynamic targeting key. This is a required field. Must be less than 256 characters long and cannot contain commas. All characters are converted to lowercase.",
-              "location": "query"
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "type": "string"
-            },
-            "objectId": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "description": "ID of the object of this dynamic targeting key. This is a required field."
-            },
-            "objectType": {
-              "location": "query",
-              "required": true,
-              "type": "string",
-              "description": "Type of the object of this dynamic targeting key. This is a required field.",
-              "enum": [
-                "OBJECT_ADVERTISER",
-                "OBJECT_AD",
-                "OBJECT_CREATIVE",
-                "OBJECT_PLACEMENT"
-              ],
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                ""
-              ]
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/dynamicTargetingKeys/{objectId}",
-          "id": "dfareporting.dynamicTargetingKeys.delete"
-        },
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "DynamicTargetingKeysListResponse"
-          },
-          "id": "dfareporting.dynamicTargetingKeys.list",
-          "flatPath": "userprofiles/{profileId}/dynamicTargetingKeys",
-          "description": "Retrieves a list of dynamic targeting keys.",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "objectType": {
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                ""
-              ],
-              "description": "Select only dynamic targeting keys with this object type.",
-              "enum": [
-                "OBJECT_ADVERTISER",
-                "OBJECT_AD",
-                "OBJECT_CREATIVE",
-                "OBJECT_PLACEMENT"
-              ],
-              "location": "query"
-            },
-            "objectId": {
-              "format": "int64",
-              "type": "string",
-              "description": "Select only dynamic targeting keys with this object ID.",
-              "location": "query"
-            },
-            "names": {
-              "description": "Select only dynamic targeting keys exactly matching these names.",
-              "repeated": true,
-              "type": "string",
-              "location": "query"
-            },
-            "profileId": {
-              "location": "path",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "type": "string"
-            },
-            "advertiserId": {
-              "description": "Select only dynamic targeting keys whose object has this advertiser ID.",
-              "format": "int64",
-              "location": "query",
-              "type": "string"
-            }
-          },
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/dynamicTargetingKeys"
-        },
-        "insert": {
-          "id": "dfareporting.dynamicTargetingKeys.insert",
-          "response": {
-            "$ref": "DynamicTargetingKey"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/dynamicTargetingKeys",
-          "flatPath": "userprofiles/{profileId}/dynamicTargetingKeys",
-          "description": "Inserts a new dynamic targeting key. Keys must be created at the advertiser level before being assigned to the advertiser's ads, creatives, or placements. There is a maximum of 1000 keys per advertiser, out of which a maximum of 20 keys can be assigned per ad, creative, or placement.",
-          "httpMethod": "POST",
-          "request": {
-            "$ref": "DynamicTargetingKey"
-          },
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ]
-        }
-      }
-    },
-    "dimensionValues": {
-      "methods": {
-        "query": {
-          "path": "userprofiles/{profileId}/dimensionvalues/query",
-          "flatPath": "userprofiles/{profileId}/dimensionvalues/query",
-          "request": {
-            "$ref": "DimensionValueRequest"
-          },
-          "id": "dfareporting.dimensionValues.query",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfareporting"
-          ],
-          "httpMethod": "POST",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "description": "The Campaign Manager 360 user profile ID.",
-              "format": "int64",
-              "required": true,
-              "type": "string"
-            },
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "The value of the nextToken from the previous result page."
-            },
-            "maxResults": {
-              "maximum": "100",
-              "minimum": "0",
-              "description": "Maximum number of results to return.",
-              "default": "100",
-              "type": "integer",
-              "location": "query",
-              "format": "int32"
-            }
-          },
-          "description": "Retrieves list of report dimension values for a list of filters.",
-          "response": {
-            "$ref": "DimensionValueList"
-          }
-        }
-      }
-    },
-    "projects": {
-      "methods": {
-        "get": {
-          "response": {
-            "$ref": "Project"
-          },
-          "id": "dfareporting.projects.get",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "id": {
-              "type": "string",
-              "description": "Project ID.",
-              "location": "path",
-              "format": "int64",
-              "required": true
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "location": "path",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/projects/{id}",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "description": "Gets one project by ID.",
-          "path": "userprofiles/{profileId}/projects/{id}"
-        },
-        "list": {
-          "httpMethod": "GET",
-          "id": "dfareporting.projects.list",
-          "description": "Retrieves a list of projects, possibly filtered. This method supports paging .",
-          "parameters": {
-            "maxResults": {
-              "maximum": "1000",
-              "default": "1000",
-              "type": "integer",
-              "description": "Maximum number of results to return.",
-              "format": "int32",
-              "minimum": "0",
-              "location": "query"
-            },
-            "ids": {
-              "type": "string",
-              "description": "Select only projects with these IDs.",
-              "location": "query",
-              "format": "int64",
-              "repeated": true
-            },
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "format": "int64"
-            },
-            "advertiserIds": {
-              "format": "int64",
-              "type": "string",
-              "location": "query",
-              "description": "Select only projects with these advertiser IDs.",
-              "repeated": true
-            },
-            "searchString": {
-              "type": "string",
-              "location": "query",
-              "description": "Allows searching for projects by name or ID. Wildcards (*) are allowed. For example, \"project*2015\" will return projects with names like \"project June 2015\", \"project April 2015\", or simply \"project 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"project\" will match projects with name \"my project\", \"project 2015\", or simply \"project\"."
-            },
-            "sortField": {
-              "location": "query",
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "default": "ID",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "description": "Field by which to sort the list."
-            },
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page."
-            },
-            "sortOrder": {
-              "type": "string",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "default": "ASCENDING",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "description": "Order of sorted results."
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/projects",
-          "response": {
-            "$ref": "ProjectsListResponse"
-          },
-          "flatPath": "userprofiles/{profileId}/projects",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        }
-      }
-    },
-    "operatingSystems": {
-      "methods": {
-        "get": {
-          "id": "dfareporting.operatingSystems.get",
-          "description": "Gets one operating system by DART ID.",
-          "httpMethod": "GET",
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "format": "int64"
-            },
-            "dartId": {
-              "description": "Operating system DART ID.",
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "response": {
-            "$ref": "OperatingSystem"
-          },
-          "flatPath": "userprofiles/{profileId}/operatingSystems/{dartId}",
-          "path": "userprofiles/{profileId}/operatingSystems/{dartId}",
-          "parameterOrder": [
-            "profileId",
-            "dartId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/operatingSystems",
-          "path": "userprofiles/{profileId}/operatingSystems",
-          "description": "Retrieves a list of operating systems.",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.operatingSystems.list",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string"
-            }
-          },
-          "response": {
-            "$ref": "OperatingSystemsListResponse"
-          }
-        }
-      }
-    },
-    "browsers": {
-      "methods": {
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/browsers",
-          "id": "dfareporting.browsers.list",
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "required": true,
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Retrieves a list of browsers.",
-          "flatPath": "userprofiles/{profileId}/browsers",
-          "response": {
-            "$ref": "BrowsersListResponse"
-          }
-        }
-      }
-    },
-    "accountActiveAdSummaries": {
-      "methods": {
-        "get": {
-          "httpMethod": "GET",
-          "id": "dfareporting.accountActiveAdSummaries.get",
-          "path": "userprofiles/{profileId}/accountActiveAdSummaries/{summaryAccountId}",
-          "parameters": {
-            "summaryAccountId": {
-              "type": "string",
-              "required": true,
-              "format": "int64",
-              "description": "Account ID.",
-              "location": "path"
-            },
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "required": true,
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "summaryAccountId"
-          ],
-          "flatPath": "userprofiles/{profileId}/accountActiveAdSummaries/{summaryAccountId}",
-          "response": {
-            "$ref": "AccountActiveAdSummary"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Gets the account's active ad summary by account ID."
-        }
-      }
-    },
-    "targetingTemplates": {
-      "methods": {
-        "get": {
-          "id": "dfareporting.targetingTemplates.get",
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "path": "userprofiles/{profileId}/targetingTemplates/{id}",
-          "description": "Gets one targeting template by ID.",
-          "response": {
-            "$ref": "TargetingTemplate"
-          },
-          "flatPath": "userprofiles/{profileId}/targetingTemplates/{id}",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "format": "int64",
-              "required": true,
-              "location": "path"
-            },
-            "id": {
-              "description": "Targeting template ID.",
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "insert": {
-          "request": {
-            "$ref": "TargetingTemplate"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "type": "string"
-            }
-          },
-          "response": {
-            "$ref": "TargetingTemplate"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/targetingTemplates",
-          "description": "Inserts a new targeting template.",
-          "httpMethod": "POST",
-          "flatPath": "userprofiles/{profileId}/targetingTemplates",
-          "id": "dfareporting.targetingTemplates.insert"
-        },
-        "update": {
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "type": "string"
-            }
-          },
-          "response": {
-            "$ref": "TargetingTemplate"
-          },
-          "id": "dfareporting.targetingTemplates.update",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Updates an existing targeting template.",
-          "flatPath": "userprofiles/{profileId}/targetingTemplates",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/targetingTemplates",
-          "request": {
-            "$ref": "TargetingTemplate"
-          },
-          "httpMethod": "PUT"
-        },
-        "list": {
-          "response": {
-            "$ref": "TargetingTemplatesListResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "maxResults": {
-              "format": "int32",
-              "location": "query",
-              "type": "integer",
-              "default": "1000",
-              "description": "Maximum number of results to return.",
-              "minimum": "0",
-              "maximum": "1000"
-            },
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page."
-            },
-            "profileId": {
-              "location": "path",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "type": "string"
-            },
-            "sortField": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Field by which to sort the list.",
-              "default": "ID",
-              "type": "string",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "location": "query"
-            },
-            "sortOrder": {
-              "location": "query",
-              "default": "ASCENDING",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Order of sorted results."
-            },
-            "advertiserId": {
-              "format": "int64",
-              "location": "query",
-              "type": "string",
-              "description": "Select only targeting templates with this advertiser ID."
-            },
-            "ids": {
-              "type": "string",
-              "repeated": true,
-              "location": "query",
-              "format": "int64",
-              "description": "Select only targeting templates with these IDs."
-            },
-            "searchString": {
-              "location": "query",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"template*2015\" will return objects with names like \"template June 2015\", \"template April 2015\", or simply \"template 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"template\" will match objects with name \"my template\", \"template 2015\", or simply \"template\".",
-              "type": "string"
-            }
-          },
-          "id": "dfareporting.targetingTemplates.list",
-          "description": "Retrieves a list of targeting templates, optionally filtered. This method supports paging.",
-          "path": "userprofiles/{profileId}/targetingTemplates",
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/targetingTemplates"
-        },
-        "patch": {
-          "response": {
-            "$ref": "TargetingTemplate"
-          },
-          "path": "userprofiles/{profileId}/targetingTemplates",
-          "httpMethod": "PATCH",
-          "parameters": {
-            "id": {
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "description": "TargetingTemplate ID.",
-              "location": "query"
-            },
-            "profileId": {
-              "format": "int64",
-              "location": "path",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "type": "string"
-            }
-          },
-          "request": {
-            "$ref": "TargetingTemplate"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "description": "Updates an existing targeting template. This method supports patch semantics.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.targetingTemplates.patch",
-          "flatPath": "userprofiles/{profileId}/targetingTemplates"
-        }
-      }
-    },
-    "creativeAssets": {
-      "methods": {
-        "insert": {
-          "supportsMediaUpload": true,
-          "id": "dfareporting.creativeAssets.insert",
-          "parameterOrder": [
-            "profileId",
-            "advertiserId"
-          ],
-          "response": {
-            "$ref": "CreativeAssetMetadata"
-          },
-          "httpMethod": "POST",
-          "description": "Inserts a new creative asset.",
-          "flatPath": "userprofiles/{profileId}/creativeAssets/{advertiserId}/creativeAssets",
-          "request": {
-            "$ref": "CreativeAssetMetadata"
-          },
-          "mediaUpload": {
-            "protocols": {
-              "simple": {
-                "multipart": true,
-                "path": "/upload/dfareporting/v3.3/userprofiles/{profileId}/creativeAssets/{advertiserId}/creativeAssets"
-              }
-            },
-            "accept": [
-              "*/*"
-            ],
-            "maxSize": "1073741824"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/creativeAssets/{advertiserId}/creativeAssets",
-          "parameters": {
-            "advertiserId": {
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "description": "Advertiser ID of this creative. This is a required field.",
-              "type": "string"
-            },
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string"
-            }
-          }
-        }
-      }
-    },
-    "mobileApps": {
-      "methods": {
-        "list": {
-          "flatPath": "userprofiles/{profileId}/mobileApps",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "type": "string"
-            },
-            "searchString": {
-              "location": "query",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"app*2015\" will return objects with names like \"app Jan 2018\", \"app Jan 2018\", or simply \"app 2018\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"app\" will match objects with name \"my app\", \"app 2018\", or simply \"app\".",
-              "type": "string"
-            },
-            "pageToken": {
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "type": "string"
-            },
-            "directories": {
-              "enum": [
-                "UNKNOWN",
-                "APPLE_APP_STORE",
-                "GOOGLE_PLAY_STORE"
-              ],
-              "repeated": true,
-              "enumDescriptions": [
-                "",
-                "",
-                ""
-              ],
-              "location": "query",
-              "description": "Select only apps from these directories.",
-              "type": "string"
-            },
-            "ids": {
-              "location": "query",
-              "type": "string",
-              "description": "Select only apps with these IDs.",
-              "repeated": true
-            },
-            "maxResults": {
-              "type": "integer",
-              "format": "int32",
-              "location": "query",
-              "description": "Maximum number of results to return.",
-              "default": "1000",
-              "maximum": "1000",
-              "minimum": "0"
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/mobileApps",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "MobileAppsListResponse"
-          },
-          "description": "Retrieves list of available mobile apps.",
-          "id": "dfareporting.mobileApps.list",
-          "httpMethod": "GET"
-        },
-        "get": {
-          "id": "dfareporting.mobileApps.get",
-          "path": "userprofiles/{profileId}/mobileApps/{id}",
-          "description": "Gets one mobile app by ID.",
-          "response": {
-            "$ref": "MobileApp"
-          },
-          "flatPath": "userprofiles/{profileId}/mobileApps/{id}",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path"
-            },
-            "id": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "Mobile app ID."
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET"
-        }
-      }
-    },
-    "advertiserLandingPages": {
-      "methods": {
-        "get": {
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request."
-            },
-            "id": {
-              "required": true,
-              "description": "Landing page ID.",
-              "location": "path",
-              "type": "string",
-              "format": "int64"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "LandingPage"
-          },
-          "flatPath": "userprofiles/{profileId}/advertiserLandingPages/{id}",
-          "id": "dfareporting.advertiserLandingPages.get",
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/advertiserLandingPages/{id}",
-          "description": "Gets one landing page by ID."
-        },
-        "insert": {
-          "id": "dfareporting.advertiserLandingPages.insert",
-          "path": "userprofiles/{profileId}/advertiserLandingPages",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true
-            }
-          },
-          "response": {
-            "$ref": "LandingPage"
-          },
-          "httpMethod": "POST",
-          "request": {
-            "$ref": "LandingPage"
-          },
-          "flatPath": "userprofiles/{profileId}/advertiserLandingPages",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Inserts a new landing page."
-        },
-        "list": {
-          "httpMethod": "GET",
-          "id": "dfareporting.advertiserLandingPages.list",
-          "response": {
-            "$ref": "AdvertiserLandingPagesListResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/advertiserLandingPages",
-          "flatPath": "userprofiles/{profileId}/advertiserLandingPages",
-          "parameters": {
-            "searchString": {
-              "type": "string",
-              "location": "query",
-              "description": "Allows searching for landing pages by name or ID. Wildcards (*) are allowed. For example, \"landingpage*2017\" will return landing pages with names like \"landingpage July 2017\", \"landingpage March 2017\", or simply \"landingpage 2017\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"landingpage\" will match campaigns with name \"my landingpage\", \"landingpage 2015\", or simply \"landingpage\"."
-            },
-            "sortOrder": {
-              "description": "Order of sorted results.",
-              "location": "query",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "default": "ASCENDING",
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            },
-            "ids": {
-              "description": "Select only landing pages with these IDs.",
-              "location": "query",
-              "repeated": true,
-              "format": "int64",
-              "type": "string"
-            },
-            "campaignIds": {
-              "format": "int64",
-              "type": "string",
-              "description": "Select only landing pages that are associated with these campaigns.",
-              "location": "query",
-              "repeated": true
-            },
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "location": "path",
-              "type": "string"
-            },
-            "sortField": {
-              "default": "ID",
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "location": "query",
-              "description": "Field by which to sort the list."
-            },
-            "archived": {
-              "location": "query",
-              "type": "boolean",
-              "description": "Select only archived landing pages. Don't set this field to select both archived and non-archived landing pages."
-            },
-            "advertiserIds": {
-              "repeated": true,
-              "location": "query",
-              "format": "int64",
-              "type": "string",
-              "description": "Select only landing pages that belong to these advertisers."
-            },
-            "pageToken": {
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query"
-            },
-            "maxResults": {
-              "minimum": "0",
-              "location": "query",
-              "type": "integer",
-              "default": "1000",
-              "maximum": "1000",
-              "description": "Maximum number of results to return.",
-              "format": "int32"
-            },
-            "subaccountId": {
-              "type": "string",
-              "format": "int64",
-              "description": "Select only landing pages that belong to this subaccount.",
-              "location": "query"
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Retrieves a list of landing pages."
-        },
-        "update": {
-          "description": "Updates an existing landing page.",
-          "flatPath": "userprofiles/{profileId}/advertiserLandingPages",
-          "httpMethod": "PUT",
-          "response": {
-            "$ref": "LandingPage"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "request": {
-            "$ref": "LandingPage"
-          },
-          "path": "userprofiles/{profileId}/advertiserLandingPages",
-          "id": "dfareporting.advertiserLandingPages.update",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "description": "User profile ID associated with this request."
-            }
-          }
-        },
-        "patch": {
-          "flatPath": "userprofiles/{profileId}/advertiserLandingPages",
-          "request": {
-            "$ref": "LandingPage"
-          },
-          "path": "userprofiles/{profileId}/advertiserLandingPages",
-          "parameters": {
-            "id": {
-              "location": "query",
-              "type": "string",
-              "required": true,
-              "description": "LandingPage ID.",
-              "format": "int64"
-            },
-            "profileId": {
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64",
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "PATCH",
-          "id": "dfareporting.advertiserLandingPages.patch",
-          "response": {
-            "$ref": "LandingPage"
-          },
-          "description": "Updates an existing advertiser landing page. This method supports patch semantics.",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        }
-      }
-    },
-    "remarketingLists": {
-      "methods": {
-        "update": {
-          "request": {
-            "$ref": "RemarketingList"
-          },
-          "path": "userprofiles/{profileId}/remarketingLists",
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true,
-              "format": "int64"
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "PUT",
-          "id": "dfareporting.remarketingLists.update",
-          "flatPath": "userprofiles/{profileId}/remarketingLists",
-          "response": {
-            "$ref": "RemarketingList"
-          },
-          "description": "Updates an existing remarketing list."
-        },
-        "list": {
-          "response": {
-            "$ref": "RemarketingListsListResponse"
-          },
-          "flatPath": "userprofiles/{profileId}/remarketingLists",
-          "parameters": {
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page."
-            },
-            "name": {
-              "type": "string",
-              "location": "query",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"remarketing list*2015\" will return objects with names like \"remarketing list June 2015\", \"remarketing list April 2015\", or simply \"remarketing list 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"remarketing list\" will match objects with name \"my remarketing list\", \"remarketing list 2015\", or simply \"remarketing list\"."
-            },
-            "floodlightActivityId": {
-              "format": "int64",
-              "location": "query",
-              "type": "string",
-              "description": "Select only remarketing lists that have this floodlight activity ID."
-            },
-            "sortOrder": {
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "type": "string",
-              "description": "Order of sorted results.",
-              "default": "ASCENDING",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query"
-            },
-            "sortField": {
-              "location": "query",
-              "type": "string",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Field by which to sort the list.",
-              "default": "ID"
-            },
-            "active": {
-              "type": "boolean",
-              "description": "Select only active or only inactive remarketing lists.",
-              "location": "query"
-            },
-            "maxResults": {
-              "default": "1000",
-              "type": "integer",
-              "description": "Maximum number of results to return.",
-              "minimum": "0",
-              "maximum": "1000",
-              "format": "int32",
-              "location": "query"
-            },
-            "advertiserId": {
-              "location": "query",
-              "required": true,
-              "description": "Select only remarketing lists owned by this advertiser.",
-              "format": "int64",
-              "type": "string"
-            },
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "httpMethod": "GET",
-          "description": "Retrieves a list of remarketing lists, possibly filtered. This method supports paging.",
-          "id": "dfareporting.remarketingLists.list",
-          "parameterOrder": [
-            "profileId",
-            "advertiserId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/remarketingLists"
-        },
-        "insert": {
-          "path": "userprofiles/{profileId}/remarketingLists",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "request": {
-            "$ref": "RemarketingList"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "POST",
-          "id": "dfareporting.remarketingLists.insert",
-          "description": "Inserts a new remarketing list.",
-          "flatPath": "userprofiles/{profileId}/remarketingLists",
-          "response": {
-            "$ref": "RemarketingList"
-          },
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request."
-            }
-          }
-        },
-        "patch": {
-          "description": "Updates an existing remarketing list. This method supports patch semantics.",
-          "parameters": {
-            "id": {
-              "description": "RemarketingList ID.",
-              "required": true,
-              "type": "string",
-              "location": "query",
-              "format": "int64"
-            },
-            "profileId": {
-              "format": "int64",
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "path": "userprofiles/{profileId}/remarketingLists",
-          "response": {
-            "$ref": "RemarketingList"
-          },
-          "id": "dfareporting.remarketingLists.patch",
-          "flatPath": "userprofiles/{profileId}/remarketingLists",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "PATCH",
-          "request": {
-            "$ref": "RemarketingList"
-          }
-        },
-        "get": {
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "required": true,
-              "location": "path",
-              "type": "string"
-            },
-            "id": {
-              "required": true,
-              "location": "path",
-              "description": "Remarketing list ID.",
-              "type": "string",
-              "format": "int64"
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "id": "dfareporting.remarketingLists.get",
-          "description": "Gets one remarketing list by ID.",
-          "path": "userprofiles/{profileId}/remarketingLists/{id}",
-          "response": {
-            "$ref": "RemarketingList"
-          },
-          "flatPath": "userprofiles/{profileId}/remarketingLists/{id}"
-        }
-      }
-    },
-    "creativeFieldValues": {
-      "methods": {
-        "get": {
-          "response": {
-            "$ref": "CreativeFieldValue"
-          },
-          "httpMethod": "GET",
-          "id": "dfareporting.creativeFieldValues.get",
-          "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}",
-          "parameterOrder": [
-            "profileId",
-            "creativeFieldId",
-            "id"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}",
-          "parameters": {
-            "creativeFieldId": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "Creative field ID for this creative field value.",
-              "format": "int64"
-            },
-            "id": {
-              "description": "Creative Field Value ID",
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "location": "path"
-            },
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string"
-            }
-          },
-          "description": "Gets one creative field value by ID."
-        },
-        "list": {
-          "description": "Retrieves a list of creative field values, possibly filtered. This method supports paging.",
-          "id": "dfareporting.creativeFieldValues.list",
-          "parameterOrder": [
-            "profileId",
-            "creativeFieldId"
-          ],
-          "response": {
-            "$ref": "CreativeFieldValuesListResponse"
-          },
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
-          "parameters": {
-            "maxResults": {
-              "format": "int32",
-              "minimum": "0",
-              "default": "1000",
-              "description": "Maximum number of results to return.",
-              "location": "query",
-              "maximum": "1000",
-              "type": "integer"
-            },
-            "ids": {
-              "description": "Select only creative field values with these IDs.",
-              "location": "query",
-              "format": "int64",
-              "repeated": true,
-              "type": "string"
-            },
-            "creativeFieldId": {
-              "required": true,
-              "description": "Creative field ID for this creative field value.",
-              "format": "int64",
-              "type": "string",
-              "location": "path"
-            },
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            },
-            "searchString": {
-              "description": "Allows searching for creative field values by their values. Wildcards (e.g. *) are not allowed.",
-              "location": "query",
-              "type": "string"
-            },
-            "pageToken": {
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "type": "string"
-            },
-            "sortOrder": {
-              "type": "string",
-              "description": "Order of sorted results.",
-              "location": "query",
-              "default": "ASCENDING",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ]
-            },
-            "sortField": {
-              "enum": [
-                "ID",
-                "VALUE"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "type": "string",
-              "description": "Field by which to sort the list.",
-              "location": "query",
-              "default": "ID"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues"
-        },
-        "delete": {
-          "httpMethod": "DELETE",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request."
-            },
-            "id": {
-              "description": "Creative Field Value ID",
-              "format": "int64",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            },
-            "creativeFieldId": {
-              "location": "path",
-              "format": "int64",
-              "description": "Creative field ID for this creative field value.",
-              "type": "string",
-              "required": true
-            }
-          },
-          "description": "Deletes an existing creative field value.",
-          "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}",
-          "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}",
-          "parameterOrder": [
-            "profileId",
-            "creativeFieldId",
-            "id"
-          ],
-          "id": "dfareporting.creativeFieldValues.delete"
-        },
-        "insert": {
-          "parameterOrder": [
-            "profileId",
-            "creativeFieldId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "CreativeFieldValue"
-          },
-          "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
-          "description": "Inserts a new creative field value.",
-          "httpMethod": "POST",
-          "id": "dfareporting.creativeFieldValues.insert",
-          "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
-          "request": {
-            "$ref": "CreativeFieldValue"
-          },
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "type": "string"
-            },
-            "creativeFieldId": {
-              "description": "Creative field ID for this creative field value.",
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "required": true
-            }
-          }
-        },
-        "update": {
-          "httpMethod": "PUT",
-          "parameterOrder": [
-            "profileId",
-            "creativeFieldId"
-          ],
-          "request": {
-            "$ref": "CreativeFieldValue"
-          },
-          "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
-          "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
-          "description": "Updates an existing creative field value.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "type": "string",
-              "location": "path",
-              "required": true
-            },
-            "creativeFieldId": {
-              "description": "Creative field ID for this creative field value.",
-              "type": "string",
-              "format": "int64",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "id": "dfareporting.creativeFieldValues.update",
-          "response": {
-            "$ref": "CreativeFieldValue"
-          }
-        },
-        "patch": {
-          "httpMethod": "PATCH",
-          "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
-          "id": "dfareporting.creativeFieldValues.patch",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "id": {
-              "format": "int64",
-              "description": "CreativeFieldValue ID.",
-              "type": "string",
-              "location": "query",
-              "required": true
-            },
-            "profileId": {
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "User profile ID associated with this request."
-            },
-            "creativeFieldId": {
-              "type": "string",
-              "required": true,
-              "format": "int64",
-              "description": "CreativeField ID.",
-              "location": "path"
-            }
-          },
-          "description": "Updates an existing creative field value. This method supports patch semantics.",
-          "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
-          "parameterOrder": [
-            "profileId",
-            "creativeFieldId",
-            "id"
-          ],
-          "response": {
-            "$ref": "CreativeFieldValue"
-          },
-          "request": {
-            "$ref": "CreativeFieldValue"
-          }
-        }
-      }
-    },
-    "eventTags": {
-      "methods": {
-        "delete": {
-          "flatPath": "userprofiles/{profileId}/eventTags/{id}",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "path": "userprofiles/{profileId}/eventTags/{id}",
-          "description": "Deletes an existing event tag.",
-          "id": "dfareporting.eventTags.delete",
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "location": "path"
-            },
-            "id": {
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "Event tag ID.",
-              "format": "int64"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "DELETE"
-        },
-        "list": {
-          "id": "dfareporting.eventTags.list",
-          "path": "userprofiles/{profileId}/eventTags",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "ids": {
-              "repeated": true,
-              "type": "string",
-              "location": "query",
-              "description": "Select only event tags with these IDs.",
-              "format": "int64"
-            },
-            "profileId": {
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "User profile ID associated with this request."
-            },
-            "sortField": {
-              "description": "Field by which to sort the list.",
-              "default": "ID",
-              "location": "query",
-              "type": "string",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            },
-            "searchString": {
-              "type": "string",
-              "location": "query",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"eventtag*2015\" will return objects with names like \"eventtag June 2015\", \"eventtag April 2015\", or simply \"eventtag 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"eventtag\" will match objects with name \"my eventtag\", \"eventtag 2015\", or simply \"eventtag\"."
-            },
-            "campaignId": {
-              "type": "string",
-              "format": "int64",
-              "description": "Select only event tags that belong to this campaign.",
-              "location": "query"
-            },
-            "definitionsOnly": {
-              "type": "boolean",
-              "location": "query",
-              "description": "Examine only the specified campaign or advertiser's event tags for matching selector criteria. When set to false, the parent advertiser and parent campaign of the specified ad or campaign is examined as well. In addition, when set to false, the status field is examined as well, along with the enabledByDefault field. This parameter can not be set to true when adId is specified as ads do not define their own even tags."
-            },
-            "eventTagTypes": {
-              "enumDescriptions": [
-                "",
-                "",
-                ""
-              ],
-              "description": "Select only event tags with the specified event tag types. Event tag types can be used to specify whether to use a third-party pixel, a third-party JavaScript URL, or a third-party click-through URL for either impression or click tracking.",
-              "enum": [
-                "IMPRESSION_IMAGE_EVENT_TAG",
-                "IMPRESSION_JAVASCRIPT_EVENT_TAG",
-                "CLICK_THROUGH_EVENT_TAG"
-              ],
-              "type": "string",
-              "location": "query",
-              "repeated": true
-            },
-            "adId": {
-              "location": "query",
-              "type": "string",
-              "format": "int64",
-              "description": "Select only event tags that belong to this ad."
-            },
-            "enabled": {
-              "description": "Select only enabled event tags. What is considered enabled or disabled depends on the definitionsOnly parameter. When definitionsOnly is set to true, only the specified advertiser or campaign's event tags' enabledByDefault field is examined. When definitionsOnly is set to false, the specified ad or specified campaign's parent advertiser's or parent campaign's event tags' enabledByDefault and status fields are examined as well.",
-              "type": "boolean",
-              "location": "query"
-            },
-            "sortOrder": {
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "location": "query",
-              "default": "ASCENDING",
-              "type": "string",
-              "description": "Order of sorted results.",
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            },
-            "advertiserId": {
-              "location": "query",
-              "type": "string",
-              "description": "Select only event tags that belong to this advertiser.",
-              "format": "int64"
-            }
-          },
-          "description": "Retrieves a list of event tags, possibly filtered.",
-          "response": {
-            "$ref": "EventTagsListResponse"
-          },
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/eventTags"
-        },
-        "update": {
-          "response": {
-            "$ref": "EventTag"
-          },
-          "path": "userprofiles/{profileId}/eventTags",
-          "id": "dfareporting.eventTags.update",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "request": {
-            "$ref": "EventTag"
-          },
-          "httpMethod": "PUT",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/eventTags",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            }
-          },
-          "description": "Updates an existing event tag."
-        },
-        "patch": {
-          "description": "Updates an existing event tag. This method supports patch semantics.",
-          "flatPath": "userprofiles/{profileId}/eventTags",
-          "httpMethod": "PATCH",
-          "path": "userprofiles/{profileId}/eventTags",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "id": {
-              "location": "query",
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "description": "EventTag ID."
-            },
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "type": "string"
-            }
-          },
-          "request": {
-            "$ref": "EventTag"
-          },
-          "response": {
-            "$ref": "EventTag"
-          },
-          "id": "dfareporting.eventTags.patch"
-        },
-        "insert": {
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "type": "string"
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "response": {
-            "$ref": "EventTag"
-          },
-          "path": "userprofiles/{profileId}/eventTags",
-          "request": {
-            "$ref": "EventTag"
-          },
-          "httpMethod": "POST",
-          "id": "dfareporting.eventTags.insert",
-          "flatPath": "userprofiles/{profileId}/eventTags",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Inserts a new event tag."
-        },
-        "get": {
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true
-            },
-            "id": {
-              "description": "Event tag ID.",
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "type": "string"
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/eventTags/{id}",
-          "id": "dfareporting.eventTags.get",
-          "description": "Gets one event tag by ID.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "EventTag"
-          },
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "path": "userprofiles/{profileId}/eventTags/{id}"
-        }
-      }
-    },
-    "changeLogs": {
-      "methods": {
-        "get": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Gets one change log by ID.",
-          "id": "dfareporting.changeLogs.get",
-          "flatPath": "userprofiles/{profileId}/changeLogs/{id}",
-          "path": "userprofiles/{profileId}/changeLogs/{id}",
-          "response": {
-            "$ref": "ChangeLog"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "id": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "format": "int64",
-              "description": "Change log ID."
-            },
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path",
-              "required": true
-            }
-          },
-          "httpMethod": "GET"
-        },
-        "list": {
-          "description": "Retrieves a list of change logs. This method supports paging.",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/changeLogs",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/changeLogs",
-          "response": {
-            "$ref": "ChangeLogsListResponse"
-          },
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "required": true
-            },
-            "action": {
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                ""
-              ],
-              "enum": [
-                "ACTION_CREATE",
-                "ACTION_UPDATE",
-                "ACTION_DELETE",
-                "ACTION_ENABLE",
-                "ACTION_DISABLE",
-                "ACTION_ADD",
-                "ACTION_REMOVE",
-                "ACTION_MARK_AS_DEFAULT",
-                "ACTION_ASSOCIATE",
-                "ACTION_ASSIGN",
-                "ACTION_UNASSIGN",
-                "ACTION_SEND",
-                "ACTION_LINK",
-                "ACTION_UNLINK",
-                "ACTION_PUSH",
-                "ACTION_EMAIL_TAGS",
-                "ACTION_SHARE"
-              ],
-              "type": "string",
-              "description": "Select only change logs with the specified action.",
-              "location": "query"
-            },
-            "objectIds": {
-              "format": "int64",
-              "type": "string",
-              "description": "Select only change logs with these object IDs.",
-              "repeated": true,
-              "location": "query"
-            },
-            "objectType": {
-              "enum": [
-                "OBJECT_ADVERTISER",
-                "OBJECT_FLOODLIGHT_CONFIGURATION",
-                "OBJECT_AD",
-                "OBJECT_FLOODLIGHT_ACTVITY",
-                "OBJECT_CAMPAIGN",
-                "OBJECT_FLOODLIGHT_ACTIVITY_GROUP",
-                "OBJECT_CREATIVE",
-                "OBJECT_PLACEMENT",
-                "OBJECT_DFA_SITE",
-                "OBJECT_USER_ROLE",
-                "OBJECT_USER_PROFILE",
-                "OBJECT_ADVERTISER_GROUP",
-                "OBJECT_ACCOUNT",
-                "OBJECT_SUBACCOUNT",
-                "OBJECT_RICHMEDIA_CREATIVE",
-                "OBJECT_INSTREAM_CREATIVE",
-                "OBJECT_MEDIA_ORDER",
-                "OBJECT_CONTENT_CATEGORY",
-                "OBJECT_PLACEMENT_STRATEGY",
-                "OBJECT_SD_SITE",
-                "OBJECT_SIZE",
-                "OBJECT_CREATIVE_GROUP",
-                "OBJECT_CREATIVE_ASSET",
-                "OBJECT_USER_PROFILE_FILTER",
-                "OBJECT_LANDING_PAGE",
-                "OBJECT_CREATIVE_FIELD",
-                "OBJECT_REMARKETING_LIST",
-                "OBJECT_PROVIDED_LIST_CLIENT",
-                "OBJECT_EVENT_TAG",
-                "OBJECT_CREATIVE_BUNDLE",
-                "OBJECT_BILLING_ACCOUNT_GROUP",
-                "OBJECT_BILLING_FEATURE",
-                "OBJECT_RATE_CARD",
-                "OBJECT_ACCOUNT_BILLING_FEATURE",
-                "OBJECT_BILLING_MINIMUM_FEE",
-                "OBJECT_BILLING_PROFILE",
-                "OBJECT_PLAYSTORE_LINK",
-                "OBJECT_TARGETING_TEMPLATE",
-                "OBJECT_SEARCH_LIFT_STUDY",
-                "OBJECT_FLOODLIGHT_DV360_LINK"
-              ],
-              "location": "query",
-              "description": "Select only change logs with the specified object type.",
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                ""
-              ]
-            },
-            "maxResults": {
-              "location": "query",
-              "maximum": "1000",
-              "format": "int32",
-              "type": "integer",
-              "default": "1000",
-              "minimum": "0",
-              "description": "Maximum number of results to return."
-            },
-            "minChangeTime": {
-              "type": "string",
-              "description": "Select only change logs whose change time is after the specified minChangeTime.The time should be formatted as an RFC3339 date/time string. For example, for 10:54 PM on July 18th, 2015, in the America/New York time zone, the format is \"2015-07-18T22:54:00-04:00\". In other words, the year, month, day, the letter T, the hour (24-hour clock system), minute, second, and then the time zone offset.",
-              "location": "query"
-            },
-            "maxChangeTime": {
-              "description": "Select only change logs whose change time is before the specified maxChangeTime.The time should be formatted as an RFC3339 date/time string. For example, for 10:54 PM on July 18th, 2015, in the America/New York time zone, the format is \"2015-07-18T22:54:00-04:00\". In other words, the year, month, day, the letter T, the hour (24-hour clock system), minute, second, and then the time zone offset.",
-              "location": "query",
-              "type": "string"
-            },
-            "searchString": {
-              "description": "Select only change logs whose object ID, user name, old or new values match the search string.",
-              "location": "query",
-              "type": "string"
-            },
-            "pageToken": {
-              "location": "query",
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page."
-            },
-            "ids": {
-              "repeated": true,
-              "type": "string",
-              "description": "Select only change logs with these IDs.",
-              "format": "int64",
-              "location": "query"
-            },
-            "userProfileIds": {
-              "repeated": true,
-              "type": "string",
-              "location": "query",
-              "description": "Select only change logs with these user profile IDs.",
-              "format": "int64"
-            }
-          },
-          "httpMethod": "GET",
-          "id": "dfareporting.changeLogs.list"
-        }
-      }
-    },
-    "campaignCreativeAssociations": {
-      "methods": {
-        "insert": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.campaignCreativeAssociations.insert",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            },
-            "campaignId": {
-              "description": "Campaign ID in this association.",
-              "required": true,
-              "format": "int64",
-              "location": "path",
-              "type": "string"
-            }
-          },
-          "description": "Associates a creative with the specified campaign. This method creates a default ad with dimensions matching the creative in the campaign if such a default ad does not exist already.",
-          "response": {
-            "$ref": "CampaignCreativeAssociation"
-          },
-          "request": {
-            "$ref": "CampaignCreativeAssociation"
-          },
-          "parameterOrder": [
-            "profileId",
-            "campaignId"
-          ],
-          "httpMethod": "POST",
-          "path": "userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations",
-          "flatPath": "userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations"
-        },
-        "list": {
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations",
-          "response": {
-            "$ref": "CampaignCreativeAssociationsListResponse"
-          },
-          "parameterOrder": [
-            "profileId",
-            "campaignId"
-          ],
-          "parameters": {
-            "maxResults": {
-              "format": "int32",
-              "description": "Maximum number of results to return.",
-              "type": "integer",
-              "default": "1000",
-              "location": "query",
-              "minimum": "0",
-              "maximum": "1000"
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "format": "int64"
-            },
-            "sortOrder": {
-              "type": "string",
-              "default": "ASCENDING",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Order of sorted results.",
-              "location": "query"
-            },
-            "campaignId": {
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "description": "Campaign ID in this association.",
-              "required": true
-            },
-            "pageToken": {
-              "location": "query",
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page."
-            }
-          },
-          "description": "Retrieves the list of creative IDs associated with the specified campaign. This method supports paging.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations",
-          "id": "dfareporting.campaignCreativeAssociations.list"
-        }
-      }
-    },
-    "creativeFields": {
-      "methods": {
-        "list": {
-          "description": "Retrieves a list of creative fields, possibly filtered. This method supports paging.",
-          "id": "dfareporting.creativeFields.list",
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "CreativeFieldsListResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/creativeFields",
-          "flatPath": "userprofiles/{profileId}/creativeFields",
-          "parameters": {
-            "sortOrder": {
-              "type": "string",
-              "description": "Order of sorted results.",
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "default": "ASCENDING"
-            },
-            "searchString": {
-              "type": "string",
-              "description": "Allows searching for creative fields by name or ID. Wildcards (*) are allowed. For example, \"creativefield*2015\" will return creative fields with names like \"creativefield June 2015\", \"creativefield April 2015\", or simply \"creativefield 2015\". Most of the searches also add wild-cards implicitly at the start and the end of the search string. For example, a search string of \"creativefield\" will match creative fields with the name \"my creativefield\", \"creativefield 2015\", or simply \"creativefield\".",
-              "location": "query"
-            },
-            "maxResults": {
-              "default": "1000",
-              "minimum": "0",
-              "format": "int32",
-              "location": "query",
-              "type": "integer",
-              "description": "Maximum number of results to return.",
-              "maximum": "1000"
-            },
-            "ids": {
-              "description": "Select only creative fields with these IDs.",
-              "type": "string",
-              "location": "query",
-              "repeated": true,
-              "format": "int64"
-            },
-            "advertiserIds": {
-              "description": "Select only creative fields that belong to these advertisers.",
-              "repeated": true,
-              "type": "string",
-              "location": "query",
-              "format": "int64"
-            },
-            "sortField": {
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "type": "string",
-              "default": "ID",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "description": "Field by which to sort the list."
-            },
-            "profileId": {
-              "type": "string",
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "location": "path"
-            },
-            "pageToken": {
-              "description": "Value of the nextPageToken from the previous result page.",
-              "type": "string",
-              "location": "query"
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ]
-        },
-        "patch": {
-          "path": "userprofiles/{profileId}/creativeFields",
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "required": true,
-              "format": "int64",
-              "location": "path",
-              "description": "User profile ID associated with this request."
-            },
-            "id": {
-              "type": "string",
-              "location": "query",
-              "format": "int64",
-              "required": true,
-              "description": "CreativeField ID."
-            }
-          },
-          "response": {
-            "$ref": "CreativeField"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "PATCH",
-          "description": "Updates an existing creative field. This method supports patch semantics.",
-          "id": "dfareporting.creativeFields.patch",
-          "flatPath": "userprofiles/{profileId}/creativeFields",
-          "request": {
-            "$ref": "CreativeField"
-          }
-        },
-        "insert": {
-          "description": "Inserts a new creative field.",
-          "request": {
-            "$ref": "CreativeField"
-          },
-          "id": "dfareporting.creativeFields.insert",
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "response": {
-            "$ref": "CreativeField"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "httpMethod": "POST",
-          "flatPath": "userprofiles/{profileId}/creativeFields",
-          "path": "userprofiles/{profileId}/creativeFields"
-        },
-        "delete": {
-          "path": "userprofiles/{profileId}/creativeFields/{id}",
-          "id": "dfareporting.creativeFields.delete",
-          "flatPath": "userprofiles/{profileId}/creativeFields/{id}",
-          "description": "Deletes an existing creative field.",
-          "httpMethod": "DELETE",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "id": {
-              "format": "int64",
-              "required": true,
-              "location": "path",
-              "description": "Creative Field ID",
-              "type": "string"
-            },
-            "profileId": {
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "required": true,
-              "description": "User profile ID associated with this request."
-            }
-          }
-        },
-        "update": {
-          "request": {
-            "$ref": "CreativeField"
-          },
-          "httpMethod": "PUT",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/creativeFields",
-          "id": "dfareporting.creativeFields.update",
-          "response": {
-            "$ref": "CreativeField"
-          },
-          "description": "Updates an existing creative field.",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/creativeFields"
-        },
-        "get": {
-          "description": "Gets one creative field by ID.",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "httpMethod": "GET",
-          "parameters": {
-            "id": {
-              "type": "string",
-              "description": "Creative Field ID",
-              "location": "path",
-              "required": true,
-              "format": "int64"
-            },
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "format": "int64",
-              "required": true
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "CreativeField"
-          },
-          "id": "dfareporting.creativeFields.get",
-          "path": "userprofiles/{profileId}/creativeFields/{id}",
-          "flatPath": "userprofiles/{profileId}/creativeFields/{id}"
-        }
-      }
-    },
-    "languages": {
-      "methods": {
-        "list": {
-          "response": {
-            "$ref": "LanguagesListResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/languages",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.languages.list",
-          "httpMethod": "GET",
-          "description": "Retrieves a list of languages.",
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "path": "userprofiles/{profileId}/languages"
-        }
-      }
-    }
-  },
-  "parameters": {
-    "callback": {
-      "type": "string",
-      "description": "JSONP",
-      "location": "query"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "location": "query",
-      "type": "string"
-    },
-    "access_token": {
-      "location": "query",
-      "description": "OAuth access token.",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "default": "true",
-      "type": "boolean"
-    },
-    "alt": {
-      "type": "string",
-      "default": "json",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "location": "query",
-      "description": "Data format for response.",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ]
-    },
-    "key": {
-      "location": "query",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "type": "string"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "location": "query",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ]
-    },
-    "uploadType": {
-      "type": "string",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
-    },
-    "quotaUser": {
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "type": "string",
-      "location": "query"
-    }
-  },
-  "protocol": "rest",
-  "baseUrl": "https://dfareporting.googleapis.com/dfareporting/v3.3/",
-  "ownerDomain": "google.com"
-}
+    "servicePath": "dfareporting/v3.3/",
+    "title": "Campaign Manager 360 API",
+    "version": "v3.3"
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/dfareporting.v3.4.json b/googleapiclient/discovery_cache/documents/dfareporting.v3.4.json
index 4bc1152..f74e2ce 100644
--- a/googleapiclient/discovery_cache/documents/dfareporting.v3.4.json
+++ b/googleapiclient/discovery_cache/documents/dfareporting.v3.4.json
@@ -1,20714 +1,20714 @@
 {
-  "revision": "20201102",
-  "name": "dfareporting",
-  "batchPath": "batch",
-  "protocol": "rest",
-  "discoveryVersion": "v1",
-  "version": "v3.4",
-  "rootUrl": "https://dfareporting.googleapis.com/",
-  "ownerDomain": "google.com",
-  "description": "Manage your DoubleClick Campaign Manager ad campaigns and reports.",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/dfatrafficking": {
-          "description": "View and manage your DoubleClick Campaign Manager's (DCM) display ad campaigns"
-        },
-        "https://www.googleapis.com/auth/ddmconversions": {
-          "description": "Manage DoubleClick Digital Marketing conversions"
-        },
-        "https://www.googleapis.com/auth/dfareporting": {
-          "description": "View and manage DoubleClick for Advertisers reports"
-        }
-      }
-    }
-  },
-  "baseUrl": "https://dfareporting.googleapis.com/dfareporting/v3.4/",
-  "canonicalName": "Dfareporting",
-  "documentationLink": "https://developers.google.com/doubleclick-advertisers/",
-  "ownerName": "Google",
-  "schemas": {
-    "Dimension": {
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "The dimension name, e.g. dfa:advertiser"
-        },
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#dimension."
-        }
-      },
-      "id": "Dimension",
-      "description": "Represents a dimension.",
-      "type": "object"
-    },
-    "TargetingTemplatesListResponse": {
-      "type": "object",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#targetingTemplatesListResponse\".",
-          "type": "string"
-        },
-        "targetingTemplates": {
-          "description": "Targeting template collection.",
-          "items": {
-            "$ref": "TargetingTemplate"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        }
-      },
-      "description": "Targeting Template List Response",
-      "id": "TargetingTemplatesListResponse"
-    },
-    "SiteSettings": {
-      "id": "SiteSettings",
-      "properties": {
-        "adBlockingOptOut": {
-          "type": "boolean",
-          "description": "Whether this site opts out of ad blocking. When true, ad blocking is disabled for all placements under the site, regardless of the individual placement settings. When false, the campaign and placement settings take effect."
-        },
-        "videoActiveViewOptOutTemplate": {
-          "type": "boolean",
-          "description": "Whether Verification and ActiveView for in-stream video creatives are disabled by default for new placements created under this site. This value will be used to populate the placement.videoActiveViewOptOut field, when no value is specified for the new placement."
-        },
-        "tagSetting": {
-          "$ref": "TagSetting",
-          "description": "Configuration settings for dynamic and image floodlight tags."
-        },
-        "disableNewCookie": {
-          "type": "boolean",
-          "description": "Whether new cookies are disabled for this site."
-        },
-        "vpaidAdapterChoiceTemplate": {
-          "description": "Default VPAID adapter setting for new placements created under this site. This value will be used to populate the placements.vpaidAdapterChoice field, when no value is specified for the new placement. Controls which VPAID format the measurement adapter will use for in-stream video creatives assigned to the placement. The publisher's specifications will typically determine this setting. For VPAID creatives, the adapter format will match the VPAID format (HTML5 VPAID creatives use the HTML5 adapter). *Note:* Flash is no longer supported. This field now defaults to HTML5 when the following values are provided: FLASH, BOTH.",
-          "enum": [
-            "DEFAULT",
-            "FLASH",
-            "HTML5",
-            "BOTH"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string"
-        },
-        "activeViewOptOut": {
-          "type": "boolean",
-          "description": "Whether active view creatives are disabled for this site."
-        }
-      },
-      "type": "object",
-      "description": "Site Settings"
-    },
-    "SubaccountsListResponse": {
-      "id": "SubaccountsListResponse",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#subaccountsListResponse\".",
-          "type": "string"
-        },
-        "subaccounts": {
-          "description": "Subaccount collection.",
-          "items": {
-            "$ref": "Subaccount"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        }
-      },
-      "description": "Subaccount List Response",
-      "type": "object"
-    },
-    "TagSetting": {
-      "id": "TagSetting",
-      "properties": {
-        "keywordOption": {
-          "description": "Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "PLACEHOLDER_WITH_LIST_OF_KEYWORDS",
-            "IGNORE",
-            "GENERATE_SEPARATE_TAG_FOR_EACH_KEYWORD"
-          ],
-          "type": "string"
-        },
-        "additionalKeyValues": {
-          "type": "string",
-          "description": "Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field."
-        },
-        "includeClickThroughUrls": {
-          "type": "boolean",
-          "description": "Whether static landing page URLs should be included in the tags. This setting applies only to placements."
-        },
-        "includeClickTracking": {
-          "type": "boolean",
-          "description": "Whether click-tracking string should be included in the tags."
-        }
-      },
-      "description": "Tag Settings",
-      "type": "object"
-    },
-    "TagData": {
-      "properties": {
-        "clickTag": {
-          "type": "string",
-          "description": "Tag string to record a click."
-        },
-        "creativeId": {
-          "format": "int64",
-          "description": "Creative associated with this placement tag. Applicable only when format is PLACEMENT_TAG_TRACKING.",
-          "type": "string"
-        },
-        "format": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "TagData tag format of this tag.",
-          "type": "string",
-          "enum": [
-            "PLACEMENT_TAG_STANDARD",
-            "PLACEMENT_TAG_IFRAME_JAVASCRIPT",
-            "PLACEMENT_TAG_IFRAME_ILAYER",
-            "PLACEMENT_TAG_INTERNAL_REDIRECT",
-            "PLACEMENT_TAG_JAVASCRIPT",
-            "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT",
-            "PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT",
-            "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT",
-            "PLACEMENT_TAG_CLICK_COMMANDS",
-            "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH",
-            "PLACEMENT_TAG_TRACKING",
-            "PLACEMENT_TAG_TRACKING_IFRAME",
-            "PLACEMENT_TAG_TRACKING_JAVASCRIPT",
-            "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_3",
-            "PLACEMENT_TAG_IFRAME_JAVASCRIPT_LEGACY",
-            "PLACEMENT_TAG_JAVASCRIPT_LEGACY",
-            "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT_LEGACY",
-            "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT_LEGACY",
-            "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_4"
-          ]
-        },
-        "impressionTag": {
-          "description": "Tag string for serving an ad.",
-          "type": "string"
-        },
-        "adId": {
-          "type": "string",
-          "description": "Ad associated with this placement tag. Applicable only when format is PLACEMENT_TAG_TRACKING.",
-          "format": "int64"
-        }
-      },
-      "type": "object",
-      "description": "Placement Tag Data",
-      "id": "TagData"
-    },
-    "AdvertisersListResponse": {
-      "id": "AdvertisersListResponse",
-      "type": "object",
-      "description": "Advertiser List Response",
-      "properties": {
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        },
-        "advertisers": {
-          "items": {
-            "$ref": "Advertiser"
-          },
-          "description": "Advertiser collection.",
-          "type": "array"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertisersListResponse\".",
-          "type": "string"
-        }
-      }
-    },
-    "ConversionsBatchInsertResponse": {
-      "description": "Insert Conversions Response.",
-      "properties": {
-        "hasFailures": {
-          "description": "Indicates that some or all conversions failed to insert.",
-          "type": "boolean"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionsBatchInsertResponse\".",
-          "type": "string"
-        },
-        "status": {
-          "type": "array",
-          "description": "The insert status of each conversion. Statuses are returned in the same order that conversions are inserted.",
-          "items": {
-            "$ref": "ConversionStatus"
-          }
-        }
-      },
-      "type": "object",
-      "id": "ConversionsBatchInsertResponse"
-    },
-    "DirectorySite": {
-      "description": "DirectorySites contains properties of a website from the Site Directory. Sites need to be added to an account via the Sites resource before they can be assigned to a placement.",
-      "properties": {
-        "settings": {
-          "description": "Directory site settings.",
-          "$ref": "DirectorySiteSettings"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#directorySite\".",
-          "type": "string"
-        },
-        "interstitialTagFormats": {
-          "items": {
-            "enum": [
-              "IFRAME_JAVASCRIPT_INTERSTITIAL",
-              "INTERNAL_REDIRECT_INTERSTITIAL",
-              "JAVASCRIPT_INTERSTITIAL"
-            ],
-            "enumDescriptions": [
-              "",
-              "",
-              ""
-            ],
-            "type": "string"
-          },
-          "type": "array",
-          "description": "Tag types for interstitial placements. Acceptable values are: - \"IFRAME_JAVASCRIPT_INTERSTITIAL\" - \"INTERNAL_REDIRECT_INTERSTITIAL\" - \"JAVASCRIPT_INTERSTITIAL\" "
-        },
-        "id": {
-          "format": "int64",
-          "description": "ID of this directory site. This is a read-only, auto-generated field.",
-          "type": "string"
-        },
-        "url": {
-          "description": "URL of this directory site.",
-          "type": "string"
-        },
-        "idDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of this directory site. This is a read-only, auto-generated field."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this directory site."
-        },
-        "inpageTagFormats": {
-          "items": {
-            "type": "string",
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              ""
-            ],
-            "enum": [
-              "STANDARD",
-              "IFRAME_JAVASCRIPT_INPAGE",
-              "INTERNAL_REDIRECT_INPAGE",
-              "JAVASCRIPT_INPAGE"
-            ]
-          },
-          "type": "array",
-          "description": "Tag types for regular placements. Acceptable values are: - \"STANDARD\" - \"IFRAME_JAVASCRIPT_INPAGE\" - \"INTERNAL_REDIRECT_INPAGE\" - \"JAVASCRIPT_INPAGE\" "
-        }
-      },
-      "type": "object",
-      "id": "DirectorySite"
-    },
-    "ClickThroughUrl": {
-      "description": "Click-through URL",
-      "id": "ClickThroughUrl",
-      "properties": {
-        "computedClickThroughUrl": {
-          "description": "Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows: - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field. - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field. - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field. ",
-          "type": "string"
-        },
-        "defaultLandingPage": {
-          "description": "Whether the campaign default landing page is used.",
-          "type": "boolean"
-        },
-        "customClickThroughUrl": {
-          "description": "Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.",
-          "type": "string"
-        },
-        "landingPageId": {
-          "description": "ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.",
-          "type": "string",
-          "format": "int64"
-        }
-      },
-      "type": "object"
-    },
-    "EventTagsListResponse": {
-      "id": "EventTagsListResponse",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#eventTagsListResponse\".",
-          "type": "string"
-        },
-        "eventTags": {
-          "description": "Event tag collection.",
-          "type": "array",
-          "items": {
-            "$ref": "EventTag"
-          }
-        }
-      },
-      "type": "object",
-      "description": "Event Tag List Response"
-    },
-    "ListPopulationRule": {
-      "id": "ListPopulationRule",
-      "type": "object",
-      "properties": {
-        "listPopulationClauses": {
-          "description": "Clauses that make up this list population rule. Clauses are joined by ANDs, and the clauses themselves are made up of list population terms which are joined by ORs.",
-          "items": {
-            "$ref": "ListPopulationClause"
-          },
-          "type": "array"
-        },
-        "floodlightActivityName": {
-          "type": "string",
-          "description": "Name of floodlight activity associated with this rule. This is a read-only, auto-generated field."
-        },
-        "floodlightActivityId": {
-          "description": "Floodlight activity ID associated with this rule. This field can be left blank.",
-          "format": "int64",
-          "type": "string"
-        }
-      },
-      "description": "Remarketing List Population Rule."
-    },
-    "CustomEventsBatchInsertRequest": {
-      "description": "Insert Custom Events Request.",
-      "id": "CustomEventsBatchInsertRequest",
-      "properties": {
-        "customEvents": {
-          "description": "The set of custom events to insert.",
-          "type": "array",
-          "items": {
-            "$ref": "CustomEvent"
-          }
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customEventsBatchInsertRequest\".",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "PlacementStrategy": {
-      "properties": {
-        "id": {
-          "format": "int64",
-          "description": "ID of this placement strategy. This is a read-only, auto-generated field.",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementStrategy\".",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of this placement strategy. This is a required field. It must be less than 256 characters long and unique among placement strategies of the same account.",
-          "type": "string"
-        },
-        "accountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Account ID of this placement strategy.This is a read-only field that can be left blank."
-        }
-      },
-      "id": "PlacementStrategy",
-      "description": "Contains properties of a placement strategy.",
-      "type": "object"
-    },
-    "AdvertiserLandingPagesListResponse": {
-      "id": "AdvertiserLandingPagesListResponse",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiserLandingPagesListResponse\".",
-          "type": "string"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        },
-        "landingPages": {
-          "description": "Landing page collection",
-          "items": {
-            "$ref": "LandingPage"
-          },
-          "type": "array"
-        }
-      },
-      "description": "Landing Page List Response",
-      "type": "object"
-    },
-    "ContentCategoriesListResponse": {
-      "id": "ContentCategoriesListResponse",
-      "description": "Content Category List Response",
-      "properties": {
-        "contentCategories": {
-          "description": "Content category collection.",
-          "type": "array",
-          "items": {
-            "$ref": "ContentCategory"
-          }
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#contentCategoriesListResponse\".",
-          "type": "string"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        }
-      },
-      "type": "object"
-    },
-    "TranscodeSetting": {
-      "type": "object",
-      "properties": {
-        "enabledVideoFormats": {
-          "items": {
-            "format": "int32",
-            "type": "integer"
-          },
-          "type": "array",
-          "description": "Allowlist of video formats to be served to this placement. Set this list to null or empty to serve all video formats."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#transcodeSetting\".",
-          "type": "string"
-        }
-      },
-      "description": "Transcode Settings",
-      "id": "TranscodeSetting"
-    },
-    "OrderDocument": {
-      "type": "object",
-      "properties": {
-        "signed": {
-          "description": "Whether this order document has been signed.",
-          "type": "boolean"
-        },
-        "type": {
-          "description": "Type of this order document",
-          "type": "string",
-          "enum": [
-            "PLANNING_ORDER_TYPE_INSERTION_ORDER",
-            "PLANNING_ORDER_TYPE_CHANGE_ORDER"
-          ],
-          "enumDescriptions": [
-            "",
-            ""
-          ]
-        },
-        "orderId": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID of the order from which this order document is created."
-        },
-        "advertiserId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Advertiser ID of this order document."
-        },
-        "createdInfo": {
-          "$ref": "LastModifiedInfo",
-          "description": "Information about the creation of this order document."
-        },
-        "cancelled": {
-          "type": "boolean",
-          "description": "Whether this order document is cancelled."
-        },
-        "subaccountId": {
-          "format": "int64",
-          "description": "Subaccount ID of this order document.",
-          "type": "string"
-        },
-        "accountId": {
-          "type": "string",
-          "description": "Account ID of this order document.",
-          "format": "int64"
-        },
-        "approvedByUserProfileIds": {
-          "description": "IDs of users who have approved this order document.",
-          "items": {
-            "type": "string",
-            "format": "int64"
-          },
-          "type": "array"
-        },
-        "projectId": {
-          "type": "string",
-          "description": "Project ID of this order document.",
-          "format": "int64"
-        },
-        "id": {
-          "format": "int64",
-          "description": "ID of this order document.",
-          "type": "string"
-        },
-        "lastSentTime": {
-          "format": "date-time",
-          "type": "string"
-        },
-        "effectiveDate": {
-          "format": "date",
-          "type": "string"
-        },
-        "title": {
-          "type": "string",
-          "description": "Title of this order document."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#orderDocument\"."
-        },
-        "lastSentRecipients": {
-          "items": {
-            "type": "string"
-          },
-          "description": "List of email addresses that received the last sent document.",
-          "type": "array"
-        },
-        "amendedOrderDocumentId": {
-          "description": "The amended order document ID of this order document. An order document can be created by optionally amending another order document so that the change history can be preserved.",
-          "format": "int64",
-          "type": "string"
-        }
-      },
-      "id": "OrderDocument",
-      "description": "Contains properties of a Planning order document."
-    },
-    "OrdersListResponse": {
-      "description": "Order List Response",
-      "type": "object",
-      "properties": {
-        "orders": {
-          "description": "Order collection.",
-          "items": {
-            "$ref": "Order"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#ordersListResponse\"."
-        }
-      },
-      "id": "OrdersListResponse"
-    },
-    "PlacementGroupsListResponse": {
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementGroupsListResponse\".",
-          "type": "string"
-        },
-        "placementGroups": {
-          "type": "array",
-          "items": {
-            "$ref": "PlacementGroup"
-          },
-          "description": "Placement group collection."
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        }
-      },
-      "type": "object",
-      "id": "PlacementGroupsListResponse",
-      "description": "Placement Group List Response"
-    },
-    "DirectorySiteSettings": {
-      "id": "DirectorySiteSettings",
-      "description": "Directory Site Settings",
-      "properties": {
-        "instreamVideoPlacementAccepted": {
-          "description": "Whether this site accepts in-stream video ads.",
-          "type": "boolean"
-        },
-        "dfpSettings": {
-          "description": "Directory site Ad Manager settings.",
-          "$ref": "DfpSettings"
-        },
-        "interstitialPlacementAccepted": {
-          "description": "Whether this site accepts interstitial ads.",
-          "type": "boolean"
-        },
-        "activeViewOptOut": {
-          "type": "boolean",
-          "description": "Whether this directory site has disabled active view creatives."
-        }
-      },
-      "type": "object"
-    },
-    "UserRole": {
-      "id": "UserRole",
-      "description": "Contains properties of auser role, which is used to manage user access.",
-      "type": "object",
-      "properties": {
-        "permissions": {
-          "items": {
-            "$ref": "UserRolePermission"
-          },
-          "description": "List of permissions associated with this user role.",
-          "type": "array"
-        },
-        "defaultUserRole": {
-          "type": "boolean",
-          "description": "Whether this is a default user role. Default user roles are created by the system for the account/subaccount and cannot be modified or deleted. Each default user role comes with a basic set of preassigned permissions."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRole\".",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of this user role. This is a required field. Must be less than 256 characters long. If this user role is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this user role is a top-level user role, and the name must be unique among top-level user roles of the same account.",
-          "type": "string"
-        },
-        "accountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Account ID of this user role. This is a read-only field that can be left blank."
-        },
-        "parentUserRoleId": {
-          "format": "int64",
-          "description": "ID of the user role that this user role is based on or copied from. This is a required field.",
-          "type": "string"
-        },
-        "subaccountId": {
-          "description": "Subaccount ID of this user role. This is a read-only field that can be left blank.",
-          "type": "string",
-          "format": "int64"
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of this user role. This is a read-only, auto-generated field.",
-          "format": "int64"
-        }
-      }
-    },
-    "CustomEventClickAnnotation": {
-      "properties": {
-        "gclid": {
-          "description": "The Google click ID. Use this field to annotate the click associated with the gclid.",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customEventClickAnnotation\"."
-        }
-      },
-      "id": "CustomEventClickAnnotation",
-      "description": "Annotate a click event.",
-      "type": "object"
-    },
-    "CountriesListResponse": {
-      "properties": {
-        "countries": {
-          "items": {
-            "$ref": "Country"
-          },
-          "description": "Country collection.",
-          "type": "array"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#countriesListResponse\".",
-          "type": "string"
-        }
-      },
-      "description": "Country List Response",
-      "type": "object",
-      "id": "CountriesListResponse"
-    },
-    "Size": {
-      "type": "object",
-      "description": "Represents the dimensions of ads, placements, creatives, or creative assets.",
-      "id": "Size",
-      "properties": {
-        "iab": {
-          "type": "boolean",
-          "description": "IAB standard size. This is a read-only, auto-generated field."
-        },
-        "id": {
-          "description": "ID of this size. This is a read-only, auto-generated field.",
-          "format": "int64",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#size\".",
-          "type": "string"
-        },
-        "height": {
-          "format": "int32",
-          "description": "Height of this size. Acceptable values are 0 to 32767, inclusive.",
-          "type": "integer"
-        },
-        "width": {
-          "format": "int32",
-          "description": "Width of this size. Acceptable values are 0 to 32767, inclusive.",
-          "type": "integer"
-        }
-      }
-    },
-    "TagSettings": {
-      "description": "Dynamic and Image Tag Settings.",
-      "properties": {
-        "dynamicTagEnabled": {
-          "description": "Whether dynamic floodlight tags are enabled.",
-          "type": "boolean"
-        },
-        "imageTagEnabled": {
-          "type": "boolean",
-          "description": "Whether image tags are enabled."
-        }
-      },
-      "id": "TagSettings",
-      "type": "object"
-    },
-    "PostalCodesListResponse": {
-      "properties": {
-        "postalCodes": {
-          "description": "Postal code collection.",
-          "type": "array",
-          "items": {
-            "$ref": "PostalCode"
-          }
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#postalCodesListResponse\".",
-          "type": "string"
-        }
-      },
-      "id": "PostalCodesListResponse",
-      "type": "object",
-      "description": "Postal Code List Response"
-    },
-    "CampaignsListResponse": {
-      "description": "Campaign List Response",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaignsListResponse\"."
-        },
-        "campaigns": {
-          "items": {
-            "$ref": "Campaign"
-          },
-          "type": "array",
-          "description": "Campaign collection."
-        }
-      },
-      "id": "CampaignsListResponse",
-      "type": "object"
-    },
-    "UserRolePermissionGroup": {
-      "description": "Represents a grouping of related user role permissions.",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Name of this user role permission group."
-        },
-        "id": {
-          "description": "ID of this user role permission.",
-          "format": "int64",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolePermissionGroup\".",
-          "type": "string"
-        }
-      },
-      "id": "UserRolePermissionGroup",
-      "type": "object"
-    },
-    "PostalCode": {
-      "id": "PostalCode",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "ID of this postal code."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#postalCode\".",
-          "type": "string"
-        },
-        "countryDartId": {
-          "description": "DART ID of the country to which this postal code belongs.",
-          "type": "string",
-          "format": "int64"
-        },
-        "countryCode": {
-          "description": "Country code of the country to which this postal code belongs.",
-          "type": "string"
-        },
-        "code": {
-          "type": "string",
-          "description": "Postal code. This is equivalent to the id field."
-        }
-      },
-      "type": "object",
-      "description": "Contains information about a postal code that can be targeted by ads."
-    },
-    "RichMediaExitOverride": {
-      "id": "RichMediaExitOverride",
-      "description": "Rich Media Exit Override.",
-      "type": "object",
-      "properties": {
-        "enabled": {
-          "type": "boolean",
-          "description": "Whether to use the clickThroughUrl. If false, the creative-level exit will be used."
-        },
-        "clickThroughUrl": {
-          "$ref": "ClickThroughUrl",
-          "description": "Click-through URL of this rich media exit override. Applicable if the enabled field is set to true."
-        },
-        "exitId": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID for the override to refer to a specific exit in the creative."
-        }
-      }
-    },
-    "ChangeLogsListResponse": {
-      "properties": {
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        },
-        "changeLogs": {
-          "type": "array",
-          "items": {
-            "$ref": "ChangeLog"
-          },
-          "description": "Change log collection."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#changeLogsListResponse\"."
-        }
-      },
-      "id": "ChangeLogsListResponse",
-      "type": "object",
-      "description": "Change Log List Response"
-    },
-    "PlacementsGenerateTagsResponse": {
-      "properties": {
-        "placementTags": {
-          "type": "array",
-          "items": {
-            "$ref": "PlacementTag"
-          },
-          "description": "Set of generated tags for the specified placements."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementsGenerateTagsResponse\"."
-        }
-      },
-      "id": "PlacementsGenerateTagsResponse",
-      "description": "Placement GenerateTags Response",
-      "type": "object"
-    },
-    "AccountUserProfilesListResponse": {
-      "properties": {
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountUserProfilesListResponse\"."
-        },
-        "accountUserProfiles": {
-          "description": "Account user profile collection.",
-          "type": "array",
-          "items": {
-            "$ref": "AccountUserProfile"
-          }
-        }
-      },
-      "type": "object",
-      "id": "AccountUserProfilesListResponse",
-      "description": "Account User Profile List Response"
-    },
-    "Advertiser": {
-      "properties": {
-        "advertiserGroupId": {
-          "description": "ID of the advertiser group this advertiser belongs to. You can group advertisers for reporting purposes, allowing you to see aggregated information for all advertisers in each group.",
-          "type": "string",
-          "format": "int64"
-        },
-        "idDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of this advertiser. This is a read-only, auto-generated field."
-        },
-        "floodlightConfigurationId": {
-          "format": "int64",
-          "description": "Floodlight configuration ID of this advertiser. The floodlight configuration ID will be created automatically, so on insert this field should be left blank. This field can be set to another advertiser's floodlight configuration ID in order to share that advertiser's floodlight configuration with this advertiser, so long as: - This advertiser's original floodlight configuration is not already associated with floodlight activities or floodlight activity groups. - This advertiser's original floodlight configuration is not already shared with another advertiser. ",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of this advertiser. This is a required field and must be less than 256 characters long and unique among advertisers of the same account.",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiser\".",
-          "type": "string"
-        },
-        "defaultClickThroughEventTagId": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID of the click-through event tag to apply by default to the landing pages of this advertiser's campaigns."
-        },
-        "clickThroughUrlSuffix": {
-          "description": "Suffix added to click-through URL of ad creative associations under this advertiser. Must be less than 129 characters long.",
-          "type": "string"
-        },
-        "status": {
-          "description": "Status of this advertiser.",
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "enum": [
-            "APPROVED",
-            "ON_HOLD"
-          ],
-          "type": "string"
-        },
-        "defaultEmail": {
-          "description": "Default email address used in sender field for tag emails.",
-          "type": "string"
-        },
-        "accountId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Account ID of this advertiser.This is a read-only field that can be left blank."
-        },
-        "originalFloodlightConfigurationId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Original floodlight configuration before any sharing occurred. Set the floodlightConfigurationId of this advertiser to originalFloodlightConfigurationId to unshare the advertiser's current floodlight configuration. You cannot unshare an advertiser's floodlight configuration if the shared configuration has activities associated with any campaign or placement."
-        },
-        "suspended": {
-          "type": "boolean",
-          "description": "Suspension status of this advertiser."
-        },
-        "subaccountId": {
-          "description": "Subaccount ID of this advertiser.This is a read-only field that can be left blank.",
-          "format": "int64",
-          "type": "string"
-        },
-        "floodlightConfigurationIdDimensionValue": {
-          "description": "Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "id": {
-          "description": "ID of this advertiser. This is a read-only, auto-generated field.",
-          "type": "string",
-          "format": "int64"
-        }
-      },
-      "description": "Contains properties of a Campaign Manager advertiser.",
-      "type": "object",
-      "id": "Advertiser"
-    },
-    "AudienceSegment": {
-      "type": "object",
-      "properties": {
-        "id": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID of this audience segment. This is a read-only, auto-generated field."
-        },
-        "allocation": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Weight allocated to this segment. The weight assigned will be understood in proportion to the weights assigned to other segments in the same segment group. Acceptable values are 1 to 1000, inclusive."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this audience segment. This is a required field and must be less than 65 characters long."
-        }
-      },
-      "description": "Audience Segment.",
-      "id": "AudienceSegment"
-    },
-    "LanguageTargeting": {
-      "description": "Language Targeting.",
-      "type": "object",
-      "properties": {
-        "languages": {
-          "items": {
-            "$ref": "Language"
-          },
-          "type": "array",
-          "description": "Languages that this ad targets. For each language only languageId is required. The other fields are populated automatically when the ad is inserted or updated."
-        }
-      },
-      "id": "LanguageTargeting"
-    },
-    "BrowsersListResponse": {
-      "description": "Browser List Response",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#browsersListResponse\"."
-        },
-        "browsers": {
-          "type": "array",
-          "items": {
-            "$ref": "Browser"
-          },
-          "description": "Browser collection."
-        }
-      },
-      "type": "object",
-      "id": "BrowsersListResponse"
-    },
-    "UserProfileList": {
-      "id": "UserProfileList",
-      "properties": {
-        "items": {
-          "description": "The user profiles returned in this response.",
-          "type": "array",
-          "items": {
-            "$ref": "UserProfile"
-          }
-        },
-        "etag": {
-          "type": "string",
-          "description": "Etag of this resource."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userProfileList\".",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Represents the list of user profiles."
-    },
-    "OperatingSystemsListResponse": {
-      "description": "Operating System List Response",
-      "id": "OperatingSystemsListResponse",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#operatingSystemsListResponse\".",
-          "type": "string"
-        },
-        "operatingSystems": {
-          "items": {
-            "$ref": "OperatingSystem"
-          },
-          "description": "Operating system collection.",
-          "type": "array"
-        }
-      },
-      "type": "object"
-    },
-    "SiteVideoSettings": {
-      "properties": {
-        "obaEnabled": {
-          "description": "Whether OBA icons are enabled for this placement.",
-          "type": "boolean"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#siteVideoSettings\"."
-        },
-        "orientation": {
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "description": "Orientation of a site template used for video. This will act as default for new placements created under this site.",
-          "enum": [
-            "ANY",
-            "LANDSCAPE",
-            "PORTRAIT"
-          ],
-          "type": "string"
-        },
-        "obaSettings": {
-          "description": "Settings for the OBA icon of video creatives served to this site. This will act as default for new placements created under this site.",
-          "$ref": "ObaIcon"
-        },
-        "companionSettings": {
-          "$ref": "SiteCompanionSetting",
-          "description": "Settings for the companion creatives of video creatives served to this site."
-        },
-        "skippableSettings": {
-          "description": "Settings for the skippability of video creatives served to this site. This will act as default for new placements created under this site.",
-          "$ref": "SiteSkippableSetting"
-        },
-        "transcodeSettings": {
-          "description": "Settings for the transcodes of video creatives served to this site. This will act as default for new placements created under this site.",
-          "$ref": "SiteTranscodeSetting"
-        }
-      },
-      "type": "object",
-      "id": "SiteVideoSettings",
-      "description": "Video Settings"
-    },
-    "ChangeLog": {
-      "properties": {
-        "id": {
-          "format": "int64",
-          "description": "ID of this change log.",
-          "type": "string"
-        },
-        "oldValue": {
-          "type": "string",
-          "description": "Old value of the object field."
-        },
-        "userProfileId": {
-          "description": "ID of the user who modified the object.",
-          "format": "int64",
-          "type": "string"
-        },
-        "userProfileName": {
-          "description": "User profile name of the user who modified the object.",
-          "type": "string"
-        },
-        "objectId": {
-          "format": "int64",
-          "description": "ID of the object of this change log. The object could be a campaign, placement, ad, or other type.",
-          "type": "string"
-        },
-        "accountId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Account ID of the modified object."
-        },
-        "action": {
-          "description": "Action which caused the change.",
-          "type": "string"
-        },
-        "newValue": {
-          "type": "string",
-          "description": "New value of the object field."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#changeLog\".",
-          "type": "string"
-        },
-        "subaccountId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Subaccount ID of the modified object."
-        },
-        "fieldName": {
-          "description": "Field name of the object which changed.",
-          "type": "string"
-        },
-        "changeTime": {
-          "format": "date-time",
-          "type": "string"
-        },
-        "transactionId": {
-          "description": "Transaction ID of this change log. When a single API call results in many changes, each change will have a separate ID in the change log but will share the same transactionId.",
-          "format": "int64",
-          "type": "string"
-        },
-        "objectType": {
-          "type": "string",
-          "description": "Object type of the change log."
-        }
-      },
-      "description": "Describes a change that a user has made to a resource.",
-      "id": "ChangeLog",
-      "type": "object"
-    },
-    "SitesListResponse": {
-      "id": "SitesListResponse",
-      "type": "object",
-      "description": "Site List Response",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#sitesListResponse\".",
-          "type": "string"
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        },
-        "sites": {
-          "items": {
-            "$ref": "Site"
-          },
-          "description": "Site collection.",
-          "type": "array"
-        }
-      }
-    },
-    "CustomEventStatus": {
-      "description": "The original custom event that was inserted and whether there were any errors.",
-      "id": "CustomEventStatus",
-      "type": "object",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customEventStatus\"."
-        },
-        "errors": {
-          "items": {
-            "$ref": "CustomEventError"
-          },
-          "type": "array",
-          "description": "A list of errors related to this custom event."
-        },
-        "customEvent": {
-          "$ref": "CustomEvent",
-          "description": "The original custom event that was inserted."
-        }
-      }
-    },
-    "CreativeAssetSelection": {
-      "type": "object",
-      "id": "CreativeAssetSelection",
-      "description": "Encapsulates the list of rules for asset selection and a default asset in case none of the rules match. Applicable to INSTREAM_VIDEO creatives.",
-      "properties": {
-        "defaultAssetId": {
-          "format": "int64",
-          "type": "string",
-          "description": "A creativeAssets[].id. This should refer to one of the parent assets in this creative, and will be served if none of the rules match. This is a required field."
-        },
-        "rules": {
-          "description": "Rules determine which asset will be served to a viewer. Rules will be evaluated in the order in which they are stored in this list. This list must contain at least one rule. Applicable to INSTREAM_VIDEO creatives.",
-          "items": {
-            "$ref": "Rule"
-          },
-          "type": "array"
-        }
-      }
-    },
-    "CustomViewabilityMetric": {
-      "id": "CustomViewabilityMetric",
-      "type": "object",
-      "description": "Custom Viewability Metric",
-      "properties": {
-        "configuration": {
-          "$ref": "CustomViewabilityMetricConfiguration",
-          "description": "Configuration of the custom viewability metric."
-        },
-        "id": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of the custom viewability metric."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of the custom viewability metric."
-        }
-      }
-    },
-    "ThirdPartyAuthenticationToken": {
-      "description": "Third Party Authentication Token",
-      "id": "ThirdPartyAuthenticationToken",
-      "properties": {
-        "name": {
-          "description": "Name of the third-party authentication token.",
-          "type": "string"
-        },
-        "value": {
-          "description": "Value of the third-party authentication token. This is a read-only, auto-generated field.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "ReportCompatibleFields": {
-      "properties": {
-        "dimensionFilters": {
-          "type": "array",
-          "description": "Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.",
-          "items": {
-            "$ref": "Dimension"
-          }
-        },
-        "dimensions": {
-          "type": "array",
-          "items": {
-            "$ref": "Dimension"
-          },
-          "description": "Dimensions which are compatible to be selected in the \"dimensions\" section of the report."
-        },
-        "pivotedActivityMetrics": {
-          "type": "array",
-          "items": {
-            "$ref": "Metric"
-          },
-          "description": "Metrics which are compatible to be selected as activity metrics to pivot on in the \"activities\" section of the report."
-        },
-        "kind": {
-          "description": "The kind of resource this is, in this case dfareporting#reportCompatibleFields.",
-          "type": "string"
-        },
-        "metrics": {
-          "items": {
-            "$ref": "Metric"
-          },
-          "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.",
-          "type": "array"
-        }
-      },
-      "description": "Represents fields that are compatible to be selected for a report of type \"STANDARD\".",
-      "id": "ReportCompatibleFields",
-      "type": "object"
-    },
-    "PlatformType": {
-      "type": "object",
-      "id": "PlatformType",
-      "description": "Contains information about a platform type that can be targeted by ads.",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#platformType\".",
-          "type": "string"
-        },
-        "id": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of this platform type."
-        },
-        "name": {
-          "description": "Name of this platform type.",
-          "type": "string"
-        }
-      }
-    },
-    "DeepLink": {
-      "id": "DeepLink",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#deepLink\"."
-        },
-        "remarketingListIds": {
-          "items": {
-            "type": "string",
-            "format": "int64"
-          },
-          "description": "Ads served to users on these remarketing lists will use this deep link. Applicable when mobileApp.directory is APPLE_APP_STORE.",
-          "type": "array"
-        },
-        "fallbackUrl": {
-          "description": "The fallback URL. This URL will be served to users who do not have the mobile app installed.",
-          "type": "string"
-        },
-        "appUrl": {
-          "type": "string",
-          "description": "The URL of the mobile app being linked to."
-        },
-        "mobileApp": {
-          "$ref": "MobileApp",
-          "description": "The mobile app targeted by this deep link."
-        }
-      },
-      "description": "Contains information about a landing page deep link.",
-      "type": "object"
-    },
-    "CreativeRotation": {
-      "description": "Creative Rotation.",
-      "type": "object",
-      "id": "CreativeRotation",
-      "properties": {
-        "creativeAssignments": {
-          "type": "array",
-          "items": {
-            "$ref": "CreativeAssignment"
-          },
-          "description": "Creative assignments in this creative rotation."
-        },
-        "creativeOptimizationConfigurationId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Creative optimization configuration that is used by this ad. It should refer to one of the existing optimization configurations in the ad's campaign. If it is unset or set to 0, then the campaign's default optimization configuration will be used for this ad."
-        },
-        "weightCalculationStrategy": {
-          "type": "string",
-          "enum": [
-            "WEIGHT_STRATEGY_EQUAL",
-            "WEIGHT_STRATEGY_CUSTOM",
-            "WEIGHT_STRATEGY_HIGHEST_CTR",
-            "WEIGHT_STRATEGY_OPTIMIZED"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "Strategy for calculating weights. Used with CREATIVE_ROTATION_TYPE_RANDOM."
-        },
-        "type": {
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "description": "Type of creative rotation. Can be used to specify whether to use sequential or random rotation.",
-          "type": "string",
-          "enum": [
-            "CREATIVE_ROTATION_TYPE_SEQUENTIAL",
-            "CREATIVE_ROTATION_TYPE_RANDOM"
-          ]
-        }
-      }
-    },
-    "GeoTargeting": {
-      "type": "object",
-      "properties": {
-        "excludeCountries": {
-          "type": "boolean",
-          "description": "Whether or not to exclude the countries in the countries field from targeting. If false, the countries field refers to countries which will be targeted by the ad."
-        },
-        "metros": {
-          "description": "Metros to be targeted. For each metro only dmaId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a metro, do not target or exclude the country of the metro.",
-          "items": {
-            "$ref": "Metro"
-          },
-          "type": "array"
-        },
-        "countries": {
-          "description": "Countries to be targeted or excluded from targeting, depending on the setting of the excludeCountries field. For each country only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting or excluding a country, do not target regions, cities, metros, or postal codes in the same country.",
-          "items": {
-            "$ref": "Country"
-          },
-          "type": "array"
-        },
-        "regions": {
-          "items": {
-            "$ref": "Region"
-          },
-          "type": "array",
-          "description": "Regions to be targeted. For each region only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a region, do not target or exclude the country of the region."
-        },
-        "postalCodes": {
-          "type": "array",
-          "description": "Postal codes to be targeted. For each postal code only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a postal code, do not target or exclude the country of the postal code.",
-          "items": {
-            "$ref": "PostalCode"
-          }
-        },
-        "cities": {
-          "type": "array",
-          "description": "Cities to be targeted. For each city only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a city, do not target or exclude the country of the city, and do not target the metro or region of the city.",
-          "items": {
-            "$ref": "City"
-          }
-        }
-      },
-      "id": "GeoTargeting",
-      "description": "Geographical Targeting."
-    },
-    "CampaignCreativeAssociationsListResponse": {
-      "type": "object",
-      "id": "CampaignCreativeAssociationsListResponse",
-      "description": "Campaign Creative Association List Response",
-      "properties": {
-        "campaignCreativeAssociations": {
-          "type": "array",
-          "items": {
-            "$ref": "CampaignCreativeAssociation"
-          },
-          "description": "Campaign creative association collection"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaignCreativeAssociationsListResponse\".",
-          "type": "string"
-        }
-      }
-    },
-    "AdSlot": {
-      "description": "Ad Slot",
-      "properties": {
-        "height": {
-          "description": "Height of this ad slot.",
-          "format": "int64",
-          "type": "string"
-        },
-        "width": {
-          "format": "int64",
-          "type": "string",
-          "description": "Width of this ad slot."
-        },
-        "comment": {
-          "type": "string",
-          "description": "Comment for this ad slot."
-        },
-        "linkedPlacementId": {
-          "format": "int64",
-          "description": "ID of the placement from an external platform that is linked to this ad slot.",
-          "type": "string"
-        },
-        "primary": {
-          "type": "boolean",
-          "description": "Primary ad slot of a roadblock inventory item."
-        },
-        "paymentSourceType": {
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "description": "Payment source type of this ad slot.",
-          "enum": [
-            "PLANNING_PAYMENT_SOURCE_TYPE_AGENCY_PAID",
-            "PLANNING_PAYMENT_SOURCE_TYPE_PUBLISHER_PAID"
-          ],
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of this ad slot.",
-          "type": "string"
-        },
-        "compatibility": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "Ad slot compatibility. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop, mobile devices or in mobile apps for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are for rendering in mobile apps. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard.",
-          "enum": [
-            "DISPLAY",
-            "DISPLAY_INTERSTITIAL",
-            "APP",
-            "APP_INTERSTITIAL",
-            "IN_STREAM_VIDEO",
-            "IN_STREAM_AUDIO"
-          ],
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "AdSlot"
-    },
-    "AdsListResponse": {
-      "description": "Ad List Response",
-      "type": "object",
-      "id": "AdsListResponse",
-      "properties": {
-        "ads": {
-          "items": {
-            "$ref": "Ad"
-          },
-          "description": "Ad collection.",
-          "type": "array"
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#adsListResponse\"."
-        }
-      }
-    },
-    "DayPartTargeting": {
-      "type": "object",
-      "description": "Day Part Targeting.",
-      "properties": {
-        "userLocalTime": {
-          "type": "boolean",
-          "description": "Whether or not to use the user's local time. If false, the America/New York time zone applies."
-        },
-        "daysOfWeek": {
-          "items": {
-            "type": "string",
-            "enum": [
-              "MONDAY",
-              "TUESDAY",
-              "WEDNESDAY",
-              "THURSDAY",
-              "FRIDAY",
-              "SATURDAY",
-              "SUNDAY"
-            ],
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ]
-          },
-          "type": "array",
-          "description": "Days of the week when the ad will serve. Acceptable values are: - \"SUNDAY\" - \"MONDAY\" - \"TUESDAY\" - \"WEDNESDAY\" - \"THURSDAY\" - \"FRIDAY\" - \"SATURDAY\" "
-        },
-        "hoursOfDay": {
-          "description": "Hours of the day when the ad will serve, where 0 is midnight to 1 AM and 23 is 11 PM to midnight. Can be specified with days of week, in which case the ad would serve during these hours on the specified days. For example if Monday, Wednesday, Friday are the days of week specified and 9-10am, 3-5pm (hours 9, 15, and 16) is specified, the ad would serve Monday, Wednesdays, and Fridays at 9-10am and 3-5pm. Acceptable values are 0 to 23, inclusive.",
-          "items": {
-            "format": "int32",
-            "type": "integer"
-          },
-          "type": "array"
-        }
-      },
-      "id": "DayPartTargeting"
-    },
-    "MetrosListResponse": {
-      "properties": {
-        "metros": {
-          "items": {
-            "$ref": "Metro"
-          },
-          "type": "array",
-          "description": "Metro collection."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#metrosListResponse\"."
-        }
-      },
-      "description": "Metro List Response",
-      "type": "object",
-      "id": "MetrosListResponse"
-    },
-    "OperatingSystemVersionsListResponse": {
-      "type": "object",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#operatingSystemVersionsListResponse\".",
-          "type": "string"
-        },
-        "operatingSystemVersions": {
-          "items": {
-            "$ref": "OperatingSystemVersion"
-          },
-          "type": "array",
-          "description": "Operating system version collection."
-        }
-      },
-      "id": "OperatingSystemVersionsListResponse",
-      "description": "Operating System Version List Response"
-    },
-    "AccountPermissionGroup": {
-      "id": "AccountPermissionGroup",
-      "description": "AccountPermissionGroups contains a mapping of permission group IDs to names. A permission group is a grouping of account permissions.",
-      "properties": {
-        "id": {
-          "format": "int64",
-          "description": "ID of this account permission group.",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountPermissionGroup\"."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this account permission group."
-        }
-      },
-      "type": "object"
-    },
-    "ObaIcon": {
-      "properties": {
-        "xPosition": {
-          "description": "OBA icon x coordinate position. Accepted values are left or right.",
-          "type": "string"
-        },
-        "size": {
-          "description": "OBA icon size.",
-          "$ref": "Size"
-        },
-        "resourceUrl": {
-          "description": "OBA icon resource URL. Campaign Manager only supports image and JavaScript icons. Learn more",
-          "type": "string"
-        },
-        "iconClickTrackingUrl": {
-          "type": "string",
-          "description": "URL to track click when an OBA icon is clicked."
-        },
-        "iconClickThroughUrl": {
-          "type": "string",
-          "description": "URL to redirect to when an OBA icon is clicked."
-        },
-        "iconViewTrackingUrl": {
-          "description": "URL to track view when an OBA icon is clicked.",
-          "type": "string"
-        },
-        "yPosition": {
-          "type": "string",
-          "description": "OBA icon y coordinate position. Accepted values are top or bottom."
-        },
-        "program": {
-          "type": "string",
-          "description": "Identifies the industry initiative that the icon supports. For example, AdChoices."
-        }
-      },
-      "id": "ObaIcon",
-      "type": "object",
-      "description": "Online Behavioral Advertiser icon."
-    },
-    "CompanionSetting": {
-      "properties": {
-        "companionsDisabled": {
-          "type": "boolean",
-          "description": "Whether companions are disabled for this placement."
-        },
-        "enabledSizes": {
-          "items": {
-            "$ref": "Size"
-          },
-          "description": "Allowlist of companion sizes to be served to this placement. Set this list to null or empty to serve all companion sizes.",
-          "type": "array"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#companionSetting\".",
-          "type": "string"
-        },
-        "imageOnly": {
-          "type": "boolean",
-          "description": "Whether to serve only static images as companions."
-        }
-      },
-      "description": "Companion Settings",
-      "id": "CompanionSetting",
-      "type": "object"
-    },
-    "UserRolesListResponse": {
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolesListResponse\".",
-          "type": "string"
-        },
-        "userRoles": {
-          "type": "array",
-          "description": "User role collection.",
-          "items": {
-            "$ref": "UserRole"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        }
-      },
-      "type": "object",
-      "description": "User Role List Response",
-      "id": "UserRolesListResponse"
-    },
-    "CreativeFieldAssignment": {
-      "type": "object",
-      "description": "Creative Field Assignment.",
-      "id": "CreativeFieldAssignment",
-      "properties": {
-        "creativeFieldId": {
-          "format": "int64",
-          "description": "ID of the creative field.",
-          "type": "string"
-        },
-        "creativeFieldValueId": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of the creative field value."
-        }
-      }
-    },
-    "OmnitureSettings": {
-      "id": "OmnitureSettings",
-      "description": "Omniture Integration Settings.",
-      "type": "object",
-      "properties": {
-        "omnitureIntegrationEnabled": {
-          "description": "Whether Omniture integration is enabled. This property can be enabled only when the \"Advanced Ad Serving\" account setting is enabled.",
-          "type": "boolean"
-        },
-        "omnitureCostDataEnabled": {
-          "description": "Whether placement cost data will be sent to Omniture. This property can be enabled only if omnitureIntegrationEnabled is true.",
-          "type": "boolean"
-        }
-      }
-    },
-    "CreativeAsset": {
-      "type": "object",
-      "id": "CreativeAsset",
-      "properties": {
-        "artworkType": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "Artwork type of rich media creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.",
-          "enum": [
-            "ARTWORK_TYPE_FLASH",
-            "ARTWORK_TYPE_HTML5",
-            "ARTWORK_TYPE_MIXED",
-            "ARTWORK_TYPE_IMAGE"
-          ]
-        },
-        "progressiveServingUrl": {
-          "type": "string",
-          "description": "Progressive URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID."
-        },
-        "pushdownDuration": {
-          "description": "Pushdown duration in seconds for an asset. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable when the asset pushdown field is true, the offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height. Acceptable values are 0 to 9.99, inclusive.",
-          "type": "number",
-          "format": "float"
-        },
-        "idDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the asset. This is a read-only, auto-generated field."
-        },
-        "mediaDuration": {
-          "type": "number",
-          "format": "float",
-          "description": "Detected duration for audio or video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID."
-        },
-        "backupImageExit": {
-          "$ref": "CreativeCustomEvent",
-          "description": "Exit event configured for the backup image. Applicable to the following creative types: all RICH_MEDIA."
-        },
-        "zIndex": {
-          "type": "integer",
-          "description": "zIndex value of an asset. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable to assets whose displayType is NOT one of the following types: ASSET_DISPLAY_TYPE_INPAGE or ASSET_DISPLAY_TYPE_OVERLAY. Acceptable values are -999999999 to 999999999, inclusive.",
-          "format": "int32"
-        },
-        "size": {
-          "description": "Size associated with this creative asset. This is a required field when applicable; however for IMAGE and FLASH_INPAGE, creatives if left blank, this field will be automatically set using the actual size of the associated image asset. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
-          "$ref": "Size"
-        },
-        "frameRate": {
-          "format": "float",
-          "type": "number",
-          "description": "Video frame rate for video asset in frames per second. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID."
-        },
-        "bitRate": {
-          "description": "Detected bit-rate for audio or video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "orientation": {
-          "type": "string",
-          "description": "Orientation of video asset. This is a read-only, auto-generated field.",
-          "enum": [
-            "LANDSCAPE",
-            "PORTRAIT",
-            "SQUARE"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ]
-        },
-        "childAssetType": {
-          "type": "string",
-          "description": "Rich media child asset type. This is a read-only field. Applicable to the following creative types: all VPAID.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "CHILD_ASSET_TYPE_FLASH",
-            "CHILD_ASSET_TYPE_VIDEO",
-            "CHILD_ASSET_TYPE_IMAGE",
-            "CHILD_ASSET_TYPE_DATA"
-          ]
-        },
-        "assetIdentifier": {
-          "$ref": "CreativeAssetId",
-          "description": "Identifier of this asset. This is the same identifier returned during creative asset insert operation. This is a required field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT."
-        },
-        "collapsedSize": {
-          "description": "Size of an asset when collapsed. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN.",
-          "$ref": "Size"
-        },
-        "positionLeftUnit": {
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "OFFSET_UNIT_PIXEL",
-            "OFFSET_UNIT_PERCENT",
-            "OFFSET_UNIT_PIXEL_FROM_CENTER"
-          ],
-          "description": "Offset left unit for an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.",
-          "type": "string"
-        },
-        "originalBackup": {
-          "type": "boolean",
-          "description": "Whether the backup asset is original or changed by the user in Campaign Manager. Applicable to the following creative types: all RICH_MEDIA."
-        },
-        "verticallyLocked": {
-          "description": "Whether the asset is vertically locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.",
-          "type": "boolean"
-        },
-        "windowMode": {
-          "description": "Window mode options for flash assets. Applicable to the following creative types: FLASH_INPAGE, RICH_MEDIA_DISPLAY_EXPANDING, RICH_MEDIA_IM_EXPAND, RICH_MEDIA_DISPLAY_BANNER, and RICH_MEDIA_INPAGE_FLOATING.",
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "OPAQUE",
-            "WINDOW",
-            "TRANSPARENT"
-          ]
-        },
-        "durationType": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "description": "Duration type for which an asset will be displayed. Applicable to the following creative types: all RICH_MEDIA.",
-          "enum": [
-            "ASSET_DURATION_TYPE_AUTO",
-            "ASSET_DURATION_TYPE_NONE",
-            "ASSET_DURATION_TYPE_CUSTOM"
-          ]
-        },
-        "actionScript3": {
-          "description": "Whether ActionScript3 is enabled for the flash asset. This is a read-only field. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
-          "type": "boolean"
-        },
-        "zipFilename": {
-          "description": "File name of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.",
-          "type": "string"
-        },
-        "duration": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Duration in seconds for which an asset will be displayed. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and VPAID_LINEAR_VIDEO. Value must be greater than or equal to 1."
-        },
-        "horizontallyLocked": {
-          "description": "Whether the asset is horizontally locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.",
-          "type": "boolean"
-        },
-        "expandedDimension": {
-          "description": "Detected expanded dimension for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.",
-          "$ref": "Size"
-        },
-        "displayType": {
-          "enum": [
-            "ASSET_DISPLAY_TYPE_INPAGE",
-            "ASSET_DISPLAY_TYPE_FLOATING",
-            "ASSET_DISPLAY_TYPE_OVERLAY",
-            "ASSET_DISPLAY_TYPE_EXPANDING",
-            "ASSET_DISPLAY_TYPE_FLASH_IN_FLASH",
-            "ASSET_DISPLAY_TYPE_FLASH_IN_FLASH_EXPANDING",
-            "ASSET_DISPLAY_TYPE_PEEL_DOWN",
-            "ASSET_DISPLAY_TYPE_VPAID_LINEAR",
-            "ASSET_DISPLAY_TYPE_VPAID_NON_LINEAR",
-            "ASSET_DISPLAY_TYPE_BACKDROP"
-          ],
-          "description": "Type of rich media asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string"
-        },
-        "detectedFeatures": {
-          "items": {
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ],
-            "enum": [
-              "CSS_FONT_FACE",
-              "CSS_BACKGROUND_SIZE",
-              "CSS_BORDER_IMAGE",
-              "CSS_BORDER_RADIUS",
-              "CSS_BOX_SHADOW",
-              "CSS_FLEX_BOX",
-              "CSS_HSLA",
-              "CSS_MULTIPLE_BGS",
-              "CSS_OPACITY",
-              "CSS_RGBA",
-              "CSS_TEXT_SHADOW",
-              "CSS_ANIMATIONS",
-              "CSS_COLUMNS",
-              "CSS_GENERATED_CONTENT",
-              "CSS_GRADIENTS",
-              "CSS_REFLECTIONS",
-              "CSS_TRANSFORMS",
-              "CSS_TRANSFORMS3D",
-              "CSS_TRANSITIONS",
-              "APPLICATION_CACHE",
-              "CANVAS",
-              "CANVAS_TEXT",
-              "DRAG_AND_DROP",
-              "HASH_CHANGE",
-              "HISTORY",
-              "AUDIO",
-              "VIDEO",
-              "INDEXED_DB",
-              "INPUT_ATTR_AUTOCOMPLETE",
-              "INPUT_ATTR_AUTOFOCUS",
-              "INPUT_ATTR_LIST",
-              "INPUT_ATTR_PLACEHOLDER",
-              "INPUT_ATTR_MAX",
-              "INPUT_ATTR_MIN",
-              "INPUT_ATTR_MULTIPLE",
-              "INPUT_ATTR_PATTERN",
-              "INPUT_ATTR_REQUIRED",
-              "INPUT_ATTR_STEP",
-              "INPUT_TYPE_SEARCH",
-              "INPUT_TYPE_TEL",
-              "INPUT_TYPE_URL",
-              "INPUT_TYPE_EMAIL",
-              "INPUT_TYPE_DATETIME",
-              "INPUT_TYPE_DATE",
-              "INPUT_TYPE_MONTH",
-              "INPUT_TYPE_WEEK",
-              "INPUT_TYPE_TIME",
-              "INPUT_TYPE_DATETIME_LOCAL",
-              "INPUT_TYPE_NUMBER",
-              "INPUT_TYPE_RANGE",
-              "INPUT_TYPE_COLOR",
-              "LOCAL_STORAGE",
-              "POST_MESSAGE",
-              "SESSION_STORAGE",
-              "WEB_SOCKETS",
-              "WEB_SQL_DATABASE",
-              "WEB_WORKERS",
-              "GEO_LOCATION",
-              "INLINE_SVG",
-              "SMIL",
-              "SVG_HREF",
-              "SVG_CLIP_PATHS",
-              "TOUCH",
-              "WEBGL",
-              "SVG_FILTERS",
-              "SVG_FE_IMAGE"
-            ],
-            "type": "string"
-          },
-          "type": "array",
-          "description": "List of feature dependencies for the creative asset that are detected by Campaign Manager. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative correctly. This is a read-only, auto-generated field. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE."
-        },
-        "zipFilesize": {
-          "description": "Size of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.",
-          "type": "string"
-        },
-        "audioBitRate": {
-          "format": "int32",
-          "description": "Audio stream bit rate in kbps. This is a read-only field. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID.",
-          "type": "integer"
-        },
-        "startTimeType": {
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "enum": [
-            "ASSET_START_TIME_TYPE_NONE",
-            "ASSET_START_TIME_TYPE_CUSTOM"
-          ],
-          "description": "Initial wait time type before making the asset visible. Applicable to the following creative types: all RICH_MEDIA.",
-          "type": "string"
-        },
-        "mimeType": {
-          "type": "string",
-          "description": "Detected MIME type for audio or video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID."
-        },
-        "fileSize": {
-          "format": "int64",
-          "type": "string",
-          "description": "File size associated with this creative asset. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT."
-        },
-        "role": {
-          "description": "Role of the asset in relation to creative. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT. This is a required field. PRIMARY applies to DISPLAY, FLASH_INPAGE, HTML5_BANNER, IMAGE, DISPLAY_IMAGE_GALLERY, all RICH_MEDIA (which may contain multiple primary assets), and all VPAID creatives. BACKUP_IMAGE applies to FLASH_INPAGE, HTML5_BANNER, all RICH_MEDIA, and all VPAID creatives. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE. ADDITIONAL_IMAGE and ADDITIONAL_FLASH apply to FLASH_INPAGE creatives. OTHER refers to assets from sources other than Campaign Manager, such as Studio uploaded assets, applicable to all RICH_MEDIA and all VPAID creatives. PARENT_VIDEO refers to videos uploaded by the user in Campaign Manager and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives. TRANSCODED_VIDEO refers to videos transcoded by Campaign Manager from PARENT_VIDEO assets and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives. ALTERNATE_VIDEO refers to the Campaign Manager representation of child asset videos from Studio, and is applicable to VPAID_LINEAR_VIDEO creatives. These cannot be added or removed within Campaign Manager. For VPAID_LINEAR_VIDEO creatives, PARENT_VIDEO, TRANSCODED_VIDEO and ALTERNATE_VIDEO assets that are marked active serve as backup in case the VPAID creative cannot be served. Only PARENT_VIDEO assets can be added or removed for an INSTREAM_VIDEO or VPAID_LINEAR_VIDEO creative. PARENT_AUDIO refers to audios uploaded by the user in Campaign Manager and is applicable to INSTREAM_AUDIO creatives. TRANSCODED_AUDIO refers to audios transcoded by Campaign Manager from PARENT_AUDIO assets and is applicable to INSTREAM_AUDIO creatives. ",
-          "enum": [
-            "PRIMARY",
-            "BACKUP_IMAGE",
-            "ADDITIONAL_IMAGE",
-            "ADDITIONAL_FLASH",
-            "PARENT_VIDEO",
-            "TRANSCODED_VIDEO",
-            "OTHER",
-            "ALTERNATE_VIDEO",
-            "PARENT_AUDIO",
-            "TRANSCODED_AUDIO"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "sslCompliant": {
-          "description": "Whether the asset is SSL-compliant. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.",
-          "type": "boolean"
-        },
-        "position": {
-          "description": "Offset position for an asset. Applicable to the following creative types: all RICH_MEDIA.",
-          "$ref": "OffsetPosition"
-        },
-        "politeLoad": {
-          "type": "boolean",
-          "description": "Whether this asset is used as a polite load asset."
-        },
-        "positionTopUnit": {
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "Offset top unit for an asset. This is a read-only field if the asset displayType is ASSET_DISPLAY_TYPE_OVERLAY. Applicable to the following creative types: all RICH_MEDIA.",
-          "enum": [
-            "OFFSET_UNIT_PIXEL",
-            "OFFSET_UNIT_PERCENT",
-            "OFFSET_UNIT_PIXEL_FROM_CENTER"
-          ]
-        },
-        "audioSampleRate": {
-          "description": "Audio sample bit rate in hertz. This is a read-only field. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "hideFlashObjects": {
-          "description": "Whether to hide Flash objects flag for an asset. Applicable to the following creative types: all RICH_MEDIA.",
-          "type": "boolean"
-        },
-        "streamingServingUrl": {
-          "type": "string",
-          "description": "Streaming URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID."
-        },
-        "flashVersion": {
-          "format": "int32",
-          "description": "Flash version of the asset. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
-          "type": "integer"
-        },
-        "pushdown": {
-          "description": "Whether the asset pushes down other content. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable when the asset offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height.",
-          "type": "boolean"
-        },
-        "transparency": {
-          "type": "boolean",
-          "description": "Whether the asset is transparent. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable to HTML5 assets."
-        },
-        "customStartTimeValue": {
-          "description": "Custom start time in seconds for making the asset visible. Applicable to the following creative types: all RICH_MEDIA. Value must be greater than or equal to 0.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "hideSelectionBoxes": {
-          "type": "boolean",
-          "description": "Whether to hide selection boxes flag for an asset. Applicable to the following creative types: all RICH_MEDIA."
-        },
-        "alignment": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "ALIGNMENT_TOP",
-            "ALIGNMENT_RIGHT",
-            "ALIGNMENT_BOTTOM",
-            "ALIGNMENT_LEFT"
-          ],
-          "description": "Possible alignments for an asset. This is a read-only field. Applicable to the following creative types: RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL ."
-        },
-        "companionCreativeIds": {
-          "items": {
-            "format": "int64",
-            "type": "string"
-          },
-          "type": "array",
-          "description": "List of companion creatives assigned to an in-stream video creative asset. Acceptable values include IDs of existing flash and image creatives. Applicable to INSTREAM_VIDEO creative type with dynamicAssetSelection set to true."
-        },
-        "additionalSizes": {
-          "items": {
-            "$ref": "Size"
-          },
-          "description": "Additional sizes associated with this creative asset. HTML5 asset generated by compatible software such as GWD will be able to support more sizes this creative asset can render.",
-          "type": "array"
-        },
-        "offset": {
-          "description": "Offset position for an asset in collapsed mode. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, only applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN.",
-          "$ref": "OffsetPosition"
-        },
-        "active": {
-          "type": "boolean",
-          "description": "Whether the video or audio asset is active. This is a read-only field for VPAID_NON_LINEAR_VIDEO assets. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID."
-        },
-        "id": {
-          "format": "int64",
-          "description": "Numeric ID of this creative asset. This is a required field and should not be modified. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.",
-          "type": "string"
-        }
-      },
-      "description": "Creative Asset."
-    },
-    "FileList": {
-      "description": "List of files for a report.",
-      "type": "object",
-      "properties": {
-        "items": {
-          "items": {
-            "$ref": "File"
-          },
-          "description": "The files returned in this response.",
-          "type": "array"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#fileList\"."
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Continuation token used to page through files. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted."
-        },
-        "etag": {
-          "description": "Etag of this resource.",
-          "type": "string"
-        }
-      },
-      "id": "FileList"
-    },
-    "CreativeGroup": {
-      "description": "Contains properties of a creative group.",
-      "type": "object",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "ID of this creative group. This is a read-only, auto-generated field.",
-          "format": "int64"
-        },
-        "advertiserIdDimensionValue": {
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "accountId": {
-          "description": "Account ID of this creative group. This is a read-only field that can be left blank.",
-          "format": "int64",
-          "type": "string"
-        },
-        "groupNumber": {
-          "type": "integer",
-          "description": "Subgroup of the creative group. Assign your creative groups to a subgroup in order to filter or manage them more easily. This field is required on insertion and is read-only after insertion. Acceptable values are 1 to 2, inclusive.",
-          "format": "int32"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeGroup\"."
-        },
-        "name": {
-          "description": "Name of this creative group. This is a required field and must be less than 256 characters long and unique among creative groups of the same advertiser.",
-          "type": "string"
-        },
-        "advertiserId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Advertiser ID of this creative group. This is a required field on insertion."
-        },
-        "subaccountId": {
-          "format": "int64",
-          "description": "Subaccount ID of this creative group. This is a read-only field that can be left blank.",
-          "type": "string"
-        }
-      },
-      "id": "CreativeGroup"
-    },
-    "LastModifiedInfo": {
-      "id": "LastModifiedInfo",
-      "type": "object",
-      "description": "Modification timestamp.",
-      "properties": {
-        "time": {
-          "type": "string",
-          "format": "int64",
-          "description": "Timestamp of the last change in milliseconds since epoch."
-        }
-      }
-    },
-    "CustomEventImpressionAnnotation": {
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customEventImpressionAnnotation\"."
-        },
-        "pathImpressionId": {
-          "type": "string",
-          "description": "The path impression ID. Use this field to annotate the impression associated with the pathImpressionId."
-        }
-      },
-      "id": "CustomEventImpressionAnnotation",
-      "description": "Annotate an impression.",
-      "type": "object"
-    },
-    "AdvertiserGroup": {
-      "type": "object",
-      "description": "Groups advertisers together so that reports can be generated for the entire group at once.",
-      "id": "AdvertiserGroup",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "ID of this advertiser group. This is a read-only, auto-generated field.",
-          "format": "int64"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiserGroup\"."
-        },
-        "name": {
-          "description": "Name of this advertiser group. This is a required field and must be less than 256 characters long and unique among advertiser groups of the same account.",
-          "type": "string"
-        },
-        "accountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Account ID of this advertiser group. This is a read-only field that can be left blank."
-        }
-      }
-    },
-    "FloodlightConfigurationsListResponse": {
-      "id": "FloodlightConfigurationsListResponse",
-      "type": "object",
-      "properties": {
-        "floodlightConfigurations": {
-          "type": "array",
-          "items": {
-            "$ref": "FloodlightConfiguration"
-          },
-          "description": "Floodlight configuration collection."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightConfigurationsListResponse\"."
-        }
-      },
-      "description": "Floodlight Configuration List Response"
-    },
-    "AdvertiserGroupsListResponse": {
-      "id": "AdvertiserGroupsListResponse",
-      "description": "Advertiser Group List Response",
-      "type": "object",
-      "properties": {
-        "advertiserGroups": {
-          "type": "array",
-          "items": {
-            "$ref": "AdvertiserGroup"
-          },
-          "description": "Advertiser group collection."
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiserGroupsListResponse\"."
-        }
-      }
-    },
-    "RemarketingListsListResponse": {
-      "type": "object",
-      "properties": {
-        "remarketingLists": {
-          "type": "array",
-          "description": "Remarketing list collection.",
-          "items": {
-            "$ref": "RemarketingList"
-          }
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#remarketingListsListResponse\"."
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        }
-      },
-      "id": "RemarketingListsListResponse",
-      "description": "Remarketing list response"
-    },
-    "DirectorySitesListResponse": {
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#directorySitesListResponse\"."
-        },
-        "directorySites": {
-          "type": "array",
-          "items": {
-            "$ref": "DirectorySite"
-          },
-          "description": "Directory site collection."
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Directory Site List Response",
-      "id": "DirectorySitesListResponse"
-    },
-    "ListPopulationClause": {
-      "type": "object",
-      "description": "A group clause made up of list population terms representing constraints joined by ORs.",
-      "properties": {
-        "terms": {
-          "type": "array",
-          "description": "Terms of this list population clause. Each clause is made up of list population terms representing constraints and are joined by ORs.",
-          "items": {
-            "$ref": "ListPopulationTerm"
-          }
-        }
-      },
-      "id": "ListPopulationClause"
-    },
-    "Report": {
-      "properties": {
-        "ownerProfileId": {
-          "annotations": {
-            "required": [
-              "dfareporting.reports.update"
-            ]
-          },
-          "type": "string",
-          "format": "int64",
-          "description": "The user profile id of the owner of this report."
-        },
-        "kind": {
-          "description": "The kind of resource this is, in this case dfareporting#report.",
-          "type": "string"
-        },
-        "accountId": {
-          "description": "The account ID to which this report belongs.",
-          "annotations": {
-            "required": [
-              "dfareporting.reports.update"
-            ]
-          },
-          "type": "string",
-          "format": "int64"
-        },
-        "type": {
-          "annotations": {
-            "required": [
-              "dfareporting.reports.insert",
-              "dfareporting.reports.update"
-            ]
-          },
-          "description": "The type of the report.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "enum": [
-            "STANDARD",
-            "REACH",
-            "PATH_TO_CONVERSION",
-            "CROSS_DIMENSION_REACH",
-            "FLOODLIGHT",
-            "PATH",
-            "PATH_ATTRIBUTION"
-          ]
-        },
-        "criteria": {
-          "description": "The report criteria for a report of type \"STANDARD\".",
-          "properties": {
-            "dimensions": {
-              "items": {
-                "$ref": "SortedDimension"
-              },
-              "type": "array",
-              "description": "The list of standard dimensions the report should include."
-            },
-            "activities": {
-              "$ref": "Activities",
-              "description": "Activity group."
-            },
-            "dateRange": {
-              "$ref": "DateRange",
-              "description": "The date range for which this report should be run."
-            },
-            "metricNames": {
-              "items": {
-                "type": "string"
-              },
-              "type": "array",
-              "description": "The list of names of metrics the report should include."
-            },
-            "dimensionFilters": {
-              "type": "array",
-              "description": "The list of filters on which dimensions are filtered. Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.",
-              "items": {
-                "$ref": "DimensionValue"
-              }
-            },
-            "customRichMediaEvents": {
-              "description": "Custom Rich Media Events group.",
-              "$ref": "CustomRichMediaEvents"
-            }
-          },
-          "type": "object"
-        },
-        "subAccountId": {
-          "description": "The subaccount ID to which this report belongs if applicable.",
-          "type": "string",
-          "format": "int64"
-        },
-        "reachCriteria": {
-          "type": "object",
-          "properties": {
-            "metricNames": {
-              "items": {
-                "type": "string"
-              },
-              "description": "The list of names of metrics the report should include.",
-              "type": "array"
-            },
-            "dimensionFilters": {
-              "description": "The list of filters on which dimensions are filtered. Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.",
-              "type": "array",
-              "items": {
-                "$ref": "DimensionValue"
-              }
-            },
-            "reachByFrequencyMetricNames": {
-              "items": {
-                "type": "string"
-              },
-              "type": "array",
-              "description": "The list of names of Reach By Frequency metrics the report should include."
-            },
-            "dateRange": {
-              "$ref": "DateRange",
-              "description": "The date range this report should be run for."
-            },
-            "dimensions": {
-              "type": "array",
-              "description": "The list of dimensions the report should include.",
-              "items": {
-                "$ref": "SortedDimension"
-              }
-            },
-            "activities": {
-              "description": "Activity group.",
-              "$ref": "Activities"
-            },
-            "enableAllDimensionCombinations": {
-              "description": "Whether to enable all reach dimension combinations in the report. Defaults to false. If enabled, the date range of the report should be within the last 42 days.",
-              "type": "boolean"
-            },
-            "customRichMediaEvents": {
-              "description": "Custom Rich Media Events group.",
-              "$ref": "CustomRichMediaEvents"
-            }
-          },
-          "description": "The report criteria for a report of type \"REACH\"."
-        },
-        "schedule": {
-          "properties": {
-            "every": {
-              "type": "integer",
-              "format": "int32",
-              "description": "Defines every how many days, weeks or months the report should be run. Needs to be set when \"repeats\" is either \"DAILY\", \"WEEKLY\" or \"MONTHLY\"."
-            },
-            "repeats": {
-              "annotations": {
-                "required": [
-                  "dfareporting.reports.insert",
-                  "dfareporting.reports.update"
-                ]
-              },
-              "type": "string",
-              "description": "The interval for which the report is repeated. Note: - \"DAILY\" also requires field \"every\" to be set. - \"WEEKLY\" also requires fields \"every\" and \"repeatsOnWeekDays\" to be set. - \"MONTHLY\" also requires fields \"every\" and \"runsOnDayOfMonth\" to be set. "
-            },
-            "runsOnDayOfMonth": {
-              "enum": [
-                "DAY_OF_MONTH",
-                "WEEK_OF_MONTH"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Enum to define for \"MONTHLY\" scheduled reports whether reports should be repeated on the same day of the month as \"startDate\" or the same day of the week of the month. Example: If 'startDate' is Monday, April 2nd 2012 (2012-04-02), \"DAY_OF_MONTH\" would run subsequent reports on the 2nd of every Month, and \"WEEK_OF_MONTH\" would run subsequent reports on the first Monday of the month.",
-              "type": "string"
-            },
-            "repeatsOnWeekDays": {
-              "description": "List of week days \"WEEKLY\" on which scheduled reports should run.",
-              "type": "array",
-              "items": {
-                "enumDescriptions": [
-                  "",
-                  "",
-                  "",
-                  "",
-                  "",
-                  "",
-                  ""
-                ],
-                "type": "string",
-                "enum": [
-                  "SUNDAY",
-                  "MONDAY",
-                  "TUESDAY",
-                  "WEDNESDAY",
-                  "THURSDAY",
-                  "FRIDAY",
-                  "SATURDAY"
-                ]
-              }
-            },
-            "active": {
-              "annotations": {
-                "required": [
-                  "dfareporting.reports.insert",
-                  "dfareporting.reports.update"
-                ]
-              },
-              "type": "boolean",
-              "description": "Whether the schedule is active or not. Must be set to either true or false."
-            },
-            "startDate": {
-              "type": "string",
-              "format": "date"
-            },
-            "expirationDate": {
-              "format": "date",
-              "type": "string"
-            }
-          },
-          "description": "The report's schedule. Can only be set if the report's 'dateRange' is a relative date range and the relative date range is not \"TODAY\".",
-          "type": "object"
-        },
-        "floodlightCriteria": {
-          "properties": {
-            "metricNames": {
-              "description": "The list of names of metrics the report should include.",
-              "items": {
-                "type": "string"
-              },
-              "type": "array"
-            },
-            "dimensionFilters": {
-              "description": "The list of filters on which dimensions are filtered. Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.",
-              "type": "array",
-              "items": {
-                "$ref": "DimensionValue"
-              }
-            },
-            "dateRange": {
-              "$ref": "DateRange",
-              "description": "The date range this report should be run for."
-            },
-            "customRichMediaEvents": {
-              "type": "array",
-              "description": "The list of custom rich media events to include.",
-              "items": {
-                "$ref": "DimensionValue"
-              }
-            },
-            "reportProperties": {
-              "properties": {
-                "includeAttributedIPConversions": {
-                  "type": "boolean",
-                  "description": "Include conversions that have no cookie, but do have an exposure path."
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/ddmconversions": {
+                    "description": "Manage DoubleClick Digital Marketing conversions"
                 },
-                "includeUnattributedCookieConversions": {
-                  "description": "Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.",
-                  "type": "boolean"
+                "https://www.googleapis.com/auth/dfareporting": {
+                    "description": "View and manage DoubleClick for Advertisers reports"
                 },
-                "includeUnattributedIPConversions": {
-                  "description": "Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.",
-                  "type": "boolean"
+                "https://www.googleapis.com/auth/dfatrafficking": {
+                    "description": "View and manage your DoubleClick Campaign Manager's (DCM) display ad campaigns"
                 }
-              },
-              "type": "object",
-              "description": "The properties of the report."
-            },
-            "dimensions": {
-              "items": {
-                "$ref": "SortedDimension"
-              },
-              "description": "The list of dimensions the report should include.",
-              "type": "array"
-            },
-            "floodlightConfigId": {
-              "$ref": "DimensionValue",
-              "description": "The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'."
             }
-          },
-          "type": "object",
-          "description": "The report criteria for a report of type \"FLOODLIGHT\"."
+        }
+    },
+    "basePath": "/dfareporting/v3.4/",
+    "baseUrl": "https://dfareporting.googleapis.com/dfareporting/v3.4/",
+    "batchPath": "batch",
+    "canonicalName": "Dfareporting",
+    "description": "Build applications to efficiently manage large or complex trafficking, reporting, and attribution workflows for Campaign Manager 360.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://developers.google.com/doubleclick-advertisers/",
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "dfareporting:v3.4",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://dfareporting.mtls.googleapis.com/",
+    "name": "dfareporting",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "pathCriteria": {
-          "type": "object",
-          "description": "The report criteria for a report of type \"PATH\".",
-          "properties": {
-            "floodlightConfigId": {
-              "$ref": "DimensionValue",
-              "description": "The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'."
-            },
-            "dateRange": {
-              "$ref": "DateRange",
-              "description": "The date range this report should be run for."
-            },
-            "activityFilters": {
-              "description": "The list of 'dfa:activity' values to filter on.",
-              "items": {
-                "$ref": "DimensionValue"
-              },
-              "type": "array"
-            },
-            "dimensions": {
-              "type": "array",
-              "items": {
-                "$ref": "SortedDimension"
-              },
-              "description": "The list of dimensions the report should include."
-            },
-            "customChannelGrouping": {
-              "$ref": "ChannelGrouping",
-              "description": "Channel Grouping."
-            },
-            "pathFilters": {
-              "type": "array",
-              "items": {
-                "$ref": "PathFilter"
-              },
-              "description": "Path Filters."
-            },
-            "metricNames": {
-              "description": "The list of names of metrics the report should include.",
-              "type": "array",
-              "items": {
-                "type": "string"
-              }
-            }
-          }
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
         },
-        "etag": {
-          "description": "The eTag of this response for caching purposes.",
-          "type": "string"
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "pathToConversionCriteria": {
-          "type": "object",
-          "properties": {
-            "perInteractionDimensions": {
-              "type": "array",
-              "description": "The list of per interaction dimensions the report should include.",
-              "items": {
-                "$ref": "SortedDimension"
-              }
-            },
-            "customFloodlightVariables": {
-              "items": {
-                "$ref": "SortedDimension"
-              },
-              "description": "The list of custom floodlight variables the report should include.",
-              "type": "array"
-            },
-            "conversionDimensions": {
-              "type": "array",
-              "items": {
-                "$ref": "SortedDimension"
-              },
-              "description": "The list of conversion dimensions the report should include."
-            },
-            "floodlightConfigId": {
-              "description": "The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'.",
-              "$ref": "DimensionValue"
-            },
-            "dateRange": {
-              "$ref": "DateRange",
-              "description": "The date range this report should be run for."
-            },
-            "activityFilters": {
-              "type": "array",
-              "description": "The list of 'dfa:activity' values to filter on.",
-              "items": {
-                "$ref": "DimensionValue"
-              }
-            },
-            "customRichMediaEvents": {
-              "items": {
-                "$ref": "DimensionValue"
-              },
-              "description": "The list of custom rich media events to include.",
-              "type": "array"
-            },
-            "reportProperties": {
-              "description": "The properties of the report.",
-              "properties": {
-                "maximumImpressionInteractions": {
-                  "description": "The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.",
-                  "format": "int32",
-                  "type": "integer"
-                },
-                "pivotOnInteractionPath": {
-                  "type": "boolean",
-                  "description": "Enable pivoting on interaction path."
-                },
-                "impressionsLookbackWindow": {
-                  "format": "int32",
-                  "description": "DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.",
-                  "type": "integer"
-                },
-                "includeUnattributedIPConversions": {
-                  "description": "Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.",
-                  "type": "boolean"
-                },
-                "maximumClickInteractions": {
-                  "format": "int32",
-                  "type": "integer",
-                  "description": "The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report."
-                },
-                "includeUnattributedCookieConversions": {
-                  "description": "Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.",
-                  "type": "boolean"
-                },
-                "maximumInteractionGap": {
-                  "description": "The maximum amount of time that can take place between interactions (clicks or impressions) by the same user. Valid values: 1-90.",
-                  "format": "int32",
-                  "type": "integer"
-                },
-                "clicksLookbackWindow": {
-                  "format": "int32",
-                  "description": "DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.",
-                  "type": "integer"
-                },
-                "includeAttributedIPConversions": {
-                  "type": "boolean",
-                  "description": "Deprecated: has no effect."
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        }
+    },
+    "protocol": "rest",
+    "resources": {
+        "accountActiveAdSummaries": {
+            "methods": {
+                "get": {
+                    "description": "Gets the account's active ad summary by account ID.",
+                    "flatPath": "userprofiles/{profileId}/accountActiveAdSummaries/{summaryAccountId}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.accountActiveAdSummaries.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "summaryAccountId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "summaryAccountId": {
+                            "description": "Account ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accountActiveAdSummaries/{summaryAccountId}",
+                    "response": {
+                        "$ref": "AccountActiveAdSummary"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
                 }
-              },
-              "type": "object"
-            },
-            "metricNames": {
-              "items": {
-                "type": "string"
-              },
-              "description": "The list of names of metrics the report should include.",
-              "type": "array"
             }
-          },
-          "description": "The report criteria for a report of type \"PATH_TO_CONVERSION\"."
-        },
-        "fileName": {
-          "type": "string",
-          "description": "The filename used when generating report files for this report."
-        },
-        "name": {
-          "annotations": {
-            "required": [
-              "dfareporting.reports.insert",
-              "dfareporting.reports.update"
-            ]
-          },
-          "type": "string",
-          "description": "The name of the report."
-        },
-        "delivery": {
-          "description": "The report's email delivery settings.",
-          "properties": {
-            "message": {
-              "type": "string",
-              "description": "The message to be sent with each email."
-            },
-            "recipients": {
-              "type": "array",
-              "items": {
-                "$ref": "Recipient"
-              },
-              "description": "The list of recipients to which to email the report."
-            },
-            "emailOwnerDeliveryType": {
-              "description": "The type of delivery for the owner to receive, if enabled.",
-              "enum": [
-                "LINK",
-                "ATTACHMENT"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "type": "string"
-            },
-            "emailOwner": {
-              "description": "Whether the report should be emailed to the report owner.",
-              "type": "boolean"
-            }
-          },
-          "type": "object"
-        },
-        "lastModifiedTime": {
-          "type": "string",
-          "annotations": {
-            "required": [
-              "dfareporting.reports.update"
-            ]
-          },
-          "format": "uint64",
-          "description": "The timestamp (in milliseconds since epoch) of when this report was last modified."
-        },
-        "pathAttributionCriteria": {
-          "type": "object",
-          "description": "The report criteria for a report of type \"PATH_ATTRIBUTION\".",
-          "properties": {
-            "floodlightConfigId": {
-              "$ref": "DimensionValue",
-              "description": "The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'."
-            },
-            "dateRange": {
-              "$ref": "DateRange",
-              "description": "The date range this report should be run for."
-            },
-            "pathFilters": {
-              "items": {
-                "$ref": "PathFilter"
-              },
-              "description": "Path Filters.",
-              "type": "array"
-            },
-            "customChannelGrouping": {
-              "$ref": "ChannelGrouping",
-              "description": "Channel Grouping."
-            },
-            "metricNames": {
-              "type": "array",
-              "items": {
-                "type": "string"
-              },
-              "description": "The list of names of metrics the report should include."
-            },
-            "activityFilters": {
-              "items": {
-                "$ref": "DimensionValue"
-              },
-              "description": "The list of 'dfa:activity' values to filter on.",
-              "type": "array"
-            },
-            "dimensions": {
-              "type": "array",
-              "description": "The list of dimensions the report should include.",
-              "items": {
-                "$ref": "SortedDimension"
-              }
-            }
-          }
-        },
-        "crossDimensionReachCriteria": {
-          "properties": {
-            "dimension": {
-              "type": "string",
-              "description": "The dimension option.",
-              "enum": [
-                "ADVERTISER",
-                "CAMPAIGN",
-                "SITE_BY_ADVERTISER",
-                "SITE_BY_CAMPAIGN"
-              ],
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                ""
-              ]
-            },
-            "breakdown": {
-              "description": "The list of dimensions the report should include.",
-              "items": {
-                "$ref": "SortedDimension"
-              },
-              "type": "array"
-            },
-            "dateRange": {
-              "description": "The date range this report should be run for.",
-              "$ref": "DateRange"
-            },
-            "metricNames": {
-              "items": {
-                "type": "string"
-              },
-              "type": "array",
-              "description": "The list of names of metrics the report should include."
-            },
-            "overlapMetricNames": {
-              "type": "array",
-              "description": "The list of names of overlap metrics the report should include.",
-              "items": {
-                "type": "string"
-              }
-            },
-            "pivoted": {
-              "description": "Whether the report is pivoted or not. Defaults to true.",
-              "type": "boolean"
-            },
-            "dimensionFilters": {
-              "type": "array",
-              "description": "The list of filters on which dimensions are filtered.",
-              "items": {
-                "$ref": "DimensionValue"
-              }
-            }
-          },
-          "description": "The report criteria for a report of type \"CROSS_DIMENSION_REACH\".",
-          "type": "object"
-        },
-        "format": {
-          "type": "string",
-          "description": "The output format of the report. If not specified, default format is \"CSV\". Note that the actual format in the completed report file might differ if for instance the report's size exceeds the format's capabilities. \"CSV\" will then be the fallback format.",
-          "enum": [
-            "CSV",
-            "EXCEL"
-          ],
-          "enumDescriptions": [
-            "",
-            ""
-          ]
-        },
-        "id": {
-          "type": "string",
-          "description": "The unique ID identifying this report resource.",
-          "format": "int64",
-          "annotations": {
-            "required": [
-              "dfareporting.reports.update"
-            ]
-          }
-        }
-      },
-      "description": "Represents a Report resource.",
-      "id": "Report",
-      "type": "object"
-    },
-    "Ad": {
-      "id": "Ad",
-      "description": "Contains properties of a Campaign Manager ad.",
-      "type": "object",
-      "properties": {
-        "sslRequired": {
-          "type": "boolean",
-          "description": "Whether this ad requires ssl. This is a read-only field that is auto-generated when the ad is inserted or updated."
-        },
-        "type": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "Type of ad. This is a required field on insertion. Note that default ads ( AD_SERVING_DEFAULT_AD) cannot be created directly (see Creative resource).",
-          "enum": [
-            "AD_SERVING_STANDARD_AD",
-            "AD_SERVING_DEFAULT_AD",
-            "AD_SERVING_CLICK_TRACKER",
-            "AD_SERVING_TRACKING",
-            "AD_SERVING_BRAND_SAFE_AD"
-          ]
-        },
-        "technologyTargeting": {
-          "description": "Technology platform targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD.",
-          "$ref": "TechnologyTargeting"
-        },
-        "accountId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Account ID of this ad. This is a read-only field that can be left blank."
-        },
-        "geoTargeting": {
-          "$ref": "GeoTargeting",
-          "description": "Geographical targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#ad\".",
-          "type": "string"
-        },
-        "size": {
-          "description": "Size of this ad. Applicable when type is AD_SERVING_DEFAULT_AD.",
-          "$ref": "Size"
-        },
-        "sslCompliant": {
-          "type": "boolean",
-          "description": "Whether this ad is ssl compliant. This is a read-only field that is auto-generated when the ad is inserted or updated."
-        },
-        "campaignIdDimensionValue": {
-          "description": "Dimension value for the ID of the campaign. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "creativeGroupAssignments": {
-          "description": "Creative group assignments for this ad. Applicable when type is AD_SERVING_CLICK_TRACKER. Only one assignment per creative group number is allowed for a maximum of two assignments.",
-          "items": {
-            "$ref": "CreativeGroupAssignment"
-          },
-          "type": "array"
-        },
-        "compatibility": {
-          "enum": [
-            "DISPLAY",
-            "DISPLAY_INTERSTITIAL",
-            "APP",
-            "APP_INTERSTITIAL",
-            "IN_STREAM_VIDEO",
-            "IN_STREAM_AUDIO"
-          ],
-          "type": "string",
-          "description": "Compatibility of this ad. Applicable when type is AD_SERVING_DEFAULT_AD. DISPLAY and DISPLAY_INTERSTITIAL refer to either rendering on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are only used for existing default ads. New mobile placements must be assigned DISPLAY or DISPLAY_INTERSTITIAL and default ads created for those placements will be limited to those compatibility types. IN_STREAM_VIDEO refers to rendering in-stream video ads developed with the VAST standard.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "audienceSegmentId": {
-          "format": "int64",
-          "description": "Audience segment ID that is being targeted for this ad. Applicable when type is AD_SERVING_STANDARD_AD.",
-          "type": "string"
-        },
-        "clickThroughUrlSuffixProperties": {
-          "description": "Click-through URL suffix properties for this ad. Applies to the URL in the ad or (if overriding ad properties) the URL in the creative.",
-          "$ref": "ClickThroughUrlSuffixProperties"
-        },
-        "subaccountId": {
-          "description": "Subaccount ID of this ad. This is a read-only field that can be left blank.",
-          "format": "int64",
-          "type": "string"
-        },
-        "archived": {
-          "type": "boolean",
-          "description": "Whether this ad is archived. When true, active must be false."
-        },
-        "lastModifiedInfo": {
-          "description": "Information about the most recent modification of this ad. This is a read-only field.",
-          "$ref": "LastModifiedInfo"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this ad. This is a required field and must be less than 256 characters long."
-        },
-        "placementAssignments": {
-          "items": {
-            "$ref": "PlacementAssignment"
-          },
-          "description": "Placement assignments for this ad.",
-          "type": "array"
-        },
-        "defaultClickThroughEventTagProperties": {
-          "$ref": "DefaultClickThroughEventTagProperties",
-          "description": "Default click-through event tag properties for this ad."
-        },
-        "comments": {
-          "description": "Comments for this ad.",
-          "type": "string"
-        },
-        "advertiserIdDimensionValue": {
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "deliverySchedule": {
-          "description": "Delivery schedule information for this ad. Applicable when type is AD_SERVING_STANDARD_AD or AD_SERVING_TRACKING. This field along with subfields priority and impressionRatio are required on insertion when type is AD_SERVING_STANDARD_AD.",
-          "$ref": "DeliverySchedule"
-        },
-        "creativeRotation": {
-          "$ref": "CreativeRotation",
-          "description": "Creative rotation for this ad. Applicable when type is AD_SERVING_DEFAULT_AD, AD_SERVING_STANDARD_AD, or AD_SERVING_TRACKING. When type is AD_SERVING_DEFAULT_AD, this field should have exactly one creativeAssignment ."
-        },
-        "remarketingListExpression": {
-          "$ref": "ListTargetingExpression",
-          "description": "Remarketing list targeting expression for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD."
-        },
-        "campaignId": {
-          "type": "string",
-          "description": "Campaign ID of this ad. This is a required field on insertion.",
-          "format": "int64"
-        },
-        "active": {
-          "type": "boolean",
-          "description": "Whether this ad is active. When true, archived must be false."
-        },
-        "idDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of this ad. This is a read-only, auto-generated field."
-        },
-        "createInfo": {
-          "description": "Information about the creation of this ad. This is a read-only field.",
-          "$ref": "LastModifiedInfo"
-        },
-        "dayPartTargeting": {
-          "$ref": "DayPartTargeting",
-          "description": "Time and day targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD."
-        },
-        "languageTargeting": {
-          "description": "Language targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD.",
-          "$ref": "LanguageTargeting"
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of this ad. This is a read-only, auto-generated field.",
-          "format": "int64"
-        },
-        "dynamicClickTracker": {
-          "type": "boolean",
-          "description": "Whether this ad is a dynamic click tracker. Applicable when type is AD_SERVING_CLICK_TRACKER. This is a required field on insert, and is read-only after insert."
-        },
-        "advertiserId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Advertiser ID of this ad. This is a required field on insertion."
-        },
-        "eventTagOverrides": {
-          "items": {
-            "$ref": "EventTagOverride"
-          },
-          "description": "Event tag overrides for this ad.",
-          "type": "array"
-        },
-        "keyValueTargetingExpression": {
-          "description": "Key-value targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD.",
-          "$ref": "KeyValueTargetingExpression"
-        },
-        "clickThroughUrl": {
-          "$ref": "ClickThroughUrl",
-          "description": "Click-through URL for this ad. This is a required field on insertion. Applicable when type is AD_SERVING_CLICK_TRACKER."
-        },
-        "endTime": {
-          "type": "string",
-          "format": "date-time"
-        },
-        "targetingTemplateId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Targeting template ID, used to apply preconfigured targeting information to this ad. This cannot be set while any of dayPartTargeting, geoTargeting, keyValueTargetingExpression, languageTargeting, remarketingListExpression, or technologyTargeting are set. Applicable when type is AD_SERVING_STANDARD_AD."
-        },
-        "startTime": {
-          "type": "string",
-          "format": "date-time"
-        }
-      }
-    },
-    "DynamicTargetingKey": {
-      "description": "Contains properties of a dynamic targeting key. Dynamic targeting keys are unique, user-friendly labels, created at the advertiser level in DCM, that can be assigned to ads, creatives, and placements and used for targeting with Studio dynamic creatives. Use these labels instead of numeric Campaign Manager IDs (such as placement IDs) to save time and avoid errors in your dynamic feeds.",
-      "type": "object",
-      "properties": {
-        "objectId": {
-          "description": "ID of the object of this dynamic targeting key. This is a required field.",
-          "format": "int64",
-          "type": "string"
-        },
-        "objectType": {
-          "enum": [
-            "OBJECT_ADVERTISER",
-            "OBJECT_AD",
-            "OBJECT_CREATIVE",
-            "OBJECT_PLACEMENT"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "Type of the object of this dynamic targeting key. This is a required field."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#dynamicTargetingKey\"."
-        },
-        "name": {
-          "description": "Name of this dynamic targeting key. This is a required field. Must be less than 256 characters long and cannot contain commas. All characters are converted to lowercase.",
-          "type": "string"
-        }
-      },
-      "id": "DynamicTargetingKey"
-    },
-    "InventoryItemsListResponse": {
-      "id": "InventoryItemsListResponse",
-      "description": "Inventory item List Response",
-      "type": "object",
-      "properties": {
-        "inventoryItems": {
-          "description": "Inventory item collection",
-          "type": "array",
-          "items": {
-            "$ref": "InventoryItem"
-          }
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#inventoryItemsListResponse\".",
-          "type": "string"
-        }
-      }
-    },
-    "PlacementStrategiesListResponse": {
-      "type": "object",
-      "id": "PlacementStrategiesListResponse",
-      "properties": {
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        },
-        "placementStrategies": {
-          "items": {
-            "$ref": "PlacementStrategy"
-          },
-          "description": "Placement strategy collection.",
-          "type": "array"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementStrategiesListResponse\".",
-          "type": "string"
-        }
-      },
-      "description": "Placement Strategy List Response"
-    },
-    "Site": {
-      "type": "object",
-      "description": "Contains properties of a site.",
-      "id": "Site",
-      "properties": {
-        "approved": {
-          "description": "Whether this site is approved.",
-          "type": "boolean"
-        },
-        "accountId": {
-          "description": "Account ID of this site. This is a read-only field that can be left blank.",
-          "format": "int64",
-          "type": "string"
-        },
-        "subaccountId": {
-          "type": "string",
-          "description": "Subaccount ID of this site. This is a read-only field that can be left blank.",
-          "format": "int64"
-        },
-        "siteContacts": {
-          "items": {
-            "$ref": "SiteContact"
-          },
-          "type": "array",
-          "description": "Site contacts."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this site.This is a required field. Must be less than 128 characters long. If this site is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this site is a top-level site, and the name must be unique among top-level sites of the same account."
-        },
-        "siteSettings": {
-          "description": "Site-wide settings.",
-          "$ref": "SiteSettings"
-        },
-        "directorySiteIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the directory site. This is a read-only, auto-generated field."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#site\"."
-        },
-        "idDimensionValue": {
-          "description": "Dimension value for the ID of this site. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "directorySiteId": {
-          "description": "Directory site associated with this site. This is a required field that is read-only after insertion.",
-          "format": "int64",
-          "type": "string"
-        },
-        "keyName": {
-          "description": "Key name of this site. This is a read-only, auto-generated field.",
-          "type": "string"
-        },
-        "videoSettings": {
-          "$ref": "SiteVideoSettings",
-          "description": "Default video settings for new placements created under this site. This value will be used to populate the placements.videoSettings field, when no value is specified for the new placement."
-        },
-        "id": {
-          "format": "int64",
-          "description": "ID of this site. This is a read-only, auto-generated field.",
-          "type": "string"
-        }
-      }
-    },
-    "ChannelGrouping": {
-      "description": "Represents a DfaReporting channel grouping.",
-      "type": "object",
-      "id": "ChannelGrouping",
-      "properties": {
-        "fallbackName": {
-          "description": "ChannelGrouping fallback name.",
-          "type": "string"
-        },
-        "rules": {
-          "type": "array",
-          "items": {
-            "$ref": "ChannelGroupingRule"
-          },
-          "description": "The rules contained within this channel grouping."
-        },
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#channelGrouping."
-        },
-        "name": {
-          "description": "ChannelGrouping name.",
-          "type": "string"
-        }
-      }
-    },
-    "CampaignCreativeAssociation": {
-      "properties": {
-        "creativeId": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of the creative associated with the campaign. This is a required field."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaignCreativeAssociation\".",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "CampaignCreativeAssociation",
-      "description": "Identifies a creative which has been associated with a given campaign."
-    },
-    "PathReportCompatibleFields": {
-      "type": "object",
-      "description": "Represents fields that are compatible to be selected for a report of type \"PATH\".",
-      "id": "PathReportCompatibleFields",
-      "properties": {
-        "channelGroupings": {
-          "type": "array",
-          "items": {
-            "$ref": "Dimension"
-          },
-          "description": "Dimensions which are compatible to be selected in the \"channelGroupings\" section of the report."
-        },
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#pathReportCompatibleFields."
-        },
-        "metrics": {
-          "type": "array",
-          "items": {
-            "$ref": "Metric"
-          },
-          "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report."
-        },
-        "pathFilters": {
-          "items": {
-            "$ref": "Dimension"
-          },
-          "description": "Dimensions which are compatible to be selected in the \"pathFilters\" section of the report.",
-          "type": "array"
-        },
-        "dimensions": {
-          "items": {
-            "$ref": "Dimension"
-          },
-          "description": "Dimensions which are compatible to be selected in the \"dimensions\" section of the report.",
-          "type": "array"
-        }
-      }
-    },
-    "DimensionValue": {
-      "properties": {
-        "value": {
-          "description": "The value of the dimension.",
-          "type": "string"
-        },
-        "etag": {
-          "description": "The eTag of this response for caching purposes.",
-          "type": "string"
-        },
-        "matchType": {
-          "enum": [
-            "EXACT",
-            "BEGINS_WITH",
-            "CONTAINS",
-            "WILDCARD_EXPRESSION"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT."
-        },
-        "id": {
-          "type": "string",
-          "description": "The ID associated with the value if available."
-        },
-        "dimensionName": {
-          "type": "string",
-          "description": "The name of the dimension."
-        },
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#dimensionValue."
-        }
-      },
-      "description": "Represents a DimensionValue resource.",
-      "type": "object",
-      "id": "DimensionValue"
-    },
-    "DV3Ids": {
-      "id": "DV3Ids",
-      "type": "object",
-      "description": "DV360 IDs related to the custom event.",
-      "properties": {
-        "dvSiteId": {
-          "type": "string",
-          "description": "Site ID for DV360.",
-          "format": "int64"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#dV3Ids\".",
-          "type": "string"
-        },
-        "dvInsertionOrderId": {
-          "format": "int64",
-          "description": "Insertion Order ID for DV360.",
-          "type": "string"
-        },
-        "dvLineItemId": {
-          "type": "string",
-          "description": "Line Item ID for DV360.",
-          "format": "int64"
-        },
-        "dvCampaignId": {
-          "format": "int64",
-          "description": "Campaign ID for DV360.",
-          "type": "string"
-        },
-        "dvCreativeId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Creative ID for DV360."
-        }
-      }
-    },
-    "CreativeCustomEvent": {
-      "id": "CreativeCustomEvent",
-      "properties": {
-        "advertiserCustomEventId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Unique ID of this event used by Reporting and Data Transfer. This is a read-only field."
-        },
-        "artworkType": {
-          "type": "string",
-          "description": "Artwork type used by the creative.This is a read-only field.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "ARTWORK_TYPE_FLASH",
-            "ARTWORK_TYPE_HTML5",
-            "ARTWORK_TYPE_MIXED",
-            "ARTWORK_TYPE_IMAGE"
-          ]
-        },
-        "advertiserCustomEventType": {
-          "description": "Type of the event. This is a read-only field.",
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "ADVERTISER_EVENT_TIMER",
-            "ADVERTISER_EVENT_EXIT",
-            "ADVERTISER_EVENT_COUNTER"
-          ]
-        },
-        "popupWindowProperties": {
-          "description": "Properties for rich media popup windows. This field is used only for exit events.",
-          "$ref": "PopupWindowProperties"
-        },
-        "targetType": {
-          "enum": [
-            "TARGET_BLANK",
-            "TARGET_TOP",
-            "TARGET_SELF",
-            "TARGET_PARENT",
-            "TARGET_POPUP"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "Target type used by the event.",
-          "type": "string"
-        },
-        "videoReportingId": {
-          "description": "Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.",
-          "type": "string"
-        },
-        "id": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of this event. This is a required field and should not be modified after insertion."
-        },
-        "advertiserCustomEventName": {
-          "description": "User-entered name for the event.",
-          "type": "string"
-        },
-        "exitClickThroughUrl": {
-          "description": "Exit click-through URL for the event. This field is used only for exit events.",
-          "$ref": "CreativeClickThroughUrl"
-        },
-        "artworkLabel": {
-          "description": "Artwork label column, used to link events in Campaign Manager back to events in Studio. This is a required field and should not be modified after insertion.",
-          "type": "string"
-        }
-      },
-      "description": "Creative Custom Event.",
-      "type": "object"
-    },
-    "File": {
-      "properties": {
-        "etag": {
-          "type": "string",
-          "description": "Etag of this resource."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#file\".",
-          "type": "string"
-        },
-        "fileName": {
-          "type": "string",
-          "description": "The filename of the file."
-        },
-        "dateRange": {
-          "description": "The date range for which the file has report data. The date range will always be the absolute date range for which the report is run.",
-          "$ref": "DateRange"
-        },
-        "reportId": {
-          "type": "string",
-          "format": "int64",
-          "description": "The ID of the report this file was generated from."
-        },
-        "lastModifiedTime": {
-          "type": "string",
-          "description": "The timestamp in milliseconds since epoch when this file was last modified.",
-          "format": "int64"
-        },
-        "id": {
-          "format": "int64",
-          "description": "The unique ID of this report file.",
-          "type": "string"
-        },
-        "urls": {
-          "type": "object",
-          "description": "The URLs where the completed report file can be downloaded.",
-          "properties": {
-            "browserUrl": {
-              "description": "The URL for downloading the report data through a browser.",
-              "type": "string"
-            },
-            "apiUrl": {
-              "description": "The URL for downloading the report data through the API.",
-              "type": "string"
-            }
-          }
-        },
-        "status": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "The status of the report file.",
-          "enum": [
-            "PROCESSING",
-            "REPORT_AVAILABLE",
-            "FAILED",
-            "CANCELLED"
-          ]
         },
-        "format": {
-          "type": "string",
-          "enum": [
-            "CSV",
-            "EXCEL"
-          ],
-          "description": "The output format of the report. Only available once the file is available.",
-          "enumDescriptions": [
-            "",
-            ""
-          ]
-        }
-      },
-      "type": "object",
-      "description": "Represents a File resource. A file contains the metadata for a report run. It shows the status of the run and holds the URLs to the generated report data if the run is finished and the status is \"REPORT_AVAILABLE\".",
-      "id": "File"
-    },
-    "AccountPermissionGroupsListResponse": {
-      "description": "Account Permission Group List Response",
-      "type": "object",
-      "id": "AccountPermissionGroupsListResponse",
-      "properties": {
         "accountPermissionGroups": {
-          "description": "Account permission group collection.",
-          "type": "array",
-          "items": {
-            "$ref": "AccountPermissionGroup"
-          }
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountPermissionGroupsListResponse\".",
-          "type": "string"
-        }
-      }
-    },
-    "ChannelGroupingRule": {
-      "description": "Represents a DfaReporting channel grouping rule.",
-      "properties": {
-        "name": {
-          "description": "Rule name.",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#channelGroupingRule."
-        },
-        "disjunctiveMatchStatements": {
-          "description": "The disjunctive match statements contained within this rule.",
-          "items": {
-            "$ref": "DisjunctiveMatchStatement"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "id": "ChannelGroupingRule"
-    },
-    "TechnologyTargeting": {
-      "properties": {
-        "connectionTypes": {
-          "items": {
-            "$ref": "ConnectionType"
-          },
-          "description": "Connection types that this ad targets. For each connection type only id is required. The other fields are populated automatically when the ad is inserted or updated.",
-          "type": "array"
-        },
-        "operatingSystems": {
-          "items": {
-            "$ref": "OperatingSystem"
-          },
-          "description": "Operating systems that this ad targets. To target specific versions, use operatingSystemVersions. For each operating system only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system, do not set targeting for operating system versions for the same operating system.",
-          "type": "array"
-        },
-        "operatingSystemVersions": {
-          "type": "array",
-          "items": {
-            "$ref": "OperatingSystemVersion"
-          },
-          "description": "Operating system versions that this ad targets. To target all versions, use operatingSystems. For each operating system version, only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system version, do not set targeting for the corresponding operating system in operatingSystems."
-        },
-        "mobileCarriers": {
-          "items": {
-            "$ref": "MobileCarrier"
-          },
-          "type": "array",
-          "description": "Mobile carriers that this ad targets. For each mobile carrier only id is required, and the other fields are populated automatically when the ad is inserted or updated. If targeting a mobile carrier, do not set targeting for any zip codes."
-        },
-        "platformTypes": {
-          "type": "array",
-          "description": "Platform types that this ad targets. For example, desktop, mobile, or tablet. For each platform type, only id is required, and the other fields are populated automatically when the ad is inserted or updated.",
-          "items": {
-            "$ref": "PlatformType"
-          }
-        },
-        "browsers": {
-          "description": "Browsers that this ad targets. For each browser either set browserVersionId or dartId along with the version numbers. If both are specified, only browserVersionId will be used. The other fields are populated automatically when the ad is inserted or updated.",
-          "items": {
-            "$ref": "Browser"
-          },
-          "type": "array"
-        }
-      },
-      "description": "Technology Targeting.",
-      "type": "object",
-      "id": "TechnologyTargeting"
-    },
-    "MobileCarriersListResponse": {
-      "id": "MobileCarriersListResponse",
-      "properties": {
-        "mobileCarriers": {
-          "items": {
-            "$ref": "MobileCarrier"
-          },
-          "type": "array",
-          "description": "Mobile carrier collection."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#mobileCarriersListResponse\"."
-        }
-      },
-      "description": "Mobile Carrier List Response",
-      "type": "object"
-    },
-    "CreativeAssetMetadata": {
-      "properties": {
-        "richMedia": {
-          "type": "boolean",
-          "description": "True if the uploaded asset is a rich media asset. This is a read-only, auto-generated field."
-        },
-        "idDimensionValue": {
-          "description": "Dimension value for the numeric ID of the asset. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "clickTags": {
-          "type": "array",
-          "description": "List of detected click tags for assets. This is a read-only, auto-generated field. This field is empty for a rich media asset.",
-          "items": {
-            "$ref": "ClickTag"
-          }
-        },
-        "exitCustomEvents": {
-          "type": "array",
-          "items": {
-            "$ref": "CreativeCustomEvent"
-          },
-          "description": "List of exit events configured for the asset. This is a read-only, auto-generated field and only applicable to a rich media asset."
-        },
-        "warnedValidationRules": {
-          "items": {
-            "enum": [
-              "CLICK_TAG_NON_TOP_LEVEL",
-              "CLICK_TAG_MISSING",
-              "CLICK_TAG_MORE_THAN_ONE",
-              "CLICK_TAG_INVALID",
-              "ORPHANED_ASSET",
-              "PRIMARY_HTML_MISSING",
-              "EXTERNAL_FILE_REFERENCED",
-              "MRAID_REFERENCED",
-              "ADMOB_REFERENCED",
-              "FILE_TYPE_INVALID",
-              "ZIP_INVALID",
-              "LINKED_FILE_NOT_FOUND",
-              "MAX_FLASH_VERSION_11",
-              "NOT_SSL_COMPLIANT",
-              "FILE_DETAIL_EMPTY",
-              "ASSET_INVALID",
-              "GWD_PROPERTIES_INVALID",
-              "ENABLER_UNSUPPORTED_METHOD_DCM",
-              "ASSET_FORMAT_UNSUPPORTED_DCM",
-              "COMPONENT_UNSUPPORTED_DCM",
-              "HTML5_FEATURE_UNSUPPORTED",
-              "CLICK_TAG_IN_GWD",
-              "CLICK_TAG_HARD_CODED",
-              "SVG_INVALID"
-            ],
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ],
-            "type": "string"
-          },
-          "type": "array",
-          "description": "Rules validated during code generation that generated a warning. This is a read-only, auto-generated field. Possible values are: - \"ADMOB_REFERENCED\" - \"ASSET_FORMAT_UNSUPPORTED_DCM\" - \"ASSET_INVALID\" - \"CLICK_TAG_HARD_CODED\" - \"CLICK_TAG_INVALID\" - \"CLICK_TAG_IN_GWD\" - \"CLICK_TAG_MISSING\" - \"CLICK_TAG_MORE_THAN_ONE\" - \"CLICK_TAG_NON_TOP_LEVEL\" - \"COMPONENT_UNSUPPORTED_DCM\" - \"ENABLER_UNSUPPORTED_METHOD_DCM\" - \"EXTERNAL_FILE_REFERENCED\" - \"FILE_DETAIL_EMPTY\" - \"FILE_TYPE_INVALID\" - \"GWD_PROPERTIES_INVALID\" - \"HTML5_FEATURE_UNSUPPORTED\" - \"LINKED_FILE_NOT_FOUND\" - \"MAX_FLASH_VERSION_11\" - \"MRAID_REFERENCED\" - \"NOT_SSL_COMPLIANT\" - \"ORPHANED_ASSET\" - \"PRIMARY_HTML_MISSING\" - \"SVG_INVALID\" - \"ZIP_INVALID\" "
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeAssetMetadata\"."
-        },
-        "id": {
-          "format": "int64",
-          "type": "string",
-          "description": "Numeric ID of the asset. This is a read-only, auto-generated field."
-        },
-        "detectedFeatures": {
-          "items": {
-            "enum": [
-              "CSS_FONT_FACE",
-              "CSS_BACKGROUND_SIZE",
-              "CSS_BORDER_IMAGE",
-              "CSS_BORDER_RADIUS",
-              "CSS_BOX_SHADOW",
-              "CSS_FLEX_BOX",
-              "CSS_HSLA",
-              "CSS_MULTIPLE_BGS",
-              "CSS_OPACITY",
-              "CSS_RGBA",
-              "CSS_TEXT_SHADOW",
-              "CSS_ANIMATIONS",
-              "CSS_COLUMNS",
-              "CSS_GENERATED_CONTENT",
-              "CSS_GRADIENTS",
-              "CSS_REFLECTIONS",
-              "CSS_TRANSFORMS",
-              "CSS_TRANSFORMS3D",
-              "CSS_TRANSITIONS",
-              "APPLICATION_CACHE",
-              "CANVAS",
-              "CANVAS_TEXT",
-              "DRAG_AND_DROP",
-              "HASH_CHANGE",
-              "HISTORY",
-              "AUDIO",
-              "VIDEO",
-              "INDEXED_DB",
-              "INPUT_ATTR_AUTOCOMPLETE",
-              "INPUT_ATTR_AUTOFOCUS",
-              "INPUT_ATTR_LIST",
-              "INPUT_ATTR_PLACEHOLDER",
-              "INPUT_ATTR_MAX",
-              "INPUT_ATTR_MIN",
-              "INPUT_ATTR_MULTIPLE",
-              "INPUT_ATTR_PATTERN",
-              "INPUT_ATTR_REQUIRED",
-              "INPUT_ATTR_STEP",
-              "INPUT_TYPE_SEARCH",
-              "INPUT_TYPE_TEL",
-              "INPUT_TYPE_URL",
-              "INPUT_TYPE_EMAIL",
-              "INPUT_TYPE_DATETIME",
-              "INPUT_TYPE_DATE",
-              "INPUT_TYPE_MONTH",
-              "INPUT_TYPE_WEEK",
-              "INPUT_TYPE_TIME",
-              "INPUT_TYPE_DATETIME_LOCAL",
-              "INPUT_TYPE_NUMBER",
-              "INPUT_TYPE_RANGE",
-              "INPUT_TYPE_COLOR",
-              "LOCAL_STORAGE",
-              "POST_MESSAGE",
-              "SESSION_STORAGE",
-              "WEB_SOCKETS",
-              "WEB_SQL_DATABASE",
-              "WEB_WORKERS",
-              "GEO_LOCATION",
-              "INLINE_SVG",
-              "SMIL",
-              "SVG_HREF",
-              "SVG_CLIP_PATHS",
-              "TOUCH",
-              "WEBGL",
-              "SVG_FILTERS",
-              "SVG_FE_IMAGE"
-            ],
-            "type": "string",
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ]
-          },
-          "type": "array",
-          "description": "List of feature dependencies for the creative asset that are detected by Campaign Manager. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative correctly. This is a read-only, auto-generated field."
-        },
-        "counterCustomEvents": {
-          "type": "array",
-          "description": "List of counter events configured for the asset. This is a read-only, auto-generated field and only applicable to a rich media asset.",
-          "items": {
-            "$ref": "CreativeCustomEvent"
-          }
-        },
-        "timerCustomEvents": {
-          "description": "List of timer events configured for the asset. This is a read-only, auto-generated field and only applicable to a rich media asset.",
-          "type": "array",
-          "items": {
-            "$ref": "CreativeCustomEvent"
-          }
-        },
-        "assetIdentifier": {
-          "description": "ID of the creative asset. This is a required field.",
-          "$ref": "CreativeAssetId"
-        }
-      },
-      "type": "object",
-      "id": "CreativeAssetMetadata",
-      "description": "CreativeAssets contains properties of a creative asset file which will be uploaded or has already been uploaded. Refer to the creative sample code for how to upload assets and insert a creative."
-    },
-    "Account": {
-      "properties": {
-        "currencyId": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of currency associated with this account. This is a required field. Acceptable values are: - \"1\" for USD - \"2\" for GBP - \"3\" for ESP - \"4\" for SEK - \"5\" for CAD - \"6\" for JPY - \"7\" for DEM - \"8\" for AUD - \"9\" for FRF - \"10\" for ITL - \"11\" for DKK - \"12\" for NOK - \"13\" for FIM - \"14\" for ZAR - \"15\" for IEP - \"16\" for NLG - \"17\" for EUR - \"18\" for KRW - \"19\" for TWD - \"20\" for SGD - \"21\" for CNY - \"22\" for HKD - \"23\" for NZD - \"24\" for MYR - \"25\" for BRL - \"26\" for PTE - \"28\" for CLP - \"29\" for TRY - \"30\" for ARS - \"31\" for PEN - \"32\" for ILS - \"33\" for CHF - \"34\" for VEF - \"35\" for COP - \"36\" for GTQ - \"37\" for PLN - \"39\" for INR - \"40\" for THB - \"41\" for IDR - \"42\" for CZK - \"43\" for RON - \"44\" for HUF - \"45\" for RUB - \"46\" for AED - \"47\" for BGN - \"48\" for HRK - \"49\" for MXN - \"50\" for NGN - \"51\" for EGP "
-        },
-        "countryId": {
-          "format": "int64",
-          "description": "ID of the country associated with this account.",
-          "type": "string"
-        },
-        "maximumImageSize": {
-          "type": "string",
-          "description": "Maximum image size allowed for this account, in kilobytes. Value must be greater than or equal to 1.",
-          "format": "int64"
-        },
-        "defaultCreativeSizeId": {
-          "format": "int64",
-          "description": "Default placement dimensions for this account.",
-          "type": "string"
-        },
-        "accountProfile": {
-          "enum": [
-            "ACCOUNT_PROFILE_BASIC",
-            "ACCOUNT_PROFILE_STANDARD"
-          ],
-          "description": "Profile for this account. This is a read-only field that can be left blank.",
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string"
-        },
-        "shareReportsWithTwitter": {
-          "description": "Share Path to Conversion reports with Twitter.",
-          "type": "boolean"
-        },
-        "active": {
-          "description": "Whether this account is active.",
-          "type": "boolean"
-        },
-        "nielsenOcrEnabled": {
-          "type": "boolean",
-          "description": "Whether campaigns created in this account will be enabled for Nielsen OCR reach ratings by default."
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of this account. This is a read-only, auto-generated field.",
-          "format": "int64"
-        },
-        "description": {
-          "description": "Description of this account.",
-          "type": "string"
-        },
-        "activeViewOptOut": {
-          "type": "boolean",
-          "description": "Whether to serve creatives with Active View tags. If disabled, viewability data will not be available for any impressions."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#account\"."
-        },
-        "locale": {
-          "description": "Locale of this account. Acceptable values are: - \"cs\" (Czech) - \"de\" (German) - \"en\" (English) - \"en-GB\" (English United Kingdom) - \"es\" (Spanish) - \"fr\" (French) - \"it\" (Italian) - \"ja\" (Japanese) - \"ko\" (Korean) - \"pl\" (Polish) - \"pt-BR\" (Portuguese Brazil) - \"ru\" (Russian) - \"sv\" (Swedish) - \"tr\" (Turkish) - \"zh-CN\" (Chinese Simplified) - \"zh-TW\" (Chinese Traditional) ",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this account. This is a required field, and must be less than 128 characters long and be globally unique."
-        },
-        "accountPermissionIds": {
-          "description": "Account permissions assigned to this account.",
-          "items": {
-            "format": "int64",
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "availablePermissionIds": {
-          "items": {
-            "type": "string",
-            "format": "int64"
-          },
-          "description": "User role permissions available to the user roles of this account.",
-          "type": "array"
-        },
-        "activeAdsLimitTier": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "ACTIVE_ADS_TIER_40K",
-            "ACTIVE_ADS_TIER_75K",
-            "ACTIVE_ADS_TIER_100K",
-            "ACTIVE_ADS_TIER_200K",
-            "ACTIVE_ADS_TIER_300K",
-            "ACTIVE_ADS_TIER_500K",
-            "ACTIVE_ADS_TIER_750K",
-            "ACTIVE_ADS_TIER_1M"
-          ],
-          "type": "string",
-          "description": "Maximum number of active ads allowed for this account."
-        },
-        "teaserSizeLimit": {
-          "format": "int64",
-          "description": "File size limit in kilobytes of Rich Media teaser creatives. Acceptable values are 1 to 10240, inclusive.",
-          "type": "string"
-        },
-        "reportsConfiguration": {
-          "$ref": "ReportsConfiguration",
-          "description": "Reporting configuration of this account."
-        }
-      },
-      "id": "Account",
-      "description": "Contains properties of a Campaign Manager account.",
-      "type": "object"
-    },
-    "PlacementGroup": {
-      "description": "Contains properties of a package or roadblock.",
-      "properties": {
-        "advertiserId": {
-          "format": "int64",
-          "description": "Advertiser ID of this placement group. This is a required field on insertion.",
-          "type": "string"
-        },
-        "comment": {
-          "type": "string",
-          "description": "Comments for this placement group."
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of this placement group. This is a read-only, auto-generated field.",
-          "format": "int64"
-        },
-        "lastModifiedInfo": {
-          "description": "Information about the most recent modification of this placement group. This is a read-only field.",
-          "$ref": "LastModifiedInfo"
-        },
-        "advertiserIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
-        },
-        "campaignIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the campaign. This is a read-only, auto-generated field."
-        },
-        "primaryPlacementId": {
-          "type": "string",
-          "description": "ID of the primary placement, used to calculate the media cost of a roadblock (placement group). Modifying this field will automatically modify the primary field on all affected roadblock child placements.",
-          "format": "int64"
-        },
-        "name": {
-          "description": "Name of this placement group. This is a required field and must be less than 256 characters long.",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementGroup\"."
-        },
-        "siteId": {
-          "type": "string",
-          "description": "Site ID associated with this placement group. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement group. This is a required field that is read-only after insertion.",
-          "format": "int64"
-        },
-        "createInfo": {
-          "description": "Information about the creation of this placement group. This is a read-only field.",
-          "$ref": "LastModifiedInfo"
-        },
-        "idDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of this placement group. This is a read-only, auto-generated field."
-        },
-        "accountId": {
-          "format": "int64",
-          "description": "Account ID of this placement group. This is a read-only field that can be left blank.",
-          "type": "string"
-        },
-        "childPlacementIds": {
-          "items": {
-            "type": "string",
-            "format": "int64"
-          },
-          "description": "IDs of placements which are assigned to this placement group. This is a read-only, auto-generated field.",
-          "type": "array"
-        },
-        "siteIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the site. This is a read-only, auto-generated field."
-        },
-        "archived": {
-          "description": "Whether this placement group is archived.",
-          "type": "boolean"
-        },
-        "contentCategoryId": {
-          "description": "ID of the content category assigned to this placement group.",
-          "format": "int64",
-          "type": "string"
-        },
-        "placementStrategyId": {
-          "description": "ID of the placement strategy assigned to this placement group.",
-          "type": "string",
-          "format": "int64"
-        },
-        "directorySiteIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the directory site. This is a read-only, auto-generated field."
-        },
-        "subaccountId": {
-          "description": "Subaccount ID of this placement group. This is a read-only field that can be left blank.",
-          "type": "string",
-          "format": "int64"
-        },
-        "externalId": {
-          "description": "External ID for this placement.",
-          "type": "string"
-        },
-        "directorySiteId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Directory site ID associated with this placement group. On insert, you must set either this field or the site_id field to specify the site associated with this placement group. This is a required field that is read-only after insertion."
-        },
-        "campaignId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Campaign ID of this placement group. This field is required on insertion."
-        },
-        "placementGroupType": {
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string",
-          "enum": [
-            "PLACEMENT_PACKAGE",
-            "PLACEMENT_ROADBLOCK"
-          ],
-          "description": "Type of this placement group. A package is a simple group of placements that acts as a single pricing point for a group of tags. A roadblock is a group of placements that not only acts as a single pricing point, but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned placements to be marked as primary for reporting. This field is required on insertion."
-        },
-        "primaryPlacementIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the primary placement. This is a read-only, auto-generated field."
-        },
-        "pricingSchedule": {
-          "$ref": "PricingSchedule",
-          "description": "Pricing schedule of this placement group. This field is required on insertion."
-        }
-      },
-      "type": "object",
-      "id": "PlacementGroup"
-    },
-    "PricingSchedulePricingPeriod": {
-      "properties": {
-        "pricingComment": {
-          "type": "string",
-          "description": "Comments for this pricing period."
-        },
-        "startDate": {
-          "format": "date",
-          "type": "string"
-        },
-        "rateOrCostNanos": {
-          "description": "Rate or cost of this pricing period in nanos (i.e., multipled by 1000000000). Acceptable values are 0 to 1000000000000000000, inclusive.",
-          "type": "string",
-          "format": "int64"
-        },
-        "endDate": {
-          "type": "string",
-          "format": "date"
-        },
-        "units": {
-          "format": "int64",
-          "type": "string",
-          "description": "Units of this pricing period. Acceptable values are 0 to 10000000000, inclusive."
-        }
-      },
-      "type": "object",
-      "description": "Pricing Period",
-      "id": "PricingSchedulePricingPeriod"
-    },
-    "ContentCategory": {
-      "description": "Organizes placements according to the contents of their associated webpages.",
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Name of this content category. This is a required field and must be less than 256 characters long and unique among content categories of the same account."
-        },
-        "accountId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Account ID of this content category. This is a read-only field that can be left blank."
-        },
-        "id": {
-          "description": "ID of this content category. This is a read-only, auto-generated field.",
-          "format": "int64",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#contentCategory\".",
-          "type": "string"
-        }
-      },
-      "id": "ContentCategory"
-    },
-    "ClickTag": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "Parameter name for the specified click tag. For DISPLAY_IMAGE_GALLERY creative assets, this field must match the value of the creative asset's creativeAssetId.name field.",
-          "type": "string"
-        },
-        "eventName": {
-          "type": "string",
-          "description": "Advertiser event name associated with the click tag. This field is used by DISPLAY_IMAGE_GALLERY and HTML5_BANNER creatives. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE."
-        },
-        "clickThroughUrl": {
-          "description": "Parameter value for the specified click tag. This field contains a click-through url.",
-          "$ref": "CreativeClickThroughUrl"
-        }
-      },
-      "id": "ClickTag",
-      "description": "Creative Click Tag."
-    },
-    "ReportsConfiguration": {
-      "description": "Reporting Configuration",
-      "id": "ReportsConfiguration",
-      "type": "object",
-      "properties": {
-        "reportGenerationTimeZoneId": {
-          "description": "Report generation time zone ID of this account. This is a required field that can only be changed by a superuser. Acceptable values are: - \"1\" for \"America/New_York\" - \"2\" for \"Europe/London\" - \"3\" for \"Europe/Paris\" - \"4\" for \"Africa/Johannesburg\" - \"5\" for \"Asia/Jerusalem\" - \"6\" for \"Asia/Shanghai\" - \"7\" for \"Asia/Hong_Kong\" - \"8\" for \"Asia/Tokyo\" - \"9\" for \"Australia/Sydney\" - \"10\" for \"Asia/Dubai\" - \"11\" for \"America/Los_Angeles\" - \"12\" for \"Pacific/Auckland\" - \"13\" for \"America/Sao_Paulo\" - \"16\" for \"America/Asuncion\" - \"17\" for \"America/Chicago\" - \"18\" for \"America/Denver\" - \"19\" for \"America/St_Johns\" - \"20\" for \"Asia/Dhaka\" - \"21\" for \"Asia/Jakarta\" - \"22\" for \"Asia/Kabul\" - \"23\" for \"Asia/Karachi\" - \"24\" for \"Asia/Calcutta\" - \"25\" for \"Asia/Pyongyang\" - \"26\" for \"Asia/Rangoon\" - \"27\" for \"Atlantic/Cape_Verde\" - \"28\" for \"Atlantic/South_Georgia\" - \"29\" for \"Australia/Adelaide\" - \"30\" for \"Australia/Lord_Howe\" - \"31\" for \"Europe/Moscow\" - \"32\" for \"Pacific/Kiritimati\" - \"35\" for \"Pacific/Norfolk\" - \"36\" for \"Pacific/Tongatapu\" ",
-          "format": "int64",
-          "type": "string"
-        },
-        "exposureToConversionEnabled": {
-          "description": "Whether the exposure to conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.",
-          "type": "boolean"
-        },
-        "lookbackConfiguration": {
-          "description": "Default lookback windows for new advertisers in this account.",
-          "$ref": "LookbackConfiguration"
-        }
-      }
-    },
-    "FloodlightActivitiesListResponse": {
-      "id": "FloodlightActivitiesListResponse",
-      "properties": {
-        "floodlightActivities": {
-          "type": "array",
-          "description": "Floodlight activity collection.",
-          "items": {
-            "$ref": "FloodlightActivity"
-          }
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivitiesListResponse\"."
-        }
-      },
-      "description": "Floodlight Activity List Response",
-      "type": "object"
-    },
-    "UniversalAdId": {
-      "properties": {
-        "value": {
-          "description": "ID value for this creative. Only alphanumeric characters and the following symbols are valid: \"_/\\-\". Maximum length is 64 characters. Read only when registry is DCM.",
-          "type": "string"
-        },
-        "registry": {
-          "type": "string",
-          "description": "Registry used for the Ad ID value.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "OTHER",
-            "AD_ID_OFFICIAL",
-            "CLEARCAST",
-            "DCM"
-          ]
-        }
-      },
-      "id": "UniversalAdId",
-      "description": "A Universal Ad ID as per the VAST 4.0 spec. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and VPAID.",
-      "type": "object"
-    },
-    "OffsetPosition": {
-      "description": "Offset Position.",
-      "properties": {
-        "top": {
-          "description": "Offset distance from top side of an asset or a window.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "left": {
-          "format": "int32",
-          "description": "Offset distance from left side of an asset or a window.",
-          "type": "integer"
-        }
-      },
-      "type": "object",
-      "id": "OffsetPosition"
-    },
-    "SiteSkippableSetting": {
-      "id": "SiteSkippableSetting",
-      "description": "Skippable Settings",
-      "type": "object",
-      "properties": {
-        "skippable": {
-          "type": "boolean",
-          "description": "Whether the user can skip creatives served to this site. This will act as default for new placements created under this site."
-        },
-        "progressOffset": {
-          "description": "Amount of time to play videos served to this site template before counting a view. Applicable when skippable is true.",
-          "$ref": "VideoOffset"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#siteSkippableSetting\".",
-          "type": "string"
-        },
-        "skipOffset": {
-          "description": "Amount of time to play videos served to this site before the skip button should appear. Applicable when skippable is true.",
-          "$ref": "VideoOffset"
-        }
-      }
-    },
-    "ReportList": {
-      "description": "Represents the list of reports.",
-      "type": "object",
-      "id": "ReportList",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "Continuation token used to page through reports. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted."
-        },
-        "items": {
-          "type": "array",
-          "items": {
-            "$ref": "Report"
-          },
-          "description": "The reports returned in this response."
-        },
-        "etag": {
-          "type": "string",
-          "description": "The eTag of this response for caching purposes."
-        },
-        "kind": {
-          "description": "The kind of list this is, in this case dfareporting#reportList.",
-          "type": "string"
-        }
-      }
-    },
-    "Metro": {
-      "type": "object",
-      "description": "Contains information about a metro region that can be targeted by ads.",
-      "id": "Metro",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Name of this metro region."
-        },
-        "dartId": {
-          "description": "DART ID of this metro region.",
-          "format": "int64",
-          "type": "string"
-        },
-        "dmaId": {
-          "type": "string",
-          "description": "DMA ID of this metro region. This is the ID used for targeting and generating reports, and is equivalent to metro_code.",
-          "format": "int64"
-        },
-        "metroCode": {
-          "type": "string",
-          "description": "Metro code of this metro region. This is equivalent to dma_id."
-        },
-        "countryDartId": {
-          "description": "DART ID of the country to which this metro region belongs.",
-          "type": "string",
-          "format": "int64"
-        },
-        "countryCode": {
-          "type": "string",
-          "description": "Country code of the country to which this metro region belongs."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#metro\"."
-        }
-      }
-    },
-    "UserRolePermissionsListResponse": {
-      "properties": {
-        "userRolePermissions": {
-          "items": {
-            "$ref": "UserRolePermission"
-          },
-          "type": "array",
-          "description": "User role permission collection."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolePermissionsListResponse\"."
-        }
-      },
-      "id": "UserRolePermissionsListResponse",
-      "description": "User Role Permission List Response",
-      "type": "object"
-    },
-    "CrossDimensionReachReportCompatibleFields": {
-      "properties": {
-        "kind": {
-          "description": "The kind of resource this is, in this case dfareporting#crossDimensionReachReportCompatibleFields.",
-          "type": "string"
-        },
-        "breakdown": {
-          "items": {
-            "$ref": "Dimension"
-          },
-          "description": "Dimensions which are compatible to be selected in the \"breakdown\" section of the report.",
-          "type": "array"
-        },
-        "overlapMetrics": {
-          "items": {
-            "$ref": "Metric"
-          },
-          "type": "array",
-          "description": "Metrics which are compatible to be selected in the \"overlapMetricNames\" section of the report."
-        },
-        "metrics": {
-          "type": "array",
-          "items": {
-            "$ref": "Metric"
-          },
-          "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report."
-        },
-        "dimensionFilters": {
-          "description": "Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.",
-          "type": "array",
-          "items": {
-            "$ref": "Dimension"
-          }
-        }
-      },
-      "description": "Represents fields that are compatible to be selected for a report of type \"CROSS_DIMENSION_REACH\".",
-      "id": "CrossDimensionReachReportCompatibleFields",
-      "type": "object"
-    },
-    "Browser": {
-      "description": "Contains information about a browser that can be targeted by ads.",
-      "properties": {
-        "dartId": {
-          "type": "string",
-          "description": "DART ID of this browser. This is the ID used when generating reports.",
-          "format": "int64"
-        },
-        "majorVersion": {
-          "description": "Major version number (leftmost number) of this browser. For example, for Chrome 5.0.376.86 beta, this field should be set to 5. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this browser."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#browser\"."
-        },
-        "minorVersion": {
-          "type": "string",
-          "description": "Minor version number (number after first dot on left) of this browser. For example, for Chrome 5.0.375.86 beta, this field should be set to 0. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is."
-        },
-        "browserVersionId": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID referring to this grouping of browser and version numbers. This is the ID used for targeting."
-        }
-      },
-      "type": "object",
-      "id": "Browser"
-    },
-    "FloodlightActivityDynamicTag": {
-      "type": "object",
-      "properties": {
-        "tag": {
-          "description": "Tag code.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this tag."
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of this dynamic tag. This is a read-only, auto-generated field.",
-          "format": "int64"
-        }
-      },
-      "id": "FloodlightActivityDynamicTag",
-      "description": "Dynamic Tag"
-    },
-    "CreativeAssetId": {
-      "properties": {
-        "name": {
-          "description": "Name of the creative asset. This is a required field while inserting an asset. After insertion, this assetIdentifier is used to identify the uploaded asset. Characters in the name must be alphanumeric or one of the following: \".-_ \". Spaces are allowed.",
-          "type": "string"
-        },
-        "type": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "IMAGE",
-            "FLASH",
-            "VIDEO",
-            "HTML",
-            "HTML_IMAGE",
-            "AUDIO"
-          ],
-          "description": "Type of asset to upload. This is a required field. FLASH and IMAGE are no longer supported for new uploads. All image assets should use HTML_IMAGE."
-        }
-      },
-      "type": "object",
-      "description": "Creative Asset ID.",
-      "id": "CreativeAssetId"
-    },
-    "ConversionStatus": {
-      "description": "The original conversion that was inserted or updated and whether there were any errors.",
-      "properties": {
-        "conversion": {
-          "description": "The original conversion that was inserted or updated.",
-          "$ref": "Conversion"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionStatus\".",
-          "type": "string"
-        },
-        "errors": {
-          "description": "A list of errors related to this conversion.",
-          "type": "array",
-          "items": {
-            "$ref": "ConversionError"
-          }
-        }
-      },
-      "id": "ConversionStatus",
-      "type": "object"
-    },
-    "KeyValueTargetingExpression": {
-      "properties": {
-        "expression": {
-          "type": "string",
-          "description": "Keyword expression being targeted by the ad."
-        }
-      },
-      "type": "object",
-      "description": "Key Value Targeting Expression.",
-      "id": "KeyValueTargetingExpression"
-    },
-    "FloodlightConfiguration": {
-      "properties": {
-        "analyticsDataSharingEnabled": {
-          "description": "Whether advertiser data is shared with Google Analytics.",
-          "type": "boolean"
-        },
-        "lookbackConfiguration": {
-          "$ref": "LookbackConfiguration",
-          "description": "Lookback window settings for this floodlight configuration."
-        },
-        "userDefinedVariableConfigurations": {
-          "description": "List of user defined variables enabled for this configuration.",
-          "type": "array",
-          "items": {
-            "$ref": "UserDefinedVariableConfiguration"
-          }
-        },
-        "naturalSearchConversionAttributionOption": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "description": "Types of attribution options for natural search conversions.",
-          "enum": [
-            "EXCLUDE_NATURAL_SEARCH_CONVERSION_ATTRIBUTION",
-            "INCLUDE_NATURAL_SEARCH_CONVERSION_ATTRIBUTION",
-            "INCLUDE_NATURAL_SEARCH_TIERED_CONVERSION_ATTRIBUTION"
-          ]
-        },
-        "exposureToConversionEnabled": {
-          "description": "Whether the exposure-to-conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.",
-          "type": "boolean"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightConfiguration\"."
-        },
-        "tagSettings": {
-          "description": "Configuration settings for dynamic and image floodlight tags.",
-          "$ref": "TagSettings"
-        },
-        "advertiserIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
-        },
-        "customViewabilityMetric": {
-          "description": "Custom Viewability metric for the floodlight configuration.",
-          "$ref": "CustomViewabilityMetric"
-        },
-        "inAppAttributionTrackingEnabled": {
-          "description": "Whether in-app attribution tracking is enabled.",
-          "type": "boolean"
-        },
-        "idDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of this floodlight configuration. This is a read-only, auto-generated field."
-        },
-        "thirdPartyAuthenticationTokens": {
-          "items": {
-            "$ref": "ThirdPartyAuthenticationToken"
-          },
-          "description": "List of third-party authentication tokens enabled for this configuration.",
-          "type": "array"
-        },
-        "subaccountId": {
-          "type": "string",
-          "description": "Subaccount ID of this floodlight configuration. This is a read-only field that can be left blank.",
-          "format": "int64"
-        },
-        "firstDayOfWeek": {
-          "description": "Day that will be counted as the first day of the week in reports. This is a required field.",
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "enum": [
-            "MONDAY",
-            "SUNDAY"
-          ]
-        },
-        "omnitureSettings": {
-          "$ref": "OmnitureSettings",
-          "description": "Settings for Campaign Manager Omniture integration."
-        },
-        "accountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Account ID of this floodlight configuration. This is a read-only field that can be left blank."
-        },
-        "advertiserId": {
-          "format": "int64",
-          "description": "Advertiser ID of the parent advertiser of this floodlight configuration.",
-          "type": "string"
-        },
-        "id": {
-          "description": "ID of this floodlight configuration. This is a read-only, auto-generated field.",
-          "type": "string",
-          "format": "int64"
-        }
-      },
-      "id": "FloodlightConfiguration",
-      "description": "Contains properties of a Floodlight configuration.",
-      "type": "object"
-    },
-    "UserRolePermissionGroupsListResponse": {
-      "type": "object",
-      "description": "User Role Permission Group List Response",
-      "id": "UserRolePermissionGroupsListResponse",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolePermissionGroupsListResponse\"."
-        },
-        "userRolePermissionGroups": {
-          "items": {
-            "$ref": "UserRolePermissionGroup"
-          },
-          "description": "User role permission group collection.",
-          "type": "array"
-        }
-      }
-    },
-    "EventTagOverride": {
-      "description": "Event tag override information.",
-      "properties": {
-        "enabled": {
-          "description": "Whether this override is enabled.",
-          "type": "boolean"
-        },
-        "id": {
-          "description": "ID of this event tag override. This is a read-only, auto-generated field.",
-          "format": "int64",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "EventTagOverride"
-    },
-    "LookbackConfiguration": {
-      "id": "LookbackConfiguration",
-      "type": "object",
-      "description": "Lookback configuration settings.",
-      "properties": {
-        "clickDuration": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used. Acceptable values are 0 to 90, inclusive."
-        },
-        "postImpressionActivitiesDuration": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used. Acceptable values are 0 to 90, inclusive."
-        }
-      }
-    },
-    "SortedDimension": {
-      "id": "SortedDimension",
-      "description": "Represents a sorted dimension.",
-      "properties": {
-        "sortOrder": {
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "description": "An optional sort order for the dimension column.",
-          "type": "string",
-          "enum": [
-            "ASCENDING",
-            "DESCENDING"
-          ]
-        },
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#sortedDimension."
-        },
-        "name": {
-          "type": "string",
-          "description": "The name of the dimension."
-        }
-      },
-      "type": "object"
-    },
-    "OperatingSystem": {
-      "description": "Contains information about an operating system that can be targeted by ads.",
-      "id": "OperatingSystem",
-      "type": "object",
-      "properties": {
-        "desktop": {
-          "type": "boolean",
-          "description": "Whether this operating system is for desktop."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this operating system."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#operatingSystem\"."
-        },
-        "dartId": {
-          "type": "string",
-          "format": "int64",
-          "description": "DART ID of this operating system. This is the ID used for targeting."
-        },
-        "mobile": {
-          "description": "Whether this operating system is for mobile.",
-          "type": "boolean"
-        }
-      }
-    },
-    "CustomFloodlightVariable": {
-      "type": "object",
-      "id": "CustomFloodlightVariable",
-      "properties": {
-        "type": {
-          "type": "string",
-          "description": "The type of custom floodlight variable to supply a value for. These map to the \"u[1-20]=\" in the tags.",
-          "enum": [
-            "U1",
-            "U2",
-            "U3",
-            "U4",
-            "U5",
-            "U6",
-            "U7",
-            "U8",
-            "U9",
-            "U10",
-            "U11",
-            "U12",
-            "U13",
-            "U14",
-            "U15",
-            "U16",
-            "U17",
-            "U18",
-            "U19",
-            "U20",
-            "U21",
-            "U22",
-            "U23",
-            "U24",
-            "U25",
-            "U26",
-            "U27",
-            "U28",
-            "U29",
-            "U30",
-            "U31",
-            "U32",
-            "U33",
-            "U34",
-            "U35",
-            "U36",
-            "U37",
-            "U38",
-            "U39",
-            "U40",
-            "U41",
-            "U42",
-            "U43",
-            "U44",
-            "U45",
-            "U46",
-            "U47",
-            "U48",
-            "U49",
-            "U50",
-            "U51",
-            "U52",
-            "U53",
-            "U54",
-            "U55",
-            "U56",
-            "U57",
-            "U58",
-            "U59",
-            "U60",
-            "U61",
-            "U62",
-            "U63",
-            "U64",
-            "U65",
-            "U66",
-            "U67",
-            "U68",
-            "U69",
-            "U70",
-            "U71",
-            "U72",
-            "U73",
-            "U74",
-            "U75",
-            "U76",
-            "U77",
-            "U78",
-            "U79",
-            "U80",
-            "U81",
-            "U82",
-            "U83",
-            "U84",
-            "U85",
-            "U86",
-            "U87",
-            "U88",
-            "U89",
-            "U90",
-            "U91",
-            "U92",
-            "U93",
-            "U94",
-            "U95",
-            "U96",
-            "U97",
-            "U98",
-            "U99",
-            "U100"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customFloodlightVariable\".",
-          "type": "string"
-        },
-        "value": {
-          "type": "string",
-          "description": "The value of the custom floodlight variable. The length of string must not exceed 50 characters."
-        }
-      },
-      "description": "A custom floodlight variable."
-    },
-    "AccountsListResponse": {
-      "description": "Account List Response",
-      "properties": {
-        "accounts": {
-          "description": "Account collection.",
-          "type": "array",
-          "items": {
-            "$ref": "Account"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountsListResponse\"."
-        }
-      },
-      "id": "AccountsListResponse",
-      "type": "object"
-    },
-    "AccountPermission": {
-      "description": "AccountPermissions contains information about a particular account permission. Some features of Campaign Manager require an account permission to be present in the account.",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountPermission\".",
-          "type": "string"
-        },
-        "accountProfiles": {
-          "type": "array",
-          "description": "Account profiles associated with this account permission. Possible values are: - \"ACCOUNT_PROFILE_BASIC\" - \"ACCOUNT_PROFILE_STANDARD\" ",
-          "items": {
-            "enum": [
-              "ACCOUNT_PROFILE_BASIC",
-              "ACCOUNT_PROFILE_STANDARD"
-            ],
-            "type": "string",
-            "enumDescriptions": [
-              "",
-              ""
-            ]
-          }
-        },
-        "level": {
-          "description": "Administrative level required to enable this account permission.",
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string",
-          "enum": [
-            "USER",
-            "ADMINISTRATOR"
-          ]
-        },
-        "id": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID of this account permission."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this account permission."
-        },
-        "permissionGroupId": {
-          "type": "string",
-          "description": "Permission group of this account permission.",
-          "format": "int64"
-        }
-      },
-      "type": "object",
-      "id": "AccountPermission"
-    },
-    "FloodlightReportCompatibleFields": {
-      "description": "Represents fields that are compatible to be selected for a report of type \"FlOODLIGHT\".",
-      "properties": {
-        "kind": {
-          "description": "The kind of resource this is, in this case dfareporting#floodlightReportCompatibleFields.",
-          "type": "string"
-        },
-        "dimensions": {
-          "type": "array",
-          "description": "Dimensions which are compatible to be selected in the \"dimensions\" section of the report.",
-          "items": {
-            "$ref": "Dimension"
-          }
-        },
-        "metrics": {
-          "items": {
-            "$ref": "Metric"
-          },
-          "type": "array",
-          "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report."
-        },
-        "dimensionFilters": {
-          "description": "Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.",
-          "type": "array",
-          "items": {
-            "$ref": "Dimension"
-          }
-        }
-      },
-      "id": "FloodlightReportCompatibleFields",
-      "type": "object"
-    },
-    "CreativeClickThroughUrl": {
-      "id": "CreativeClickThroughUrl",
-      "properties": {
-        "computedClickThroughUrl": {
-          "description": "Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows: - If landingPageId is specified then that landing page's URL is assigned to this field. - Otherwise, the customClickThroughUrl is assigned to this field. ",
-          "type": "string"
-        },
-        "customClickThroughUrl": {
-          "description": "Custom click-through URL. Applicable if the landingPageId field is left unset.",
-          "type": "string"
-        },
-        "landingPageId": {
-          "format": "int64",
-          "description": "ID of the landing page for the click-through URL.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Click-through URL"
-    },
-    "CustomEvent": {
-      "id": "CustomEvent",
-      "properties": {
-        "annotateImpressionEvent": {
-          "description": "Annotate an impression. This field is mutually exclusive with insertEvent and annotateClickEvent. This or insertEvent and annotateClickEvent is a required field.",
-          "$ref": "CustomEventImpressionAnnotation"
-        },
-        "floodlightConfigurationId": {
-          "type": "string",
-          "description": "Floodlight configuration ID of the advertiser the event is linked to. This is a required field.",
-          "format": "int64"
-        },
-        "customVariables": {
-          "description": "Custom variables associated with the event.",
-          "items": {
-            "$ref": "CustomVariable"
-          },
-          "type": "array"
-        },
-        "insertEvent": {
-          "$ref": "CustomEventInsert",
-          "description": "Insert custom event. This field is mutually exclusive with annotateClickEvent and annotateImpressionEvent. This or annotateClickEvent and annotateImpressionEvent is a required field."
-        },
-        "annotateClickEvent": {
-          "$ref": "CustomEventClickAnnotation",
-          "description": "Annotate a click event. This field is mutually exclusive with insertEvent and annotateImpressionEvent. This or insertEvent and annotateImpressionEvent is a required field."
-        },
-        "timestampMicros": {
-          "description": "The timestamp of this custom event, in Unix epoch micros. This is a required field.",
-          "format": "int64",
-          "type": "string"
-        },
-        "ordinal": {
-          "type": "string",
-          "description": "The ordinal of this custom event. This is a required field."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customEvent\".",
-          "type": "string"
-        },
-        "eventType": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "UNKNOWN",
-            "INSERT",
-            "ANNOTATE"
-          ],
-          "description": "The type of event. If INSERT, the fields in insertEvent need to be populated. If ANNOTATE, the fields in either annotateClickEvent or annotateImpressionEvent need to be populated."
-        }
-      },
-      "type": "object",
-      "description": "Experimental feature (no support provided) A custom event represents a third party impression, a third party click, an annotation on a first party impression, or an annotation on a first party click."
-    },
-    "CompanionClickThroughOverride": {
-      "id": "CompanionClickThroughOverride",
-      "properties": {
-        "clickThroughUrl": {
-          "description": "Click-through URL of this companion click-through override.",
-          "$ref": "ClickThroughUrl"
-        },
-        "creativeId": {
-          "description": "ID of the creative for this companion click-through override.",
-          "type": "string",
-          "format": "int64"
-        }
-      },
-      "description": "Companion Click-through override.",
-      "type": "object"
-    },
-    "CampaignManagerIds": {
-      "type": "object",
-      "id": "CampaignManagerIds",
-      "properties": {
-        "placementId": {
-          "description": "Placement ID for Campaign Manager.",
-          "type": "string",
-          "format": "int64"
-        },
-        "campaignId": {
-          "description": "Campaign ID for Campaign Manager.",
-          "type": "string",
-          "format": "int64"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaignManagerIds\"."
-        },
-        "adId": {
-          "description": "Ad ID for Campaign Manager.",
-          "format": "int64",
-          "type": "string"
-        },
-        "creativeId": {
-          "type": "string",
-          "description": "Creative ID for Campaign Manager.",
-          "format": "int64"
-        },
-        "siteId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Site ID for Campaign Manager."
-        }
-      },
-      "description": "Campaign Manager IDs related to the custom event."
-    },
-    "CustomViewabilityMetricConfiguration": {
-      "id": "CustomViewabilityMetricConfiguration",
-      "type": "object",
-      "description": "The attributes, like playtime and percent onscreen, that define the Custom Viewability Metric.",
-      "properties": {
-        "timeMillis": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The time in milliseconds the video must play for the Custom Viewability Metric to count an impression. If both this and timePercent are specified, the earlier of the two will be used."
-        },
-        "timePercent": {
-          "description": "The percentage of video that must play for the Custom Viewability Metric to count an impression. If both this and timeMillis are specified, the earlier of the two will be used.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "viewabilityPercent": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The percentage of video that must be on screen for the Custom Viewability Metric to count an impression."
-        },
-        "audible": {
-          "description": "Whether the video must be audible to count an impression.",
-          "type": "boolean"
-        }
-      }
-    },
-    "MobileApp": {
-      "id": "MobileApp",
-      "type": "object",
-      "description": "Contains information about a mobile app. Used as a landing page deep link.",
-      "properties": {
-        "directory": {
-          "enum": [
-            "UNKNOWN",
-            "APPLE_APP_STORE",
-            "GOOGLE_PLAY_STORE"
-          ],
-          "description": "Mobile app directory.",
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ]
-        },
-        "publisherName": {
-          "type": "string",
-          "description": "Publisher name."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#mobileApp\".",
-          "type": "string"
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of this mobile app."
-        },
-        "title": {
-          "description": "Title of this mobile app.",
-          "type": "string"
-        }
-      }
-    },
-    "CreativeOptimizationConfiguration": {
-      "type": "object",
-      "properties": {
-        "optimizationActivitys": {
-          "description": "List of optimization activities associated with this configuration.",
-          "items": {
-            "$ref": "OptimizationActivity"
-          },
-          "type": "array"
-        },
-        "id": {
-          "format": "int64",
-          "description": "ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this creative optimization config. This is a required field and must be less than 129 characters long."
-        },
-        "optimizationModel": {
-          "type": "string",
-          "enum": [
-            "CLICK",
-            "POST_CLICK",
-            "POST_IMPRESSION",
-            "POST_CLICK_AND_IMPRESSION",
-            "VIDEO_COMPLETION"
-          ],
-          "description": "Optimization model for this configuration.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        }
-      },
-      "id": "CreativeOptimizationConfiguration",
-      "description": "Creative optimization settings."
-    },
-    "OrderContact": {
-      "id": "OrderContact",
-      "properties": {
-        "contactName": {
-          "type": "string",
-          "description": "Name of this contact."
-        },
-        "signatureUserProfileId": {
-          "type": "string",
-          "description": "ID of the user profile containing the signature that will be embedded into order documents.",
-          "format": "int64"
-        },
-        "contactTitle": {
-          "type": "string",
-          "description": "Title of this contact."
-        },
-        "contactInfo": {
-          "type": "string",
-          "description": "Free-form information about this contact. It could be any information related to this contact in addition to type, title, name, and signature user profile ID."
-        },
-        "contactType": {
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "PLANNING_ORDER_CONTACT_BUYER_CONTACT",
-            "PLANNING_ORDER_CONTACT_BUYER_BILLING_CONTACT",
-            "PLANNING_ORDER_CONTACT_SELLER_CONTACT"
-          ],
-          "description": "Type of this contact.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Contact of an order."
-    },
-    "ProjectsListResponse": {
-      "type": "object",
-      "id": "ProjectsListResponse",
-      "description": "Project List Response",
-      "properties": {
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#projectsListResponse\"."
-        },
-        "projects": {
-          "type": "array",
-          "items": {
-            "$ref": "Project"
-          },
-          "description": "Project collection."
-        }
-      }
-    },
-    "FloodlightActivityPublisherDynamicTag": {
-      "properties": {
-        "directorySiteId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Directory site ID of this dynamic tag. This is a write-only field that can be used as an alternative to the siteId field. When this resource is retrieved, only the siteId field will be populated."
-        },
-        "clickThrough": {
-          "type": "boolean",
-          "description": "Whether this tag is applicable only for click-throughs."
-        },
-        "dynamicTag": {
-          "$ref": "FloodlightActivityDynamicTag",
-          "description": "Dynamic floodlight tag."
-        },
-        "viewThrough": {
-          "description": "Whether this tag is applicable only for view-throughs.",
-          "type": "boolean"
-        },
-        "siteId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Site ID of this dynamic tag."
-        },
-        "siteIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the site. This is a read-only, auto-generated field."
-        }
-      },
-      "id": "FloodlightActivityPublisherDynamicTag",
-      "description": "Publisher Dynamic Tag",
-      "type": "object"
-    },
-    "DisjunctiveMatchStatement": {
-      "type": "object",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#disjunctiveMatchStatement."
-        },
-        "eventFilters": {
-          "items": {
-            "$ref": "EventFilter"
-          },
-          "description": "The event filters contained within this disjunctive match statement.",
-          "type": "array"
-        }
-      },
-      "id": "DisjunctiveMatchStatement",
-      "description": "Represents a Disjunctive Match Statement resource, which is a conjunction (and) of disjunctive (or) boolean statements."
-    },
-    "DimensionFilter": {
-      "properties": {
-        "value": {
-          "description": "The value of the dimension to filter.",
-          "type": "string"
-        },
-        "dimensionName": {
-          "type": "string",
-          "description": "The name of the dimension to filter."
-        },
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#dimensionFilter."
-        }
-      },
-      "id": "DimensionFilter",
-      "type": "object",
-      "description": "Represents a dimension filter."
-    },
-    "FrequencyCap": {
-      "description": "Frequency Cap.",
-      "id": "FrequencyCap",
-      "type": "object",
-      "properties": {
-        "impressions": {
-          "description": "Number of times an individual user can be served the ad within the specified duration. Acceptable values are 1 to 15, inclusive.",
-          "type": "string",
-          "format": "int64"
-        },
-        "duration": {
-          "format": "int64",
-          "type": "string",
-          "description": "Duration of time, in seconds, for this frequency cap. The maximum duration is 90 days. Acceptable values are 1 to 7776000, inclusive."
-        }
-      }
-    },
-    "Activities": {
-      "type": "object",
-      "properties": {
-        "metricNames": {
-          "description": "List of names of floodlight activity metrics.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#activities."
-        },
-        "filters": {
-          "type": "array",
-          "items": {
-            "$ref": "DimensionValue"
-          },
-          "description": "List of activity filters. The dimension values need to be all either of type \"dfa:activity\" or \"dfa:activityGroup\"."
-        }
-      },
-      "description": "Represents an activity group.",
-      "id": "Activities"
-    },
-    "DimensionValueRequest": {
-      "properties": {
-        "kind": {
-          "description": "The kind of request this is, in this case dfareporting#dimensionValueRequest .",
-          "type": "string"
-        },
-        "dimensionName": {
-          "description": "The name of the dimension for which values should be requested.",
-          "annotations": {
-            "required": [
-              "dfareporting.dimensionValues.query"
-            ]
-          },
-          "type": "string"
-        },
-        "startDate": {
-          "type": "string",
-          "format": "date"
-        },
-        "filters": {
-          "items": {
-            "$ref": "DimensionFilter"
-          },
-          "type": "array",
-          "description": "The list of filters by which to filter values. The filters are ANDed."
-        },
-        "endDate": {
-          "type": "string",
-          "format": "date"
-        }
-      },
-      "id": "DimensionValueRequest",
-      "type": "object",
-      "description": "Represents a DimensionValuesRequest."
-    },
-    "OrderDocumentsListResponse": {
-      "id": "OrderDocumentsListResponse",
-      "description": "Order document List Response",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#orderDocumentsListResponse\"."
-        },
-        "orderDocuments": {
-          "type": "array",
-          "description": "Order document collection",
-          "items": {
-            "$ref": "OrderDocument"
-          }
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "ObjectFilter": {
-      "description": "Object Filter.",
-      "type": "object",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#objectFilter\".",
-          "type": "string"
-        },
-        "objectIds": {
-          "description": "Applicable when status is ASSIGNED. The user has access to objects with these object IDs.",
-          "items": {
-            "format": "int64",
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "status": {
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "NONE",
-            "ASSIGNED",
-            "ALL"
-          ],
-          "type": "string",
-          "description": "Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list."
-        }
-      },
-      "id": "ObjectFilter"
-    },
-    "MobileAppsListResponse": {
-      "description": "Mobile app List Response",
-      "type": "object",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#mobileAppsListResponse\".",
-          "type": "string"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        },
-        "mobileApps": {
-          "items": {
-            "$ref": "MobileApp"
-          },
-          "description": "Mobile apps collection.",
-          "type": "array"
-        }
-      },
-      "id": "MobileAppsListResponse"
-    },
-    "DateRange": {
-      "id": "DateRange",
-      "description": "Represents a date range.",
-      "properties": {
-        "relativeDateRange": {
-          "description": "The date range relative to the date of when the report is run.",
-          "type": "string",
-          "enum": [
-            "TODAY",
-            "YESTERDAY",
-            "WEEK_TO_DATE",
-            "MONTH_TO_DATE",
-            "QUARTER_TO_DATE",
-            "YEAR_TO_DATE",
-            "PREVIOUS_WEEK",
-            "PREVIOUS_MONTH",
-            "PREVIOUS_QUARTER",
-            "PREVIOUS_YEAR",
-            "LAST_7_DAYS",
-            "LAST_30_DAYS",
-            "LAST_90_DAYS",
-            "LAST_365_DAYS",
-            "LAST_24_MONTHS",
-            "LAST_14_DAYS",
-            "LAST_60_DAYS"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#dateRange."
-        },
-        "endDate": {
-          "type": "string",
-          "format": "date"
-        },
-        "startDate": {
-          "type": "string",
-          "format": "date"
-        }
-      },
-      "type": "object"
-    },
-    "DefaultClickThroughEventTagProperties": {
-      "id": "DefaultClickThroughEventTagProperties",
-      "description": "Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign's setting further.",
-      "type": "object",
-      "properties": {
-        "defaultClickThroughEventTagId": {
-          "format": "int64",
-          "description": "ID of the click-through event tag to apply to all ads in this entity's scope.",
-          "type": "string"
-        },
-        "overrideInheritedEventTag": {
-          "type": "boolean",
-          "description": "Whether this entity should override the inherited default click-through event tag with its own defined value."
-        }
-      }
-    },
-    "ConversionsBatchUpdateResponse": {
-      "description": "Update Conversions Response.",
-      "id": "ConversionsBatchUpdateResponse",
-      "type": "object",
-      "properties": {
-        "hasFailures": {
-          "type": "boolean",
-          "description": "Indicates that some or all conversions failed to update."
-        },
-        "status": {
-          "type": "array",
-          "items": {
-            "$ref": "ConversionStatus"
-          },
-          "description": "The update status of each conversion. Statuses are returned in the same order that conversions are updated."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionsBatchUpdateResponse\".",
-          "type": "string"
-        }
-      }
-    },
-    "Project": {
-      "type": "object",
-      "properties": {
-        "overview": {
-          "description": "Overview of this project.",
-          "type": "string"
-        },
-        "endDate": {
-          "type": "string",
-          "format": "date"
-        },
-        "id": {
-          "description": "ID of this project. This is a read-only, auto-generated field.",
-          "type": "string",
-          "format": "int64"
-        },
-        "audienceGender": {
-          "type": "string",
-          "description": "Audience gender of this project.",
-          "enum": [
-            "PLANNING_AUDIENCE_GENDER_MALE",
-            "PLANNING_AUDIENCE_GENDER_FEMALE"
-          ],
-          "enumDescriptions": [
-            "",
-            ""
-          ]
-        },
-        "clientBillingCode": {
-          "type": "string",
-          "description": "Client billing code of this project."
-        },
-        "targetCpaNanos": {
-          "description": "CPA that the advertiser is targeting.",
-          "format": "int64",
-          "type": "string"
-        },
-        "targetConversions": {
-          "type": "string",
-          "format": "int64",
-          "description": "Number of conversions that the advertiser is targeting."
-        },
-        "startDate": {
-          "format": "date",
-          "type": "string"
-        },
-        "budget": {
-          "format": "int64",
-          "description": "Budget of this project in the currency specified by the current account. The value stored in this field represents only the non-fractional amount. For example, for USD, the smallest value that can be represented by this field is 1 US dollar.",
-          "type": "string"
-        },
-        "targetImpressions": {
-          "description": "Number of impressions that the advertiser is targeting.",
-          "type": "string",
-          "format": "int64"
-        },
-        "targetCpmNanos": {
-          "format": "int64",
-          "type": "string",
-          "description": "CPM that the advertiser is targeting."
-        },
-        "advertiserId": {
-          "description": "Advertiser ID of this project.",
-          "format": "int64",
-          "type": "string"
-        },
-        "targetCpmActiveViewNanos": {
-          "description": "vCPM from Active View that the advertiser is targeting.",
-          "format": "int64",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#project\".",
-          "type": "string"
-        },
-        "audienceAgeGroup": {
-          "enum": [
-            "PLANNING_AUDIENCE_AGE_18_24",
-            "PLANNING_AUDIENCE_AGE_25_34",
-            "PLANNING_AUDIENCE_AGE_35_44",
-            "PLANNING_AUDIENCE_AGE_45_54",
-            "PLANNING_AUDIENCE_AGE_55_64",
-            "PLANNING_AUDIENCE_AGE_65_OR_MORE",
-            "PLANNING_AUDIENCE_AGE_UNKNOWN"
-          ],
-          "type": "string",
-          "description": "Audience age group of this project.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this project."
-        },
-        "clientName": {
-          "type": "string",
-          "description": "Name of the project client."
-        },
-        "accountId": {
-          "type": "string",
-          "description": "Account ID of this project.",
-          "format": "int64"
-        },
-        "lastModifiedInfo": {
-          "$ref": "LastModifiedInfo",
-          "description": "Information about the most recent modification of this project."
-        },
-        "subaccountId": {
-          "description": "Subaccount ID of this project.",
-          "type": "string",
-          "format": "int64"
-        },
-        "targetCpcNanos": {
-          "description": "CPC that the advertiser is targeting.",
-          "format": "int64",
-          "type": "string"
-        },
-        "targetClicks": {
-          "type": "string",
-          "description": "Number of clicks that the advertiser is targeting.",
-          "format": "int64"
-        }
-      },
-      "description": "Contains properties of a Planning project.",
-      "id": "Project"
-    },
-    "Region": {
-      "description": "Contains information about a region that can be targeted by ads.",
-      "id": "Region",
-      "properties": {
-        "name": {
-          "description": "Name of this region.",
-          "type": "string"
-        },
-        "countryCode": {
-          "type": "string",
-          "description": "Country code of the country to which this region belongs."
-        },
-        "regionCode": {
-          "description": "Region code.",
-          "type": "string"
-        },
-        "dartId": {
-          "format": "int64",
-          "description": "DART ID of this region.",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#region\"."
-        },
-        "countryDartId": {
-          "type": "string",
-          "description": "DART ID of the country to which this region belongs.",
-          "format": "int64"
-        }
-      },
-      "type": "object"
-    },
-    "EncryptionInfo": {
-      "description": "A description of how user IDs are encrypted.",
-      "type": "object",
-      "id": "EncryptionInfo",
-      "properties": {
-        "encryptionEntityId": {
-          "description": "The encryption entity ID. This should match the encryption configuration for ad serving or Data Transfer.",
-          "format": "int64",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#encryptionInfo\".",
-          "type": "string"
-        },
-        "encryptionEntityType": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "The encryption entity type. This should match the encryption configuration for ad serving or Data Transfer.",
-          "enum": [
-            "ENCRYPTION_ENTITY_TYPE_UNKNOWN",
-            "DCM_ACCOUNT",
-            "DCM_ADVERTISER",
-            "DBM_PARTNER",
-            "DBM_ADVERTISER",
-            "ADWORDS_CUSTOMER",
-            "DFP_NETWORK_CODE"
-          ]
-        },
-        "encryptionSource": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "description": "Describes whether the encrypted cookie was received from ad serving (the %m macro) or from Data Transfer.",
-          "enum": [
-            "ENCRYPTION_SCOPE_UNKNOWN",
-            "AD_SERVING",
-            "DATA_TRANSFER"
-          ]
-        }
-      }
-    },
-    "RemarketingList": {
-      "properties": {
-        "listSize": {
-          "description": "Number of users currently in the list. This is a read-only field.",
-          "type": "string",
-          "format": "int64"
-        },
-        "subaccountId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Subaccount ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests."
-        },
-        "description": {
-          "description": "Remarketing list description.",
-          "type": "string"
-        },
-        "id": {
-          "description": "Remarketing list ID. This is a read-only, auto-generated field.",
-          "format": "int64",
-          "type": "string"
-        },
-        "active": {
-          "type": "boolean",
-          "description": "Whether this remarketing list is active."
-        },
-        "listSource": {
-          "type": "string",
-          "enum": [
-            "REMARKETING_LIST_SOURCE_OTHER",
-            "REMARKETING_LIST_SOURCE_ADX",
-            "REMARKETING_LIST_SOURCE_DFP",
-            "REMARKETING_LIST_SOURCE_XFP",
-            "REMARKETING_LIST_SOURCE_DFA",
-            "REMARKETING_LIST_SOURCE_GA",
-            "REMARKETING_LIST_SOURCE_YOUTUBE",
-            "REMARKETING_LIST_SOURCE_DBM",
-            "REMARKETING_LIST_SOURCE_GPLUS",
-            "REMARKETING_LIST_SOURCE_DMP",
-            "REMARKETING_LIST_SOURCE_PLAY_STORE"
-          ],
-          "description": "Product from which this remarketing list was originated.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#remarketingList\"."
-        },
-        "listPopulationRule": {
-          "description": "Rule used to populate the remarketing list with users.",
-          "$ref": "ListPopulationRule"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of the remarketing list. This is a required field. Must be no greater than 128 characters long."
-        },
-        "advertiserId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Dimension value for the advertiser ID that owns this remarketing list. This is a required field."
-        },
-        "accountId": {
-          "description": "Account ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.",
-          "type": "string",
-          "format": "int64"
-        },
-        "advertiserIdDimensionValue": {
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "lifeSpan": {
-          "format": "int64",
-          "type": "string",
-          "description": "Number of days that a user should remain in the remarketing list without an impression. Acceptable values are 1 to 540, inclusive."
-        }
-      },
-      "type": "object",
-      "description": "Contains properties of a remarketing list. Remarketing enables you to create lists of users who have performed specific actions on a site, then target ads to members of those lists. This resource can be used to manage remarketing lists that are owned by your advertisers. To see all remarketing lists that are visible to your advertisers, including those that are shared to your advertiser or account, use the TargetableRemarketingLists resource.",
-      "id": "RemarketingList"
-    },
-    "CreativeFieldValue": {
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeFieldValue\".",
-          "type": "string"
-        },
-        "id": {
-          "format": "int64",
-          "description": "ID of this creative field value. This is a read-only, auto-generated field.",
-          "type": "string"
-        },
-        "value": {
-          "description": "Value of this creative field value. It needs to be less than 256 characters in length and unique per creative field.",
-          "type": "string"
-        }
-      },
-      "id": "CreativeFieldValue",
-      "description": "Contains properties of a creative field value.",
-      "type": "object"
-    },
-    "CreativeAssignment": {
-      "type": "object",
-      "properties": {
-        "sequence": {
-          "description": "Sequence number of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_SEQUENTIAL. Acceptable values are 1 to 65535, inclusive.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "companionCreativeOverrides": {
-          "items": {
-            "$ref": "CompanionClickThroughOverride"
-          },
-          "description": "Companion creative overrides for this creative assignment. Applicable to video ads.",
-          "type": "array"
-        },
-        "richMediaExitOverrides": {
-          "description": "Rich media exit overrides for this creative assignment. Applicable when the creative type is any of the following: - DISPLAY - RICH_MEDIA_INPAGE - RICH_MEDIA_INPAGE_FLOATING - RICH_MEDIA_IM_EXPAND - RICH_MEDIA_EXPANDING - RICH_MEDIA_INTERSTITIAL_FLOAT - RICH_MEDIA_MOBILE_IN_APP - RICH_MEDIA_MULTI_FLOATING - RICH_MEDIA_PEEL_DOWN - VPAID_LINEAR - VPAID_NON_LINEAR ",
-          "type": "array",
-          "items": {
-            "$ref": "RichMediaExitOverride"
-          }
-        },
-        "clickThroughUrl": {
-          "description": "Click-through URL of the creative assignment.",
-          "$ref": "ClickThroughUrl"
-        },
-        "creativeIdDimensionValue": {
-          "description": "Dimension value for the ID of the creative. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "startTime": {
-          "format": "date-time",
-          "type": "string"
-        },
-        "endTime": {
-          "format": "date-time",
-          "type": "string"
-        },
-        "weight": {
-          "description": "Weight of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_RANDOM. Value must be greater than or equal to 1.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "sslCompliant": {
-          "description": "Whether the creative to be assigned is SSL-compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.",
-          "type": "boolean"
-        },
-        "applyEventTags": {
-          "description": "Whether applicable event tags should fire when this creative assignment is rendered. If this value is unset when the ad is inserted or updated, it will default to true for all creative types EXCEPT for INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO.",
-          "type": "boolean"
-        },
-        "creativeId": {
-          "format": "int64",
-          "description": "ID of the creative to be assigned. This is a required field.",
-          "type": "string"
-        },
-        "active": {
-          "type": "boolean",
-          "description": "Whether this creative assignment is active. When true, the creative will be included in the ad's rotation."
-        },
-        "creativeGroupAssignments": {
-          "type": "array",
-          "items": {
-            "$ref": "CreativeGroupAssignment"
-          },
-          "description": "Creative group assignments for this creative assignment. Only one assignment per creative group number is allowed for a maximum of two assignments."
-        }
-      },
-      "id": "CreativeAssignment",
-      "description": "Creative Assignment."
-    },
-    "EventTag": {
-      "description": "Contains properties of an event tag.",
-      "type": "object",
-      "id": "EventTag",
-      "properties": {
-        "subaccountId": {
-          "format": "int64",
-          "description": "Subaccount ID of this event tag. This is a read-only field that can be left blank.",
-          "type": "string"
-        },
-        "sslCompliant": {
-          "type": "boolean",
-          "description": "Whether this tag is SSL-compliant or not. This is a read-only field."
-        },
-        "campaignIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the campaign. This is a read-only, auto-generated field."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this event tag. This is a required field and must be less than 256 characters long."
-        },
-        "urlEscapeLevels": {
-          "description": "Number of times the landing page URL should be URL-escaped before being appended to the click-through event tag URL. Only applies to click-through event tags as specified by the event tag type.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "accountId": {
-          "format": "int64",
-          "description": "Account ID of this event tag. This is a read-only field that can be left blank.",
-          "type": "string"
-        },
-        "excludeFromAdxRequests": {
-          "description": "Whether to remove this event tag from ads that are trafficked through Display & Video 360 to Ad Exchange. This may be useful if the event tag uses a pixel that is unapproved for Ad Exchange bids on one or more networks, such as the Google Display Network.",
-          "type": "boolean"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#eventTag\".",
-          "type": "string"
-        },
-        "advertiserIdDimensionValue": {
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "enabledByDefault": {
-          "type": "boolean",
-          "description": "Whether this event tag should be automatically enabled for all of the advertiser's campaigns and ads."
-        },
-        "status": {
-          "type": "string",
-          "description": "Status of this event tag. Must be ENABLED for this event tag to fire. This is a required field.",
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "enum": [
-            "ENABLED",
-            "DISABLED"
-          ]
-        },
-        "advertiserId": {
-          "format": "int64",
-          "description": "Advertiser ID of this event tag. This field or the campaignId field is required on insertion.",
-          "type": "string"
-        },
-        "siteIds": {
-          "items": {
-            "format": "int64",
-            "type": "string"
-          },
-          "description": "Filter list of site IDs associated with this event tag. The siteFilterType determines whether this is a allowlist or blocklist filter.",
-          "type": "array"
-        },
-        "siteFilterType": {
-          "description": "Site filter type for this event tag. If no type is specified then the event tag will be applied to all sites.",
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "enum": [
-            "WHITELIST",
-            "BLACKLIST"
-          ],
-          "type": "string"
-        },
-        "url": {
-          "type": "string",
-          "description": "Payload URL for this event tag. The URL on a click-through event tag should have a landing page URL appended to the end of it. This field is required on insertion."
-        },
-        "type": {
-          "description": "Event tag type. Can be used to specify whether to use a third-party pixel, a third-party JavaScript URL, or a third-party click-through URL for either impression or click tracking. This is a required field.",
-          "enum": [
-            "IMPRESSION_IMAGE_EVENT_TAG",
-            "IMPRESSION_JAVASCRIPT_EVENT_TAG",
-            "CLICK_THROUGH_EVENT_TAG"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "type": "string"
-        },
-        "campaignId": {
-          "format": "int64",
-          "description": "Campaign ID of this event tag. This field or the advertiserId field is required on insertion.",
-          "type": "string"
-        },
-        "id": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID of this event tag. This is a read-only, auto-generated field."
-        }
-      }
-    },
-    "ConversionError": {
-      "id": "ConversionError",
-      "type": "object",
-      "description": "The error code and description for a conversion that failed to insert or update.",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionError\".",
-          "type": "string"
-        },
-        "code": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "The error code.",
-          "enum": [
-            "INVALID_ARGUMENT",
-            "INTERNAL",
-            "PERMISSION_DENIED",
-            "NOT_FOUND"
-          ],
-          "type": "string"
-        },
-        "message": {
-          "type": "string",
-          "description": "A description of the error."
-        }
-      }
-    },
-    "DfpSettings": {
-      "type": "object",
-      "id": "DfpSettings",
-      "description": "Google Ad Manager Settings",
-      "properties": {
-        "publisherPortalOnly": {
-          "description": "Whether this directory site is available only via Publisher Portal.",
-          "type": "boolean"
-        },
-        "programmaticPlacementAccepted": {
-          "type": "boolean",
-          "description": "Whether this directory site accepts programmatic placements."
-        },
-        "dfpNetworkName": {
-          "type": "string",
-          "description": "Ad Manager network name for this directory site."
-        },
-        "pubPaidPlacementAccepted": {
-          "description": "Whether this directory site accepts publisher-paid tags.",
-          "type": "boolean"
-        },
-        "dfpNetworkCode": {
-          "description": "Ad Manager network code for this directory site.",
-          "type": "string"
-        }
-      }
-    },
-    "OptimizationActivity": {
-      "type": "object",
-      "id": "OptimizationActivity",
-      "properties": {
-        "weight": {
-          "format": "int32",
-          "description": "Weight associated with this optimization. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities. Value must be greater than or equal to 1.",
-          "type": "integer"
-        },
-        "floodlightActivityIdDimensionValue": {
-          "description": "Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "floodlightActivityId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Floodlight activity ID of this optimization activity. This is a required field."
-        }
-      },
-      "description": "Creative optimization activity."
-    },
-    "SiteContact": {
-      "properties": {
-        "address": {
-          "type": "string",
-          "description": "Address of this site contact."
-        },
-        "lastName": {
-          "description": "Last name of this site contact.",
-          "type": "string"
-        },
-        "phone": {
-          "description": "Primary phone number of this site contact.",
-          "type": "string"
-        },
-        "title": {
-          "description": "Title or designation of this site contact.",
-          "type": "string"
-        },
-        "email": {
-          "description": "Email address of this site contact. This is a required field.",
-          "type": "string"
-        },
-        "id": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of this site contact. This is a read-only, auto-generated field."
-        },
-        "firstName": {
-          "type": "string",
-          "description": "First name of this site contact."
-        },
-        "contactType": {
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "enum": [
-            "SALES_PERSON",
-            "TRAFFICKER"
-          ],
-          "description": "Site contact type.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "SiteContact",
-      "description": "Site Contact"
-    },
-    "City": {
-      "type": "object",
-      "description": "Contains information about a city that can be targeted by ads.",
-      "properties": {
-        "metroDmaId": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of the metro region (DMA) to which this city belongs."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#city\"."
-        },
-        "dartId": {
-          "format": "int64",
-          "type": "string",
-          "description": "DART ID of this city. This is the ID used for targeting and generating reports."
-        },
-        "regionCode": {
-          "type": "string",
-          "description": "Region code of the region to which this city belongs."
-        },
-        "name": {
-          "description": "Name of this city.",
-          "type": "string"
-        },
-        "metroCode": {
-          "type": "string",
-          "description": "Metro region code of the metro region (DMA) to which this city belongs."
-        },
-        "countryCode": {
-          "type": "string",
-          "description": "Country code of the country to which this city belongs."
-        },
-        "regionDartId": {
-          "format": "int64",
-          "description": "DART ID of the region to which this city belongs.",
-          "type": "string"
-        },
-        "countryDartId": {
-          "type": "string",
-          "format": "int64",
-          "description": "DART ID of the country to which this city belongs."
-        }
-      },
-      "id": "City"
-    },
-    "Conversion": {
-      "id": "Conversion",
-      "description": "A Conversion represents when a user successfully performs a desired action after seeing an ad.",
-      "properties": {
-        "floodlightConfigurationId": {
-          "type": "string",
-          "description": "Floodlight Configuration ID of this conversion. This is a required field.",
-          "format": "int64"
-        },
-        "encryptedUserId": {
-          "type": "string",
-          "description": "The alphanumeric encrypted user ID. When set, encryptionInfo should also be specified. This field is mutually exclusive with encryptedUserIdCandidates[], matchId, mobileDeviceId, gclid and dclid. This or encryptedUserIdCandidates[] or matchId or mobileDeviceId or gclid or dclid is a required field."
-        },
-        "matchId": {
-          "type": "string",
-          "description": "The match ID field. A match ID is your own first-party identifier that has been synced with Google using the match ID feature in Floodlight. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[],mobileDeviceId, gclid and dclid. This or encryptedUserId or encryptedUserIdCandidates[] or mobileDeviceId or gclid or dclid is a required field."
-        },
-        "timestampMicros": {
-          "format": "int64",
-          "type": "string",
-          "description": "The timestamp of conversion, in Unix epoch micros. This is a required field."
-        },
-        "ordinal": {
-          "type": "string",
-          "description": "The ordinal of the conversion. Use this field to control how conversions of the same user and day are de-duplicated. This is a required field."
-        },
-        "mobileDeviceId": {
-          "description": "The mobile device ID. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[], matchId, gclid and dclid. This or encryptedUserId or encryptedUserIdCandidates[] or matchId or gclid or dclid is a required field.",
-          "type": "string"
-        },
-        "limitAdTracking": {
-          "type": "boolean",
-          "description": "Whether Limit Ad Tracking is enabled. When set to true, the conversion will be used for reporting but not targeting. This will prevent remarketing."
-        },
-        "dclid": {
-          "description": "The display click ID. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[], matchId, mobileDeviceId and gclid. This or encryptedUserId or encryptedUserIdCandidates[] or matchId or mobileDeviceId or gclid is a required field.",
-          "type": "string"
-        },
-        "floodlightActivityId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Floodlight Activity ID of this conversion. This is a required field."
-        },
-        "encryptedUserIdCandidates": {
-          "items": {
-            "type": "string"
-          },
-          "description": "A list of the alphanumeric encrypted user IDs. Any user ID with exposure prior to the conversion timestamp will be used in the inserted conversion. If no such user ID is found then the conversion will be rejected with INVALID_ARGUMENT error. When set, encryptionInfo should also be specified. This field may only be used when calling batchinsert; it is not supported by batchupdate. This field is mutually exclusive with encryptedUserId, matchId, mobileDeviceId, gclid and dclid. This or encryptedUserId or matchId or mobileDeviceId or gclid or dclid is a required field.",
-          "type": "array"
-        },
-        "childDirectedTreatment": {
-          "type": "boolean",
-          "description": "Whether this particular request may come from a user under the age of 13, under COPPA compliance."
-        },
-        "nonPersonalizedAd": {
-          "description": "Whether the conversion was for a non personalized ad.",
-          "type": "boolean"
-        },
-        "quantity": {
-          "type": "string",
-          "description": "The quantity of the conversion.",
-          "format": "int64"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversion\".",
-          "type": "string"
-        },
-        "value": {
-          "type": "number",
-          "format": "double",
-          "description": "The value of the conversion."
-        },
-        "treatmentForUnderage": {
-          "description": "Whether this particular request may come from a user under the age of 16 (may differ by country), under compliance with the European Union's General Data Protection Regulation (GDPR).",
-          "type": "boolean"
-        },
-        "customVariables": {
-          "description": "Custom floodlight variables.",
-          "type": "array",
-          "items": {
-            "$ref": "CustomFloodlightVariable"
-          }
-        },
-        "gclid": {
-          "description": "The Google click ID. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[], matchId, mobileDeviceId and dclid. This or encryptedUserId or encryptedUserIdCandidates[] or matchId or mobileDeviceId or dclid is a required field.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "PlacementsListResponse": {
-      "id": "PlacementsListResponse",
-      "type": "object",
-      "description": "Placement List Response",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementsListResponse\"."
-        },
-        "placements": {
-          "description": "Placement collection.",
-          "type": "array",
-          "items": {
-            "$ref": "Placement"
-          }
-        }
-      }
-    },
-    "DimensionValueList": {
-      "description": "Represents the list of DimensionValue resources.",
-      "properties": {
-        "etag": {
-          "description": "The eTag of this response for caching purposes.",
-          "type": "string"
-        },
-        "nextPageToken": {
-          "description": "Continuation token used to page through dimension values. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted.",
-          "type": "string"
-        },
-        "items": {
-          "description": "The dimension values returned in this response.",
-          "type": "array",
-          "items": {
-            "$ref": "DimensionValue"
-          }
-        },
-        "kind": {
-          "description": "The kind of list this is, in this case dfareporting#dimensionValueList.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "DimensionValueList"
-    },
-    "PlacementAssignment": {
-      "type": "object",
-      "description": "Placement Assignment.",
-      "properties": {
-        "placementIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the placement. This is a read-only, auto-generated field."
-        },
-        "sslRequired": {
-          "description": "Whether the placement to be assigned requires SSL. This is a read-only field that is auto-generated when the ad is inserted or updated.",
-          "type": "boolean"
-        },
-        "active": {
-          "description": "Whether this placement assignment is active. When true, the placement will be included in the ad's rotation.",
-          "type": "boolean"
-        },
-        "placementId": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of the placement to be assigned. This is a required field."
-        }
-      },
-      "id": "PlacementAssignment"
-    },
-    "RemarketingListShare": {
-      "id": "RemarketingListShare",
-      "description": "Contains properties of a remarketing list's sharing information. Sharing allows other accounts or advertisers to target to your remarketing lists. This resource can be used to manage remarketing list sharing to other accounts and advertisers.",
-      "type": "object",
-      "properties": {
-        "sharedAdvertiserIds": {
-          "items": {
-            "type": "string",
-            "format": "int64"
-          },
-          "description": "Advertisers that the remarketing list is shared with.",
-          "type": "array"
-        },
-        "sharedAccountIds": {
-          "type": "array",
-          "description": "Accounts that the remarketing list is shared with.",
-          "items": {
-            "format": "int64",
-            "type": "string"
-          }
-        },
-        "remarketingListId": {
-          "description": "Remarketing list ID. This is a read-only, auto-generated field.",
-          "format": "int64",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#remarketingListShare\".",
-          "type": "string"
-        }
-      }
-    },
-    "Metric": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "The metric name, e.g. dfa:impressions",
-          "type": "string"
-        },
-        "kind": {
-          "description": "The kind of resource this is, in this case dfareporting#metric.",
-          "type": "string"
-        }
-      },
-      "id": "Metric",
-      "description": "Represents a metric."
-    },
-    "FloodlightActivityGroupsListResponse": {
-      "id": "FloodlightActivityGroupsListResponse",
-      "type": "object",
-      "description": "Floodlight Activity Group List Response",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivityGroupsListResponse\".",
-          "type": "string"
-        },
-        "floodlightActivityGroups": {
-          "type": "array",
-          "description": "Floodlight activity group collection.",
-          "items": {
-            "$ref": "FloodlightActivityGroup"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        }
-      }
-    },
-    "VideoFormat": {
-      "properties": {
-        "fileType": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "FLV",
-            "THREEGPP",
-            "MP4",
-            "WEBM",
-            "M3U8"
-          ],
-          "description": "File type of the video format.",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#videoFormat\".",
-          "type": "string"
-        },
-        "id": {
-          "type": "integer",
-          "description": "ID of the video format.",
-          "format": "int32"
-        },
-        "resolution": {
-          "description": "The resolution of this video format.",
-          "$ref": "Size"
-        },
-        "targetBitRate": {
-          "description": "The target bit rate of this video format.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "description": "Contains information about supported video formats.",
-      "id": "VideoFormat",
-      "type": "object"
-    },
-    "Order": {
-      "id": "Order",
-      "properties": {
-        "planningTermId": {
-          "description": "ID of the terms and conditions template used in this order.",
-          "type": "string",
-          "format": "int64"
-        },
-        "siteId": {
-          "items": {
-            "format": "int64",
-            "type": "string"
-          },
-          "description": "Site IDs this order is associated with.",
-          "type": "array"
-        },
-        "buyerOrganizationName": {
-          "type": "string",
-          "description": "Name of the buyer organization."
-        },
-        "advertiserId": {
-          "description": "Advertiser ID of this order.",
-          "format": "int64",
-          "type": "string"
-        },
-        "comments": {
-          "type": "string",
-          "description": "Comments in this order."
-        },
-        "notes": {
-          "type": "string",
-          "description": "Notes of this order."
-        },
-        "projectId": {
-          "format": "int64",
-          "description": "Project ID of this order.",
-          "type": "string"
-        },
-        "siteNames": {
-          "description": "Free-form site names this order is associated with.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#order\"."
-        },
-        "lastModifiedInfo": {
-          "description": "Information about the most recent modification of this order.",
-          "$ref": "LastModifiedInfo"
-        },
-        "approverUserProfileIds": {
-          "description": "IDs for users that have to approve documents created for this order.",
-          "type": "array",
-          "items": {
-            "format": "int64",
-            "type": "string"
-          }
-        },
-        "buyerInvoiceId": {
-          "type": "string",
-          "description": "Buyer invoice ID associated with this order."
-        },
-        "subaccountId": {
-          "description": "Subaccount ID of this order.",
-          "format": "int64",
-          "type": "string"
-        },
-        "id": {
-          "description": "ID of this order. This is a read-only, auto-generated field.",
-          "format": "int64",
-          "type": "string"
-        },
-        "sellerOrganizationName": {
-          "type": "string",
-          "description": "Name of the seller organization."
-        },
-        "sellerOrderId": {
-          "type": "string",
-          "description": "Seller order ID associated with this order."
-        },
-        "accountId": {
-          "type": "string",
-          "description": "Account ID of this order.",
-          "format": "int64"
-        },
-        "contacts": {
-          "type": "array",
-          "description": "Contacts for this order.",
-          "items": {
-            "$ref": "OrderContact"
-          }
-        },
-        "name": {
-          "description": "Name of this order.",
-          "type": "string"
-        },
-        "termsAndConditions": {
-          "type": "string",
-          "description": "Terms and conditions of this order."
-        }
-      },
-      "description": "Describes properties of a Planning order.",
-      "type": "object"
-    },
-    "SiteTranscodeSetting": {
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#siteTranscodeSetting\"."
-        },
-        "enabledVideoFormats": {
-          "items": {
-            "format": "int32",
-            "type": "integer"
-          },
-          "type": "array",
-          "description": "Allowlist of video formats to be served to this site template. Set this list to null or empty to serve all video formats."
-        }
-      },
-      "description": "Transcode Settings",
-      "id": "SiteTranscodeSetting",
-      "type": "object"
-    },
-    "Country": {
-      "description": "Contains information about a country that can be targeted by ads.",
-      "type": "object",
-      "id": "Country",
-      "properties": {
-        "sslEnabled": {
-          "type": "boolean",
-          "description": "Whether ad serving supports secure servers in this country."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this country."
-        },
-        "countryCode": {
-          "type": "string",
-          "description": "Country code."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#country\".",
-          "type": "string"
-        },
-        "dartId": {
-          "type": "string",
-          "format": "int64",
-          "description": "DART ID of this country. This is the ID used for targeting and generating reports."
-        }
-      }
-    },
-    "PlacementTag": {
-      "id": "PlacementTag",
-      "properties": {
-        "placementId": {
-          "format": "int64",
-          "description": "Placement ID",
-          "type": "string"
-        },
-        "tagDatas": {
-          "description": "Tags generated for this placement.",
-          "type": "array",
-          "items": {
-            "$ref": "TagData"
-          }
-        }
-      },
-      "type": "object",
-      "description": "Placement Tag"
-    },
-    "ReachReportCompatibleFields": {
-      "id": "ReachReportCompatibleFields",
-      "properties": {
-        "metrics": {
-          "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.",
-          "items": {
-            "$ref": "Metric"
-          },
-          "type": "array"
-        },
-        "dimensions": {
-          "description": "Dimensions which are compatible to be selected in the \"dimensions\" section of the report.",
-          "items": {
-            "$ref": "Dimension"
-          },
-          "type": "array"
-        },
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#reachReportCompatibleFields."
-        },
-        "dimensionFilters": {
-          "description": "Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.",
-          "type": "array",
-          "items": {
-            "$ref": "Dimension"
-          }
-        },
-        "reachByFrequencyMetrics": {
-          "items": {
-            "$ref": "Metric"
-          },
-          "description": "Metrics which are compatible to be selected in the \"reachByFrequencyMetricNames\" section of the report.",
-          "type": "array"
-        },
-        "pivotedActivityMetrics": {
-          "items": {
-            "$ref": "Metric"
-          },
-          "type": "array",
-          "description": "Metrics which are compatible to be selected as activity metrics to pivot on in the \"activities\" section of the report."
-        }
-      },
-      "type": "object",
-      "description": "Represents fields that are compatible to be selected for a report of type \"REACH\"."
-    },
-    "CustomEventError": {
-      "description": "The error code and description for a custom event that failed to insert.",
-      "id": "CustomEventError",
-      "properties": {
-        "code": {
-          "enum": [
-            "UNKNOWN",
-            "INVALID_ARGUMENT",
-            "INTERNAL",
-            "PERMISSION_DENIED",
-            "NOT_FOUND"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "The error code."
-        },
-        "message": {
-          "type": "string",
-          "description": "A description of the error."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customEventError\".",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "ConnectionType": {
-      "id": "ConnectionType",
-      "properties": {
-        "id": {
-          "description": "ID of this connection type.",
-          "type": "string",
-          "format": "int64"
-        },
-        "name": {
-          "description": "Name of this connection type.",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#connectionType\"."
-        }
-      },
-      "type": "object",
-      "description": "Contains information about an internet connection type that can be targeted by ads. Clients can use the connection type to target mobile vs. broadband users."
-    },
-    "CreativeField": {
-      "type": "object",
-      "id": "CreativeField",
-      "properties": {
-        "advertiserIdDimensionValue": {
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "name": {
-          "description": "Name of this creative field. This is a required field and must be less than 256 characters long and unique among creative fields of the same advertiser.",
-          "type": "string"
-        },
-        "accountId": {
-          "description": "Account ID of this creative field. This is a read-only field that can be left blank.",
-          "format": "int64",
-          "type": "string"
-        },
-        "subaccountId": {
-          "description": "Subaccount ID of this creative field. This is a read-only field that can be left blank.",
-          "type": "string",
-          "format": "int64"
-        },
-        "advertiserId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Advertiser ID of this creative field. This is a required field on insertion."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeField\".",
-          "type": "string"
-        },
-        "id": {
-          "description": "ID of this creative field. This is a read-only, auto-generated field.",
-          "type": "string",
-          "format": "int64"
-        }
-      },
-      "description": "Contains properties of a creative field."
-    },
-    "TargetableRemarketingList": {
-      "properties": {
-        "subaccountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Subaccount ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests."
-        },
-        "listSize": {
-          "description": "Number of users currently in the list. This is a read-only field.",
-          "format": "int64",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#targetableRemarketingList\"."
-        },
-        "name": {
-          "description": "Name of the targetable remarketing list. Is no greater than 128 characters long.",
-          "type": "string"
-        },
-        "active": {
-          "description": "Whether this targetable remarketing list is active.",
-          "type": "boolean"
-        },
-        "accountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Account ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests."
-        },
-        "id": {
-          "format": "int64",
-          "description": "Targetable remarketing list ID.",
-          "type": "string"
-        },
-        "listSource": {
-          "enum": [
-            "REMARKETING_LIST_SOURCE_OTHER",
-            "REMARKETING_LIST_SOURCE_ADX",
-            "REMARKETING_LIST_SOURCE_DFP",
-            "REMARKETING_LIST_SOURCE_XFP",
-            "REMARKETING_LIST_SOURCE_DFA",
-            "REMARKETING_LIST_SOURCE_GA",
-            "REMARKETING_LIST_SOURCE_YOUTUBE",
-            "REMARKETING_LIST_SOURCE_DBM",
-            "REMARKETING_LIST_SOURCE_GPLUS",
-            "REMARKETING_LIST_SOURCE_DMP",
-            "REMARKETING_LIST_SOURCE_PLAY_STORE"
-          ],
-          "description": "Product from which this targetable remarketing list was originated.",
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "description": {
-          "type": "string",
-          "description": "Targetable remarketing list description."
-        },
-        "advertiserIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the advertiser."
-        },
-        "lifeSpan": {
-          "description": "Number of days that a user should remain in the targetable remarketing list without an impression.",
-          "type": "string",
-          "format": "int64"
-        },
-        "advertiserId": {
-          "description": "Dimension value for the advertiser ID that owns this targetable remarketing list.",
-          "type": "string",
-          "format": "int64"
-        }
-      },
-      "id": "TargetableRemarketingList",
-      "description": "Contains properties of a targetable remarketing list. Remarketing enables you to create lists of users who have performed specific actions on a site, then target ads to members of those lists. This resource is a read-only view of a remarketing list to be used to faciliate targeting ads to specific lists. Remarketing lists that are owned by your advertisers and those that are shared to your advertisers or account are accessible via this resource. To manage remarketing lists that are owned by your advertisers, use the RemarketingLists resource.",
-      "type": "object"
-    },
-    "Rule": {
-      "properties": {
-        "assetId": {
-          "format": "int64",
-          "type": "string",
-          "description": "A creativeAssets[].id. This should refer to one of the parent assets in this creative. This is a required field."
-        },
-        "targetingTemplateId": {
-          "format": "int64",
-          "description": "A targeting template ID. The targeting from the targeting template will be used to determine whether this asset should be served. This is a required field.",
-          "type": "string"
-        },
-        "name": {
-          "description": "A user-friendly name for this rule. This is a required field.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "A rule associates an asset with a targeting template for asset-level targeting. Applicable to INSTREAM_VIDEO creatives.",
-      "id": "Rule"
-    },
-    "Pricing": {
-      "id": "Pricing",
-      "description": "Pricing Information",
-      "type": "object",
-      "properties": {
-        "groupType": {
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "enum": [
-            "PLANNING_PLACEMENT_GROUP_TYPE_PACKAGE",
-            "PLANNING_PLACEMENT_GROUP_TYPE_ROADBLOCK"
-          ],
-          "description": "Group type of this inventory item if it represents a placement group. Is null otherwise. There are two type of placement groups: PLANNING_PLACEMENT_GROUP_TYPE_PACKAGE is a simple group of inventory items that acts as a single pricing point for a group of tags. PLANNING_PLACEMENT_GROUP_TYPE_ROADBLOCK is a group of inventory items that not only acts as a single pricing point, but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned inventory items to be marked as primary.",
-          "type": "string"
-        },
-        "flights": {
-          "type": "array",
-          "description": "Flights of this inventory item. A flight (a.k.a. pricing period) represents the inventory item pricing information for a specific period of time.",
-          "items": {
-            "$ref": "Flight"
-          }
-        },
-        "pricingType": {
-          "description": "Pricing type of this inventory item.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "enum": [
-            "PLANNING_PLACEMENT_PRICING_TYPE_IMPRESSIONS",
-            "PLANNING_PLACEMENT_PRICING_TYPE_CPM",
-            "PLANNING_PLACEMENT_PRICING_TYPE_CLICKS",
-            "PLANNING_PLACEMENT_PRICING_TYPE_CPC",
-            "PLANNING_PLACEMENT_PRICING_TYPE_CPA",
-            "PLANNING_PLACEMENT_PRICING_TYPE_FLAT_RATE_IMPRESSIONS",
-            "PLANNING_PLACEMENT_PRICING_TYPE_FLAT_RATE_CLICKS",
-            "PLANNING_PLACEMENT_PRICING_TYPE_CPM_ACTIVEVIEW"
-          ]
-        },
-        "capCostType": {
-          "type": "string",
-          "enum": [
-            "PLANNING_PLACEMENT_CAP_COST_TYPE_NONE",
-            "PLANNING_PLACEMENT_CAP_COST_TYPE_MONTHLY",
-            "PLANNING_PLACEMENT_CAP_COST_TYPE_CUMULATIVE"
-          ],
-          "description": "Cap cost type of this inventory item.",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ]
-        },
-        "endDate": {
-          "format": "date",
-          "type": "string"
-        },
-        "startDate": {
-          "format": "date",
-          "type": "string"
-        }
-      }
-    },
-    "FloodlightActivityGroup": {
-      "description": "Contains properties of a Floodlight activity group.",
-      "properties": {
-        "idDimensionValue": {
-          "description": "Dimension value for the ID of this floodlight activity group. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "name": {
-          "description": "Name of this floodlight activity group. This is a required field. Must be less than 65 characters long and cannot contain quotes.",
-          "type": "string"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivityGroup\".",
-          "type": "string"
-        },
-        "advertiserIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
-        },
-        "tagString": {
-          "description": "Value of the type= parameter in the floodlight tag, which the ad servers use to identify the activity group that the activity belongs to. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being a-z0-9[ _ ]. This tag string must also be unique among activity groups of the same floodlight configuration. This field is read-only after insertion.",
-          "type": "string"
-        },
-        "id": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID of this floodlight activity group. This is a read-only, auto-generated field."
-        },
-        "accountId": {
-          "format": "int64",
-          "description": "Account ID of this floodlight activity group. This is a read-only field that can be left blank.",
-          "type": "string"
-        },
-        "advertiserId": {
-          "description": "Advertiser ID of this floodlight activity group. If this field is left blank, the value will be copied over either from the floodlight configuration's advertiser or from the existing activity group's advertiser.",
-          "format": "int64",
-          "type": "string"
-        },
-        "floodlightConfigurationId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Floodlight configuration ID of this floodlight activity group. This is a required field."
-        },
-        "floodlightConfigurationIdDimensionValue": {
-          "description": "Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "type": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "enum": [
-            "COUNTER",
-            "SALE"
-          ],
-          "description": "Type of the floodlight activity group. This is a required field that is read-only after insertion."
-        },
-        "subaccountId": {
-          "description": "Subaccount ID of this floodlight activity group. This is a read-only field that can be left blank.",
-          "type": "string",
-          "format": "int64"
-        }
-      },
-      "id": "FloodlightActivityGroup",
-      "type": "object"
-    },
-    "Creative": {
-      "id": "Creative",
-      "description": "Contains properties of a Creative.",
-      "type": "object",
-      "properties": {
-        "exitCustomEvents": {
-          "description": "List of exit events configured for the creative. For DISPLAY and DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags, For DISPLAY, an event is also created from the backupImageReportingLabel. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
-          "type": "array",
-          "items": {
-            "$ref": "CreativeCustomEvent"
-          }
-        },
-        "creativeAssets": {
-          "type": "array",
-          "items": {
-            "$ref": "CreativeAsset"
-          },
-          "description": "Assets associated with a creative. Applicable to all but the following creative types: INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and REDIRECT"
-        },
-        "companionCreatives": {
-          "type": "array",
-          "description": "List of companion creatives assigned to an in-Stream video creative. Acceptable values include IDs of existing flash and image creatives. Applicable to the following creative types: all VPAID, all INSTREAM_AUDIO and all INSTREAM_VIDEO with dynamicAssetSelection set to false.",
-          "items": {
-            "type": "string",
-            "format": "int64"
-          }
-        },
-        "skipOffset": {
-          "description": "Amount of time to play the video before the skip button appears. Applicable to the following creative types: all INSTREAM_VIDEO.",
-          "$ref": "VideoOffset"
-        },
-        "overrideCss": {
-          "type": "string",
-          "description": "Override CSS value for rich media creatives. Applicable to the following creative types: all RICH_MEDIA."
-        },
-        "renderingId": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID of current rendering version. This is a read-only field. Applicable to all creative types."
-        },
-        "adParameters": {
-          "description": "Ad parameters user for VPAID creative. This is a read-only field. Applicable to the following creative types: all VPAID.",
-          "type": "string"
-        },
-        "backupImageClickThroughUrl": {
-          "description": "Click-through URL for backup image. Applicable to ENHANCED_BANNER when the primary asset type is not HTML_IMAGE.",
-          "$ref": "CreativeClickThroughUrl"
-        },
-        "id": {
-          "description": "ID of this creative. This is a read-only, auto-generated field. Applicable to all creative types.",
-          "type": "string",
-          "format": "int64"
-        },
-        "type": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "IMAGE",
-            "DISPLAY_REDIRECT",
-            "CUSTOM_DISPLAY",
-            "INTERNAL_REDIRECT",
-            "CUSTOM_DISPLAY_INTERSTITIAL",
-            "INTERSTITIAL_INTERNAL_REDIRECT",
-            "TRACKING_TEXT",
-            "RICH_MEDIA_DISPLAY_BANNER",
-            "RICH_MEDIA_INPAGE_FLOATING",
-            "RICH_MEDIA_IM_EXPAND",
-            "RICH_MEDIA_DISPLAY_EXPANDING",
-            "RICH_MEDIA_DISPLAY_INTERSTITIAL",
-            "RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL",
-            "RICH_MEDIA_MOBILE_IN_APP",
-            "FLASH_INPAGE",
-            "INSTREAM_VIDEO",
-            "VPAID_LINEAR_VIDEO",
-            "VPAID_NON_LINEAR_VIDEO",
-            "INSTREAM_VIDEO_REDIRECT",
-            "RICH_MEDIA_PEEL_DOWN",
-            "HTML5_BANNER",
-            "DISPLAY",
-            "DISPLAY_IMAGE_GALLERY",
-            "BRAND_SAFE_DEFAULT_INSTREAM_VIDEO",
-            "INSTREAM_AUDIO"
-          ],
-          "type": "string",
-          "description": "Type of this creative. This is a required field. Applicable to all creative types. *Note:* FLASH_INPAGE, HTML5_BANNER, and IMAGE are only used for existing creatives. New creatives should use DISPLAY as a replacement for these types."
-        },
-        "commercialId": {
-          "type": "string",
-          "description": "Industry standard ID assigned to creative for reach and frequency. Applicable to INSTREAM_VIDEO_REDIRECT creatives."
-        },
-        "size": {
-          "description": "Size associated with this creative. When inserting or updating a creative either the size ID field or size width and height fields can be used. This is a required field when applicable; however for IMAGE, FLASH_INPAGE creatives, and for DISPLAY creatives with a primary asset of type HTML_IMAGE, if left blank, this field will be automatically set using the actual size of the associated image assets. Applicable to the following creative types: DISPLAY, DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA.",
-          "$ref": "Size"
-        },
-        "mediaDuration": {
-          "type": "number",
-          "description": "Creative audio or video duration in seconds. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO, INSTREAM_AUDIO, all RICH_MEDIA, and all VPAID.",
-          "format": "float"
-        },
-        "sslCompliant": {
-          "type": "boolean",
-          "description": "Whether the creative is SSL-compliant. This is a read-only field. Applicable to all creative types."
-        },
-        "autoAdvanceImages": {
-          "description": "Whether images are automatically advanced for image gallery creatives. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY.",
-          "type": "boolean"
-        },
-        "subaccountId": {
-          "format": "int64",
-          "description": "Subaccount ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.",
-          "type": "string"
-        },
-        "advertiserId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Advertiser ID of this creative. This is a required field. Applicable to all creative types."
-        },
-        "convertFlashToHtml5": {
-          "description": "Whether Flash assets associated with the creative need to be automatically converted to HTML5. This flag is enabled by default and users can choose to disable it if they don't want the system to generate and use HTML5 asset for this creative. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
-          "type": "boolean"
-        },
-        "progressOffset": {
-          "description": "Amount of time to play the video before counting a view. Applicable to the following creative types: all INSTREAM_VIDEO.",
-          "$ref": "VideoOffset"
-        },
-        "requiredFlashPluginVersion": {
-          "description": "The minimum required Flash plugin version for this creative. For example, 11.2.202.235. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
-          "type": "string"
-        },
-        "artworkType": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "ARTWORK_TYPE_FLASH",
-            "ARTWORK_TYPE_HTML5",
-            "ARTWORK_TYPE_MIXED",
-            "ARTWORK_TYPE_IMAGE"
-          ],
-          "description": "Type of artwork used for the creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID."
-        },
-        "requiredFlashVersion": {
-          "format": "int32",
-          "description": "The internal Flash version for this creative as calculated by Studio. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
-          "type": "integer"
-        },
-        "compatibility": {
-          "items": {
-            "type": "string",
-            "enum": [
-              "DISPLAY",
-              "DISPLAY_INTERSTITIAL",
-              "APP",
-              "APP_INTERSTITIAL",
-              "IN_STREAM_VIDEO",
-              "IN_STREAM_AUDIO"
-            ],
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ]
-          },
-          "type": "array",
-          "description": "Compatibilities associated with this creative. This is a read-only field. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are for rendering in mobile apps. Only pre-existing creatives may have these compatibilities since new creatives will either be assigned DISPLAY or DISPLAY_INTERSTITIAL instead. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. IN_STREAM_AUDIO refers to rendering in in-stream audio ads developed with the VAST standard. Applicable to all creative types. Acceptable values are: - \"APP\" - \"APP_INTERSTITIAL\" - \"IN_STREAM_VIDEO\" - \"IN_STREAM_AUDIO\" - \"DISPLAY\" - \"DISPLAY_INTERSTITIAL\" "
-        },
-        "accountId": {
-          "type": "string",
-          "description": "Account ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.",
-          "format": "int64"
-        },
-        "sslOverride": {
-          "description": "Whether creative should be treated as SSL compliant even if the system scan shows it's not. Applicable to all creative types.",
-          "type": "boolean"
-        },
-        "skippable": {
-          "type": "boolean",
-          "description": "Whether the user can choose to skip the creative. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creative\"."
-        },
-        "thirdPartyRichMediaImpressionsUrl": {
-          "type": "string",
-          "description": "Third-party URL used to record rich media impressions. Applicable to the following creative types: all RICH_MEDIA."
-        },
-        "active": {
-          "type": "boolean",
-          "description": "Whether the creative is active. Applicable to all creative types."
-        },
-        "backupImageTargetWindow": {
-          "description": "Target window for backup image. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
-          "$ref": "TargetWindow"
-        },
-        "creativeAssetSelection": {
-          "$ref": "CreativeAssetSelection",
-          "description": "Required if dynamicAssetSelection is true."
-        },
-        "backgroundColor": {
-          "description": "The 6-character HTML color code, beginning with #, for the background of the window area where the Flash file is displayed. Default is white. Applicable to the following creative types: FLASH_INPAGE.",
-          "type": "string"
-        },
-        "authoringSource": {
-          "description": "Source application where creative was authored. Presently, only DBM authored creatives will have this field set. Applicable to all creative types.",
-          "enum": [
-            "CREATIVE_AUTHORING_SOURCE_DCM",
-            "CREATIVE_AUTHORING_SOURCE_DBM",
-            "CREATIVE_AUTHORING_SOURCE_STUDIO",
-            "CREATIVE_AUTHORING_SOURCE_GWD"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "timerCustomEvents": {
-          "description": "List of timer events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset is not HTML_IMAGE.",
-          "items": {
-            "$ref": "CreativeCustomEvent"
-          },
-          "type": "array"
-        },
-        "archived": {
-          "description": "Whether the creative is archived. Applicable to all creative types.",
-          "type": "boolean"
-        },
-        "redirectUrl": {
-          "type": "string",
-          "description": "URL of hosted image or hosted video or another ad tag. For INSTREAM_VIDEO_REDIRECT creatives this is the in-stream video redirect URL. The standard for a VAST (Video Ad Serving Template) ad response allows for a redirect link to another VAST 2.0 or 3.0 call. This is a required field when applicable. Applicable to the following creative types: DISPLAY_REDIRECT, INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO_REDIRECT"
-        },
-        "thirdPartyBackupImageImpressionsUrl": {
-          "description": "Third-party URL used to record backup image impressions. Applicable to the following creative types: all RICH_MEDIA.",
-          "type": "string"
-        },
-        "studioTraffickedCreativeId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID."
-        },
-        "counterCustomEvents": {
-          "items": {
-            "$ref": "CreativeCustomEvent"
-          },
-          "description": "List of counter events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID.",
-          "type": "array"
-        },
-        "allowScriptAccess": {
-          "description": "Whether script access is allowed for this creative. This is a read-only and deprecated field which will automatically be set to true on update. Applicable to the following creative types: FLASH_INPAGE.",
-          "type": "boolean"
-        },
-        "adTagKeys": {
-          "description": "Keywords for a Rich Media creative. Keywords let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use keywords to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "idDimensionValue": {
-          "description": "Dimension value for the ID of this creative. This is a read-only field. Applicable to all creative types.",
-          "$ref": "DimensionValue"
-        },
-        "studioCreativeId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Studio creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID."
-        },
-        "obaIcon": {
-          "$ref": "ObaIcon",
-          "description": "Online behavioral advertising icon to be added to the creative. Applicable to the following creative types: all INSTREAM_VIDEO."
-        },
-        "fsCommand": {
-          "$ref": "FsCommand",
-          "description": "OpenWindow FSCommand of this creative. This lets the SWF file communicate with either Flash Player or the program hosting Flash Player, such as a web browser. This is only triggered if allowScriptAccess field is true. Applicable to the following creative types: FLASH_INPAGE."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of the creative. This is a required field and must be less than 256 characters long. Applicable to all creative types."
-        },
-        "lastModifiedInfo": {
-          "description": "Creative last modification information. This is a read-only field. Applicable to all creative types.",
-          "$ref": "LastModifiedInfo"
-        },
-        "dynamicAssetSelection": {
-          "type": "boolean",
-          "description": "Set this to true to enable the use of rules to target individual assets in this creative. When set to true creativeAssetSelection must be set. This also controls asset-level companions. When this is true, companion creatives should be assigned to creative assets. Learn more. Applicable to INSTREAM_VIDEO creatives."
-        },
-        "customKeyValues": {
-          "items": {
-            "type": "string"
-          },
-          "description": "Custom key-values for a Rich Media creative. Key-values let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use key-values to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
-          "type": "array"
-        },
-        "latestTraffickedCreativeId": {
-          "description": "Latest Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
-          "type": "string",
-          "format": "int64"
-        },
-        "studioAdvertiserId": {
-          "type": "string",
-          "description": "Studio advertiser ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
-          "format": "int64"
-        },
-        "backupImageFeatures": {
-          "type": "array",
-          "items": {
-            "type": "string",
-            "enum": [
-              "CSS_FONT_FACE",
-              "CSS_BACKGROUND_SIZE",
-              "CSS_BORDER_IMAGE",
-              "CSS_BORDER_RADIUS",
-              "CSS_BOX_SHADOW",
-              "CSS_FLEX_BOX",
-              "CSS_HSLA",
-              "CSS_MULTIPLE_BGS",
-              "CSS_OPACITY",
-              "CSS_RGBA",
-              "CSS_TEXT_SHADOW",
-              "CSS_ANIMATIONS",
-              "CSS_COLUMNS",
-              "CSS_GENERATED_CONTENT",
-              "CSS_GRADIENTS",
-              "CSS_REFLECTIONS",
-              "CSS_TRANSFORMS",
-              "CSS_TRANSFORMS3D",
-              "CSS_TRANSITIONS",
-              "APPLICATION_CACHE",
-              "CANVAS",
-              "CANVAS_TEXT",
-              "DRAG_AND_DROP",
-              "HASH_CHANGE",
-              "HISTORY",
-              "AUDIO",
-              "VIDEO",
-              "INDEXED_DB",
-              "INPUT_ATTR_AUTOCOMPLETE",
-              "INPUT_ATTR_AUTOFOCUS",
-              "INPUT_ATTR_LIST",
-              "INPUT_ATTR_PLACEHOLDER",
-              "INPUT_ATTR_MAX",
-              "INPUT_ATTR_MIN",
-              "INPUT_ATTR_MULTIPLE",
-              "INPUT_ATTR_PATTERN",
-              "INPUT_ATTR_REQUIRED",
-              "INPUT_ATTR_STEP",
-              "INPUT_TYPE_SEARCH",
-              "INPUT_TYPE_TEL",
-              "INPUT_TYPE_URL",
-              "INPUT_TYPE_EMAIL",
-              "INPUT_TYPE_DATETIME",
-              "INPUT_TYPE_DATE",
-              "INPUT_TYPE_MONTH",
-              "INPUT_TYPE_WEEK",
-              "INPUT_TYPE_TIME",
-              "INPUT_TYPE_DATETIME_LOCAL",
-              "INPUT_TYPE_NUMBER",
-              "INPUT_TYPE_RANGE",
-              "INPUT_TYPE_COLOR",
-              "LOCAL_STORAGE",
-              "POST_MESSAGE",
-              "SESSION_STORAGE",
-              "WEB_SOCKETS",
-              "WEB_SQL_DATABASE",
-              "WEB_WORKERS",
-              "GEO_LOCATION",
-              "INLINE_SVG",
-              "SMIL",
-              "SVG_HREF",
-              "SVG_CLIP_PATHS",
-              "TOUCH",
-              "WEBGL",
-              "SVG_FILTERS",
-              "SVG_FE_IMAGE"
-            ],
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ]
-          },
-          "description": "List of feature dependencies that will cause a backup image to be served if the browser that serves the ad does not support them. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative asset correctly. This field is initially auto-generated to contain all features detected by Campaign Manager for all the assets of this creative and can then be modified by the client. To reset this field, copy over all the creativeAssets' detected features. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE."
-        },
-        "mediaDescription": {
-          "description": "Description of the audio or video ad. Applicable to the following creative types: all INSTREAM_VIDEO, INSTREAM_AUDIO, and all VPAID.",
-          "type": "string"
-        },
-        "additionalSizes": {
-          "items": {
-            "$ref": "Size"
-          },
-          "description": "Additional sizes associated with a responsive creative. When inserting or updating a creative either the size ID field or size width and height fields can be used. Applicable to DISPLAY creatives when the primary asset type is HTML_IMAGE.",
-          "type": "array"
-        },
-        "totalFileSize": {
-          "format": "int64",
-          "type": "string",
-          "description": "Combined size of all creative assets. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID."
-        },
-        "thirdPartyUrls": {
-          "description": "Third-party URLs for tracking in-stream creative events. Applicable to the following creative types: all INSTREAM_VIDEO, all INSTREAM_AUDIO, and all VPAID.",
-          "items": {
-            "$ref": "ThirdPartyTrackingUrl"
-          },
-          "type": "array"
-        },
-        "htmlCodeLocked": {
-          "description": "Whether HTML code is generated by Campaign Manager or manually entered. Set to true to ignore changes to htmlCode. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER.",
-          "type": "boolean"
-        },
-        "renderingIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the rendering ID of this creative. This is a read-only field. Applicable to all creative types."
-        },
-        "version": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The version number helps you keep track of multiple versions of your creative in your reports. The version number will always be auto-generated during insert operations to start at 1. For tracking creatives the version cannot be incremented and will always remain at 1. For all other creative types the version can be incremented only by 1 during update operations. In addition, the version will be automatically incremented by 1 when undergoing Rich Media creative merging. Applicable to all creative types."
-        },
-        "universalAdId": {
-          "$ref": "UniversalAdId",
-          "description": "A Universal Ad ID as per the VAST 4.0 spec. Applicable to the following creative types: INSTREAM_AUDIO and INSTREAM_VIDEO and VPAID."
-        },
-        "htmlCode": {
-          "type": "string",
-          "description": "HTML code for the creative. This is a required field when applicable. This field is ignored if htmlCodeLocked is true. Applicable to the following creative types: all CUSTOM, FLASH_INPAGE, and HTML5_BANNER, and all RICH_MEDIA."
-        },
-        "backupImageReportingLabel": {
-          "description": "Reporting label used for HTML5 banner backup image. Applicable to the following creative types: DISPLAY when the primary asset type is not HTML_IMAGE.",
-          "type": "string"
-        },
-        "authoringTool": {
-          "enum": [
-            "NINJA",
-            "SWIFFY"
-          ],
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "description": "Authoring tool for HTML5 banner creatives. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.",
-          "type": "string"
-        },
-        "clickTags": {
-          "type": "array",
-          "description": "Click tags of the creative. For DISPLAY, FLASH_INPAGE, and HTML5_BANNER creatives, this is a subset of detected click tags for the assets associated with this creative. After creating a flash asset, detected click tags will be returned in the creativeAssetMetadata. When inserting the creative, populate the creative clickTags field using the creativeAssetMetadata.clickTags field. For DISPLAY_IMAGE_GALLERY creatives, there should be exactly one entry in this list for each image creative asset. A click tag is matched with a corresponding creative asset by matching the clickTag.name field with the creativeAsset.assetIdentifier.name field. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
-          "items": {
-            "$ref": "ClickTag"
-          }
-        },
-        "creativeFieldAssignments": {
-          "type": "array",
-          "items": {
-            "$ref": "CreativeFieldAssignment"
-          },
-          "description": "Creative field assignments for this creative. Applicable to all creative types."
-        }
-      }
-    },
-    "PlatformTypesListResponse": {
-      "id": "PlatformTypesListResponse",
-      "description": "Platform Type List Response",
-      "properties": {
-        "platformTypes": {
-          "items": {
-            "$ref": "PlatformType"
-          },
-          "type": "array",
-          "description": "Platform type collection."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#platformTypesListResponse\".",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "DynamicTargetingKeysListResponse": {
-      "description": "Dynamic Targeting Key List Response",
-      "id": "DynamicTargetingKeysListResponse",
-      "properties": {
-        "dynamicTargetingKeys": {
-          "type": "array",
-          "description": "Dynamic targeting key collection.",
-          "items": {
-            "$ref": "DynamicTargetingKey"
-          }
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#dynamicTargetingKeysListResponse\"."
-        }
-      },
-      "type": "object"
-    },
-    "AccountActiveAdSummary": {
-      "id": "AccountActiveAdSummary",
-      "type": "object",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountActiveAdSummary\".",
-          "type": "string"
-        },
-        "activeAdsLimitTier": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "ACTIVE_ADS_TIER_40K",
-            "ACTIVE_ADS_TIER_75K",
-            "ACTIVE_ADS_TIER_100K",
-            "ACTIVE_ADS_TIER_200K",
-            "ACTIVE_ADS_TIER_300K",
-            "ACTIVE_ADS_TIER_500K",
-            "ACTIVE_ADS_TIER_750K",
-            "ACTIVE_ADS_TIER_1M"
-          ],
-          "type": "string",
-          "description": "Maximum number of active ads allowed for the account."
-        },
-        "activeAds": {
-          "description": "Ads that have been activated for the account",
-          "type": "string",
-          "format": "int64"
-        },
-        "accountId": {
-          "description": "ID of the account.",
-          "format": "int64",
-          "type": "string"
-        },
-        "availableAds": {
-          "type": "string",
-          "format": "int64",
-          "description": "Ads that can be activated for the account."
-        }
-      },
-      "description": "Gets a summary of active ads in an account."
-    },
-    "ConversionsBatchUpdateRequest": {
-      "id": "ConversionsBatchUpdateRequest",
-      "description": "Update Conversions Request.",
-      "type": "object",
-      "properties": {
-        "conversions": {
-          "type": "array",
-          "items": {
-            "$ref": "Conversion"
-          },
-          "description": "The set of conversions to update."
-        },
-        "encryptionInfo": {
-          "description": "Describes how encryptedUserId is encrypted. This is a required field if encryptedUserId is used.",
-          "$ref": "EncryptionInfo"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionsBatchUpdateRequest\".",
-          "type": "string"
-        }
-      }
-    },
-    "Placement": {
-      "description": "Contains properties of a placement.",
-      "id": "Placement",
-      "properties": {
-        "adBlockingOptOut": {
-          "type": "boolean",
-          "description": "Whether this placement opts out of ad blocking. When true, ad blocking is disabled for this placement. When false, the campaign and site settings take effect."
-        },
-        "placementGroupId": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID of this placement's group, if applicable."
-        },
-        "sslRequired": {
-          "type": "boolean",
-          "description": "Whether creatives assigned to this placement must be SSL-compliant."
-        },
-        "contentCategoryId": {
-          "description": "ID of the content category assigned to this placement.",
-          "type": "string",
-          "format": "int64"
-        },
-        "primary": {
-          "description": "Whether this placement is the primary placement of a roadblock (placement group). You cannot change this field from true to false. Setting this field to true will automatically set the primary field on the original primary placement of the roadblock to false, and it will automatically set the roadblock's primaryPlacementId field to the ID of this placement.",
-          "type": "boolean"
-        },
-        "advertiserId": {
-          "description": "Advertiser ID of this placement. This field can be left blank.",
-          "format": "int64",
-          "type": "string"
-        },
-        "accountId": {
-          "type": "string",
-          "description": "Account ID of this placement. This field can be left blank.",
-          "format": "int64"
-        },
-        "campaignIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the campaign. This is a read-only, auto-generated field."
-        },
-        "subaccountId": {
-          "type": "string",
-          "description": "Subaccount ID of this placement. This field can be left blank.",
-          "format": "int64"
-        },
-        "tagFormats": {
-          "description": "Tag formats to generate for this placement. This field is required on insertion. Acceptable values are: - \"PLACEMENT_TAG_STANDARD\" - \"PLACEMENT_TAG_IFRAME_JAVASCRIPT\" - \"PLACEMENT_TAG_IFRAME_ILAYER\" - \"PLACEMENT_TAG_INTERNAL_REDIRECT\" - \"PLACEMENT_TAG_JAVASCRIPT\" - \"PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT\" - \"PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT\" - \"PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT\" - \"PLACEMENT_TAG_CLICK_COMMANDS\" - \"PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH\" - \"PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_3\" - \"PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_4\" - \"PLACEMENT_TAG_TRACKING\" - \"PLACEMENT_TAG_TRACKING_IFRAME\" - \"PLACEMENT_TAG_TRACKING_JAVASCRIPT\" ",
-          "items": {
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ],
-            "enum": [
-              "PLACEMENT_TAG_STANDARD",
-              "PLACEMENT_TAG_IFRAME_JAVASCRIPT",
-              "PLACEMENT_TAG_IFRAME_ILAYER",
-              "PLACEMENT_TAG_INTERNAL_REDIRECT",
-              "PLACEMENT_TAG_JAVASCRIPT",
-              "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT",
-              "PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT",
-              "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT",
-              "PLACEMENT_TAG_CLICK_COMMANDS",
-              "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH",
-              "PLACEMENT_TAG_TRACKING",
-              "PLACEMENT_TAG_TRACKING_IFRAME",
-              "PLACEMENT_TAG_TRACKING_JAVASCRIPT",
-              "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_3",
-              "PLACEMENT_TAG_IFRAME_JAVASCRIPT_LEGACY",
-              "PLACEMENT_TAG_JAVASCRIPT_LEGACY",
-              "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT_LEGACY",
-              "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT_LEGACY",
-              "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_4"
-            ],
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "publisherUpdateInfo": {
-          "$ref": "LastModifiedInfo",
-          "description": "Information about the last publisher update. This is a read-only field."
-        },
-        "placementStrategyId": {
-          "type": "string",
-          "description": "ID of the placement strategy assigned to this placement.",
-          "format": "int64"
-        },
-        "directorySiteId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Directory site ID of this placement. On insert, you must set either this field or the siteId field to specify the site associated with this placement. This is a required field that is read-only after insertion."
-        },
-        "keyName": {
-          "type": "string",
-          "description": "Key name of this placement. This is a read-only, auto-generated field."
-        },
-        "directorySiteIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the directory site. This is a read-only, auto-generated field."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this placement.This is a required field and must be less than or equal to 256 characters long."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placement\"."
-        },
-        "siteIdDimensionValue": {
-          "description": "Dimension value for the ID of the site. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "lastModifiedInfo": {
-          "$ref": "LastModifiedInfo",
-          "description": "Information about the most recent modification of this placement. This is a read-only field."
-        },
-        "videoSettings": {
-          "description": "A collection of settings which affect video creatives served through this placement. Applicable to placements with IN_STREAM_VIDEO compatibility.",
-          "$ref": "VideoSettings"
-        },
-        "advertiserIdDimensionValue": {
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "size": {
-          "description": "Size associated with this placement. When inserting or updating a placement, only the size ID field is used. This field is required on insertion.",
-          "$ref": "Size"
-        },
-        "createInfo": {
-          "description": "Information about the creation of this placement. This is a read-only field.",
-          "$ref": "LastModifiedInfo"
-        },
-        "videoActiveViewOptOut": {
-          "description": "Whether Verification and ActiveView are disabled for in-stream video creatives for this placement. The same setting videoActiveViewOptOut exists on the site level -- the opt out occurs if either of these settings are true. These settings are distinct from DirectorySites.settings.activeViewOptOut or Sites.siteSettings.activeViewOptOut which only apply to display ads. However, Accounts.activeViewOptOut opts out both video traffic, as well as display ads, from Verification and ActiveView.",
-          "type": "boolean"
-        },
-        "pricingSchedule": {
-          "$ref": "PricingSchedule",
-          "description": "Pricing schedule of this placement. This field is required on insertion, specifically subfields startDate, endDate and pricingType."
-        },
-        "id": {
-          "description": "ID of this placement. This is a read-only, auto-generated field.",
-          "type": "string",
-          "format": "int64"
-        },
-        "campaignId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Campaign ID of this placement. This field is a required field on insertion."
-        },
-        "status": {
-          "type": "string",
-          "enum": [
-            "PENDING_REVIEW",
-            "PAYMENT_ACCEPTED",
-            "PAYMENT_REJECTED",
-            "ACKNOWLEDGE_REJECTION",
-            "ACKNOWLEDGE_ACCEPTANCE",
-            "DRAFT"
-          ],
-          "description": "Third-party placement status.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "siteId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Site ID associated with this placement. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement. This is a required field that is read-only after insertion."
-        },
-        "comment": {
-          "type": "string",
-          "description": "Comments for this placement."
-        },
-        "vpaidAdapterChoice": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "enum": [
-            "DEFAULT",
-            "FLASH",
-            "HTML5",
-            "BOTH"
-          ],
-          "description": "VPAID adapter setting for this placement. Controls which VPAID format the measurement adapter will use for in-stream video creatives assigned to this placement. *Note:* Flash is no longer supported. This field now defaults to HTML5 when the following values are provided: FLASH, BOTH."
-        },
-        "idDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of this placement. This is a read-only, auto-generated field."
-        },
-        "lookbackConfiguration": {
-          "$ref": "LookbackConfiguration",
-          "description": "Lookback window settings for this placement."
-        },
-        "tagSetting": {
-          "description": "Tag settings for this placement.",
-          "$ref": "TagSetting"
-        },
-        "archived": {
-          "description": "Whether this placement is archived.",
-          "type": "boolean"
-        },
-        "paymentApproved": {
-          "description": "Whether payment was approved for this placement. This is a read-only field relevant only to publisher-paid placements.",
-          "type": "boolean"
-        },
-        "paymentSource": {
-          "enum": [
-            "PLACEMENT_AGENCY_PAID",
-            "PLACEMENT_PUBLISHER_PAID"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "description": "Payment source for this placement. This is a required field that is read-only after insertion."
-        },
-        "externalId": {
-          "type": "string",
-          "description": "External ID for this placement."
-        },
-        "placementGroupIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the placement group. This is a read-only, auto-generated field."
-        },
-        "compatibility": {
-          "type": "string",
-          "description": "Placement compatibility. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering on desktop, on mobile devices or in mobile apps for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are no longer allowed for new placement insertions. Instead, use DISPLAY or DISPLAY_INTERSTITIAL. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. This field is required on insertion.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "DISPLAY",
-            "DISPLAY_INTERSTITIAL",
-            "APP",
-            "APP_INTERSTITIAL",
-            "IN_STREAM_VIDEO",
-            "IN_STREAM_AUDIO"
-          ]
-        },
-        "additionalSizes": {
-          "items": {
-            "$ref": "Size"
-          },
-          "description": "Additional sizes associated with this placement. When inserting or updating a placement, only the size ID field is used.",
-          "type": "array"
-        }
-      },
-      "type": "object"
-    },
-    "PricingSchedule": {
-      "properties": {
-        "testingStartDate": {
-          "format": "date",
-          "type": "string"
-        },
-        "flighted": {
-          "type": "boolean",
-          "description": "Whether this placement is flighted. If true, pricing periods will be computed automatically."
-        },
-        "pricingPeriods": {
-          "description": "Pricing periods for this placement.",
-          "type": "array",
-          "items": {
-            "$ref": "PricingSchedulePricingPeriod"
-          }
-        },
-        "capCostOption": {
-          "enum": [
-            "CAP_COST_NONE",
-            "CAP_COST_MONTHLY",
-            "CAP_COST_CUMULATIVE"
-          ],
-          "type": "string",
-          "description": "Placement cap cost option.",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ]
-        },
-        "endDate": {
-          "type": "string",
-          "format": "date"
-        },
-        "floodlightActivityId": {
-          "type": "string",
-          "description": "Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING_TYPE_CPA.",
-          "format": "int64"
-        },
-        "startDate": {
-          "type": "string",
-          "format": "date"
-        },
-        "pricingType": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "Placement pricing type. This field is required on insertion.",
-          "enum": [
-            "PRICING_TYPE_CPM",
-            "PRICING_TYPE_CPC",
-            "PRICING_TYPE_CPA",
-            "PRICING_TYPE_FLAT_RATE_IMPRESSIONS",
-            "PRICING_TYPE_FLAT_RATE_CLICKS",
-            "PRICING_TYPE_CPM_ACTIVEVIEW"
-          ]
-        }
-      },
-      "id": "PricingSchedule",
-      "description": "Pricing Schedule",
-      "type": "object"
-    },
-    "CitiesListResponse": {
-      "type": "object",
-      "description": "City List Response",
-      "properties": {
-        "cities": {
-          "type": "array",
-          "items": {
-            "$ref": "City"
-          },
-          "description": "City collection."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#citiesListResponse\".",
-          "type": "string"
-        }
-      },
-      "id": "CitiesListResponse"
-    },
-    "SiteCompanionSetting": {
-      "id": "SiteCompanionSetting",
-      "properties": {
-        "companionsDisabled": {
-          "description": "Whether companions are disabled for this site template.",
-          "type": "boolean"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#siteCompanionSetting\".",
-          "type": "string"
-        },
-        "imageOnly": {
-          "type": "boolean",
-          "description": "Whether to serve only static images as companions."
-        },
-        "enabledSizes": {
-          "items": {
-            "$ref": "Size"
-          },
-          "description": "Allowlist of companion sizes to be served via this site template. Set this list to null or empty to serve all companion sizes.",
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "description": "Companion Settings"
-    },
-    "CreativeFieldValuesListResponse": {
-      "id": "CreativeFieldValuesListResponse",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeFieldValuesListResponse\"."
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        },
-        "creativeFieldValues": {
-          "items": {
-            "$ref": "CreativeFieldValue"
-          },
-          "type": "array",
-          "description": "Creative field value collection."
-        }
-      },
-      "type": "object",
-      "description": "Creative Field Value List Response"
-    },
-    "LandingPage": {
-      "properties": {
-        "url": {
-          "description": "URL of this landing page. This is a required field.",
-          "type": "string"
-        },
-        "deepLinks": {
-          "type": "array",
-          "description": "Links that will direct the user to a mobile app, if installed.",
-          "items": {
-            "$ref": "DeepLink"
-          }
-        },
-        "id": {
-          "description": "ID of this landing page. This is a read-only, auto-generated field.",
-          "type": "string",
-          "format": "int64"
-        },
-        "name": {
-          "description": "Name of this landing page. This is a required field. It must be less than 256 characters long.",
-          "type": "string"
-        },
-        "archived": {
-          "type": "boolean",
-          "description": "Whether this landing page has been archived."
-        },
-        "advertiserId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Advertiser ID of this landing page. This is a required field."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#landingPage\".",
-          "type": "string"
-        }
-      },
-      "description": "Contains information about where a user's browser is taken after the user clicks an ad.",
-      "id": "LandingPage",
-      "type": "object"
-    },
-    "CreativesListResponse": {
-      "description": "Creative List Response",
-      "type": "object",
-      "id": "CreativesListResponse",
-      "properties": {
-        "creatives": {
-          "type": "array",
-          "description": "Creative collection.",
-          "items": {
-            "$ref": "Creative"
-          }
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativesListResponse\".",
-          "type": "string"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        }
-      }
-    },
-    "VideoOffset": {
-      "type": "object",
-      "id": "VideoOffset",
-      "properties": {
-        "offsetPercentage": {
-          "format": "int32",
-          "description": "Duration, as a percentage of video duration. Do not set when offsetSeconds is set. Acceptable values are 0 to 100, inclusive.",
-          "type": "integer"
-        },
-        "offsetSeconds": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Duration, in seconds. Do not set when offsetPercentage is set. Acceptable values are 0 to 86399, inclusive."
-        }
-      },
-      "description": "Video Offset"
-    },
-    "SkippableSetting": {
-      "type": "object",
-      "properties": {
-        "skipOffset": {
-          "$ref": "VideoOffset",
-          "description": "Amount of time to play videos served to this placement before the skip button should appear. Applicable when skippable is true."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#skippableSetting\".",
-          "type": "string"
-        },
-        "skippable": {
-          "type": "boolean",
-          "description": "Whether the user can skip creatives served to this placement."
-        },
-        "progressOffset": {
-          "description": "Amount of time to play videos served to this placement before counting a view. Applicable when skippable is true.",
-          "$ref": "VideoOffset"
-        }
-      },
-      "description": "Skippable Settings",
-      "id": "SkippableSetting"
-    },
-    "ListTargetingExpression": {
-      "type": "object",
-      "properties": {
-        "expression": {
-          "type": "string",
-          "description": "Expression describing which lists are being targeted by the ad."
-        }
-      },
-      "id": "ListTargetingExpression",
-      "description": "Remarketing List Targeting Expression."
-    },
-    "VideoFormatsListResponse": {
-      "id": "VideoFormatsListResponse",
-      "type": "object",
-      "properties": {
-        "videoFormats": {
-          "items": {
-            "$ref": "VideoFormat"
-          },
-          "type": "array",
-          "description": "Video format collection."
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#videoFormatsListResponse\"."
-        }
-      },
-      "description": "Video Format List Response"
-    },
-    "SizesListResponse": {
-      "id": "SizesListResponse",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#sizesListResponse\".",
-          "type": "string"
-        },
-        "sizes": {
-          "items": {
-            "$ref": "Size"
-          },
-          "type": "array",
-          "description": "Size collection."
-        }
-      },
-      "description": "Size List Response",
-      "type": "object"
-    },
-    "PopupWindowProperties": {
-      "description": "Popup Window Properties.",
-      "type": "object",
-      "properties": {
-        "showToolBar": {
-          "type": "boolean",
-          "description": "Whether to display the browser tool bar."
-        },
-        "showStatusBar": {
-          "description": "Whether to display the browser status bar.",
-          "type": "boolean"
-        },
-        "positionType": {
-          "enum": [
-            "CENTER",
-            "COORDINATES"
-          ],
-          "description": "Popup window position either centered or at specific coordinate.",
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string"
-        },
-        "showScrollBar": {
-          "description": "Whether to display the browser scroll bar.",
-          "type": "boolean"
-        },
-        "dimension": {
-          "description": "Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID",
-          "$ref": "Size"
-        },
-        "showAddressBar": {
-          "type": "boolean",
-          "description": "Whether to display the browser address bar."
-        },
-        "title": {
-          "type": "string",
-          "description": "Title of popup window."
-        },
-        "offset": {
-          "$ref": "OffsetPosition",
-          "description": "Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES."
-        },
-        "showMenuBar": {
-          "type": "boolean",
-          "description": "Whether to display the browser menu bar."
-        }
-      },
-      "id": "PopupWindowProperties"
-    },
-    "CustomVariable": {
-      "id": "CustomVariable",
-      "properties": {
-        "index": {
-          "type": "string",
-          "format": "int64",
-          "description": "The index of the custom variable."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customVariable\".",
-          "type": "string"
-        },
-        "value": {
-          "description": "The value of the custom variable. The length of string must not exceed 50 characters.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Custom variable."
-    },
-    "ConnectionTypesListResponse": {
-      "id": "ConnectionTypesListResponse",
-      "type": "object",
-      "description": "Connection Type List Response",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#connectionTypesListResponse\"."
-        },
-        "connectionTypes": {
-          "description": "Collection of connection types such as broadband and mobile.",
-          "type": "array",
-          "items": {
-            "$ref": "ConnectionType"
-          }
-        }
-      }
-    },
-    "RegionsListResponse": {
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#regionsListResponse\"."
-        },
-        "regions": {
-          "items": {
-            "$ref": "Region"
-          },
-          "description": "Region collection.",
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "description": "Region List Response",
-      "id": "RegionsListResponse"
-    },
-    "Flight": {
-      "type": "object",
-      "description": "Flight",
-      "properties": {
-        "startDate": {
-          "format": "date",
-          "type": "string"
-        },
-        "units": {
-          "description": "Units of this flight.",
-          "type": "string",
-          "format": "int64"
-        },
-        "endDate": {
-          "type": "string",
-          "format": "date"
-        },
-        "rateOrCost": {
-          "type": "string",
-          "description": "Rate or cost of this flight.",
-          "format": "int64"
-        }
-      },
-      "id": "Flight"
-    },
-    "FsCommand": {
-      "id": "FsCommand",
-      "properties": {
-        "windowWidth": {
-          "type": "integer",
-          "description": "Width of the window.",
-          "format": "int32"
-        },
-        "top": {
-          "format": "int32",
-          "description": "Distance from the top of the browser. Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.",
-          "type": "integer"
-        },
-        "windowHeight": {
-          "description": "Height of the window.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "positionOption": {
-          "enum": [
-            "CENTERED",
-            "DISTANCE_FROM_TOP_LEFT_CORNER"
-          ],
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "Position in the browser where the window will open."
-        },
-        "left": {
-          "description": "Distance from the left of the browser.Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "description": "FsCommand.",
-      "type": "object"
-    },
-    "CreativeGroupsListResponse": {
-      "properties": {
-        "creativeGroups": {
-          "type": "array",
-          "items": {
-            "$ref": "CreativeGroup"
-          },
-          "description": "Creative group collection."
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeGroupsListResponse\".",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Creative Group List Response",
-      "id": "CreativeGroupsListResponse"
-    },
-    "UserRolePermission": {
-      "type": "object",
-      "id": "UserRolePermission",
-      "description": "Contains properties of a user role permission.",
-      "properties": {
-        "permissionGroupId": {
-          "format": "int64",
-          "description": "ID of the permission group that this user role permission belongs to.",
-          "type": "string"
-        },
-        "availability": {
-          "type": "string",
-          "description": "Levels of availability for a user role permission.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "NOT_AVAILABLE_BY_DEFAULT",
-            "ACCOUNT_BY_DEFAULT",
-            "SUBACCOUNT_AND_ACCOUNT_BY_DEFAULT",
-            "ACCOUNT_ALWAYS",
-            "SUBACCOUNT_AND_ACCOUNT_ALWAYS"
-          ]
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolePermission\"."
-        },
-        "name": {
-          "description": "Name of this user role permission.",
-          "type": "string"
-        },
-        "id": {
-          "format": "int64",
-          "description": "ID of this user role permission.",
-          "type": "string"
-        }
-      }
-    },
-    "Campaign": {
-      "description": "Contains properties of a Campaign Manager campaign.",
-      "properties": {
-        "id": {
-          "description": "ID of this campaign. This is a read-only auto-generated field.",
-          "type": "string",
-          "format": "int64"
-        },
-        "billingInvoiceCode": {
-          "type": "string",
-          "description": "Billing invoice code included in the Campaign Manager client billing invoices associated with the campaign."
-        },
-        "advertiserId": {
-          "description": "Advertiser ID of this campaign. This is a required field.",
-          "type": "string",
-          "format": "int64"
-        },
-        "additionalCreativeOptimizationConfigurations": {
-          "items": {
-            "$ref": "CreativeOptimizationConfiguration"
-          },
-          "type": "array",
-          "description": "Additional creative optimization configurations for the campaign."
-        },
-        "advertiserIdDimensionValue": {
-          "description": "Dimension value for the advertiser ID of this campaign. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "defaultClickThroughEventTagProperties": {
-          "$ref": "DefaultClickThroughEventTagProperties",
-          "description": "Click-through event tag ID override properties for this campaign."
-        },
-        "createInfo": {
-          "description": "Information about the creation of this campaign. This is a read-only field.",
-          "$ref": "LastModifiedInfo"
-        },
-        "externalId": {
-          "type": "string",
-          "description": "External ID for this campaign."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaign\".",
-          "type": "string"
-        },
-        "clickThroughUrlSuffixProperties": {
-          "description": "Click-through URL suffix override properties for this campaign.",
-          "$ref": "ClickThroughUrlSuffixProperties"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this campaign. This is a required field and must be less than 256 characters long and unique among campaigns of the same advertiser."
-        },
-        "startDate": {
-          "format": "date",
-          "type": "string"
-        },
-        "eventTagOverrides": {
-          "description": "Overrides that can be used to activate or deactivate advertiser event tags.",
-          "items": {
-            "$ref": "EventTagOverride"
-          },
-          "type": "array"
-        },
-        "lastModifiedInfo": {
-          "description": "Information about the most recent modification of this campaign. This is a read-only field.",
-          "$ref": "LastModifiedInfo"
-        },
-        "endDate": {
-          "type": "string",
-          "format": "date"
-        },
-        "nielsenOcrEnabled": {
-          "description": "Whether Nielsen reports are enabled for this campaign.",
-          "type": "boolean"
-        },
-        "advertiserGroupId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Advertiser group ID of the associated advertiser."
-        },
-        "traffickerEmails": {
-          "description": "Campaign trafficker contact emails.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "adBlockingConfiguration": {
-          "$ref": "AdBlockingConfiguration",
-          "description": "Ad blocking settings for this campaign."
-        },
-        "accountId": {
-          "description": "Account ID of this campaign. This is a read-only field that can be left blank.",
-          "type": "string",
-          "format": "int64"
-        },
-        "defaultLandingPageId": {
-          "type": "string",
-          "description": "The default landing page ID for this campaign.",
-          "format": "int64"
-        },
-        "comment": {
-          "type": "string",
-          "description": "Arbitrary comments about this campaign. Must be less than 256 characters long."
-        },
-        "archived": {
-          "type": "boolean",
-          "description": "Whether this campaign has been archived."
-        },
-        "idDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of this campaign. This is a read-only, auto-generated field."
-        },
-        "creativeGroupIds": {
-          "type": "array",
-          "items": {
-            "format": "int64",
-            "type": "string"
-          },
-          "description": "List of creative group IDs that are assigned to the campaign."
-        },
-        "audienceSegmentGroups": {
-          "description": "Audience segment groups assigned to this campaign. Cannot have more than 300 segment groups.",
-          "items": {
-            "$ref": "AudienceSegmentGroup"
-          },
-          "type": "array"
-        },
-        "creativeOptimizationConfiguration": {
-          "description": "Creative optimization configuration for the campaign.",
-          "$ref": "CreativeOptimizationConfiguration"
-        },
-        "subaccountId": {
-          "description": "Subaccount ID of this campaign. This is a read-only field that can be left blank.",
-          "type": "string",
-          "format": "int64"
-        }
-      },
-      "id": "Campaign",
-      "type": "object"
-    },
-    "ListPopulationTerm": {
-      "type": "object",
-      "id": "ListPopulationTerm",
-      "properties": {
-        "variableFriendlyName": {
-          "description": "Friendly name of this term's variable. This is a read-only, auto-generated field. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM.",
-          "type": "string"
-        },
-        "contains": {
-          "description": "Will be true if the term should check if the user is in the list and false if the term should check if the user is not in the list. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM. False by default.",
-          "type": "boolean"
-        },
-        "type": {
-          "enum": [
-            "CUSTOM_VARIABLE_TERM",
-            "LIST_MEMBERSHIP_TERM",
-            "REFERRER_TERM"
-          ],
-          "description": "List population term type determines the applicable fields in this object. If left unset or set to CUSTOM_VARIABLE_TERM, then variableName, variableFriendlyName, operator, value, and negation are applicable. If set to LIST_MEMBERSHIP_TERM then remarketingListId and contains are applicable. If set to REFERRER_TERM then operator, value, and negation are applicable.",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "type": "string"
-        },
-        "variableName": {
-          "type": "string",
-          "description": "Name of the variable (U1, U2, etc.) being compared in this term. This field is only relevant when type is set to null, CUSTOM_VARIABLE_TERM or REFERRER_TERM."
-        },
-        "value": {
-          "description": "Literal to compare the variable to. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.",
-          "type": "string"
-        },
-        "remarketingListId": {
-          "description": "ID of the list in question. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM.",
-          "type": "string",
-          "format": "int64"
-        },
-        "operator": {
-          "type": "string",
-          "description": "Comparison operator of this term. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.",
-          "enum": [
-            "NUM_EQUALS",
-            "NUM_LESS_THAN",
-            "NUM_LESS_THAN_EQUAL",
-            "NUM_GREATER_THAN",
-            "NUM_GREATER_THAN_EQUAL",
-            "STRING_EQUALS",
-            "STRING_CONTAINS"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "negation": {
-          "type": "boolean",
-          "description": "Whether to negate the comparison result of this term during rule evaluation. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM."
-        }
-      },
-      "description": "Remarketing List Population Rule Term."
-    },
-    "DeliverySchedule": {
-      "description": "Delivery Schedule.",
-      "id": "DeliverySchedule",
-      "properties": {
-        "priority": {
-          "description": "Serving priority of an ad, with respect to other ads. The lower the priority number, the greater the priority with which it is served.",
-          "type": "string",
-          "enum": [
-            "AD_PRIORITY_01",
-            "AD_PRIORITY_02",
-            "AD_PRIORITY_03",
-            "AD_PRIORITY_04",
-            "AD_PRIORITY_05",
-            "AD_PRIORITY_06",
-            "AD_PRIORITY_07",
-            "AD_PRIORITY_08",
-            "AD_PRIORITY_09",
-            "AD_PRIORITY_10",
-            "AD_PRIORITY_11",
-            "AD_PRIORITY_12",
-            "AD_PRIORITY_13",
-            "AD_PRIORITY_14",
-            "AD_PRIORITY_15",
-            "AD_PRIORITY_16"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "frequencyCap": {
-          "description": "Limit on the number of times an individual user can be served the ad within a specified period of time.",
-          "$ref": "FrequencyCap"
-        },
-        "impressionRatio": {
-          "format": "int64",
-          "description": "Impression ratio for this ad. This ratio determines how often each ad is served relative to the others. For example, if ad A has an impression ratio of 1 and ad B has an impression ratio of 3, then Campaign Manager will serve ad B three times as often as ad A. Acceptable values are 1 to 10, inclusive.",
-          "type": "string"
-        },
-        "hardCutoff": {
-          "type": "boolean",
-          "description": "Whether or not hard cutoff is enabled. If true, the ad will not serve after the end date and time. Otherwise the ad will continue to be served until it has reached its delivery goals."
-        }
-      },
-      "type": "object"
-    },
-    "Subaccount": {
-      "type": "object",
-      "properties": {
-        "availablePermissionIds": {
-          "items": {
-            "type": "string",
-            "format": "int64"
-          },
-          "description": "IDs of the available user role permissions for this subaccount.",
-          "type": "array"
-        },
-        "id": {
-          "format": "int64",
-          "description": "ID of this subaccount. This is a read-only, auto-generated field.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this subaccount. This is a required field. Must be less than 128 characters long and be unique among subaccounts of the same account."
-        },
-        "accountId": {
-          "description": "ID of the account that contains this subaccount. This is a read-only field that can be left blank.",
-          "type": "string",
-          "format": "int64"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#subaccount\".",
-          "type": "string"
-        }
-      },
-      "id": "Subaccount",
-      "description": "Contains properties of a Campaign Manager subaccount."
-    },
-    "ClickThroughUrlSuffixProperties": {
-      "description": "Click Through URL Suffix settings.",
-      "properties": {
-        "clickThroughUrlSuffix": {
-          "description": "Click-through URL suffix to apply to all ads in this entity's scope. Must be less than 128 characters long.",
-          "type": "string"
-        },
-        "overrideInheritedSuffix": {
-          "description": "Whether this entity should override the inherited click-through URL suffix with its own defined value.",
-          "type": "boolean"
-        }
-      },
-      "type": "object",
-      "id": "ClickThroughUrlSuffixProperties"
-    },
-    "AccountPermissionsListResponse": {
-      "id": "AccountPermissionsListResponse",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountPermissionsListResponse\".",
-          "type": "string"
+            "methods": {
+                "get": {
+                    "description": "Gets one account permission group by ID.",
+                    "flatPath": "userprofiles/{profileId}/accountPermissionGroups/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.accountPermissionGroups.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Account permission group ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accountPermissionGroups/{id}",
+                    "response": {
+                        "$ref": "AccountPermissionGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves the list of account permission groups.",
+                    "flatPath": "userprofiles/{profileId}/accountPermissionGroups",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.accountPermissionGroups.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accountPermissionGroups",
+                    "response": {
+                        "$ref": "AccountPermissionGroupsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
         "accountPermissions": {
-          "type": "array",
-          "items": {
-            "$ref": "AccountPermission"
-          },
-          "description": "Account permission collection."
-        }
-      },
-      "description": "Account Permission List Response",
-      "type": "object"
-    },
-    "CreativeGroupAssignment": {
-      "type": "object",
-      "id": "CreativeGroupAssignment",
-      "description": "Creative Group Assignment.",
-      "properties": {
-        "creativeGroupNumber": {
-          "enum": [
-            "CREATIVE_GROUP_ONE",
-            "CREATIVE_GROUP_TWO"
-          ],
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "Creative group number of the creative group assignment."
+            "methods": {
+                "get": {
+                    "description": "Gets one account permission by ID.",
+                    "flatPath": "userprofiles/{profileId}/accountPermissions/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.accountPermissions.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Account permission ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accountPermissions/{id}",
+                    "response": {
+                        "$ref": "AccountPermission"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves the list of account permissions.",
+                    "flatPath": "userprofiles/{profileId}/accountPermissions",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.accountPermissions.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accountPermissions",
+                    "response": {
+                        "$ref": "AccountPermissionsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "creativeGroupId": {
-          "description": "ID of the creative group to be assigned.",
-          "type": "string",
-          "format": "int64"
-        }
-      }
-    },
-    "ThirdPartyTrackingUrl": {
-      "description": "Third-party Tracking URL.",
-      "type": "object",
-      "properties": {
-        "url": {
-          "type": "string",
-          "description": "URL for the specified third-party URL type."
+        "accountUserProfiles": {
+            "methods": {
+                "get": {
+                    "description": "Gets one account user profile by ID.",
+                    "flatPath": "userprofiles/{profileId}/accountUserProfiles/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.accountUserProfiles.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "User profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accountUserProfiles/{id}",
+                    "response": {
+                        "$ref": "AccountUserProfile"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new account user profile.",
+                    "flatPath": "userprofiles/{profileId}/accountUserProfiles",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.accountUserProfiles.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accountUserProfiles",
+                    "request": {
+                        "$ref": "AccountUserProfile"
+                    },
+                    "response": {
+                        "$ref": "AccountUserProfile"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of account user profiles, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/accountUserProfiles",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.accountUserProfiles.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "active": {
+                            "description": "Select only active user profiles.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ids": {
+                            "description": "Select only user profiles with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name, ID or email. Wildcards (*) are allowed. For example, \"user profile*2015\" will return objects with names like \"user profile June 2015\", \"user profile April 2015\", or simply \"user profile 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"user profile\" will match objects with name \"my user profile\", \"user profile 2015\", or simply \"user profile\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "subaccountId": {
+                            "description": "Select only user profiles with the specified subaccount ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "userRoleId": {
+                            "description": "Select only user profiles with the specified user role ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accountUserProfiles",
+                    "response": {
+                        "$ref": "AccountUserProfilesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing account user profile. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/accountUserProfiles",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.accountUserProfiles.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "AccountUserProfile ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accountUserProfiles",
+                    "request": {
+                        "$ref": "AccountUserProfile"
+                    },
+                    "response": {
+                        "$ref": "AccountUserProfile"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing account user profile.",
+                    "flatPath": "userprofiles/{profileId}/accountUserProfiles",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.accountUserProfiles.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accountUserProfiles",
+                    "request": {
+                        "$ref": "AccountUserProfile"
+                    },
+                    "response": {
+                        "$ref": "AccountUserProfile"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "thirdPartyUrlType": {
-          "description": "Third-party URL type for in-stream video and in-stream audio creatives.",
-          "type": "string",
-          "enum": [
-            "IMPRESSION",
-            "CLICK_TRACKING",
-            "VIDEO_START",
-            "VIDEO_FIRST_QUARTILE",
-            "VIDEO_MIDPOINT",
-            "VIDEO_THIRD_QUARTILE",
-            "VIDEO_COMPLETE",
-            "VIDEO_MUTE",
-            "VIDEO_PAUSE",
-            "VIDEO_REWIND",
-            "VIDEO_FULLSCREEN",
-            "VIDEO_STOP",
-            "VIDEO_CUSTOM",
-            "SURVEY",
-            "RICH_MEDIA_IMPRESSION",
-            "RICH_MEDIA_RM_IMPRESSION",
-            "RICH_MEDIA_BACKUP_IMPRESSION",
-            "VIDEO_SKIP",
-            "VIDEO_PROGRESS"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        }
-      },
-      "id": "ThirdPartyTrackingUrl"
-    },
-    "TargetingTemplate": {
-      "properties": {
-        "languageTargeting": {
-          "description": "Language targeting criteria.",
-          "$ref": "LanguageTargeting"
+        "accounts": {
+            "methods": {
+                "get": {
+                    "description": "Gets one account by ID.",
+                    "flatPath": "userprofiles/{profileId}/accounts/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.accounts.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Account ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accounts/{id}",
+                    "response": {
+                        "$ref": "Account"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves the list of accounts, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/accounts",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.accounts.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "active": {
+                            "description": "Select only active accounts. Don't set this field to select both active and non-active accounts.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ids": {
+                            "description": "Select only accounts with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"account*2015\" will return objects with names like \"account June 2015\", \"account April 2015\", or simply \"account 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"account\" will match objects with name \"my account\", \"account 2015\", or simply \"account\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accounts",
+                    "response": {
+                        "$ref": "AccountsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing account. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/accounts",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.accounts.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Account ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accounts",
+                    "request": {
+                        "$ref": "Account"
+                    },
+                    "response": {
+                        "$ref": "Account"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing account.",
+                    "flatPath": "userprofiles/{profileId}/accounts",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.accounts.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/accounts",
+                    "request": {
+                        "$ref": "Account"
+                    },
+                    "response": {
+                        "$ref": "Account"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "technologyTargeting": {
-          "description": "Technology platform targeting criteria.",
-          "$ref": "TechnologyTargeting"
+        "ads": {
+            "methods": {
+                "get": {
+                    "description": "Gets one ad by ID.",
+                    "flatPath": "userprofiles/{profileId}/ads/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.ads.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Ad ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/ads/{id}",
+                    "response": {
+                        "$ref": "Ad"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new ad.",
+                    "flatPath": "userprofiles/{profileId}/ads",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.ads.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/ads",
+                    "request": {
+                        "$ref": "Ad"
+                    },
+                    "response": {
+                        "$ref": "Ad"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of ads, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/ads",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.ads.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "active": {
+                            "description": "Select only active ads.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "advertiserId": {
+                            "description": "Select only ads with this advertiser ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "archived": {
+                            "description": "Select only archived ads.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "audienceSegmentIds": {
+                            "description": "Select only ads with these audience segment IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "campaignIds": {
+                            "description": "Select only ads with these campaign IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "compatibility": {
+                            "description": "Select default ads with the specified compatibility. Applicable when type is AD_SERVING_DEFAULT_AD. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are for rendering in mobile apps. IN_STREAM_VIDEO refers to rendering an in-stream video ads developed with the VAST standard.",
+                            "enum": [
+                                "DISPLAY",
+                                "DISPLAY_INTERSTITIAL",
+                                "APP",
+                                "APP_INTERSTITIAL",
+                                "IN_STREAM_VIDEO",
+                                "IN_STREAM_AUDIO"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "creativeIds": {
+                            "description": "Select only ads with these creative IDs assigned.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "creativeOptimizationConfigurationIds": {
+                            "description": "Select only ads with these creative optimization configuration IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "dynamicClickTracker": {
+                            "description": "Select only dynamic click trackers. Applicable when type is AD_SERVING_CLICK_TRACKER. If true, select dynamic click trackers. If false, select static click trackers. Leave unset to select both.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ids": {
+                            "description": "Select only ads with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "landingPageIds": {
+                            "description": "Select only ads with these landing page IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "overriddenEventTagId": {
+                            "description": "Select only ads with this event tag override ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "placementIds": {
+                            "description": "Select only ads with these placement IDs assigned.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "remarketingListIds": {
+                            "description": "Select only ads whose list targeting expression use these remarketing list IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"ad*2015\" will return objects with names like \"ad June 2015\", \"ad April 2015\", or simply \"ad 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"ad\" will match objects with name \"my ad\", \"ad 2015\", or simply \"ad\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sizeIds": {
+                            "description": "Select only ads with these size IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sslCompliant": {
+                            "description": "Select only ads that are SSL-compliant.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "sslRequired": {
+                            "description": "Select only ads that require SSL.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "type": {
+                            "description": "Select only ads with these types.",
+                            "enum": [
+                                "AD_SERVING_STANDARD_AD",
+                                "AD_SERVING_DEFAULT_AD",
+                                "AD_SERVING_CLICK_TRACKER",
+                                "AD_SERVING_TRACKING",
+                                "AD_SERVING_BRAND_SAFE_AD"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/ads",
+                    "response": {
+                        "$ref": "AdsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing ad. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/ads",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.ads.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Ad ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/ads",
+                    "request": {
+                        "$ref": "Ad"
+                    },
+                    "response": {
+                        "$ref": "Ad"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing ad.",
+                    "flatPath": "userprofiles/{profileId}/ads",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.ads.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/ads",
+                    "request": {
+                        "$ref": "Ad"
+                    },
+                    "response": {
+                        "$ref": "Ad"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "id": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of this targeting template. This is a read-only, auto-generated field."
+        "advertiserGroups": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes an existing advertiser group.",
+                    "flatPath": "userprofiles/{profileId}/advertiserGroups/{id}",
+                    "httpMethod": "DELETE",
+                    "id": "dfareporting.advertiserGroups.delete",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Advertiser group ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserGroups/{id}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "get": {
+                    "description": "Gets one advertiser group by ID.",
+                    "flatPath": "userprofiles/{profileId}/advertiserGroups/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.advertiserGroups.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Advertiser group ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserGroups/{id}",
+                    "response": {
+                        "$ref": "AdvertiserGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new advertiser group.",
+                    "flatPath": "userprofiles/{profileId}/advertiserGroups",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.advertiserGroups.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserGroups",
+                    "request": {
+                        "$ref": "AdvertiserGroup"
+                    },
+                    "response": {
+                        "$ref": "AdvertiserGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of advertiser groups, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/advertiserGroups",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.advertiserGroups.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "ids": {
+                            "description": "Select only advertiser groups with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"advertiser*2015\" will return objects with names like \"advertiser group June 2015\", \"advertiser group April 2015\", or simply \"advertiser group 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"advertisergroup\" will match objects with name \"my advertisergroup\", \"advertisergroup 2015\", or simply \"advertisergroup\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserGroups",
+                    "response": {
+                        "$ref": "AdvertiserGroupsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing advertiser group. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/advertiserGroups",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.advertiserGroups.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "AdvertiserGroup ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserGroups",
+                    "request": {
+                        "$ref": "AdvertiserGroup"
+                    },
+                    "response": {
+                        "$ref": "AdvertiserGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing advertiser group.",
+                    "flatPath": "userprofiles/{profileId}/advertiserGroups",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.advertiserGroups.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserGroups",
+                    "request": {
+                        "$ref": "AdvertiserGroup"
+                    },
+                    "response": {
+                        "$ref": "AdvertiserGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "listTargetingExpression": {
-          "description": "Remarketing list targeting criteria.",
-          "$ref": "ListTargetingExpression"
+        "advertiserLandingPages": {
+            "methods": {
+                "get": {
+                    "description": "Gets one landing page by ID.",
+                    "flatPath": "userprofiles/{profileId}/advertiserLandingPages/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.advertiserLandingPages.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Landing page ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserLandingPages/{id}",
+                    "response": {
+                        "$ref": "LandingPage"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new landing page.",
+                    "flatPath": "userprofiles/{profileId}/advertiserLandingPages",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.advertiserLandingPages.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserLandingPages",
+                    "request": {
+                        "$ref": "LandingPage"
+                    },
+                    "response": {
+                        "$ref": "LandingPage"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of landing pages.",
+                    "flatPath": "userprofiles/{profileId}/advertiserLandingPages",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.advertiserLandingPages.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserIds": {
+                            "description": "Select only landing pages that belong to these advertisers.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "archived": {
+                            "description": "Select only archived landing pages. Don't set this field to select both archived and non-archived landing pages.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "campaignIds": {
+                            "description": "Select only landing pages that are associated with these campaigns.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only landing pages with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for landing pages by name or ID. Wildcards (*) are allowed. For example, \"landingpage*2017\" will return landing pages with names like \"landingpage July 2017\", \"landingpage March 2017\", or simply \"landingpage 2017\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"landingpage\" will match campaigns with name \"my landingpage\", \"landingpage 2015\", or simply \"landingpage\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "subaccountId": {
+                            "description": "Select only landing pages that belong to this subaccount.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserLandingPages",
+                    "response": {
+                        "$ref": "AdvertiserLandingPagesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing advertiser landing page. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/advertiserLandingPages",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.advertiserLandingPages.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "LandingPage ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserLandingPages",
+                    "request": {
+                        "$ref": "LandingPage"
+                    },
+                    "response": {
+                        "$ref": "LandingPage"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing landing page.",
+                    "flatPath": "userprofiles/{profileId}/advertiserLandingPages",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.advertiserLandingPages.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertiserLandingPages",
+                    "request": {
+                        "$ref": "LandingPage"
+                    },
+                    "response": {
+                        "$ref": "LandingPage"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "accountId": {
-          "description": "Account ID of this targeting template. This field, if left unset, will be auto-generated on insert and is read-only after insert.",
-          "type": "string",
-          "format": "int64"
+        "advertisers": {
+            "methods": {
+                "get": {
+                    "description": "Gets one advertiser by ID.",
+                    "flatPath": "userprofiles/{profileId}/advertisers/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.advertisers.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Advertiser ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertisers/{id}",
+                    "response": {
+                        "$ref": "Advertiser"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new advertiser.",
+                    "flatPath": "userprofiles/{profileId}/advertisers",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.advertisers.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertisers",
+                    "request": {
+                        "$ref": "Advertiser"
+                    },
+                    "response": {
+                        "$ref": "Advertiser"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of advertisers, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/advertisers",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.advertisers.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserGroupIds": {
+                            "description": "Select only advertisers with these advertiser group IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "floodlightConfigurationIds": {
+                            "description": "Select only advertisers with these floodlight configuration IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only advertisers with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "includeAdvertisersWithoutGroupsOnly": {
+                            "description": "Select only advertisers which do not belong to any advertiser group.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "onlyParent": {
+                            "description": "Select only advertisers which use another advertiser's floodlight configuration.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"advertiser*2015\" will return objects with names like \"advertiser June 2015\", \"advertiser April 2015\", or simply \"advertiser 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"advertiser\" will match objects with name \"my advertiser\", \"advertiser 2015\", or simply \"advertiser\" .",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "status": {
+                            "description": "Select only advertisers with the specified status.",
+                            "enum": [
+                                "APPROVED",
+                                "ON_HOLD"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "subaccountId": {
+                            "description": "Select only advertisers with these subaccount IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertisers",
+                    "response": {
+                        "$ref": "AdvertisersListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing advertiser. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/advertisers",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.advertisers.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Advertiser ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertisers",
+                    "request": {
+                        "$ref": "Advertiser"
+                    },
+                    "response": {
+                        "$ref": "Advertiser"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing advertiser.",
+                    "flatPath": "userprofiles/{profileId}/advertisers",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.advertisers.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/advertisers",
+                    "request": {
+                        "$ref": "Advertiser"
+                    },
+                    "response": {
+                        "$ref": "Advertiser"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#targetingTemplate\".",
-          "type": "string"
+        "browsers": {
+            "methods": {
+                "list": {
+                    "description": "Retrieves a list of browsers.",
+                    "flatPath": "userprofiles/{profileId}/browsers",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.browsers.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/browsers",
+                    "response": {
+                        "$ref": "BrowsersListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "geoTargeting": {
-          "description": "Geographical targeting criteria.",
-          "$ref": "GeoTargeting"
-        },
-        "advertiserIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
-        },
-        "advertiserId": {
-          "type": "string",
-          "description": "Advertiser ID of this targeting template. This is a required field on insert and is read-only after insert.",
-          "format": "int64"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this targeting template. This field is required. It must be less than 256 characters long and unique within an advertiser."
-        },
-        "dayPartTargeting": {
-          "$ref": "DayPartTargeting",
-          "description": "Time and day targeting criteria."
-        },
-        "subaccountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Subaccount ID of this targeting template. This field, if left unset, will be auto-generated on insert and is read-only after insert."
-        },
-        "keyValueTargetingExpression": {
-          "description": "Key-value targeting criteria.",
-          "$ref": "KeyValueTargetingExpression"
-        }
-      },
-      "id": "TargetingTemplate",
-      "type": "object",
-      "description": "Contains properties of a targeting template. A targeting template encapsulates targeting information which can be reused across multiple ads."
-    },
-    "PathToConversionReportCompatibleFields": {
-      "id": "PathToConversionReportCompatibleFields",
-      "description": "Represents fields that are compatible to be selected for a report of type \"PATH_TO_CONVERSION\".",
-      "type": "object",
-      "properties": {
-        "perInteractionDimensions": {
-          "type": "array",
-          "items": {
-            "$ref": "Dimension"
-          },
-          "description": "Per-interaction dimensions which are compatible to be selected in the \"perInteractionDimensions\" section of the report."
-        },
-        "metrics": {
-          "type": "array",
-          "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.",
-          "items": {
-            "$ref": "Metric"
-          }
-        },
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#pathToConversionReportCompatibleFields."
-        },
-        "customFloodlightVariables": {
-          "type": "array",
-          "description": "Custom floodlight variables which are compatible to be selected in the \"customFloodlightVariables\" section of the report.",
-          "items": {
-            "$ref": "Dimension"
-          }
-        },
-        "conversionDimensions": {
-          "type": "array",
-          "description": "Conversion dimensions which are compatible to be selected in the \"conversionDimensions\" section of the report.",
-          "items": {
-            "$ref": "Dimension"
-          }
-        }
-      }
-    },
-    "InventoryItem": {
-      "id": "InventoryItem",
-      "description": "Represents a buy from the Planning inventory store.",
-      "properties": {
-        "negotiationChannelId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Negotiation channel ID of this inventory item."
-        },
-        "type": {
-          "type": "string",
-          "enum": [
-            "PLANNING_PLACEMENT_TYPE_REGULAR",
-            "PLANNING_PLACEMENT_TYPE_CREDIT"
-          ],
-          "description": "Type of inventory item.",
-          "enumDescriptions": [
-            "",
-            ""
-          ]
-        },
-        "orderId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Order ID of this inventory item."
-        },
-        "adSlots": {
-          "type": "array",
-          "items": {
-            "$ref": "AdSlot"
-          },
-          "description": "Ad slots of this inventory item. If this inventory item represents a standalone placement, there will be exactly one ad slot. If this inventory item represents a placement group, there will be more than one ad slot, each representing one child placement in that placement group."
-        },
-        "accountId": {
-          "format": "int64",
-          "description": "Account ID of this inventory item.",
-          "type": "string"
-        },
-        "estimatedConversionRate": {
-          "format": "int64",
-          "type": "string",
-          "description": "Estimated conversion rate of this inventory item."
-        },
-        "estimatedClickThroughRate": {
-          "description": "Estimated click-through rate of this inventory item.",
-          "format": "int64",
-          "type": "string"
-        },
-        "rfpId": {
-          "description": "RFP ID of this inventory item.",
-          "type": "string",
-          "format": "int64"
-        },
-        "inPlan": {
-          "description": "Whether this inventory item is in plan.",
-          "type": "boolean"
-        },
-        "projectId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Project ID of this inventory item."
-        },
-        "contentCategoryId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Content category ID of this inventory item."
-        },
-        "subaccountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Subaccount ID of this inventory item."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#inventoryItem\".",
-          "type": "string"
-        },
-        "lastModifiedInfo": {
-          "description": "Information about the most recent modification of this inventory item.",
-          "$ref": "LastModifiedInfo"
-        },
-        "pricing": {
-          "description": "Pricing of this inventory item.",
-          "$ref": "Pricing"
-        },
-        "siteId": {
-          "description": "ID of the site this inventory item is associated with.",
-          "type": "string",
-          "format": "int64"
-        },
-        "id": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of this inventory item."
-        },
-        "placementStrategyId": {
-          "format": "int64",
-          "description": "Placement strategy ID of this inventory item.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this inventory item. For standalone inventory items, this is the same name as that of its only ad slot. For group inventory items, this can differ from the name of any of its ad slots."
-        },
-        "advertiserId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Advertiser ID of this inventory item."
-        }
-      },
-      "type": "object"
-    },
-    "OperatingSystemVersion": {
-      "properties": {
-        "minorVersion": {
-          "type": "string",
-          "description": "Minor version (number after the first dot) of this operating system version."
-        },
-        "majorVersion": {
-          "type": "string",
-          "description": "Major version (leftmost number) of this operating system version."
-        },
-        "name": {
-          "description": "Name of this operating system version.",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#operatingSystemVersion\"."
-        },
-        "operatingSystem": {
-          "$ref": "OperatingSystem",
-          "description": "Operating system of this operating system version."
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of this operating system version.",
-          "format": "int64"
-        }
-      },
-      "id": "OperatingSystemVersion",
-      "type": "object",
-      "description": "Contains information about a particular version of an operating system that can be targeted by ads."
-    },
-    "Language": {
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Name of this language."
-        },
-        "languageCode": {
-          "description": "Format of language code is an ISO 639 two-letter language code optionally followed by an underscore followed by an ISO 3166 code. Examples are \"en\" for English or \"zh_CN\" for Simplified Chinese.",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#language\"."
-        },
-        "id": {
-          "description": "Language ID of this language. This is the ID used for targeting and generating reports.",
-          "format": "int64",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Contains information about a language that can be targeted by ads.",
-      "id": "Language"
-    },
-    "EventFilter": {
-      "properties": {
-        "dimensionFilter": {
-          "description": "The dimension filter contained within this EventFilter.",
-          "$ref": "PathReportDimensionValue"
-        },
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#eventFilter."
-        }
-      },
-      "type": "object",
-      "id": "EventFilter",
-      "description": "Represents a DfaReporting event filter."
-    },
-    "CustomEventsBatchInsertResponse": {
-      "id": "CustomEventsBatchInsertResponse",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customEventsBatchInsertResponse\".",
-          "type": "string"
-        },
-        "hasFailures": {
-          "type": "boolean",
-          "description": "Indicates that some or all custom events failed to insert."
-        },
-        "status": {
-          "description": "The insert status of each custom event. Statuses are returned in the same order that conversions are inserted.",
-          "items": {
-            "$ref": "CustomEventStatus"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "description": "Insert Custom Events Response."
-    },
-    "UserProfile": {
-      "type": "object",
-      "id": "UserProfile",
-      "description": "A UserProfile resource lets you list all DFA user profiles that are associated with a Google user account. The profile_id needs to be specified in other API requests. ",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userProfile\"."
-        },
-        "userName": {
-          "description": "The user name.",
-          "type": "string"
-        },
-        "profileId": {
-          "description": "The unique ID of the user profile.",
-          "type": "string",
-          "format": "int64"
-        },
-        "etag": {
-          "description": "Etag of this resource.",
-          "type": "string"
-        },
-        "subAccountId": {
-          "type": "string",
-          "format": "int64",
-          "description": "The sub account ID this profile belongs to if applicable."
-        },
-        "subAccountName": {
-          "type": "string",
-          "description": "The sub account name this profile belongs to if applicable."
-        },
-        "accountId": {
-          "description": "The account ID to which this profile belongs.",
-          "format": "int64",
-          "type": "string"
-        },
-        "accountName": {
-          "type": "string",
-          "description": "The account name this profile belongs to."
-        }
-      }
-    },
-    "Recipient": {
-      "description": "Represents a recipient.",
-      "properties": {
-        "deliveryType": {
-          "enum": [
-            "LINK",
-            "ATTACHMENT"
-          ],
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string",
-          "annotations": {
-            "required": [
-              "dfareporting.reports.insert",
-              "dfareporting.reports.update"
-            ]
-          },
-          "description": "The delivery type for the recipient."
-        },
-        "email": {
-          "type": "string",
-          "annotations": {
-            "required": [
-              "dfareporting.reports.insert",
-              "dfareporting.reports.update"
-            ]
-          },
-          "description": "The email address of the recipient."
-        },
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#recipient."
-        }
-      },
-      "type": "object",
-      "id": "Recipient"
-    },
-    "CustomRichMediaEvents": {
-      "type": "object",
-      "id": "CustomRichMediaEvents",
-      "description": "Represents a Custom Rich Media Events group.",
-      "properties": {
-        "kind": {
-          "description": "The kind of resource this is, in this case dfareporting#customRichMediaEvents.",
-          "type": "string"
-        },
-        "filteredEventIds": {
-          "type": "array",
-          "items": {
-            "$ref": "DimensionValue"
-          },
-          "description": "List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName."
-        }
-      }
-    },
-    "FloodlightActivity": {
-      "properties": {
-        "tagFormat": {
-          "description": "Tag format type for the floodlight activity. If left blank, the tag format will default to HTML.",
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "enum": [
-            "HTML",
-            "XHTML"
-          ],
-          "type": "string"
-        },
-        "status": {
-          "type": "string",
-          "description": "The status of the activity. This can only be set to ACTIVE or ARCHIVED_AND_DISABLED. The ARCHIVED status is no longer supported and cannot be set for Floodlight activities. The DISABLED_POLICY status indicates that a Floodlight activity is violating Google policy. Contact your account manager for more information.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "ACTIVE",
-            "ARCHIVED_AND_DISABLED",
-            "ARCHIVED",
-            "DISABLED_POLICY"
-          ]
-        },
-        "idDimensionValue": {
-          "description": "Dimension value for the ID of this floodlight activity. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this floodlight activity. This is a required field. Must be less than 129 characters long and cannot contain quotes."
-        },
-        "secure": {
-          "description": "Whether this tag should use SSL.",
-          "type": "boolean"
-        },
-        "id": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of this floodlight activity. This is a read-only, auto-generated field."
-        },
-        "accountId": {
-          "type": "string",
-          "description": "Account ID of this floodlight activity. This is a read-only field that can be left blank.",
-          "format": "int64"
-        },
-        "countingMethod": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "Counting method for conversions for this floodlight activity. This is a required field.",
-          "enum": [
-            "STANDARD_COUNTING",
-            "UNIQUE_COUNTING",
-            "SESSION_COUNTING",
-            "TRANSACTIONS_COUNTING",
-            "ITEMS_SOLD_COUNTING"
-          ]
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivity\"."
-        },
-        "expectedUrl": {
-          "description": "URL where this tag will be deployed. If specified, must be less than 256 characters long.",
-          "type": "string"
-        },
-        "attributionEnabled": {
-          "type": "boolean",
-          "description": "Whether the activity is enabled for attribution."
-        },
-        "notes": {
-          "description": "General notes or implementation instructions for the tag.",
-          "type": "string"
-        },
-        "floodlightConfigurationIdDimensionValue": {
-          "description": "Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.",
-          "$ref": "DimensionValue"
-        },
-        "floodlightConfigurationId": {
-          "description": "Floodlight configuration ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's floodlight configuration or from the existing activity's floodlight configuration.",
-          "type": "string",
-          "format": "int64"
-        },
-        "advertiserIdDimensionValue": {
-          "$ref": "DimensionValue",
-          "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
-        },
-        "publisherTags": {
-          "description": "Publisher dynamic floodlight tags.",
-          "items": {
-            "$ref": "FloodlightActivityPublisherDynamicTag"
-          },
-          "type": "array"
-        },
-        "floodlightTagType": {
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "description": "The type of Floodlight tag this activity will generate. This is a required field.",
-          "enum": [
-            "IFRAME",
-            "IMAGE",
-            "GLOBAL_SITE_TAG"
-          ],
-          "type": "string"
-        },
-        "advertiserId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Advertiser ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's advertiser or the existing activity's advertiser."
-        },
-        "tagString": {
-          "type": "string",
-          "description": "Value of the cat= parameter in the floodlight tag, which the ad servers use to identify the activity. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being a-z0-9[ _ ]. This tag string must also be unique among activities of the same activity group. This field is read-only after insertion."
-        },
-        "floodlightActivityGroupName": {
-          "description": "Name of the associated floodlight activity group. This is a read-only field.",
-          "type": "string"
-        },
-        "userDefinedVariableTypes": {
-          "description": "List of the user-defined variables used by this conversion tag. These map to the \"u[1-100]=\" in the tags. Each of these can have a user defined type. Acceptable values are U1 to U100, inclusive. ",
-          "type": "array",
-          "items": {
-            "type": "string",
-            "enum": [
-              "U1",
-              "U2",
-              "U3",
-              "U4",
-              "U5",
-              "U6",
-              "U7",
-              "U8",
-              "U9",
-              "U10",
-              "U11",
-              "U12",
-              "U13",
-              "U14",
-              "U15",
-              "U16",
-              "U17",
-              "U18",
-              "U19",
-              "U20",
-              "U21",
-              "U22",
-              "U23",
-              "U24",
-              "U25",
-              "U26",
-              "U27",
-              "U28",
-              "U29",
-              "U30",
-              "U31",
-              "U32",
-              "U33",
-              "U34",
-              "U35",
-              "U36",
-              "U37",
-              "U38",
-              "U39",
-              "U40",
-              "U41",
-              "U42",
-              "U43",
-              "U44",
-              "U45",
-              "U46",
-              "U47",
-              "U48",
-              "U49",
-              "U50",
-              "U51",
-              "U52",
-              "U53",
-              "U54",
-              "U55",
-              "U56",
-              "U57",
-              "U58",
-              "U59",
-              "U60",
-              "U61",
-              "U62",
-              "U63",
-              "U64",
-              "U65",
-              "U66",
-              "U67",
-              "U68",
-              "U69",
-              "U70",
-              "U71",
-              "U72",
-              "U73",
-              "U74",
-              "U75",
-              "U76",
-              "U77",
-              "U78",
-              "U79",
-              "U80",
-              "U81",
-              "U82",
-              "U83",
-              "U84",
-              "U85",
-              "U86",
-              "U87",
-              "U88",
-              "U89",
-              "U90",
-              "U91",
-              "U92",
-              "U93",
-              "U94",
-              "U95",
-              "U96",
-              "U97",
-              "U98",
-              "U99",
-              "U100"
-            ],
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ]
-          }
-        },
-        "sslRequired": {
-          "type": "boolean",
-          "description": "Whether this floodlight activity must be SSL-compliant."
-        },
-        "floodlightActivityGroupType": {
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "enum": [
-            "COUNTER",
-            "SALE"
-          ],
-          "description": "Type of the associated floodlight activity group. This is a read-only field.",
-          "type": "string"
-        },
-        "cacheBustingType": {
-          "enum": [
-            "JAVASCRIPT",
-            "ACTIVE_SERVER_PAGE",
-            "JSP",
-            "PHP",
-            "COLD_FUSION"
-          ],
-          "description": "Code type used for cache busting in the generated tag. Applicable only when floodlightActivityGroupType is COUNTER and countingMethod is STANDARD_COUNTING or UNIQUE_COUNTING.",
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "floodlightActivityGroupId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Floodlight activity group ID of this floodlight activity. This is a required field."
-        },
-        "defaultTags": {
-          "type": "array",
-          "items": {
-            "$ref": "FloodlightActivityDynamicTag"
-          },
-          "description": "Dynamic floodlight tags."
-        },
-        "subaccountId": {
-          "description": "Subaccount ID of this floodlight activity. This is a read-only field that can be left blank.",
-          "format": "int64",
-          "type": "string"
-        },
-        "floodlightActivityGroupTagString": {
-          "description": "Tag string of the associated floodlight activity group. This is a read-only field.",
-          "type": "string"
-        },
-        "sslCompliant": {
-          "description": "Whether the floodlight activity is SSL-compliant. This is a read-only field, its value detected by the system from the floodlight tags.",
-          "type": "boolean"
-        }
-      },
-      "description": "Contains properties of a Floodlight activity.",
-      "type": "object",
-      "id": "FloodlightActivity"
-    },
-    "TargetableRemarketingListsListResponse": {
-      "type": "object",
-      "description": "Targetable remarketing list response",
-      "id": "TargetableRemarketingListsListResponse",
-      "properties": {
-        "targetableRemarketingLists": {
-          "description": "Targetable remarketing list collection.",
-          "type": "array",
-          "items": {
-            "$ref": "TargetableRemarketingList"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token to be used for the next list operation."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#targetableRemarketingListsListResponse\".",
-          "type": "string"
-        }
-      }
-    },
-    "AccountUserProfile": {
-      "id": "AccountUserProfile",
-      "description": "AccountUserProfiles contains properties of a Campaign Manager user profile. This resource is specifically for managing user profiles, whereas UserProfiles is for accessing the API.",
-      "type": "object",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountUserProfile\"."
-        },
-        "id": {
-          "type": "string",
-          "format": "int64",
-          "description": "ID of the user profile. This is a read-only, auto-generated field."
-        },
-        "userRoleId": {
-          "format": "int64",
-          "description": "User role ID of the user profile. This is a required field.",
-          "type": "string"
-        },
-        "active": {
-          "type": "boolean",
-          "description": "Whether this user profile is active. This defaults to false, and must be set true on insert for the user profile to be usable."
-        },
-        "traffickerType": {
-          "enum": [
-            "INTERNAL_NON_TRAFFICKER",
-            "INTERNAL_TRAFFICKER",
-            "EXTERNAL_TRAFFICKER"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "description": "Trafficker type of this user profile. This is a read-only field."
-        },
-        "userRoleFilter": {
-          "description": "Filter that describes which user roles are visible to the user profile.",
-          "$ref": "ObjectFilter"
-        },
-        "locale": {
-          "description": "Locale of the user profile. This is a required field. Acceptable values are: - \"cs\" (Czech) - \"de\" (German) - \"en\" (English) - \"en-GB\" (English United Kingdom) - \"es\" (Spanish) - \"fr\" (French) - \"it\" (Italian) - \"ja\" (Japanese) - \"ko\" (Korean) - \"pl\" (Polish) - \"pt-BR\" (Portuguese Brazil) - \"ru\" (Russian) - \"sv\" (Swedish) - \"tr\" (Turkish) - \"zh-CN\" (Chinese Simplified) - \"zh-TW\" (Chinese Traditional) ",
-          "type": "string"
-        },
-        "advertiserFilter": {
-          "description": "Filter that describes which advertisers are visible to the user profile.",
-          "$ref": "ObjectFilter"
-        },
-        "subaccountId": {
-          "format": "int64",
-          "type": "string",
-          "description": "Subaccount ID of the user profile. This is a read-only field that can be left blank."
-        },
-        "siteFilter": {
-          "$ref": "ObjectFilter",
-          "description": "Filter that describes which sites are visible to the user profile."
-        },
-        "userAccessType": {
-          "enum": [
-            "NORMAL_USER",
-            "SUPER_USER",
-            "INTERNAL_ADMINISTRATOR",
-            "READ_ONLY_SUPER_USER"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "User type of the user profile. This is a read-only field that can be left blank.",
-          "type": "string"
-        },
-        "email": {
-          "type": "string",
-          "description": "Email of the user profile. The email addresss must be linked to a Google Account. This field is required on insertion and is read-only after insertion."
+        "campaignCreativeAssociations": {
+            "methods": {
+                "insert": {
+                    "description": "Associates a creative with the specified campaign. This method creates a default ad with dimensions matching the creative in the campaign if such a default ad does not exist already.",
+                    "flatPath": "userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.campaignCreativeAssociations.insert",
+                    "parameterOrder": [
+                        "profileId",
+                        "campaignId"
+                    ],
+                    "parameters": {
+                        "campaignId": {
+                            "description": "Campaign ID in this association.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations",
+                    "request": {
+                        "$ref": "CampaignCreativeAssociation"
+                    },
+                    "response": {
+                        "$ref": "CampaignCreativeAssociation"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves the list of creative IDs associated with the specified campaign. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.campaignCreativeAssociations.list",
+                    "parameterOrder": [
+                        "profileId",
+                        "campaignId"
+                    ],
+                    "parameters": {
+                        "campaignId": {
+                            "description": "Campaign ID in this association.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations",
+                    "response": {
+                        "$ref": "CampaignCreativeAssociationsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "accountId": {
-          "description": "Account ID of the user profile. This is a read-only field that can be left blank.",
-          "type": "string",
-          "format": "int64"
+        "campaigns": {
+            "methods": {
+                "get": {
+                    "description": "Gets one campaign by ID.",
+                    "flatPath": "userprofiles/{profileId}/campaigns/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.campaigns.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Campaign ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/campaigns/{id}",
+                    "response": {
+                        "$ref": "Campaign"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new campaign.",
+                    "flatPath": "userprofiles/{profileId}/campaigns",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.campaigns.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/campaigns",
+                    "request": {
+                        "$ref": "Campaign"
+                    },
+                    "response": {
+                        "$ref": "Campaign"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of campaigns, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/campaigns",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.campaigns.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserGroupIds": {
+                            "description": "Select only campaigns whose advertisers belong to these advertiser groups.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "advertiserIds": {
+                            "description": "Select only campaigns that belong to these advertisers.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "archived": {
+                            "description": "Select only archived campaigns. Don't set this field to select both archived and non-archived campaigns.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "atLeastOneOptimizationActivity": {
+                            "description": "Select only campaigns that have at least one optimization activity.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "excludedIds": {
+                            "description": "Exclude campaigns with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only campaigns with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "overriddenEventTagId": {
+                            "description": "Select only campaigns that have overridden this event tag ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for campaigns by name or ID. Wildcards (*) are allowed. For example, \"campaign*2015\" will return campaigns with names like \"campaign June 2015\", \"campaign April 2015\", or simply \"campaign 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"campaign\" will match campaigns with name \"my campaign\", \"campaign 2015\", or simply \"campaign\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "subaccountId": {
+                            "description": "Select only campaigns that belong to this subaccount.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/campaigns",
+                    "response": {
+                        "$ref": "CampaignsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing campaign. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/campaigns",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.campaigns.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Campaign ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/campaigns",
+                    "request": {
+                        "$ref": "Campaign"
+                    },
+                    "response": {
+                        "$ref": "Campaign"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing campaign.",
+                    "flatPath": "userprofiles/{profileId}/campaigns",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.campaigns.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/campaigns",
+                    "request": {
+                        "$ref": "Campaign"
+                    },
+                    "response": {
+                        "$ref": "Campaign"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "name": {
-          "type": "string",
-          "description": "Name of the user profile. This is a required field. Must be less than 64 characters long, must be globally unique, and cannot contain whitespace or any of the following characters: \"&;\u003c\u003e\"#%,\"."
+        "changeLogs": {
+            "methods": {
+                "get": {
+                    "description": "Gets one change log by ID.",
+                    "flatPath": "userprofiles/{profileId}/changeLogs/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.changeLogs.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Change log ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/changeLogs/{id}",
+                    "response": {
+                        "$ref": "ChangeLog"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of change logs. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/changeLogs",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.changeLogs.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "action": {
+                            "description": "Select only change logs with the specified action.",
+                            "enum": [
+                                "ACTION_CREATE",
+                                "ACTION_UPDATE",
+                                "ACTION_DELETE",
+                                "ACTION_ENABLE",
+                                "ACTION_DISABLE",
+                                "ACTION_ADD",
+                                "ACTION_REMOVE",
+                                "ACTION_MARK_AS_DEFAULT",
+                                "ACTION_ASSOCIATE",
+                                "ACTION_ASSIGN",
+                                "ACTION_UNASSIGN",
+                                "ACTION_SEND",
+                                "ACTION_LINK",
+                                "ACTION_UNLINK",
+                                "ACTION_PUSH",
+                                "ACTION_EMAIL_TAGS",
+                                "ACTION_SHARE"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only change logs with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxChangeTime": {
+                            "description": "Select only change logs whose change time is before the specified maxChangeTime.The time should be formatted as an RFC3339 date/time string. For example, for 10:54 PM on July 18th, 2015, in the America/New York time zone, the format is \"2015-07-18T22:54:00-04:00\". In other words, the year, month, day, the letter T, the hour (24-hour clock system), minute, second, and then the time zone offset.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "minChangeTime": {
+                            "description": "Select only change logs whose change time is after the specified minChangeTime.The time should be formatted as an RFC3339 date/time string. For example, for 10:54 PM on July 18th, 2015, in the America/New York time zone, the format is \"2015-07-18T22:54:00-04:00\". In other words, the year, month, day, the letter T, the hour (24-hour clock system), minute, second, and then the time zone offset.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "objectIds": {
+                            "description": "Select only change logs with these object IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "objectType": {
+                            "description": "Select only change logs with the specified object type.",
+                            "enum": [
+                                "OBJECT_ADVERTISER",
+                                "OBJECT_FLOODLIGHT_CONFIGURATION",
+                                "OBJECT_AD",
+                                "OBJECT_FLOODLIGHT_ACTVITY",
+                                "OBJECT_CAMPAIGN",
+                                "OBJECT_FLOODLIGHT_ACTIVITY_GROUP",
+                                "OBJECT_CREATIVE",
+                                "OBJECT_PLACEMENT",
+                                "OBJECT_DFA_SITE",
+                                "OBJECT_USER_ROLE",
+                                "OBJECT_USER_PROFILE",
+                                "OBJECT_ADVERTISER_GROUP",
+                                "OBJECT_ACCOUNT",
+                                "OBJECT_SUBACCOUNT",
+                                "OBJECT_RICHMEDIA_CREATIVE",
+                                "OBJECT_INSTREAM_CREATIVE",
+                                "OBJECT_MEDIA_ORDER",
+                                "OBJECT_CONTENT_CATEGORY",
+                                "OBJECT_PLACEMENT_STRATEGY",
+                                "OBJECT_SD_SITE",
+                                "OBJECT_SIZE",
+                                "OBJECT_CREATIVE_GROUP",
+                                "OBJECT_CREATIVE_ASSET",
+                                "OBJECT_USER_PROFILE_FILTER",
+                                "OBJECT_LANDING_PAGE",
+                                "OBJECT_CREATIVE_FIELD",
+                                "OBJECT_REMARKETING_LIST",
+                                "OBJECT_PROVIDED_LIST_CLIENT",
+                                "OBJECT_EVENT_TAG",
+                                "OBJECT_CREATIVE_BUNDLE",
+                                "OBJECT_BILLING_ACCOUNT_GROUP",
+                                "OBJECT_BILLING_FEATURE",
+                                "OBJECT_RATE_CARD",
+                                "OBJECT_ACCOUNT_BILLING_FEATURE",
+                                "OBJECT_BILLING_MINIMUM_FEE",
+                                "OBJECT_BILLING_PROFILE",
+                                "OBJECT_PLAYSTORE_LINK",
+                                "OBJECT_TARGETING_TEMPLATE",
+                                "OBJECT_SEARCH_LIFT_STUDY",
+                                "OBJECT_FLOODLIGHT_DV360_LINK"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Select only change logs whose object ID, user name, old or new values match the search string.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "userProfileIds": {
+                            "description": "Select only change logs with these user profile IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/changeLogs",
+                    "response": {
+                        "$ref": "ChangeLogsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "campaignFilter": {
-          "description": "Filter that describes which campaigns are visible to the user profile.",
-          "$ref": "ObjectFilter"
+        "cities": {
+            "methods": {
+                "list": {
+                    "description": "Retrieves a list of cities, possibly filtered.",
+                    "flatPath": "userprofiles/{profileId}/cities",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.cities.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "countryDartIds": {
+                            "description": "Select only cities from these countries.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "dartIds": {
+                            "description": "Select only cities with these DART IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "namePrefix": {
+                            "description": "Select only cities with names starting with this prefix.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "regionDartIds": {
+                            "description": "Select only cities from these regions.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/cities",
+                    "response": {
+                        "$ref": "CitiesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "comments": {
-          "description": "Comments for this user profile.",
-          "type": "string"
-        }
-      }
-    },
-    "ConversionsBatchInsertRequest": {
-      "description": "Insert Conversions Request.",
-      "type": "object",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionsBatchInsertRequest\"."
+        "connectionTypes": {
+            "methods": {
+                "get": {
+                    "description": "Gets one connection type by ID.",
+                    "flatPath": "userprofiles/{profileId}/connectionTypes/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.connectionTypes.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Connection type ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/connectionTypes/{id}",
+                    "response": {
+                        "$ref": "ConnectionType"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of connection types.",
+                    "flatPath": "userprofiles/{profileId}/connectionTypes",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.connectionTypes.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/connectionTypes",
+                    "response": {
+                        "$ref": "ConnectionTypesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
-        "encryptionInfo": {
-          "description": "Describes how encryptedUserId or encryptedUserIdCandidates[] is encrypted. This is a required field if encryptedUserId or encryptedUserIdCandidates[] is used.",
-          "$ref": "EncryptionInfo"
+        "contentCategories": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes an existing content category.",
+                    "flatPath": "userprofiles/{profileId}/contentCategories/{id}",
+                    "httpMethod": "DELETE",
+                    "id": "dfareporting.contentCategories.delete",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Content category ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/contentCategories/{id}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "get": {
+                    "description": "Gets one content category by ID.",
+                    "flatPath": "userprofiles/{profileId}/contentCategories/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.contentCategories.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Content category ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/contentCategories/{id}",
+                    "response": {
+                        "$ref": "ContentCategory"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new content category.",
+                    "flatPath": "userprofiles/{profileId}/contentCategories",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.contentCategories.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/contentCategories",
+                    "request": {
+                        "$ref": "ContentCategory"
+                    },
+                    "response": {
+                        "$ref": "ContentCategory"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of content categories, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/contentCategories",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.contentCategories.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "ids": {
+                            "description": "Select only content categories with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"contentcategory*2015\" will return objects with names like \"contentcategory June 2015\", \"contentcategory April 2015\", or simply \"contentcategory 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"contentcategory\" will match objects with name \"my contentcategory\", \"contentcategory 2015\", or simply \"contentcategory\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/contentCategories",
+                    "response": {
+                        "$ref": "ContentCategoriesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing content category. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/contentCategories",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.contentCategories.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "ContentCategory ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/contentCategories",
+                    "request": {
+                        "$ref": "ContentCategory"
+                    },
+                    "response": {
+                        "$ref": "ContentCategory"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing content category.",
+                    "flatPath": "userprofiles/{profileId}/contentCategories",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.contentCategories.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/contentCategories",
+                    "request": {
+                        "$ref": "ContentCategory"
+                    },
+                    "response": {
+                        "$ref": "ContentCategory"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
         "conversions": {
-          "items": {
-            "$ref": "Conversion"
-          },
-          "description": "The set of conversions to insert.",
-          "type": "array"
-        }
-      },
-      "id": "ConversionsBatchInsertRequest"
-    },
-    "MobileCarrier": {
-      "id": "MobileCarrier",
-      "type": "object",
-      "description": "Contains information about a mobile carrier that can be targeted by ads.",
-      "properties": {
-        "id": {
-          "description": "ID of this mobile carrier.",
-          "type": "string",
-          "format": "int64"
-        },
-        "countryCode": {
-          "description": "Country code of the country to which this mobile carrier belongs.",
-          "type": "string"
-        },
-        "countryDartId": {
-          "type": "string",
-          "description": "DART ID of the country to which this mobile carrier belongs.",
-          "format": "int64"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this mobile carrier."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#mobileCarrier\".",
-          "type": "string"
-        }
-      }
-    },
-    "TargetWindow": {
-      "description": "Target Window.",
-      "id": "TargetWindow",
-      "properties": {
-        "customHtml": {
-          "description": "User-entered value.",
-          "type": "string"
-        },
-        "targetWindowOption": {
-          "description": "Type of browser window for which the backup image of the flash creative can be displayed.",
-          "type": "string",
-          "enum": [
-            "NEW_WINDOW",
-            "CURRENT_WINDOW",
-            "CUSTOM"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ]
-        }
-      },
-      "type": "object"
-    },
-    "FloodlightActivitiesGenerateTagResponse": {
-      "id": "FloodlightActivitiesGenerateTagResponse",
-      "description": "Floodlight Activity GenerateTag Response",
-      "type": "object",
-      "properties": {
-        "globalSiteTagGlobalSnippet": {
-          "type": "string",
-          "description": "The global snippet section of a global site tag. The global site tag sets new cookies on your domain, which will store a unique identifier for a user or the ad click that brought the user to your site. Learn more."
-        },
-        "floodlightActivityTag": {
-          "description": "Generated tag for this Floodlight activity. For global site tags, this is the event snippet.",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivitiesGenerateTagResponse\"."
-        }
-      }
-    },
-    "CreativeFieldsListResponse": {
-      "type": "object",
-      "description": "Creative Field List Response",
-      "id": "CreativeFieldsListResponse",
-      "properties": {
-        "creativeFields": {
-          "type": "array",
-          "description": "Creative field collection.",
-          "items": {
-            "$ref": "CreativeField"
-          }
-        },
-        "kind": {
-          "type": "string",
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeFieldsListResponse\"."
-        },
-        "nextPageToken": {
-          "description": "Pagination token to be used for the next list operation.",
-          "type": "string"
-        }
-      }
-    },
-    "PathReportDimensionValue": {
-      "description": "Represents a PathReportDimensionValue resource.",
-      "type": "object",
-      "id": "PathReportDimensionValue",
-      "properties": {
-        "ids": {
-          "description": "The possible ID's associated with the value if available.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "dimensionName": {
-          "description": "The name of the dimension.",
-          "type": "string"
-        },
-        "matchType": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "EXACT",
-            "BEGINS_WITH",
-            "CONTAINS",
-            "WILDCARD_EXPRESSION"
-          ],
-          "type": "string",
-          "description": "Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT."
-        },
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#pathReportDimensionValue."
-        },
-        "values": {
-          "type": "array",
-          "description": "The possible values of the dimension.",
-          "items": {
-            "type": "string"
-          }
-        }
-      }
-    },
-    "VideoSettings": {
-      "type": "object",
-      "description": "Video Settings",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#videoSettings\".",
-          "type": "string"
-        },
-        "obaEnabled": {
-          "type": "boolean",
-          "description": "Whether OBA icons are enabled for this placement."
-        },
-        "skippableSettings": {
-          "description": "Settings for the skippability of video creatives served to this placement. If this object is provided, the creative-level skippable settings will be overridden.",
-          "$ref": "SkippableSetting"
-        },
-        "companionSettings": {
-          "$ref": "CompanionSetting",
-          "description": "Settings for the companion creatives of video creatives served to this placement."
-        },
-        "orientation": {
-          "enum": [
-            "ANY",
-            "LANDSCAPE",
-            "PORTRAIT"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "description": "Orientation of a video placement. If this value is set, placement will return assets matching the specified orientation.",
-          "type": "string"
-        },
-        "transcodeSettings": {
-          "description": "Settings for the transcodes of video creatives served to this placement. If this object is provided, the creative-level transcode settings will be overridden.",
-          "$ref": "TranscodeSetting"
-        },
-        "obaSettings": {
-          "$ref": "ObaIcon",
-          "description": "Settings for the OBA icon of video creatives served to this placement. If this object is provided, the creative-level OBA settings will be overridden."
-        }
-      },
-      "id": "VideoSettings"
-    },
-    "PathFilter": {
-      "description": "Represents a DfaReporting path filter.",
-      "type": "object",
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "The kind of resource this is, in this case dfareporting#pathFilter."
-        },
-        "eventFilters": {
-          "items": {
-            "$ref": "EventFilter"
-          },
-          "description": "Event filters in path report.",
-          "type": "array"
-        },
-        "pathMatchPosition": {
-          "description": "Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "enum": [
-            "PATH_MATCH_POSITION_UNSPECIFIED",
-            "ANY",
-            "FIRST",
-            "LAST"
-          ]
-        }
-      },
-      "id": "PathFilter"
-    },
-    "AudienceSegmentGroup": {
-      "properties": {
-        "id": {
-          "format": "int64",
-          "type": "string",
-          "description": "ID of this audience segment group. This is a read-only, auto-generated field."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of this audience segment group. This is a required field and must be less than 65 characters long."
-        },
-        "audienceSegments": {
-          "items": {
-            "$ref": "AudienceSegment"
-          },
-          "description": "Audience segments assigned to this group. The number of segments must be between 2 and 100.",
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "description": "Audience Segment Group.",
-      "id": "AudienceSegmentGroup"
-    },
-    "AdBlockingConfiguration": {
-      "properties": {
-        "creativeBundleId": {
-          "description": "ID of a creative bundle to use for this campaign. If set, brand-neutral ads will select creatives from this bundle. Otherwise, a default transparent pixel will be used.",
-          "format": "int64",
-          "type": "string"
-        },
-        "overrideClickThroughUrl": {
-          "description": "Whether the brand-neutral ad's click-through URL comes from the campaign's creative bundle or the override URL. Must be set to true if ad blocking is enabled and no creative bundle is configured.",
-          "type": "boolean"
-        },
-        "clickThroughUrl": {
-          "description": "Click-through URL used by brand-neutral ads. This is a required field when overrideClickThroughUrl is set to true.",
-          "type": "string"
-        },
-        "enabled": {
-          "type": "boolean",
-          "description": "Whether this campaign has enabled ad blocking. When true, ad blocking is enabled for placements in the campaign, but this may be overridden by site and placement settings. When false, ad blocking is disabled for all placements under the campaign, regardless of site and placement settings."
-        }
-      },
-      "id": "AdBlockingConfiguration",
-      "description": "Campaign ad blocking settings.",
-      "type": "object"
-    },
-    "LanguagesListResponse": {
-      "properties": {
-        "languages": {
-          "items": {
-            "$ref": "Language"
-          },
-          "description": "Language collection.",
-          "type": "array"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#languagesListResponse\".",
-          "type": "string"
-        }
-      },
-      "id": "LanguagesListResponse",
-      "description": "Language List Response",
-      "type": "object"
-    },
-    "CompatibleFields": {
-      "properties": {
-        "kind": {
-          "description": "The kind of resource this is, in this case dfareporting#compatibleFields.",
-          "type": "string"
-        },
-        "pathAttributionReportCompatibleFields": {
-          "$ref": "PathReportCompatibleFields",
-          "description": "Contains items that are compatible to be selected for a report of type \"PATH_ATTRIBUTION\"."
-        },
-        "reportCompatibleFields": {
-          "$ref": "ReportCompatibleFields",
-          "description": "Contains items that are compatible to be selected for a report of type \"STANDARD\"."
-        },
-        "pathToConversionReportCompatibleFields": {
-          "description": "Contains items that are compatible to be selected for a report of type \"PATH_TO_CONVERSION\".",
-          "$ref": "PathToConversionReportCompatibleFields"
-        },
-        "crossDimensionReachReportCompatibleFields": {
-          "$ref": "CrossDimensionReachReportCompatibleFields",
-          "description": "Contains items that are compatible to be selected for a report of type \"CROSS_DIMENSION_REACH\"."
-        },
-        "reachReportCompatibleFields": {
-          "description": "Contains items that are compatible to be selected for a report of type \"REACH\".",
-          "$ref": "ReachReportCompatibleFields"
-        },
-        "floodlightReportCompatibleFields": {
-          "$ref": "FloodlightReportCompatibleFields",
-          "description": "Contains items that are compatible to be selected for a report of type \"FLOODLIGHT\"."
-        },
-        "pathReportCompatibleFields": {
-          "description": "Contains items that are compatible to be selected for a report of type \"PATH\".",
-          "$ref": "PathReportCompatibleFields"
-        }
-      },
-      "description": "Represents a response to the queryCompatibleFields method.",
-      "id": "CompatibleFields",
-      "type": "object"
-    },
-    "CustomEventInsert": {
-      "type": "object",
-      "description": "Custom event to be inserted.",
-      "properties": {
-        "matchId": {
-          "type": "string",
-          "description": "The match ID field. A match ID is your own first-party identifier that has been synced with Google using the match ID feature in Floodlight. This field is mutually exclusive with mobileDeviceId, and at least one of the two fields is required."
-        },
-        "insertEventType": {
-          "type": "string",
-          "enum": [
-            "UNKNOWN",
-            "IMPRESSION",
-            "CLICK"
-          ],
-          "description": "The type of event to insert.",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ]
-        },
-        "mobileDeviceId": {
-          "type": "string",
-          "description": "The mobile device ID. This field is mutually exclusive with matchId, and at least one of the two fields is required."
-        },
-        "cmDimensions": {
-          "$ref": "CampaignManagerIds",
-          "description": "Campaign Manager dimensions associated with the event."
-        },
-        "dv3Dimensions": {
-          "description": "DV360 dimensions associated with the event.",
-          "$ref": "DV3Ids"
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customEventInsert\".",
-          "type": "string"
-        }
-      },
-      "id": "CustomEventInsert"
-    },
-    "UserDefinedVariableConfiguration": {
-      "properties": {
-        "variableType": {
-          "type": "string",
-          "description": "Variable name in the tag. This is a required field.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "U1",
-            "U2",
-            "U3",
-            "U4",
-            "U5",
-            "U6",
-            "U7",
-            "U8",
-            "U9",
-            "U10",
-            "U11",
-            "U12",
-            "U13",
-            "U14",
-            "U15",
-            "U16",
-            "U17",
-            "U18",
-            "U19",
-            "U20",
-            "U21",
-            "U22",
-            "U23",
-            "U24",
-            "U25",
-            "U26",
-            "U27",
-            "U28",
-            "U29",
-            "U30",
-            "U31",
-            "U32",
-            "U33",
-            "U34",
-            "U35",
-            "U36",
-            "U37",
-            "U38",
-            "U39",
-            "U40",
-            "U41",
-            "U42",
-            "U43",
-            "U44",
-            "U45",
-            "U46",
-            "U47",
-            "U48",
-            "U49",
-            "U50",
-            "U51",
-            "U52",
-            "U53",
-            "U54",
-            "U55",
-            "U56",
-            "U57",
-            "U58",
-            "U59",
-            "U60",
-            "U61",
-            "U62",
-            "U63",
-            "U64",
-            "U65",
-            "U66",
-            "U67",
-            "U68",
-            "U69",
-            "U70",
-            "U71",
-            "U72",
-            "U73",
-            "U74",
-            "U75",
-            "U76",
-            "U77",
-            "U78",
-            "U79",
-            "U80",
-            "U81",
-            "U82",
-            "U83",
-            "U84",
-            "U85",
-            "U86",
-            "U87",
-            "U88",
-            "U89",
-            "U90",
-            "U91",
-            "U92",
-            "U93",
-            "U94",
-            "U95",
-            "U96",
-            "U97",
-            "U98",
-            "U99",
-            "U100"
-          ]
-        },
-        "reportName": {
-          "type": "string",
-          "description": "User-friendly name for the variable which will appear in reports. This is a required field, must be less than 64 characters long, and cannot contain the following characters: \"\"\u003c\u003e\"."
-        },
-        "dataType": {
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string",
-          "enum": [
-            "STRING",
-            "NUMBER"
-          ],
-          "description": "Data type for the variable. This is a required field."
-        }
-      },
-      "type": "object",
-      "description": "User Defined Variable configuration.",
-      "id": "UserDefinedVariableConfiguration"
-    }
-  },
-  "title": "Campaign Manager 360 API",
-  "kind": "discovery#restDescription",
-  "mtlsRootUrl": "https://dfareporting.mtls.googleapis.com/",
-  "servicePath": "dfareporting/v3.4/",
-  "id": "dfareporting:v3.4",
-  "basePath": "/dfareporting/v3.4/",
-  "resources": {
-    "campaigns": {
-      "methods": {
-        "patch": {
-          "request": {
-            "$ref": "Campaign"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "response": {
-            "$ref": "Campaign"
-          },
-          "httpMethod": "PATCH",
-          "description": "Updates an existing campaign. This method supports patch semantics.",
-          "id": "dfareporting.campaigns.patch",
-          "flatPath": "userprofiles/{profileId}/campaigns",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "format": "int64",
-              "type": "string"
-            },
-            "id": {
-              "location": "query",
-              "required": true,
-              "format": "int64",
-              "description": "Campaign ID.",
-              "type": "string"
-            }
-          },
-          "path": "userprofiles/{profileId}/campaigns"
-        },
-        "update": {
-          "request": {
-            "$ref": "Campaign"
-          },
-          "response": {
-            "$ref": "Campaign"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/campaigns",
-          "description": "Updates an existing campaign.",
-          "httpMethod": "PUT",
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/campaigns",
-          "id": "dfareporting.campaigns.update",
-          "parameterOrder": [
-            "profileId"
-          ]
-        },
-        "get": {
-          "path": "userprofiles/{profileId}/campaigns/{id}",
-          "flatPath": "userprofiles/{profileId}/campaigns/{id}",
-          "httpMethod": "GET",
-          "description": "Gets one campaign by ID.",
-          "id": "dfareporting.campaigns.get",
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "format": "int64"
-            },
-            "id": {
-              "required": true,
-              "description": "Campaign ID.",
-              "type": "string",
-              "location": "path",
-              "format": "int64"
-            }
-          },
-          "response": {
-            "$ref": "Campaign"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        },
-        "insert": {
-          "flatPath": "userprofiles/{profileId}/campaigns",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Inserts a new campaign.",
-          "httpMethod": "POST",
-          "response": {
-            "$ref": "Campaign"
-          },
-          "path": "userprofiles/{profileId}/campaigns",
-          "request": {
-            "$ref": "Campaign"
-          },
-          "id": "dfareporting.campaigns.insert",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ]
-        },
-        "list": {
-          "response": {
-            "$ref": "CampaignsListResponse"
-          },
-          "flatPath": "userprofiles/{profileId}/campaigns",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Retrieves a list of campaigns, possibly filtered. This method supports paging.",
-          "parameters": {
-            "advertiserGroupIds": {
-              "description": "Select only campaigns whose advertisers belong to these advertiser groups.",
-              "format": "int64",
-              "location": "query",
-              "type": "string",
-              "repeated": true
-            },
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "description": "User profile ID associated with this request."
-            },
-            "ids": {
-              "format": "int64",
-              "type": "string",
-              "location": "query",
-              "repeated": true,
-              "description": "Select only campaigns with these IDs."
-            },
-            "overriddenEventTagId": {
-              "location": "query",
-              "type": "string",
-              "format": "int64",
-              "description": "Select only campaigns that have overridden this event tag ID."
-            },
-            "subaccountId": {
-              "type": "string",
-              "format": "int64",
-              "location": "query",
-              "description": "Select only campaigns that belong to this subaccount."
-            },
-            "sortField": {
-              "default": "ID",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Field by which to sort the list.",
-              "type": "string",
-              "location": "query",
-              "enum": [
-                "ID",
-                "NAME"
-              ]
-            },
-            "searchString": {
-              "location": "query",
-              "description": "Allows searching for campaigns by name or ID. Wildcards (*) are allowed. For example, \"campaign*2015\" will return campaigns with names like \"campaign June 2015\", \"campaign April 2015\", or simply \"campaign 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"campaign\" will match campaigns with name \"my campaign\", \"campaign 2015\", or simply \"campaign\".",
-              "type": "string"
-            },
-            "pageToken": {
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query"
-            },
-            "advertiserIds": {
-              "format": "int64",
-              "repeated": true,
-              "description": "Select only campaigns that belong to these advertisers.",
-              "location": "query",
-              "type": "string"
-            },
-            "archived": {
-              "description": "Select only archived campaigns. Don't set this field to select both archived and non-archived campaigns.",
-              "type": "boolean",
-              "location": "query"
-            },
-            "sortOrder": {
-              "default": "ASCENDING",
-              "description": "Order of sorted results.",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "type": "string",
-              "location": "query",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ]
-            },
-            "maxResults": {
-              "default": "1000",
-              "location": "query",
-              "maximum": "1000",
-              "format": "int32",
-              "description": "Maximum number of results to return.",
-              "type": "integer",
-              "minimum": "0"
-            },
-            "excludedIds": {
-              "type": "string",
-              "description": "Exclude campaigns with these IDs.",
-              "format": "int64",
-              "repeated": true,
-              "location": "query"
-            },
-            "atLeastOneOptimizationActivity": {
-              "type": "boolean",
-              "description": "Select only campaigns that have at least one optimization activity.",
-              "location": "query"
-            }
-          },
-          "path": "userprofiles/{profileId}/campaigns",
-          "id": "dfareporting.campaigns.list"
-        }
-      }
-    },
-    "orders": {
-      "methods": {
-        "get": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Gets one order by ID.",
-          "flatPath": "userprofiles/{profileId}/projects/{projectId}/orders/{id}",
-          "parameterOrder": [
-            "profileId",
-            "projectId",
-            "id"
-          ],
-          "response": {
-            "$ref": "Order"
-          },
-          "parameters": {
-            "id": {
-              "description": "Order ID.",
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "format": "int64"
-            },
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true
-            },
-            "projectId": {
-              "location": "path",
-              "required": true,
-              "description": "Project ID for orders.",
-              "type": "string",
-              "format": "int64"
-            }
-          },
-          "id": "dfareporting.orders.get",
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/projects/{projectId}/orders/{id}"
-        },
-        "list": {
-          "description": "Retrieves a list of orders, possibly filtered. This method supports paging.",
-          "id": "dfareporting.orders.list",
-          "path": "userprofiles/{profileId}/projects/{projectId}/orders",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/projects/{projectId}/orders",
-          "parameters": {
-            "sortOrder": {
-              "default": "ASCENDING",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "location": "query",
-              "type": "string",
-              "description": "Order of sorted results."
-            },
-            "sortField": {
-              "type": "string",
-              "location": "query",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "description": "Field by which to sort the list.",
-              "default": "ID",
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            },
-            "maxResults": {
-              "description": "Maximum number of results to return.",
-              "location": "query",
-              "default": "1000",
-              "maximum": "1000",
-              "format": "int32",
-              "minimum": "0",
-              "type": "integer"
-            },
-            "searchString": {
-              "location": "query",
-              "type": "string",
-              "description": "Allows searching for orders by name or ID. Wildcards (*) are allowed. For example, \"order*2015\" will return orders with names like \"order June 2015\", \"order April 2015\", or simply \"order 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"order\" will match orders with name \"my order\", \"order 2015\", or simply \"order\"."
-            },
-            "ids": {
-              "repeated": true,
-              "location": "query",
-              "format": "int64",
-              "description": "Select only orders with these IDs.",
-              "type": "string"
-            },
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request."
-            },
-            "projectId": {
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "description": "Project ID for orders.",
-              "type": "string"
-            },
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page."
-            },
-            "siteId": {
-              "location": "query",
-              "type": "string",
-              "format": "int64",
-              "repeated": true,
-              "description": "Select only orders that are associated with these site IDs."
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "projectId"
-          ],
-          "response": {
-            "$ref": "OrdersListResponse"
-          },
-          "httpMethod": "GET"
-        }
-      }
-    },
-    "floodlightActivityGroups": {
-      "methods": {
-        "insert": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/floodlightActivityGroups",
-          "flatPath": "userprofiles/{profileId}/floodlightActivityGroups",
-          "description": "Inserts a new floodlight activity group.",
-          "id": "dfareporting.floodlightActivityGroups.insert",
-          "request": {
-            "$ref": "FloodlightActivityGroup"
-          },
-          "response": {
-            "$ref": "FloodlightActivityGroup"
-          },
-          "httpMethod": "POST"
-        },
-        "update": {
-          "id": "dfareporting.floodlightActivityGroups.update",
-          "flatPath": "userprofiles/{profileId}/floodlightActivityGroups",
-          "response": {
-            "$ref": "FloodlightActivityGroup"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "type": "string",
-              "required": true
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/floodlightActivityGroups",
-          "description": "Updates an existing floodlight activity group.",
-          "httpMethod": "PUT",
-          "request": {
-            "$ref": "FloodlightActivityGroup"
-          }
-        },
-        "list": {
-          "flatPath": "userprofiles/{profileId}/floodlightActivityGroups",
-          "response": {
-            "$ref": "FloodlightActivityGroupsListResponse"
-          },
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/floodlightActivityGroups",
-          "description": "Retrieves a list of floodlight activity groups, possibly filtered. This method supports paging.",
-          "id": "dfareporting.floodlightActivityGroups.list",
-          "parameters": {
-            "searchString": {
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"floodlightactivitygroup*2015\" will return objects with names like \"floodlightactivitygroup June 2015\", \"floodlightactivitygroup April 2015\", or simply \"floodlightactivitygroup 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"floodlightactivitygroup\" will match objects with name \"my floodlightactivitygroup activity\", \"floodlightactivitygroup 2015\", or simply \"floodlightactivitygroup\".",
-              "location": "query",
-              "type": "string"
-            },
-            "profileId": {
-              "format": "int64",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "location": "path"
-            },
-            "advertiserId": {
-              "location": "query",
-              "description": "Select only floodlight activity groups with the specified advertiser ID. Must specify either advertiserId or floodlightConfigurationId for a non-empty result.",
-              "type": "string",
-              "format": "int64"
-            },
-            "sortField": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "default": "ID",
-              "description": "Field by which to sort the list.",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "location": "query",
-              "type": "string"
-            },
-            "floodlightConfigurationId": {
-              "description": "Select only floodlight activity groups with the specified floodlight configuration ID. Must specify either advertiserId, or floodlightConfigurationId for a non-empty result.",
-              "type": "string",
-              "location": "query",
-              "format": "int64"
-            },
-            "pageToken": {
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query"
-            },
-            "ids": {
-              "location": "query",
-              "format": "int64",
-              "description": "Select only floodlight activity groups with the specified IDs. Must specify either advertiserId or floodlightConfigurationId for a non-empty result.",
-              "type": "string",
-              "repeated": true
-            },
-            "sortOrder": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "default": "ASCENDING",
-              "type": "string",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "description": "Order of sorted results."
-            },
-            "maxResults": {
-              "minimum": "0",
-              "maximum": "1000",
-              "type": "integer",
-              "location": "query",
-              "format": "int32",
-              "description": "Maximum number of results to return.",
-              "default": "1000"
-            },
-            "type": {
-              "location": "query",
-              "description": "Select only floodlight activity groups with the specified floodlight activity group type.",
-              "enum": [
-                "COUNTER",
-                "SALE"
-              ],
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ]
-        },
-        "patch": {
-          "flatPath": "userprofiles/{profileId}/floodlightActivityGroups",
-          "description": "Updates an existing floodlight activity group. This method supports patch semantics.",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "response": {
-            "$ref": "FloodlightActivityGroup"
-          },
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "location": "path"
-            },
-            "id": {
-              "description": "FloodlightActivityGroup ID.",
-              "location": "query",
-              "format": "int64",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "httpMethod": "PATCH",
-          "request": {
-            "$ref": "FloodlightActivityGroup"
-          },
-          "id": "dfareporting.floodlightActivityGroups.patch",
-          "path": "userprofiles/{profileId}/floodlightActivityGroups",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "get": {
-          "description": "Gets one floodlight activity group by ID.",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "id": {
-              "type": "string",
-              "format": "int64",
-              "description": "Floodlight activity Group ID.",
-              "required": true,
-              "location": "path"
-            },
-            "profileId": {
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string"
-            }
-          },
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "FloodlightActivityGroup"
-          },
-          "flatPath": "userprofiles/{profileId}/floodlightActivityGroups/{id}",
-          "path": "userprofiles/{profileId}/floodlightActivityGroups/{id}",
-          "id": "dfareporting.floodlightActivityGroups.get"
-        }
-      }
-    },
-    "targetableRemarketingLists": {
-      "methods": {
-        "get": {
-          "description": "Gets one remarketing list by ID.",
-          "parameters": {
-            "id": {
-              "format": "int64",
-              "required": true,
-              "description": "Remarketing list ID.",
-              "type": "string",
-              "location": "path"
-            },
-            "profileId": {
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/targetableRemarketingLists/{id}",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/targetableRemarketingLists/{id}",
-          "id": "dfareporting.targetableRemarketingLists.get",
-          "response": {
-            "$ref": "TargetableRemarketingList"
-          }
-        },
-        "list": {
-          "response": {
-            "$ref": "TargetableRemarketingListsListResponse"
-          },
-          "flatPath": "userprofiles/{profileId}/targetableRemarketingLists",
-          "path": "userprofiles/{profileId}/targetableRemarketingLists",
-          "httpMethod": "GET",
-          "parameters": {
-            "pageToken": {
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "type": "string"
-            },
-            "maxResults": {
-              "type": "integer",
-              "default": "1000",
-              "maximum": "1000",
-              "description": "Maximum number of results to return.",
-              "minimum": "0",
-              "format": "int32",
-              "location": "query"
-            },
-            "sortOrder": {
-              "default": "ASCENDING",
-              "description": "Order of sorted results.",
-              "type": "string",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query"
-            },
-            "name": {
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"remarketing list*2015\" will return objects with names like \"remarketing list June 2015\", \"remarketing list April 2015\", or simply \"remarketing list 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"remarketing list\" will match objects with name \"my remarketing list\", \"remarketing list 2015\", or simply \"remarketing list\".",
-              "location": "query",
-              "type": "string"
-            },
-            "advertiserId": {
-              "description": "Select only targetable remarketing lists targetable by these advertisers.",
-              "type": "string",
-              "format": "int64",
-              "required": true,
-              "location": "query"
-            },
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            },
-            "sortField": {
-              "description": "Field by which to sort the list.",
-              "default": "ID",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query"
-            },
-            "active": {
-              "type": "boolean",
-              "location": "query",
-              "description": "Select only active or only inactive targetable remarketing lists."
-            }
-          },
-          "id": "dfareporting.targetableRemarketingLists.list",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Retrieves a list of targetable remarketing lists, possibly filtered. This method supports paging.",
-          "parameterOrder": [
-            "profileId",
-            "advertiserId"
-          ]
-        }
-      }
-    },
-    "conversions": {
-      "methods": {
-        "batchupdate": {
-          "response": {
-            "$ref": "ConversionsBatchUpdateResponse"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "request": {
-            "$ref": "ConversionsBatchUpdateRequest"
-          },
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/ddmconversions"
-          ],
-          "description": "Updates existing conversions.",
-          "httpMethod": "POST",
-          "path": "userprofiles/{profileId}/conversions/batchupdate",
-          "flatPath": "userprofiles/{profileId}/conversions/batchupdate",
-          "id": "dfareporting.conversions.batchupdate"
-        },
-        "batchinsert": {
-          "description": "Inserts conversions.",
-          "scopes": [
-            "https://www.googleapis.com/auth/ddmconversions"
-          ],
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "location": "path"
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/conversions/batchinsert",
-          "id": "dfareporting.conversions.batchinsert",
-          "httpMethod": "POST",
-          "response": {
-            "$ref": "ConversionsBatchInsertResponse"
-          },
-          "path": "userprofiles/{profileId}/conversions/batchinsert",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "request": {
-            "$ref": "ConversionsBatchInsertRequest"
-          }
-        }
-      }
-    },
-    "subaccounts": {
-      "methods": {
-        "patch": {
-          "parameters": {
-            "id": {
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "location": "query",
-              "description": "Subaccount ID."
-            },
-            "profileId": {
-              "format": "int64",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true
-            }
-          },
-          "description": "Updates an existing subaccount. This method supports patch semantics.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "Subaccount"
-          },
-          "id": "dfareporting.subaccounts.patch",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "path": "userprofiles/{profileId}/subaccounts",
-          "flatPath": "userprofiles/{profileId}/subaccounts",
-          "httpMethod": "PATCH",
-          "request": {
-            "$ref": "Subaccount"
-          }
-        },
-        "update": {
-          "description": "Updates an existing subaccount.",
-          "response": {
-            "$ref": "Subaccount"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.subaccounts.update",
-          "flatPath": "userprofiles/{profileId}/subaccounts",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "format": "int64"
-            }
-          },
-          "request": {
-            "$ref": "Subaccount"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/subaccounts",
-          "httpMethod": "PUT"
-        },
-        "list": {
-          "path": "userprofiles/{profileId}/subaccounts",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "location": "path",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "type": "string"
-            },
-            "pageToken": {
-              "description": "Value of the nextPageToken from the previous result page.",
-              "type": "string",
-              "location": "query"
-            },
-            "sortOrder": {
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "location": "query",
-              "default": "ASCENDING",
-              "description": "Order of sorted results."
-            },
-            "searchString": {
-              "type": "string",
-              "location": "query",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"subaccount*2015\" will return objects with names like \"subaccount June 2015\", \"subaccount April 2015\", or simply \"subaccount 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"subaccount\" will match objects with name \"my subaccount\", \"subaccount 2015\", or simply \"subaccount\" ."
-            },
-            "maxResults": {
-              "location": "query",
-              "minimum": "0",
-              "default": "1000",
-              "format": "int32",
-              "maximum": "1000",
-              "type": "integer",
-              "description": "Maximum number of results to return."
-            },
-            "ids": {
-              "type": "string",
-              "description": "Select only subaccounts with these IDs.",
-              "location": "query",
-              "repeated": true,
-              "format": "int64"
-            },
-            "sortField": {
-              "description": "Field by which to sort the list.",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "location": "query",
-              "type": "string",
-              "default": "ID",
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/subaccounts",
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "SubaccountsListResponse"
-          },
-          "id": "dfareporting.subaccounts.list",
-          "description": "Gets a list of subaccounts, possibly filtered. This method supports paging."
-        },
-        "get": {
-          "flatPath": "userprofiles/{profileId}/subaccounts/{id}",
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "required": true
-            },
-            "id": {
-              "format": "int64",
-              "description": "Subaccount ID.",
-              "location": "path",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "response": {
-            "$ref": "Subaccount"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Gets one subaccount by ID.",
-          "path": "userprofiles/{profileId}/subaccounts/{id}",
-          "id": "dfareporting.subaccounts.get"
-        },
-        "insert": {
-          "path": "userprofiles/{profileId}/subaccounts",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.subaccounts.insert",
-          "response": {
-            "$ref": "Subaccount"
-          },
-          "httpMethod": "POST",
-          "request": {
-            "$ref": "Subaccount"
-          },
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "location": "path"
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/subaccounts",
-          "description": "Inserts a new subaccount."
-        }
-      }
-    },
-    "countries": {
-      "methods": {
-        "list": {
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "format": "int64",
-              "type": "string"
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/countries",
-          "id": "dfareporting.countries.list",
-          "httpMethod": "GET",
-          "description": "Retrieves a list of countries.",
-          "response": {
-            "$ref": "CountriesListResponse"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/countries"
-        },
-        "get": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Gets one country by ID.",
-          "path": "userprofiles/{profileId}/countries/{dartId}",
-          "httpMethod": "GET",
-          "id": "dfareporting.countries.get",
-          "flatPath": "userprofiles/{profileId}/countries/{dartId}",
-          "parameterOrder": [
-            "profileId",
-            "dartId"
-          ],
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "required": true,
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            },
-            "dartId": {
-              "type": "string",
-              "required": true,
-              "format": "int64",
-              "description": "Country DART ID.",
-              "location": "path"
-            }
-          },
-          "response": {
-            "$ref": "Country"
-          }
-        }
-      }
-    },
-    "remarketingListShares": {
-      "methods": {
-        "get": {
-          "flatPath": "userprofiles/{profileId}/remarketingListShares/{remarketingListId}",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request."
-            },
-            "remarketingListId": {
-              "required": true,
-              "format": "int64",
-              "description": "Remarketing list ID.",
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "response": {
-            "$ref": "RemarketingListShare"
-          },
-          "path": "userprofiles/{profileId}/remarketingListShares/{remarketingListId}",
-          "description": "Gets one remarketing list share by remarketing list ID.",
-          "parameterOrder": [
-            "profileId",
-            "remarketingListId"
-          ],
-          "id": "dfareporting.remarketingListShares.get"
-        },
-        "patch": {
-          "description": "Updates an existing remarketing list share. This method supports patch semantics.",
-          "request": {
-            "$ref": "RemarketingListShare"
-          },
-          "id": "dfareporting.remarketingListShares.patch",
-          "flatPath": "userprofiles/{profileId}/remarketingListShares",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "PATCH",
-          "response": {
-            "$ref": "RemarketingListShare"
-          },
-          "path": "userprofiles/{profileId}/remarketingListShares",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "id": {
-              "required": true,
-              "location": "query",
-              "description": "RemarketingList ID.",
-              "format": "int64",
-              "type": "string"
-            },
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "format": "int64"
-            }
-          }
-        },
-        "update": {
-          "response": {
-            "$ref": "RemarketingListShare"
-          },
-          "flatPath": "userprofiles/{profileId}/remarketingListShares",
-          "request": {
-            "$ref": "RemarketingListShare"
-          },
-          "path": "userprofiles/{profileId}/remarketingListShares",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.remarketingListShares.update",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "format": "int64"
-            }
-          },
-          "httpMethod": "PUT",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Updates an existing remarketing list share."
-        }
-      }
-    },
-    "floodlightConfigurations": {
-      "methods": {
-        "update": {
-          "response": {
-            "$ref": "FloodlightConfiguration"
-          },
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "format": "int64"
-            }
-          },
-          "description": "Updates an existing floodlight configuration.",
-          "id": "dfareporting.floodlightConfigurations.update",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/floodlightConfigurations",
-          "request": {
-            "$ref": "FloodlightConfiguration"
-          },
-          "httpMethod": "PUT",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/floodlightConfigurations"
-        },
-        "get": {
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "FloodlightConfiguration"
-          },
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "required": true
-            },
-            "id": {
-              "required": true,
-              "format": "int64",
-              "location": "path",
-              "description": "Floodlight configuration ID.",
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.floodlightConfigurations.get",
-          "description": "Gets one floodlight configuration by ID.",
-          "flatPath": "userprofiles/{profileId}/floodlightConfigurations/{id}",
-          "path": "userprofiles/{profileId}/floodlightConfigurations/{id}",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        },
-        "patch": {
-          "httpMethod": "PATCH",
-          "request": {
-            "$ref": "FloodlightConfiguration"
-          },
-          "response": {
-            "$ref": "FloodlightConfiguration"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true,
-              "type": "string"
-            },
-            "id": {
-              "type": "string",
-              "description": "FloodlightConfiguration ID.",
-              "format": "int64",
-              "location": "query",
-              "required": true
-            }
-          },
-          "path": "userprofiles/{profileId}/floodlightConfigurations",
-          "id": "dfareporting.floodlightConfigurations.patch",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/floodlightConfigurations",
-          "description": "Updates an existing floodlight configuration. This method supports patch semantics."
-        },
-        "list": {
-          "description": "Retrieves a list of floodlight configurations, possibly filtered.",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/floodlightConfigurations",
-          "httpMethod": "GET",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "format": "int64"
-            },
-            "ids": {
-              "format": "int64",
-              "type": "string",
-              "repeated": true,
-              "location": "query",
-              "description": "Set of IDs of floodlight configurations to retrieve. Required field; otherwise an empty list will be returned."
-            }
-          },
-          "id": "dfareporting.floodlightConfigurations.list",
-          "response": {
-            "$ref": "FloodlightConfigurationsListResponse"
-          },
-          "flatPath": "userprofiles/{profileId}/floodlightConfigurations",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        }
-      }
-    },
-    "userRolePermissions": {
-      "methods": {
-        "get": {
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/userRolePermissions/{id}",
-          "parameters": {
-            "id": {
-              "description": "User role permission ID.",
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "format": "int64"
-            },
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "description": "Gets one user role permission by ID.",
-          "path": "userprofiles/{profileId}/userRolePermissions/{id}",
-          "id": "dfareporting.userRolePermissions.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "UserRolePermission"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        },
-        "list": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/userRolePermissions",
-          "parameters": {
-            "ids": {
-              "format": "int64",
-              "location": "query",
-              "type": "string",
-              "repeated": true,
-              "description": "Select only user role permissions with these IDs."
-            },
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            }
-          },
-          "id": "dfareporting.userRolePermissions.list",
-          "flatPath": "userprofiles/{profileId}/userRolePermissions",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "UserRolePermissionsListResponse"
-          },
-          "description": "Gets a list of user role permissions, possibly filtered."
-        }
-      }
-    },
-    "placements": {
-      "methods": {
-        "insert": {
-          "description": "Inserts a new placement.",
-          "request": {
-            "$ref": "Placement"
-          },
-          "httpMethod": "POST",
-          "path": "userprofiles/{profileId}/placements",
-          "flatPath": "userprofiles/{profileId}/placements",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.placements.insert",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            }
-          },
-          "response": {
-            "$ref": "Placement"
-          }
-        },
-        "list": {
-          "flatPath": "userprofiles/{profileId}/placements",
-          "httpMethod": "GET",
-          "parameters": {
-            "minEndDate": {
-              "type": "string",
-              "description": "Select only placements or placement groups whose end date is on or after the specified minEndDate. The date should be formatted as \"yyyy-MM-dd\".",
-              "location": "query"
-            },
-            "pageToken": {
-              "description": "Value of the nextPageToken from the previous result page.",
-              "type": "string",
-              "location": "query"
-            },
-            "contentCategoryIds": {
-              "repeated": true,
-              "description": "Select only placements that are associated with these content categories.",
-              "type": "string",
-              "format": "int64",
-              "location": "query"
-            },
-            "sizeIds": {
-              "location": "query",
-              "repeated": true,
-              "format": "int64",
-              "description": "Select only placements that are associated with these sizes.",
-              "type": "string"
-            },
-            "campaignIds": {
-              "location": "query",
-              "repeated": true,
-              "description": "Select only placements that belong to these campaigns.",
-              "format": "int64",
-              "type": "string"
-            },
-            "placementStrategyIds": {
-              "repeated": true,
-              "description": "Select only placements that are associated with these placement strategies.",
-              "format": "int64",
-              "location": "query",
-              "type": "string"
-            },
-            "maxStartDate": {
-              "description": "Select only placements or placement groups whose start date is on or before the specified maxStartDate. The date should be formatted as \"yyyy-MM-dd\".",
-              "type": "string",
-              "location": "query"
-            },
-            "archived": {
-              "location": "query",
-              "type": "boolean",
-              "description": "Select only archived placements. Don't set this field to select both archived and non-archived placements."
-            },
-            "compatibilities": {
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                "",
-                "",
-                ""
-              ],
-              "description": "Select only placements that are associated with these compatibilities. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are for rendering in mobile apps. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard.",
-              "type": "string",
-              "enum": [
-                "DISPLAY",
-                "DISPLAY_INTERSTITIAL",
-                "APP",
-                "APP_INTERSTITIAL",
-                "IN_STREAM_VIDEO",
-                "IN_STREAM_AUDIO"
-              ],
-              "repeated": true
-            },
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "location": "path",
-              "format": "int64"
-            },
-            "sortOrder": {
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Order of sorted results.",
-              "default": "ASCENDING",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "location": "query"
-            },
-            "siteIds": {
-              "repeated": true,
-              "format": "int64",
-              "description": "Select only placements that are associated with these sites.",
-              "location": "query",
-              "type": "string"
-            },
-            "minStartDate": {
-              "description": "Select only placements or placement groups whose start date is on or after the specified minStartDate. The date should be formatted as \"yyyy-MM-dd\".",
-              "location": "query",
-              "type": "string"
-            },
-            "maxResults": {
-              "type": "integer",
-              "default": "1000",
-              "description": "Maximum number of results to return.",
-              "format": "int32",
-              "minimum": "0",
-              "maximum": "1000",
-              "location": "query"
-            },
-            "pricingTypes": {
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                "",
-                "",
-                ""
-              ],
-              "repeated": true,
-              "type": "string",
-              "enum": [
-                "PRICING_TYPE_CPM",
-                "PRICING_TYPE_CPC",
-                "PRICING_TYPE_CPA",
-                "PRICING_TYPE_FLAT_RATE_IMPRESSIONS",
-                "PRICING_TYPE_FLAT_RATE_CLICKS",
-                "PRICING_TYPE_CPM_ACTIVEVIEW"
-              ],
-              "description": "Select only placements with these pricing types.",
-              "location": "query"
-            },
-            "directorySiteIds": {
-              "format": "int64",
-              "type": "string",
-              "location": "query",
-              "description": "Select only placements that are associated with these directory sites.",
-              "repeated": true
-            },
-            "maxEndDate": {
-              "location": "query",
-              "description": "Select only placements or placement groups whose end date is on or before the specified maxEndDate. The date should be formatted as \"yyyy-MM-dd\".",
-              "type": "string"
-            },
-            "groupIds": {
-              "repeated": true,
-              "description": "Select only placements that belong to these placement groups.",
-              "type": "string",
-              "format": "int64",
-              "location": "query"
-            },
-            "searchString": {
-              "type": "string",
-              "location": "query",
-              "description": "Allows searching for placements by name or ID. Wildcards (*) are allowed. For example, \"placement*2015\" will return placements with names like \"placement June 2015\", \"placement May 2015\", or simply \"placements 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"placement\" will match placements with name \"my placement\", \"placement 2015\", or simply \"placement\" ."
-            },
-            "advertiserIds": {
-              "description": "Select only placements that belong to these advertisers.",
-              "repeated": true,
-              "format": "int64",
-              "location": "query",
-              "type": "string"
-            },
-            "ids": {
-              "location": "query",
-              "repeated": true,
-              "type": "string",
-              "description": "Select only placements with these IDs.",
-              "format": "int64"
-            },
-            "paymentSource": {
-              "location": "query",
-              "description": "Select only placements with this payment source.",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "enum": [
-                "PLACEMENT_AGENCY_PAID",
-                "PLACEMENT_PUBLISHER_PAID"
-              ],
-              "type": "string"
-            },
-            "sortField": {
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "type": "string",
-              "default": "ID",
-              "location": "query",
-              "description": "Field by which to sort the list."
-            }
-          },
-          "response": {
-            "$ref": "PlacementsListResponse"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/placements",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Retrieves a list of placements, possibly filtered. This method supports paging.",
-          "id": "dfareporting.placements.list"
-        },
-        "update": {
-          "request": {
-            "$ref": "Placement"
-          },
-          "httpMethod": "PUT",
-          "id": "dfareporting.placements.update",
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path",
-              "required": true
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/placements",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "response": {
-            "$ref": "Placement"
-          },
-          "path": "userprofiles/{profileId}/placements",
-          "description": "Updates an existing placement."
-        },
-        "get": {
-          "id": "dfareporting.placements.get",
-          "response": {
-            "$ref": "Placement"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Gets one placement by ID.",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "flatPath": "userprofiles/{profileId}/placements/{id}",
-          "path": "userprofiles/{profileId}/placements/{id}",
-          "parameters": {
-            "id": {
-              "required": true,
-              "format": "int64",
-              "description": "Placement ID.",
-              "location": "path",
-              "type": "string"
-            },
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "httpMethod": "GET"
-        },
-        "generatetags": {
-          "flatPath": "userprofiles/{profileId}/placements/generatetags",
-          "id": "dfareporting.placements.generatetags",
-          "httpMethod": "POST",
-          "description": "Generates tags for a placement.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/placements/generatetags",
-          "response": {
-            "$ref": "PlacementsGenerateTagsResponse"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            },
-            "campaignId": {
-              "location": "query",
-              "format": "int64",
-              "description": "Generate placements belonging to this campaign. This is a required field.",
-              "type": "string"
-            },
-            "tagFormats": {
-              "type": "string",
-              "location": "query",
-              "description": "Tag formats to generate for these placements. *Note:* PLACEMENT_TAG_STANDARD can only be generated for 1x1 placements.",
-              "repeated": true,
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                ""
-              ],
-              "enum": [
-                "PLACEMENT_TAG_STANDARD",
-                "PLACEMENT_TAG_IFRAME_JAVASCRIPT",
-                "PLACEMENT_TAG_IFRAME_ILAYER",
-                "PLACEMENT_TAG_INTERNAL_REDIRECT",
-                "PLACEMENT_TAG_JAVASCRIPT",
-                "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT",
-                "PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT",
-                "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT",
-                "PLACEMENT_TAG_CLICK_COMMANDS",
-                "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH",
-                "PLACEMENT_TAG_TRACKING",
-                "PLACEMENT_TAG_TRACKING_IFRAME",
-                "PLACEMENT_TAG_TRACKING_JAVASCRIPT",
-                "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_3",
-                "PLACEMENT_TAG_IFRAME_JAVASCRIPT_LEGACY",
-                "PLACEMENT_TAG_JAVASCRIPT_LEGACY",
-                "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT_LEGACY",
-                "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT_LEGACY",
-                "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_4"
-              ]
-            },
-            "placementIds": {
-              "format": "int64",
-              "repeated": true,
-              "type": "string",
-              "location": "query",
-              "description": "Generate tags for these placements."
-            }
-          }
-        },
-        "patch": {
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "type": "string",
-              "required": true
-            },
-            "id": {
-              "description": "Placement ID.",
-              "location": "query",
-              "type": "string",
-              "required": true,
-              "format": "int64"
-            }
-          },
-          "description": "Updates an existing placement. This method supports patch semantics.",
-          "flatPath": "userprofiles/{profileId}/placements",
-          "path": "userprofiles/{profileId}/placements",
-          "httpMethod": "PATCH",
-          "id": "dfareporting.placements.patch",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "request": {
-            "$ref": "Placement"
-          },
-          "response": {
-            "$ref": "Placement"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        }
-      }
-    },
-    "sizes": {
-      "methods": {
-        "insert": {
-          "response": {
-            "$ref": "Size"
-          },
-          "path": "userprofiles/{profileId}/sizes",
-          "flatPath": "userprofiles/{profileId}/sizes",
-          "id": "dfareporting.sizes.insert",
-          "httpMethod": "POST",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "required": true
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "request": {
-            "$ref": "Size"
-          },
-          "description": "Inserts a new size."
-        },
-        "list": {
-          "description": "Retrieves a list of sizes, possibly filtered. Retrieved sizes are globally unique and may include values not currently in use by your account. Due to this, the list of sizes returned by this method may differ from the list seen in the Trafficking UI.",
-          "path": "userprofiles/{profileId}/sizes",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "ids": {
-              "location": "query",
-              "format": "int64",
-              "repeated": true,
-              "description": "Select only sizes with these IDs.",
-              "type": "string"
-            },
-            "width": {
-              "type": "integer",
-              "minimum": "0",
-              "format": "int32",
-              "maximum": "32767",
-              "location": "query",
-              "description": "Select only sizes with this width."
-            },
-            "height": {
-              "description": "Select only sizes with this height.",
-              "format": "int32",
-              "location": "query",
-              "type": "integer",
-              "maximum": "32767",
-              "minimum": "0"
-            },
-            "iabStandard": {
-              "type": "boolean",
-              "location": "query",
-              "description": "Select only IAB standard sizes."
-            },
-            "profileId": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "format": "int64"
-            }
-          },
-          "httpMethod": "GET",
-          "id": "dfareporting.sizes.list",
-          "flatPath": "userprofiles/{profileId}/sizes",
-          "response": {
-            "$ref": "SizesListResponse"
-          }
-        },
-        "get": {
-          "description": "Gets one size by ID.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/sizes/{id}",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "type": "string"
-            },
-            "id": {
-              "location": "path",
-              "description": "Size ID.",
-              "required": true,
-              "type": "string",
-              "format": "int64"
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "path": "userprofiles/{profileId}/sizes/{id}",
-          "response": {
-            "$ref": "Size"
-          },
-          "httpMethod": "GET",
-          "id": "dfareporting.sizes.get"
-        }
-      }
-    },
-    "metros": {
-      "methods": {
-        "list": {
-          "httpMethod": "GET",
-          "id": "dfareporting.metros.list",
-          "path": "userprofiles/{profileId}/metros",
-          "description": "Retrieves a list of metros.",
-          "flatPath": "userprofiles/{profileId}/metros",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "response": {
-            "$ref": "MetrosListResponse"
-          },
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "type": "string"
-            }
-          }
-        }
-      }
-    },
-    "cities": {
-      "methods": {
-        "list": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "regionDartIds": {
-              "repeated": true,
-              "format": "int64",
-              "type": "string",
-              "description": "Select only cities from these regions.",
-              "location": "query"
-            },
-            "dartIds": {
-              "format": "int64",
-              "description": "Select only cities with these DART IDs.",
-              "repeated": true,
-              "location": "query",
-              "type": "string"
-            },
-            "namePrefix": {
-              "type": "string",
-              "description": "Select only cities with names starting with this prefix.",
-              "location": "query"
-            },
-            "countryDartIds": {
-              "repeated": true,
-              "type": "string",
-              "description": "Select only cities from these countries.",
-              "location": "query",
-              "format": "int64"
-            },
-            "profileId": {
-              "format": "int64",
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true
-            }
-          },
-          "response": {
-            "$ref": "CitiesListResponse"
-          },
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/cities",
-          "flatPath": "userprofiles/{profileId}/cities",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.cities.list",
-          "description": "Retrieves a list of cities, possibly filtered."
-        }
-      }
-    },
-    "platformTypes": {
-      "methods": {
-        "list": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/platformTypes",
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/platformTypes",
-          "response": {
-            "$ref": "PlatformTypesListResponse"
-          },
-          "id": "dfareporting.platformTypes.list",
-          "description": "Retrieves a list of platform types."
-        },
-        "get": {
-          "id": "dfareporting.platformTypes.get",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64",
-              "location": "path",
-              "type": "string"
-            },
-            "id": {
-              "description": "Platform type ID.",
-              "type": "string",
-              "required": true,
-              "format": "int64",
-              "location": "path"
-            }
-          },
-          "response": {
-            "$ref": "PlatformType"
-          },
-          "flatPath": "userprofiles/{profileId}/platformTypes/{id}",
-          "path": "userprofiles/{profileId}/platformTypes/{id}",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Gets one platform type by ID."
-        }
-      }
-    },
-    "accountPermissions": {
-      "methods": {
-        "get": {
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "response": {
-            "$ref": "AccountPermission"
-          },
-          "description": "Gets one account permission by ID.",
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/accountPermissions/{id}",
-          "path": "userprofiles/{profileId}/accountPermissions/{id}",
-          "id": "dfareporting.accountPermissions.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "format": "int64"
-            },
-            "id": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "Account permission ID.",
-              "format": "int64"
-            }
-          }
-        },
-        "list": {
-          "description": "Retrieves the list of account permissions.",
-          "path": "userprofiles/{profileId}/accountPermissions",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "type": "string"
-            }
-          },
-          "id": "dfareporting.accountPermissions.list",
-          "flatPath": "userprofiles/{profileId}/accountPermissions",
-          "response": {
-            "$ref": "AccountPermissionsListResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "httpMethod": "GET"
-        }
-      }
-    },
-    "languages": {
-      "methods": {
-        "list": {
-          "description": "Retrieves a list of languages.",
-          "id": "dfareporting.languages.list",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "response": {
-            "$ref": "LanguagesListResponse"
-          },
-          "flatPath": "userprofiles/{profileId}/languages",
-          "httpMethod": "GET",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "format": "int64"
-            }
-          },
-          "path": "userprofiles/{profileId}/languages",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        }
-      }
-    },
-    "postalCodes": {
-      "methods": {
-        "get": {
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "description": "User profile ID associated with this request."
-            },
-            "code": {
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "Postal code ID."
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "code"
-          ],
-          "flatPath": "userprofiles/{profileId}/postalCodes/{code}",
-          "path": "userprofiles/{profileId}/postalCodes/{code}",
-          "id": "dfareporting.postalCodes.get",
-          "response": {
-            "$ref": "PostalCode"
-          },
-          "description": "Gets one postal code by ID.",
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "list": {
-          "description": "Retrieves a list of postal codes.",
-          "path": "userprofiles/{profileId}/postalCodes",
-          "id": "dfareporting.postalCodes.list",
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/postalCodes",
-          "response": {
-            "$ref": "PostalCodesListResponse"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "description": "User profile ID associated with this request."
-            }
-          }
-        }
-      }
-    },
-    "mobileApps": {
-      "methods": {
-        "get": {
-          "httpMethod": "GET",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "format": "int64",
-              "required": true,
-              "type": "string"
-            },
-            "id": {
-              "required": true,
-              "type": "string",
-              "description": "Mobile app ID.",
-              "location": "path"
-            }
-          },
-          "path": "userprofiles/{profileId}/mobileApps/{id}",
-          "flatPath": "userprofiles/{profileId}/mobileApps/{id}",
-          "response": {
-            "$ref": "MobileApp"
-          },
-          "id": "dfareporting.mobileApps.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Gets one mobile app by ID.",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        },
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Retrieves list of available mobile apps.",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/mobileApps",
-          "flatPath": "userprofiles/{profileId}/mobileApps",
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "MobileAppsListResponse"
-          },
-          "id": "dfareporting.mobileApps.list",
-          "parameters": {
-            "ids": {
-              "location": "query",
-              "type": "string",
-              "description": "Select only apps with these IDs.",
-              "repeated": true
-            },
-            "maxResults": {
-              "maximum": "1000",
-              "format": "int32",
-              "type": "integer",
-              "default": "1000",
-              "minimum": "0",
-              "description": "Maximum number of results to return.",
-              "location": "query"
-            },
-            "directories": {
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                "",
-                ""
-              ],
-              "description": "Select only apps from these directories.",
-              "location": "query",
-              "enum": [
-                "UNKNOWN",
-                "APPLE_APP_STORE",
-                "GOOGLE_PLAY_STORE"
-              ],
-              "repeated": true
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64",
-              "location": "path",
-              "type": "string"
-            },
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page."
-            },
-            "searchString": {
-              "location": "query",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"app*2015\" will return objects with names like \"app Jan 2018\", \"app Jan 2018\", or simply \"app 2018\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"app\" will match objects with name \"my app\", \"app 2018\", or simply \"app\".",
-              "type": "string"
-            }
-          }
-        }
-      }
-    },
-    "userRolePermissionGroups": {
-      "methods": {
-        "get": {
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/userRolePermissionGroups/{id}",
-          "id": "dfareporting.userRolePermissionGroups.get",
-          "response": {
-            "$ref": "UserRolePermissionGroup"
-          },
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            },
-            "id": {
-              "description": "User role permission group ID.",
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "type": "string"
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Gets one user role permission group by ID.",
-          "path": "userprofiles/{profileId}/userRolePermissionGroups/{id}"
-        },
-        "list": {
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "required": true,
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "response": {
-            "$ref": "UserRolePermissionGroupsListResponse"
-          },
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/userRolePermissionGroups",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.userRolePermissionGroups.list",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Gets a list of all supported user role permission groups.",
-          "flatPath": "userprofiles/{profileId}/userRolePermissionGroups"
-        }
-      }
-    },
-    "mobileCarriers": {
-      "methods": {
-        "list": {
-          "id": "dfareporting.mobileCarriers.list",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "flatPath": "userprofiles/{profileId}/mobileCarriers",
-          "description": "Retrieves a list of mobile carriers.",
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "MobileCarriersListResponse"
-          },
-          "path": "userprofiles/{profileId}/mobileCarriers"
-        },
-        "get": {
-          "flatPath": "userprofiles/{profileId}/mobileCarriers/{id}",
-          "path": "userprofiles/{profileId}/mobileCarriers/{id}",
-          "description": "Gets one mobile carrier by ID.",
-          "response": {
-            "$ref": "MobileCarrier"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "httpMethod": "GET",
-          "id": "dfareporting.mobileCarriers.get",
-          "parameters": {
-            "id": {
-              "required": true,
-              "type": "string",
-              "description": "Mobile carrier ID.",
-              "location": "path",
-              "format": "int64"
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "location": "path",
-              "required": true,
-              "type": "string"
-            }
-          }
-        }
-      }
-    },
-    "advertisers": {
-      "methods": {
-        "get": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "Advertiser"
-          },
-          "id": "dfareporting.advertisers.get",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "flatPath": "userprofiles/{profileId}/advertisers/{id}",
-          "httpMethod": "GET",
-          "description": "Gets one advertiser by ID.",
-          "parameters": {
-            "id": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "description": "Advertiser ID."
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "required": true
-            }
-          },
-          "path": "userprofiles/{profileId}/advertisers/{id}"
-        },
-        "patch": {
-          "response": {
-            "$ref": "Advertiser"
-          },
-          "flatPath": "userprofiles/{profileId}/advertisers",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true,
-              "format": "int64"
-            },
-            "id": {
-              "required": true,
-              "type": "string",
-              "description": "Advertiser ID.",
-              "format": "int64",
-              "location": "query"
-            }
-          },
-          "request": {
-            "$ref": "Advertiser"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "id": "dfareporting.advertisers.patch",
-          "path": "userprofiles/{profileId}/advertisers",
-          "description": "Updates an existing advertiser. This method supports patch semantics.",
-          "httpMethod": "PATCH"
-        },
-        "update": {
-          "description": "Updates an existing advertiser.",
-          "request": {
-            "$ref": "Advertiser"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "type": "string",
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            }
-          },
-          "id": "dfareporting.advertisers.update",
-          "path": "userprofiles/{profileId}/advertisers",
-          "httpMethod": "PUT",
-          "flatPath": "userprofiles/{profileId}/advertisers",
-          "response": {
-            "$ref": "Advertiser"
-          },
-          "parameterOrder": [
-            "profileId"
-          ]
-        },
-        "insert": {
-          "request": {
-            "$ref": "Advertiser"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/advertisers",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "response": {
-            "$ref": "Advertiser"
-          },
-          "flatPath": "userprofiles/{profileId}/advertisers",
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "id": "dfareporting.advertisers.insert",
-          "httpMethod": "POST",
-          "description": "Inserts a new advertiser."
-        },
-        "list": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "httpMethod": "GET",
-          "parameters": {
-            "onlyParent": {
-              "type": "boolean",
-              "location": "query",
-              "description": "Select only advertisers which use another advertiser's floodlight configuration."
-            },
-            "advertiserGroupIds": {
-              "format": "int64",
-              "repeated": true,
-              "location": "query",
-              "description": "Select only advertisers with these advertiser group IDs.",
-              "type": "string"
-            },
-            "status": {
-              "type": "string",
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Select only advertisers with the specified status.",
-              "enum": [
-                "APPROVED",
-                "ON_HOLD"
-              ]
-            },
-            "floodlightConfigurationIds": {
-              "description": "Select only advertisers with these floodlight configuration IDs.",
-              "repeated": true,
-              "format": "int64",
-              "type": "string",
-              "location": "query"
-            },
-            "sortOrder": {
-              "default": "ASCENDING",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "description": "Order of sorted results.",
-              "type": "string"
-            },
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page."
-            },
-            "ids": {
-              "location": "query",
-              "format": "int64",
-              "repeated": true,
-              "description": "Select only advertisers with these IDs.",
-              "type": "string"
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "required": true
-            },
-            "includeAdvertisersWithoutGroupsOnly": {
-              "location": "query",
-              "type": "boolean",
-              "description": "Select only advertisers which do not belong to any advertiser group."
-            },
-            "sortField": {
-              "default": "ID",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "type": "string",
-              "description": "Field by which to sort the list.",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "location": "query"
-            },
-            "searchString": {
-              "type": "string",
-              "location": "query",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"advertiser*2015\" will return objects with names like \"advertiser June 2015\", \"advertiser April 2015\", or simply \"advertiser 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"advertiser\" will match objects with name \"my advertiser\", \"advertiser 2015\", or simply \"advertiser\" ."
-            },
-            "maxResults": {
-              "type": "integer",
-              "location": "query",
-              "minimum": "0",
-              "format": "int32",
-              "maximum": "1000",
-              "default": "1000",
-              "description": "Maximum number of results to return."
-            },
-            "subaccountId": {
-              "type": "string",
-              "description": "Select only advertisers with these subaccount IDs.",
-              "location": "query",
-              "format": "int64"
-            }
-          },
-          "id": "dfareporting.advertisers.list",
-          "description": "Retrieves a list of advertisers, possibly filtered. This method supports paging.",
-          "path": "userprofiles/{profileId}/advertisers",
-          "flatPath": "userprofiles/{profileId}/advertisers",
-          "response": {
-            "$ref": "AdvertisersListResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        }
-      }
-    },
-    "regions": {
-      "methods": {
-        "list": {
-          "description": "Retrieves a list of regions.",
-          "httpMethod": "GET",
-          "id": "dfareporting.regions.list",
-          "path": "userprofiles/{profileId}/regions",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/regions",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "response": {
-            "$ref": "RegionsListResponse"
-          }
-        }
-      }
-    },
-    "accountActiveAdSummaries": {
-      "methods": {
-        "get": {
-          "description": "Gets the account's active ad summary by account ID.",
-          "parameterOrder": [
-            "profileId",
-            "summaryAccountId"
-          ],
-          "flatPath": "userprofiles/{profileId}/accountActiveAdSummaries/{summaryAccountId}",
-          "httpMethod": "GET",
-          "parameters": {
-            "summaryAccountId": {
-              "location": "path",
-              "description": "Account ID.",
-              "format": "int64",
-              "required": true,
-              "type": "string"
-            },
-            "profileId": {
-              "type": "string",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/accountActiveAdSummaries/{summaryAccountId}",
-          "response": {
-            "$ref": "AccountActiveAdSummary"
-          },
-          "id": "dfareporting.accountActiveAdSummaries.get"
-        }
-      }
-    },
-    "operatingSystemVersions": {
-      "methods": {
-        "list": {
-          "path": "userprofiles/{profileId}/operatingSystemVersions",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Retrieves a list of operating system versions.",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/operatingSystemVersions",
-          "id": "dfareporting.operatingSystemVersions.list",
-          "response": {
-            "$ref": "OperatingSystemVersionsListResponse"
-          }
-        },
-        "get": {
-          "response": {
-            "$ref": "OperatingSystemVersion"
-          },
-          "description": "Gets one operating system version by ID.",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/operatingSystemVersions/{id}",
-          "id": "dfareporting.operatingSystemVersions.get",
-          "httpMethod": "GET",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "location": "path"
-            },
-            "id": {
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "description": "Operating system version ID."
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/operatingSystemVersions/{id}"
-        }
-      }
-    },
-    "customEvents": {
-      "methods": {
-        "batchinsert": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "response": {
-            "$ref": "CustomEventsBatchInsertResponse"
-          },
-          "request": {
-            "$ref": "CustomEventsBatchInsertRequest"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/ddmconversions"
-          ],
-          "description": "Inserts custom events.",
-          "id": "dfareporting.customEvents.batchinsert",
-          "flatPath": "userprofiles/{profileId}/customEvents/batchinsert",
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "httpMethod": "POST",
-          "path": "userprofiles/{profileId}/customEvents/batchinsert"
-        }
-      }
-    },
-    "userProfiles": {
-      "methods": {
-        "get": {
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/ddmconversions",
-            "https://www.googleapis.com/auth/dfareporting",
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.userProfiles.get",
-          "parameters": {
-            "profileId": {
-              "description": "The user profile ID.",
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "format": "int64"
-            }
-          },
-          "response": {
-            "$ref": "UserProfile"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}",
-          "description": "Gets one user profile by ID.",
-          "flatPath": "userprofiles/{profileId}"
-        },
-        "list": {
-          "parameterOrder": [],
-          "response": {
-            "$ref": "UserProfileList"
-          },
-          "id": "dfareporting.userProfiles.list",
-          "httpMethod": "GET",
-          "parameters": {},
-          "flatPath": "userprofiles",
-          "scopes": [
-            "https://www.googleapis.com/auth/ddmconversions",
-            "https://www.googleapis.com/auth/dfareporting",
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles",
-          "description": "Retrieves list of user profiles for a user."
-        }
-      }
-    },
-    "placementGroups": {
-      "methods": {
-        "list": {
-          "path": "userprofiles/{profileId}/placementGroups",
-          "flatPath": "userprofiles/{profileId}/placementGroups",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "PlacementGroupsListResponse"
-          },
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.placementGroups.list",
-          "parameters": {
-            "minEndDate": {
-              "type": "string",
-              "description": "Select only placements or placement groups whose end date is on or after the specified minEndDate. The date should be formatted as \"yyyy-MM-dd\".",
-              "location": "query"
-            },
-            "maxStartDate": {
-              "type": "string",
-              "location": "query",
-              "description": "Select only placements or placement groups whose start date is on or before the specified maxStartDate. The date should be formatted as \"yyyy-MM-dd\"."
-            },
-            "archived": {
-              "location": "query",
-              "type": "boolean",
-              "description": "Select only archived placements. Don't set this field to select both archived and non-archived placements."
-            },
-            "sortField": {
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Field by which to sort the list.",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "default": "ID",
-              "type": "string"
-            },
-            "contentCategoryIds": {
-              "format": "int64",
-              "location": "query",
-              "description": "Select only placement groups that are associated with these content categories.",
-              "type": "string",
-              "repeated": true
-            },
-            "searchString": {
-              "location": "query",
-              "type": "string",
-              "description": "Allows searching for placement groups by name or ID. Wildcards (*) are allowed. For example, \"placement*2015\" will return placement groups with names like \"placement group June 2015\", \"placement group May 2015\", or simply \"placements 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"placementgroup\" will match placement groups with name \"my placementgroup\", \"placementgroup 2015\", or simply \"placementgroup\"."
-            },
-            "maxResults": {
-              "description": "Maximum number of results to return.",
-              "format": "int32",
-              "default": "800",
-              "minimum": "0",
-              "type": "integer",
-              "maximum": "800",
-              "location": "query"
-            },
-            "advertiserIds": {
-              "description": "Select only placement groups that belong to these advertisers.",
-              "format": "int64",
-              "location": "query",
-              "type": "string",
-              "repeated": true
-            },
-            "campaignIds": {
-              "description": "Select only placement groups that belong to these campaigns.",
-              "type": "string",
-              "location": "query",
-              "repeated": true,
-              "format": "int64"
-            },
-            "maxEndDate": {
-              "type": "string",
-              "location": "query",
-              "description": "Select only placements or placement groups whose end date is on or before the specified maxEndDate. The date should be formatted as \"yyyy-MM-dd\"."
-            },
-            "placementStrategyIds": {
-              "description": "Select only placement groups that are associated with these placement strategies.",
-              "location": "query",
-              "format": "int64",
-              "type": "string",
-              "repeated": true
-            },
-            "pageToken": {
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query"
-            },
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            },
-            "placementGroupType": {
-              "type": "string",
-              "location": "query",
-              "description": "Select only placement groups belonging with this group type. A package is a simple group of placements that acts as a single pricing point for a group of tags. A roadblock is a group of placements that not only acts as a single pricing point but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned placements to be marked as primary for reporting.",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "enum": [
-                "PLACEMENT_PACKAGE",
-                "PLACEMENT_ROADBLOCK"
-              ]
-            },
-            "siteIds": {
-              "location": "query",
-              "description": "Select only placement groups that are associated with these sites.",
-              "type": "string",
-              "repeated": true,
-              "format": "int64"
-            },
-            "minStartDate": {
-              "type": "string",
-              "location": "query",
-              "description": "Select only placements or placement groups whose start date is on or after the specified minStartDate. The date should be formatted as \"yyyy-MM-dd\"."
-            },
-            "ids": {
-              "format": "int64",
-              "location": "query",
-              "type": "string",
-              "repeated": true,
-              "description": "Select only placement groups with these IDs."
-            },
-            "pricingTypes": {
-              "repeated": true,
-              "description": "Select only placement groups with these pricing types.",
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                "",
-                "",
-                ""
-              ],
-              "enum": [
-                "PRICING_TYPE_CPM",
-                "PRICING_TYPE_CPC",
-                "PRICING_TYPE_CPA",
-                "PRICING_TYPE_FLAT_RATE_IMPRESSIONS",
-                "PRICING_TYPE_FLAT_RATE_CLICKS",
-                "PRICING_TYPE_CPM_ACTIVEVIEW"
-              ],
-              "type": "string",
-              "location": "query"
-            },
-            "directorySiteIds": {
-              "description": "Select only placement groups that are associated with these directory sites.",
-              "repeated": true,
-              "type": "string",
-              "location": "query",
-              "format": "int64"
-            },
-            "sortOrder": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "description": "Order of sorted results.",
-              "type": "string",
-              "default": "ASCENDING",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ]
-            }
-          },
-          "description": "Retrieves a list of placement groups, possibly filtered. This method supports paging."
-        },
-        "update": {
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "type": "string",
-              "required": true
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "request": {
-            "$ref": "PlacementGroup"
-          },
-          "response": {
-            "$ref": "PlacementGroup"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/placementGroups",
-          "flatPath": "userprofiles/{profileId}/placementGroups",
-          "id": "dfareporting.placementGroups.update",
-          "httpMethod": "PUT",
-          "description": "Updates an existing placement group."
-        },
-        "get": {
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "format": "int64"
-            },
-            "id": {
-              "format": "int64",
-              "required": true,
-              "description": "Placement group ID.",
-              "location": "path",
-              "type": "string"
-            }
-          },
-          "path": "userprofiles/{profileId}/placementGroups/{id}",
-          "description": "Gets one placement group by ID.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "id": "dfareporting.placementGroups.get",
-          "response": {
-            "$ref": "PlacementGroup"
-          },
-          "flatPath": "userprofiles/{profileId}/placementGroups/{id}"
-        },
-        "patch": {
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true,
-              "format": "int64",
-              "location": "path"
-            },
-            "id": {
-              "type": "string",
-              "location": "query",
-              "required": true,
-              "description": "PlacementGroup ID.",
-              "format": "int64"
-            }
-          },
-          "request": {
-            "$ref": "PlacementGroup"
-          },
-          "response": {
-            "$ref": "PlacementGroup"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "path": "userprofiles/{profileId}/placementGroups",
-          "id": "dfareporting.placementGroups.patch",
-          "flatPath": "userprofiles/{profileId}/placementGroups",
-          "description": "Updates an existing placement group. This method supports patch semantics.",
-          "httpMethod": "PATCH"
-        },
-        "insert": {
-          "id": "dfareporting.placementGroups.insert",
-          "path": "userprofiles/{profileId}/placementGroups",
-          "response": {
-            "$ref": "PlacementGroup"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/placementGroups",
-          "description": "Inserts a new placement group.",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "location": "path",
-              "type": "string"
-            }
-          },
-          "request": {
-            "$ref": "PlacementGroup"
-          },
-          "httpMethod": "POST"
-        }
-      }
-    },
-    "videoFormats": {
-      "methods": {
-        "get": {
-          "id": "dfareporting.videoFormats.get",
-          "response": {
-            "$ref": "VideoFormat"
-          },
-          "path": "userprofiles/{profileId}/videoFormats/{id}",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "id": {
-              "location": "path",
-              "format": "int32",
-              "required": true,
-              "description": "Video format ID.",
-              "type": "integer"
-            },
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            }
-          },
-          "description": "Gets one video format by ID.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/videoFormats/{id}"
-        },
-        "list": {
-          "response": {
-            "$ref": "VideoFormatsListResponse"
-          },
-          "flatPath": "userprofiles/{profileId}/videoFormats",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/videoFormats",
-          "httpMethod": "GET",
-          "description": "Lists available video formats.",
-          "id": "dfareporting.videoFormats.list"
-        }
-      }
-    },
-    "accountUserProfiles": {
-      "methods": {
-        "insert": {
-          "response": {
-            "$ref": "AccountUserProfile"
-          },
-          "path": "userprofiles/{profileId}/accountUserProfiles",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.accountUserProfiles.insert",
-          "flatPath": "userprofiles/{profileId}/accountUserProfiles",
-          "request": {
-            "$ref": "AccountUserProfile"
-          },
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64",
-              "location": "path"
-            }
-          },
-          "description": "Inserts a new account user profile.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "POST"
-        },
-        "get": {
-          "httpMethod": "GET",
-          "id": "dfareporting.accountUserProfiles.get",
-          "description": "Gets one account user profile by ID.",
-          "response": {
-            "$ref": "AccountUserProfile"
-          },
-          "flatPath": "userprofiles/{profileId}/accountUserProfiles/{id}",
-          "path": "userprofiles/{profileId}/accountUserProfiles/{id}",
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "type": "string"
-            },
-            "id": {
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "description": "User profile ID."
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "patch": {
-          "description": "Updates an existing account user profile. This method supports patch semantics.",
-          "path": "userprofiles/{profileId}/accountUserProfiles",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "id": {
-              "description": "AccountUserProfile ID.",
-              "type": "string",
-              "location": "query",
-              "format": "int64",
-              "required": true
-            },
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "required": true
-            }
-          },
-          "request": {
-            "$ref": "AccountUserProfile"
-          },
-          "id": "dfareporting.accountUserProfiles.patch",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/accountUserProfiles",
-          "httpMethod": "PATCH",
-          "response": {
-            "$ref": "AccountUserProfile"
-          }
-        },
-        "update": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "AccountUserProfile"
-          },
-          "id": "dfareporting.accountUserProfiles.update",
-          "description": "Updates an existing account user profile.",
-          "flatPath": "userprofiles/{profileId}/accountUserProfiles",
-          "httpMethod": "PUT",
-          "request": {
-            "$ref": "AccountUserProfile"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "format": "int64"
-            }
-          },
-          "path": "userprofiles/{profileId}/accountUserProfiles"
-        },
-        "list": {
-          "path": "userprofiles/{profileId}/accountUserProfiles",
-          "parameters": {
-            "userRoleId": {
-              "type": "string",
-              "description": "Select only user profiles with the specified user role ID.",
-              "location": "query",
-              "format": "int64"
-            },
-            "searchString": {
-              "description": "Allows searching for objects by name, ID or email. Wildcards (*) are allowed. For example, \"user profile*2015\" will return objects with names like \"user profile June 2015\", \"user profile April 2015\", or simply \"user profile 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"user profile\" will match objects with name \"my user profile\", \"user profile 2015\", or simply \"user profile\".",
-              "type": "string",
-              "location": "query"
-            },
-            "active": {
-              "type": "boolean",
-              "location": "query",
-              "description": "Select only active user profiles."
-            },
-            "sortOrder": {
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "type": "string",
-              "description": "Order of sorted results.",
-              "default": "ASCENDING",
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            },
-            "sortField": {
-              "location": "query",
-              "type": "string",
-              "default": "ID",
-              "description": "Field by which to sort the list.",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            },
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request."
-            },
-            "maxResults": {
-              "location": "query",
-              "format": "int32",
-              "default": "1000",
-              "type": "integer",
-              "minimum": "0",
-              "maximum": "1000",
-              "description": "Maximum number of results to return."
-            },
-            "subaccountId": {
-              "description": "Select only user profiles with the specified subaccount ID.",
-              "location": "query",
-              "type": "string",
-              "format": "int64"
-            },
-            "pageToken": {
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query",
-              "type": "string"
-            },
-            "ids": {
-              "format": "int64",
-              "type": "string",
-              "location": "query",
-              "description": "Select only user profiles with these IDs.",
-              "repeated": true
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Retrieves a list of account user profiles, possibly filtered. This method supports paging.",
-          "response": {
-            "$ref": "AccountUserProfilesListResponse"
-          },
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.accountUserProfiles.list",
-          "flatPath": "userprofiles/{profileId}/accountUserProfiles"
-        }
-      }
-    },
-    "browsers": {
-      "methods": {
-        "list": {
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/browsers",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "type": "string",
-              "format": "int64"
-            }
-          },
-          "description": "Retrieves a list of browsers.",
-          "response": {
-            "$ref": "BrowsersListResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/browsers",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.browsers.list"
-        }
-      }
-    },
-    "inventoryItems": {
-      "methods": {
-        "list": {
-          "flatPath": "userprofiles/{profileId}/projects/{projectId}/inventoryItems",
-          "parameterOrder": [
-            "profileId",
-            "projectId"
-          ],
-          "response": {
-            "$ref": "InventoryItemsListResponse"
-          },
-          "id": "dfareporting.inventoryItems.list",
-          "parameters": {
-            "maxResults": {
-              "maximum": "1000",
-              "description": "Maximum number of results to return.",
-              "default": "1000",
-              "type": "integer",
-              "format": "int32",
-              "minimum": "0",
-              "location": "query"
-            },
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page."
-            },
-            "inPlan": {
-              "description": "Select only inventory items that are in plan.",
-              "location": "query",
-              "type": "boolean"
-            },
-            "sortOrder": {
-              "description": "Order of sorted results.",
-              "default": "ASCENDING",
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ]
-            },
-            "projectId": {
-              "description": "Project ID for order documents.",
-              "format": "int64",
-              "location": "path",
-              "required": true,
-              "type": "string"
-            },
-            "ids": {
-              "description": "Select only inventory items with these IDs.",
-              "type": "string",
-              "repeated": true,
-              "format": "int64",
-              "location": "query"
-            },
-            "type": {
-              "location": "query",
-              "description": "Select only inventory items with this type.",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "enum": [
-                "PLANNING_PLACEMENT_TYPE_REGULAR",
-                "PLANNING_PLACEMENT_TYPE_CREDIT"
-              ],
-              "type": "string"
-            },
-            "sortField": {
-              "description": "Field by which to sort the list.",
-              "location": "query",
-              "default": "ID",
-              "type": "string",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            },
-            "siteId": {
-              "repeated": true,
-              "format": "int64",
-              "location": "query",
-              "type": "string",
-              "description": "Select only inventory items that are associated with these sites."
-            },
-            "orderId": {
-              "description": "Select only inventory items that belong to specified orders.",
-              "repeated": true,
-              "location": "query",
-              "format": "int64",
-              "type": "string"
-            },
-            "profileId": {
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/projects/{projectId}/inventoryItems",
-          "description": "Retrieves a list of inventory items, possibly filtered. This method supports paging.",
-          "httpMethod": "GET"
-        },
-        "get": {
-          "id": "dfareporting.inventoryItems.get",
-          "response": {
-            "$ref": "InventoryItem"
-          },
-          "httpMethod": "GET",
-          "parameters": {
-            "projectId": {
-              "description": "Project ID for order documents.",
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "required": true
-            },
-            "id": {
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "description": "Inventory item ID.",
-              "required": true
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "format": "int64"
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "projectId",
-            "id"
-          ],
-          "flatPath": "userprofiles/{profileId}/projects/{projectId}/inventoryItems/{id}",
-          "description": "Gets one inventory item by ID.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/projects/{projectId}/inventoryItems/{id}"
-        }
-      }
-    },
-    "files": {
-      "methods": {
-        "get": {
-          "path": "reports/{reportId}/files/{fileId}",
-          "description": "Retrieves a report file by its report ID and file ID. This method supports media download.",
-          "id": "dfareporting.files.get",
-          "response": {
-            "$ref": "File"
-          },
-          "parameterOrder": [
-            "reportId",
-            "fileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfareporting"
-          ],
-          "supportsMediaDownload": true,
-          "parameters": {
-            "reportId": {
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "description": "The ID of the report."
-            },
-            "fileId": {
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "The ID of the report file."
-            }
-          },
-          "flatPath": "reports/{reportId}/files/{fileId}",
-          "httpMethod": "GET"
-        },
-        "list": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfareporting"
-          ],
-          "response": {
-            "$ref": "FileList"
-          },
-          "flatPath": "userprofiles/{profileId}/files",
-          "id": "dfareporting.files.list",
-          "parameters": {
-            "sortOrder": {
-              "default": "DESCENDING",
-              "location": "query",
-              "type": "string",
-              "enumDescriptions": [
-                "Ascending order.",
-                "Descending order."
-              ],
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "description": "Order of sorted results."
-            },
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "The value of the nextToken from the previous result page."
-            },
-            "scope": {
-              "enumDescriptions": [
-                "All files in account.",
-                "My files.",
-                "Files shared with me."
-              ],
-              "location": "query",
-              "description": "The scope that defines which results are returned.",
-              "type": "string",
-              "enum": [
-                "ALL",
-                "MINE",
-                "SHARED_WITH_ME"
-              ],
-              "default": "MINE"
-            },
-            "maxResults": {
-              "default": "10",
-              "description": "Maximum number of results to return.",
-              "maximum": "10",
-              "minimum": "0",
-              "type": "integer",
-              "format": "int32",
-              "location": "query"
-            },
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "description": "The Campaign Manager 360 user profile ID.",
-              "location": "path",
-              "type": "string"
-            },
-            "sortField": {
-              "enum": [
-                "ID",
-                "LAST_MODIFIED_TIME"
-              ],
-              "location": "query",
-              "enumDescriptions": [
-                "Sort by file ID.",
-                "Sort by 'lastmodifiedAt' field."
-              ],
-              "type": "string",
-              "description": "The field by which to sort the list.",
-              "default": "LAST_MODIFIED_TIME"
-            }
-          },
-          "description": "Lists files for a user profile.",
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/files"
-        }
-      }
-    },
-    "eventTags": {
-      "methods": {
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/eventTags",
-          "id": "dfareporting.eventTags.list",
-          "parameters": {
-            "searchString": {
-              "type": "string",
-              "location": "query",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"eventtag*2015\" will return objects with names like \"eventtag June 2015\", \"eventtag April 2015\", or simply \"eventtag 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"eventtag\" will match objects with name \"my eventtag\", \"eventtag 2015\", or simply \"eventtag\"."
-            },
-            "campaignId": {
-              "location": "query",
-              "description": "Select only event tags that belong to this campaign.",
-              "format": "int64",
-              "type": "string"
-            },
-            "sortOrder": {
-              "default": "ASCENDING",
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Order of sorted results.",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "type": "string"
-            },
-            "adId": {
-              "format": "int64",
-              "location": "query",
-              "type": "string",
-              "description": "Select only event tags that belong to this ad."
-            },
-            "ids": {
-              "type": "string",
-              "description": "Select only event tags with these IDs.",
-              "location": "query",
-              "repeated": true,
-              "format": "int64"
-            },
-            "definitionsOnly": {
-              "location": "query",
-              "type": "boolean",
-              "description": "Examine only the specified campaign or advertiser's event tags for matching selector criteria. When set to false, the parent advertiser and parent campaign of the specified ad or campaign is examined as well. In addition, when set to false, the status field is examined as well, along with the enabledByDefault field. This parameter can not be set to true when adId is specified as ads do not define their own even tags."
-            },
-            "sortField": {
-              "default": "ID",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "description": "Field by which to sort the list.",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "type": "string"
-            },
-            "profileId": {
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "location": "path"
-            },
-            "eventTagTypes": {
-              "enum": [
-                "IMPRESSION_IMAGE_EVENT_TAG",
-                "IMPRESSION_JAVASCRIPT_EVENT_TAG",
-                "CLICK_THROUGH_EVENT_TAG"
-              ],
-              "location": "query",
-              "description": "Select only event tags with the specified event tag types. Event tag types can be used to specify whether to use a third-party pixel, a third-party JavaScript URL, or a third-party click-through URL for either impression or click tracking.",
-              "type": "string",
-              "repeated": true,
-              "enumDescriptions": [
-                "",
-                "",
-                ""
-              ]
-            },
-            "advertiserId": {
-              "type": "string",
-              "location": "query",
-              "description": "Select only event tags that belong to this advertiser.",
-              "format": "int64"
-            },
-            "enabled": {
-              "location": "query",
-              "description": "Select only enabled event tags. What is considered enabled or disabled depends on the definitionsOnly parameter. When definitionsOnly is set to true, only the specified advertiser or campaign's event tags' enabledByDefault field is examined. When definitionsOnly is set to false, the specified ad or specified campaign's parent advertiser's or parent campaign's event tags' enabledByDefault and status fields are examined as well.",
-              "type": "boolean"
-            }
-          },
-          "description": "Retrieves a list of event tags, possibly filtered.",
-          "response": {
-            "$ref": "EventTagsListResponse"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "flatPath": "userprofiles/{profileId}/eventTags"
-        },
-        "get": {
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/eventTags/{id}",
-          "id": "dfareporting.eventTags.get",
-          "path": "userprofiles/{profileId}/eventTags/{id}",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "type": "string"
-            },
-            "id": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "Event tag ID.",
-              "format": "int64"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "EventTag"
-          },
-          "description": "Gets one event tag by ID.",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        },
-        "patch": {
-          "id": "dfareporting.eventTags.patch",
-          "request": {
-            "$ref": "EventTag"
-          },
-          "httpMethod": "PATCH",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/eventTags",
-          "description": "Updates an existing event tag. This method supports patch semantics.",
-          "path": "userprofiles/{profileId}/eventTags",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "type": "string"
-            },
-            "id": {
-              "required": true,
-              "location": "query",
-              "description": "EventTag ID.",
-              "type": "string",
-              "format": "int64"
-            }
-          },
-          "response": {
-            "$ref": "EventTag"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        },
-        "delete": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "path": "userprofiles/{profileId}/eventTags/{id}",
-          "description": "Deletes an existing event tag.",
-          "httpMethod": "DELETE",
-          "parameters": {
-            "id": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "description": "Event tag ID."
-            },
-            "profileId": {
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "format": "int64",
-              "required": true
-            }
-          },
-          "id": "dfareporting.eventTags.delete",
-          "flatPath": "userprofiles/{profileId}/eventTags/{id}"
-        },
-        "update": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "flatPath": "userprofiles/{profileId}/eventTags",
-          "request": {
-            "$ref": "EventTag"
-          },
-          "httpMethod": "PUT",
-          "id": "dfareporting.eventTags.update",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "required": true
-            }
-          },
-          "description": "Updates an existing event tag.",
-          "response": {
-            "$ref": "EventTag"
-          },
-          "path": "userprofiles/{profileId}/eventTags",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "insert": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "EventTag"
-          },
-          "httpMethod": "POST",
-          "id": "dfareporting.eventTags.insert",
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true,
-              "format": "int64"
-            }
-          },
-          "description": "Inserts a new event tag.",
-          "request": {
-            "$ref": "EventTag"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "flatPath": "userprofiles/{profileId}/eventTags",
-          "path": "userprofiles/{profileId}/eventTags"
-        }
-      }
-    },
-    "orderDocuments": {
-      "methods": {
-        "get": {
-          "id": "dfareporting.orderDocuments.get",
-          "response": {
-            "$ref": "OrderDocument"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Gets one order document by ID.",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "format": "int64"
-            },
-            "id": {
-              "required": true,
-              "format": "int64",
-              "location": "path",
-              "description": "Order document ID.",
-              "type": "string"
-            },
-            "projectId": {
-              "format": "int64",
-              "description": "Project ID for order documents.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "projectId",
-            "id"
-          ],
-          "flatPath": "userprofiles/{profileId}/projects/{projectId}/orderDocuments/{id}",
-          "path": "userprofiles/{profileId}/projects/{projectId}/orderDocuments/{id}",
-          "httpMethod": "GET"
-        },
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/projects/{projectId}/orderDocuments",
-          "response": {
-            "$ref": "OrderDocumentsListResponse"
-          },
-          "id": "dfareporting.orderDocuments.list",
-          "description": "Retrieves a list of order documents, possibly filtered. This method supports paging.",
-          "parameterOrder": [
-            "profileId",
-            "projectId"
-          ],
-          "httpMethod": "GET",
-          "parameters": {
-            "searchString": {
-              "location": "query",
-              "description": "Allows searching for order documents by name or ID. Wildcards (*) are allowed. For example, \"orderdocument*2015\" will return order documents with names like \"orderdocument June 2015\", \"orderdocument April 2015\", or simply \"orderdocument 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"orderdocument\" will match order documents with name \"my orderdocument\", \"orderdocument 2015\", or simply \"orderdocument\".",
-              "type": "string"
-            },
-            "pageToken": {
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query",
-              "type": "string"
-            },
-            "ids": {
-              "location": "query",
-              "repeated": true,
-              "format": "int64",
-              "type": "string",
-              "description": "Select only order documents with these IDs."
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "format": "int64"
-            },
-            "sortField": {
-              "description": "Field by which to sort the list.",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "type": "string",
-              "default": "ID",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query"
-            },
-            "orderId": {
-              "type": "string",
-              "description": "Select only order documents for specified orders.",
-              "format": "int64",
-              "location": "query",
-              "repeated": true
-            },
-            "projectId": {
-              "description": "Project ID for order documents.",
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "location": "path"
-            },
-            "siteId": {
-              "format": "int64",
-              "type": "string",
-              "location": "query",
-              "description": "Select only order documents that are associated with these sites.",
-              "repeated": true
-            },
-            "maxResults": {
-              "default": "1000",
-              "minimum": "0",
-              "format": "int32",
-              "location": "query",
-              "description": "Maximum number of results to return.",
-              "maximum": "1000",
-              "type": "integer"
-            },
-            "sortOrder": {
-              "type": "string",
-              "description": "Order of sorted results.",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "default": "ASCENDING",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "location": "query"
-            },
-            "approved": {
-              "type": "boolean",
-              "description": "Select only order documents that have been approved by at least one user.",
-              "location": "query"
-            }
-          },
-          "path": "userprofiles/{profileId}/projects/{projectId}/orderDocuments"
-        }
-      }
-    },
-    "dynamicTargetingKeys": {
-      "methods": {
-        "insert": {
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "description": "Inserts a new dynamic targeting key. Keys must be created at the advertiser level before being assigned to the advertiser's ads, creatives, or placements. There is a maximum of 1000 keys per advertiser, out of which a maximum of 20 keys can be assigned per ad, creative, or placement.",
-          "request": {
-            "$ref": "DynamicTargetingKey"
-          },
-          "flatPath": "userprofiles/{profileId}/dynamicTargetingKeys",
-          "path": "userprofiles/{profileId}/dynamicTargetingKeys",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.dynamicTargetingKeys.insert",
-          "httpMethod": "POST",
-          "response": {
-            "$ref": "DynamicTargetingKey"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "list": {
-          "description": "Retrieves a list of dynamic targeting keys.",
-          "path": "userprofiles/{profileId}/dynamicTargetingKeys",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "response": {
-            "$ref": "DynamicTargetingKeysListResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/dynamicTargetingKeys",
-          "id": "dfareporting.dynamicTargetingKeys.list",
-          "parameters": {
-            "names": {
-              "description": "Select only dynamic targeting keys exactly matching these names.",
-              "repeated": true,
-              "location": "query",
-              "type": "string"
-            },
-            "objectType": {
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                ""
-              ],
-              "enum": [
-                "OBJECT_ADVERTISER",
-                "OBJECT_AD",
-                "OBJECT_CREATIVE",
-                "OBJECT_PLACEMENT"
-              ],
-              "location": "query",
-              "description": "Select only dynamic targeting keys with this object type.",
-              "type": "string"
-            },
-            "objectId": {
-              "format": "int64",
-              "description": "Select only dynamic targeting keys with this object ID.",
-              "type": "string",
-              "location": "query"
-            },
-            "advertiserId": {
-              "format": "int64",
-              "type": "string",
-              "description": "Select only dynamic targeting keys whose object has this advertiser ID.",
-              "location": "query"
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "type": "string"
-            }
-          },
-          "httpMethod": "GET"
-        },
-        "delete": {
-          "id": "dfareporting.dynamicTargetingKeys.delete",
-          "description": "Deletes an existing dynamic targeting key.",
-          "httpMethod": "DELETE",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "format": "int64"
-            },
-            "objectType": {
-              "description": "Type of the object of this dynamic targeting key. This is a required field.",
-              "required": true,
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                ""
-              ],
-              "enum": [
-                "OBJECT_ADVERTISER",
-                "OBJECT_AD",
-                "OBJECT_CREATIVE",
-                "OBJECT_PLACEMENT"
-              ],
-              "type": "string"
-            },
-            "objectId": {
-              "format": "int64",
-              "description": "ID of the object of this dynamic targeting key. This is a required field.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            },
-            "name": {
-              "description": "Name of this dynamic targeting key. This is a required field. Must be less than 256 characters long and cannot contain commas. All characters are converted to lowercase.",
-              "required": true,
-              "type": "string",
-              "location": "query"
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/dynamicTargetingKeys/{objectId}",
-          "path": "userprofiles/{profileId}/dynamicTargetingKeys/{objectId}",
-          "parameterOrder": [
-            "profileId",
-            "objectId",
-            "name",
-            "objectType"
-          ]
-        }
-      }
-    },
-    "userRoles": {
-      "methods": {
-        "get": {
-          "response": {
-            "$ref": "UserRole"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "id": "dfareporting.userRoles.get",
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/userRoles/{id}",
-          "flatPath": "userprofiles/{profileId}/userRoles/{id}",
-          "description": "Gets one user role by ID.",
-          "parameters": {
-            "id": {
-              "description": "User role ID.",
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "required": true
-            },
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "patch": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "PATCH",
-          "flatPath": "userprofiles/{profileId}/userRoles",
-          "description": "Updates an existing user role. This method supports patch semantics.",
-          "path": "userprofiles/{profileId}/userRoles",
-          "response": {
-            "$ref": "UserRole"
-          },
-          "id": "dfareporting.userRoles.patch",
-          "request": {
-            "$ref": "UserRole"
-          },
-          "parameters": {
-            "id": {
-              "description": "UserRole ID.",
-              "required": true,
-              "location": "query",
-              "format": "int64",
-              "type": "string"
-            },
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        },
-        "insert": {
-          "response": {
-            "$ref": "UserRole"
-          },
-          "id": "dfareporting.userRoles.insert",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "httpMethod": "POST",
-          "path": "userprofiles/{profileId}/userRoles",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Inserts a new user role.",
-          "request": {
-            "$ref": "UserRole"
-          },
-          "flatPath": "userprofiles/{profileId}/userRoles"
-        },
-        "list": {
-          "response": {
-            "$ref": "UserRolesListResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/userRoles",
-          "flatPath": "userprofiles/{profileId}/userRoles",
-          "parameters": {
-            "sortField": {
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Field by which to sort the list.",
-              "default": "ID",
-              "type": "string",
-              "location": "query"
-            },
-            "sortOrder": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Order of sorted results.",
-              "type": "string",
-              "location": "query",
-              "default": "ASCENDING",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ]
-            },
-            "profileId": {
-              "type": "string",
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "location": "path"
-            },
-            "accountUserRoleOnly": {
-              "type": "boolean",
-              "location": "query",
-              "description": "Select only account level user roles not associated with any specific subaccount."
-            },
-            "ids": {
-              "description": "Select only user roles with the specified IDs.",
-              "repeated": true,
-              "format": "int64",
-              "type": "string",
-              "location": "query"
-            },
-            "subaccountId": {
-              "format": "int64",
-              "description": "Select only user roles that belong to this subaccount.",
-              "location": "query",
-              "type": "string"
-            },
-            "pageToken": {
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query"
-            },
-            "maxResults": {
-              "location": "query",
-              "format": "int32",
-              "description": "Maximum number of results to return.",
-              "default": "1000",
-              "maximum": "1000",
-              "type": "integer",
-              "minimum": "0"
-            },
-            "searchString": {
-              "type": "string",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"userrole*2015\" will return objects with names like \"userrole June 2015\", \"userrole April 2015\", or simply \"userrole 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"userrole\" will match objects with name \"my userrole\", \"userrole 2015\", or simply \"userrole\".",
-              "location": "query"
-            }
-          },
-          "id": "dfareporting.userRoles.list",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Retrieves a list of user roles, possibly filtered. This method supports paging."
-        },
-        "delete": {
-          "flatPath": "userprofiles/{profileId}/userRoles/{id}",
-          "id": "dfareporting.userRoles.delete",
-          "httpMethod": "DELETE",
-          "path": "userprofiles/{profileId}/userRoles/{id}",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "id": {
-              "format": "int64",
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "description": "User role ID."
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "description": "Deletes an existing user role.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "update": {
-          "response": {
-            "$ref": "UserRole"
-          },
-          "path": "userprofiles/{profileId}/userRoles",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "request": {
-            "$ref": "UserRole"
-          },
-          "description": "Updates an existing user role.",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "type": "string"
-            }
-          },
-          "id": "dfareporting.userRoles.update",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "PUT",
-          "flatPath": "userprofiles/{profileId}/userRoles"
-        }
-      }
-    },
-    "ads": {
-      "methods": {
-        "patch": {
-          "id": "dfareporting.ads.patch",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "PATCH",
-          "request": {
-            "$ref": "Ad"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "response": {
-            "$ref": "Ad"
-          },
-          "flatPath": "userprofiles/{profileId}/ads",
-          "path": "userprofiles/{profileId}/ads",
-          "description": "Updates an existing ad. This method supports patch semantics.",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true,
-              "format": "int64"
-            },
-            "id": {
-              "type": "string",
-              "format": "int64",
-              "location": "query",
-              "required": true,
-              "description": "Ad ID."
-            }
-          }
-        },
-        "update": {
-          "path": "userprofiles/{profileId}/ads",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "PUT",
-          "flatPath": "userprofiles/{profileId}/ads",
-          "description": "Updates an existing ad.",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "type": "string",
-              "required": true
-            }
-          },
-          "id": "dfareporting.ads.update",
-          "response": {
-            "$ref": "Ad"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "request": {
-            "$ref": "Ad"
-          }
-        },
-        "list": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Retrieves a list of ads, possibly filtered. This method supports paging.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "format": "int64"
-            },
-            "sslRequired": {
-              "type": "boolean",
-              "location": "query",
-              "description": "Select only ads that require SSL."
-            },
-            "overriddenEventTagId": {
-              "format": "int64",
-              "type": "string",
-              "location": "query",
-              "description": "Select only ads with this event tag override ID."
-            },
-            "type": {
-              "description": "Select only ads with these types.",
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                "",
-                ""
-              ],
-              "type": "string",
-              "repeated": true,
-              "location": "query",
-              "enum": [
-                "AD_SERVING_STANDARD_AD",
-                "AD_SERVING_DEFAULT_AD",
-                "AD_SERVING_CLICK_TRACKER",
-                "AD_SERVING_TRACKING",
-                "AD_SERVING_BRAND_SAFE_AD"
-              ]
-            },
-            "sslCompliant": {
-              "description": "Select only ads that are SSL-compliant.",
-              "type": "boolean",
-              "location": "query"
-            },
-            "creativeIds": {
-              "repeated": true,
-              "description": "Select only ads with these creative IDs assigned.",
-              "format": "int64",
-              "location": "query",
-              "type": "string"
-            },
-            "compatibility": {
-              "type": "string",
-              "enum": [
-                "DISPLAY",
-                "DISPLAY_INTERSTITIAL",
-                "APP",
-                "APP_INTERSTITIAL",
-                "IN_STREAM_VIDEO",
-                "IN_STREAM_AUDIO"
-              ],
-              "description": "Select default ads with the specified compatibility. Applicable when type is AD_SERVING_DEFAULT_AD. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are for rendering in mobile apps. IN_STREAM_VIDEO refers to rendering an in-stream video ads developed with the VAST standard.",
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                "",
-                "",
-                ""
-              ]
-            },
-            "audienceSegmentIds": {
-              "format": "int64",
-              "repeated": true,
-              "type": "string",
-              "location": "query",
-              "description": "Select only ads with these audience segment IDs."
-            },
-            "ids": {
-              "repeated": true,
-              "format": "int64",
-              "location": "query",
-              "description": "Select only ads with these IDs.",
-              "type": "string"
-            },
-            "searchString": {
-              "type": "string",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"ad*2015\" will return objects with names like \"ad June 2015\", \"ad April 2015\", or simply \"ad 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"ad\" will match objects with name \"my ad\", \"ad 2015\", or simply \"ad\".",
-              "location": "query"
-            },
-            "dynamicClickTracker": {
-              "description": "Select only dynamic click trackers. Applicable when type is AD_SERVING_CLICK_TRACKER. If true, select dynamic click trackers. If false, select static click trackers. Leave unset to select both.",
-              "type": "boolean",
-              "location": "query"
-            },
-            "sizeIds": {
-              "repeated": true,
-              "type": "string",
-              "description": "Select only ads with these size IDs.",
-              "location": "query",
-              "format": "int64"
-            },
-            "sortOrder": {
-              "location": "query",
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "default": "ASCENDING",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "description": "Order of sorted results."
-            },
-            "creativeOptimizationConfigurationIds": {
-              "description": "Select only ads with these creative optimization configuration IDs.",
-              "location": "query",
-              "repeated": true,
-              "type": "string",
-              "format": "int64"
-            },
-            "remarketingListIds": {
-              "format": "int64",
-              "repeated": true,
-              "location": "query",
-              "type": "string",
-              "description": "Select only ads whose list targeting expression use these remarketing list IDs."
-            },
-            "campaignIds": {
-              "format": "int64",
-              "description": "Select only ads with these campaign IDs.",
-              "location": "query",
-              "repeated": true,
-              "type": "string"
-            },
-            "maxResults": {
-              "type": "integer",
-              "maximum": "1000",
-              "description": "Maximum number of results to return.",
-              "minimum": "0",
-              "default": "1000",
-              "location": "query",
-              "format": "int32"
-            },
-            "active": {
-              "type": "boolean",
-              "location": "query",
-              "description": "Select only active ads."
-            },
-            "sortField": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "default": "ID",
-              "location": "query",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "description": "Field by which to sort the list.",
-              "type": "string"
-            },
-            "placementIds": {
-              "description": "Select only ads with these placement IDs assigned.",
-              "repeated": true,
-              "location": "query",
-              "type": "string",
-              "format": "int64"
-            },
-            "landingPageIds": {
-              "description": "Select only ads with these landing page IDs.",
-              "location": "query",
-              "repeated": true,
-              "format": "int64",
-              "type": "string"
-            },
-            "pageToken": {
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query",
-              "type": "string"
-            },
-            "advertiserId": {
-              "location": "query",
-              "format": "int64",
-              "description": "Select only ads with this advertiser ID.",
-              "type": "string"
-            },
-            "archived": {
-              "description": "Select only archived ads.",
-              "location": "query",
-              "type": "boolean"
-            }
-          },
-          "httpMethod": "GET",
-          "id": "dfareporting.ads.list",
-          "response": {
-            "$ref": "AdsListResponse"
-          },
-          "path": "userprofiles/{profileId}/ads",
-          "flatPath": "userprofiles/{profileId}/ads"
-        },
-        "insert": {
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "format": "int64"
-            }
-          },
-          "httpMethod": "POST",
-          "request": {
-            "$ref": "Ad"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "Ad"
-          },
-          "description": "Inserts a new ad.",
-          "id": "dfareporting.ads.insert",
-          "path": "userprofiles/{profileId}/ads",
-          "flatPath": "userprofiles/{profileId}/ads"
-        },
-        "get": {
-          "response": {
-            "$ref": "Ad"
-          },
-          "httpMethod": "GET",
-          "id": "dfareporting.ads.get",
-          "description": "Gets one ad by ID.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/ads/{id}",
-          "path": "userprofiles/{profileId}/ads/{id}",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "id": {
-              "type": "string",
-              "location": "path",
-              "description": "Ad ID.",
-              "required": true,
-              "format": "int64"
-            },
-            "profileId": {
-              "format": "int64",
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "type": "string"
-            }
-          }
-        }
-      }
-    },
-    "creativeFieldValues": {
-      "methods": {
-        "update": {
-          "httpMethod": "PUT",
-          "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
-          "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
-          "response": {
-            "$ref": "CreativeFieldValue"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Updates an existing creative field value.",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            },
-            "creativeFieldId": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "description": "Creative field ID for this creative field value.",
-              "format": "int64"
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "creativeFieldId"
-          ],
-          "request": {
-            "$ref": "CreativeFieldValue"
-          },
-          "id": "dfareporting.creativeFieldValues.update"
-        },
-        "patch": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "request": {
-            "$ref": "CreativeFieldValue"
-          },
-          "description": "Updates an existing creative field value. This method supports patch semantics.",
-          "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
-          "parameters": {
-            "creativeFieldId": {
-              "required": true,
-              "description": "CreativeField ID.",
-              "type": "string",
-              "format": "int64",
-              "location": "path"
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "required": true
-            },
-            "id": {
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "location": "query",
-              "description": "CreativeFieldValue ID."
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "creativeFieldId",
-            "id"
-          ],
-          "httpMethod": "PATCH",
-          "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
-          "id": "dfareporting.creativeFieldValues.patch",
-          "response": {
-            "$ref": "CreativeFieldValue"
-          }
-        },
-        "insert": {
-          "id": "dfareporting.creativeFieldValues.insert",
-          "parameters": {
-            "creativeFieldId": {
-              "format": "int64",
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "Creative field ID for this creative field value."
-            },
-            "profileId": {
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "format": "int64"
-            }
-          },
-          "httpMethod": "POST",
-          "description": "Inserts a new creative field value.",
-          "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
-          "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
-          "parameterOrder": [
-            "profileId",
-            "creativeFieldId"
-          ],
-          "request": {
-            "$ref": "CreativeFieldValue"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "CreativeFieldValue"
-          }
-        },
-        "get": {
-          "response": {
-            "$ref": "CreativeFieldValue"
-          },
-          "id": "dfareporting.creativeFieldValues.get",
-          "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}",
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "creativeFieldId",
-            "id"
-          ],
-          "parameters": {
-            "id": {
-              "description": "Creative Field Value ID",
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "type": "string"
-            },
-            "creativeFieldId": {
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "description": "Creative field ID for this creative field value."
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "description": "Gets one creative field value by ID."
-        },
-        "delete": {
-          "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}",
-          "description": "Deletes an existing creative field value.",
-          "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}",
-          "parameterOrder": [
-            "profileId",
-            "creativeFieldId",
-            "id"
-          ],
-          "parameters": {
-            "id": {
-              "description": "Creative Field Value ID",
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "location": "path"
-            },
-            "creativeFieldId": {
-              "type": "string",
-              "format": "int64",
-              "required": true,
-              "description": "Creative field ID for this creative field value.",
-              "location": "path"
-            },
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64",
-              "location": "path"
-            }
-          },
-          "id": "dfareporting.creativeFieldValues.delete",
-          "httpMethod": "DELETE",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "list": {
-          "id": "dfareporting.creativeFieldValues.list",
-          "description": "Retrieves a list of creative field values, possibly filtered. This method supports paging.",
-          "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
-          "parameters": {
-            "searchString": {
-              "description": "Allows searching for creative field values by their values. Wildcards (e.g. *) are not allowed.",
-              "location": "query",
-              "type": "string"
-            },
-            "ids": {
-              "format": "int64",
-              "location": "query",
-              "description": "Select only creative field values with these IDs.",
-              "repeated": true,
-              "type": "string"
-            },
-            "sortOrder": {
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "type": "string",
-              "description": "Order of sorted results.",
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "default": "ASCENDING"
-            },
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "location": "path",
-              "required": true
-            },
-            "sortField": {
-              "default": "ID",
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "enum": [
-                "ID",
-                "VALUE"
-              ],
-              "description": "Field by which to sort the list."
-            },
-            "maxResults": {
-              "maximum": "1000",
-              "default": "1000",
-              "description": "Maximum number of results to return.",
-              "type": "integer",
-              "format": "int32",
-              "location": "query",
-              "minimum": "0"
-            },
-            "creativeFieldId": {
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "description": "Creative field ID for this creative field value."
-            },
-            "pageToken": {
-              "location": "query",
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page."
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "creativeFieldId"
-          ],
-          "response": {
-            "$ref": "CreativeFieldValuesListResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        }
-      }
-    },
-    "creativeFields": {
-      "methods": {
-        "patch": {
-          "request": {
-            "$ref": "CreativeField"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.creativeFields.patch",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "format": "int64",
-              "required": true,
-              "type": "string"
-            },
-            "id": {
-              "description": "CreativeField ID.",
-              "format": "int64",
-              "required": true,
-              "type": "string",
-              "location": "query"
-            }
-          },
-          "path": "userprofiles/{profileId}/creativeFields",
-          "response": {
-            "$ref": "CreativeField"
-          },
-          "httpMethod": "PATCH",
-          "description": "Updates an existing creative field. This method supports patch semantics.",
-          "flatPath": "userprofiles/{profileId}/creativeFields",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        },
-        "get": {
-          "id": "dfareporting.creativeFields.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "CreativeField"
-          },
-          "parameters": {
-            "id": {
-              "format": "int64",
-              "description": "Creative Field ID",
-              "location": "path",
-              "type": "string",
-              "required": true
-            },
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true,
-              "format": "int64"
-            }
-          },
-          "path": "userprofiles/{profileId}/creativeFields/{id}",
-          "description": "Gets one creative field by ID.",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "flatPath": "userprofiles/{profileId}/creativeFields/{id}",
-          "httpMethod": "GET"
-        },
-        "insert": {
-          "request": {
-            "$ref": "CreativeField"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "format": "int64"
-            }
-          },
-          "response": {
-            "$ref": "CreativeField"
-          },
-          "httpMethod": "POST",
-          "flatPath": "userprofiles/{profileId}/creativeFields",
-          "description": "Inserts a new creative field.",
-          "id": "dfareporting.creativeFields.insert",
-          "path": "userprofiles/{profileId}/creativeFields"
-        },
-        "list": {
-          "id": "dfareporting.creativeFields.list",
-          "flatPath": "userprofiles/{profileId}/creativeFields",
-          "response": {
-            "$ref": "CreativeFieldsListResponse"
-          },
-          "path": "userprofiles/{profileId}/creativeFields",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Retrieves a list of creative fields, possibly filtered. This method supports paging.",
-          "httpMethod": "GET",
-          "parameters": {
-            "advertiserIds": {
-              "repeated": true,
-              "format": "int64",
-              "location": "query",
-              "description": "Select only creative fields that belong to these advertisers.",
-              "type": "string"
-            },
-            "maxResults": {
-              "description": "Maximum number of results to return.",
-              "maximum": "1000",
-              "format": "int32",
-              "default": "1000",
-              "location": "query",
-              "type": "integer",
-              "minimum": "0"
-            },
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page."
-            },
-            "profileId": {
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "required": true,
-              "type": "string"
-            },
-            "searchString": {
-              "location": "query",
-              "type": "string",
-              "description": "Allows searching for creative fields by name or ID. Wildcards (*) are allowed. For example, \"creativefield*2015\" will return creative fields with names like \"creativefield June 2015\", \"creativefield April 2015\", or simply \"creativefield 2015\". Most of the searches also add wild-cards implicitly at the start and the end of the search string. For example, a search string of \"creativefield\" will match creative fields with the name \"my creativefield\", \"creativefield 2015\", or simply \"creativefield\"."
-            },
-            "sortOrder": {
-              "description": "Order of sorted results.",
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "default": "ASCENDING",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "location": "query"
-            },
-            "ids": {
-              "description": "Select only creative fields with these IDs.",
-              "type": "string",
-              "location": "query",
-              "repeated": true,
-              "format": "int64"
-            },
-            "sortField": {
-              "type": "string",
-              "location": "query",
-              "default": "ID",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "description": "Field by which to sort the list."
-            }
-          }
-        },
-        "update": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Updates an existing creative field.",
-          "response": {
-            "$ref": "CreativeField"
-          },
-          "path": "userprofiles/{profileId}/creativeFields",
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "request": {
-            "$ref": "CreativeField"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.creativeFields.update",
-          "httpMethod": "PUT",
-          "flatPath": "userprofiles/{profileId}/creativeFields"
-        },
-        "delete": {
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "id": "dfareporting.creativeFields.delete",
-          "description": "Deletes an existing creative field.",
-          "parameters": {
-            "id": {
-              "format": "int64",
-              "description": "Creative Field ID",
-              "location": "path",
-              "type": "string",
-              "required": true
-            },
-            "profileId": {
-              "format": "int64",
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/creativeFields/{id}",
-          "path": "userprofiles/{profileId}/creativeFields/{id}",
-          "httpMethod": "DELETE"
-        }
-      }
-    },
-    "advertiserGroups": {
-      "methods": {
-        "delete": {
-          "path": "userprofiles/{profileId}/advertiserGroups/{id}",
-          "description": "Deletes an existing advertiser group.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.advertiserGroups.delete",
-          "httpMethod": "DELETE",
-          "flatPath": "userprofiles/{profileId}/advertiserGroups/{id}",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "type": "string",
-              "format": "int64"
-            },
-            "id": {
-              "location": "path",
-              "description": "Advertiser group ID.",
-              "type": "string",
-              "required": true,
-              "format": "int64"
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        },
-        "update": {
-          "httpMethod": "PUT",
-          "description": "Updates an existing advertiser group.",
-          "path": "userprofiles/{profileId}/advertiserGroups",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "request": {
-            "$ref": "AdvertiserGroup"
-          },
-          "flatPath": "userprofiles/{profileId}/advertiserGroups",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true,
-              "format": "int64"
-            }
-          },
-          "response": {
-            "$ref": "AdvertiserGroup"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.advertiserGroups.update"
-        },
-        "patch": {
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "required": true
-            },
-            "id": {
-              "required": true,
-              "format": "int64",
-              "description": "AdvertiserGroup ID.",
-              "location": "query",
-              "type": "string"
-            }
-          },
-          "description": "Updates an existing advertiser group. This method supports patch semantics.",
-          "flatPath": "userprofiles/{profileId}/advertiserGroups",
-          "httpMethod": "PATCH",
-          "id": "dfareporting.advertiserGroups.patch",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "path": "userprofiles/{profileId}/advertiserGroups",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "request": {
-            "$ref": "AdvertiserGroup"
-          },
-          "response": {
-            "$ref": "AdvertiserGroup"
-          }
-        },
-        "list": {
-          "parameters": {
-            "maxResults": {
-              "description": "Maximum number of results to return.",
-              "location": "query",
-              "minimum": "0",
-              "default": "1000",
-              "type": "integer",
-              "format": "int32",
-              "maximum": "1000"
-            },
-            "pageToken": {
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "type": "string"
-            },
-            "sortField": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "default": "ID",
-              "type": "string",
-              "location": "query",
-              "description": "Field by which to sort the list."
-            },
-            "searchString": {
-              "location": "query",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"advertiser*2015\" will return objects with names like \"advertiser group June 2015\", \"advertiser group April 2015\", or simply \"advertiser group 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"advertisergroup\" will match objects with name \"my advertisergroup\", \"advertisergroup 2015\", or simply \"advertisergroup\".",
-              "type": "string"
-            },
-            "sortOrder": {
-              "location": "query",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "default": "ASCENDING",
-              "description": "Order of sorted results."
-            },
-            "ids": {
-              "description": "Select only advertiser groups with these IDs.",
-              "type": "string",
-              "location": "query",
-              "repeated": true,
-              "format": "int64"
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64",
-              "location": "path",
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.advertiserGroups.list",
-          "flatPath": "userprofiles/{profileId}/advertiserGroups",
-          "response": {
-            "$ref": "AdvertiserGroupsListResponse"
-          },
-          "httpMethod": "GET",
-          "description": "Retrieves a list of advertiser groups, possibly filtered. This method supports paging.",
-          "path": "userprofiles/{profileId}/advertiserGroups"
-        },
-        "insert": {
-          "path": "userprofiles/{profileId}/advertiserGroups",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "flatPath": "userprofiles/{profileId}/advertiserGroups",
-          "httpMethod": "POST",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true
-            }
-          },
-          "description": "Inserts a new advertiser group.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.advertiserGroups.insert",
-          "response": {
-            "$ref": "AdvertiserGroup"
-          },
-          "request": {
-            "$ref": "AdvertiserGroup"
-          }
-        },
-        "get": {
-          "httpMethod": "GET",
-          "description": "Gets one advertiser group by ID.",
-          "id": "dfareporting.advertiserGroups.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/advertiserGroups/{id}",
-          "parameters": {
-            "id": {
-              "type": "string",
-              "required": true,
-              "format": "int64",
-              "description": "Advertiser group ID.",
-              "location": "path"
-            },
-            "profileId": {
-              "type": "string",
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "location": "path"
-            }
-          },
-          "response": {
-            "$ref": "AdvertiserGroup"
-          },
-          "flatPath": "userprofiles/{profileId}/advertiserGroups/{id}",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        }
-      }
-    },
-    "creatives": {
-      "methods": {
-        "update": {
-          "description": "Updates an existing creative.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "Creative"
-          },
-          "request": {
-            "$ref": "Creative"
-          },
-          "httpMethod": "PUT",
-          "path": "userprofiles/{profileId}/creatives",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "type": "string",
-              "format": "int64"
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/creatives",
-          "id": "dfareporting.creatives.update",
-          "parameterOrder": [
-            "profileId"
-          ]
-        },
-        "insert": {
-          "path": "userprofiles/{profileId}/creatives",
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "response": {
-            "$ref": "Creative"
-          },
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "format": "int64",
-              "required": true
-            }
-          },
-          "id": "dfareporting.creatives.insert",
-          "description": "Inserts a new creative.",
-          "flatPath": "userprofiles/{profileId}/creatives",
-          "request": {
-            "$ref": "Creative"
-          }
-        },
-        "list": {
-          "path": "userprofiles/{profileId}/creatives",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "description": "Retrieves a list of creatives, possibly filtered. This method supports paging.",
-          "flatPath": "userprofiles/{profileId}/creatives",
-          "id": "dfareporting.creatives.list",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "sortOrder": {
-              "type": "string",
-              "default": "ASCENDING",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Order of sorted results.",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "location": "query"
-            },
-            "sortField": {
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "default": "ID",
-              "type": "string",
-              "description": "Field by which to sort the list.",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query"
-            },
-            "archived": {
-              "type": "boolean",
-              "description": "Select only archived creatives. Leave blank to select archived and unarchived creatives.",
-              "location": "query"
-            },
-            "renderingIds": {
-              "repeated": true,
-              "format": "int64",
-              "description": "Select only creatives with these rendering IDs.",
-              "location": "query",
-              "type": "string"
-            },
-            "studioCreativeId": {
-              "description": "Select only creatives corresponding to this Studio creative ID.",
-              "type": "string",
-              "format": "int64",
-              "location": "query"
-            },
-            "creativeFieldIds": {
-              "repeated": true,
-              "type": "string",
-              "description": "Select only creatives with these creative field IDs.",
-              "format": "int64",
-              "location": "query"
-            },
-            "searchString": {
-              "type": "string",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"creative*2015\" will return objects with names like \"creative June 2015\", \"creative April 2015\", or simply \"creative 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"creative\" will match objects with name \"my creative\", \"creative 2015\", or simply \"creative\".",
-              "location": "query"
-            },
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page."
-            },
-            "sizeIds": {
-              "format": "int64",
-              "description": "Select only creatives with these size IDs.",
-              "repeated": true,
-              "location": "query",
-              "type": "string"
-            },
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "format": "int64"
-            },
-            "maxResults": {
-              "description": "Maximum number of results to return.",
-              "location": "query",
-              "default": "1000",
-              "format": "int32",
-              "maximum": "1000",
-              "minimum": "0",
-              "type": "integer"
-            },
-            "active": {
-              "description": "Select only active creatives. Leave blank to select active and inactive creatives.",
-              "type": "boolean",
-              "location": "query"
-            },
-            "types": {
-              "enum": [
-                "IMAGE",
-                "DISPLAY_REDIRECT",
-                "CUSTOM_DISPLAY",
-                "INTERNAL_REDIRECT",
-                "CUSTOM_DISPLAY_INTERSTITIAL",
-                "INTERSTITIAL_INTERNAL_REDIRECT",
-                "TRACKING_TEXT",
-                "RICH_MEDIA_DISPLAY_BANNER",
-                "RICH_MEDIA_INPAGE_FLOATING",
-                "RICH_MEDIA_IM_EXPAND",
-                "RICH_MEDIA_DISPLAY_EXPANDING",
-                "RICH_MEDIA_DISPLAY_INTERSTITIAL",
-                "RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL",
-                "RICH_MEDIA_MOBILE_IN_APP",
-                "FLASH_INPAGE",
-                "INSTREAM_VIDEO",
-                "VPAID_LINEAR_VIDEO",
-                "VPAID_NON_LINEAR_VIDEO",
-                "INSTREAM_VIDEO_REDIRECT",
-                "RICH_MEDIA_PEEL_DOWN",
-                "HTML5_BANNER",
-                "DISPLAY",
-                "DISPLAY_IMAGE_GALLERY",
-                "BRAND_SAFE_DEFAULT_INSTREAM_VIDEO",
-                "INSTREAM_AUDIO"
-              ],
-              "description": "Select only creatives with these creative types.",
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                ""
-              ],
-              "repeated": true,
-              "type": "string",
-              "location": "query"
-            },
-            "campaignId": {
-              "location": "query",
-              "description": "Select only creatives with this campaign ID.",
-              "type": "string",
-              "format": "int64"
-            },
-            "companionCreativeIds": {
-              "description": "Select only in-stream video creatives with these companion IDs.",
-              "repeated": true,
-              "location": "query",
-              "type": "string",
-              "format": "int64"
-            },
-            "advertiserId": {
-              "format": "int64",
-              "type": "string",
-              "description": "Select only creatives with this advertiser ID.",
-              "location": "query"
-            },
-            "ids": {
-              "description": "Select only creatives with these IDs.",
-              "type": "string",
-              "format": "int64",
-              "repeated": true,
-              "location": "query"
-            }
-          },
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "CreativesListResponse"
-          }
-        },
-        "patch": {
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "httpMethod": "PATCH",
-          "parameters": {
-            "id": {
-              "location": "query",
-              "type": "string",
-              "format": "int64",
-              "required": true,
-              "description": "Creative ID."
-            },
-            "profileId": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "format": "int64"
-            }
-          },
-          "description": "Updates an existing creative. This method supports patch semantics.",
-          "path": "userprofiles/{profileId}/creatives",
-          "response": {
-            "$ref": "Creative"
-          },
-          "flatPath": "userprofiles/{profileId}/creatives",
-          "id": "dfareporting.creatives.patch",
-          "request": {
-            "$ref": "Creative"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        },
-        "get": {
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "type": "string"
-            },
-            "id": {
-              "description": "Creative ID.",
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "description": "Gets one creative by ID.",
-          "response": {
-            "$ref": "Creative"
-          },
-          "path": "userprofiles/{profileId}/creatives/{id}",
-          "id": "dfareporting.creatives.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/creatives/{id}",
-          "httpMethod": "GET"
-        }
-      }
-    },
-    "remarketingLists": {
-      "methods": {
-        "update": {
-          "request": {
-            "$ref": "RemarketingList"
-          },
-          "httpMethod": "PUT",
-          "flatPath": "userprofiles/{profileId}/remarketingLists",
-          "path": "userprofiles/{profileId}/remarketingLists",
-          "description": "Updates an existing remarketing list.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "RemarketingList"
-          },
-          "id": "dfareporting.remarketingLists.update",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "description": "User profile ID associated with this request."
-            }
-          }
-        },
-        "list": {
-          "parameterOrder": [
-            "profileId",
-            "advertiserId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Retrieves a list of remarketing lists, possibly filtered. This method supports paging.",
-          "parameters": {
-            "floodlightActivityId": {
-              "type": "string",
-              "format": "int64",
-              "description": "Select only remarketing lists that have this floodlight activity ID.",
-              "location": "query"
-            },
-            "profileId": {
-              "type": "string",
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "location": "path"
-            },
-            "advertiserId": {
-              "required": true,
-              "type": "string",
-              "description": "Select only remarketing lists owned by this advertiser.",
-              "location": "query",
-              "format": "int64"
-            },
-            "sortField": {
-              "default": "ID",
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Field by which to sort the list.",
-              "location": "query",
-              "enum": [
-                "ID",
-                "NAME"
-              ]
-            },
-            "pageToken": {
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query",
-              "type": "string"
-            },
-            "sortOrder": {
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Order of sorted results.",
-              "location": "query",
-              "default": "ASCENDING",
-              "type": "string"
-            },
-            "maxResults": {
-              "minimum": "0",
-              "description": "Maximum number of results to return.",
-              "default": "1000",
-              "type": "integer",
-              "location": "query",
-              "maximum": "1000",
-              "format": "int32"
-            },
-            "active": {
-              "location": "query",
-              "type": "boolean",
-              "description": "Select only active or only inactive remarketing lists."
-            },
-            "name": {
-              "type": "string",
-              "location": "query",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"remarketing list*2015\" will return objects with names like \"remarketing list June 2015\", \"remarketing list April 2015\", or simply \"remarketing list 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"remarketing list\" will match objects with name \"my remarketing list\", \"remarketing list 2015\", or simply \"remarketing list\"."
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/remarketingLists",
-          "response": {
-            "$ref": "RemarketingListsListResponse"
-          },
-          "httpMethod": "GET",
-          "id": "dfareporting.remarketingLists.list",
-          "path": "userprofiles/{profileId}/remarketingLists"
-        },
-        "insert": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.remarketingLists.insert",
-          "description": "Inserts a new remarketing list.",
-          "response": {
-            "$ref": "RemarketingList"
-          },
-          "httpMethod": "POST",
-          "path": "userprofiles/{profileId}/remarketingLists",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "request": {
-            "$ref": "RemarketingList"
-          },
-          "flatPath": "userprofiles/{profileId}/remarketingLists"
-        },
-        "patch": {
-          "flatPath": "userprofiles/{profileId}/remarketingLists",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "httpMethod": "PATCH",
-          "description": "Updates an existing remarketing list. This method supports patch semantics.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "request": {
-            "$ref": "RemarketingList"
-          },
-          "id": "dfareporting.remarketingLists.patch",
-          "path": "userprofiles/{profileId}/remarketingLists",
-          "parameters": {
-            "id": {
-              "description": "RemarketingList ID.",
-              "location": "query",
-              "format": "int64",
-              "type": "string",
-              "required": true
-            },
-            "profileId": {
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            }
-          },
-          "response": {
-            "$ref": "RemarketingList"
-          }
-        },
-        "get": {
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "id": {
-              "required": true,
-              "type": "string",
-              "description": "Remarketing list ID.",
-              "format": "int64",
-              "location": "path"
-            },
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "type": "string"
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/remarketingLists/{id}",
-          "id": "dfareporting.remarketingLists.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "RemarketingList"
-          },
-          "path": "userprofiles/{profileId}/remarketingLists/{id}",
-          "description": "Gets one remarketing list by ID."
-        }
-      }
-    },
-    "floodlightActivities": {
-      "methods": {
-        "generatetag": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Generates a tag for a floodlight activity.",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "required": true,
-              "location": "path",
-              "type": "string"
-            },
-            "floodlightActivityId": {
-              "type": "string",
-              "description": "Floodlight activity ID for which we want to generate a tag.",
-              "location": "query",
-              "format": "int64"
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/floodlightActivities/generatetag",
-          "httpMethod": "POST",
-          "response": {
-            "$ref": "FloodlightActivitiesGenerateTagResponse"
-          },
-          "id": "dfareporting.floodlightActivities.generatetag",
-          "flatPath": "userprofiles/{profileId}/floodlightActivities/generatetag"
-        },
-        "list": {
-          "parameters": {
-            "floodlightActivityGroupIds": {
-              "description": "Select only floodlight activities with the specified floodlight activity group IDs.",
-              "format": "int64",
-              "location": "query",
-              "repeated": true,
-              "type": "string"
-            },
-            "advertiserId": {
-              "format": "int64",
-              "type": "string",
-              "description": "Select only floodlight activities for the specified advertiser ID. Must specify either ids, advertiserId, or floodlightConfigurationId for a non-empty result.",
-              "location": "query"
-            },
-            "profileId": {
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            },
-            "searchString": {
-              "location": "query",
-              "type": "string",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"floodlightactivity*2015\" will return objects with names like \"floodlightactivity June 2015\", \"floodlightactivity April 2015\", or simply \"floodlightactivity 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"floodlightactivity\" will match objects with name \"my floodlightactivity activity\", \"floodlightactivity 2015\", or simply \"floodlightactivity\"."
-            },
-            "floodlightConfigurationId": {
-              "description": "Select only floodlight activities for the specified floodlight configuration ID. Must specify either ids, advertiserId, or floodlightConfigurationId for a non-empty result.",
-              "type": "string",
-              "location": "query",
-              "format": "int64"
-            },
-            "floodlightActivityGroupType": {
-              "enum": [
-                "COUNTER",
-                "SALE"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "type": "string",
-              "description": "Select only floodlight activities with the specified floodlight activity group type."
-            },
-            "floodlightActivityGroupTagString": {
-              "type": "string",
-              "description": "Select only floodlight activities with the specified floodlight activity group tag string.",
-              "location": "query"
-            },
-            "maxResults": {
-              "minimum": "0",
-              "location": "query",
-              "format": "int32",
-              "default": "1000",
-              "maximum": "1000",
-              "description": "Maximum number of results to return.",
-              "type": "integer"
-            },
-            "sortOrder": {
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "location": "query",
-              "type": "string",
-              "description": "Order of sorted results.",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "default": "ASCENDING"
-            },
-            "tagString": {
-              "location": "query",
-              "type": "string",
-              "description": "Select only floodlight activities with the specified tag string."
-            },
-            "floodlightActivityGroupName": {
-              "location": "query",
-              "description": "Select only floodlight activities with the specified floodlight activity group name.",
-              "type": "string"
-            },
-            "sortField": {
-              "default": "ID",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "type": "string",
-              "location": "query",
-              "description": "Field by which to sort the list.",
-              "enum": [
-                "ID",
-                "NAME"
-              ]
-            },
-            "ids": {
-              "repeated": true,
-              "location": "query",
-              "type": "string",
-              "format": "int64",
-              "description": "Select only floodlight activities with the specified IDs. Must specify either ids, advertiserId, or floodlightConfigurationId for a non-empty result."
-            },
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page."
-            }
-          },
-          "path": "userprofiles/{profileId}/floodlightActivities",
-          "httpMethod": "GET",
-          "description": "Retrieves a list of floodlight activities, possibly filtered. This method supports paging.",
-          "response": {
-            "$ref": "FloodlightActivitiesListResponse"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "flatPath": "userprofiles/{profileId}/floodlightActivities",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.floodlightActivities.list"
-        },
-        "update": {
-          "description": "Updates an existing floodlight activity.",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "response": {
-            "$ref": "FloodlightActivity"
-          },
-          "path": "userprofiles/{profileId}/floodlightActivities",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "PUT",
-          "id": "dfareporting.floodlightActivities.update",
-          "flatPath": "userprofiles/{profileId}/floodlightActivities",
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "request": {
-            "$ref": "FloodlightActivity"
-          }
-        },
-        "delete": {
-          "flatPath": "userprofiles/{profileId}/floodlightActivities/{id}",
-          "description": "Deletes an existing floodlight activity.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "path": "userprofiles/{profileId}/floodlightActivities/{id}",
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path",
-              "required": true
-            },
-            "id": {
-              "description": "Floodlight activity ID.",
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "required": true
-            }
-          },
-          "httpMethod": "DELETE",
-          "id": "dfareporting.floodlightActivities.delete"
-        },
-        "insert": {
-          "path": "userprofiles/{profileId}/floodlightActivities",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.floodlightActivities.insert",
-          "request": {
-            "$ref": "FloodlightActivity"
-          },
-          "description": "Inserts a new floodlight activity.",
-          "response": {
-            "$ref": "FloodlightActivity"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "flatPath": "userprofiles/{profileId}/floodlightActivities",
-          "httpMethod": "POST",
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "location": "path"
-            }
-          }
-        },
-        "get": {
-          "id": "dfareporting.floodlightActivities.get",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "id": {
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "description": "Floodlight activity ID.",
-              "location": "path"
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path",
-              "format": "int64",
-              "required": true
-            }
-          },
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "FloodlightActivity"
-          },
-          "path": "userprofiles/{profileId}/floodlightActivities/{id}",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Gets one floodlight activity by ID.",
-          "flatPath": "userprofiles/{profileId}/floodlightActivities/{id}"
-        },
-        "patch": {
-          "id": "dfareporting.floodlightActivities.patch",
-          "path": "userprofiles/{profileId}/floodlightActivities",
-          "request": {
-            "$ref": "FloodlightActivity"
-          },
-          "flatPath": "userprofiles/{profileId}/floodlightActivities",
-          "description": "Updates an existing floodlight activity. This method supports patch semantics.",
-          "httpMethod": "PATCH",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "FloodlightActivity"
-          },
-          "parameters": {
-            "id": {
-              "description": "FloodlightActivity ID.",
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "location": "query"
-            },
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "location": "path",
-              "format": "int64"
-            }
-          }
-        }
-      }
-    },
-    "accountPermissionGroups": {
-      "methods": {
-        "get": {
-          "response": {
-            "$ref": "AccountPermissionGroup"
-          },
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            },
-            "id": {
-              "required": true,
-              "description": "Account permission group ID.",
-              "format": "int64",
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "httpMethod": "GET",
-          "description": "Gets one account permission group by ID.",
-          "id": "dfareporting.accountPermissionGroups.get",
-          "flatPath": "userprofiles/{profileId}/accountPermissionGroups/{id}",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "path": "userprofiles/{profileId}/accountPermissionGroups/{id}"
-        },
-        "list": {
-          "httpMethod": "GET",
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64"
-            }
-          },
-          "path": "userprofiles/{profileId}/accountPermissionGroups",
-          "flatPath": "userprofiles/{profileId}/accountPermissionGroups",
-          "id": "dfareporting.accountPermissionGroups.list",
-          "description": "Retrieves the list of account permission groups.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "response": {
-            "$ref": "AccountPermissionGroupsListResponse"
-          }
-        }
-      }
-    },
-    "sites": {
-      "methods": {
-        "patch": {
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "User profile ID associated with this request."
-            },
-            "id": {
-              "type": "string",
-              "description": "Site ID.",
-              "format": "int64",
-              "location": "query",
-              "required": true
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/sites",
-          "response": {
-            "$ref": "Site"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "PATCH",
-          "description": "Updates an existing site. This method supports patch semantics.",
-          "request": {
-            "$ref": "Site"
-          },
-          "path": "userprofiles/{profileId}/sites",
-          "id": "dfareporting.sites.patch"
-        },
-        "list": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "httpMethod": "GET",
-          "description": "Retrieves a list of sites, possibly filtered. This method supports paging.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "SitesListResponse"
-          },
-          "flatPath": "userprofiles/{profileId}/sites",
-          "path": "userprofiles/{profileId}/sites",
-          "id": "dfareporting.sites.list",
-          "parameters": {
-            "subaccountId": {
-              "type": "string",
-              "description": "Select only sites with this subaccount ID.",
-              "format": "int64",
-              "location": "query"
-            },
-            "approved": {
-              "type": "boolean",
-              "description": "Select only approved sites.",
-              "location": "query"
-            },
-            "sortField": {
-              "description": "Field by which to sort the list.",
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "default": "ID",
-              "enum": [
-                "ID",
-                "NAME"
-              ]
-            },
-            "acceptsInStreamVideoPlacements": {
-              "type": "boolean",
-              "location": "query",
-              "description": "This search filter is no longer supported and will have no effect on the results returned."
-            },
-            "acceptsPublisherPaidPlacements": {
-              "type": "boolean",
-              "location": "query",
-              "description": "Select only sites that accept publisher paid placements."
-            },
-            "ids": {
-              "repeated": true,
-              "type": "string",
-              "location": "query",
-              "format": "int64",
-              "description": "Select only sites with these IDs."
-            },
-            "acceptsInterstitialPlacements": {
-              "location": "query",
-              "description": "This search filter is no longer supported and will have no effect on the results returned.",
-              "type": "boolean"
-            },
-            "searchString": {
-              "description": "Allows searching for objects by name, ID or keyName. Wildcards (*) are allowed. For example, \"site*2015\" will return objects with names like \"site June 2015\", \"site April 2015\", or simply \"site 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"site\" will match objects with name \"my site\", \"site 2015\", or simply \"site\".",
-              "type": "string",
-              "location": "query"
-            },
-            "directorySiteIds": {
-              "format": "int64",
-              "description": "Select only sites with these directory site IDs.",
-              "type": "string",
-              "location": "query",
-              "repeated": true
-            },
-            "campaignIds": {
-              "description": "Select only sites with these campaign IDs.",
-              "location": "query",
-              "format": "int64",
-              "repeated": true,
-              "type": "string"
-            },
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page."
-            },
-            "sortOrder": {
-              "location": "query",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "default": "ASCENDING",
-              "description": "Order of sorted results.",
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            },
-            "adWordsSite": {
-              "description": "Select only AdWords sites.",
-              "location": "query",
-              "type": "boolean"
-            },
-            "unmappedSite": {
-              "description": "Select only sites that have not been mapped to a directory site.",
-              "location": "query",
-              "type": "boolean"
-            },
-            "maxResults": {
-              "format": "int32",
-              "default": "1000",
-              "description": "Maximum number of results to return.",
-              "maximum": "1000",
-              "type": "integer",
-              "minimum": "0",
-              "location": "query"
-            },
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64",
-              "location": "path"
-            }
-          }
-        },
-        "update": {
-          "response": {
-            "$ref": "Site"
-          },
-          "path": "userprofiles/{profileId}/sites",
-          "flatPath": "userprofiles/{profileId}/sites",
-          "request": {
-            "$ref": "Site"
-          },
-          "description": "Updates an existing site.",
-          "httpMethod": "PUT",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.sites.update",
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "description": "User profile ID associated with this request."
-            }
-          }
-        },
-        "get": {
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path",
-              "required": true
-            },
-            "id": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "description": "Site ID."
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "id": "dfareporting.sites.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/sites/{id}",
-          "response": {
-            "$ref": "Site"
-          },
-          "description": "Gets one site by ID.",
-          "flatPath": "userprofiles/{profileId}/sites/{id}"
-        },
-        "insert": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "POST",
-          "path": "userprofiles/{profileId}/sites",
-          "description": "Inserts a new site.",
-          "response": {
-            "$ref": "Site"
-          },
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "request": {
-            "$ref": "Site"
-          },
-          "flatPath": "userprofiles/{profileId}/sites",
-          "id": "dfareporting.sites.insert"
-        }
-      }
-    },
-    "targetingTemplates": {
-      "methods": {
-        "update": {
-          "description": "Updates an existing targeting template.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/targetingTemplates",
-          "path": "userprofiles/{profileId}/targetingTemplates",
-          "request": {
-            "$ref": "TargetingTemplate"
-          },
-          "httpMethod": "PUT",
-          "response": {
-            "$ref": "TargetingTemplate"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "id": "dfareporting.targetingTemplates.update"
-        },
-        "insert": {
-          "response": {
-            "$ref": "TargetingTemplate"
-          },
-          "path": "userprofiles/{profileId}/targetingTemplates",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "type": "string"
-            }
-          },
-          "id": "dfareporting.targetingTemplates.insert",
-          "description": "Inserts a new targeting template.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "request": {
-            "$ref": "TargetingTemplate"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "flatPath": "userprofiles/{profileId}/targetingTemplates",
-          "httpMethod": "POST"
-        },
-        "patch": {
-          "description": "Updates an existing targeting template. This method supports patch semantics.",
-          "flatPath": "userprofiles/{profileId}/targetingTemplates",
-          "parameters": {
-            "id": {
-              "type": "string",
-              "format": "int64",
-              "required": true,
-              "description": "TargetingTemplate ID.",
-              "location": "query"
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "required": true,
-              "location": "path",
-              "type": "string"
-            }
-          },
-          "response": {
-            "$ref": "TargetingTemplate"
-          },
-          "id": "dfareporting.targetingTemplates.patch",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "httpMethod": "PATCH",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "request": {
-            "$ref": "TargetingTemplate"
-          },
-          "path": "userprofiles/{profileId}/targetingTemplates"
-        },
-        "list": {
-          "flatPath": "userprofiles/{profileId}/targetingTemplates",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "TargetingTemplatesListResponse"
-          },
-          "path": "userprofiles/{profileId}/targetingTemplates",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "httpMethod": "GET",
-          "description": "Retrieves a list of targeting templates, optionally filtered. This method supports paging.",
-          "id": "dfareporting.targetingTemplates.list",
-          "parameters": {
-            "searchString": {
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"template*2015\" will return objects with names like \"template June 2015\", \"template April 2015\", or simply \"template 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"template\" will match objects with name \"my template\", \"template 2015\", or simply \"template\".",
-              "location": "query",
-              "type": "string"
-            },
-            "sortOrder": {
-              "description": "Order of sorted results.",
-              "type": "string",
-              "location": "query",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "default": "ASCENDING",
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            },
-            "pageToken": {
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query"
-            },
-            "sortField": {
-              "default": "ID",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "description": "Field by which to sort the list.",
-              "type": "string",
-              "location": "query"
-            },
-            "advertiserId": {
-              "format": "int64",
-              "description": "Select only targeting templates with this advertiser ID.",
-              "location": "query",
-              "type": "string"
-            },
-            "ids": {
-              "location": "query",
-              "type": "string",
-              "description": "Select only targeting templates with these IDs.",
-              "format": "int64",
-              "repeated": true
-            },
-            "maxResults": {
-              "minimum": "0",
-              "description": "Maximum number of results to return.",
-              "maximum": "1000",
-              "format": "int32",
-              "location": "query",
-              "type": "integer",
-              "default": "1000"
-            },
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "type": "string"
-            }
-          }
-        },
-        "get": {
-          "flatPath": "userprofiles/{profileId}/targetingTemplates/{id}",
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "response": {
-            "$ref": "TargetingTemplate"
-          },
-          "id": "dfareporting.targetingTemplates.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "format": "int64",
-              "required": true
-            },
-            "id": {
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "description": "Targeting template ID."
-            }
-          },
-          "path": "userprofiles/{profileId}/targetingTemplates/{id}",
-          "description": "Gets one targeting template by ID."
-        }
-      }
-    },
-    "creativeAssets": {
-      "methods": {
-        "insert": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "POST",
-          "supportsMediaUpload": true,
-          "id": "dfareporting.creativeAssets.insert",
-          "mediaUpload": {
-            "protocols": {
-              "simple": {
-                "path": "/upload/dfareporting/v3.4/userprofiles/{profileId}/creativeAssets/{advertiserId}/creativeAssets",
-                "multipart": true
-              }
-            },
-            "accept": [
-              "*/*"
-            ],
-            "maxSize": "1073741824"
-          },
-          "description": "Inserts a new creative asset.",
-          "parameterOrder": [
-            "profileId",
-            "advertiserId"
-          ],
-          "path": "userprofiles/{profileId}/creativeAssets/{advertiserId}/creativeAssets",
-          "flatPath": "userprofiles/{profileId}/creativeAssets/{advertiserId}/creativeAssets",
-          "request": {
-            "$ref": "CreativeAssetMetadata"
-          },
-          "response": {
-            "$ref": "CreativeAssetMetadata"
-          },
-          "parameters": {
-            "advertiserId": {
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "description": "Advertiser ID of this creative. This is a required field.",
-              "location": "path"
-            },
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "type": "string"
-            }
-          }
-        }
-      }
-    },
-    "accounts": {
-      "methods": {
-        "get": {
-          "id": "dfareporting.accounts.get",
-          "parameters": {
-            "id": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "format": "int64",
-              "description": "Account ID."
-            },
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "description": "Gets one account by ID.",
-          "path": "userprofiles/{profileId}/accounts/{id}",
-          "response": {
-            "$ref": "Account"
-          },
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "flatPath": "userprofiles/{profileId}/accounts/{id}"
-        },
-        "list": {
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Retrieves the list of accounts, possibly filtered. This method supports paging.",
-          "response": {
-            "$ref": "AccountsListResponse"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "ids": {
-              "location": "query",
-              "type": "string",
-              "repeated": true,
-              "description": "Select only accounts with these IDs.",
-              "format": "int64"
-            },
-            "searchString": {
-              "type": "string",
-              "location": "query",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"account*2015\" will return objects with names like \"account June 2015\", \"account April 2015\", or simply \"account 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"account\" will match objects with name \"my account\", \"account 2015\", or simply \"account\"."
-            },
-            "sortField": {
-              "location": "query",
-              "description": "Field by which to sort the list.",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "type": "string",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "default": "ID"
-            },
-            "pageToken": {
-              "location": "query",
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page."
-            },
-            "maxResults": {
-              "description": "Maximum number of results to return.",
-              "default": "1000",
-              "minimum": "0",
-              "location": "query",
-              "maximum": "1000",
-              "type": "integer",
-              "format": "int32"
-            },
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "format": "int64",
-              "required": true
-            },
-            "active": {
-              "location": "query",
-              "description": "Select only active accounts. Don't set this field to select both active and non-active accounts.",
-              "type": "boolean"
-            },
-            "sortOrder": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Order of sorted results.",
-              "location": "query",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "default": "ASCENDING",
-              "type": "string"
-            }
-          },
-          "path": "userprofiles/{profileId}/accounts",
-          "id": "dfareporting.accounts.list",
-          "flatPath": "userprofiles/{profileId}/accounts"
-        },
-        "patch": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "id": {
-              "description": "Account ID.",
-              "type": "string",
-              "location": "query",
-              "format": "int64",
-              "required": true
-            },
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "response": {
-            "$ref": "Account"
-          },
-          "request": {
-            "$ref": "Account"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "flatPath": "userprofiles/{profileId}/accounts",
-          "path": "userprofiles/{profileId}/accounts",
-          "description": "Updates an existing account. This method supports patch semantics.",
-          "httpMethod": "PATCH",
-          "id": "dfareporting.accounts.patch"
-        },
-        "update": {
-          "path": "userprofiles/{profileId}/accounts",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "Account"
-          },
-          "flatPath": "userprofiles/{profileId}/accounts",
-          "description": "Updates an existing account.",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "format": "int64",
-              "type": "string"
-            }
-          },
-          "httpMethod": "PUT",
-          "id": "dfareporting.accounts.update",
-          "request": {
-            "$ref": "Account"
-          }
-        }
-      }
-    },
-    "connectionTypes": {
-      "methods": {
-        "get": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.connectionTypes.get",
-          "response": {
-            "$ref": "ConnectionType"
-          },
-          "description": "Gets one connection type by ID.",
-          "parameters": {
-            "id": {
-              "location": "path",
-              "type": "string",
-              "format": "int64",
-              "description": "Connection type ID.",
-              "required": true
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "required": true
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/connectionTypes/{id}",
-          "path": "userprofiles/{profileId}/connectionTypes/{id}",
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        },
-        "list": {
-          "path": "userprofiles/{profileId}/connectionTypes",
-          "id": "dfareporting.connectionTypes.list",
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "required": true
-            }
-          },
-          "response": {
-            "$ref": "ConnectionTypesListResponse"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "flatPath": "userprofiles/{profileId}/connectionTypes",
-          "description": "Retrieves a list of connection types."
-        }
-      }
-    },
-    "reports": {
-      "resources": {
-        "compatibleFields": {
-          "methods": {
-            "query": {
-              "response": {
-                "$ref": "CompatibleFields"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/dfareporting"
-              ],
-              "parameters": {
-                "profileId": {
-                  "type": "string",
-                  "location": "path",
-                  "description": "The Campaign Manager 360 user profile ID.",
-                  "format": "int64",
-                  "required": true
+            "methods": {
+                "batchinsert": {
+                    "description": "Inserts conversions.",
+                    "flatPath": "userprofiles/{profileId}/conversions/batchinsert",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.conversions.batchinsert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/conversions/batchinsert",
+                    "request": {
+                        "$ref": "ConversionsBatchInsertRequest"
+                    },
+                    "response": {
+                        "$ref": "ConversionsBatchInsertResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ddmconversions"
+                    ]
+                },
+                "batchupdate": {
+                    "description": "Updates existing conversions.",
+                    "flatPath": "userprofiles/{profileId}/conversions/batchupdate",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.conversions.batchupdate",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/conversions/batchupdate",
+                    "request": {
+                        "$ref": "ConversionsBatchUpdateRequest"
+                    },
+                    "response": {
+                        "$ref": "ConversionsBatchUpdateResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ddmconversions"
+                    ]
                 }
-              },
-              "httpMethod": "POST",
-              "request": {
-                "$ref": "Report"
-              },
-              "flatPath": "userprofiles/{profileId}/reports/compatiblefields/query",
-              "description": "Returns the fields that are compatible to be selected in the respective sections of a report criteria, given the fields already selected in the input report and user permissions.",
-              "path": "userprofiles/{profileId}/reports/compatiblefields/query",
-              "parameterOrder": [
-                "profileId"
-              ],
-              "id": "dfareporting.reports.compatibleFields.query"
             }
-          }
+        },
+        "countries": {
+            "methods": {
+                "get": {
+                    "description": "Gets one country by ID.",
+                    "flatPath": "userprofiles/{profileId}/countries/{dartId}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.countries.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "dartId"
+                    ],
+                    "parameters": {
+                        "dartId": {
+                            "description": "Country DART ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/countries/{dartId}",
+                    "response": {
+                        "$ref": "Country"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of countries.",
+                    "flatPath": "userprofiles/{profileId}/countries",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.countries.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/countries",
+                    "response": {
+                        "$ref": "CountriesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "creativeAssets": {
+            "methods": {
+                "insert": {
+                    "description": "Inserts a new creative asset.",
+                    "flatPath": "userprofiles/{profileId}/creativeAssets/{advertiserId}/creativeAssets",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.creativeAssets.insert",
+                    "mediaUpload": {
+                        "accept": [
+                            "*/*"
+                        ],
+                        "maxSize": "1073741824",
+                        "protocols": {
+                            "simple": {
+                                "multipart": true,
+                                "path": "/upload/dfareporting/v3.4/userprofiles/{profileId}/creativeAssets/{advertiserId}/creativeAssets"
+                            }
+                        }
+                    },
+                    "parameterOrder": [
+                        "profileId",
+                        "advertiserId"
+                    ],
+                    "parameters": {
+                        "advertiserId": {
+                            "description": "Advertiser ID of this creative. This is a required field.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeAssets/{advertiserId}/creativeAssets",
+                    "request": {
+                        "$ref": "CreativeAssetMetadata"
+                    },
+                    "response": {
+                        "$ref": "CreativeAssetMetadata"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ],
+                    "supportsMediaUpload": true
+                }
+            }
+        },
+        "creativeFieldValues": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes an existing creative field value.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}",
+                    "httpMethod": "DELETE",
+                    "id": "dfareporting.creativeFieldValues.delete",
+                    "parameterOrder": [
+                        "profileId",
+                        "creativeFieldId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "creativeFieldId": {
+                            "description": "Creative field ID for this creative field value.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "id": {
+                            "description": "Creative Field Value ID",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "get": {
+                    "description": "Gets one creative field value by ID.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.creativeFieldValues.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "creativeFieldId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "creativeFieldId": {
+                            "description": "Creative field ID for this creative field value.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "id": {
+                            "description": "Creative Field Value ID",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}",
+                    "response": {
+                        "$ref": "CreativeFieldValue"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new creative field value.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.creativeFieldValues.insert",
+                    "parameterOrder": [
+                        "profileId",
+                        "creativeFieldId"
+                    ],
+                    "parameters": {
+                        "creativeFieldId": {
+                            "description": "Creative field ID for this creative field value.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
+                    "request": {
+                        "$ref": "CreativeFieldValue"
+                    },
+                    "response": {
+                        "$ref": "CreativeFieldValue"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of creative field values, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.creativeFieldValues.list",
+                    "parameterOrder": [
+                        "profileId",
+                        "creativeFieldId"
+                    ],
+                    "parameters": {
+                        "creativeFieldId": {
+                            "description": "Creative field ID for this creative field value.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only creative field values with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for creative field values by their values. Wildcards (e.g. *) are not allowed.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "VALUE"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
+                    "response": {
+                        "$ref": "CreativeFieldValuesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing creative field value. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.creativeFieldValues.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "creativeFieldId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "creativeFieldId": {
+                            "description": "CreativeField ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "id": {
+                            "description": "CreativeFieldValue ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
+                    "request": {
+                        "$ref": "CreativeFieldValue"
+                    },
+                    "response": {
+                        "$ref": "CreativeFieldValue"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing creative field value.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.creativeFieldValues.update",
+                    "parameterOrder": [
+                        "profileId",
+                        "creativeFieldId"
+                    ],
+                    "parameters": {
+                        "creativeFieldId": {
+                            "description": "Creative field ID for this creative field value.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues",
+                    "request": {
+                        "$ref": "CreativeFieldValue"
+                    },
+                    "response": {
+                        "$ref": "CreativeFieldValue"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "creativeFields": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes an existing creative field.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields/{id}",
+                    "httpMethod": "DELETE",
+                    "id": "dfareporting.creativeFields.delete",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Creative Field ID",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields/{id}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "get": {
+                    "description": "Gets one creative field by ID.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.creativeFields.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Creative Field ID",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields/{id}",
+                    "response": {
+                        "$ref": "CreativeField"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new creative field.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.creativeFields.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields",
+                    "request": {
+                        "$ref": "CreativeField"
+                    },
+                    "response": {
+                        "$ref": "CreativeField"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of creative fields, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.creativeFields.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserIds": {
+                            "description": "Select only creative fields that belong to these advertisers.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only creative fields with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for creative fields by name or ID. Wildcards (*) are allowed. For example, \"creativefield*2015\" will return creative fields with names like \"creativefield June 2015\", \"creativefield April 2015\", or simply \"creativefield 2015\". Most of the searches also add wild-cards implicitly at the start and the end of the search string. For example, a search string of \"creativefield\" will match creative fields with the name \"my creativefield\", \"creativefield 2015\", or simply \"creativefield\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields",
+                    "response": {
+                        "$ref": "CreativeFieldsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing creative field. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.creativeFields.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "CreativeField ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields",
+                    "request": {
+                        "$ref": "CreativeField"
+                    },
+                    "response": {
+                        "$ref": "CreativeField"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing creative field.",
+                    "flatPath": "userprofiles/{profileId}/creativeFields",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.creativeFields.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeFields",
+                    "request": {
+                        "$ref": "CreativeField"
+                    },
+                    "response": {
+                        "$ref": "CreativeField"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "creativeGroups": {
+            "methods": {
+                "get": {
+                    "description": "Gets one creative group by ID.",
+                    "flatPath": "userprofiles/{profileId}/creativeGroups/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.creativeGroups.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Creative group ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeGroups/{id}",
+                    "response": {
+                        "$ref": "CreativeGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new creative group.",
+                    "flatPath": "userprofiles/{profileId}/creativeGroups",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.creativeGroups.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeGroups",
+                    "request": {
+                        "$ref": "CreativeGroup"
+                    },
+                    "response": {
+                        "$ref": "CreativeGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of creative groups, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/creativeGroups",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.creativeGroups.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserIds": {
+                            "description": "Select only creative groups that belong to these advertisers.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "groupNumber": {
+                            "description": "Select only creative groups that belong to this subgroup.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "2",
+                            "minimum": "1",
+                            "type": "integer"
+                        },
+                        "ids": {
+                            "description": "Select only creative groups with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for creative groups by name or ID. Wildcards (*) are allowed. For example, \"creativegroup*2015\" will return creative groups with names like \"creativegroup June 2015\", \"creativegroup April 2015\", or simply \"creativegroup 2015\". Most of the searches also add wild-cards implicitly at the start and the end of the search string. For example, a search string of \"creativegroup\" will match creative groups with the name \"my creativegroup\", \"creativegroup 2015\", or simply \"creativegroup\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeGroups",
+                    "response": {
+                        "$ref": "CreativeGroupsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing creative group. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/creativeGroups",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.creativeGroups.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "CreativeGroup ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeGroups",
+                    "request": {
+                        "$ref": "CreativeGroup"
+                    },
+                    "response": {
+                        "$ref": "CreativeGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing creative group.",
+                    "flatPath": "userprofiles/{profileId}/creativeGroups",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.creativeGroups.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creativeGroups",
+                    "request": {
+                        "$ref": "CreativeGroup"
+                    },
+                    "response": {
+                        "$ref": "CreativeGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "creatives": {
+            "methods": {
+                "get": {
+                    "description": "Gets one creative by ID.",
+                    "flatPath": "userprofiles/{profileId}/creatives/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.creatives.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Creative ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creatives/{id}",
+                    "response": {
+                        "$ref": "Creative"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new creative.",
+                    "flatPath": "userprofiles/{profileId}/creatives",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.creatives.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creatives",
+                    "request": {
+                        "$ref": "Creative"
+                    },
+                    "response": {
+                        "$ref": "Creative"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of creatives, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/creatives",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.creatives.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "active": {
+                            "description": "Select only active creatives. Leave blank to select active and inactive creatives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "advertiserId": {
+                            "description": "Select only creatives with this advertiser ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "archived": {
+                            "description": "Select only archived creatives. Leave blank to select archived and unarchived creatives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "campaignId": {
+                            "description": "Select only creatives with this campaign ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "companionCreativeIds": {
+                            "description": "Select only in-stream video creatives with these companion IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "creativeFieldIds": {
+                            "description": "Select only creatives with these creative field IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only creatives with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "renderingIds": {
+                            "description": "Select only creatives with these rendering IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"creative*2015\" will return objects with names like \"creative June 2015\", \"creative April 2015\", or simply \"creative 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"creative\" will match objects with name \"my creative\", \"creative 2015\", or simply \"creative\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sizeIds": {
+                            "description": "Select only creatives with these size IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "studioCreativeId": {
+                            "description": "Select only creatives corresponding to this Studio creative ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "types": {
+                            "description": "Select only creatives with these creative types.",
+                            "enum": [
+                                "IMAGE",
+                                "DISPLAY_REDIRECT",
+                                "CUSTOM_DISPLAY",
+                                "INTERNAL_REDIRECT",
+                                "CUSTOM_DISPLAY_INTERSTITIAL",
+                                "INTERSTITIAL_INTERNAL_REDIRECT",
+                                "TRACKING_TEXT",
+                                "RICH_MEDIA_DISPLAY_BANNER",
+                                "RICH_MEDIA_INPAGE_FLOATING",
+                                "RICH_MEDIA_IM_EXPAND",
+                                "RICH_MEDIA_DISPLAY_EXPANDING",
+                                "RICH_MEDIA_DISPLAY_INTERSTITIAL",
+                                "RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL",
+                                "RICH_MEDIA_MOBILE_IN_APP",
+                                "FLASH_INPAGE",
+                                "INSTREAM_VIDEO",
+                                "VPAID_LINEAR_VIDEO",
+                                "VPAID_NON_LINEAR_VIDEO",
+                                "INSTREAM_VIDEO_REDIRECT",
+                                "RICH_MEDIA_PEEL_DOWN",
+                                "HTML5_BANNER",
+                                "DISPLAY",
+                                "DISPLAY_IMAGE_GALLERY",
+                                "BRAND_SAFE_DEFAULT_INSTREAM_VIDEO",
+                                "INSTREAM_AUDIO"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creatives",
+                    "response": {
+                        "$ref": "CreativesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing creative. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/creatives",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.creatives.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Creative ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creatives",
+                    "request": {
+                        "$ref": "Creative"
+                    },
+                    "response": {
+                        "$ref": "Creative"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing creative.",
+                    "flatPath": "userprofiles/{profileId}/creatives",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.creatives.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/creatives",
+                    "request": {
+                        "$ref": "Creative"
+                    },
+                    "response": {
+                        "$ref": "Creative"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "customEvents": {
+            "methods": {
+                "batchinsert": {
+                    "description": "Inserts custom events.",
+                    "flatPath": "userprofiles/{profileId}/customEvents/batchinsert",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.customEvents.batchinsert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/customEvents/batchinsert",
+                    "request": {
+                        "$ref": "CustomEventsBatchInsertRequest"
+                    },
+                    "response": {
+                        "$ref": "CustomEventsBatchInsertResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ddmconversions"
+                    ]
+                }
+            }
+        },
+        "dimensionValues": {
+            "methods": {
+                "query": {
+                    "description": "Retrieves list of report dimension values for a list of filters.",
+                    "flatPath": "userprofiles/{profileId}/dimensionvalues/query",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.dimensionValues.query",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "maxResults": {
+                            "default": "100",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "100",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The value of the nextToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "The Campaign Manager 360 user profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/dimensionvalues/query",
+                    "request": {
+                        "$ref": "DimensionValueRequest"
+                    },
+                    "response": {
+                        "$ref": "DimensionValueList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfareporting"
+                    ]
+                }
+            }
+        },
+        "directorySites": {
+            "methods": {
+                "get": {
+                    "description": "Gets one directory site by ID.",
+                    "flatPath": "userprofiles/{profileId}/directorySites/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.directorySites.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Directory site ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/directorySites/{id}",
+                    "response": {
+                        "$ref": "DirectorySite"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new directory site.",
+                    "flatPath": "userprofiles/{profileId}/directorySites",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.directorySites.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/directorySites",
+                    "request": {
+                        "$ref": "DirectorySite"
+                    },
+                    "response": {
+                        "$ref": "DirectorySite"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of directory sites, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/directorySites",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.directorySites.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "acceptsInStreamVideoPlacements": {
+                            "description": "This search filter is no longer supported and will have no effect on the results returned.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "acceptsInterstitialPlacements": {
+                            "description": "This search filter is no longer supported and will have no effect on the results returned.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "acceptsPublisherPaidPlacements": {
+                            "description": "Select only directory sites that accept publisher paid placements. This field can be left blank.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "active": {
+                            "description": "Select only active directory sites. Leave blank to retrieve both active and inactive directory sites.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "dfpNetworkCode": {
+                            "description": "Select only directory sites with this Ad Manager network code.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only directory sites with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name, ID or URL. Wildcards (*) are allowed. For example, \"directory site*2015\" will return objects with names like \"directory site June 2015\", \"directory site April 2015\", or simply \"directory site 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"directory site\" will match objects with name \"my directory site\", \"directory site 2015\" or simply, \"directory site\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/directorySites",
+                    "response": {
+                        "$ref": "DirectorySitesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "dynamicTargetingKeys": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes an existing dynamic targeting key.",
+                    "flatPath": "userprofiles/{profileId}/dynamicTargetingKeys/{objectId}",
+                    "httpMethod": "DELETE",
+                    "id": "dfareporting.dynamicTargetingKeys.delete",
+                    "parameterOrder": [
+                        "profileId",
+                        "objectId",
+                        "name",
+                        "objectType"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "Name of this dynamic targeting key. This is a required field. Must be less than 256 characters long and cannot contain commas. All characters are converted to lowercase.",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "objectId": {
+                            "description": "ID of the object of this dynamic targeting key. This is a required field.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "objectType": {
+                            "description": "Type of the object of this dynamic targeting key. This is a required field.",
+                            "enum": [
+                                "OBJECT_ADVERTISER",
+                                "OBJECT_AD",
+                                "OBJECT_CREATIVE",
+                                "OBJECT_PLACEMENT"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/dynamicTargetingKeys/{objectId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new dynamic targeting key. Keys must be created at the advertiser level before being assigned to the advertiser's ads, creatives, or placements. There is a maximum of 1000 keys per advertiser, out of which a maximum of 20 keys can be assigned per ad, creative, or placement.",
+                    "flatPath": "userprofiles/{profileId}/dynamicTargetingKeys",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.dynamicTargetingKeys.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/dynamicTargetingKeys",
+                    "request": {
+                        "$ref": "DynamicTargetingKey"
+                    },
+                    "response": {
+                        "$ref": "DynamicTargetingKey"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of dynamic targeting keys.",
+                    "flatPath": "userprofiles/{profileId}/dynamicTargetingKeys",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.dynamicTargetingKeys.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserId": {
+                            "description": "Select only dynamic targeting keys whose object has this advertiser ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "names": {
+                            "description": "Select only dynamic targeting keys exactly matching these names.",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "objectId": {
+                            "description": "Select only dynamic targeting keys with this object ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "objectType": {
+                            "description": "Select only dynamic targeting keys with this object type.",
+                            "enum": [
+                                "OBJECT_ADVERTISER",
+                                "OBJECT_AD",
+                                "OBJECT_CREATIVE",
+                                "OBJECT_PLACEMENT"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/dynamicTargetingKeys",
+                    "response": {
+                        "$ref": "DynamicTargetingKeysListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "eventTags": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes an existing event tag.",
+                    "flatPath": "userprofiles/{profileId}/eventTags/{id}",
+                    "httpMethod": "DELETE",
+                    "id": "dfareporting.eventTags.delete",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Event tag ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/eventTags/{id}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "get": {
+                    "description": "Gets one event tag by ID.",
+                    "flatPath": "userprofiles/{profileId}/eventTags/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.eventTags.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Event tag ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/eventTags/{id}",
+                    "response": {
+                        "$ref": "EventTag"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new event tag.",
+                    "flatPath": "userprofiles/{profileId}/eventTags",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.eventTags.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/eventTags",
+                    "request": {
+                        "$ref": "EventTag"
+                    },
+                    "response": {
+                        "$ref": "EventTag"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of event tags, possibly filtered.",
+                    "flatPath": "userprofiles/{profileId}/eventTags",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.eventTags.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "adId": {
+                            "description": "Select only event tags that belong to this ad.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "advertiserId": {
+                            "description": "Select only event tags that belong to this advertiser.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "campaignId": {
+                            "description": "Select only event tags that belong to this campaign.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "definitionsOnly": {
+                            "description": "Examine only the specified campaign or advertiser's event tags for matching selector criteria. When set to false, the parent advertiser and parent campaign of the specified ad or campaign is examined as well. In addition, when set to false, the status field is examined as well, along with the enabledByDefault field. This parameter can not be set to true when adId is specified as ads do not define their own even tags.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "enabled": {
+                            "description": "Select only enabled event tags. What is considered enabled or disabled depends on the definitionsOnly parameter. When definitionsOnly is set to true, only the specified advertiser or campaign's event tags' enabledByDefault field is examined. When definitionsOnly is set to false, the specified ad or specified campaign's parent advertiser's or parent campaign's event tags' enabledByDefault and status fields are examined as well.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "eventTagTypes": {
+                            "description": "Select only event tags with the specified event tag types. Event tag types can be used to specify whether to use a third-party pixel, a third-party JavaScript URL, or a third-party click-through URL for either impression or click tracking.",
+                            "enum": [
+                                "IMPRESSION_IMAGE_EVENT_TAG",
+                                "IMPRESSION_JAVASCRIPT_EVENT_TAG",
+                                "CLICK_THROUGH_EVENT_TAG"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only event tags with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"eventtag*2015\" will return objects with names like \"eventtag June 2015\", \"eventtag April 2015\", or simply \"eventtag 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"eventtag\" will match objects with name \"my eventtag\", \"eventtag 2015\", or simply \"eventtag\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/eventTags",
+                    "response": {
+                        "$ref": "EventTagsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing event tag. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/eventTags",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.eventTags.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "EventTag ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/eventTags",
+                    "request": {
+                        "$ref": "EventTag"
+                    },
+                    "response": {
+                        "$ref": "EventTag"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing event tag.",
+                    "flatPath": "userprofiles/{profileId}/eventTags",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.eventTags.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/eventTags",
+                    "request": {
+                        "$ref": "EventTag"
+                    },
+                    "response": {
+                        "$ref": "EventTag"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
         },
         "files": {
-          "methods": {
-            "list": {
-              "parameters": {
-                "pageToken": {
-                  "type": "string",
-                  "description": "The value of the nextToken from the previous result page.",
-                  "location": "query"
+            "methods": {
+                "get": {
+                    "description": "Retrieves a report file by its report ID and file ID. This method supports media download.",
+                    "flatPath": "reports/{reportId}/files/{fileId}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.files.get",
+                    "parameterOrder": [
+                        "reportId",
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the report file.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "reportId": {
+                            "description": "The ID of the report.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "reports/{reportId}/files/{fileId}",
+                    "response": {
+                        "$ref": "File"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfareporting"
+                    ],
+                    "supportsMediaDownload": true
                 },
-                "profileId": {
-                  "format": "int64",
-                  "description": "The Campaign Manager 360 user profile ID.",
-                  "location": "path",
-                  "type": "string",
-                  "required": true
+                "list": {
+                    "description": "Lists files for a user profile.",
+                    "flatPath": "userprofiles/{profileId}/files",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.files.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "maxResults": {
+                            "default": "10",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "10",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The value of the nextToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "The Campaign Manager 360 user profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "scope": {
+                            "default": "MINE",
+                            "description": "The scope that defines which results are returned.",
+                            "enum": [
+                                "ALL",
+                                "MINE",
+                                "SHARED_WITH_ME"
+                            ],
+                            "enumDescriptions": [
+                                "All files in account.",
+                                "My files.",
+                                "Files shared with me."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "LAST_MODIFIED_TIME",
+                            "description": "The field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "LAST_MODIFIED_TIME"
+                            ],
+                            "enumDescriptions": [
+                                "Sort by file ID.",
+                                "Sort by 'lastmodifiedAt' field."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "DESCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "Ascending order.",
+                                "Descending order."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/files",
+                    "response": {
+                        "$ref": "FileList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfareporting"
+                    ]
+                }
+            }
+        },
+        "floodlightActivities": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes an existing floodlight activity.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivities/{id}",
+                    "httpMethod": "DELETE",
+                    "id": "dfareporting.floodlightActivities.delete",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Floodlight activity ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivities/{id}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
                 },
-                "maxResults": {
-                  "type": "integer",
-                  "maximum": "10",
-                  "description": "Maximum number of results to return.",
-                  "minimum": "0",
-                  "default": "10",
-                  "location": "query",
-                  "format": "int32"
+                "generatetag": {
+                    "description": "Generates a tag for a floodlight activity.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivities/generatetag",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.floodlightActivities.generatetag",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "floodlightActivityId": {
+                            "description": "Floodlight activity ID for which we want to generate a tag.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivities/generatetag",
+                    "response": {
+                        "$ref": "FloodlightActivitiesGenerateTagResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "get": {
+                    "description": "Gets one floodlight activity by ID.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivities/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.floodlightActivities.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Floodlight activity ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivities/{id}",
+                    "response": {
+                        "$ref": "FloodlightActivity"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new floodlight activity.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivities",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.floodlightActivities.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivities",
+                    "request": {
+                        "$ref": "FloodlightActivity"
+                    },
+                    "response": {
+                        "$ref": "FloodlightActivity"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of floodlight activities, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivities",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.floodlightActivities.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserId": {
+                            "description": "Select only floodlight activities for the specified advertiser ID. Must specify either ids, advertiserId, or floodlightConfigurationId for a non-empty result.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "floodlightActivityGroupIds": {
+                            "description": "Select only floodlight activities with the specified floodlight activity group IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "floodlightActivityGroupName": {
+                            "description": "Select only floodlight activities with the specified floodlight activity group name.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "floodlightActivityGroupTagString": {
+                            "description": "Select only floodlight activities with the specified floodlight activity group tag string.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "floodlightActivityGroupType": {
+                            "description": "Select only floodlight activities with the specified floodlight activity group type.",
+                            "enum": [
+                                "COUNTER",
+                                "SALE"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "floodlightConfigurationId": {
+                            "description": "Select only floodlight activities for the specified floodlight configuration ID. Must specify either ids, advertiserId, or floodlightConfigurationId for a non-empty result.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only floodlight activities with the specified IDs. Must specify either ids, advertiserId, or floodlightConfigurationId for a non-empty result.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"floodlightactivity*2015\" will return objects with names like \"floodlightactivity June 2015\", \"floodlightactivity April 2015\", or simply \"floodlightactivity 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"floodlightactivity\" will match objects with name \"my floodlightactivity activity\", \"floodlightactivity 2015\", or simply \"floodlightactivity\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "tagString": {
+                            "description": "Select only floodlight activities with the specified tag string.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivities",
+                    "response": {
+                        "$ref": "FloodlightActivitiesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing floodlight activity. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivities",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.floodlightActivities.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "FloodlightActivity ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivities",
+                    "request": {
+                        "$ref": "FloodlightActivity"
+                    },
+                    "response": {
+                        "$ref": "FloodlightActivity"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing floodlight activity.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivities",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.floodlightActivities.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivities",
+                    "request": {
+                        "$ref": "FloodlightActivity"
+                    },
+                    "response": {
+                        "$ref": "FloodlightActivity"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "floodlightActivityGroups": {
+            "methods": {
+                "get": {
+                    "description": "Gets one floodlight activity group by ID.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivityGroups/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.floodlightActivityGroups.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Floodlight activity Group ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivityGroups/{id}",
+                    "response": {
+                        "$ref": "FloodlightActivityGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new floodlight activity group.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivityGroups",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.floodlightActivityGroups.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivityGroups",
+                    "request": {
+                        "$ref": "FloodlightActivityGroup"
+                    },
+                    "response": {
+                        "$ref": "FloodlightActivityGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of floodlight activity groups, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivityGroups",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.floodlightActivityGroups.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserId": {
+                            "description": "Select only floodlight activity groups with the specified advertiser ID. Must specify either advertiserId or floodlightConfigurationId for a non-empty result.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "floodlightConfigurationId": {
+                            "description": "Select only floodlight activity groups with the specified floodlight configuration ID. Must specify either advertiserId, or floodlightConfigurationId for a non-empty result.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only floodlight activity groups with the specified IDs. Must specify either advertiserId or floodlightConfigurationId for a non-empty result.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"floodlightactivitygroup*2015\" will return objects with names like \"floodlightactivitygroup June 2015\", \"floodlightactivitygroup April 2015\", or simply \"floodlightactivitygroup 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"floodlightactivitygroup\" will match objects with name \"my floodlightactivitygroup activity\", \"floodlightactivitygroup 2015\", or simply \"floodlightactivitygroup\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "type": {
+                            "description": "Select only floodlight activity groups with the specified floodlight activity group type.",
+                            "enum": [
+                                "COUNTER",
+                                "SALE"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivityGroups",
+                    "response": {
+                        "$ref": "FloodlightActivityGroupsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing floodlight activity group. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivityGroups",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.floodlightActivityGroups.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "FloodlightActivityGroup ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivityGroups",
+                    "request": {
+                        "$ref": "FloodlightActivityGroup"
+                    },
+                    "response": {
+                        "$ref": "FloodlightActivityGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing floodlight activity group.",
+                    "flatPath": "userprofiles/{profileId}/floodlightActivityGroups",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.floodlightActivityGroups.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightActivityGroups",
+                    "request": {
+                        "$ref": "FloodlightActivityGroup"
+                    },
+                    "response": {
+                        "$ref": "FloodlightActivityGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "floodlightConfigurations": {
+            "methods": {
+                "get": {
+                    "description": "Gets one floodlight configuration by ID.",
+                    "flatPath": "userprofiles/{profileId}/floodlightConfigurations/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.floodlightConfigurations.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Floodlight configuration ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightConfigurations/{id}",
+                    "response": {
+                        "$ref": "FloodlightConfiguration"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of floodlight configurations, possibly filtered.",
+                    "flatPath": "userprofiles/{profileId}/floodlightConfigurations",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.floodlightConfigurations.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "ids": {
+                            "description": "Set of IDs of floodlight configurations to retrieve. Required field; otherwise an empty list will be returned.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightConfigurations",
+                    "response": {
+                        "$ref": "FloodlightConfigurationsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing floodlight configuration. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/floodlightConfigurations",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.floodlightConfigurations.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "FloodlightConfiguration ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightConfigurations",
+                    "request": {
+                        "$ref": "FloodlightConfiguration"
+                    },
+                    "response": {
+                        "$ref": "FloodlightConfiguration"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing floodlight configuration.",
+                    "flatPath": "userprofiles/{profileId}/floodlightConfigurations",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.floodlightConfigurations.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/floodlightConfigurations",
+                    "request": {
+                        "$ref": "FloodlightConfiguration"
+                    },
+                    "response": {
+                        "$ref": "FloodlightConfiguration"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "inventoryItems": {
+            "methods": {
+                "get": {
+                    "description": "Gets one inventory item by ID.",
+                    "flatPath": "userprofiles/{profileId}/projects/{projectId}/inventoryItems/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.inventoryItems.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "projectId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Inventory item ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "projectId": {
+                            "description": "Project ID for order documents.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/projects/{projectId}/inventoryItems/{id}",
+                    "response": {
+                        "$ref": "InventoryItem"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of inventory items, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/projects/{projectId}/inventoryItems",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.inventoryItems.list",
+                    "parameterOrder": [
+                        "profileId",
+                        "projectId"
+                    ],
+                    "parameters": {
+                        "ids": {
+                            "description": "Select only inventory items with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "inPlan": {
+                            "description": "Select only inventory items that are in plan.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "orderId": {
+                            "description": "Select only inventory items that belong to specified orders.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "projectId": {
+                            "description": "Project ID for order documents.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "siteId": {
+                            "description": "Select only inventory items that are associated with these sites.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "type": {
+                            "description": "Select only inventory items with this type.",
+                            "enum": [
+                                "PLANNING_PLACEMENT_TYPE_REGULAR",
+                                "PLANNING_PLACEMENT_TYPE_CREDIT"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/projects/{projectId}/inventoryItems",
+                    "response": {
+                        "$ref": "InventoryItemsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "languages": {
+            "methods": {
+                "list": {
+                    "description": "Retrieves a list of languages.",
+                    "flatPath": "userprofiles/{profileId}/languages",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.languages.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/languages",
+                    "response": {
+                        "$ref": "LanguagesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "metros": {
+            "methods": {
+                "list": {
+                    "description": "Retrieves a list of metros.",
+                    "flatPath": "userprofiles/{profileId}/metros",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.metros.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/metros",
+                    "response": {
+                        "$ref": "MetrosListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "mobileApps": {
+            "methods": {
+                "get": {
+                    "description": "Gets one mobile app by ID.",
+                    "flatPath": "userprofiles/{profileId}/mobileApps/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.mobileApps.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Mobile app ID.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/mobileApps/{id}",
+                    "response": {
+                        "$ref": "MobileApp"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves list of available mobile apps.",
+                    "flatPath": "userprofiles/{profileId}/mobileApps",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.mobileApps.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "directories": {
+                            "description": "Select only apps from these directories.",
+                            "enum": [
+                                "UNKNOWN",
+                                "APPLE_APP_STORE",
+                                "GOOGLE_PLAY_STORE"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only apps with these IDs.",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"app*2015\" will return objects with names like \"app Jan 2018\", \"app Jan 2018\", or simply \"app 2018\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"app\" will match objects with name \"my app\", \"app 2018\", or simply \"app\".",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/mobileApps",
+                    "response": {
+                        "$ref": "MobileAppsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "mobileCarriers": {
+            "methods": {
+                "get": {
+                    "description": "Gets one mobile carrier by ID.",
+                    "flatPath": "userprofiles/{profileId}/mobileCarriers/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.mobileCarriers.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Mobile carrier ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/mobileCarriers/{id}",
+                    "response": {
+                        "$ref": "MobileCarrier"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of mobile carriers.",
+                    "flatPath": "userprofiles/{profileId}/mobileCarriers",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.mobileCarriers.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/mobileCarriers",
+                    "response": {
+                        "$ref": "MobileCarriersListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "operatingSystemVersions": {
+            "methods": {
+                "get": {
+                    "description": "Gets one operating system version by ID.",
+                    "flatPath": "userprofiles/{profileId}/operatingSystemVersions/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.operatingSystemVersions.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Operating system version ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/operatingSystemVersions/{id}",
+                    "response": {
+                        "$ref": "OperatingSystemVersion"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of operating system versions.",
+                    "flatPath": "userprofiles/{profileId}/operatingSystemVersions",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.operatingSystemVersions.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/operatingSystemVersions",
+                    "response": {
+                        "$ref": "OperatingSystemVersionsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "operatingSystems": {
+            "methods": {
+                "get": {
+                    "description": "Gets one operating system by DART ID.",
+                    "flatPath": "userprofiles/{profileId}/operatingSystems/{dartId}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.operatingSystems.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "dartId"
+                    ],
+                    "parameters": {
+                        "dartId": {
+                            "description": "Operating system DART ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/operatingSystems/{dartId}",
+                    "response": {
+                        "$ref": "OperatingSystem"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of operating systems.",
+                    "flatPath": "userprofiles/{profileId}/operatingSystems",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.operatingSystems.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/operatingSystems",
+                    "response": {
+                        "$ref": "OperatingSystemsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "orderDocuments": {
+            "methods": {
+                "get": {
+                    "description": "Gets one order document by ID.",
+                    "flatPath": "userprofiles/{profileId}/projects/{projectId}/orderDocuments/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.orderDocuments.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "projectId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Order document ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "projectId": {
+                            "description": "Project ID for order documents.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/projects/{projectId}/orderDocuments/{id}",
+                    "response": {
+                        "$ref": "OrderDocument"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of order documents, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/projects/{projectId}/orderDocuments",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.orderDocuments.list",
+                    "parameterOrder": [
+                        "profileId",
+                        "projectId"
+                    ],
+                    "parameters": {
+                        "approved": {
+                            "description": "Select only order documents that have been approved by at least one user.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ids": {
+                            "description": "Select only order documents with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "orderId": {
+                            "description": "Select only order documents for specified orders.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "projectId": {
+                            "description": "Project ID for order documents.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for order documents by name or ID. Wildcards (*) are allowed. For example, \"orderdocument*2015\" will return order documents with names like \"orderdocument June 2015\", \"orderdocument April 2015\", or simply \"orderdocument 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"orderdocument\" will match order documents with name \"my orderdocument\", \"orderdocument 2015\", or simply \"orderdocument\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "siteId": {
+                            "description": "Select only order documents that are associated with these sites.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/projects/{projectId}/orderDocuments",
+                    "response": {
+                        "$ref": "OrderDocumentsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "orders": {
+            "methods": {
+                "get": {
+                    "description": "Gets one order by ID.",
+                    "flatPath": "userprofiles/{profileId}/projects/{projectId}/orders/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.orders.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "projectId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Order ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "projectId": {
+                            "description": "Project ID for orders.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/projects/{projectId}/orders/{id}",
+                    "response": {
+                        "$ref": "Order"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of orders, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/projects/{projectId}/orders",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.orders.list",
+                    "parameterOrder": [
+                        "profileId",
+                        "projectId"
+                    ],
+                    "parameters": {
+                        "ids": {
+                            "description": "Select only orders with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "projectId": {
+                            "description": "Project ID for orders.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for orders by name or ID. Wildcards (*) are allowed. For example, \"order*2015\" will return orders with names like \"order June 2015\", \"order April 2015\", or simply \"order 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"order\" will match orders with name \"my order\", \"order 2015\", or simply \"order\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "siteId": {
+                            "description": "Select only orders that are associated with these site IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/projects/{projectId}/orders",
+                    "response": {
+                        "$ref": "OrdersListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "placementGroups": {
+            "methods": {
+                "get": {
+                    "description": "Gets one placement group by ID.",
+                    "flatPath": "userprofiles/{profileId}/placementGroups/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.placementGroups.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Placement group ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementGroups/{id}",
+                    "response": {
+                        "$ref": "PlacementGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new placement group.",
+                    "flatPath": "userprofiles/{profileId}/placementGroups",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.placementGroups.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementGroups",
+                    "request": {
+                        "$ref": "PlacementGroup"
+                    },
+                    "response": {
+                        "$ref": "PlacementGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of placement groups, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/placementGroups",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.placementGroups.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserIds": {
+                            "description": "Select only placement groups that belong to these advertisers.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "archived": {
+                            "description": "Select only archived placements. Don't set this field to select both archived and non-archived placements.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "campaignIds": {
+                            "description": "Select only placement groups that belong to these campaigns.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "contentCategoryIds": {
+                            "description": "Select only placement groups that are associated with these content categories.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "directorySiteIds": {
+                            "description": "Select only placement groups that are associated with these directory sites.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only placement groups with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxEndDate": {
+                            "description": "Select only placements or placement groups whose end date is on or before the specified maxEndDate. The date should be formatted as \"yyyy-MM-dd\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "800",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "800",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "maxStartDate": {
+                            "description": "Select only placements or placement groups whose start date is on or before the specified maxStartDate. The date should be formatted as \"yyyy-MM-dd\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "minEndDate": {
+                            "description": "Select only placements or placement groups whose end date is on or after the specified minEndDate. The date should be formatted as \"yyyy-MM-dd\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "minStartDate": {
+                            "description": "Select only placements or placement groups whose start date is on or after the specified minStartDate. The date should be formatted as \"yyyy-MM-dd\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "placementGroupType": {
+                            "description": "Select only placement groups belonging with this group type. A package is a simple group of placements that acts as a single pricing point for a group of tags. A roadblock is a group of placements that not only acts as a single pricing point but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned placements to be marked as primary for reporting.",
+                            "enum": [
+                                "PLACEMENT_PACKAGE",
+                                "PLACEMENT_ROADBLOCK"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "placementStrategyIds": {
+                            "description": "Select only placement groups that are associated with these placement strategies.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "pricingTypes": {
+                            "description": "Select only placement groups with these pricing types.",
+                            "enum": [
+                                "PRICING_TYPE_CPM",
+                                "PRICING_TYPE_CPC",
+                                "PRICING_TYPE_CPA",
+                                "PRICING_TYPE_FLAT_RATE_IMPRESSIONS",
+                                "PRICING_TYPE_FLAT_RATE_CLICKS",
+                                "PRICING_TYPE_CPM_ACTIVEVIEW"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for placement groups by name or ID. Wildcards (*) are allowed. For example, \"placement*2015\" will return placement groups with names like \"placement group June 2015\", \"placement group May 2015\", or simply \"placements 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"placementgroup\" will match placement groups with name \"my placementgroup\", \"placementgroup 2015\", or simply \"placementgroup\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "siteIds": {
+                            "description": "Select only placement groups that are associated with these sites.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementGroups",
+                    "response": {
+                        "$ref": "PlacementGroupsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing placement group. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/placementGroups",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.placementGroups.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "PlacementGroup ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementGroups",
+                    "request": {
+                        "$ref": "PlacementGroup"
+                    },
+                    "response": {
+                        "$ref": "PlacementGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing placement group.",
+                    "flatPath": "userprofiles/{profileId}/placementGroups",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.placementGroups.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementGroups",
+                    "request": {
+                        "$ref": "PlacementGroup"
+                    },
+                    "response": {
+                        "$ref": "PlacementGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "placementStrategies": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes an existing placement strategy.",
+                    "flatPath": "userprofiles/{profileId}/placementStrategies/{id}",
+                    "httpMethod": "DELETE",
+                    "id": "dfareporting.placementStrategies.delete",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Placement strategy ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementStrategies/{id}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "get": {
+                    "description": "Gets one placement strategy by ID.",
+                    "flatPath": "userprofiles/{profileId}/placementStrategies/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.placementStrategies.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Placement strategy ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementStrategies/{id}",
+                    "response": {
+                        "$ref": "PlacementStrategy"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new placement strategy.",
+                    "flatPath": "userprofiles/{profileId}/placementStrategies",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.placementStrategies.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementStrategies",
+                    "request": {
+                        "$ref": "PlacementStrategy"
+                    },
+                    "response": {
+                        "$ref": "PlacementStrategy"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of placement strategies, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/placementStrategies",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.placementStrategies.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "ids": {
+                            "description": "Select only placement strategies with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"placementstrategy*2015\" will return objects with names like \"placementstrategy June 2015\", \"placementstrategy April 2015\", or simply \"placementstrategy 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"placementstrategy\" will match objects with name \"my placementstrategy\", \"placementstrategy 2015\", or simply \"placementstrategy\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementStrategies",
+                    "response": {
+                        "$ref": "PlacementStrategiesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing placement strategy. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/placementStrategies",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.placementStrategies.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "PlacementStrategy ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementStrategies",
+                    "request": {
+                        "$ref": "PlacementStrategy"
+                    },
+                    "response": {
+                        "$ref": "PlacementStrategy"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing placement strategy.",
+                    "flatPath": "userprofiles/{profileId}/placementStrategies",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.placementStrategies.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placementStrategies",
+                    "request": {
+                        "$ref": "PlacementStrategy"
+                    },
+                    "response": {
+                        "$ref": "PlacementStrategy"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "placements": {
+            "methods": {
+                "generatetags": {
+                    "description": "Generates tags for a placement.",
+                    "flatPath": "userprofiles/{profileId}/placements/generatetags",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.placements.generatetags",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "campaignId": {
+                            "description": "Generate placements belonging to this campaign. This is a required field.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "placementIds": {
+                            "description": "Generate tags for these placements.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "tagFormats": {
+                            "description": "Tag formats to generate for these placements. *Note:* PLACEMENT_TAG_STANDARD can only be generated for 1x1 placements.",
+                            "enum": [
+                                "PLACEMENT_TAG_STANDARD",
+                                "PLACEMENT_TAG_IFRAME_JAVASCRIPT",
+                                "PLACEMENT_TAG_IFRAME_ILAYER",
+                                "PLACEMENT_TAG_INTERNAL_REDIRECT",
+                                "PLACEMENT_TAG_JAVASCRIPT",
+                                "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT",
+                                "PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT",
+                                "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT",
+                                "PLACEMENT_TAG_CLICK_COMMANDS",
+                                "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH",
+                                "PLACEMENT_TAG_TRACKING",
+                                "PLACEMENT_TAG_TRACKING_IFRAME",
+                                "PLACEMENT_TAG_TRACKING_JAVASCRIPT",
+                                "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_3",
+                                "PLACEMENT_TAG_IFRAME_JAVASCRIPT_LEGACY",
+                                "PLACEMENT_TAG_JAVASCRIPT_LEGACY",
+                                "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT_LEGACY",
+                                "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT_LEGACY",
+                                "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_4"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placements/generatetags",
+                    "response": {
+                        "$ref": "PlacementsGenerateTagsResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "get": {
+                    "description": "Gets one placement by ID.",
+                    "flatPath": "userprofiles/{profileId}/placements/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.placements.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Placement ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placements/{id}",
+                    "response": {
+                        "$ref": "Placement"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new placement.",
+                    "flatPath": "userprofiles/{profileId}/placements",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.placements.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placements",
+                    "request": {
+                        "$ref": "Placement"
+                    },
+                    "response": {
+                        "$ref": "Placement"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of placements, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/placements",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.placements.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserIds": {
+                            "description": "Select only placements that belong to these advertisers.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "archived": {
+                            "description": "Select only archived placements. Don't set this field to select both archived and non-archived placements.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "campaignIds": {
+                            "description": "Select only placements that belong to these campaigns.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "compatibilities": {
+                            "description": "Select only placements that are associated with these compatibilities. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are for rendering in mobile apps. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard.",
+                            "enum": [
+                                "DISPLAY",
+                                "DISPLAY_INTERSTITIAL",
+                                "APP",
+                                "APP_INTERSTITIAL",
+                                "IN_STREAM_VIDEO",
+                                "IN_STREAM_AUDIO"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "contentCategoryIds": {
+                            "description": "Select only placements that are associated with these content categories.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "directorySiteIds": {
+                            "description": "Select only placements that are associated with these directory sites.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "groupIds": {
+                            "description": "Select only placements that belong to these placement groups.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only placements with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxEndDate": {
+                            "description": "Select only placements or placement groups whose end date is on or before the specified maxEndDate. The date should be formatted as \"yyyy-MM-dd\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "maxStartDate": {
+                            "description": "Select only placements or placement groups whose start date is on or before the specified maxStartDate. The date should be formatted as \"yyyy-MM-dd\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "minEndDate": {
+                            "description": "Select only placements or placement groups whose end date is on or after the specified minEndDate. The date should be formatted as \"yyyy-MM-dd\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "minStartDate": {
+                            "description": "Select only placements or placement groups whose start date is on or after the specified minStartDate. The date should be formatted as \"yyyy-MM-dd\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "paymentSource": {
+                            "description": "Select only placements with this payment source.",
+                            "enum": [
+                                "PLACEMENT_AGENCY_PAID",
+                                "PLACEMENT_PUBLISHER_PAID"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "placementStrategyIds": {
+                            "description": "Select only placements that are associated with these placement strategies.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "pricingTypes": {
+                            "description": "Select only placements with these pricing types.",
+                            "enum": [
+                                "PRICING_TYPE_CPM",
+                                "PRICING_TYPE_CPC",
+                                "PRICING_TYPE_CPA",
+                                "PRICING_TYPE_FLAT_RATE_IMPRESSIONS",
+                                "PRICING_TYPE_FLAT_RATE_CLICKS",
+                                "PRICING_TYPE_CPM_ACTIVEVIEW"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for placements by name or ID. Wildcards (*) are allowed. For example, \"placement*2015\" will return placements with names like \"placement June 2015\", \"placement May 2015\", or simply \"placements 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"placement\" will match placements with name \"my placement\", \"placement 2015\", or simply \"placement\" .",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "siteIds": {
+                            "description": "Select only placements that are associated with these sites.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "sizeIds": {
+                            "description": "Select only placements that are associated with these sizes.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placements",
+                    "response": {
+                        "$ref": "PlacementsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing placement. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/placements",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.placements.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Placement ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placements",
+                    "request": {
+                        "$ref": "Placement"
+                    },
+                    "response": {
+                        "$ref": "Placement"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing placement.",
+                    "flatPath": "userprofiles/{profileId}/placements",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.placements.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/placements",
+                    "request": {
+                        "$ref": "Placement"
+                    },
+                    "response": {
+                        "$ref": "Placement"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "platformTypes": {
+            "methods": {
+                "get": {
+                    "description": "Gets one platform type by ID.",
+                    "flatPath": "userprofiles/{profileId}/platformTypes/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.platformTypes.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Platform type ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/platformTypes/{id}",
+                    "response": {
+                        "$ref": "PlatformType"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of platform types.",
+                    "flatPath": "userprofiles/{profileId}/platformTypes",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.platformTypes.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/platformTypes",
+                    "response": {
+                        "$ref": "PlatformTypesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "postalCodes": {
+            "methods": {
+                "get": {
+                    "description": "Gets one postal code by ID.",
+                    "flatPath": "userprofiles/{profileId}/postalCodes/{code}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.postalCodes.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "code"
+                    ],
+                    "parameters": {
+                        "code": {
+                            "description": "Postal code ID.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/postalCodes/{code}",
+                    "response": {
+                        "$ref": "PostalCode"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of postal codes.",
+                    "flatPath": "userprofiles/{profileId}/postalCodes",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.postalCodes.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/postalCodes",
+                    "response": {
+                        "$ref": "PostalCodesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "projects": {
+            "methods": {
+                "get": {
+                    "description": "Gets one project by ID.",
+                    "flatPath": "userprofiles/{profileId}/projects/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.projects.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Project ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/projects/{id}",
+                    "response": {
+                        "$ref": "Project"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of projects, possibly filtered. This method supports paging .",
+                    "flatPath": "userprofiles/{profileId}/projects",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.projects.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserIds": {
+                            "description": "Select only projects with these advertiser IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only projects with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for projects by name or ID. Wildcards (*) are allowed. For example, \"project*2015\" will return projects with names like \"project June 2015\", \"project April 2015\", or simply \"project 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"project\" will match projects with name \"my project\", \"project 2015\", or simply \"project\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/projects",
+                    "response": {
+                        "$ref": "ProjectsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "regions": {
+            "methods": {
+                "list": {
+                    "description": "Retrieves a list of regions.",
+                    "flatPath": "userprofiles/{profileId}/regions",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.regions.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/regions",
+                    "response": {
+                        "$ref": "RegionsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "remarketingListShares": {
+            "methods": {
+                "get": {
+                    "description": "Gets one remarketing list share by remarketing list ID.",
+                    "flatPath": "userprofiles/{profileId}/remarketingListShares/{remarketingListId}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.remarketingListShares.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "remarketingListId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "remarketingListId": {
+                            "description": "Remarketing list ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/remarketingListShares/{remarketingListId}",
+                    "response": {
+                        "$ref": "RemarketingListShare"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing remarketing list share. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/remarketingListShares",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.remarketingListShares.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "RemarketingList ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/remarketingListShares",
+                    "request": {
+                        "$ref": "RemarketingListShare"
+                    },
+                    "response": {
+                        "$ref": "RemarketingListShare"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing remarketing list share.",
+                    "flatPath": "userprofiles/{profileId}/remarketingListShares",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.remarketingListShares.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/remarketingListShares",
+                    "request": {
+                        "$ref": "RemarketingListShare"
+                    },
+                    "response": {
+                        "$ref": "RemarketingListShare"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "remarketingLists": {
+            "methods": {
+                "get": {
+                    "description": "Gets one remarketing list by ID.",
+                    "flatPath": "userprofiles/{profileId}/remarketingLists/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.remarketingLists.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Remarketing list ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/remarketingLists/{id}",
+                    "response": {
+                        "$ref": "RemarketingList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new remarketing list.",
+                    "flatPath": "userprofiles/{profileId}/remarketingLists",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.remarketingLists.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/remarketingLists",
+                    "request": {
+                        "$ref": "RemarketingList"
+                    },
+                    "response": {
+                        "$ref": "RemarketingList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of remarketing lists, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/remarketingLists",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.remarketingLists.list",
+                    "parameterOrder": [
+                        "profileId",
+                        "advertiserId"
+                    ],
+                    "parameters": {
+                        "active": {
+                            "description": "Select only active or only inactive remarketing lists.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "advertiserId": {
+                            "description": "Select only remarketing lists owned by this advertiser.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "floodlightActivityId": {
+                            "description": "Select only remarketing lists that have this floodlight activity ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "name": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"remarketing list*2015\" will return objects with names like \"remarketing list June 2015\", \"remarketing list April 2015\", or simply \"remarketing list 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"remarketing list\" will match objects with name \"my remarketing list\", \"remarketing list 2015\", or simply \"remarketing list\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/remarketingLists",
+                    "response": {
+                        "$ref": "RemarketingListsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing remarketing list. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/remarketingLists",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.remarketingLists.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "RemarketingList ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/remarketingLists",
+                    "request": {
+                        "$ref": "RemarketingList"
+                    },
+                    "response": {
+                        "$ref": "RemarketingList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing remarketing list.",
+                    "flatPath": "userprofiles/{profileId}/remarketingLists",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.remarketingLists.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/remarketingLists",
+                    "request": {
+                        "$ref": "RemarketingList"
+                    },
+                    "response": {
+                        "$ref": "RemarketingList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "reports": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes a report by its ID.",
+                    "flatPath": "userprofiles/{profileId}/reports/{reportId}",
+                    "httpMethod": "DELETE",
+                    "id": "dfareporting.reports.delete",
+                    "parameterOrder": [
+                        "profileId",
+                        "reportId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "The Campaign Manager 360 user profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "reportId": {
+                            "description": "The ID of the report.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/reports/{reportId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfareporting"
+                    ]
+                },
+                "get": {
+                    "description": "Retrieves a report by its ID.",
+                    "flatPath": "userprofiles/{profileId}/reports/{reportId}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.reports.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "reportId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "The Campaign Manager 360 user profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "reportId": {
+                            "description": "The ID of the report.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/reports/{reportId}",
+                    "response": {
+                        "$ref": "Report"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfareporting"
+                    ]
+                },
+                "insert": {
+                    "description": "Creates a report.",
+                    "flatPath": "userprofiles/{profileId}/reports",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.reports.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "The Campaign Manager 360 user profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/reports",
+                    "request": {
+                        "$ref": "Report"
+                    },
+                    "response": {
+                        "$ref": "Report"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfareporting"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves list of reports.",
+                    "flatPath": "userprofiles/{profileId}/reports",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.reports.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "maxResults": {
+                            "default": "10",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "10",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The value of the nextToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "The Campaign Manager 360 user profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "scope": {
+                            "default": "MINE",
+                            "description": "The scope that defines which results are returned.",
+                            "enum": [
+                                "ALL",
+                                "MINE"
+                            ],
+                            "enumDescriptions": [
+                                "All reports in account.",
+                                "My reports."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "LAST_MODIFIED_TIME",
+                            "description": "The field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "LAST_MODIFIED_TIME",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "Sort by report ID.",
+                                "Sort by 'lastModifiedTime' field.",
+                                "Sort by name of reports."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "DESCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "Ascending order.",
+                                "Descending order."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/reports",
+                    "response": {
+                        "$ref": "ReportList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfareporting"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing report. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/reports/{reportId}",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.reports.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "reportId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "The DFA user profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "reportId": {
+                            "description": "The ID of the report.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/reports/{reportId}",
+                    "request": {
+                        "$ref": "Report"
+                    },
+                    "response": {
+                        "$ref": "Report"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfareporting"
+                    ]
+                },
+                "run": {
+                    "description": "Runs a report.",
+                    "flatPath": "userprofiles/{profileId}/reports/{reportId}/run",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.reports.run",
+                    "parameterOrder": [
+                        "profileId",
+                        "reportId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "The Campaign Manager 360 user profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "reportId": {
+                            "description": "The ID of the report.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "synchronous": {
+                            "default": "false",
+                            "description": "If set and true, tries to run the report synchronously.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/reports/{reportId}/run",
+                    "response": {
+                        "$ref": "File"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfareporting"
+                    ]
+                },
+                "update": {
+                    "description": "Updates a report.",
+                    "flatPath": "userprofiles/{profileId}/reports/{reportId}",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.reports.update",
+                    "parameterOrder": [
+                        "profileId",
+                        "reportId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "The Campaign Manager 360 user profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "reportId": {
+                            "description": "The ID of the report.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/reports/{reportId}",
+                    "request": {
+                        "$ref": "Report"
+                    },
+                    "response": {
+                        "$ref": "Report"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfareporting"
+                    ]
+                }
+            },
+            "resources": {
+                "compatibleFields": {
+                    "methods": {
+                        "query": {
+                            "description": "Returns the fields that are compatible to be selected in the respective sections of a report criteria, given the fields already selected in the input report and user permissions.",
+                            "flatPath": "userprofiles/{profileId}/reports/compatiblefields/query",
+                            "httpMethod": "POST",
+                            "id": "dfareporting.reports.compatibleFields.query",
+                            "parameterOrder": [
+                                "profileId"
+                            ],
+                            "parameters": {
+                                "profileId": {
+                                    "description": "The Campaign Manager 360 user profile ID.",
+                                    "format": "int64",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "userprofiles/{profileId}/reports/compatiblefields/query",
+                            "request": {
+                                "$ref": "Report"
+                            },
+                            "response": {
+                                "$ref": "CompatibleFields"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/dfareporting"
+                            ]
+                        }
+                    }
+                },
+                "files": {
+                    "methods": {
+                        "get": {
+                            "description": "Retrieves a report file by its report ID and file ID. This method supports media download.",
+                            "flatPath": "userprofiles/{profileId}/reports/{reportId}/files/{fileId}",
+                            "httpMethod": "GET",
+                            "id": "dfareporting.reports.files.get",
+                            "parameterOrder": [
+                                "profileId",
+                                "reportId",
+                                "fileId"
+                            ],
+                            "parameters": {
+                                "fileId": {
+                                    "description": "The ID of the report file.",
+                                    "format": "int64",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "The Campaign Manager 360 user profile ID.",
+                                    "format": "int64",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "reportId": {
+                                    "description": "The ID of the report.",
+                                    "format": "int64",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "userprofiles/{profileId}/reports/{reportId}/files/{fileId}",
+                            "response": {
+                                "$ref": "File"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/dfareporting"
+                            ],
+                            "supportsMediaDownload": true
+                        },
+                        "list": {
+                            "description": "Lists files for a report.",
+                            "flatPath": "userprofiles/{profileId}/reports/{reportId}/files",
+                            "httpMethod": "GET",
+                            "id": "dfareporting.reports.files.list",
+                            "parameterOrder": [
+                                "profileId",
+                                "reportId"
+                            ],
+                            "parameters": {
+                                "maxResults": {
+                                    "default": "10",
+                                    "description": "Maximum number of results to return.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "maximum": "10",
+                                    "minimum": "0",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The value of the nextToken from the previous result page.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "profileId": {
+                                    "description": "The Campaign Manager 360 user profile ID.",
+                                    "format": "int64",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "reportId": {
+                                    "description": "The ID of the parent report.",
+                                    "format": "int64",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "sortField": {
+                                    "default": "LAST_MODIFIED_TIME",
+                                    "description": "The field by which to sort the list.",
+                                    "enum": [
+                                        "ID",
+                                        "LAST_MODIFIED_TIME"
+                                    ],
+                                    "enumDescriptions": [
+                                        "",
+                                        ""
+                                    ],
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "sortOrder": {
+                                    "default": "DESCENDING",
+                                    "description": "Order of sorted results.",
+                                    "enum": [
+                                        "ASCENDING",
+                                        "DESCENDING"
+                                    ],
+                                    "enumDescriptions": [
+                                        "",
+                                        ""
+                                    ],
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "userprofiles/{profileId}/reports/{reportId}/files",
+                            "response": {
+                                "$ref": "FileList"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/dfareporting"
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "sites": {
+            "methods": {
+                "get": {
+                    "description": "Gets one site by ID.",
+                    "flatPath": "userprofiles/{profileId}/sites/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.sites.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Site ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/sites/{id}",
+                    "response": {
+                        "$ref": "Site"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new site.",
+                    "flatPath": "userprofiles/{profileId}/sites",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.sites.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/sites",
+                    "request": {
+                        "$ref": "Site"
+                    },
+                    "response": {
+                        "$ref": "Site"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of sites, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/sites",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.sites.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "acceptsInStreamVideoPlacements": {
+                            "description": "This search filter is no longer supported and will have no effect on the results returned.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "acceptsInterstitialPlacements": {
+                            "description": "This search filter is no longer supported and will have no effect on the results returned.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "acceptsPublisherPaidPlacements": {
+                            "description": "Select only sites that accept publisher paid placements.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "adWordsSite": {
+                            "description": "Select only AdWords sites.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "approved": {
+                            "description": "Select only approved sites.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "campaignIds": {
+                            "description": "Select only sites with these campaign IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "directorySiteIds": {
+                            "description": "Select only sites with these directory site IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only sites with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name, ID or keyName. Wildcards (*) are allowed. For example, \"site*2015\" will return objects with names like \"site June 2015\", \"site April 2015\", or simply \"site 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"site\" will match objects with name \"my site\", \"site 2015\", or simply \"site\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "subaccountId": {
+                            "description": "Select only sites with this subaccount ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "unmappedSite": {
+                            "description": "Select only sites that have not been mapped to a directory site.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/sites",
+                    "response": {
+                        "$ref": "SitesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing site. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/sites",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.sites.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Site ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/sites",
+                    "request": {
+                        "$ref": "Site"
+                    },
+                    "response": {
+                        "$ref": "Site"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing site.",
+                    "flatPath": "userprofiles/{profileId}/sites",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.sites.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/sites",
+                    "request": {
+                        "$ref": "Site"
+                    },
+                    "response": {
+                        "$ref": "Site"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "sizes": {
+            "methods": {
+                "get": {
+                    "description": "Gets one size by ID.",
+                    "flatPath": "userprofiles/{profileId}/sizes/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.sizes.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Size ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/sizes/{id}",
+                    "response": {
+                        "$ref": "Size"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new size.",
+                    "flatPath": "userprofiles/{profileId}/sizes",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.sizes.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/sizes",
+                    "request": {
+                        "$ref": "Size"
+                    },
+                    "response": {
+                        "$ref": "Size"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of sizes, possibly filtered. Retrieved sizes are globally unique and may include values not currently in use by your account. Due to this, the list of sizes returned by this method may differ from the list seen in the Trafficking UI.",
+                    "flatPath": "userprofiles/{profileId}/sizes",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.sizes.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "height": {
+                            "description": "Select only sizes with this height.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "32767",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "iabStandard": {
+                            "description": "Select only IAB standard sizes.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ids": {
+                            "description": "Select only sizes with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "width": {
+                            "description": "Select only sizes with this width.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "32767",
+                            "minimum": "0",
+                            "type": "integer"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/sizes",
+                    "response": {
+                        "$ref": "SizesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "subaccounts": {
+            "methods": {
+                "get": {
+                    "description": "Gets one subaccount by ID.",
+                    "flatPath": "userprofiles/{profileId}/subaccounts/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.subaccounts.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Subaccount ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/subaccounts/{id}",
+                    "response": {
+                        "$ref": "Subaccount"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new subaccount.",
+                    "flatPath": "userprofiles/{profileId}/subaccounts",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.subaccounts.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/subaccounts",
+                    "request": {
+                        "$ref": "Subaccount"
+                    },
+                    "response": {
+                        "$ref": "Subaccount"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Gets a list of subaccounts, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/subaccounts",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.subaccounts.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "ids": {
+                            "description": "Select only subaccounts with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"subaccount*2015\" will return objects with names like \"subaccount June 2015\", \"subaccount April 2015\", or simply \"subaccount 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"subaccount\" will match objects with name \"my subaccount\", \"subaccount 2015\", or simply \"subaccount\" .",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/subaccounts",
+                    "response": {
+                        "$ref": "SubaccountsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing subaccount. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/subaccounts",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.subaccounts.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Subaccount ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/subaccounts",
+                    "request": {
+                        "$ref": "Subaccount"
+                    },
+                    "response": {
+                        "$ref": "Subaccount"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing subaccount.",
+                    "flatPath": "userprofiles/{profileId}/subaccounts",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.subaccounts.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/subaccounts",
+                    "request": {
+                        "$ref": "Subaccount"
+                    },
+                    "response": {
+                        "$ref": "Subaccount"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "targetableRemarketingLists": {
+            "methods": {
+                "get": {
+                    "description": "Gets one remarketing list by ID.",
+                    "flatPath": "userprofiles/{profileId}/targetableRemarketingLists/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.targetableRemarketingLists.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Remarketing list ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/targetableRemarketingLists/{id}",
+                    "response": {
+                        "$ref": "TargetableRemarketingList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of targetable remarketing lists, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/targetableRemarketingLists",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.targetableRemarketingLists.list",
+                    "parameterOrder": [
+                        "profileId",
+                        "advertiserId"
+                    ],
+                    "parameters": {
+                        "active": {
+                            "description": "Select only active or only inactive targetable remarketing lists.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "advertiserId": {
+                            "description": "Select only targetable remarketing lists targetable by these advertisers.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "name": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"remarketing list*2015\" will return objects with names like \"remarketing list June 2015\", \"remarketing list April 2015\", or simply \"remarketing list 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"remarketing list\" will match objects with name \"my remarketing list\", \"remarketing list 2015\", or simply \"remarketing list\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/targetableRemarketingLists",
+                    "response": {
+                        "$ref": "TargetableRemarketingListsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "targetingTemplates": {
+            "methods": {
+                "get": {
+                    "description": "Gets one targeting template by ID.",
+                    "flatPath": "userprofiles/{profileId}/targetingTemplates/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.targetingTemplates.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Targeting template ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/targetingTemplates/{id}",
+                    "response": {
+                        "$ref": "TargetingTemplate"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new targeting template.",
+                    "flatPath": "userprofiles/{profileId}/targetingTemplates",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.targetingTemplates.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/targetingTemplates",
+                    "request": {
+                        "$ref": "TargetingTemplate"
+                    },
+                    "response": {
+                        "$ref": "TargetingTemplate"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of targeting templates, optionally filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/targetingTemplates",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.targetingTemplates.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "advertiserId": {
+                            "description": "Select only targeting templates with this advertiser ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "ids": {
+                            "description": "Select only targeting templates with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"template*2015\" will return objects with names like \"template June 2015\", \"template April 2015\", or simply \"template 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"template\" will match objects with name \"my template\", \"template 2015\", or simply \"template\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/targetingTemplates",
+                    "response": {
+                        "$ref": "TargetingTemplatesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing targeting template. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/targetingTemplates",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.targetingTemplates.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "TargetingTemplate ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/targetingTemplates",
+                    "request": {
+                        "$ref": "TargetingTemplate"
+                    },
+                    "response": {
+                        "$ref": "TargetingTemplate"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing targeting template.",
+                    "flatPath": "userprofiles/{profileId}/targetingTemplates",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.targetingTemplates.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/targetingTemplates",
+                    "request": {
+                        "$ref": "TargetingTemplate"
+                    },
+                    "response": {
+                        "$ref": "TargetingTemplate"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "userProfiles": {
+            "methods": {
+                "get": {
+                    "description": "Gets one user profile by ID.",
+                    "flatPath": "userprofiles/{profileId}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.userProfiles.get",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "The user profile ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}",
+                    "response": {
+                        "$ref": "UserProfile"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ddmconversions",
+                        "https://www.googleapis.com/auth/dfareporting",
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves list of user profiles for a user.",
+                    "flatPath": "userprofiles",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.userProfiles.list",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "userprofiles",
+                    "response": {
+                        "$ref": "UserProfileList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ddmconversions",
+                        "https://www.googleapis.com/auth/dfareporting",
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "userRolePermissionGroups": {
+            "methods": {
+                "get": {
+                    "description": "Gets one user role permission group by ID.",
+                    "flatPath": "userprofiles/{profileId}/userRolePermissionGroups/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.userRolePermissionGroups.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "User role permission group ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/userRolePermissionGroups/{id}",
+                    "response": {
+                        "$ref": "UserRolePermissionGroup"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Gets a list of all supported user role permission groups.",
+                    "flatPath": "userprofiles/{profileId}/userRolePermissionGroups",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.userRolePermissionGroups.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/userRolePermissionGroups",
+                    "response": {
+                        "$ref": "UserRolePermissionGroupsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "userRolePermissions": {
+            "methods": {
+                "get": {
+                    "description": "Gets one user role permission by ID.",
+                    "flatPath": "userprofiles/{profileId}/userRolePermissions/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.userRolePermissions.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "User role permission ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/userRolePermissions/{id}",
+                    "response": {
+                        "$ref": "UserRolePermission"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Gets a list of user role permissions, possibly filtered.",
+                    "flatPath": "userprofiles/{profileId}/userRolePermissions",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.userRolePermissions.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "ids": {
+                            "description": "Select only user role permissions with these IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/userRolePermissions",
+                    "response": {
+                        "$ref": "UserRolePermissionsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "userRoles": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes an existing user role.",
+                    "flatPath": "userprofiles/{profileId}/userRoles/{id}",
+                    "httpMethod": "DELETE",
+                    "id": "dfareporting.userRoles.delete",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "User role ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/userRoles/{id}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "get": {
+                    "description": "Gets one user role by ID.",
+                    "flatPath": "userprofiles/{profileId}/userRoles/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.userRoles.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "User role ID.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/userRoles/{id}",
+                    "response": {
+                        "$ref": "UserRole"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a new user role.",
+                    "flatPath": "userprofiles/{profileId}/userRoles",
+                    "httpMethod": "POST",
+                    "id": "dfareporting.userRoles.insert",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/userRoles",
+                    "request": {
+                        "$ref": "UserRole"
+                    },
+                    "response": {
+                        "$ref": "UserRole"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Retrieves a list of user roles, possibly filtered. This method supports paging.",
+                    "flatPath": "userprofiles/{profileId}/userRoles",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.userRoles.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "accountUserRoleOnly": {
+                            "description": "Select only account level user roles not associated with any specific subaccount.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ids": {
+                            "description": "Select only user roles with the specified IDs.",
+                            "format": "int64",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "1000",
+                            "description": "Maximum number of results to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Value of the nextPageToken from the previous result page.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "searchString": {
+                            "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"userrole*2015\" will return objects with names like \"userrole June 2015\", \"userrole April 2015\", or simply \"userrole 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"userrole\" will match objects with name \"my userrole\", \"userrole 2015\", or simply \"userrole\".",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortField": {
+                            "default": "ID",
+                            "description": "Field by which to sort the list.",
+                            "enum": [
+                                "ID",
+                                "NAME"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "sortOrder": {
+                            "default": "ASCENDING",
+                            "description": "Order of sorted results.",
+                            "enum": [
+                                "ASCENDING",
+                                "DESCENDING"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "subaccountId": {
+                            "description": "Select only user roles that belong to this subaccount.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/userRoles",
+                    "response": {
+                        "$ref": "UserRolesListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing user role. This method supports patch semantics.",
+                    "flatPath": "userprofiles/{profileId}/userRoles",
+                    "httpMethod": "PATCH",
+                    "id": "dfareporting.userRoles.patch",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "UserRole ID.",
+                            "format": "int64",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/userRoles",
+                    "request": {
+                        "$ref": "UserRole"
+                    },
+                    "response": {
+                        "$ref": "UserRole"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing user role.",
+                    "flatPath": "userprofiles/{profileId}/userRoles",
+                    "httpMethod": "PUT",
+                    "id": "dfareporting.userRoles.update",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/userRoles",
+                    "request": {
+                        "$ref": "UserRole"
+                    },
+                    "response": {
+                        "$ref": "UserRole"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        },
+        "videoFormats": {
+            "methods": {
+                "get": {
+                    "description": "Gets one video format by ID.",
+                    "flatPath": "userprofiles/{profileId}/videoFormats/{id}",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.videoFormats.get",
+                    "parameterOrder": [
+                        "profileId",
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Video format ID.",
+                            "format": "int32",
+                            "location": "path",
+                            "required": true,
+                            "type": "integer"
+                        },
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/videoFormats/{id}",
+                    "response": {
+                        "$ref": "VideoFormat"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                },
+                "list": {
+                    "description": "Lists available video formats.",
+                    "flatPath": "userprofiles/{profileId}/videoFormats",
+                    "httpMethod": "GET",
+                    "id": "dfareporting.videoFormats.list",
+                    "parameterOrder": [
+                        "profileId"
+                    ],
+                    "parameters": {
+                        "profileId": {
+                            "description": "User profile ID associated with this request.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "userprofiles/{profileId}/videoFormats",
+                    "response": {
+                        "$ref": "VideoFormatsListResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/dfatrafficking"
+                    ]
+                }
+            }
+        }
+    },
+    "revision": "20210210",
+    "rootUrl": "https://dfareporting.googleapis.com/",
+    "schemas": {
+        "Account": {
+            "description": "Contains properties of a Campaign Manager account.",
+            "id": "Account",
+            "properties": {
+                "accountPermissionIds": {
+                    "description": "Account permissions assigned to this account.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "accountProfile": {
+                    "description": "Profile for this account. This is a read-only field that can be left blank.",
+                    "enum": [
+                        "ACCOUNT_PROFILE_BASIC",
+                        "ACCOUNT_PROFILE_STANDARD"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "active": {
+                    "description": "Whether this account is active.",
+                    "type": "boolean"
+                },
+                "activeAdsLimitTier": {
+                    "description": "Maximum number of active ads allowed for this account.",
+                    "enum": [
+                        "ACTIVE_ADS_TIER_40K",
+                        "ACTIVE_ADS_TIER_75K",
+                        "ACTIVE_ADS_TIER_100K",
+                        "ACTIVE_ADS_TIER_200K",
+                        "ACTIVE_ADS_TIER_300K",
+                        "ACTIVE_ADS_TIER_500K",
+                        "ACTIVE_ADS_TIER_750K",
+                        "ACTIVE_ADS_TIER_1M"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "activeViewOptOut": {
+                    "description": "Whether to serve creatives with Active View tags. If disabled, viewability data will not be available for any impressions.",
+                    "type": "boolean"
+                },
+                "availablePermissionIds": {
+                    "description": "User role permissions available to the user roles of this account.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "countryId": {
+                    "description": "ID of the country associated with this account.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "currencyId": {
+                    "description": "ID of currency associated with this account. This is a required field. Acceptable values are: - \"1\" for USD - \"2\" for GBP - \"3\" for ESP - \"4\" for SEK - \"5\" for CAD - \"6\" for JPY - \"7\" for DEM - \"8\" for AUD - \"9\" for FRF - \"10\" for ITL - \"11\" for DKK - \"12\" for NOK - \"13\" for FIM - \"14\" for ZAR - \"15\" for IEP - \"16\" for NLG - \"17\" for EUR - \"18\" for KRW - \"19\" for TWD - \"20\" for SGD - \"21\" for CNY - \"22\" for HKD - \"23\" for NZD - \"24\" for MYR - \"25\" for BRL - \"26\" for PTE - \"28\" for CLP - \"29\" for TRY - \"30\" for ARS - \"31\" for PEN - \"32\" for ILS - \"33\" for CHF - \"34\" for VEF - \"35\" for COP - \"36\" for GTQ - \"37\" for PLN - \"39\" for INR - \"40\" for THB - \"41\" for IDR - \"42\" for CZK - \"43\" for RON - \"44\" for HUF - \"45\" for RUB - \"46\" for AED - \"47\" for BGN - \"48\" for HRK - \"49\" for MXN - \"50\" for NGN - \"51\" for EGP ",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "defaultCreativeSizeId": {
+                    "description": "Default placement dimensions for this account.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "description": {
+                    "description": "Description of this account.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this account. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#account\".",
+                    "type": "string"
+                },
+                "locale": {
+                    "description": "Locale of this account. Acceptable values are: - \"cs\" (Czech) - \"de\" (German) - \"en\" (English) - \"en-GB\" (English United Kingdom) - \"es\" (Spanish) - \"fr\" (French) - \"it\" (Italian) - \"ja\" (Japanese) - \"ko\" (Korean) - \"pl\" (Polish) - \"pt-BR\" (Portuguese Brazil) - \"ru\" (Russian) - \"sv\" (Swedish) - \"tr\" (Turkish) - \"zh-CN\" (Chinese Simplified) - \"zh-TW\" (Chinese Traditional) ",
+                    "type": "string"
+                },
+                "maximumImageSize": {
+                    "description": "Maximum image size allowed for this account, in kilobytes. Value must be greater than or equal to 1.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this account. This is a required field, and must be less than 128 characters long and be globally unique.",
+                    "type": "string"
+                },
+                "nielsenOcrEnabled": {
+                    "description": "Whether campaigns created in this account will be enabled for Nielsen OCR reach ratings by default.",
+                    "type": "boolean"
+                },
+                "reportsConfiguration": {
+                    "$ref": "ReportsConfiguration",
+                    "description": "Reporting configuration of this account."
+                },
+                "shareReportsWithTwitter": {
+                    "description": "Share Path to Conversion reports with Twitter.",
+                    "type": "boolean"
+                },
+                "teaserSizeLimit": {
+                    "description": "File size limit in kilobytes of Rich Media teaser creatives. Acceptable values are 1 to 10240, inclusive.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AccountActiveAdSummary": {
+            "description": "Gets a summary of active ads in an account.",
+            "id": "AccountActiveAdSummary",
+            "properties": {
+                "accountId": {
+                    "description": "ID of the account.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "activeAds": {
+                    "description": "Ads that have been activated for the account",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "activeAdsLimitTier": {
+                    "description": "Maximum number of active ads allowed for the account.",
+                    "enum": [
+                        "ACTIVE_ADS_TIER_40K",
+                        "ACTIVE_ADS_TIER_75K",
+                        "ACTIVE_ADS_TIER_100K",
+                        "ACTIVE_ADS_TIER_200K",
+                        "ACTIVE_ADS_TIER_300K",
+                        "ACTIVE_ADS_TIER_500K",
+                        "ACTIVE_ADS_TIER_750K",
+                        "ACTIVE_ADS_TIER_1M"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "availableAds": {
+                    "description": "Ads that can be activated for the account.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountActiveAdSummary\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AccountPermission": {
+            "description": "AccountPermissions contains information about a particular account permission. Some features of Campaign Manager require an account permission to be present in the account.",
+            "id": "AccountPermission",
+            "properties": {
+                "accountProfiles": {
+                    "description": "Account profiles associated with this account permission. Possible values are: - \"ACCOUNT_PROFILE_BASIC\" - \"ACCOUNT_PROFILE_STANDARD\" ",
+                    "items": {
+                        "enum": [
+                            "ACCOUNT_PROFILE_BASIC",
+                            "ACCOUNT_PROFILE_STANDARD"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "id": {
+                    "description": "ID of this account permission.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountPermission\".",
+                    "type": "string"
+                },
+                "level": {
+                    "description": "Administrative level required to enable this account permission.",
+                    "enum": [
+                        "USER",
+                        "ADMINISTRATOR"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this account permission.",
+                    "type": "string"
+                },
+                "permissionGroupId": {
+                    "description": "Permission group of this account permission.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AccountPermissionGroup": {
+            "description": "AccountPermissionGroups contains a mapping of permission group IDs to names. A permission group is a grouping of account permissions.",
+            "id": "AccountPermissionGroup",
+            "properties": {
+                "id": {
+                    "description": "ID of this account permission group.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountPermissionGroup\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this account permission group.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AccountPermissionGroupsListResponse": {
+            "description": "Account Permission Group List Response",
+            "id": "AccountPermissionGroupsListResponse",
+            "properties": {
+                "accountPermissionGroups": {
+                    "description": "Account permission group collection.",
+                    "items": {
+                        "$ref": "AccountPermissionGroup"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountPermissionGroupsListResponse\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AccountPermissionsListResponse": {
+            "description": "Account Permission List Response",
+            "id": "AccountPermissionsListResponse",
+            "properties": {
+                "accountPermissions": {
+                    "description": "Account permission collection.",
+                    "items": {
+                        "$ref": "AccountPermission"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountPermissionsListResponse\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AccountUserProfile": {
+            "description": "AccountUserProfiles contains properties of a Campaign Manager user profile. This resource is specifically for managing user profiles, whereas UserProfiles is for accessing the API.",
+            "id": "AccountUserProfile",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of the user profile. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "active": {
+                    "description": "Whether this user profile is active. This defaults to false, and must be set true on insert for the user profile to be usable.",
+                    "type": "boolean"
+                },
+                "advertiserFilter": {
+                    "$ref": "ObjectFilter",
+                    "description": "Filter that describes which advertisers are visible to the user profile."
+                },
+                "campaignFilter": {
+                    "$ref": "ObjectFilter",
+                    "description": "Filter that describes which campaigns are visible to the user profile."
+                },
+                "comments": {
+                    "description": "Comments for this user profile.",
+                    "type": "string"
+                },
+                "email": {
+                    "description": "Email of the user profile. The email addresss must be linked to a Google Account. This field is required on insertion and is read-only after insertion.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of the user profile. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountUserProfile\".",
+                    "type": "string"
+                },
+                "locale": {
+                    "description": "Locale of the user profile. This is a required field. Acceptable values are: - \"cs\" (Czech) - \"de\" (German) - \"en\" (English) - \"en-GB\" (English United Kingdom) - \"es\" (Spanish) - \"fr\" (French) - \"it\" (Italian) - \"ja\" (Japanese) - \"ko\" (Korean) - \"pl\" (Polish) - \"pt-BR\" (Portuguese Brazil) - \"ru\" (Russian) - \"sv\" (Swedish) - \"tr\" (Turkish) - \"zh-CN\" (Chinese Simplified) - \"zh-TW\" (Chinese Traditional) ",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of the user profile. This is a required field. Must be less than 64 characters long, must be globally unique, and cannot contain whitespace or any of the following characters: \"&;<>\"#%,\".",
+                    "type": "string"
+                },
+                "siteFilter": {
+                    "$ref": "ObjectFilter",
+                    "description": "Filter that describes which sites are visible to the user profile."
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of the user profile. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "traffickerType": {
+                    "description": "Trafficker type of this user profile. This is a read-only field.",
+                    "enum": [
+                        "INTERNAL_NON_TRAFFICKER",
+                        "INTERNAL_TRAFFICKER",
+                        "EXTERNAL_TRAFFICKER"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "userAccessType": {
+                    "description": "User type of the user profile. This is a read-only field that can be left blank.",
+                    "enum": [
+                        "NORMAL_USER",
+                        "SUPER_USER",
+                        "INTERNAL_ADMINISTRATOR",
+                        "READ_ONLY_SUPER_USER"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "userRoleFilter": {
+                    "$ref": "ObjectFilter",
+                    "description": "Filter that describes which user roles are visible to the user profile."
+                },
+                "userRoleId": {
+                    "description": "User role ID of the user profile. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AccountUserProfilesListResponse": {
+            "description": "Account User Profile List Response",
+            "id": "AccountUserProfilesListResponse",
+            "properties": {
+                "accountUserProfiles": {
+                    "description": "Account user profile collection.",
+                    "items": {
+                        "$ref": "AccountUserProfile"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountUserProfilesListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AccountsListResponse": {
+            "description": "Account List Response",
+            "id": "AccountsListResponse",
+            "properties": {
+                "accounts": {
+                    "description": "Account collection.",
+                    "items": {
+                        "$ref": "Account"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#accountsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Activities": {
+            "description": "Represents an activity group.",
+            "id": "Activities",
+            "properties": {
+                "filters": {
+                    "description": "List of activity filters. The dimension values need to be all either of type \"dfa:activity\" or \"dfa:activityGroup\".",
+                    "items": {
+                        "$ref": "DimensionValue"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#activities.",
+                    "type": "string"
+                },
+                "metricNames": {
+                    "description": "List of names of floodlight activity metrics.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Ad": {
+            "description": "Contains properties of a Campaign Manager ad.",
+            "id": "Ad",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this ad. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "active": {
+                    "description": "Whether this ad is active. When true, archived must be false.",
+                    "type": "boolean"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this ad. This is a required field on insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "archived": {
+                    "description": "Whether this ad is archived. When true, active must be false.",
+                    "type": "boolean"
+                },
+                "audienceSegmentId": {
+                    "description": "Audience segment ID that is being targeted for this ad. Applicable when type is AD_SERVING_STANDARD_AD.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "campaignId": {
+                    "description": "Campaign ID of this ad. This is a required field on insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "campaignIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the campaign. This is a read-only, auto-generated field."
+                },
+                "clickThroughUrl": {
+                    "$ref": "ClickThroughUrl",
+                    "description": "Click-through URL for this ad. This is a required field on insertion. Applicable when type is AD_SERVING_CLICK_TRACKER."
+                },
+                "clickThroughUrlSuffixProperties": {
+                    "$ref": "ClickThroughUrlSuffixProperties",
+                    "description": "Click-through URL suffix properties for this ad. Applies to the URL in the ad or (if overriding ad properties) the URL in the creative."
+                },
+                "comments": {
+                    "description": "Comments for this ad.",
+                    "type": "string"
+                },
+                "compatibility": {
+                    "description": "Compatibility of this ad. Applicable when type is AD_SERVING_DEFAULT_AD. DISPLAY and DISPLAY_INTERSTITIAL refer to either rendering on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are only used for existing default ads. New mobile placements must be assigned DISPLAY or DISPLAY_INTERSTITIAL and default ads created for those placements will be limited to those compatibility types. IN_STREAM_VIDEO refers to rendering in-stream video ads developed with the VAST standard.",
+                    "enum": [
+                        "DISPLAY",
+                        "DISPLAY_INTERSTITIAL",
+                        "APP",
+                        "APP_INTERSTITIAL",
+                        "IN_STREAM_VIDEO",
+                        "IN_STREAM_AUDIO"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "createInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the creation of this ad. This is a read-only field."
+                },
+                "creativeGroupAssignments": {
+                    "description": "Creative group assignments for this ad. Applicable when type is AD_SERVING_CLICK_TRACKER. Only one assignment per creative group number is allowed for a maximum of two assignments.",
+                    "items": {
+                        "$ref": "CreativeGroupAssignment"
+                    },
+                    "type": "array"
+                },
+                "creativeRotation": {
+                    "$ref": "CreativeRotation",
+                    "description": "Creative rotation for this ad. Applicable when type is AD_SERVING_DEFAULT_AD, AD_SERVING_STANDARD_AD, or AD_SERVING_TRACKING. When type is AD_SERVING_DEFAULT_AD, this field should have exactly one creativeAssignment ."
+                },
+                "dayPartTargeting": {
+                    "$ref": "DayPartTargeting",
+                    "description": "Time and day targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD."
+                },
+                "defaultClickThroughEventTagProperties": {
+                    "$ref": "DefaultClickThroughEventTagProperties",
+                    "description": "Default click-through event tag properties for this ad."
+                },
+                "deliverySchedule": {
+                    "$ref": "DeliverySchedule",
+                    "description": "Delivery schedule information for this ad. Applicable when type is AD_SERVING_STANDARD_AD or AD_SERVING_TRACKING. This field along with subfields priority and impressionRatio are required on insertion when type is AD_SERVING_STANDARD_AD."
+                },
+                "dynamicClickTracker": {
+                    "description": "Whether this ad is a dynamic click tracker. Applicable when type is AD_SERVING_CLICK_TRACKER. This is a required field on insert, and is read-only after insert.",
+                    "type": "boolean"
+                },
+                "endTime": {
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "eventTagOverrides": {
+                    "description": "Event tag overrides for this ad.",
+                    "items": {
+                        "$ref": "EventTagOverride"
+                    },
+                    "type": "array"
+                },
+                "geoTargeting": {
+                    "$ref": "GeoTargeting",
+                    "description": "Geographical targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD."
+                },
+                "id": {
+                    "description": "ID of this ad. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this ad. This is a read-only, auto-generated field."
+                },
+                "keyValueTargetingExpression": {
+                    "$ref": "KeyValueTargetingExpression",
+                    "description": "Key-value targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#ad\".",
+                    "type": "string"
+                },
+                "languageTargeting": {
+                    "$ref": "LanguageTargeting",
+                    "description": "Language targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD."
+                },
+                "lastModifiedInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the most recent modification of this ad. This is a read-only field."
+                },
+                "name": {
+                    "description": "Name of this ad. This is a required field and must be less than 256 characters long.",
+                    "type": "string"
+                },
+                "placementAssignments": {
+                    "description": "Placement assignments for this ad.",
+                    "items": {
+                        "$ref": "PlacementAssignment"
+                    },
+                    "type": "array"
+                },
+                "remarketingListExpression": {
+                    "$ref": "ListTargetingExpression",
+                    "description": "Remarketing list targeting expression for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD."
+                },
+                "size": {
+                    "$ref": "Size",
+                    "description": "Size of this ad. Applicable when type is AD_SERVING_DEFAULT_AD."
+                },
+                "sslCompliant": {
+                    "description": "Whether this ad is ssl compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.",
+                    "type": "boolean"
+                },
+                "sslRequired": {
+                    "description": "Whether this ad requires ssl. This is a read-only field that is auto-generated when the ad is inserted or updated.",
+                    "type": "boolean"
+                },
+                "startTime": {
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this ad. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "targetingTemplateId": {
+                    "description": "Targeting template ID, used to apply preconfigured targeting information to this ad. This cannot be set while any of dayPartTargeting, geoTargeting, keyValueTargetingExpression, languageTargeting, remarketingListExpression, or technologyTargeting are set. Applicable when type is AD_SERVING_STANDARD_AD.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "technologyTargeting": {
+                    "$ref": "TechnologyTargeting",
+                    "description": "Technology platform targeting information for this ad. This field must be left blank if the ad is using a targeting template. Applicable when type is AD_SERVING_STANDARD_AD."
+                },
+                "type": {
+                    "description": "Type of ad. This is a required field on insertion. Note that default ads ( AD_SERVING_DEFAULT_AD) cannot be created directly (see Creative resource).",
+                    "enum": [
+                        "AD_SERVING_STANDARD_AD",
+                        "AD_SERVING_DEFAULT_AD",
+                        "AD_SERVING_CLICK_TRACKER",
+                        "AD_SERVING_TRACKING",
+                        "AD_SERVING_BRAND_SAFE_AD"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AdBlockingConfiguration": {
+            "description": "Campaign ad blocking settings.",
+            "id": "AdBlockingConfiguration",
+            "properties": {
+                "clickThroughUrl": {
+                    "description": "Click-through URL used by brand-neutral ads. This is a required field when overrideClickThroughUrl is set to true.",
+                    "type": "string"
+                },
+                "creativeBundleId": {
+                    "description": "ID of a creative bundle to use for this campaign. If set, brand-neutral ads will select creatives from this bundle. Otherwise, a default transparent pixel will be used.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "enabled": {
+                    "description": "Whether this campaign has enabled ad blocking. When true, ad blocking is enabled for placements in the campaign, but this may be overridden by site and placement settings. When false, ad blocking is disabled for all placements under the campaign, regardless of site and placement settings.",
+                    "type": "boolean"
+                },
+                "overrideClickThroughUrl": {
+                    "description": "Whether the brand-neutral ad's click-through URL comes from the campaign's creative bundle or the override URL. Must be set to true if ad blocking is enabled and no creative bundle is configured.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "AdSlot": {
+            "description": "Ad Slot",
+            "id": "AdSlot",
+            "properties": {
+                "comment": {
+                    "description": "Comment for this ad slot.",
+                    "type": "string"
+                },
+                "compatibility": {
+                    "description": "Ad slot compatibility. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop, mobile devices or in mobile apps for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are for rendering in mobile apps. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard.",
+                    "enum": [
+                        "DISPLAY",
+                        "DISPLAY_INTERSTITIAL",
+                        "APP",
+                        "APP_INTERSTITIAL",
+                        "IN_STREAM_VIDEO",
+                        "IN_STREAM_AUDIO"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "height": {
+                    "description": "Height of this ad slot.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "linkedPlacementId": {
+                    "description": "ID of the placement from an external platform that is linked to this ad slot.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this ad slot.",
+                    "type": "string"
+                },
+                "paymentSourceType": {
+                    "description": "Payment source type of this ad slot.",
+                    "enum": [
+                        "PLANNING_PAYMENT_SOURCE_TYPE_AGENCY_PAID",
+                        "PLANNING_PAYMENT_SOURCE_TYPE_PUBLISHER_PAID"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "primary": {
+                    "description": "Primary ad slot of a roadblock inventory item.",
+                    "type": "boolean"
+                },
+                "width": {
+                    "description": "Width of this ad slot.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AdsListResponse": {
+            "description": "Ad List Response",
+            "id": "AdsListResponse",
+            "properties": {
+                "ads": {
+                    "description": "Ad collection.",
+                    "items": {
+                        "$ref": "Ad"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#adsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Advertiser": {
+            "description": "Contains properties of a Campaign Manager advertiser.",
+            "id": "Advertiser",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this advertiser.This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserGroupId": {
+                    "description": "ID of the advertiser group this advertiser belongs to. You can group advertisers for reporting purposes, allowing you to see aggregated information for all advertisers in each group.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "clickThroughUrlSuffix": {
+                    "description": "Suffix added to click-through URL of ad creative associations under this advertiser. Must be less than 129 characters long.",
+                    "type": "string"
+                },
+                "defaultClickThroughEventTagId": {
+                    "description": "ID of the click-through event tag to apply by default to the landing pages of this advertiser's campaigns.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "defaultEmail": {
+                    "description": "Default email address used in sender field for tag emails.",
+                    "type": "string"
+                },
+                "floodlightConfigurationId": {
+                    "description": "Floodlight configuration ID of this advertiser. The floodlight configuration ID will be created automatically, so on insert this field should be left blank. This field can be set to another advertiser's floodlight configuration ID in order to share that advertiser's floodlight configuration with this advertiser, so long as: - This advertiser's original floodlight configuration is not already associated with floodlight activities or floodlight activity groups. - This advertiser's original floodlight configuration is not already shared with another advertiser. ",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "floodlightConfigurationIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field."
+                },
+                "id": {
+                    "description": "ID of this advertiser. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this advertiser. This is a read-only, auto-generated field."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiser\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this advertiser. This is a required field and must be less than 256 characters long and unique among advertisers of the same account.",
+                    "type": "string"
+                },
+                "originalFloodlightConfigurationId": {
+                    "description": "Original floodlight configuration before any sharing occurred. Set the floodlightConfigurationId of this advertiser to originalFloodlightConfigurationId to unshare the advertiser's current floodlight configuration. You cannot unshare an advertiser's floodlight configuration if the shared configuration has activities associated with any campaign or placement.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "Status of this advertiser.",
+                    "enum": [
+                        "APPROVED",
+                        "ON_HOLD"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this advertiser.This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "suspended": {
+                    "description": "Suspension status of this advertiser.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "AdvertiserGroup": {
+            "description": "Groups advertisers together so that reports can be generated for the entire group at once.",
+            "id": "AdvertiserGroup",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this advertiser group. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this advertiser group. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiserGroup\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this advertiser group. This is a required field and must be less than 256 characters long and unique among advertiser groups of the same account.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AdvertiserGroupsListResponse": {
+            "description": "Advertiser Group List Response",
+            "id": "AdvertiserGroupsListResponse",
+            "properties": {
+                "advertiserGroups": {
+                    "description": "Advertiser group collection.",
+                    "items": {
+                        "$ref": "AdvertiserGroup"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiserGroupsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AdvertiserLandingPagesListResponse": {
+            "description": "Landing Page List Response",
+            "id": "AdvertiserLandingPagesListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertiserLandingPagesListResponse\".",
+                    "type": "string"
+                },
+                "landingPages": {
+                    "description": "Landing page collection",
+                    "items": {
+                        "$ref": "LandingPage"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AdvertisersListResponse": {
+            "description": "Advertiser List Response",
+            "id": "AdvertisersListResponse",
+            "properties": {
+                "advertisers": {
+                    "description": "Advertiser collection.",
+                    "items": {
+                        "$ref": "Advertiser"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#advertisersListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AudienceSegment": {
+            "description": "Audience Segment.",
+            "id": "AudienceSegment",
+            "properties": {
+                "allocation": {
+                    "description": "Weight allocated to this segment. The weight assigned will be understood in proportion to the weights assigned to other segments in the same segment group. Acceptable values are 1 to 1000, inclusive.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "id": {
+                    "description": "ID of this audience segment. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this audience segment. This is a required field and must be less than 65 characters long.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AudienceSegmentGroup": {
+            "description": "Audience Segment Group.",
+            "id": "AudienceSegmentGroup",
+            "properties": {
+                "audienceSegments": {
+                    "description": "Audience segments assigned to this group. The number of segments must be between 2 and 100.",
+                    "items": {
+                        "$ref": "AudienceSegment"
+                    },
+                    "type": "array"
+                },
+                "id": {
+                    "description": "ID of this audience segment group. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this audience segment group. This is a required field and must be less than 65 characters long.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Browser": {
+            "description": "Contains information about a browser that can be targeted by ads.",
+            "id": "Browser",
+            "properties": {
+                "browserVersionId": {
+                    "description": "ID referring to this grouping of browser and version numbers. This is the ID used for targeting.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "dartId": {
+                    "description": "DART ID of this browser. This is the ID used when generating reports.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#browser\".",
+                    "type": "string"
+                },
+                "majorVersion": {
+                    "description": "Major version number (leftmost number) of this browser. For example, for Chrome 5.0.376.86 beta, this field should be set to 5. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.",
+                    "type": "string"
+                },
+                "minorVersion": {
+                    "description": "Minor version number (number after first dot on left) of this browser. For example, for Chrome 5.0.375.86 beta, this field should be set to 0. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this browser.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "BrowsersListResponse": {
+            "description": "Browser List Response",
+            "id": "BrowsersListResponse",
+            "properties": {
+                "browsers": {
+                    "description": "Browser collection.",
+                    "items": {
+                        "$ref": "Browser"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#browsersListResponse\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Campaign": {
+            "description": "Contains properties of a Campaign Manager campaign.",
+            "id": "Campaign",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this campaign. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "adBlockingConfiguration": {
+                    "$ref": "AdBlockingConfiguration",
+                    "description": "Ad blocking settings for this campaign."
+                },
+                "additionalCreativeOptimizationConfigurations": {
+                    "description": "Additional creative optimization configurations for the campaign.",
+                    "items": {
+                        "$ref": "CreativeOptimizationConfiguration"
+                    },
+                    "type": "array"
+                },
+                "advertiserGroupId": {
+                    "description": "Advertiser group ID of the associated advertiser.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this campaign. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the advertiser ID of this campaign. This is a read-only, auto-generated field."
+                },
+                "archived": {
+                    "description": "Whether this campaign has been archived.",
+                    "type": "boolean"
+                },
+                "audienceSegmentGroups": {
+                    "description": "Audience segment groups assigned to this campaign. Cannot have more than 300 segment groups.",
+                    "items": {
+                        "$ref": "AudienceSegmentGroup"
+                    },
+                    "type": "array"
+                },
+                "billingInvoiceCode": {
+                    "description": "Billing invoice code included in the Campaign Manager client billing invoices associated with the campaign.",
+                    "type": "string"
+                },
+                "clickThroughUrlSuffixProperties": {
+                    "$ref": "ClickThroughUrlSuffixProperties",
+                    "description": "Click-through URL suffix override properties for this campaign."
+                },
+                "comment": {
+                    "description": "Arbitrary comments about this campaign. Must be less than 256 characters long.",
+                    "type": "string"
+                },
+                "createInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the creation of this campaign. This is a read-only field."
+                },
+                "creativeGroupIds": {
+                    "description": "List of creative group IDs that are assigned to the campaign.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "creativeOptimizationConfiguration": {
+                    "$ref": "CreativeOptimizationConfiguration",
+                    "description": "Creative optimization configuration for the campaign."
+                },
+                "defaultClickThroughEventTagProperties": {
+                    "$ref": "DefaultClickThroughEventTagProperties",
+                    "description": "Click-through event tag ID override properties for this campaign."
+                },
+                "defaultLandingPageId": {
+                    "description": "The default landing page ID for this campaign.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "endDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "eventTagOverrides": {
+                    "description": "Overrides that can be used to activate or deactivate advertiser event tags.",
+                    "items": {
+                        "$ref": "EventTagOverride"
+                    },
+                    "type": "array"
+                },
+                "externalId": {
+                    "description": "External ID for this campaign.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this campaign. This is a read-only auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this campaign. This is a read-only, auto-generated field."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaign\".",
+                    "type": "string"
+                },
+                "lastModifiedInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the most recent modification of this campaign. This is a read-only field."
+                },
+                "name": {
+                    "description": "Name of this campaign. This is a required field and must be less than 256 characters long and unique among campaigns of the same advertiser.",
+                    "type": "string"
+                },
+                "nielsenOcrEnabled": {
+                    "description": "Whether Nielsen reports are enabled for this campaign.",
+                    "type": "boolean"
+                },
+                "startDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this campaign. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "traffickerEmails": {
+                    "description": "Campaign trafficker contact emails.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "CampaignCreativeAssociation": {
+            "description": "Identifies a creative which has been associated with a given campaign.",
+            "id": "CampaignCreativeAssociation",
+            "properties": {
+                "creativeId": {
+                    "description": "ID of the creative associated with the campaign. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaignCreativeAssociation\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CampaignCreativeAssociationsListResponse": {
+            "description": "Campaign Creative Association List Response",
+            "id": "CampaignCreativeAssociationsListResponse",
+            "properties": {
+                "campaignCreativeAssociations": {
+                    "description": "Campaign creative association collection",
+                    "items": {
+                        "$ref": "CampaignCreativeAssociation"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaignCreativeAssociationsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CampaignManagerIds": {
+            "description": "Campaign Manager IDs related to the custom event.",
+            "id": "CampaignManagerIds",
+            "properties": {
+                "adId": {
+                    "description": "Ad ID for Campaign Manager.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "campaignId": {
+                    "description": "Campaign ID for Campaign Manager.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "creativeId": {
+                    "description": "Creative ID for Campaign Manager.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaignManagerIds\".",
+                    "type": "string"
+                },
+                "placementId": {
+                    "description": "Placement ID for Campaign Manager.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "siteId": {
+                    "description": "Site ID for Campaign Manager.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CampaignsListResponse": {
+            "description": "Campaign List Response",
+            "id": "CampaignsListResponse",
+            "properties": {
+                "campaigns": {
+                    "description": "Campaign collection.",
+                    "items": {
+                        "$ref": "Campaign"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#campaignsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ChangeLog": {
+            "description": "Describes a change that a user has made to a resource.",
+            "id": "ChangeLog",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of the modified object.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "action": {
+                    "description": "Action which caused the change.",
+                    "type": "string"
+                },
+                "changeTime": {
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "fieldName": {
+                    "description": "Field name of the object which changed.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this change log.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#changeLog\".",
+                    "type": "string"
+                },
+                "newValue": {
+                    "description": "New value of the object field.",
+                    "type": "string"
+                },
+                "objectId": {
+                    "description": "ID of the object of this change log. The object could be a campaign, placement, ad, or other type.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "objectType": {
+                    "description": "Object type of the change log.",
+                    "type": "string"
+                },
+                "oldValue": {
+                    "description": "Old value of the object field.",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of the modified object.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "transactionId": {
+                    "description": "Transaction ID of this change log. When a single API call results in many changes, each change will have a separate ID in the change log but will share the same transactionId.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "userProfileId": {
+                    "description": "ID of the user who modified the object.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "userProfileName": {
+                    "description": "User profile name of the user who modified the object.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ChangeLogsListResponse": {
+            "description": "Change Log List Response",
+            "id": "ChangeLogsListResponse",
+            "properties": {
+                "changeLogs": {
+                    "description": "Change log collection.",
+                    "items": {
+                        "$ref": "ChangeLog"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#changeLogsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ChannelGrouping": {
+            "description": "Represents a DfaReporting channel grouping.",
+            "id": "ChannelGrouping",
+            "properties": {
+                "fallbackName": {
+                    "description": "ChannelGrouping fallback name.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#channelGrouping.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "ChannelGrouping name.",
+                    "type": "string"
+                },
+                "rules": {
+                    "description": "The rules contained within this channel grouping.",
+                    "items": {
+                        "$ref": "ChannelGroupingRule"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ChannelGroupingRule": {
+            "description": "Represents a DfaReporting channel grouping rule.",
+            "id": "ChannelGroupingRule",
+            "properties": {
+                "disjunctiveMatchStatements": {
+                    "description": "The disjunctive match statements contained within this rule.",
+                    "items": {
+                        "$ref": "DisjunctiveMatchStatement"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#channelGroupingRule.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Rule name.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CitiesListResponse": {
+            "description": "City List Response",
+            "id": "CitiesListResponse",
+            "properties": {
+                "cities": {
+                    "description": "City collection.",
+                    "items": {
+                        "$ref": "City"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#citiesListResponse\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "City": {
+            "description": "Contains information about a city that can be targeted by ads.",
+            "id": "City",
+            "properties": {
+                "countryCode": {
+                    "description": "Country code of the country to which this city belongs.",
+                    "type": "string"
+                },
+                "countryDartId": {
+                    "description": "DART ID of the country to which this city belongs.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "dartId": {
+                    "description": "DART ID of this city. This is the ID used for targeting and generating reports.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#city\".",
+                    "type": "string"
+                },
+                "metroCode": {
+                    "description": "Metro region code of the metro region (DMA) to which this city belongs.",
+                    "type": "string"
+                },
+                "metroDmaId": {
+                    "description": "ID of the metro region (DMA) to which this city belongs.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this city.",
+                    "type": "string"
+                },
+                "regionCode": {
+                    "description": "Region code of the region to which this city belongs.",
+                    "type": "string"
+                },
+                "regionDartId": {
+                    "description": "DART ID of the region to which this city belongs.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ClickTag": {
+            "description": "Creative Click Tag.",
+            "id": "ClickTag",
+            "properties": {
+                "clickThroughUrl": {
+                    "$ref": "CreativeClickThroughUrl",
+                    "description": "Parameter value for the specified click tag. This field contains a click-through url."
+                },
+                "eventName": {
+                    "description": "Advertiser event name associated with the click tag. This field is used by DISPLAY_IMAGE_GALLERY and HTML5_BANNER creatives. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Parameter name for the specified click tag. For DISPLAY_IMAGE_GALLERY creative assets, this field must match the value of the creative asset's creativeAssetId.name field.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ClickThroughUrl": {
+            "description": "Click-through URL",
+            "id": "ClickThroughUrl",
+            "properties": {
+                "computedClickThroughUrl": {
+                    "description": "Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows: - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field. - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field. - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field. ",
+                    "type": "string"
+                },
+                "customClickThroughUrl": {
+                    "description": "Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.",
+                    "type": "string"
+                },
+                "defaultLandingPage": {
+                    "description": "Whether the campaign default landing page is used.",
+                    "type": "boolean"
+                },
+                "landingPageId": {
+                    "description": "ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ClickThroughUrlSuffixProperties": {
+            "description": "Click Through URL Suffix settings.",
+            "id": "ClickThroughUrlSuffixProperties",
+            "properties": {
+                "clickThroughUrlSuffix": {
+                    "description": "Click-through URL suffix to apply to all ads in this entity's scope. Must be less than 128 characters long.",
+                    "type": "string"
+                },
+                "overrideInheritedSuffix": {
+                    "description": "Whether this entity should override the inherited click-through URL suffix with its own defined value.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "CompanionClickThroughOverride": {
+            "description": "Companion Click-through override.",
+            "id": "CompanionClickThroughOverride",
+            "properties": {
+                "clickThroughUrl": {
+                    "$ref": "ClickThroughUrl",
+                    "description": "Click-through URL of this companion click-through override."
+                },
+                "creativeId": {
+                    "description": "ID of the creative for this companion click-through override.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CompanionSetting": {
+            "description": "Companion Settings",
+            "id": "CompanionSetting",
+            "properties": {
+                "companionsDisabled": {
+                    "description": "Whether companions are disabled for this placement.",
+                    "type": "boolean"
+                },
+                "enabledSizes": {
+                    "description": "Allowlist of companion sizes to be served to this placement. Set this list to null or empty to serve all companion sizes.",
+                    "items": {
+                        "$ref": "Size"
+                    },
+                    "type": "array"
+                },
+                "imageOnly": {
+                    "description": "Whether to serve only static images as companions.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#companionSetting\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CompatibleFields": {
+            "description": "Represents a response to the queryCompatibleFields method.",
+            "id": "CompatibleFields",
+            "properties": {
+                "crossDimensionReachReportCompatibleFields": {
+                    "$ref": "CrossDimensionReachReportCompatibleFields",
+                    "description": "Contains items that are compatible to be selected for a report of type \"CROSS_DIMENSION_REACH\"."
+                },
+                "floodlightReportCompatibleFields": {
+                    "$ref": "FloodlightReportCompatibleFields",
+                    "description": "Contains items that are compatible to be selected for a report of type \"FLOODLIGHT\"."
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#compatibleFields.",
+                    "type": "string"
+                },
+                "pathAttributionReportCompatibleFields": {
+                    "$ref": "PathReportCompatibleFields",
+                    "description": "Contains items that are compatible to be selected for a report of type \"PATH_ATTRIBUTION\"."
+                },
+                "pathReportCompatibleFields": {
+                    "$ref": "PathReportCompatibleFields",
+                    "description": "Contains items that are compatible to be selected for a report of type \"PATH\"."
+                },
+                "pathToConversionReportCompatibleFields": {
+                    "$ref": "PathToConversionReportCompatibleFields",
+                    "description": "Contains items that are compatible to be selected for a report of type \"PATH_TO_CONVERSION\"."
+                },
+                "reachReportCompatibleFields": {
+                    "$ref": "ReachReportCompatibleFields",
+                    "description": "Contains items that are compatible to be selected for a report of type \"REACH\"."
+                },
+                "reportCompatibleFields": {
+                    "$ref": "ReportCompatibleFields",
+                    "description": "Contains items that are compatible to be selected for a report of type \"STANDARD\"."
+                }
+            },
+            "type": "object"
+        },
+        "ConnectionType": {
+            "description": "Contains information about an internet connection type that can be targeted by ads. Clients can use the connection type to target mobile vs. broadband users.",
+            "id": "ConnectionType",
+            "properties": {
+                "id": {
+                    "description": "ID of this connection type.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#connectionType\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this connection type.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ConnectionTypesListResponse": {
+            "description": "Connection Type List Response",
+            "id": "ConnectionTypesListResponse",
+            "properties": {
+                "connectionTypes": {
+                    "description": "Collection of connection types such as broadband and mobile.",
+                    "items": {
+                        "$ref": "ConnectionType"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#connectionTypesListResponse\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ContentCategoriesListResponse": {
+            "description": "Content Category List Response",
+            "id": "ContentCategoriesListResponse",
+            "properties": {
+                "contentCategories": {
+                    "description": "Content category collection.",
+                    "items": {
+                        "$ref": "ContentCategory"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#contentCategoriesListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ContentCategory": {
+            "description": "Organizes placements according to the contents of their associated webpages.",
+            "id": "ContentCategory",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this content category. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this content category. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#contentCategory\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this content category. This is a required field and must be less than 256 characters long and unique among content categories of the same account.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Conversion": {
+            "description": "A Conversion represents when a user successfully performs a desired action after seeing an ad.",
+            "id": "Conversion",
+            "properties": {
+                "childDirectedTreatment": {
+                    "description": "Whether this particular request may come from a user under the age of 13, under COPPA compliance.",
+                    "type": "boolean"
+                },
+                "customVariables": {
+                    "description": "Custom floodlight variables.",
+                    "items": {
+                        "$ref": "CustomFloodlightVariable"
+                    },
+                    "type": "array"
+                },
+                "dclid": {
+                    "description": "The display click ID. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[], matchId, mobileDeviceId and gclid. This or encryptedUserId or encryptedUserIdCandidates[] or matchId or mobileDeviceId or gclid is a required field.",
+                    "type": "string"
+                },
+                "encryptedUserId": {
+                    "description": "The alphanumeric encrypted user ID. When set, encryptionInfo should also be specified. This field is mutually exclusive with encryptedUserIdCandidates[], matchId, mobileDeviceId, gclid and dclid. This or encryptedUserIdCandidates[] or matchId or mobileDeviceId or gclid or dclid is a required field.",
+                    "type": "string"
+                },
+                "encryptedUserIdCandidates": {
+                    "description": "A list of the alphanumeric encrypted user IDs. Any user ID with exposure prior to the conversion timestamp will be used in the inserted conversion. If no such user ID is found then the conversion will be rejected with INVALID_ARGUMENT error. When set, encryptionInfo should also be specified. This field may only be used when calling batchinsert; it is not supported by batchupdate. This field is mutually exclusive with encryptedUserId, matchId, mobileDeviceId, gclid and dclid. This or encryptedUserId or matchId or mobileDeviceId or gclid or dclid is a required field.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "floodlightActivityId": {
+                    "description": "Floodlight Activity ID of this conversion. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "floodlightConfigurationId": {
+                    "description": "Floodlight Configuration ID of this conversion. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "gclid": {
+                    "description": "The Google click ID. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[], matchId, mobileDeviceId and dclid. This or encryptedUserId or encryptedUserIdCandidates[] or matchId or mobileDeviceId or dclid is a required field.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversion\".",
+                    "type": "string"
+                },
+                "limitAdTracking": {
+                    "description": "Whether Limit Ad Tracking is enabled. When set to true, the conversion will be used for reporting but not targeting. This will prevent remarketing.",
+                    "type": "boolean"
+                },
+                "matchId": {
+                    "description": "The match ID field. A match ID is your own first-party identifier that has been synced with Google using the match ID feature in Floodlight. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[],mobileDeviceId, gclid and dclid. This or encryptedUserId or encryptedUserIdCandidates[] or mobileDeviceId or gclid or dclid is a required field.",
+                    "type": "string"
+                },
+                "mobileDeviceId": {
+                    "description": "The mobile device ID. This field is mutually exclusive with encryptedUserId, encryptedUserIdCandidates[], matchId, gclid and dclid. This or encryptedUserId or encryptedUserIdCandidates[] or matchId or gclid or dclid is a required field.",
+                    "type": "string"
+                },
+                "nonPersonalizedAd": {
+                    "description": "Whether the conversion was for a non personalized ad.",
+                    "type": "boolean"
+                },
+                "ordinal": {
+                    "description": "The ordinal of the conversion. Use this field to control how conversions of the same user and day are de-duplicated. This is a required field.",
+                    "type": "string"
+                },
+                "quantity": {
+                    "description": "The quantity of the conversion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "timestampMicros": {
+                    "description": "The timestamp of conversion, in Unix epoch micros. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "treatmentForUnderage": {
+                    "description": "Whether this particular request may come from a user under the age of 16 (may differ by country), under compliance with the European Union's General Data Protection Regulation (GDPR).",
+                    "type": "boolean"
+                },
+                "value": {
+                    "description": "The value of the conversion.",
+                    "format": "double",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "ConversionError": {
+            "description": "The error code and description for a conversion that failed to insert or update.",
+            "id": "ConversionError",
+            "properties": {
+                "code": {
+                    "description": "The error code.",
+                    "enum": [
+                        "INVALID_ARGUMENT",
+                        "INTERNAL",
+                        "PERMISSION_DENIED",
+                        "NOT_FOUND"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionError\".",
+                    "type": "string"
+                },
+                "message": {
+                    "description": "A description of the error.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ConversionStatus": {
+            "description": "The original conversion that was inserted or updated and whether there were any errors.",
+            "id": "ConversionStatus",
+            "properties": {
+                "conversion": {
+                    "$ref": "Conversion",
+                    "description": "The original conversion that was inserted or updated."
+                },
+                "errors": {
+                    "description": "A list of errors related to this conversion.",
+                    "items": {
+                        "$ref": "ConversionError"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionStatus\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ConversionsBatchInsertRequest": {
+            "description": "Insert Conversions Request.",
+            "id": "ConversionsBatchInsertRequest",
+            "properties": {
+                "conversions": {
+                    "description": "The set of conversions to insert.",
+                    "items": {
+                        "$ref": "Conversion"
+                    },
+                    "type": "array"
+                },
+                "encryptionInfo": {
+                    "$ref": "EncryptionInfo",
+                    "description": "Describes how encryptedUserId or encryptedUserIdCandidates[] is encrypted. This is a required field if encryptedUserId or encryptedUserIdCandidates[] is used."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionsBatchInsertRequest\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ConversionsBatchInsertResponse": {
+            "description": "Insert Conversions Response.",
+            "id": "ConversionsBatchInsertResponse",
+            "properties": {
+                "hasFailures": {
+                    "description": "Indicates that some or all conversions failed to insert.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionsBatchInsertResponse\".",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "The insert status of each conversion. Statuses are returned in the same order that conversions are inserted.",
+                    "items": {
+                        "$ref": "ConversionStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ConversionsBatchUpdateRequest": {
+            "description": "Update Conversions Request.",
+            "id": "ConversionsBatchUpdateRequest",
+            "properties": {
+                "conversions": {
+                    "description": "The set of conversions to update.",
+                    "items": {
+                        "$ref": "Conversion"
+                    },
+                    "type": "array"
+                },
+                "encryptionInfo": {
+                    "$ref": "EncryptionInfo",
+                    "description": "Describes how encryptedUserId is encrypted. This is a required field if encryptedUserId is used."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionsBatchUpdateRequest\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ConversionsBatchUpdateResponse": {
+            "description": "Update Conversions Response.",
+            "id": "ConversionsBatchUpdateResponse",
+            "properties": {
+                "hasFailures": {
+                    "description": "Indicates that some or all conversions failed to update.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#conversionsBatchUpdateResponse\".",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "The update status of each conversion. Statuses are returned in the same order that conversions are updated.",
+                    "items": {
+                        "$ref": "ConversionStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "CountriesListResponse": {
+            "description": "Country List Response",
+            "id": "CountriesListResponse",
+            "properties": {
+                "countries": {
+                    "description": "Country collection.",
+                    "items": {
+                        "$ref": "Country"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#countriesListResponse\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Country": {
+            "description": "Contains information about a country that can be targeted by ads.",
+            "id": "Country",
+            "properties": {
+                "countryCode": {
+                    "description": "Country code.",
+                    "type": "string"
+                },
+                "dartId": {
+                    "description": "DART ID of this country. This is the ID used for targeting and generating reports.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#country\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this country.",
+                    "type": "string"
+                },
+                "sslEnabled": {
+                    "description": "Whether ad serving supports secure servers in this country.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "Creative": {
+            "description": "Contains properties of a Creative.",
+            "id": "Creative",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "active": {
+                    "description": "Whether the creative is active. Applicable to all creative types.",
+                    "type": "boolean"
+                },
+                "adParameters": {
+                    "description": "Ad parameters user for VPAID creative. This is a read-only field. Applicable to the following creative types: all VPAID.",
+                    "type": "string"
+                },
+                "adTagKeys": {
+                    "description": "Keywords for a Rich Media creative. Keywords let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use keywords to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "additionalSizes": {
+                    "description": "Additional sizes associated with a responsive creative. When inserting or updating a creative either the size ID field or size width and height fields can be used. Applicable to DISPLAY creatives when the primary asset type is HTML_IMAGE.",
+                    "items": {
+                        "$ref": "Size"
+                    },
+                    "type": "array"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this creative. This is a required field. Applicable to all creative types.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "allowScriptAccess": {
+                    "description": "Whether script access is allowed for this creative. This is a read-only and deprecated field which will automatically be set to true on update. Applicable to the following creative types: FLASH_INPAGE.",
+                    "type": "boolean"
+                },
+                "archived": {
+                    "description": "Whether the creative is archived. Applicable to all creative types.",
+                    "type": "boolean"
+                },
+                "artworkType": {
+                    "description": "Type of artwork used for the creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
+                    "enum": [
+                        "ARTWORK_TYPE_FLASH",
+                        "ARTWORK_TYPE_HTML5",
+                        "ARTWORK_TYPE_MIXED",
+                        "ARTWORK_TYPE_IMAGE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "authoringSource": {
+                    "description": "Source application where creative was authored. Presently, only DBM authored creatives will have this field set. Applicable to all creative types.",
+                    "enum": [
+                        "CREATIVE_AUTHORING_SOURCE_DCM",
+                        "CREATIVE_AUTHORING_SOURCE_DBM",
+                        "CREATIVE_AUTHORING_SOURCE_STUDIO",
+                        "CREATIVE_AUTHORING_SOURCE_GWD"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "authoringTool": {
+                    "description": "Authoring tool for HTML5 banner creatives. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.",
+                    "enum": [
+                        "NINJA",
+                        "SWIFFY"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "autoAdvanceImages": {
+                    "description": "Whether images are automatically advanced for image gallery creatives. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY.",
+                    "type": "boolean"
+                },
+                "backgroundColor": {
+                    "description": "The 6-character HTML color code, beginning with #, for the background of the window area where the Flash file is displayed. Default is white. Applicable to the following creative types: FLASH_INPAGE.",
+                    "type": "string"
+                },
+                "backupImageClickThroughUrl": {
+                    "$ref": "CreativeClickThroughUrl",
+                    "description": "Click-through URL for backup image. Applicable to ENHANCED_BANNER when the primary asset type is not HTML_IMAGE."
+                },
+                "backupImageFeatures": {
+                    "description": "List of feature dependencies that will cause a backup image to be served if the browser that serves the ad does not support them. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative asset correctly. This field is initially auto-generated to contain all features detected by Campaign Manager for all the assets of this creative and can then be modified by the client. To reset this field, copy over all the creativeAssets' detected features. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
+                    "items": {
+                        "enum": [
+                            "CSS_FONT_FACE",
+                            "CSS_BACKGROUND_SIZE",
+                            "CSS_BORDER_IMAGE",
+                            "CSS_BORDER_RADIUS",
+                            "CSS_BOX_SHADOW",
+                            "CSS_FLEX_BOX",
+                            "CSS_HSLA",
+                            "CSS_MULTIPLE_BGS",
+                            "CSS_OPACITY",
+                            "CSS_RGBA",
+                            "CSS_TEXT_SHADOW",
+                            "CSS_ANIMATIONS",
+                            "CSS_COLUMNS",
+                            "CSS_GENERATED_CONTENT",
+                            "CSS_GRADIENTS",
+                            "CSS_REFLECTIONS",
+                            "CSS_TRANSFORMS",
+                            "CSS_TRANSFORMS3D",
+                            "CSS_TRANSITIONS",
+                            "APPLICATION_CACHE",
+                            "CANVAS",
+                            "CANVAS_TEXT",
+                            "DRAG_AND_DROP",
+                            "HASH_CHANGE",
+                            "HISTORY",
+                            "AUDIO",
+                            "VIDEO",
+                            "INDEXED_DB",
+                            "INPUT_ATTR_AUTOCOMPLETE",
+                            "INPUT_ATTR_AUTOFOCUS",
+                            "INPUT_ATTR_LIST",
+                            "INPUT_ATTR_PLACEHOLDER",
+                            "INPUT_ATTR_MAX",
+                            "INPUT_ATTR_MIN",
+                            "INPUT_ATTR_MULTIPLE",
+                            "INPUT_ATTR_PATTERN",
+                            "INPUT_ATTR_REQUIRED",
+                            "INPUT_ATTR_STEP",
+                            "INPUT_TYPE_SEARCH",
+                            "INPUT_TYPE_TEL",
+                            "INPUT_TYPE_URL",
+                            "INPUT_TYPE_EMAIL",
+                            "INPUT_TYPE_DATETIME",
+                            "INPUT_TYPE_DATE",
+                            "INPUT_TYPE_MONTH",
+                            "INPUT_TYPE_WEEK",
+                            "INPUT_TYPE_TIME",
+                            "INPUT_TYPE_DATETIME_LOCAL",
+                            "INPUT_TYPE_NUMBER",
+                            "INPUT_TYPE_RANGE",
+                            "INPUT_TYPE_COLOR",
+                            "LOCAL_STORAGE",
+                            "POST_MESSAGE",
+                            "SESSION_STORAGE",
+                            "WEB_SOCKETS",
+                            "WEB_SQL_DATABASE",
+                            "WEB_WORKERS",
+                            "GEO_LOCATION",
+                            "INLINE_SVG",
+                            "SMIL",
+                            "SVG_HREF",
+                            "SVG_CLIP_PATHS",
+                            "TOUCH",
+                            "WEBGL",
+                            "SVG_FILTERS",
+                            "SVG_FE_IMAGE"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "backupImageReportingLabel": {
+                    "description": "Reporting label used for HTML5 banner backup image. Applicable to the following creative types: DISPLAY when the primary asset type is not HTML_IMAGE.",
+                    "type": "string"
+                },
+                "backupImageTargetWindow": {
+                    "$ref": "TargetWindow",
+                    "description": "Target window for backup image. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE."
+                },
+                "clickTags": {
+                    "description": "Click tags of the creative. For DISPLAY, FLASH_INPAGE, and HTML5_BANNER creatives, this is a subset of detected click tags for the assets associated with this creative. After creating a flash asset, detected click tags will be returned in the creativeAssetMetadata. When inserting the creative, populate the creative clickTags field using the creativeAssetMetadata.clickTags field. For DISPLAY_IMAGE_GALLERY creatives, there should be exactly one entry in this list for each image creative asset. A click tag is matched with a corresponding creative asset by matching the clickTag.name field with the creativeAsset.assetIdentifier.name field. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
+                    "items": {
+                        "$ref": "ClickTag"
+                    },
+                    "type": "array"
+                },
+                "commercialId": {
+                    "description": "Industry standard ID assigned to creative for reach and frequency. Applicable to INSTREAM_VIDEO_REDIRECT creatives.",
+                    "type": "string"
+                },
+                "companionCreatives": {
+                    "description": "List of companion creatives assigned to an in-Stream video creative. Acceptable values include IDs of existing flash and image creatives. Applicable to the following creative types: all VPAID, all INSTREAM_AUDIO and all INSTREAM_VIDEO with dynamicAssetSelection set to false.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "compatibility": {
+                    "description": "Compatibilities associated with this creative. This is a read-only field. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are for rendering in mobile apps. Only pre-existing creatives may have these compatibilities since new creatives will either be assigned DISPLAY or DISPLAY_INTERSTITIAL instead. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. IN_STREAM_AUDIO refers to rendering in in-stream audio ads developed with the VAST standard. Applicable to all creative types. Acceptable values are: - \"APP\" - \"APP_INTERSTITIAL\" - \"IN_STREAM_VIDEO\" - \"IN_STREAM_AUDIO\" - \"DISPLAY\" - \"DISPLAY_INTERSTITIAL\" ",
+                    "items": {
+                        "enum": [
+                            "DISPLAY",
+                            "DISPLAY_INTERSTITIAL",
+                            "APP",
+                            "APP_INTERSTITIAL",
+                            "IN_STREAM_VIDEO",
+                            "IN_STREAM_AUDIO"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "convertFlashToHtml5": {
+                    "description": "Whether Flash assets associated with the creative need to be automatically converted to HTML5. This flag is enabled by default and users can choose to disable it if they don't want the system to generate and use HTML5 asset for this creative. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
+                    "type": "boolean"
+                },
+                "counterCustomEvents": {
+                    "description": "List of counter events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID.",
+                    "items": {
+                        "$ref": "CreativeCustomEvent"
+                    },
+                    "type": "array"
+                },
+                "creativeAssetSelection": {
+                    "$ref": "CreativeAssetSelection",
+                    "description": "Required if dynamicAssetSelection is true."
+                },
+                "creativeAssets": {
+                    "description": "Assets associated with a creative. Applicable to all but the following creative types: INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and REDIRECT",
+                    "items": {
+                        "$ref": "CreativeAsset"
+                    },
+                    "type": "array"
+                },
+                "creativeFieldAssignments": {
+                    "description": "Creative field assignments for this creative. Applicable to all creative types.",
+                    "items": {
+                        "$ref": "CreativeFieldAssignment"
+                    },
+                    "type": "array"
+                },
+                "customKeyValues": {
+                    "description": "Custom key-values for a Rich Media creative. Key-values let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use key-values to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "dynamicAssetSelection": {
+                    "description": "Set this to true to enable the use of rules to target individual assets in this creative. When set to true creativeAssetSelection must be set. This also controls asset-level companions. When this is true, companion creatives should be assigned to creative assets. Learn more. Applicable to INSTREAM_VIDEO creatives.",
+                    "type": "boolean"
+                },
+                "exitCustomEvents": {
+                    "description": "List of exit events configured for the creative. For DISPLAY and DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags, For DISPLAY, an event is also created from the backupImageReportingLabel. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
+                    "items": {
+                        "$ref": "CreativeCustomEvent"
+                    },
+                    "type": "array"
+                },
+                "fsCommand": {
+                    "$ref": "FsCommand",
+                    "description": "OpenWindow FSCommand of this creative. This lets the SWF file communicate with either Flash Player or the program hosting Flash Player, such as a web browser. This is only triggered if allowScriptAccess field is true. Applicable to the following creative types: FLASH_INPAGE."
+                },
+                "htmlCode": {
+                    "description": "HTML code for the creative. This is a required field when applicable. This field is ignored if htmlCodeLocked is true. Applicable to the following creative types: all CUSTOM, FLASH_INPAGE, and HTML5_BANNER, and all RICH_MEDIA.",
+                    "type": "string"
+                },
+                "htmlCodeLocked": {
+                    "description": "Whether HTML code is generated by Campaign Manager or manually entered. Set to true to ignore changes to htmlCode. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "ID of this creative. This is a read-only, auto-generated field. Applicable to all creative types.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this creative. This is a read-only field. Applicable to all creative types."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creative\".",
+                    "type": "string"
+                },
+                "lastModifiedInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Creative last modification information. This is a read-only field. Applicable to all creative types."
+                },
+                "latestTraffickedCreativeId": {
+                    "description": "Latest Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "mediaDescription": {
+                    "description": "Description of the audio or video ad. Applicable to the following creative types: all INSTREAM_VIDEO, INSTREAM_AUDIO, and all VPAID.",
+                    "type": "string"
+                },
+                "mediaDuration": {
+                    "description": "Creative audio or video duration in seconds. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO, INSTREAM_AUDIO, all RICH_MEDIA, and all VPAID.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "name": {
+                    "description": "Name of the creative. This is a required field and must be less than 256 characters long. Applicable to all creative types.",
+                    "type": "string"
+                },
+                "obaIcon": {
+                    "$ref": "ObaIcon",
+                    "description": "Online behavioral advertising icon to be added to the creative. Applicable to the following creative types: all INSTREAM_VIDEO."
+                },
+                "overrideCss": {
+                    "description": "Override CSS value for rich media creatives. Applicable to the following creative types: all RICH_MEDIA.",
+                    "type": "string"
+                },
+                "progressOffset": {
+                    "$ref": "VideoOffset",
+                    "description": "Amount of time to play the video before counting a view. Applicable to the following creative types: all INSTREAM_VIDEO."
+                },
+                "redirectUrl": {
+                    "description": "URL of hosted image or hosted video or another ad tag. For INSTREAM_VIDEO_REDIRECT creatives this is the in-stream video redirect URL. The standard for a VAST (Video Ad Serving Template) ad response allows for a redirect link to another VAST 2.0 or 3.0 call. This is a required field when applicable. Applicable to the following creative types: DISPLAY_REDIRECT, INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO_REDIRECT",
+                    "type": "string"
+                },
+                "renderingId": {
+                    "description": "ID of current rendering version. This is a read-only field. Applicable to all creative types.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "renderingIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the rendering ID of this creative. This is a read-only field. Applicable to all creative types."
+                },
+                "requiredFlashPluginVersion": {
+                    "description": "The minimum required Flash plugin version for this creative. For example, 11.2.202.235. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
+                    "type": "string"
+                },
+                "requiredFlashVersion": {
+                    "description": "The internal Flash version for this creative as calculated by Studio. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "size": {
+                    "$ref": "Size",
+                    "description": "Size associated with this creative. When inserting or updating a creative either the size ID field or size width and height fields can be used. This is a required field when applicable; however for IMAGE, FLASH_INPAGE creatives, and for DISPLAY creatives with a primary asset of type HTML_IMAGE, if left blank, this field will be automatically set using the actual size of the associated image assets. Applicable to the following creative types: DISPLAY, DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA."
+                },
+                "skipOffset": {
+                    "$ref": "VideoOffset",
+                    "description": "Amount of time to play the video before the skip button appears. Applicable to the following creative types: all INSTREAM_VIDEO."
+                },
+                "skippable": {
+                    "description": "Whether the user can choose to skip the creative. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.",
+                    "type": "boolean"
+                },
+                "sslCompliant": {
+                    "description": "Whether the creative is SSL-compliant. This is a read-only field. Applicable to all creative types.",
+                    "type": "boolean"
+                },
+                "sslOverride": {
+                    "description": "Whether creative should be treated as SSL compliant even if the system scan shows it's not. Applicable to all creative types.",
+                    "type": "boolean"
+                },
+                "studioAdvertiserId": {
+                    "description": "Studio advertiser ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "studioCreativeId": {
+                    "description": "Studio creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "studioTraffickedCreativeId": {
+                    "description": "Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "thirdPartyBackupImageImpressionsUrl": {
+                    "description": "Third-party URL used to record backup image impressions. Applicable to the following creative types: all RICH_MEDIA.",
+                    "type": "string"
+                },
+                "thirdPartyRichMediaImpressionsUrl": {
+                    "description": "Third-party URL used to record rich media impressions. Applicable to the following creative types: all RICH_MEDIA.",
+                    "type": "string"
+                },
+                "thirdPartyUrls": {
+                    "description": "Third-party URLs for tracking in-stream creative events. Applicable to the following creative types: all INSTREAM_VIDEO, all INSTREAM_AUDIO, and all VPAID.",
+                    "items": {
+                        "$ref": "ThirdPartyTrackingUrl"
+                    },
+                    "type": "array"
+                },
+                "timerCustomEvents": {
+                    "description": "List of timer events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset is not HTML_IMAGE.",
+                    "items": {
+                        "$ref": "CreativeCustomEvent"
+                    },
+                    "type": "array"
+                },
+                "totalFileSize": {
+                    "description": "Combined size of all creative assets. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Type of this creative. This is a required field. Applicable to all creative types. *Note:* FLASH_INPAGE, HTML5_BANNER, and IMAGE are only used for existing creatives. New creatives should use DISPLAY as a replacement for these types.",
+                    "enum": [
+                        "IMAGE",
+                        "DISPLAY_REDIRECT",
+                        "CUSTOM_DISPLAY",
+                        "INTERNAL_REDIRECT",
+                        "CUSTOM_DISPLAY_INTERSTITIAL",
+                        "INTERSTITIAL_INTERNAL_REDIRECT",
+                        "TRACKING_TEXT",
+                        "RICH_MEDIA_DISPLAY_BANNER",
+                        "RICH_MEDIA_INPAGE_FLOATING",
+                        "RICH_MEDIA_IM_EXPAND",
+                        "RICH_MEDIA_DISPLAY_EXPANDING",
+                        "RICH_MEDIA_DISPLAY_INTERSTITIAL",
+                        "RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL",
+                        "RICH_MEDIA_MOBILE_IN_APP",
+                        "FLASH_INPAGE",
+                        "INSTREAM_VIDEO",
+                        "VPAID_LINEAR_VIDEO",
+                        "VPAID_NON_LINEAR_VIDEO",
+                        "INSTREAM_VIDEO_REDIRECT",
+                        "RICH_MEDIA_PEEL_DOWN",
+                        "HTML5_BANNER",
+                        "DISPLAY",
+                        "DISPLAY_IMAGE_GALLERY",
+                        "BRAND_SAFE_DEFAULT_INSTREAM_VIDEO",
+                        "INSTREAM_AUDIO"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "universalAdId": {
+                    "$ref": "UniversalAdId",
+                    "description": "A Universal Ad ID as per the VAST 4.0 spec. Applicable to the following creative types: INSTREAM_AUDIO and INSTREAM_VIDEO and VPAID."
+                },
+                "version": {
+                    "description": "The version number helps you keep track of multiple versions of your creative in your reports. The version number will always be auto-generated during insert operations to start at 1. For tracking creatives the version cannot be incremented and will always remain at 1. For all other creative types the version can be incremented only by 1 during update operations. In addition, the version will be automatically incremented by 1 when undergoing Rich Media creative merging. Applicable to all creative types.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeAsset": {
+            "description": "Creative Asset.",
+            "id": "CreativeAsset",
+            "properties": {
+                "actionScript3": {
+                    "description": "Whether ActionScript3 is enabled for the flash asset. This is a read-only field. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
+                    "type": "boolean"
+                },
+                "active": {
+                    "description": "Whether the video or audio asset is active. This is a read-only field for VPAID_NON_LINEAR_VIDEO assets. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID.",
+                    "type": "boolean"
+                },
+                "additionalSizes": {
+                    "description": "Additional sizes associated with this creative asset. HTML5 asset generated by compatible software such as GWD will be able to support more sizes this creative asset can render.",
+                    "items": {
+                        "$ref": "Size"
+                    },
+                    "type": "array"
+                },
+                "alignment": {
+                    "description": "Possible alignments for an asset. This is a read-only field. Applicable to the following creative types: RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL .",
+                    "enum": [
+                        "ALIGNMENT_TOP",
+                        "ALIGNMENT_RIGHT",
+                        "ALIGNMENT_BOTTOM",
+                        "ALIGNMENT_LEFT"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "artworkType": {
+                    "description": "Artwork type of rich media creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.",
+                    "enum": [
+                        "ARTWORK_TYPE_FLASH",
+                        "ARTWORK_TYPE_HTML5",
+                        "ARTWORK_TYPE_MIXED",
+                        "ARTWORK_TYPE_IMAGE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "assetIdentifier": {
+                    "$ref": "CreativeAssetId",
+                    "description": "Identifier of this asset. This is the same identifier returned during creative asset insert operation. This is a required field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT."
+                },
+                "audioBitRate": {
+                    "description": "Audio stream bit rate in kbps. This is a read-only field. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "audioSampleRate": {
+                    "description": "Audio sample bit rate in hertz. This is a read-only field. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "backupImageExit": {
+                    "$ref": "CreativeCustomEvent",
+                    "description": "Exit event configured for the backup image. Applicable to the following creative types: all RICH_MEDIA."
+                },
+                "bitRate": {
+                    "description": "Detected bit-rate for audio or video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "childAssetType": {
+                    "description": "Rich media child asset type. This is a read-only field. Applicable to the following creative types: all VPAID.",
+                    "enum": [
+                        "CHILD_ASSET_TYPE_FLASH",
+                        "CHILD_ASSET_TYPE_VIDEO",
+                        "CHILD_ASSET_TYPE_IMAGE",
+                        "CHILD_ASSET_TYPE_DATA"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "collapsedSize": {
+                    "$ref": "Size",
+                    "description": "Size of an asset when collapsed. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN."
+                },
+                "companionCreativeIds": {
+                    "description": "List of companion creatives assigned to an in-stream video creative asset. Acceptable values include IDs of existing flash and image creatives. Applicable to INSTREAM_VIDEO creative type with dynamicAssetSelection set to true.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "customStartTimeValue": {
+                    "description": "Custom start time in seconds for making the asset visible. Applicable to the following creative types: all RICH_MEDIA. Value must be greater than or equal to 0.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "detectedFeatures": {
+                    "description": "List of feature dependencies for the creative asset that are detected by Campaign Manager. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative correctly. This is a read-only, auto-generated field. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
+                    "items": {
+                        "enum": [
+                            "CSS_FONT_FACE",
+                            "CSS_BACKGROUND_SIZE",
+                            "CSS_BORDER_IMAGE",
+                            "CSS_BORDER_RADIUS",
+                            "CSS_BOX_SHADOW",
+                            "CSS_FLEX_BOX",
+                            "CSS_HSLA",
+                            "CSS_MULTIPLE_BGS",
+                            "CSS_OPACITY",
+                            "CSS_RGBA",
+                            "CSS_TEXT_SHADOW",
+                            "CSS_ANIMATIONS",
+                            "CSS_COLUMNS",
+                            "CSS_GENERATED_CONTENT",
+                            "CSS_GRADIENTS",
+                            "CSS_REFLECTIONS",
+                            "CSS_TRANSFORMS",
+                            "CSS_TRANSFORMS3D",
+                            "CSS_TRANSITIONS",
+                            "APPLICATION_CACHE",
+                            "CANVAS",
+                            "CANVAS_TEXT",
+                            "DRAG_AND_DROP",
+                            "HASH_CHANGE",
+                            "HISTORY",
+                            "AUDIO",
+                            "VIDEO",
+                            "INDEXED_DB",
+                            "INPUT_ATTR_AUTOCOMPLETE",
+                            "INPUT_ATTR_AUTOFOCUS",
+                            "INPUT_ATTR_LIST",
+                            "INPUT_ATTR_PLACEHOLDER",
+                            "INPUT_ATTR_MAX",
+                            "INPUT_ATTR_MIN",
+                            "INPUT_ATTR_MULTIPLE",
+                            "INPUT_ATTR_PATTERN",
+                            "INPUT_ATTR_REQUIRED",
+                            "INPUT_ATTR_STEP",
+                            "INPUT_TYPE_SEARCH",
+                            "INPUT_TYPE_TEL",
+                            "INPUT_TYPE_URL",
+                            "INPUT_TYPE_EMAIL",
+                            "INPUT_TYPE_DATETIME",
+                            "INPUT_TYPE_DATE",
+                            "INPUT_TYPE_MONTH",
+                            "INPUT_TYPE_WEEK",
+                            "INPUT_TYPE_TIME",
+                            "INPUT_TYPE_DATETIME_LOCAL",
+                            "INPUT_TYPE_NUMBER",
+                            "INPUT_TYPE_RANGE",
+                            "INPUT_TYPE_COLOR",
+                            "LOCAL_STORAGE",
+                            "POST_MESSAGE",
+                            "SESSION_STORAGE",
+                            "WEB_SOCKETS",
+                            "WEB_SQL_DATABASE",
+                            "WEB_WORKERS",
+                            "GEO_LOCATION",
+                            "INLINE_SVG",
+                            "SMIL",
+                            "SVG_HREF",
+                            "SVG_CLIP_PATHS",
+                            "TOUCH",
+                            "WEBGL",
+                            "SVG_FILTERS",
+                            "SVG_FE_IMAGE"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "displayType": {
+                    "description": "Type of rich media asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.",
+                    "enum": [
+                        "ASSET_DISPLAY_TYPE_INPAGE",
+                        "ASSET_DISPLAY_TYPE_FLOATING",
+                        "ASSET_DISPLAY_TYPE_OVERLAY",
+                        "ASSET_DISPLAY_TYPE_EXPANDING",
+                        "ASSET_DISPLAY_TYPE_FLASH_IN_FLASH",
+                        "ASSET_DISPLAY_TYPE_FLASH_IN_FLASH_EXPANDING",
+                        "ASSET_DISPLAY_TYPE_PEEL_DOWN",
+                        "ASSET_DISPLAY_TYPE_VPAID_LINEAR",
+                        "ASSET_DISPLAY_TYPE_VPAID_NON_LINEAR",
+                        "ASSET_DISPLAY_TYPE_BACKDROP"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "duration": {
+                    "description": "Duration in seconds for which an asset will be displayed. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and VPAID_LINEAR_VIDEO. Value must be greater than or equal to 1.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "durationType": {
+                    "description": "Duration type for which an asset will be displayed. Applicable to the following creative types: all RICH_MEDIA.",
+                    "enum": [
+                        "ASSET_DURATION_TYPE_AUTO",
+                        "ASSET_DURATION_TYPE_NONE",
+                        "ASSET_DURATION_TYPE_CUSTOM"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "expandedDimension": {
+                    "$ref": "Size",
+                    "description": "Detected expanded dimension for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID."
+                },
+                "fileSize": {
+                    "description": "File size associated with this creative asset. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "flashVersion": {
+                    "description": "Flash version of the asset. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "frameRate": {
+                    "description": "Video frame rate for video asset in frames per second. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "hideFlashObjects": {
+                    "description": "Whether to hide Flash objects flag for an asset. Applicable to the following creative types: all RICH_MEDIA.",
+                    "type": "boolean"
+                },
+                "hideSelectionBoxes": {
+                    "description": "Whether to hide selection boxes flag for an asset. Applicable to the following creative types: all RICH_MEDIA.",
+                    "type": "boolean"
+                },
+                "horizontallyLocked": {
+                    "description": "Whether the asset is horizontally locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "Numeric ID of this creative asset. This is a required field and should not be modified. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the asset. This is a read-only, auto-generated field."
+                },
+                "mediaDuration": {
+                    "description": "Detected duration for audio or video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "mimeType": {
+                    "description": "Detected MIME type for audio or video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and all VPAID.",
+                    "type": "string"
+                },
+                "offset": {
+                    "$ref": "OffsetPosition",
+                    "description": "Offset position for an asset in collapsed mode. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, only applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN."
+                },
+                "orientation": {
+                    "description": "Orientation of video asset. This is a read-only, auto-generated field.",
+                    "enum": [
+                        "LANDSCAPE",
+                        "PORTRAIT",
+                        "SQUARE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "originalBackup": {
+                    "description": "Whether the backup asset is original or changed by the user in Campaign Manager. Applicable to the following creative types: all RICH_MEDIA.",
+                    "type": "boolean"
+                },
+                "politeLoad": {
+                    "description": "Whether this asset is used as a polite load asset.",
+                    "type": "boolean"
+                },
+                "position": {
+                    "$ref": "OffsetPosition",
+                    "description": "Offset position for an asset. Applicable to the following creative types: all RICH_MEDIA."
+                },
+                "positionLeftUnit": {
+                    "description": "Offset left unit for an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.",
+                    "enum": [
+                        "OFFSET_UNIT_PIXEL",
+                        "OFFSET_UNIT_PERCENT",
+                        "OFFSET_UNIT_PIXEL_FROM_CENTER"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "positionTopUnit": {
+                    "description": "Offset top unit for an asset. This is a read-only field if the asset displayType is ASSET_DISPLAY_TYPE_OVERLAY. Applicable to the following creative types: all RICH_MEDIA.",
+                    "enum": [
+                        "OFFSET_UNIT_PIXEL",
+                        "OFFSET_UNIT_PERCENT",
+                        "OFFSET_UNIT_PIXEL_FROM_CENTER"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "progressiveServingUrl": {
+                    "description": "Progressive URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.",
+                    "type": "string"
+                },
+                "pushdown": {
+                    "description": "Whether the asset pushes down other content. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable when the asset offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height.",
+                    "type": "boolean"
+                },
+                "pushdownDuration": {
+                    "description": "Pushdown duration in seconds for an asset. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable when the asset pushdown field is true, the offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height. Acceptable values are 0 to 9.99, inclusive.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "role": {
+                    "description": "Role of the asset in relation to creative. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT. This is a required field. PRIMARY applies to DISPLAY, FLASH_INPAGE, HTML5_BANNER, IMAGE, DISPLAY_IMAGE_GALLERY, all RICH_MEDIA (which may contain multiple primary assets), and all VPAID creatives. BACKUP_IMAGE applies to FLASH_INPAGE, HTML5_BANNER, all RICH_MEDIA, and all VPAID creatives. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE. ADDITIONAL_IMAGE and ADDITIONAL_FLASH apply to FLASH_INPAGE creatives. OTHER refers to assets from sources other than Campaign Manager, such as Studio uploaded assets, applicable to all RICH_MEDIA and all VPAID creatives. PARENT_VIDEO refers to videos uploaded by the user in Campaign Manager and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives. TRANSCODED_VIDEO refers to videos transcoded by Campaign Manager from PARENT_VIDEO assets and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives. ALTERNATE_VIDEO refers to the Campaign Manager representation of child asset videos from Studio, and is applicable to VPAID_LINEAR_VIDEO creatives. These cannot be added or removed within Campaign Manager. For VPAID_LINEAR_VIDEO creatives, PARENT_VIDEO, TRANSCODED_VIDEO and ALTERNATE_VIDEO assets that are marked active serve as backup in case the VPAID creative cannot be served. Only PARENT_VIDEO assets can be added or removed for an INSTREAM_VIDEO or VPAID_LINEAR_VIDEO creative. PARENT_AUDIO refers to audios uploaded by the user in Campaign Manager and is applicable to INSTREAM_AUDIO creatives. TRANSCODED_AUDIO refers to audios transcoded by Campaign Manager from PARENT_AUDIO assets and is applicable to INSTREAM_AUDIO creatives. ",
+                    "enum": [
+                        "PRIMARY",
+                        "BACKUP_IMAGE",
+                        "ADDITIONAL_IMAGE",
+                        "ADDITIONAL_FLASH",
+                        "PARENT_VIDEO",
+                        "TRANSCODED_VIDEO",
+                        "OTHER",
+                        "ALTERNATE_VIDEO",
+                        "PARENT_AUDIO",
+                        "TRANSCODED_AUDIO"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "size": {
+                    "$ref": "Size",
+                    "description": "Size associated with this creative asset. This is a required field when applicable; however for IMAGE and FLASH_INPAGE, creatives if left blank, this field will be automatically set using the actual size of the associated image asset. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE."
+                },
+                "sslCompliant": {
+                    "description": "Whether the asset is SSL-compliant. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.",
+                    "type": "boolean"
+                },
+                "startTimeType": {
+                    "description": "Initial wait time type before making the asset visible. Applicable to the following creative types: all RICH_MEDIA.",
+                    "enum": [
+                        "ASSET_START_TIME_TYPE_NONE",
+                        "ASSET_START_TIME_TYPE_CUSTOM"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "streamingServingUrl": {
+                    "description": "Streaming URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.",
+                    "type": "string"
+                },
+                "transparency": {
+                    "description": "Whether the asset is transparent. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable to HTML5 assets.",
+                    "type": "boolean"
+                },
+                "verticallyLocked": {
+                    "description": "Whether the asset is vertically locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.",
+                    "type": "boolean"
+                },
+                "windowMode": {
+                    "description": "Window mode options for flash assets. Applicable to the following creative types: FLASH_INPAGE, RICH_MEDIA_DISPLAY_EXPANDING, RICH_MEDIA_IM_EXPAND, RICH_MEDIA_DISPLAY_BANNER, and RICH_MEDIA_INPAGE_FLOATING.",
+                    "enum": [
+                        "OPAQUE",
+                        "WINDOW",
+                        "TRANSPARENT"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "zIndex": {
+                    "description": "zIndex value of an asset. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable to assets whose displayType is NOT one of the following types: ASSET_DISPLAY_TYPE_INPAGE or ASSET_DISPLAY_TYPE_OVERLAY. Acceptable values are -999999999 to 999999999, inclusive.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "zipFilename": {
+                    "description": "File name of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.",
+                    "type": "string"
+                },
+                "zipFilesize": {
+                    "description": "Size of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeAssetId": {
+            "description": "Creative Asset ID.",
+            "id": "CreativeAssetId",
+            "properties": {
+                "name": {
+                    "description": "Name of the creative asset. This is a required field while inserting an asset. After insertion, this assetIdentifier is used to identify the uploaded asset. Characters in the name must be alphanumeric or one of the following: \".-_ \". Spaces are allowed.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Type of asset to upload. This is a required field. FLASH and IMAGE are no longer supported for new uploads. All image assets should use HTML_IMAGE.",
+                    "enum": [
+                        "IMAGE",
+                        "FLASH",
+                        "VIDEO",
+                        "HTML",
+                        "HTML_IMAGE",
+                        "AUDIO"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeAssetMetadata": {
+            "description": "CreativeAssets contains properties of a creative asset file which will be uploaded or has already been uploaded. Refer to the creative sample code for how to upload assets and insert a creative.",
+            "id": "CreativeAssetMetadata",
+            "properties": {
+                "assetIdentifier": {
+                    "$ref": "CreativeAssetId",
+                    "description": "ID of the creative asset. This is a required field."
+                },
+                "clickTags": {
+                    "description": "List of detected click tags for assets. This is a read-only, auto-generated field. This field is empty for a rich media asset.",
+                    "items": {
+                        "$ref": "ClickTag"
+                    },
+                    "type": "array"
+                },
+                "counterCustomEvents": {
+                    "description": "List of counter events configured for the asset. This is a read-only, auto-generated field and only applicable to a rich media asset.",
+                    "items": {
+                        "$ref": "CreativeCustomEvent"
+                    },
+                    "type": "array"
+                },
+                "detectedFeatures": {
+                    "description": "List of feature dependencies for the creative asset that are detected by Campaign Manager. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative correctly. This is a read-only, auto-generated field.",
+                    "items": {
+                        "enum": [
+                            "CSS_FONT_FACE",
+                            "CSS_BACKGROUND_SIZE",
+                            "CSS_BORDER_IMAGE",
+                            "CSS_BORDER_RADIUS",
+                            "CSS_BOX_SHADOW",
+                            "CSS_FLEX_BOX",
+                            "CSS_HSLA",
+                            "CSS_MULTIPLE_BGS",
+                            "CSS_OPACITY",
+                            "CSS_RGBA",
+                            "CSS_TEXT_SHADOW",
+                            "CSS_ANIMATIONS",
+                            "CSS_COLUMNS",
+                            "CSS_GENERATED_CONTENT",
+                            "CSS_GRADIENTS",
+                            "CSS_REFLECTIONS",
+                            "CSS_TRANSFORMS",
+                            "CSS_TRANSFORMS3D",
+                            "CSS_TRANSITIONS",
+                            "APPLICATION_CACHE",
+                            "CANVAS",
+                            "CANVAS_TEXT",
+                            "DRAG_AND_DROP",
+                            "HASH_CHANGE",
+                            "HISTORY",
+                            "AUDIO",
+                            "VIDEO",
+                            "INDEXED_DB",
+                            "INPUT_ATTR_AUTOCOMPLETE",
+                            "INPUT_ATTR_AUTOFOCUS",
+                            "INPUT_ATTR_LIST",
+                            "INPUT_ATTR_PLACEHOLDER",
+                            "INPUT_ATTR_MAX",
+                            "INPUT_ATTR_MIN",
+                            "INPUT_ATTR_MULTIPLE",
+                            "INPUT_ATTR_PATTERN",
+                            "INPUT_ATTR_REQUIRED",
+                            "INPUT_ATTR_STEP",
+                            "INPUT_TYPE_SEARCH",
+                            "INPUT_TYPE_TEL",
+                            "INPUT_TYPE_URL",
+                            "INPUT_TYPE_EMAIL",
+                            "INPUT_TYPE_DATETIME",
+                            "INPUT_TYPE_DATE",
+                            "INPUT_TYPE_MONTH",
+                            "INPUT_TYPE_WEEK",
+                            "INPUT_TYPE_TIME",
+                            "INPUT_TYPE_DATETIME_LOCAL",
+                            "INPUT_TYPE_NUMBER",
+                            "INPUT_TYPE_RANGE",
+                            "INPUT_TYPE_COLOR",
+                            "LOCAL_STORAGE",
+                            "POST_MESSAGE",
+                            "SESSION_STORAGE",
+                            "WEB_SOCKETS",
+                            "WEB_SQL_DATABASE",
+                            "WEB_WORKERS",
+                            "GEO_LOCATION",
+                            "INLINE_SVG",
+                            "SMIL",
+                            "SVG_HREF",
+                            "SVG_CLIP_PATHS",
+                            "TOUCH",
+                            "WEBGL",
+                            "SVG_FILTERS",
+                            "SVG_FE_IMAGE"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "exitCustomEvents": {
+                    "description": "List of exit events configured for the asset. This is a read-only, auto-generated field and only applicable to a rich media asset.",
+                    "items": {
+                        "$ref": "CreativeCustomEvent"
+                    },
+                    "type": "array"
+                },
+                "id": {
+                    "description": "Numeric ID of the asset. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the numeric ID of the asset. This is a read-only, auto-generated field."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeAssetMetadata\".",
+                    "type": "string"
+                },
+                "richMedia": {
+                    "description": "True if the uploaded asset is a rich media asset. This is a read-only, auto-generated field.",
+                    "type": "boolean"
+                },
+                "timerCustomEvents": {
+                    "description": "List of timer events configured for the asset. This is a read-only, auto-generated field and only applicable to a rich media asset.",
+                    "items": {
+                        "$ref": "CreativeCustomEvent"
+                    },
+                    "type": "array"
+                },
+                "warnedValidationRules": {
+                    "description": "Rules validated during code generation that generated a warning. This is a read-only, auto-generated field. Possible values are: - \"ADMOB_REFERENCED\" - \"ASSET_FORMAT_UNSUPPORTED_DCM\" - \"ASSET_INVALID\" - \"CLICK_TAG_HARD_CODED\" - \"CLICK_TAG_INVALID\" - \"CLICK_TAG_IN_GWD\" - \"CLICK_TAG_MISSING\" - \"CLICK_TAG_MORE_THAN_ONE\" - \"CLICK_TAG_NON_TOP_LEVEL\" - \"COMPONENT_UNSUPPORTED_DCM\" - \"ENABLER_UNSUPPORTED_METHOD_DCM\" - \"EXTERNAL_FILE_REFERENCED\" - \"FILE_DETAIL_EMPTY\" - \"FILE_TYPE_INVALID\" - \"GWD_PROPERTIES_INVALID\" - \"HTML5_FEATURE_UNSUPPORTED\" - \"LINKED_FILE_NOT_FOUND\" - \"MAX_FLASH_VERSION_11\" - \"MRAID_REFERENCED\" - \"NOT_SSL_COMPLIANT\" - \"ORPHANED_ASSET\" - \"PRIMARY_HTML_MISSING\" - \"SVG_INVALID\" - \"ZIP_INVALID\" ",
+                    "items": {
+                        "enum": [
+                            "CLICK_TAG_NON_TOP_LEVEL",
+                            "CLICK_TAG_MISSING",
+                            "CLICK_TAG_MORE_THAN_ONE",
+                            "CLICK_TAG_INVALID",
+                            "ORPHANED_ASSET",
+                            "PRIMARY_HTML_MISSING",
+                            "EXTERNAL_FILE_REFERENCED",
+                            "MRAID_REFERENCED",
+                            "ADMOB_REFERENCED",
+                            "FILE_TYPE_INVALID",
+                            "ZIP_INVALID",
+                            "LINKED_FILE_NOT_FOUND",
+                            "MAX_FLASH_VERSION_11",
+                            "NOT_SSL_COMPLIANT",
+                            "FILE_DETAIL_EMPTY",
+                            "ASSET_INVALID",
+                            "GWD_PROPERTIES_INVALID",
+                            "ENABLER_UNSUPPORTED_METHOD_DCM",
+                            "ASSET_FORMAT_UNSUPPORTED_DCM",
+                            "COMPONENT_UNSUPPORTED_DCM",
+                            "HTML5_FEATURE_UNSUPPORTED",
+                            "CLICK_TAG_IN_GWD",
+                            "CLICK_TAG_HARD_CODED",
+                            "SVG_INVALID"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeAssetSelection": {
+            "description": "Encapsulates the list of rules for asset selection and a default asset in case none of the rules match. Applicable to INSTREAM_VIDEO creatives.",
+            "id": "CreativeAssetSelection",
+            "properties": {
+                "defaultAssetId": {
+                    "description": "A creativeAssets[].id. This should refer to one of the parent assets in this creative, and will be served if none of the rules match. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "rules": {
+                    "description": "Rules determine which asset will be served to a viewer. Rules will be evaluated in the order in which they are stored in this list. This list must contain at least one rule. Applicable to INSTREAM_VIDEO creatives.",
+                    "items": {
+                        "$ref": "Rule"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeAssignment": {
+            "description": "Creative Assignment.",
+            "id": "CreativeAssignment",
+            "properties": {
+                "active": {
+                    "description": "Whether this creative assignment is active. When true, the creative will be included in the ad's rotation.",
+                    "type": "boolean"
+                },
+                "applyEventTags": {
+                    "description": "Whether applicable event tags should fire when this creative assignment is rendered. If this value is unset when the ad is inserted or updated, it will default to true for all creative types EXCEPT for INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO.",
+                    "type": "boolean"
+                },
+                "clickThroughUrl": {
+                    "$ref": "ClickThroughUrl",
+                    "description": "Click-through URL of the creative assignment."
+                },
+                "companionCreativeOverrides": {
+                    "description": "Companion creative overrides for this creative assignment. Applicable to video ads.",
+                    "items": {
+                        "$ref": "CompanionClickThroughOverride"
+                    },
+                    "type": "array"
+                },
+                "creativeGroupAssignments": {
+                    "description": "Creative group assignments for this creative assignment. Only one assignment per creative group number is allowed for a maximum of two assignments.",
+                    "items": {
+                        "$ref": "CreativeGroupAssignment"
+                    },
+                    "type": "array"
+                },
+                "creativeId": {
+                    "description": "ID of the creative to be assigned. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "creativeIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the creative. This is a read-only, auto-generated field."
+                },
+                "endTime": {
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "richMediaExitOverrides": {
+                    "description": "Rich media exit overrides for this creative assignment. Applicable when the creative type is any of the following: - DISPLAY - RICH_MEDIA_INPAGE - RICH_MEDIA_INPAGE_FLOATING - RICH_MEDIA_IM_EXPAND - RICH_MEDIA_EXPANDING - RICH_MEDIA_INTERSTITIAL_FLOAT - RICH_MEDIA_MOBILE_IN_APP - RICH_MEDIA_MULTI_FLOATING - RICH_MEDIA_PEEL_DOWN - VPAID_LINEAR - VPAID_NON_LINEAR ",
+                    "items": {
+                        "$ref": "RichMediaExitOverride"
+                    },
+                    "type": "array"
+                },
+                "sequence": {
+                    "description": "Sequence number of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_SEQUENTIAL. Acceptable values are 1 to 65535, inclusive.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "sslCompliant": {
+                    "description": "Whether the creative to be assigned is SSL-compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.",
+                    "type": "boolean"
+                },
+                "startTime": {
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "weight": {
+                    "description": "Weight of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_RANDOM. Value must be greater than or equal to 1.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeClickThroughUrl": {
+            "description": "Click-through URL",
+            "id": "CreativeClickThroughUrl",
+            "properties": {
+                "computedClickThroughUrl": {
+                    "description": "Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows: - If landingPageId is specified then that landing page's URL is assigned to this field. - Otherwise, the customClickThroughUrl is assigned to this field. ",
+                    "type": "string"
+                },
+                "customClickThroughUrl": {
+                    "description": "Custom click-through URL. Applicable if the landingPageId field is left unset.",
+                    "type": "string"
+                },
+                "landingPageId": {
+                    "description": "ID of the landing page for the click-through URL.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeCustomEvent": {
+            "description": "Creative Custom Event.",
+            "id": "CreativeCustomEvent",
+            "properties": {
+                "advertiserCustomEventId": {
+                    "description": "Unique ID of this event used by Reporting and Data Transfer. This is a read-only field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserCustomEventName": {
+                    "description": "User-entered name for the event.",
+                    "type": "string"
+                },
+                "advertiserCustomEventType": {
+                    "description": "Type of the event. This is a read-only field.",
+                    "enum": [
+                        "ADVERTISER_EVENT_TIMER",
+                        "ADVERTISER_EVENT_EXIT",
+                        "ADVERTISER_EVENT_COUNTER"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "artworkLabel": {
+                    "description": "Artwork label column, used to link events in Campaign Manager back to events in Studio. This is a required field and should not be modified after insertion.",
+                    "type": "string"
+                },
+                "artworkType": {
+                    "description": "Artwork type used by the creative.This is a read-only field.",
+                    "enum": [
+                        "ARTWORK_TYPE_FLASH",
+                        "ARTWORK_TYPE_HTML5",
+                        "ARTWORK_TYPE_MIXED",
+                        "ARTWORK_TYPE_IMAGE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "exitClickThroughUrl": {
+                    "$ref": "CreativeClickThroughUrl",
+                    "description": "Exit click-through URL for the event. This field is used only for exit events."
+                },
+                "id": {
+                    "description": "ID of this event. This is a required field and should not be modified after insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "popupWindowProperties": {
+                    "$ref": "PopupWindowProperties",
+                    "description": "Properties for rich media popup windows. This field is used only for exit events."
+                },
+                "targetType": {
+                    "description": "Target type used by the event.",
+                    "enum": [
+                        "TARGET_BLANK",
+                        "TARGET_TOP",
+                        "TARGET_SELF",
+                        "TARGET_PARENT",
+                        "TARGET_POPUP"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "videoReportingId": {
+                    "description": "Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeField": {
+            "description": "Contains properties of a creative field.",
+            "id": "CreativeField",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this creative field. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this creative field. This is a required field on insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "id": {
+                    "description": "ID of this creative field. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeField\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this creative field. This is a required field and must be less than 256 characters long and unique among creative fields of the same advertiser.",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this creative field. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeFieldAssignment": {
+            "description": "Creative Field Assignment.",
+            "id": "CreativeFieldAssignment",
+            "properties": {
+                "creativeFieldId": {
+                    "description": "ID of the creative field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "creativeFieldValueId": {
+                    "description": "ID of the creative field value.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeFieldValue": {
+            "description": "Contains properties of a creative field value.",
+            "id": "CreativeFieldValue",
+            "properties": {
+                "id": {
+                    "description": "ID of this creative field value. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeFieldValue\".",
+                    "type": "string"
+                },
+                "value": {
+                    "description": "Value of this creative field value. It needs to be less than 256 characters in length and unique per creative field.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeFieldValuesListResponse": {
+            "description": "Creative Field Value List Response",
+            "id": "CreativeFieldValuesListResponse",
+            "properties": {
+                "creativeFieldValues": {
+                    "description": "Creative field value collection.",
+                    "items": {
+                        "$ref": "CreativeFieldValue"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeFieldValuesListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeFieldsListResponse": {
+            "description": "Creative Field List Response",
+            "id": "CreativeFieldsListResponse",
+            "properties": {
+                "creativeFields": {
+                    "description": "Creative field collection.",
+                    "items": {
+                        "$ref": "CreativeField"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeFieldsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeGroup": {
+            "description": "Contains properties of a creative group.",
+            "id": "CreativeGroup",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this creative group. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this creative group. This is a required field on insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "groupNumber": {
+                    "description": "Subgroup of the creative group. Assign your creative groups to a subgroup in order to filter or manage them more easily. This field is required on insertion and is read-only after insertion. Acceptable values are 1 to 2, inclusive.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "id": {
+                    "description": "ID of this creative group. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeGroup\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this creative group. This is a required field and must be less than 256 characters long and unique among creative groups of the same advertiser.",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this creative group. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeGroupAssignment": {
+            "description": "Creative Group Assignment.",
+            "id": "CreativeGroupAssignment",
+            "properties": {
+                "creativeGroupId": {
+                    "description": "ID of the creative group to be assigned.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "creativeGroupNumber": {
+                    "description": "Creative group number of the creative group assignment.",
+                    "enum": [
+                        "CREATIVE_GROUP_ONE",
+                        "CREATIVE_GROUP_TWO"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeGroupsListResponse": {
+            "description": "Creative Group List Response",
+            "id": "CreativeGroupsListResponse",
+            "properties": {
+                "creativeGroups": {
+                    "description": "Creative group collection.",
+                    "items": {
+                        "$ref": "CreativeGroup"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativeGroupsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeOptimizationConfiguration": {
+            "description": "Creative optimization settings.",
+            "id": "CreativeOptimizationConfiguration",
+            "properties": {
+                "id": {
+                    "description": "ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this creative optimization config. This is a required field and must be less than 129 characters long.",
+                    "type": "string"
+                },
+                "optimizationActivitys": {
+                    "description": "List of optimization activities associated with this configuration.",
+                    "items": {
+                        "$ref": "OptimizationActivity"
+                    },
+                    "type": "array"
+                },
+                "optimizationModel": {
+                    "description": "Optimization model for this configuration.",
+                    "enum": [
+                        "CLICK",
+                        "POST_CLICK",
+                        "POST_IMPRESSION",
+                        "POST_CLICK_AND_IMPRESSION",
+                        "VIDEO_COMPLETION"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativeRotation": {
+            "description": "Creative Rotation.",
+            "id": "CreativeRotation",
+            "properties": {
+                "creativeAssignments": {
+                    "description": "Creative assignments in this creative rotation.",
+                    "items": {
+                        "$ref": "CreativeAssignment"
+                    },
+                    "type": "array"
+                },
+                "creativeOptimizationConfigurationId": {
+                    "description": "Creative optimization configuration that is used by this ad. It should refer to one of the existing optimization configurations in the ad's campaign. If it is unset or set to 0, then the campaign's default optimization configuration will be used for this ad.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Type of creative rotation. Can be used to specify whether to use sequential or random rotation.",
+                    "enum": [
+                        "CREATIVE_ROTATION_TYPE_SEQUENTIAL",
+                        "CREATIVE_ROTATION_TYPE_RANDOM"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "weightCalculationStrategy": {
+                    "description": "Strategy for calculating weights. Used with CREATIVE_ROTATION_TYPE_RANDOM.",
+                    "enum": [
+                        "WEIGHT_STRATEGY_EQUAL",
+                        "WEIGHT_STRATEGY_CUSTOM",
+                        "WEIGHT_STRATEGY_HIGHEST_CTR",
+                        "WEIGHT_STRATEGY_OPTIMIZED"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreativesListResponse": {
+            "description": "Creative List Response",
+            "id": "CreativesListResponse",
+            "properties": {
+                "creatives": {
+                    "description": "Creative collection.",
+                    "items": {
+                        "$ref": "Creative"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#creativesListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CrossDimensionReachReportCompatibleFields": {
+            "description": "Represents fields that are compatible to be selected for a report of type \"CROSS_DIMENSION_REACH\".",
+            "id": "CrossDimensionReachReportCompatibleFields",
+            "properties": {
+                "breakdown": {
+                    "description": "Dimensions which are compatible to be selected in the \"breakdown\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "dimensionFilters": {
+                    "description": "Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#crossDimensionReachReportCompatibleFields.",
+                    "type": "string"
+                },
+                "metrics": {
+                    "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                },
+                "overlapMetrics": {
+                    "description": "Metrics which are compatible to be selected in the \"overlapMetricNames\" section of the report.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "CustomEvent": {
+            "description": "Experimental feature (no support provided) A custom event represents a third party impression, a third party click, an annotation on a first party impression, or an annotation on a first party click.",
+            "id": "CustomEvent",
+            "properties": {
+                "annotateClickEvent": {
+                    "$ref": "CustomEventClickAnnotation",
+                    "description": "Annotate a click event. This field is mutually exclusive with insertEvent and annotateImpressionEvent. This or insertEvent and annotateImpressionEvent is a required field."
+                },
+                "annotateImpressionEvent": {
+                    "$ref": "CustomEventImpressionAnnotation",
+                    "description": "Annotate an impression. This field is mutually exclusive with insertEvent and annotateClickEvent. This or insertEvent and annotateClickEvent is a required field."
+                },
+                "customVariables": {
+                    "description": "Custom variables associated with the event.",
+                    "items": {
+                        "$ref": "CustomVariable"
+                    },
+                    "type": "array"
+                },
+                "eventType": {
+                    "description": "The type of event. If INSERT, the fields in insertEvent need to be populated. If ANNOTATE, the fields in either annotateClickEvent or annotateImpressionEvent need to be populated.",
+                    "enum": [
+                        "UNKNOWN",
+                        "INSERT",
+                        "ANNOTATE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "floodlightConfigurationId": {
+                    "description": "Floodlight configuration ID of the advertiser the event is linked to. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "insertEvent": {
+                    "$ref": "CustomEventInsert",
+                    "description": "Insert custom event. This field is mutually exclusive with annotateClickEvent and annotateImpressionEvent. This or annotateClickEvent and annotateImpressionEvent is a required field."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customEvent\".",
+                    "type": "string"
+                },
+                "ordinal": {
+                    "description": "The ordinal of this custom event. This is a required field.",
+                    "type": "string"
+                },
+                "timestampMicros": {
+                    "description": "The timestamp of this custom event, in Unix epoch micros. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CustomEventClickAnnotation": {
+            "description": "Annotate a click event.",
+            "id": "CustomEventClickAnnotation",
+            "properties": {
+                "gclid": {
+                    "description": "The Google click ID. Use this field to annotate the click associated with the gclid.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customEventClickAnnotation\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CustomEventError": {
+            "description": "The error code and description for a custom event that failed to insert.",
+            "id": "CustomEventError",
+            "properties": {
+                "code": {
+                    "description": "The error code.",
+                    "enum": [
+                        "UNKNOWN",
+                        "INVALID_ARGUMENT",
+                        "INTERNAL",
+                        "PERMISSION_DENIED",
+                        "NOT_FOUND"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customEventError\".",
+                    "type": "string"
+                },
+                "message": {
+                    "description": "A description of the error.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CustomEventImpressionAnnotation": {
+            "description": "Annotate an impression.",
+            "id": "CustomEventImpressionAnnotation",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customEventImpressionAnnotation\".",
+                    "type": "string"
+                },
+                "pathImpressionId": {
+                    "description": "The path impression ID. Use this field to annotate the impression associated with the pathImpressionId.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CustomEventInsert": {
+            "description": "Custom event to be inserted.",
+            "id": "CustomEventInsert",
+            "properties": {
+                "cmDimensions": {
+                    "$ref": "CampaignManagerIds",
+                    "description": "Campaign Manager dimensions associated with the event."
+                },
+                "dv3Dimensions": {
+                    "$ref": "DV3Ids",
+                    "description": "DV360 dimensions associated with the event."
+                },
+                "insertEventType": {
+                    "description": "The type of event to insert.",
+                    "enum": [
+                        "UNKNOWN",
+                        "IMPRESSION",
+                        "CLICK"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customEventInsert\".",
+                    "type": "string"
+                },
+                "matchId": {
+                    "description": "The match ID field. A match ID is your own first-party identifier that has been synced with Google using the match ID feature in Floodlight. This field is mutually exclusive with mobileDeviceId, and at least one of the two fields is required.",
+                    "type": "string"
+                },
+                "mobileDeviceId": {
+                    "description": "The mobile device ID. This field is mutually exclusive with matchId, and at least one of the two fields is required.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CustomEventStatus": {
+            "description": "The original custom event that was inserted and whether there were any errors.",
+            "id": "CustomEventStatus",
+            "properties": {
+                "customEvent": {
+                    "$ref": "CustomEvent",
+                    "description": "The original custom event that was inserted."
+                },
+                "errors": {
+                    "description": "A list of errors related to this custom event.",
+                    "items": {
+                        "$ref": "CustomEventError"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customEventStatus\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CustomEventsBatchInsertRequest": {
+            "description": "Insert Custom Events Request.",
+            "id": "CustomEventsBatchInsertRequest",
+            "properties": {
+                "customEvents": {
+                    "description": "The set of custom events to insert.",
+                    "items": {
+                        "$ref": "CustomEvent"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customEventsBatchInsertRequest\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CustomEventsBatchInsertResponse": {
+            "description": "Insert Custom Events Response.",
+            "id": "CustomEventsBatchInsertResponse",
+            "properties": {
+                "hasFailures": {
+                    "description": "Indicates that some or all custom events failed to insert.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customEventsBatchInsertResponse\".",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "The insert status of each custom event. Statuses are returned in the same order that conversions are inserted.",
+                    "items": {
+                        "$ref": "CustomEventStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "CustomFloodlightVariable": {
+            "description": "A custom floodlight variable.",
+            "id": "CustomFloodlightVariable",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customFloodlightVariable\".",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "The type of custom floodlight variable to supply a value for. These map to the \"u[1-20]=\" in the tags.",
+                    "enum": [
+                        "U1",
+                        "U2",
+                        "U3",
+                        "U4",
+                        "U5",
+                        "U6",
+                        "U7",
+                        "U8",
+                        "U9",
+                        "U10",
+                        "U11",
+                        "U12",
+                        "U13",
+                        "U14",
+                        "U15",
+                        "U16",
+                        "U17",
+                        "U18",
+                        "U19",
+                        "U20",
+                        "U21",
+                        "U22",
+                        "U23",
+                        "U24",
+                        "U25",
+                        "U26",
+                        "U27",
+                        "U28",
+                        "U29",
+                        "U30",
+                        "U31",
+                        "U32",
+                        "U33",
+                        "U34",
+                        "U35",
+                        "U36",
+                        "U37",
+                        "U38",
+                        "U39",
+                        "U40",
+                        "U41",
+                        "U42",
+                        "U43",
+                        "U44",
+                        "U45",
+                        "U46",
+                        "U47",
+                        "U48",
+                        "U49",
+                        "U50",
+                        "U51",
+                        "U52",
+                        "U53",
+                        "U54",
+                        "U55",
+                        "U56",
+                        "U57",
+                        "U58",
+                        "U59",
+                        "U60",
+                        "U61",
+                        "U62",
+                        "U63",
+                        "U64",
+                        "U65",
+                        "U66",
+                        "U67",
+                        "U68",
+                        "U69",
+                        "U70",
+                        "U71",
+                        "U72",
+                        "U73",
+                        "U74",
+                        "U75",
+                        "U76",
+                        "U77",
+                        "U78",
+                        "U79",
+                        "U80",
+                        "U81",
+                        "U82",
+                        "U83",
+                        "U84",
+                        "U85",
+                        "U86",
+                        "U87",
+                        "U88",
+                        "U89",
+                        "U90",
+                        "U91",
+                        "U92",
+                        "U93",
+                        "U94",
+                        "U95",
+                        "U96",
+                        "U97",
+                        "U98",
+                        "U99",
+                        "U100"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "value": {
+                    "description": "The value of the custom floodlight variable. The length of string must not exceed 100 characters.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CustomRichMediaEvents": {
+            "description": "Represents a Custom Rich Media Events group.",
+            "id": "CustomRichMediaEvents",
+            "properties": {
+                "filteredEventIds": {
+                    "description": "List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.",
+                    "items": {
+                        "$ref": "DimensionValue"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#customRichMediaEvents.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CustomVariable": {
+            "description": "Custom variable.",
+            "id": "CustomVariable",
+            "properties": {
+                "index": {
+                    "description": "The index of the custom variable.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#customVariable\".",
+                    "type": "string"
+                },
+                "value": {
+                    "description": "The value of the custom variable. The length of string must not exceed 50 characters.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CustomViewabilityMetric": {
+            "description": "Custom Viewability Metric",
+            "id": "CustomViewabilityMetric",
+            "properties": {
+                "configuration": {
+                    "$ref": "CustomViewabilityMetricConfiguration",
+                    "description": "Configuration of the custom viewability metric."
+                },
+                "id": {
+                    "description": "ID of the custom viewability metric.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of the custom viewability metric.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CustomViewabilityMetricConfiguration": {
+            "description": "The attributes, like playtime and percent onscreen, that define the Custom Viewability Metric.",
+            "id": "CustomViewabilityMetricConfiguration",
+            "properties": {
+                "audible": {
+                    "description": "Whether the video must be audible to count an impression.",
+                    "type": "boolean"
+                },
+                "timeMillis": {
+                    "description": "The time in milliseconds the video must play for the Custom Viewability Metric to count an impression. If both this and timePercent are specified, the earlier of the two will be used.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "timePercent": {
+                    "description": "The percentage of video that must play for the Custom Viewability Metric to count an impression. If both this and timeMillis are specified, the earlier of the two will be used.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "viewabilityPercent": {
+                    "description": "The percentage of video that must be on screen for the Custom Viewability Metric to count an impression.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "DV3Ids": {
+            "description": "DV360 IDs related to the custom event.",
+            "id": "DV3Ids",
+            "properties": {
+                "dvCampaignId": {
+                    "description": "Campaign ID for DV360.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "dvCreativeId": {
+                    "description": "Creative ID for DV360.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "dvInsertionOrderId": {
+                    "description": "Insertion Order ID for DV360.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "dvLineItemId": {
+                    "description": "Line Item ID for DV360.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "dvSiteId": {
+                    "description": "Site ID for DV360.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#dV3Ids\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DateRange": {
+            "description": "Represents a date range.",
+            "id": "DateRange",
+            "properties": {
+                "endDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#dateRange.",
+                    "type": "string"
+                },
+                "relativeDateRange": {
+                    "description": "The date range relative to the date of when the report is run.",
+                    "enum": [
+                        "TODAY",
+                        "YESTERDAY",
+                        "WEEK_TO_DATE",
+                        "MONTH_TO_DATE",
+                        "QUARTER_TO_DATE",
+                        "YEAR_TO_DATE",
+                        "PREVIOUS_WEEK",
+                        "PREVIOUS_MONTH",
+                        "PREVIOUS_QUARTER",
+                        "PREVIOUS_YEAR",
+                        "LAST_7_DAYS",
+                        "LAST_30_DAYS",
+                        "LAST_90_DAYS",
+                        "LAST_365_DAYS",
+                        "LAST_24_MONTHS",
+                        "LAST_14_DAYS",
+                        "LAST_60_DAYS"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "startDate": {
+                    "format": "date",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DayPartTargeting": {
+            "description": "Day Part Targeting.",
+            "id": "DayPartTargeting",
+            "properties": {
+                "daysOfWeek": {
+                    "description": "Days of the week when the ad will serve. Acceptable values are: - \"SUNDAY\" - \"MONDAY\" - \"TUESDAY\" - \"WEDNESDAY\" - \"THURSDAY\" - \"FRIDAY\" - \"SATURDAY\" ",
+                    "items": {
+                        "enum": [
+                            "MONDAY",
+                            "TUESDAY",
+                            "WEDNESDAY",
+                            "THURSDAY",
+                            "FRIDAY",
+                            "SATURDAY",
+                            "SUNDAY"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "hoursOfDay": {
+                    "description": "Hours of the day when the ad will serve, where 0 is midnight to 1 AM and 23 is 11 PM to midnight. Can be specified with days of week, in which case the ad would serve during these hours on the specified days. For example if Monday, Wednesday, Friday are the days of week specified and 9-10am, 3-5pm (hours 9, 15, and 16) is specified, the ad would serve Monday, Wednesdays, and Fridays at 9-10am and 3-5pm. Acceptable values are 0 to 23, inclusive.",
+                    "items": {
+                        "format": "int32",
+                        "type": "integer"
+                    },
+                    "type": "array"
+                },
+                "userLocalTime": {
+                    "description": "Whether or not to use the user's local time. If false, the America/New York time zone applies.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "DeepLink": {
+            "description": "Contains information about a landing page deep link.",
+            "id": "DeepLink",
+            "properties": {
+                "appUrl": {
+                    "description": "The URL of the mobile app being linked to.",
+                    "type": "string"
+                },
+                "fallbackUrl": {
+                    "description": "The fallback URL. This URL will be served to users who do not have the mobile app installed.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#deepLink\".",
+                    "type": "string"
+                },
+                "mobileApp": {
+                    "$ref": "MobileApp",
+                    "description": "The mobile app targeted by this deep link."
+                },
+                "remarketingListIds": {
+                    "description": "Ads served to users on these remarketing lists will use this deep link. Applicable when mobileApp.directory is APPLE_APP_STORE.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "DefaultClickThroughEventTagProperties": {
+            "description": "Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign's setting further.",
+            "id": "DefaultClickThroughEventTagProperties",
+            "properties": {
+                "defaultClickThroughEventTagId": {
+                    "description": "ID of the click-through event tag to apply to all ads in this entity's scope.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "overrideInheritedEventTag": {
+                    "description": "Whether this entity should override the inherited default click-through event tag with its own defined value.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "DeliverySchedule": {
+            "description": "Delivery Schedule.",
+            "id": "DeliverySchedule",
+            "properties": {
+                "frequencyCap": {
+                    "$ref": "FrequencyCap",
+                    "description": "Limit on the number of times an individual user can be served the ad within a specified period of time."
+                },
+                "hardCutoff": {
+                    "description": "Whether or not hard cutoff is enabled. If true, the ad will not serve after the end date and time. Otherwise the ad will continue to be served until it has reached its delivery goals.",
+                    "type": "boolean"
+                },
+                "impressionRatio": {
+                    "description": "Impression ratio for this ad. This ratio determines how often each ad is served relative to the others. For example, if ad A has an impression ratio of 1 and ad B has an impression ratio of 3, then Campaign Manager will serve ad B three times as often as ad A. Acceptable values are 1 to 10, inclusive.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "priority": {
+                    "description": "Serving priority of an ad, with respect to other ads. The lower the priority number, the greater the priority with which it is served.",
+                    "enum": [
+                        "AD_PRIORITY_01",
+                        "AD_PRIORITY_02",
+                        "AD_PRIORITY_03",
+                        "AD_PRIORITY_04",
+                        "AD_PRIORITY_05",
+                        "AD_PRIORITY_06",
+                        "AD_PRIORITY_07",
+                        "AD_PRIORITY_08",
+                        "AD_PRIORITY_09",
+                        "AD_PRIORITY_10",
+                        "AD_PRIORITY_11",
+                        "AD_PRIORITY_12",
+                        "AD_PRIORITY_13",
+                        "AD_PRIORITY_14",
+                        "AD_PRIORITY_15",
+                        "AD_PRIORITY_16"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DfpSettings": {
+            "description": "Google Ad Manager Settings",
+            "id": "DfpSettings",
+            "properties": {
+                "dfpNetworkCode": {
+                    "description": "Ad Manager network code for this directory site.",
+                    "type": "string"
+                },
+                "dfpNetworkName": {
+                    "description": "Ad Manager network name for this directory site.",
+                    "type": "string"
+                },
+                "programmaticPlacementAccepted": {
+                    "description": "Whether this directory site accepts programmatic placements.",
+                    "type": "boolean"
+                },
+                "pubPaidPlacementAccepted": {
+                    "description": "Whether this directory site accepts publisher-paid tags.",
+                    "type": "boolean"
+                },
+                "publisherPortalOnly": {
+                    "description": "Whether this directory site is available only via Publisher Portal.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "Dimension": {
+            "description": "Represents a dimension.",
+            "id": "Dimension",
+            "properties": {
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#dimension.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The dimension name, e.g. dfa:advertiser",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DimensionFilter": {
+            "description": "Represents a dimension filter.",
+            "id": "DimensionFilter",
+            "properties": {
+                "dimensionName": {
+                    "description": "The name of the dimension to filter.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#dimensionFilter.",
+                    "type": "string"
+                },
+                "value": {
+                    "description": "The value of the dimension to filter.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DimensionValue": {
+            "description": "Represents a DimensionValue resource.",
+            "id": "DimensionValue",
+            "properties": {
+                "dimensionName": {
+                    "description": "The name of the dimension.",
+                    "type": "string"
+                },
+                "etag": {
+                    "description": "The eTag of this response for caching purposes.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "The ID associated with the value if available.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#dimensionValue.",
+                    "type": "string"
+                },
+                "matchType": {
+                    "description": "Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.",
+                    "enum": [
+                        "EXACT",
+                        "BEGINS_WITH",
+                        "CONTAINS",
+                        "WILDCARD_EXPRESSION"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "value": {
+                    "description": "The value of the dimension.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DimensionValueList": {
+            "description": "Represents the list of DimensionValue resources.",
+            "id": "DimensionValueList",
+            "properties": {
+                "etag": {
+                    "description": "The eTag of this response for caching purposes.",
+                    "type": "string"
+                },
+                "items": {
+                    "description": "The dimension values returned in this response.",
+                    "items": {
+                        "$ref": "DimensionValue"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of list this is, in this case dfareporting#dimensionValueList.",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Continuation token used to page through dimension values. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DimensionValueRequest": {
+            "description": "Represents a DimensionValuesRequest.",
+            "id": "DimensionValueRequest",
+            "properties": {
+                "dimensionName": {
+                    "annotations": {
+                        "required": [
+                            "dfareporting.dimensionValues.query"
+                        ]
+                    },
+                    "description": "The name of the dimension for which values should be requested.",
+                    "type": "string"
+                },
+                "endDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "filters": {
+                    "description": "The list of filters by which to filter values. The filters are ANDed.",
+                    "items": {
+                        "$ref": "DimensionFilter"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of request this is, in this case dfareporting#dimensionValueRequest .",
+                    "type": "string"
+                },
+                "startDate": {
+                    "format": "date",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DirectorySite": {
+            "description": "DirectorySites contains properties of a website from the Site Directory. Sites need to be added to an account via the Sites resource before they can be assigned to a placement.",
+            "id": "DirectorySite",
+            "properties": {
+                "id": {
+                    "description": "ID of this directory site. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this directory site. This is a read-only, auto-generated field."
+                },
+                "inpageTagFormats": {
+                    "description": "Tag types for regular placements. Acceptable values are: - \"STANDARD\" - \"IFRAME_JAVASCRIPT_INPAGE\" - \"INTERNAL_REDIRECT_INPAGE\" - \"JAVASCRIPT_INPAGE\" ",
+                    "items": {
+                        "enum": [
+                            "STANDARD",
+                            "IFRAME_JAVASCRIPT_INPAGE",
+                            "INTERNAL_REDIRECT_INPAGE",
+                            "JAVASCRIPT_INPAGE"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "interstitialTagFormats": {
+                    "description": "Tag types for interstitial placements. Acceptable values are: - \"IFRAME_JAVASCRIPT_INTERSTITIAL\" - \"INTERNAL_REDIRECT_INTERSTITIAL\" - \"JAVASCRIPT_INTERSTITIAL\" ",
+                    "items": {
+                        "enum": [
+                            "IFRAME_JAVASCRIPT_INTERSTITIAL",
+                            "INTERNAL_REDIRECT_INTERSTITIAL",
+                            "JAVASCRIPT_INTERSTITIAL"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#directorySite\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this directory site.",
+                    "type": "string"
+                },
+                "settings": {
+                    "$ref": "DirectorySiteSettings",
+                    "description": "Directory site settings."
+                },
+                "url": {
+                    "description": "URL of this directory site.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DirectorySiteSettings": {
+            "description": "Directory Site Settings",
+            "id": "DirectorySiteSettings",
+            "properties": {
+                "activeViewOptOut": {
+                    "description": "Whether this directory site has disabled active view creatives.",
+                    "type": "boolean"
+                },
+                "dfpSettings": {
+                    "$ref": "DfpSettings",
+                    "description": "Directory site Ad Manager settings."
+                },
+                "instreamVideoPlacementAccepted": {
+                    "description": "Whether this site accepts in-stream video ads.",
+                    "type": "boolean"
+                },
+                "interstitialPlacementAccepted": {
+                    "description": "Whether this site accepts interstitial ads.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "DirectorySitesListResponse": {
+            "description": "Directory Site List Response",
+            "id": "DirectorySitesListResponse",
+            "properties": {
+                "directorySites": {
+                    "description": "Directory site collection.",
+                    "items": {
+                        "$ref": "DirectorySite"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#directorySitesListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DisjunctiveMatchStatement": {
+            "description": "Represents a Disjunctive Match Statement resource, which is a conjunction (and) of disjunctive (or) boolean statements.",
+            "id": "DisjunctiveMatchStatement",
+            "properties": {
+                "eventFilters": {
+                    "description": "The event filters contained within this disjunctive match statement.",
+                    "items": {
+                        "$ref": "EventFilter"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#disjunctiveMatchStatement.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DynamicTargetingKey": {
+            "description": "Contains properties of a dynamic targeting key. Dynamic targeting keys are unique, user-friendly labels, created at the advertiser level in DCM, that can be assigned to ads, creatives, and placements and used for targeting with Studio dynamic creatives. Use these labels instead of numeric Campaign Manager IDs (such as placement IDs) to save time and avoid errors in your dynamic feeds.",
+            "id": "DynamicTargetingKey",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#dynamicTargetingKey\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this dynamic targeting key. This is a required field. Must be less than 256 characters long and cannot contain commas. All characters are converted to lowercase.",
+                    "type": "string"
+                },
+                "objectId": {
+                    "description": "ID of the object of this dynamic targeting key. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "objectType": {
+                    "description": "Type of the object of this dynamic targeting key. This is a required field.",
+                    "enum": [
+                        "OBJECT_ADVERTISER",
+                        "OBJECT_AD",
+                        "OBJECT_CREATIVE",
+                        "OBJECT_PLACEMENT"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DynamicTargetingKeysListResponse": {
+            "description": "Dynamic Targeting Key List Response",
+            "id": "DynamicTargetingKeysListResponse",
+            "properties": {
+                "dynamicTargetingKeys": {
+                    "description": "Dynamic targeting key collection.",
+                    "items": {
+                        "$ref": "DynamicTargetingKey"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#dynamicTargetingKeysListResponse\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "EncryptionInfo": {
+            "description": "A description of how user IDs are encrypted.",
+            "id": "EncryptionInfo",
+            "properties": {
+                "encryptionEntityId": {
+                    "description": "The encryption entity ID. This should match the encryption configuration for ad serving or Data Transfer.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "encryptionEntityType": {
+                    "description": "The encryption entity type. This should match the encryption configuration for ad serving or Data Transfer.",
+                    "enum": [
+                        "ENCRYPTION_ENTITY_TYPE_UNKNOWN",
+                        "DCM_ACCOUNT",
+                        "DCM_ADVERTISER",
+                        "DBM_PARTNER",
+                        "DBM_ADVERTISER",
+                        "ADWORDS_CUSTOMER",
+                        "DFP_NETWORK_CODE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "encryptionSource": {
+                    "description": "Describes whether the encrypted cookie was received from ad serving (the %m macro) or from Data Transfer.",
+                    "enum": [
+                        "ENCRYPTION_SCOPE_UNKNOWN",
+                        "AD_SERVING",
+                        "DATA_TRANSFER"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#encryptionInfo\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "EventFilter": {
+            "description": "Represents a DfaReporting event filter.",
+            "id": "EventFilter",
+            "properties": {
+                "dimensionFilter": {
+                    "$ref": "PathReportDimensionValue",
+                    "description": "The dimension filter contained within this EventFilter."
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#eventFilter.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "EventTag": {
+            "description": "Contains properties of an event tag.",
+            "id": "EventTag",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this event tag. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this event tag. This field or the campaignId field is required on insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "campaignId": {
+                    "description": "Campaign ID of this event tag. This field or the advertiserId field is required on insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "campaignIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the campaign. This is a read-only, auto-generated field."
+                },
+                "enabledByDefault": {
+                    "description": "Whether this event tag should be automatically enabled for all of the advertiser's campaigns and ads.",
+                    "type": "boolean"
+                },
+                "excludeFromAdxRequests": {
+                    "description": "Whether to remove this event tag from ads that are trafficked through Display & Video 360 to Ad Exchange. This may be useful if the event tag uses a pixel that is unapproved for Ad Exchange bids on one or more networks, such as the Google Display Network.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "ID of this event tag. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#eventTag\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this event tag. This is a required field and must be less than 256 characters long.",
+                    "type": "string"
+                },
+                "siteFilterType": {
+                    "description": "Site filter type for this event tag. If no type is specified then the event tag will be applied to all sites.",
+                    "enum": [
+                        "WHITELIST",
+                        "BLACKLIST"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "siteIds": {
+                    "description": "Filter list of site IDs associated with this event tag. The siteFilterType determines whether this is a allowlist or blocklist filter.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "sslCompliant": {
+                    "description": "Whether this tag is SSL-compliant or not. This is a read-only field.",
+                    "type": "boolean"
+                },
+                "status": {
+                    "description": "Status of this event tag. Must be ENABLED for this event tag to fire. This is a required field.",
+                    "enum": [
+                        "ENABLED",
+                        "DISABLED"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this event tag. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Event tag type. Can be used to specify whether to use a third-party pixel, a third-party JavaScript URL, or a third-party click-through URL for either impression or click tracking. This is a required field.",
+                    "enum": [
+                        "IMPRESSION_IMAGE_EVENT_TAG",
+                        "IMPRESSION_JAVASCRIPT_EVENT_TAG",
+                        "CLICK_THROUGH_EVENT_TAG"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "url": {
+                    "description": "Payload URL for this event tag. The URL on a click-through event tag should have a landing page URL appended to the end of it. This field is required on insertion.",
+                    "type": "string"
+                },
+                "urlEscapeLevels": {
+                    "description": "Number of times the landing page URL should be URL-escaped before being appended to the click-through event tag URL. Only applies to click-through event tags as specified by the event tag type.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "EventTagOverride": {
+            "description": "Event tag override information.",
+            "id": "EventTagOverride",
+            "properties": {
+                "enabled": {
+                    "description": "Whether this override is enabled.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "ID of this event tag override. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "EventTagsListResponse": {
+            "description": "Event Tag List Response",
+            "id": "EventTagsListResponse",
+            "properties": {
+                "eventTags": {
+                    "description": "Event tag collection.",
+                    "items": {
+                        "$ref": "EventTag"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#eventTagsListResponse\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "File": {
+            "description": "Represents a File resource. A file contains the metadata for a report run. It shows the status of the run and holds the URLs to the generated report data if the run is finished and the status is \"REPORT_AVAILABLE\".",
+            "id": "File",
+            "properties": {
+                "dateRange": {
+                    "$ref": "DateRange",
+                    "description": "The date range for which the file has report data. The date range will always be the absolute date range for which the report is run."
+                },
+                "etag": {
+                    "description": "Etag of this resource.",
+                    "type": "string"
+                },
+                "fileName": {
+                    "description": "The filename of the file.",
+                    "type": "string"
+                },
+                "format": {
+                    "description": "The output format of the report. Only available once the file is available.",
+                    "enum": [
+                        "CSV",
+                        "EXCEL"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "id": {
+                    "description": "The unique ID of this report file.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#file\".",
+                    "type": "string"
+                },
+                "lastModifiedTime": {
+                    "description": "The timestamp in milliseconds since epoch when this file was last modified.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "reportId": {
+                    "description": "The ID of the report this file was generated from.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "The status of the report file.",
+                    "enum": [
+                        "PROCESSING",
+                        "REPORT_AVAILABLE",
+                        "FAILED",
+                        "CANCELLED"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "urls": {
+                    "description": "The URLs where the completed report file can be downloaded.",
+                    "properties": {
+                        "apiUrl": {
+                            "description": "The URL for downloading the report data through the API.",
+                            "type": "string"
+                        },
+                        "browserUrl": {
+                            "description": "The URL for downloading the report data through a browser.",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "FileList": {
+            "description": "List of files for a report.",
+            "id": "FileList",
+            "properties": {
+                "etag": {
+                    "description": "Etag of this resource.",
+                    "type": "string"
+                },
+                "items": {
+                    "description": "The files returned in this response.",
+                    "items": {
+                        "$ref": "File"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#fileList\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Continuation token used to page through files. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Flight": {
+            "description": "Flight",
+            "id": "Flight",
+            "properties": {
+                "endDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "rateOrCost": {
+                    "description": "Rate or cost of this flight.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "startDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "units": {
+                    "description": "Units of this flight.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FloodlightActivitiesGenerateTagResponse": {
+            "description": "Floodlight Activity GenerateTag Response",
+            "id": "FloodlightActivitiesGenerateTagResponse",
+            "properties": {
+                "floodlightActivityTag": {
+                    "description": "Generated tag for this Floodlight activity. For global site tags, this is the event snippet.",
+                    "type": "string"
+                },
+                "globalSiteTagGlobalSnippet": {
+                    "description": "The global snippet section of a global site tag. The global site tag sets new cookies on your domain, which will store a unique identifier for a user or the ad click that brought the user to your site. Learn more.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivitiesGenerateTagResponse\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FloodlightActivitiesListResponse": {
+            "description": "Floodlight Activity List Response",
+            "id": "FloodlightActivitiesListResponse",
+            "properties": {
+                "floodlightActivities": {
+                    "description": "Floodlight activity collection.",
+                    "items": {
+                        "$ref": "FloodlightActivity"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivitiesListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FloodlightActivity": {
+            "description": "Contains properties of a Floodlight activity.",
+            "id": "FloodlightActivity",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this floodlight activity. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's advertiser or the existing activity's advertiser.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "attributionEnabled": {
+                    "description": "Whether the activity is enabled for attribution.",
+                    "type": "boolean"
+                },
+                "cacheBustingType": {
+                    "description": "Code type used for cache busting in the generated tag. Applicable only when floodlightActivityGroupType is COUNTER and countingMethod is STANDARD_COUNTING or UNIQUE_COUNTING.",
+                    "enum": [
+                        "JAVASCRIPT",
+                        "ACTIVE_SERVER_PAGE",
+                        "JSP",
+                        "PHP",
+                        "COLD_FUSION"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "countingMethod": {
+                    "description": "Counting method for conversions for this floodlight activity. This is a required field.",
+                    "enum": [
+                        "STANDARD_COUNTING",
+                        "UNIQUE_COUNTING",
+                        "SESSION_COUNTING",
+                        "TRANSACTIONS_COUNTING",
+                        "ITEMS_SOLD_COUNTING"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "defaultTags": {
+                    "description": "Dynamic floodlight tags.",
+                    "items": {
+                        "$ref": "FloodlightActivityDynamicTag"
+                    },
+                    "type": "array"
+                },
+                "expectedUrl": {
+                    "description": "URL where this tag will be deployed. If specified, must be less than 256 characters long.",
+                    "type": "string"
+                },
+                "floodlightActivityGroupId": {
+                    "description": "Floodlight activity group ID of this floodlight activity. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "floodlightActivityGroupName": {
+                    "description": "Name of the associated floodlight activity group. This is a read-only field.",
+                    "type": "string"
+                },
+                "floodlightActivityGroupTagString": {
+                    "description": "Tag string of the associated floodlight activity group. This is a read-only field.",
+                    "type": "string"
+                },
+                "floodlightActivityGroupType": {
+                    "description": "Type of the associated floodlight activity group. This is a read-only field.",
+                    "enum": [
+                        "COUNTER",
+                        "SALE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "floodlightConfigurationId": {
+                    "description": "Floodlight configuration ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's floodlight configuration or from the existing activity's floodlight configuration.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "floodlightConfigurationIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field."
+                },
+                "floodlightTagType": {
+                    "description": "The type of Floodlight tag this activity will generate. This is a required field.",
+                    "enum": [
+                        "IFRAME",
+                        "IMAGE",
+                        "GLOBAL_SITE_TAG"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this floodlight activity. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this floodlight activity. This is a read-only, auto-generated field."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivity\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this floodlight activity. This is a required field. Must be less than 129 characters long and cannot contain quotes.",
+                    "type": "string"
+                },
+                "notes": {
+                    "description": "General notes or implementation instructions for the tag.",
+                    "type": "string"
+                },
+                "publisherTags": {
+                    "description": "Publisher dynamic floodlight tags.",
+                    "items": {
+                        "$ref": "FloodlightActivityPublisherDynamicTag"
+                    },
+                    "type": "array"
+                },
+                "secure": {
+                    "description": "Whether this tag should use SSL.",
+                    "type": "boolean"
+                },
+                "sslCompliant": {
+                    "description": "Whether the floodlight activity is SSL-compliant. This is a read-only field, its value detected by the system from the floodlight tags.",
+                    "type": "boolean"
+                },
+                "sslRequired": {
+                    "description": "Whether this floodlight activity must be SSL-compliant.",
+                    "type": "boolean"
+                },
+                "status": {
+                    "description": "The status of the activity. This can only be set to ACTIVE or ARCHIVED_AND_DISABLED. The ARCHIVED status is no longer supported and cannot be set for Floodlight activities. The DISABLED_POLICY status indicates that a Floodlight activity is violating Google policy. Contact your account manager for more information.",
+                    "enum": [
+                        "ACTIVE",
+                        "ARCHIVED_AND_DISABLED",
+                        "ARCHIVED",
+                        "DISABLED_POLICY"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this floodlight activity. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "tagFormat": {
+                    "description": "Tag format type for the floodlight activity. If left blank, the tag format will default to HTML.",
+                    "enum": [
+                        "HTML",
+                        "XHTML"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "tagString": {
+                    "description": "Value of the cat= parameter in the floodlight tag, which the ad servers use to identify the activity. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being a-z0-9[ _ ]. This tag string must also be unique among activities of the same activity group. This field is read-only after insertion.",
+                    "type": "string"
+                },
+                "userDefinedVariableTypes": {
+                    "description": "List of the user-defined variables used by this conversion tag. These map to the \"u[1-100]=\" in the tags. Each of these can have a user defined type. Acceptable values are U1 to U100, inclusive. ",
+                    "items": {
+                        "enum": [
+                            "U1",
+                            "U2",
+                            "U3",
+                            "U4",
+                            "U5",
+                            "U6",
+                            "U7",
+                            "U8",
+                            "U9",
+                            "U10",
+                            "U11",
+                            "U12",
+                            "U13",
+                            "U14",
+                            "U15",
+                            "U16",
+                            "U17",
+                            "U18",
+                            "U19",
+                            "U20",
+                            "U21",
+                            "U22",
+                            "U23",
+                            "U24",
+                            "U25",
+                            "U26",
+                            "U27",
+                            "U28",
+                            "U29",
+                            "U30",
+                            "U31",
+                            "U32",
+                            "U33",
+                            "U34",
+                            "U35",
+                            "U36",
+                            "U37",
+                            "U38",
+                            "U39",
+                            "U40",
+                            "U41",
+                            "U42",
+                            "U43",
+                            "U44",
+                            "U45",
+                            "U46",
+                            "U47",
+                            "U48",
+                            "U49",
+                            "U50",
+                            "U51",
+                            "U52",
+                            "U53",
+                            "U54",
+                            "U55",
+                            "U56",
+                            "U57",
+                            "U58",
+                            "U59",
+                            "U60",
+                            "U61",
+                            "U62",
+                            "U63",
+                            "U64",
+                            "U65",
+                            "U66",
+                            "U67",
+                            "U68",
+                            "U69",
+                            "U70",
+                            "U71",
+                            "U72",
+                            "U73",
+                            "U74",
+                            "U75",
+                            "U76",
+                            "U77",
+                            "U78",
+                            "U79",
+                            "U80",
+                            "U81",
+                            "U82",
+                            "U83",
+                            "U84",
+                            "U85",
+                            "U86",
+                            "U87",
+                            "U88",
+                            "U89",
+                            "U90",
+                            "U91",
+                            "U92",
+                            "U93",
+                            "U94",
+                            "U95",
+                            "U96",
+                            "U97",
+                            "U98",
+                            "U99",
+                            "U100"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "FloodlightActivityDynamicTag": {
+            "description": "Dynamic Tag",
+            "id": "FloodlightActivityDynamicTag",
+            "properties": {
+                "id": {
+                    "description": "ID of this dynamic tag. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this tag.",
+                    "type": "string"
+                },
+                "tag": {
+                    "description": "Tag code.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FloodlightActivityGroup": {
+            "description": "Contains properties of a Floodlight activity group.",
+            "id": "FloodlightActivityGroup",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this floodlight activity group. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this floodlight activity group. If this field is left blank, the value will be copied over either from the floodlight configuration's advertiser or from the existing activity group's advertiser.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "floodlightConfigurationId": {
+                    "description": "Floodlight configuration ID of this floodlight activity group. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "floodlightConfigurationIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field."
+                },
+                "id": {
+                    "description": "ID of this floodlight activity group. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this floodlight activity group. This is a read-only, auto-generated field."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivityGroup\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this floodlight activity group. This is a required field. Must be less than 65 characters long and cannot contain quotes.",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this floodlight activity group. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "tagString": {
+                    "description": "Value of the type= parameter in the floodlight tag, which the ad servers use to identify the activity group that the activity belongs to. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being a-z0-9[ _ ]. This tag string must also be unique among activity groups of the same floodlight configuration. This field is read-only after insertion.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Type of the floodlight activity group. This is a required field that is read-only after insertion.",
+                    "enum": [
+                        "COUNTER",
+                        "SALE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FloodlightActivityGroupsListResponse": {
+            "description": "Floodlight Activity Group List Response",
+            "id": "FloodlightActivityGroupsListResponse",
+            "properties": {
+                "floodlightActivityGroups": {
+                    "description": "Floodlight activity group collection.",
+                    "items": {
+                        "$ref": "FloodlightActivityGroup"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightActivityGroupsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FloodlightActivityPublisherDynamicTag": {
+            "description": "Publisher Dynamic Tag",
+            "id": "FloodlightActivityPublisherDynamicTag",
+            "properties": {
+                "clickThrough": {
+                    "description": "Whether this tag is applicable only for click-throughs.",
+                    "type": "boolean"
+                },
+                "directorySiteId": {
+                    "description": "Directory site ID of this dynamic tag. This is a write-only field that can be used as an alternative to the siteId field. When this resource is retrieved, only the siteId field will be populated.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "dynamicTag": {
+                    "$ref": "FloodlightActivityDynamicTag",
+                    "description": "Dynamic floodlight tag."
+                },
+                "siteId": {
+                    "description": "Site ID of this dynamic tag.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "siteIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the site. This is a read-only, auto-generated field."
+                },
+                "viewThrough": {
+                    "description": "Whether this tag is applicable only for view-throughs.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "FloodlightConfiguration": {
+            "description": "Contains properties of a Floodlight configuration.",
+            "id": "FloodlightConfiguration",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this floodlight configuration. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of the parent advertiser of this floodlight configuration.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "analyticsDataSharingEnabled": {
+                    "description": "Whether advertiser data is shared with Google Analytics.",
+                    "type": "boolean"
+                },
+                "customViewabilityMetric": {
+                    "$ref": "CustomViewabilityMetric",
+                    "description": "Custom Viewability metric for the floodlight configuration."
+                },
+                "exposureToConversionEnabled": {
+                    "description": "Whether the exposure-to-conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.",
+                    "type": "boolean"
+                },
+                "firstDayOfWeek": {
+                    "description": "Day that will be counted as the first day of the week in reports. This is a required field.",
+                    "enum": [
+                        "MONDAY",
+                        "SUNDAY"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this floodlight configuration. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this floodlight configuration. This is a read-only, auto-generated field."
+                },
+                "inAppAttributionTrackingEnabled": {
+                    "description": "Whether in-app attribution tracking is enabled.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightConfiguration\".",
+                    "type": "string"
+                },
+                "lookbackConfiguration": {
+                    "$ref": "LookbackConfiguration",
+                    "description": "Lookback window settings for this floodlight configuration."
+                },
+                "naturalSearchConversionAttributionOption": {
+                    "description": "Types of attribution options for natural search conversions.",
+                    "enum": [
+                        "EXCLUDE_NATURAL_SEARCH_CONVERSION_ATTRIBUTION",
+                        "INCLUDE_NATURAL_SEARCH_CONVERSION_ATTRIBUTION",
+                        "INCLUDE_NATURAL_SEARCH_TIERED_CONVERSION_ATTRIBUTION"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "omnitureSettings": {
+                    "$ref": "OmnitureSettings",
+                    "description": "Settings for Campaign Manager Omniture integration."
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this floodlight configuration. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "tagSettings": {
+                    "$ref": "TagSettings",
+                    "description": "Configuration settings for dynamic and image floodlight tags."
+                },
+                "thirdPartyAuthenticationTokens": {
+                    "description": "List of third-party authentication tokens enabled for this configuration.",
+                    "items": {
+                        "$ref": "ThirdPartyAuthenticationToken"
+                    },
+                    "type": "array"
+                },
+                "userDefinedVariableConfigurations": {
+                    "description": "List of user defined variables enabled for this configuration.",
+                    "items": {
+                        "$ref": "UserDefinedVariableConfiguration"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "FloodlightConfigurationsListResponse": {
+            "description": "Floodlight Configuration List Response",
+            "id": "FloodlightConfigurationsListResponse",
+            "properties": {
+                "floodlightConfigurations": {
+                    "description": "Floodlight configuration collection.",
+                    "items": {
+                        "$ref": "FloodlightConfiguration"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#floodlightConfigurationsListResponse\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FloodlightReportCompatibleFields": {
+            "description": "Represents fields that are compatible to be selected for a report of type \"FlOODLIGHT\".",
+            "id": "FloodlightReportCompatibleFields",
+            "properties": {
+                "dimensionFilters": {
+                    "description": "Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "dimensions": {
+                    "description": "Dimensions which are compatible to be selected in the \"dimensions\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#floodlightReportCompatibleFields.",
+                    "type": "string"
+                },
+                "metrics": {
+                    "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "FrequencyCap": {
+            "description": "Frequency Cap.",
+            "id": "FrequencyCap",
+            "properties": {
+                "duration": {
+                    "description": "Duration of time, in seconds, for this frequency cap. The maximum duration is 90 days. Acceptable values are 1 to 7776000, inclusive.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "impressions": {
+                    "description": "Number of times an individual user can be served the ad within the specified duration. Acceptable values are 1 to 15, inclusive.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FsCommand": {
+            "description": "FsCommand.",
+            "id": "FsCommand",
+            "properties": {
+                "left": {
+                    "description": "Distance from the left of the browser.Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "positionOption": {
+                    "description": "Position in the browser where the window will open.",
+                    "enum": [
+                        "CENTERED",
+                        "DISTANCE_FROM_TOP_LEFT_CORNER"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "top": {
+                    "description": "Distance from the top of the browser. Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "windowHeight": {
+                    "description": "Height of the window.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "windowWidth": {
+                    "description": "Width of the window.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "GeoTargeting": {
+            "description": "Geographical Targeting.",
+            "id": "GeoTargeting",
+            "properties": {
+                "cities": {
+                    "description": "Cities to be targeted. For each city only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a city, do not target or exclude the country of the city, and do not target the metro or region of the city.",
+                    "items": {
+                        "$ref": "City"
+                    },
+                    "type": "array"
+                },
+                "countries": {
+                    "description": "Countries to be targeted or excluded from targeting, depending on the setting of the excludeCountries field. For each country only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting or excluding a country, do not target regions, cities, metros, or postal codes in the same country.",
+                    "items": {
+                        "$ref": "Country"
+                    },
+                    "type": "array"
+                },
+                "excludeCountries": {
+                    "description": "Whether or not to exclude the countries in the countries field from targeting. If false, the countries field refers to countries which will be targeted by the ad.",
+                    "type": "boolean"
+                },
+                "metros": {
+                    "description": "Metros to be targeted. For each metro only dmaId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a metro, do not target or exclude the country of the metro.",
+                    "items": {
+                        "$ref": "Metro"
+                    },
+                    "type": "array"
+                },
+                "postalCodes": {
+                    "description": "Postal codes to be targeted. For each postal code only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a postal code, do not target or exclude the country of the postal code.",
+                    "items": {
+                        "$ref": "PostalCode"
+                    },
+                    "type": "array"
+                },
+                "regions": {
+                    "description": "Regions to be targeted. For each region only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a region, do not target or exclude the country of the region.",
+                    "items": {
+                        "$ref": "Region"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "InventoryItem": {
+            "description": "Represents a buy from the Planning inventory store.",
+            "id": "InventoryItem",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "adSlots": {
+                    "description": "Ad slots of this inventory item. If this inventory item represents a standalone placement, there will be exactly one ad slot. If this inventory item represents a placement group, there will be more than one ad slot, each representing one child placement in that placement group.",
+                    "items": {
+                        "$ref": "AdSlot"
+                    },
+                    "type": "array"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "contentCategoryId": {
+                    "description": "Content category ID of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "estimatedClickThroughRate": {
+                    "description": "Estimated click-through rate of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "estimatedConversionRate": {
+                    "description": "Estimated conversion rate of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "inPlan": {
+                    "description": "Whether this inventory item is in plan.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#inventoryItem\".",
+                    "type": "string"
+                },
+                "lastModifiedInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the most recent modification of this inventory item."
+                },
+                "name": {
+                    "description": "Name of this inventory item. For standalone inventory items, this is the same name as that of its only ad slot. For group inventory items, this can differ from the name of any of its ad slots.",
+                    "type": "string"
+                },
+                "negotiationChannelId": {
+                    "description": "Negotiation channel ID of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "orderId": {
+                    "description": "Order ID of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "placementStrategyId": {
+                    "description": "Placement strategy ID of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "pricing": {
+                    "$ref": "Pricing",
+                    "description": "Pricing of this inventory item."
+                },
+                "projectId": {
+                    "description": "Project ID of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "rfpId": {
+                    "description": "RFP ID of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "siteId": {
+                    "description": "ID of the site this inventory item is associated with.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this inventory item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Type of inventory item.",
+                    "enum": [
+                        "PLANNING_PLACEMENT_TYPE_REGULAR",
+                        "PLANNING_PLACEMENT_TYPE_CREDIT"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "InventoryItemsListResponse": {
+            "description": "Inventory item List Response",
+            "id": "InventoryItemsListResponse",
+            "properties": {
+                "inventoryItems": {
+                    "description": "Inventory item collection",
+                    "items": {
+                        "$ref": "InventoryItem"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#inventoryItemsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "KeyValueTargetingExpression": {
+            "description": "Key Value Targeting Expression.",
+            "id": "KeyValueTargetingExpression",
+            "properties": {
+                "expression": {
+                    "description": "Keyword expression being targeted by the ad.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LandingPage": {
+            "description": "Contains information about where a user's browser is taken after the user clicks an ad.",
+            "id": "LandingPage",
+            "properties": {
+                "advertiserId": {
+                    "description": "Advertiser ID of this landing page. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "archived": {
+                    "description": "Whether this landing page has been archived.",
+                    "type": "boolean"
+                },
+                "deepLinks": {
+                    "description": "Links that will direct the user to a mobile app, if installed.",
+                    "items": {
+                        "$ref": "DeepLink"
+                    },
+                    "type": "array"
+                },
+                "id": {
+                    "description": "ID of this landing page. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#landingPage\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this landing page. This is a required field. It must be less than 256 characters long.",
+                    "type": "string"
+                },
+                "url": {
+                    "description": "URL of this landing page. This is a required field.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Language": {
+            "description": "Contains information about a language that can be targeted by ads.",
+            "id": "Language",
+            "properties": {
+                "id": {
+                    "description": "Language ID of this language. This is the ID used for targeting and generating reports.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#language\".",
+                    "type": "string"
+                },
+                "languageCode": {
+                    "description": "Format of language code is an ISO 639 two-letter language code optionally followed by an underscore followed by an ISO 3166 code. Examples are \"en\" for English or \"zh_CN\" for Simplified Chinese.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this language.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LanguageTargeting": {
+            "description": "Language Targeting.",
+            "id": "LanguageTargeting",
+            "properties": {
+                "languages": {
+                    "description": "Languages that this ad targets. For each language only languageId is required. The other fields are populated automatically when the ad is inserted or updated.",
+                    "items": {
+                        "$ref": "Language"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "LanguagesListResponse": {
+            "description": "Language List Response",
+            "id": "LanguagesListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#languagesListResponse\".",
+                    "type": "string"
+                },
+                "languages": {
+                    "description": "Language collection.",
+                    "items": {
+                        "$ref": "Language"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "LastModifiedInfo": {
+            "description": "Modification timestamp.",
+            "id": "LastModifiedInfo",
+            "properties": {
+                "time": {
+                    "description": "Timestamp of the last change in milliseconds since epoch.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListPopulationClause": {
+            "description": "A group clause made up of list population terms representing constraints joined by ORs.",
+            "id": "ListPopulationClause",
+            "properties": {
+                "terms": {
+                    "description": "Terms of this list population clause. Each clause is made up of list population terms representing constraints and are joined by ORs.",
+                    "items": {
+                        "$ref": "ListPopulationTerm"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListPopulationRule": {
+            "description": "Remarketing List Population Rule.",
+            "id": "ListPopulationRule",
+            "properties": {
+                "floodlightActivityId": {
+                    "description": "Floodlight activity ID associated with this rule. This field can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "floodlightActivityName": {
+                    "description": "Name of floodlight activity associated with this rule. This is a read-only, auto-generated field.",
+                    "type": "string"
+                },
+                "listPopulationClauses": {
+                    "description": "Clauses that make up this list population rule. Clauses are joined by ANDs, and the clauses themselves are made up of list population terms which are joined by ORs.",
+                    "items": {
+                        "$ref": "ListPopulationClause"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListPopulationTerm": {
+            "description": "Remarketing List Population Rule Term.",
+            "id": "ListPopulationTerm",
+            "properties": {
+                "contains": {
+                    "description": "Will be true if the term should check if the user is in the list and false if the term should check if the user is not in the list. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM. False by default.",
+                    "type": "boolean"
+                },
+                "negation": {
+                    "description": "Whether to negate the comparison result of this term during rule evaluation. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.",
+                    "type": "boolean"
+                },
+                "operator": {
+                    "description": "Comparison operator of this term. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.",
+                    "enum": [
+                        "NUM_EQUALS",
+                        "NUM_LESS_THAN",
+                        "NUM_LESS_THAN_EQUAL",
+                        "NUM_GREATER_THAN",
+                        "NUM_GREATER_THAN_EQUAL",
+                        "STRING_EQUALS",
+                        "STRING_CONTAINS"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "remarketingListId": {
+                    "description": "ID of the list in question. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "List population term type determines the applicable fields in this object. If left unset or set to CUSTOM_VARIABLE_TERM, then variableName, variableFriendlyName, operator, value, and negation are applicable. If set to LIST_MEMBERSHIP_TERM then remarketingListId and contains are applicable. If set to REFERRER_TERM then operator, value, and negation are applicable.",
+                    "enum": [
+                        "CUSTOM_VARIABLE_TERM",
+                        "LIST_MEMBERSHIP_TERM",
+                        "REFERRER_TERM"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "value": {
+                    "description": "Literal to compare the variable to. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.",
+                    "type": "string"
+                },
+                "variableFriendlyName": {
+                    "description": "Friendly name of this term's variable. This is a read-only, auto-generated field. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM.",
+                    "type": "string"
+                },
+                "variableName": {
+                    "description": "Name of the variable (U1, U2, etc.) being compared in this term. This field is only relevant when type is set to null, CUSTOM_VARIABLE_TERM or REFERRER_TERM.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListTargetingExpression": {
+            "description": "Remarketing List Targeting Expression.",
+            "id": "ListTargetingExpression",
+            "properties": {
+                "expression": {
+                    "description": "Expression describing which lists are being targeted by the ad.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LookbackConfiguration": {
+            "description": "Lookback configuration settings.",
+            "id": "LookbackConfiguration",
+            "properties": {
+                "clickDuration": {
+                    "description": "Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used. Acceptable values are 0 to 90, inclusive.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "postImpressionActivitiesDuration": {
+                    "description": "Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used. Acceptable values are 0 to 90, inclusive.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "Metric": {
+            "description": "Represents a metric.",
+            "id": "Metric",
+            "properties": {
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#metric.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The metric name, e.g. dfa:impressions",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Metro": {
+            "description": "Contains information about a metro region that can be targeted by ads.",
+            "id": "Metro",
+            "properties": {
+                "countryCode": {
+                    "description": "Country code of the country to which this metro region belongs.",
+                    "type": "string"
+                },
+                "countryDartId": {
+                    "description": "DART ID of the country to which this metro region belongs.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "dartId": {
+                    "description": "DART ID of this metro region.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "dmaId": {
+                    "description": "DMA ID of this metro region. This is the ID used for targeting and generating reports, and is equivalent to metro_code.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#metro\".",
+                    "type": "string"
+                },
+                "metroCode": {
+                    "description": "Metro code of this metro region. This is equivalent to dma_id.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this metro region.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MetrosListResponse": {
+            "description": "Metro List Response",
+            "id": "MetrosListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#metrosListResponse\".",
+                    "type": "string"
+                },
+                "metros": {
+                    "description": "Metro collection.",
+                    "items": {
+                        "$ref": "Metro"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "MobileApp": {
+            "description": "Contains information about a mobile app. Used as a landing page deep link.",
+            "id": "MobileApp",
+            "properties": {
+                "directory": {
+                    "description": "Mobile app directory.",
+                    "enum": [
+                        "UNKNOWN",
+                        "APPLE_APP_STORE",
+                        "GOOGLE_PLAY_STORE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this mobile app.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#mobileApp\".",
+                    "type": "string"
+                },
+                "publisherName": {
+                    "description": "Publisher name.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Title of this mobile app.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MobileAppsListResponse": {
+            "description": "Mobile app List Response",
+            "id": "MobileAppsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#mobileAppsListResponse\".",
+                    "type": "string"
+                },
+                "mobileApps": {
+                    "description": "Mobile apps collection.",
+                    "items": {
+                        "$ref": "MobileApp"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MobileCarrier": {
+            "description": "Contains information about a mobile carrier that can be targeted by ads.",
+            "id": "MobileCarrier",
+            "properties": {
+                "countryCode": {
+                    "description": "Country code of the country to which this mobile carrier belongs.",
+                    "type": "string"
+                },
+                "countryDartId": {
+                    "description": "DART ID of the country to which this mobile carrier belongs.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this mobile carrier.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#mobileCarrier\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this mobile carrier.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MobileCarriersListResponse": {
+            "description": "Mobile Carrier List Response",
+            "id": "MobileCarriersListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#mobileCarriersListResponse\".",
+                    "type": "string"
+                },
+                "mobileCarriers": {
+                    "description": "Mobile carrier collection.",
+                    "items": {
+                        "$ref": "MobileCarrier"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ObaIcon": {
+            "description": "Online Behavioral Advertiser icon.",
+            "id": "ObaIcon",
+            "properties": {
+                "iconClickThroughUrl": {
+                    "description": "URL to redirect to when an OBA icon is clicked.",
+                    "type": "string"
+                },
+                "iconClickTrackingUrl": {
+                    "description": "URL to track click when an OBA icon is clicked.",
+                    "type": "string"
+                },
+                "iconViewTrackingUrl": {
+                    "description": "URL to track view when an OBA icon is clicked.",
+                    "type": "string"
+                },
+                "program": {
+                    "description": "Identifies the industry initiative that the icon supports. For example, AdChoices.",
+                    "type": "string"
+                },
+                "resourceUrl": {
+                    "description": "OBA icon resource URL. Campaign Manager only supports image and JavaScript icons. Learn more",
+                    "type": "string"
+                },
+                "size": {
+                    "$ref": "Size",
+                    "description": "OBA icon size."
+                },
+                "xPosition": {
+                    "description": "OBA icon x coordinate position. Accepted values are left or right.",
+                    "type": "string"
+                },
+                "yPosition": {
+                    "description": "OBA icon y coordinate position. Accepted values are top or bottom.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ObjectFilter": {
+            "description": "Object Filter.",
+            "id": "ObjectFilter",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#objectFilter\".",
+                    "type": "string"
+                },
+                "objectIds": {
+                    "description": "Applicable when status is ASSIGNED. The user has access to objects with these object IDs.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "status": {
+                    "description": "Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.",
+                    "enum": [
+                        "NONE",
+                        "ASSIGNED",
+                        "ALL"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "OffsetPosition": {
+            "description": "Offset Position.",
+            "id": "OffsetPosition",
+            "properties": {
+                "left": {
+                    "description": "Offset distance from left side of an asset or a window.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "top": {
+                    "description": "Offset distance from top side of an asset or a window.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "OmnitureSettings": {
+            "description": "Omniture Integration Settings.",
+            "id": "OmnitureSettings",
+            "properties": {
+                "omnitureCostDataEnabled": {
+                    "description": "Whether placement cost data will be sent to Omniture. This property can be enabled only if omnitureIntegrationEnabled is true.",
+                    "type": "boolean"
+                },
+                "omnitureIntegrationEnabled": {
+                    "description": "Whether Omniture integration is enabled. This property can be enabled only when the \"Advanced Ad Serving\" account setting is enabled.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "OperatingSystem": {
+            "description": "Contains information about an operating system that can be targeted by ads.",
+            "id": "OperatingSystem",
+            "properties": {
+                "dartId": {
+                    "description": "DART ID of this operating system. This is the ID used for targeting.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "desktop": {
+                    "description": "Whether this operating system is for desktop.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#operatingSystem\".",
+                    "type": "string"
+                },
+                "mobile": {
+                    "description": "Whether this operating system is for mobile.",
+                    "type": "boolean"
+                },
+                "name": {
+                    "description": "Name of this operating system.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "OperatingSystemVersion": {
+            "description": "Contains information about a particular version of an operating system that can be targeted by ads.",
+            "id": "OperatingSystemVersion",
+            "properties": {
+                "id": {
+                    "description": "ID of this operating system version.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#operatingSystemVersion\".",
+                    "type": "string"
+                },
+                "majorVersion": {
+                    "description": "Major version (leftmost number) of this operating system version.",
+                    "type": "string"
+                },
+                "minorVersion": {
+                    "description": "Minor version (number after the first dot) of this operating system version.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this operating system version.",
+                    "type": "string"
+                },
+                "operatingSystem": {
+                    "$ref": "OperatingSystem",
+                    "description": "Operating system of this operating system version."
+                }
+            },
+            "type": "object"
+        },
+        "OperatingSystemVersionsListResponse": {
+            "description": "Operating System Version List Response",
+            "id": "OperatingSystemVersionsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#operatingSystemVersionsListResponse\".",
+                    "type": "string"
+                },
+                "operatingSystemVersions": {
+                    "description": "Operating system version collection.",
+                    "items": {
+                        "$ref": "OperatingSystemVersion"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "OperatingSystemsListResponse": {
+            "description": "Operating System List Response",
+            "id": "OperatingSystemsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#operatingSystemsListResponse\".",
+                    "type": "string"
+                },
+                "operatingSystems": {
+                    "description": "Operating system collection.",
+                    "items": {
+                        "$ref": "OperatingSystem"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "OptimizationActivity": {
+            "description": "Creative optimization activity.",
+            "id": "OptimizationActivity",
+            "properties": {
+                "floodlightActivityId": {
+                    "description": "Floodlight activity ID of this optimization activity. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "floodlightActivityIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field."
+                },
+                "weight": {
+                    "description": "Weight associated with this optimization. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities. Value must be greater than or equal to 1.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "Order": {
+            "description": "Describes properties of a Planning order.",
+            "id": "Order",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this order.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this order.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "approverUserProfileIds": {
+                    "description": "IDs for users that have to approve documents created for this order.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "buyerInvoiceId": {
+                    "description": "Buyer invoice ID associated with this order.",
+                    "type": "string"
+                },
+                "buyerOrganizationName": {
+                    "description": "Name of the buyer organization.",
+                    "type": "string"
+                },
+                "comments": {
+                    "description": "Comments in this order.",
+                    "type": "string"
+                },
+                "contacts": {
+                    "description": "Contacts for this order.",
+                    "items": {
+                        "$ref": "OrderContact"
+                    },
+                    "type": "array"
+                },
+                "id": {
+                    "description": "ID of this order. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#order\".",
+                    "type": "string"
+                },
+                "lastModifiedInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the most recent modification of this order."
+                },
+                "name": {
+                    "description": "Name of this order.",
+                    "type": "string"
+                },
+                "notes": {
+                    "description": "Notes of this order.",
+                    "type": "string"
+                },
+                "planningTermId": {
+                    "description": "ID of the terms and conditions template used in this order.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "projectId": {
+                    "description": "Project ID of this order.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "sellerOrderId": {
+                    "description": "Seller order ID associated with this order.",
+                    "type": "string"
+                },
+                "sellerOrganizationName": {
+                    "description": "Name of the seller organization.",
+                    "type": "string"
+                },
+                "siteId": {
+                    "description": "Site IDs this order is associated with.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "siteNames": {
+                    "description": "Free-form site names this order is associated with.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this order.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "termsAndConditions": {
+                    "description": "Terms and conditions of this order.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "OrderContact": {
+            "description": "Contact of an order.",
+            "id": "OrderContact",
+            "properties": {
+                "contactInfo": {
+                    "description": "Free-form information about this contact. It could be any information related to this contact in addition to type, title, name, and signature user profile ID.",
+                    "type": "string"
+                },
+                "contactName": {
+                    "description": "Name of this contact.",
+                    "type": "string"
+                },
+                "contactTitle": {
+                    "description": "Title of this contact.",
+                    "type": "string"
+                },
+                "contactType": {
+                    "description": "Type of this contact.",
+                    "enum": [
+                        "PLANNING_ORDER_CONTACT_BUYER_CONTACT",
+                        "PLANNING_ORDER_CONTACT_BUYER_BILLING_CONTACT",
+                        "PLANNING_ORDER_CONTACT_SELLER_CONTACT"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "signatureUserProfileId": {
+                    "description": "ID of the user profile containing the signature that will be embedded into order documents.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "OrderDocument": {
+            "description": "Contains properties of a Planning order document.",
+            "id": "OrderDocument",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this order document.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this order document.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "amendedOrderDocumentId": {
+                    "description": "The amended order document ID of this order document. An order document can be created by optionally amending another order document so that the change history can be preserved.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "approvedByUserProfileIds": {
+                    "description": "IDs of users who have approved this order document.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "cancelled": {
+                    "description": "Whether this order document is cancelled.",
+                    "type": "boolean"
+                },
+                "createdInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the creation of this order document."
+                },
+                "effectiveDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this order document.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#orderDocument\".",
+                    "type": "string"
+                },
+                "lastSentRecipients": {
+                    "description": "List of email addresses that received the last sent document.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "lastSentTime": {
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "orderId": {
+                    "description": "ID of the order from which this order document is created.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "projectId": {
+                    "description": "Project ID of this order document.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "signed": {
+                    "description": "Whether this order document has been signed.",
+                    "type": "boolean"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this order document.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Title of this order document.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Type of this order document",
+                    "enum": [
+                        "PLANNING_ORDER_TYPE_INSERTION_ORDER",
+                        "PLANNING_ORDER_TYPE_CHANGE_ORDER"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "OrderDocumentsListResponse": {
+            "description": "Order document List Response",
+            "id": "OrderDocumentsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#orderDocumentsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "orderDocuments": {
+                    "description": "Order document collection",
+                    "items": {
+                        "$ref": "OrderDocument"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "OrdersListResponse": {
+            "description": "Order List Response",
+            "id": "OrdersListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#ordersListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "orders": {
+                    "description": "Order collection.",
+                    "items": {
+                        "$ref": "Order"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PathFilter": {
+            "description": "Represents a DfaReporting path filter.",
+            "id": "PathFilter",
+            "properties": {
+                "eventFilters": {
+                    "description": "Event filters in path report.",
+                    "items": {
+                        "$ref": "EventFilter"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#pathFilter.",
+                    "type": "string"
+                },
+                "pathMatchPosition": {
+                    "description": "Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.",
+                    "enum": [
+                        "PATH_MATCH_POSITION_UNSPECIFIED",
+                        "ANY",
+                        "FIRST",
+                        "LAST"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PathReportCompatibleFields": {
+            "description": "Represents fields that are compatible to be selected for a report of type \"PATH\".",
+            "id": "PathReportCompatibleFields",
+            "properties": {
+                "channelGroupings": {
+                    "description": "Dimensions which are compatible to be selected in the \"channelGroupings\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "dimensions": {
+                    "description": "Dimensions which are compatible to be selected in the \"dimensions\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#pathReportCompatibleFields.",
+                    "type": "string"
+                },
+                "metrics": {
+                    "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                },
+                "pathFilters": {
+                    "description": "Dimensions which are compatible to be selected in the \"pathFilters\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PathReportDimensionValue": {
+            "description": "Represents a PathReportDimensionValue resource.",
+            "id": "PathReportDimensionValue",
+            "properties": {
+                "dimensionName": {
+                    "description": "The name of the dimension.",
+                    "type": "string"
+                },
+                "ids": {
+                    "description": "The possible ID's associated with the value if available.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#pathReportDimensionValue.",
+                    "type": "string"
+                },
+                "matchType": {
+                    "description": "Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.",
+                    "enum": [
+                        "EXACT",
+                        "BEGINS_WITH",
+                        "CONTAINS",
+                        "WILDCARD_EXPRESSION"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "values": {
+                    "description": "The possible values of the dimension.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PathToConversionReportCompatibleFields": {
+            "description": "Represents fields that are compatible to be selected for a report of type \"PATH_TO_CONVERSION\".",
+            "id": "PathToConversionReportCompatibleFields",
+            "properties": {
+                "conversionDimensions": {
+                    "description": "Conversion dimensions which are compatible to be selected in the \"conversionDimensions\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "customFloodlightVariables": {
+                    "description": "Custom floodlight variables which are compatible to be selected in the \"customFloodlightVariables\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#pathToConversionReportCompatibleFields.",
+                    "type": "string"
+                },
+                "metrics": {
+                    "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                },
+                "perInteractionDimensions": {
+                    "description": "Per-interaction dimensions which are compatible to be selected in the \"perInteractionDimensions\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Placement": {
+            "description": "Contains properties of a placement.",
+            "id": "Placement",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this placement. This field can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "adBlockingOptOut": {
+                    "description": "Whether this placement opts out of ad blocking. When true, ad blocking is disabled for this placement. When false, the campaign and site settings take effect.",
+                    "type": "boolean"
+                },
+                "additionalSizes": {
+                    "description": "Additional sizes associated with this placement. When inserting or updating a placement, only the size ID field is used.",
+                    "items": {
+                        "$ref": "Size"
+                    },
+                    "type": "array"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this placement. This field can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "archived": {
+                    "description": "Whether this placement is archived.",
+                    "type": "boolean"
+                },
+                "campaignId": {
+                    "description": "Campaign ID of this placement. This field is a required field on insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "campaignIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the campaign. This is a read-only, auto-generated field."
+                },
+                "comment": {
+                    "description": "Comments for this placement.",
+                    "type": "string"
+                },
+                "compatibility": {
+                    "description": "Placement compatibility. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering on desktop, on mobile devices or in mobile apps for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are no longer allowed for new placement insertions. Instead, use DISPLAY or DISPLAY_INTERSTITIAL. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. This field is required on insertion.",
+                    "enum": [
+                        "DISPLAY",
+                        "DISPLAY_INTERSTITIAL",
+                        "APP",
+                        "APP_INTERSTITIAL",
+                        "IN_STREAM_VIDEO",
+                        "IN_STREAM_AUDIO"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "contentCategoryId": {
+                    "description": "ID of the content category assigned to this placement.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "createInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the creation of this placement. This is a read-only field."
+                },
+                "directorySiteId": {
+                    "description": "Directory site ID of this placement. On insert, you must set either this field or the siteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "directorySiteIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the directory site. This is a read-only, auto-generated field."
+                },
+                "externalId": {
+                    "description": "External ID for this placement.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this placement. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this placement. This is a read-only, auto-generated field."
+                },
+                "keyName": {
+                    "description": "Key name of this placement. This is a read-only, auto-generated field.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placement\".",
+                    "type": "string"
+                },
+                "lastModifiedInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the most recent modification of this placement. This is a read-only field."
+                },
+                "lookbackConfiguration": {
+                    "$ref": "LookbackConfiguration",
+                    "description": "Lookback window settings for this placement."
+                },
+                "name": {
+                    "description": "Name of this placement.This is a required field and must be less than or equal to 256 characters long.",
+                    "type": "string"
+                },
+                "paymentApproved": {
+                    "description": "Whether payment was approved for this placement. This is a read-only field relevant only to publisher-paid placements.",
+                    "type": "boolean"
+                },
+                "paymentSource": {
+                    "description": "Payment source for this placement. This is a required field that is read-only after insertion.",
+                    "enum": [
+                        "PLACEMENT_AGENCY_PAID",
+                        "PLACEMENT_PUBLISHER_PAID"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "placementGroupId": {
+                    "description": "ID of this placement's group, if applicable.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "placementGroupIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the placement group. This is a read-only, auto-generated field."
+                },
+                "placementStrategyId": {
+                    "description": "ID of the placement strategy assigned to this placement.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "pricingSchedule": {
+                    "$ref": "PricingSchedule",
+                    "description": "Pricing schedule of this placement. This field is required on insertion, specifically subfields startDate, endDate and pricingType."
+                },
+                "primary": {
+                    "description": "Whether this placement is the primary placement of a roadblock (placement group). You cannot change this field from true to false. Setting this field to true will automatically set the primary field on the original primary placement of the roadblock to false, and it will automatically set the roadblock's primaryPlacementId field to the ID of this placement.",
+                    "type": "boolean"
+                },
+                "publisherUpdateInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the last publisher update. This is a read-only field."
+                },
+                "siteId": {
+                    "description": "Site ID associated with this placement. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "siteIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the site. This is a read-only, auto-generated field."
+                },
+                "size": {
+                    "$ref": "Size",
+                    "description": "Size associated with this placement. When inserting or updating a placement, only the size ID field is used. This field is required on insertion."
+                },
+                "sslRequired": {
+                    "description": "Whether creatives assigned to this placement must be SSL-compliant.",
+                    "type": "boolean"
+                },
+                "status": {
+                    "description": "Third-party placement status.",
+                    "enum": [
+                        "PENDING_REVIEW",
+                        "PAYMENT_ACCEPTED",
+                        "PAYMENT_REJECTED",
+                        "ACKNOWLEDGE_REJECTION",
+                        "ACKNOWLEDGE_ACCEPTANCE",
+                        "DRAFT"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this placement. This field can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "tagFormats": {
+                    "description": "Tag formats to generate for this placement. This field is required on insertion. Acceptable values are: - \"PLACEMENT_TAG_STANDARD\" - \"PLACEMENT_TAG_IFRAME_JAVASCRIPT\" - \"PLACEMENT_TAG_IFRAME_ILAYER\" - \"PLACEMENT_TAG_INTERNAL_REDIRECT\" - \"PLACEMENT_TAG_JAVASCRIPT\" - \"PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT\" - \"PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT\" - \"PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT\" - \"PLACEMENT_TAG_CLICK_COMMANDS\" - \"PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH\" - \"PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_3\" - \"PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_4\" - \"PLACEMENT_TAG_TRACKING\" - \"PLACEMENT_TAG_TRACKING_IFRAME\" - \"PLACEMENT_TAG_TRACKING_JAVASCRIPT\" ",
+                    "items": {
+                        "enum": [
+                            "PLACEMENT_TAG_STANDARD",
+                            "PLACEMENT_TAG_IFRAME_JAVASCRIPT",
+                            "PLACEMENT_TAG_IFRAME_ILAYER",
+                            "PLACEMENT_TAG_INTERNAL_REDIRECT",
+                            "PLACEMENT_TAG_JAVASCRIPT",
+                            "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT",
+                            "PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT",
+                            "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT",
+                            "PLACEMENT_TAG_CLICK_COMMANDS",
+                            "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH",
+                            "PLACEMENT_TAG_TRACKING",
+                            "PLACEMENT_TAG_TRACKING_IFRAME",
+                            "PLACEMENT_TAG_TRACKING_JAVASCRIPT",
+                            "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_3",
+                            "PLACEMENT_TAG_IFRAME_JAVASCRIPT_LEGACY",
+                            "PLACEMENT_TAG_JAVASCRIPT_LEGACY",
+                            "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT_LEGACY",
+                            "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT_LEGACY",
+                            "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_4"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "tagSetting": {
+                    "$ref": "TagSetting",
+                    "description": "Tag settings for this placement."
+                },
+                "videoActiveViewOptOut": {
+                    "description": "Whether Verification and ActiveView are disabled for in-stream video creatives for this placement. The same setting videoActiveViewOptOut exists on the site level -- the opt out occurs if either of these settings are true. These settings are distinct from DirectorySites.settings.activeViewOptOut or Sites.siteSettings.activeViewOptOut which only apply to display ads. However, Accounts.activeViewOptOut opts out both video traffic, as well as display ads, from Verification and ActiveView.",
+                    "type": "boolean"
+                },
+                "videoSettings": {
+                    "$ref": "VideoSettings",
+                    "description": "A collection of settings which affect video creatives served through this placement. Applicable to placements with IN_STREAM_VIDEO compatibility."
+                },
+                "vpaidAdapterChoice": {
+                    "description": "VPAID adapter setting for this placement. Controls which VPAID format the measurement adapter will use for in-stream video creatives assigned to this placement. *Note:* Flash is no longer supported. This field now defaults to HTML5 when the following values are provided: FLASH, BOTH.",
+                    "enum": [
+                        "DEFAULT",
+                        "FLASH",
+                        "HTML5",
+                        "BOTH"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PlacementAssignment": {
+            "description": "Placement Assignment.",
+            "id": "PlacementAssignment",
+            "properties": {
+                "active": {
+                    "description": "Whether this placement assignment is active. When true, the placement will be included in the ad's rotation.",
+                    "type": "boolean"
+                },
+                "placementId": {
+                    "description": "ID of the placement to be assigned. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "placementIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the placement. This is a read-only, auto-generated field."
+                },
+                "sslRequired": {
+                    "description": "Whether the placement to be assigned requires SSL. This is a read-only field that is auto-generated when the ad is inserted or updated.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "PlacementGroup": {
+            "description": "Contains properties of a package or roadblock.",
+            "id": "PlacementGroup",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this placement group. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this placement group. This is a required field on insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "archived": {
+                    "description": "Whether this placement group is archived.",
+                    "type": "boolean"
+                },
+                "campaignId": {
+                    "description": "Campaign ID of this placement group. This field is required on insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "campaignIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the campaign. This is a read-only, auto-generated field."
+                },
+                "childPlacementIds": {
+                    "description": "IDs of placements which are assigned to this placement group. This is a read-only, auto-generated field.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "comment": {
+                    "description": "Comments for this placement group.",
+                    "type": "string"
+                },
+                "contentCategoryId": {
+                    "description": "ID of the content category assigned to this placement group.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "createInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the creation of this placement group. This is a read-only field."
+                },
+                "directorySiteId": {
+                    "description": "Directory site ID associated with this placement group. On insert, you must set either this field or the site_id field to specify the site associated with this placement group. This is a required field that is read-only after insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "directorySiteIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the directory site. This is a read-only, auto-generated field."
+                },
+                "externalId": {
+                    "description": "External ID for this placement.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this placement group. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this placement group. This is a read-only, auto-generated field."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementGroup\".",
+                    "type": "string"
+                },
+                "lastModifiedInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the most recent modification of this placement group. This is a read-only field."
+                },
+                "name": {
+                    "description": "Name of this placement group. This is a required field and must be less than 256 characters long.",
+                    "type": "string"
+                },
+                "placementGroupType": {
+                    "description": "Type of this placement group. A package is a simple group of placements that acts as a single pricing point for a group of tags. A roadblock is a group of placements that not only acts as a single pricing point, but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned placements to be marked as primary for reporting. This field is required on insertion.",
+                    "enum": [
+                        "PLACEMENT_PACKAGE",
+                        "PLACEMENT_ROADBLOCK"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "placementStrategyId": {
+                    "description": "ID of the placement strategy assigned to this placement group.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "pricingSchedule": {
+                    "$ref": "PricingSchedule",
+                    "description": "Pricing schedule of this placement group. This field is required on insertion."
+                },
+                "primaryPlacementId": {
+                    "description": "ID of the primary placement, used to calculate the media cost of a roadblock (placement group). Modifying this field will automatically modify the primary field on all affected roadblock child placements.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "primaryPlacementIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the primary placement. This is a read-only, auto-generated field."
+                },
+                "siteId": {
+                    "description": "Site ID associated with this placement group. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement group. This is a required field that is read-only after insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "siteIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the site. This is a read-only, auto-generated field."
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this placement group. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PlacementGroupsListResponse": {
+            "description": "Placement Group List Response",
+            "id": "PlacementGroupsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementGroupsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "placementGroups": {
+                    "description": "Placement group collection.",
+                    "items": {
+                        "$ref": "PlacementGroup"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PlacementStrategiesListResponse": {
+            "description": "Placement Strategy List Response",
+            "id": "PlacementStrategiesListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementStrategiesListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "placementStrategies": {
+                    "description": "Placement strategy collection.",
+                    "items": {
+                        "$ref": "PlacementStrategy"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PlacementStrategy": {
+            "description": "Contains properties of a placement strategy.",
+            "id": "PlacementStrategy",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this placement strategy.This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this placement strategy. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementStrategy\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this placement strategy. This is a required field. It must be less than 256 characters long and unique among placement strategies of the same account.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PlacementTag": {
+            "description": "Placement Tag",
+            "id": "PlacementTag",
+            "properties": {
+                "placementId": {
+                    "description": "Placement ID",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "tagDatas": {
+                    "description": "Tags generated for this placement.",
+                    "items": {
+                        "$ref": "TagData"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PlacementsGenerateTagsResponse": {
+            "description": "Placement GenerateTags Response",
+            "id": "PlacementsGenerateTagsResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementsGenerateTagsResponse\".",
+                    "type": "string"
+                },
+                "placementTags": {
+                    "description": "Set of generated tags for the specified placements.",
+                    "items": {
+                        "$ref": "PlacementTag"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PlacementsListResponse": {
+            "description": "Placement List Response",
+            "id": "PlacementsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#placementsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "placements": {
+                    "description": "Placement collection.",
+                    "items": {
+                        "$ref": "Placement"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PlatformType": {
+            "description": "Contains information about a platform type that can be targeted by ads.",
+            "id": "PlatformType",
+            "properties": {
+                "id": {
+                    "description": "ID of this platform type.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#platformType\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this platform type.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PlatformTypesListResponse": {
+            "description": "Platform Type List Response",
+            "id": "PlatformTypesListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#platformTypesListResponse\".",
+                    "type": "string"
+                },
+                "platformTypes": {
+                    "description": "Platform type collection.",
+                    "items": {
+                        "$ref": "PlatformType"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PopupWindowProperties": {
+            "description": "Popup Window Properties.",
+            "id": "PopupWindowProperties",
+            "properties": {
+                "dimension": {
+                    "$ref": "Size",
+                    "description": "Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID"
+                },
+                "offset": {
+                    "$ref": "OffsetPosition",
+                    "description": "Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES."
+                },
+                "positionType": {
+                    "description": "Popup window position either centered or at specific coordinate.",
+                    "enum": [
+                        "CENTER",
+                        "COORDINATES"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "showAddressBar": {
+                    "description": "Whether to display the browser address bar.",
+                    "type": "boolean"
+                },
+                "showMenuBar": {
+                    "description": "Whether to display the browser menu bar.",
+                    "type": "boolean"
+                },
+                "showScrollBar": {
+                    "description": "Whether to display the browser scroll bar.",
+                    "type": "boolean"
+                },
+                "showStatusBar": {
+                    "description": "Whether to display the browser status bar.",
+                    "type": "boolean"
+                },
+                "showToolBar": {
+                    "description": "Whether to display the browser tool bar.",
+                    "type": "boolean"
+                },
+                "title": {
+                    "description": "Title of popup window.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PostalCode": {
+            "description": "Contains information about a postal code that can be targeted by ads.",
+            "id": "PostalCode",
+            "properties": {
+                "code": {
+                    "description": "Postal code. This is equivalent to the id field.",
+                    "type": "string"
+                },
+                "countryCode": {
+                    "description": "Country code of the country to which this postal code belongs.",
+                    "type": "string"
+                },
+                "countryDartId": {
+                    "description": "DART ID of the country to which this postal code belongs.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this postal code.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#postalCode\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PostalCodesListResponse": {
+            "description": "Postal Code List Response",
+            "id": "PostalCodesListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#postalCodesListResponse\".",
+                    "type": "string"
+                },
+                "postalCodes": {
+                    "description": "Postal code collection.",
+                    "items": {
+                        "$ref": "PostalCode"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Pricing": {
+            "description": "Pricing Information",
+            "id": "Pricing",
+            "properties": {
+                "capCostType": {
+                    "description": "Cap cost type of this inventory item.",
+                    "enum": [
+                        "PLANNING_PLACEMENT_CAP_COST_TYPE_NONE",
+                        "PLANNING_PLACEMENT_CAP_COST_TYPE_MONTHLY",
+                        "PLANNING_PLACEMENT_CAP_COST_TYPE_CUMULATIVE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "endDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "flights": {
+                    "description": "Flights of this inventory item. A flight (a.k.a. pricing period) represents the inventory item pricing information for a specific period of time.",
+                    "items": {
+                        "$ref": "Flight"
+                    },
+                    "type": "array"
+                },
+                "groupType": {
+                    "description": "Group type of this inventory item if it represents a placement group. Is null otherwise. There are two type of placement groups: PLANNING_PLACEMENT_GROUP_TYPE_PACKAGE is a simple group of inventory items that acts as a single pricing point for a group of tags. PLANNING_PLACEMENT_GROUP_TYPE_ROADBLOCK is a group of inventory items that not only acts as a single pricing point, but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned inventory items to be marked as primary.",
+                    "enum": [
+                        "PLANNING_PLACEMENT_GROUP_TYPE_PACKAGE",
+                        "PLANNING_PLACEMENT_GROUP_TYPE_ROADBLOCK"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "pricingType": {
+                    "description": "Pricing type of this inventory item.",
+                    "enum": [
+                        "PLANNING_PLACEMENT_PRICING_TYPE_IMPRESSIONS",
+                        "PLANNING_PLACEMENT_PRICING_TYPE_CPM",
+                        "PLANNING_PLACEMENT_PRICING_TYPE_CLICKS",
+                        "PLANNING_PLACEMENT_PRICING_TYPE_CPC",
+                        "PLANNING_PLACEMENT_PRICING_TYPE_CPA",
+                        "PLANNING_PLACEMENT_PRICING_TYPE_FLAT_RATE_IMPRESSIONS",
+                        "PLANNING_PLACEMENT_PRICING_TYPE_FLAT_RATE_CLICKS",
+                        "PLANNING_PLACEMENT_PRICING_TYPE_CPM_ACTIVEVIEW"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "startDate": {
+                    "format": "date",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PricingSchedule": {
+            "description": "Pricing Schedule",
+            "id": "PricingSchedule",
+            "properties": {
+                "capCostOption": {
+                    "description": "Placement cap cost option.",
+                    "enum": [
+                        "CAP_COST_NONE",
+                        "CAP_COST_MONTHLY",
+                        "CAP_COST_CUMULATIVE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "endDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "flighted": {
+                    "description": "Whether this placement is flighted. If true, pricing periods will be computed automatically.",
+                    "type": "boolean"
+                },
+                "floodlightActivityId": {
+                    "description": "Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING_TYPE_CPA.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "pricingPeriods": {
+                    "description": "Pricing periods for this placement.",
+                    "items": {
+                        "$ref": "PricingSchedulePricingPeriod"
+                    },
+                    "type": "array"
+                },
+                "pricingType": {
+                    "description": "Placement pricing type. This field is required on insertion.",
+                    "enum": [
+                        "PRICING_TYPE_CPM",
+                        "PRICING_TYPE_CPC",
+                        "PRICING_TYPE_CPA",
+                        "PRICING_TYPE_FLAT_RATE_IMPRESSIONS",
+                        "PRICING_TYPE_FLAT_RATE_CLICKS",
+                        "PRICING_TYPE_CPM_ACTIVEVIEW"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "startDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "testingStartDate": {
+                    "format": "date",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PricingSchedulePricingPeriod": {
+            "description": "Pricing Period",
+            "id": "PricingSchedulePricingPeriod",
+            "properties": {
+                "endDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "pricingComment": {
+                    "description": "Comments for this pricing period.",
+                    "type": "string"
+                },
+                "rateOrCostNanos": {
+                    "description": "Rate or cost of this pricing period in nanos (i.e., multipled by 1000000000). Acceptable values are 0 to 1000000000000000000, inclusive.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "startDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "units": {
+                    "description": "Units of this pricing period. Acceptable values are 0 to 10000000000, inclusive.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Project": {
+            "description": "Contains properties of a Planning project.",
+            "id": "Project",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this project.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this project.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "audienceAgeGroup": {
+                    "description": "Audience age group of this project.",
+                    "enum": [
+                        "PLANNING_AUDIENCE_AGE_18_24",
+                        "PLANNING_AUDIENCE_AGE_25_34",
+                        "PLANNING_AUDIENCE_AGE_35_44",
+                        "PLANNING_AUDIENCE_AGE_45_54",
+                        "PLANNING_AUDIENCE_AGE_55_64",
+                        "PLANNING_AUDIENCE_AGE_65_OR_MORE",
+                        "PLANNING_AUDIENCE_AGE_UNKNOWN"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "audienceGender": {
+                    "description": "Audience gender of this project.",
+                    "enum": [
+                        "PLANNING_AUDIENCE_GENDER_MALE",
+                        "PLANNING_AUDIENCE_GENDER_FEMALE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "budget": {
+                    "description": "Budget of this project in the currency specified by the current account. The value stored in this field represents only the non-fractional amount. For example, for USD, the smallest value that can be represented by this field is 1 US dollar.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "clientBillingCode": {
+                    "description": "Client billing code of this project.",
+                    "type": "string"
+                },
+                "clientName": {
+                    "description": "Name of the project client.",
+                    "type": "string"
+                },
+                "endDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this project. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#project\".",
+                    "type": "string"
+                },
+                "lastModifiedInfo": {
+                    "$ref": "LastModifiedInfo",
+                    "description": "Information about the most recent modification of this project."
+                },
+                "name": {
+                    "description": "Name of this project.",
+                    "type": "string"
+                },
+                "overview": {
+                    "description": "Overview of this project.",
+                    "type": "string"
+                },
+                "startDate": {
+                    "format": "date",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this project.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "targetClicks": {
+                    "description": "Number of clicks that the advertiser is targeting.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "targetConversions": {
+                    "description": "Number of conversions that the advertiser is targeting.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "targetCpaNanos": {
+                    "description": "CPA that the advertiser is targeting.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "targetCpcNanos": {
+                    "description": "CPC that the advertiser is targeting.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "targetCpmActiveViewNanos": {
+                    "description": "vCPM from Active View that the advertiser is targeting.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "targetCpmNanos": {
+                    "description": "CPM that the advertiser is targeting.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "targetImpressions": {
+                    "description": "Number of impressions that the advertiser is targeting.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ProjectsListResponse": {
+            "description": "Project List Response",
+            "id": "ProjectsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#projectsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "projects": {
+                    "description": "Project collection.",
+                    "items": {
+                        "$ref": "Project"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ReachReportCompatibleFields": {
+            "description": "Represents fields that are compatible to be selected for a report of type \"REACH\".",
+            "id": "ReachReportCompatibleFields",
+            "properties": {
+                "dimensionFilters": {
+                    "description": "Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "dimensions": {
+                    "description": "Dimensions which are compatible to be selected in the \"dimensions\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#reachReportCompatibleFields.",
+                    "type": "string"
+                },
+                "metrics": {
+                    "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                },
+                "pivotedActivityMetrics": {
+                    "description": "Metrics which are compatible to be selected as activity metrics to pivot on in the \"activities\" section of the report.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                },
+                "reachByFrequencyMetrics": {
+                    "description": "Metrics which are compatible to be selected in the \"reachByFrequencyMetricNames\" section of the report.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Recipient": {
+            "description": "Represents a recipient.",
+            "id": "Recipient",
+            "properties": {
+                "deliveryType": {
+                    "annotations": {
+                        "required": [
+                            "dfareporting.reports.insert",
+                            "dfareporting.reports.update"
+                        ]
+                    },
+                    "description": "The delivery type for the recipient.",
+                    "enum": [
+                        "LINK",
+                        "ATTACHMENT"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "email": {
+                    "annotations": {
+                        "required": [
+                            "dfareporting.reports.insert",
+                            "dfareporting.reports.update"
+                        ]
+                    },
+                    "description": "The email address of the recipient.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#recipient.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Region": {
+            "description": "Contains information about a region that can be targeted by ads.",
+            "id": "Region",
+            "properties": {
+                "countryCode": {
+                    "description": "Country code of the country to which this region belongs.",
+                    "type": "string"
+                },
+                "countryDartId": {
+                    "description": "DART ID of the country to which this region belongs.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "dartId": {
+                    "description": "DART ID of this region.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#region\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this region.",
+                    "type": "string"
+                },
+                "regionCode": {
+                    "description": "Region code.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RegionsListResponse": {
+            "description": "Region List Response",
+            "id": "RegionsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#regionsListResponse\".",
+                    "type": "string"
+                },
+                "regions": {
+                    "description": "Region collection.",
+                    "items": {
+                        "$ref": "Region"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "RemarketingList": {
+            "description": "Contains properties of a remarketing list. Remarketing enables you to create lists of users who have performed specific actions on a site, then target ads to members of those lists. This resource can be used to manage remarketing lists that are owned by your advertisers. To see all remarketing lists that are visible to your advertisers, including those that are shared to your advertiser or account, use the TargetableRemarketingLists resource.",
+            "id": "RemarketingList",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "active": {
+                    "description": "Whether this remarketing list is active.",
+                    "type": "boolean"
+                },
+                "advertiserId": {
+                    "description": "Dimension value for the advertiser ID that owns this remarketing list. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "description": {
+                    "description": "Remarketing list description.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Remarketing list ID. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#remarketingList\".",
+                    "type": "string"
+                },
+                "lifeSpan": {
+                    "description": "Number of days that a user should remain in the remarketing list without an impression. Acceptable values are 1 to 540, inclusive.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "listPopulationRule": {
+                    "$ref": "ListPopulationRule",
+                    "description": "Rule used to populate the remarketing list with users."
+                },
+                "listSize": {
+                    "description": "Number of users currently in the list. This is a read-only field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "listSource": {
+                    "description": "Product from which this remarketing list was originated.",
+                    "enum": [
+                        "REMARKETING_LIST_SOURCE_OTHER",
+                        "REMARKETING_LIST_SOURCE_ADX",
+                        "REMARKETING_LIST_SOURCE_DFP",
+                        "REMARKETING_LIST_SOURCE_XFP",
+                        "REMARKETING_LIST_SOURCE_DFA",
+                        "REMARKETING_LIST_SOURCE_GA",
+                        "REMARKETING_LIST_SOURCE_YOUTUBE",
+                        "REMARKETING_LIST_SOURCE_DBM",
+                        "REMARKETING_LIST_SOURCE_GPLUS",
+                        "REMARKETING_LIST_SOURCE_DMP",
+                        "REMARKETING_LIST_SOURCE_PLAY_STORE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of the remarketing list. This is a required field. Must be no greater than 128 characters long.",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RemarketingListShare": {
+            "description": "Contains properties of a remarketing list's sharing information. Sharing allows other accounts or advertisers to target to your remarketing lists. This resource can be used to manage remarketing list sharing to other accounts and advertisers.",
+            "id": "RemarketingListShare",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#remarketingListShare\".",
+                    "type": "string"
+                },
+                "remarketingListId": {
+                    "description": "Remarketing list ID. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "sharedAccountIds": {
+                    "description": "Accounts that the remarketing list is shared with.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "sharedAdvertiserIds": {
+                    "description": "Advertisers that the remarketing list is shared with.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "RemarketingListsListResponse": {
+            "description": "Remarketing list response",
+            "id": "RemarketingListsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#remarketingListsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "remarketingLists": {
+                    "description": "Remarketing list collection.",
+                    "items": {
+                        "$ref": "RemarketingList"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Report": {
+            "description": "Represents a Report resource.",
+            "id": "Report",
+            "properties": {
+                "accountId": {
+                    "annotations": {
+                        "required": [
+                            "dfareporting.reports.update"
+                        ]
+                    },
+                    "description": "The account ID to which this report belongs.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "criteria": {
+                    "description": "The report criteria for a report of type \"STANDARD\".",
+                    "properties": {
+                        "activities": {
+                            "$ref": "Activities",
+                            "description": "Activity group."
+                        },
+                        "customRichMediaEvents": {
+                            "$ref": "CustomRichMediaEvents",
+                            "description": "Custom Rich Media Events group."
+                        },
+                        "dateRange": {
+                            "$ref": "DateRange",
+                            "description": "The date range for which this report should be run."
+                        },
+                        "dimensionFilters": {
+                            "description": "The list of filters on which dimensions are filtered. Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.",
+                            "items": {
+                                "$ref": "DimensionValue"
+                            },
+                            "type": "array"
+                        },
+                        "dimensions": {
+                            "description": "The list of standard dimensions the report should include.",
+                            "items": {
+                                "$ref": "SortedDimension"
+                            },
+                            "type": "array"
+                        },
+                        "metricNames": {
+                            "description": "The list of names of metrics the report should include.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        }
+                    },
+                    "type": "object"
+                },
+                "crossDimensionReachCriteria": {
+                    "description": "The report criteria for a report of type \"CROSS_DIMENSION_REACH\".",
+                    "properties": {
+                        "breakdown": {
+                            "description": "The list of dimensions the report should include.",
+                            "items": {
+                                "$ref": "SortedDimension"
+                            },
+                            "type": "array"
+                        },
+                        "dateRange": {
+                            "$ref": "DateRange",
+                            "description": "The date range this report should be run for."
+                        },
+                        "dimension": {
+                            "description": "The dimension option.",
+                            "enum": [
+                                "ADVERTISER",
+                                "CAMPAIGN",
+                                "SITE_BY_ADVERTISER",
+                                "SITE_BY_CAMPAIGN"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                "",
+                                "",
+                                ""
+                            ],
+                            "type": "string"
+                        },
+                        "dimensionFilters": {
+                            "description": "The list of filters on which dimensions are filtered.",
+                            "items": {
+                                "$ref": "DimensionValue"
+                            },
+                            "type": "array"
+                        },
+                        "metricNames": {
+                            "description": "The list of names of metrics the report should include.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        },
+                        "overlapMetricNames": {
+                            "description": "The list of names of overlap metrics the report should include.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        },
+                        "pivoted": {
+                            "description": "Whether the report is pivoted or not. Defaults to true.",
+                            "type": "boolean"
+                        }
+                    },
+                    "type": "object"
+                },
+                "delivery": {
+                    "description": "The report's email delivery settings.",
+                    "properties": {
+                        "emailOwner": {
+                            "description": "Whether the report should be emailed to the report owner.",
+                            "type": "boolean"
+                        },
+                        "emailOwnerDeliveryType": {
+                            "description": "The type of delivery for the owner to receive, if enabled.",
+                            "enum": [
+                                "LINK",
+                                "ATTACHMENT"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "type": "string"
+                        },
+                        "message": {
+                            "description": "The message to be sent with each email.",
+                            "type": "string"
+                        },
+                        "recipients": {
+                            "description": "The list of recipients to which to email the report.",
+                            "items": {
+                                "$ref": "Recipient"
+                            },
+                            "type": "array"
+                        }
+                    },
+                    "type": "object"
+                },
+                "etag": {
+                    "description": "The eTag of this response for caching purposes.",
+                    "type": "string"
+                },
+                "fileName": {
+                    "description": "The filename used when generating report files for this report.",
+                    "type": "string"
+                },
+                "floodlightCriteria": {
+                    "description": "The report criteria for a report of type \"FLOODLIGHT\".",
+                    "properties": {
+                        "customRichMediaEvents": {
+                            "description": "The list of custom rich media events to include.",
+                            "items": {
+                                "$ref": "DimensionValue"
+                            },
+                            "type": "array"
+                        },
+                        "dateRange": {
+                            "$ref": "DateRange",
+                            "description": "The date range this report should be run for."
+                        },
+                        "dimensionFilters": {
+                            "description": "The list of filters on which dimensions are filtered. Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.",
+                            "items": {
+                                "$ref": "DimensionValue"
+                            },
+                            "type": "array"
+                        },
+                        "dimensions": {
+                            "description": "The list of dimensions the report should include.",
+                            "items": {
+                                "$ref": "SortedDimension"
+                            },
+                            "type": "array"
+                        },
+                        "floodlightConfigId": {
+                            "$ref": "DimensionValue",
+                            "description": "The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'."
+                        },
+                        "metricNames": {
+                            "description": "The list of names of metrics the report should include.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        },
+                        "reportProperties": {
+                            "description": "The properties of the report.",
+                            "properties": {
+                                "includeAttributedIPConversions": {
+                                    "description": "Include conversions that have no cookie, but do have an exposure path.",
+                                    "type": "boolean"
+                                },
+                                "includeUnattributedCookieConversions": {
+                                    "description": "Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.",
+                                    "type": "boolean"
+                                },
+                                "includeUnattributedIPConversions": {
+                                    "description": "Include conversions that have no associated cookies and no exposures. It\u2019s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.",
+                                    "type": "boolean"
+                                }
+                            },
+                            "type": "object"
+                        }
+                    },
+                    "type": "object"
+                },
+                "format": {
+                    "description": "The output format of the report. If not specified, default format is \"CSV\". Note that the actual format in the completed report file might differ if for instance the report's size exceeds the format's capabilities. \"CSV\" will then be the fallback format.",
+                    "enum": [
+                        "CSV",
+                        "EXCEL"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "id": {
+                    "annotations": {
+                        "required": [
+                            "dfareporting.reports.update"
+                        ]
+                    },
+                    "description": "The unique ID identifying this report resource.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#report.",
+                    "type": "string"
+                },
+                "lastModifiedTime": {
+                    "annotations": {
+                        "required": [
+                            "dfareporting.reports.update"
+                        ]
+                    },
+                    "description": "The timestamp (in milliseconds since epoch) of when this report was last modified.",
+                    "format": "uint64",
+                    "type": "string"
+                },
+                "name": {
+                    "annotations": {
+                        "required": [
+                            "dfareporting.reports.insert",
+                            "dfareporting.reports.update"
+                        ]
+                    },
+                    "description": "The name of the report.",
+                    "type": "string"
+                },
+                "ownerProfileId": {
+                    "annotations": {
+                        "required": [
+                            "dfareporting.reports.update"
+                        ]
+                    },
+                    "description": "The user profile id of the owner of this report.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "pathAttributionCriteria": {
+                    "description": "The report criteria for a report of type \"PATH_ATTRIBUTION\".",
+                    "properties": {
+                        "activityFilters": {
+                            "description": "The list of 'dfa:activity' values to filter on.",
+                            "items": {
+                                "$ref": "DimensionValue"
+                            },
+                            "type": "array"
+                        },
+                        "customChannelGrouping": {
+                            "$ref": "ChannelGrouping",
+                            "description": "Channel Grouping."
+                        },
+                        "dateRange": {
+                            "$ref": "DateRange",
+                            "description": "The date range this report should be run for."
+                        },
+                        "dimensions": {
+                            "description": "The list of dimensions the report should include.",
+                            "items": {
+                                "$ref": "SortedDimension"
+                            },
+                            "type": "array"
+                        },
+                        "floodlightConfigId": {
+                            "$ref": "DimensionValue",
+                            "description": "The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'."
+                        },
+                        "metricNames": {
+                            "description": "The list of names of metrics the report should include.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        },
+                        "pathFilters": {
+                            "description": "Path Filters.",
+                            "items": {
+                                "$ref": "PathFilter"
+                            },
+                            "type": "array"
+                        }
+                    },
+                    "type": "object"
+                },
+                "pathCriteria": {
+                    "description": "The report criteria for a report of type \"PATH\".",
+                    "properties": {
+                        "activityFilters": {
+                            "description": "The list of 'dfa:activity' values to filter on.",
+                            "items": {
+                                "$ref": "DimensionValue"
+                            },
+                            "type": "array"
+                        },
+                        "customChannelGrouping": {
+                            "$ref": "ChannelGrouping",
+                            "description": "Channel Grouping."
+                        },
+                        "dateRange": {
+                            "$ref": "DateRange",
+                            "description": "The date range this report should be run for."
+                        },
+                        "dimensions": {
+                            "description": "The list of dimensions the report should include.",
+                            "items": {
+                                "$ref": "SortedDimension"
+                            },
+                            "type": "array"
+                        },
+                        "floodlightConfigId": {
+                            "$ref": "DimensionValue",
+                            "description": "The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'."
+                        },
+                        "metricNames": {
+                            "description": "The list of names of metrics the report should include.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        },
+                        "pathFilters": {
+                            "description": "Path Filters.",
+                            "items": {
+                                "$ref": "PathFilter"
+                            },
+                            "type": "array"
+                        }
+                    },
+                    "type": "object"
+                },
+                "pathToConversionCriteria": {
+                    "description": "The report criteria for a report of type \"PATH_TO_CONVERSION\".",
+                    "properties": {
+                        "activityFilters": {
+                            "description": "The list of 'dfa:activity' values to filter on.",
+                            "items": {
+                                "$ref": "DimensionValue"
+                            },
+                            "type": "array"
+                        },
+                        "conversionDimensions": {
+                            "description": "The list of conversion dimensions the report should include.",
+                            "items": {
+                                "$ref": "SortedDimension"
+                            },
+                            "type": "array"
+                        },
+                        "customFloodlightVariables": {
+                            "description": "The list of custom floodlight variables the report should include.",
+                            "items": {
+                                "$ref": "SortedDimension"
+                            },
+                            "type": "array"
+                        },
+                        "customRichMediaEvents": {
+                            "description": "The list of custom rich media events to include.",
+                            "items": {
+                                "$ref": "DimensionValue"
+                            },
+                            "type": "array"
+                        },
+                        "dateRange": {
+                            "$ref": "DateRange",
+                            "description": "The date range this report should be run for."
+                        },
+                        "floodlightConfigId": {
+                            "$ref": "DimensionValue",
+                            "description": "The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'."
+                        },
+                        "metricNames": {
+                            "description": "The list of names of metrics the report should include.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        },
+                        "perInteractionDimensions": {
+                            "description": "The list of per interaction dimensions the report should include.",
+                            "items": {
+                                "$ref": "SortedDimension"
+                            },
+                            "type": "array"
+                        },
+                        "reportProperties": {
+                            "description": "The properties of the report.",
+                            "properties": {
+                                "clicksLookbackWindow": {
+                                    "description": "CM360 checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.",
+                                    "format": "int32",
+                                    "type": "integer"
+                                },
+                                "impressionsLookbackWindow": {
+                                    "description": "CM360 checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.",
+                                    "format": "int32",
+                                    "type": "integer"
+                                },
+                                "includeAttributedIPConversions": {
+                                    "description": "Deprecated: has no effect.",
+                                    "type": "boolean"
+                                },
+                                "includeUnattributedCookieConversions": {
+                                    "description": "Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.",
+                                    "type": "boolean"
+                                },
+                                "includeUnattributedIPConversions": {
+                                    "description": "Include conversions that have no associated cookies and no exposures. It\u2019s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.",
+                                    "type": "boolean"
+                                },
+                                "maximumClickInteractions": {
+                                    "description": "The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.",
+                                    "format": "int32",
+                                    "type": "integer"
+                                },
+                                "maximumImpressionInteractions": {
+                                    "description": "The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.",
+                                    "format": "int32",
+                                    "type": "integer"
+                                },
+                                "maximumInteractionGap": {
+                                    "description": "The maximum amount of time that can take place between interactions (clicks or impressions) by the same user. Valid values: 1-90.",
+                                    "format": "int32",
+                                    "type": "integer"
+                                },
+                                "pivotOnInteractionPath": {
+                                    "description": "Enable pivoting on interaction path.",
+                                    "type": "boolean"
+                                }
+                            },
+                            "type": "object"
+                        }
+                    },
+                    "type": "object"
+                },
+                "reachCriteria": {
+                    "description": "The report criteria for a report of type \"REACH\".",
+                    "properties": {
+                        "activities": {
+                            "$ref": "Activities",
+                            "description": "Activity group."
+                        },
+                        "customRichMediaEvents": {
+                            "$ref": "CustomRichMediaEvents",
+                            "description": "Custom Rich Media Events group."
+                        },
+                        "dateRange": {
+                            "$ref": "DateRange",
+                            "description": "The date range this report should be run for."
+                        },
+                        "dimensionFilters": {
+                            "description": "The list of filters on which dimensions are filtered. Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.",
+                            "items": {
+                                "$ref": "DimensionValue"
+                            },
+                            "type": "array"
+                        },
+                        "dimensions": {
+                            "description": "The list of dimensions the report should include.",
+                            "items": {
+                                "$ref": "SortedDimension"
+                            },
+                            "type": "array"
+                        },
+                        "enableAllDimensionCombinations": {
+                            "description": "Whether to enable all reach dimension combinations in the report. Defaults to false. If enabled, the date range of the report should be within the last 42 days.",
+                            "type": "boolean"
+                        },
+                        "metricNames": {
+                            "description": "The list of names of metrics the report should include.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        },
+                        "reachByFrequencyMetricNames": {
+                            "description": "The list of names of Reach By Frequency metrics the report should include.",
+                            "items": {
+                                "type": "string"
+                            },
+                            "type": "array"
+                        }
+                    },
+                    "type": "object"
+                },
+                "schedule": {
+                    "description": "The report's schedule. Can only be set if the report's 'dateRange' is a relative date range and the relative date range is not \"TODAY\".",
+                    "properties": {
+                        "active": {
+                            "annotations": {
+                                "required": [
+                                    "dfareporting.reports.insert",
+                                    "dfareporting.reports.update"
+                                ]
+                            },
+                            "description": "Whether the schedule is active or not. Must be set to either true or false.",
+                            "type": "boolean"
+                        },
+                        "every": {
+                            "description": "Defines every how many days, weeks or months the report should be run. Needs to be set when \"repeats\" is either \"DAILY\", \"WEEKLY\" or \"MONTHLY\".",
+                            "format": "int32",
+                            "type": "integer"
+                        },
+                        "expirationDate": {
+                            "format": "date",
+                            "type": "string"
+                        },
+                        "repeats": {
+                            "annotations": {
+                                "required": [
+                                    "dfareporting.reports.insert",
+                                    "dfareporting.reports.update"
+                                ]
+                            },
+                            "description": "The interval for which the report is repeated. Note: - \"DAILY\" also requires field \"every\" to be set. - \"WEEKLY\" also requires fields \"every\" and \"repeatsOnWeekDays\" to be set. - \"MONTHLY\" also requires fields \"every\" and \"runsOnDayOfMonth\" to be set. ",
+                            "type": "string"
+                        },
+                        "repeatsOnWeekDays": {
+                            "description": "List of week days \"WEEKLY\" on which scheduled reports should run.",
+                            "items": {
+                                "enum": [
+                                    "SUNDAY",
+                                    "MONDAY",
+                                    "TUESDAY",
+                                    "WEDNESDAY",
+                                    "THURSDAY",
+                                    "FRIDAY",
+                                    "SATURDAY"
+                                ],
+                                "enumDescriptions": [
+                                    "",
+                                    "",
+                                    "",
+                                    "",
+                                    "",
+                                    "",
+                                    ""
+                                ],
+                                "type": "string"
+                            },
+                            "type": "array"
+                        },
+                        "runsOnDayOfMonth": {
+                            "description": "Enum to define for \"MONTHLY\" scheduled reports whether reports should be repeated on the same day of the month as \"startDate\" or the same day of the week of the month. Example: If 'startDate' is Monday, April 2nd 2012 (2012-04-02), \"DAY_OF_MONTH\" would run subsequent reports on the 2nd of every Month, and \"WEEK_OF_MONTH\" would run subsequent reports on the first Monday of the month.",
+                            "enum": [
+                                "DAY_OF_MONTH",
+                                "WEEK_OF_MONTH"
+                            ],
+                            "enumDescriptions": [
+                                "",
+                                ""
+                            ],
+                            "type": "string"
+                        },
+                        "startDate": {
+                            "format": "date",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "subAccountId": {
+                    "description": "The subaccount ID to which this report belongs if applicable.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "type": {
+                    "annotations": {
+                        "required": [
+                            "dfareporting.reports.insert",
+                            "dfareporting.reports.update"
+                        ]
+                    },
+                    "description": "The type of the report.",
+                    "enum": [
+                        "STANDARD",
+                        "REACH",
+                        "PATH_TO_CONVERSION",
+                        "CROSS_DIMENSION_REACH",
+                        "FLOODLIGHT",
+                        "PATH",
+                        "PATH_ATTRIBUTION"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReportCompatibleFields": {
+            "description": "Represents fields that are compatible to be selected for a report of type \"STANDARD\".",
+            "id": "ReportCompatibleFields",
+            "properties": {
+                "dimensionFilters": {
+                    "description": "Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "dimensions": {
+                    "description": "Dimensions which are compatible to be selected in the \"dimensions\" section of the report.",
+                    "items": {
+                        "$ref": "Dimension"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#reportCompatibleFields.",
+                    "type": "string"
+                },
+                "metrics": {
+                    "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                },
+                "pivotedActivityMetrics": {
+                    "description": "Metrics which are compatible to be selected as activity metrics to pivot on in the \"activities\" section of the report.",
+                    "items": {
+                        "$ref": "Metric"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ReportList": {
+            "description": "Represents the list of reports.",
+            "id": "ReportList",
+            "properties": {
+                "etag": {
+                    "description": "The eTag of this response for caching purposes.",
+                    "type": "string"
+                },
+                "items": {
+                    "description": "The reports returned in this response.",
+                    "items": {
+                        "$ref": "Report"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "The kind of list this is, in this case dfareporting#reportList.",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Continuation token used to page through reports. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReportsConfiguration": {
+            "description": "Reporting Configuration",
+            "id": "ReportsConfiguration",
+            "properties": {
+                "exposureToConversionEnabled": {
+                    "description": "Whether the exposure to conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.",
+                    "type": "boolean"
+                },
+                "lookbackConfiguration": {
+                    "$ref": "LookbackConfiguration",
+                    "description": "Default lookback windows for new advertisers in this account."
+                },
+                "reportGenerationTimeZoneId": {
+                    "description": "Report generation time zone ID of this account. This is a required field that can only be changed by a superuser. Acceptable values are: - \"1\" for \"America/New_York\" - \"2\" for \"Europe/London\" - \"3\" for \"Europe/Paris\" - \"4\" for \"Africa/Johannesburg\" - \"5\" for \"Asia/Jerusalem\" - \"6\" for \"Asia/Shanghai\" - \"7\" for \"Asia/Hong_Kong\" - \"8\" for \"Asia/Tokyo\" - \"9\" for \"Australia/Sydney\" - \"10\" for \"Asia/Dubai\" - \"11\" for \"America/Los_Angeles\" - \"12\" for \"Pacific/Auckland\" - \"13\" for \"America/Sao_Paulo\" - \"16\" for \"America/Asuncion\" - \"17\" for \"America/Chicago\" - \"18\" for \"America/Denver\" - \"19\" for \"America/St_Johns\" - \"20\" for \"Asia/Dhaka\" - \"21\" for \"Asia/Jakarta\" - \"22\" for \"Asia/Kabul\" - \"23\" for \"Asia/Karachi\" - \"24\" for \"Asia/Calcutta\" - \"25\" for \"Asia/Pyongyang\" - \"26\" for \"Asia/Rangoon\" - \"27\" for \"Atlantic/Cape_Verde\" - \"28\" for \"Atlantic/South_Georgia\" - \"29\" for \"Australia/Adelaide\" - \"30\" for \"Australia/Lord_Howe\" - \"31\" for \"Europe/Moscow\" - \"32\" for \"Pacific/Kiritimati\" - \"35\" for \"Pacific/Norfolk\" - \"36\" for \"Pacific/Tongatapu\" ",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RichMediaExitOverride": {
+            "description": "Rich Media Exit Override.",
+            "id": "RichMediaExitOverride",
+            "properties": {
+                "clickThroughUrl": {
+                    "$ref": "ClickThroughUrl",
+                    "description": "Click-through URL of this rich media exit override. Applicable if the enabled field is set to true."
+                },
+                "enabled": {
+                    "description": "Whether to use the clickThroughUrl. If false, the creative-level exit will be used.",
+                    "type": "boolean"
+                },
+                "exitId": {
+                    "description": "ID for the override to refer to a specific exit in the creative.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Rule": {
+            "description": "A rule associates an asset with a targeting template for asset-level targeting. Applicable to INSTREAM_VIDEO creatives.",
+            "id": "Rule",
+            "properties": {
+                "assetId": {
+                    "description": "A creativeAssets[].id. This should refer to one of the parent assets in this creative. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "A user-friendly name for this rule. This is a required field.",
+                    "type": "string"
+                },
+                "targetingTemplateId": {
+                    "description": "A targeting template ID. The targeting from the targeting template will be used to determine whether this asset should be served. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Site": {
+            "description": "Contains properties of a site.",
+            "id": "Site",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this site. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "approved": {
+                    "description": "Whether this site is approved.",
+                    "type": "boolean"
+                },
+                "directorySiteId": {
+                    "description": "Directory site associated with this site. This is a required field that is read-only after insertion.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "directorySiteIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the directory site. This is a read-only, auto-generated field."
+                },
+                "id": {
+                    "description": "ID of this site. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "idDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of this site. This is a read-only, auto-generated field."
+                },
+                "keyName": {
+                    "description": "Key name of this site. This is a read-only, auto-generated field.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#site\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this site.This is a required field. Must be less than 128 characters long. If this site is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this site is a top-level site, and the name must be unique among top-level sites of the same account.",
+                    "type": "string"
+                },
+                "siteContacts": {
+                    "description": "Site contacts.",
+                    "items": {
+                        "$ref": "SiteContact"
+                    },
+                    "type": "array"
+                },
+                "siteSettings": {
+                    "$ref": "SiteSettings",
+                    "description": "Site-wide settings."
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this site. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "videoSettings": {
+                    "$ref": "SiteVideoSettings",
+                    "description": "Default video settings for new placements created under this site. This value will be used to populate the placements.videoSettings field, when no value is specified for the new placement."
+                }
+            },
+            "type": "object"
+        },
+        "SiteCompanionSetting": {
+            "description": "Companion Settings",
+            "id": "SiteCompanionSetting",
+            "properties": {
+                "companionsDisabled": {
+                    "description": "Whether companions are disabled for this site template.",
+                    "type": "boolean"
+                },
+                "enabledSizes": {
+                    "description": "Allowlist of companion sizes to be served via this site template. Set this list to null or empty to serve all companion sizes.",
+                    "items": {
+                        "$ref": "Size"
+                    },
+                    "type": "array"
+                },
+                "imageOnly": {
+                    "description": "Whether to serve only static images as companions.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#siteCompanionSetting\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SiteContact": {
+            "description": "Site Contact",
+            "id": "SiteContact",
+            "properties": {
+                "address": {
+                    "description": "Address of this site contact.",
+                    "type": "string"
+                },
+                "contactType": {
+                    "description": "Site contact type.",
+                    "enum": [
+                        "SALES_PERSON",
+                        "TRAFFICKER"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "email": {
+                    "description": "Email address of this site contact. This is a required field.",
+                    "type": "string"
+                },
+                "firstName": {
+                    "description": "First name of this site contact.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this site contact. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "lastName": {
+                    "description": "Last name of this site contact.",
+                    "type": "string"
+                },
+                "phone": {
+                    "description": "Primary phone number of this site contact.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Title or designation of this site contact.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SiteSettings": {
+            "description": "Site Settings",
+            "id": "SiteSettings",
+            "properties": {
+                "activeViewOptOut": {
+                    "description": "Whether active view creatives are disabled for this site.",
+                    "type": "boolean"
+                },
+                "adBlockingOptOut": {
+                    "description": "Whether this site opts out of ad blocking. When true, ad blocking is disabled for all placements under the site, regardless of the individual placement settings. When false, the campaign and placement settings take effect.",
+                    "type": "boolean"
+                },
+                "disableNewCookie": {
+                    "description": "Whether new cookies are disabled for this site.",
+                    "type": "boolean"
+                },
+                "tagSetting": {
+                    "$ref": "TagSetting",
+                    "description": "Configuration settings for dynamic and image floodlight tags."
+                },
+                "videoActiveViewOptOutTemplate": {
+                    "description": "Whether Verification and ActiveView for in-stream video creatives are disabled by default for new placements created under this site. This value will be used to populate the placement.videoActiveViewOptOut field, when no value is specified for the new placement.",
+                    "type": "boolean"
+                },
+                "vpaidAdapterChoiceTemplate": {
+                    "description": "Default VPAID adapter setting for new placements created under this site. This value will be used to populate the placements.vpaidAdapterChoice field, when no value is specified for the new placement. Controls which VPAID format the measurement adapter will use for in-stream video creatives assigned to the placement. The publisher's specifications will typically determine this setting. For VPAID creatives, the adapter format will match the VPAID format (HTML5 VPAID creatives use the HTML5 adapter). *Note:* Flash is no longer supported. This field now defaults to HTML5 when the following values are provided: FLASH, BOTH.",
+                    "enum": [
+                        "DEFAULT",
+                        "FLASH",
+                        "HTML5",
+                        "BOTH"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SiteSkippableSetting": {
+            "description": "Skippable Settings",
+            "id": "SiteSkippableSetting",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#siteSkippableSetting\".",
+                    "type": "string"
+                },
+                "progressOffset": {
+                    "$ref": "VideoOffset",
+                    "description": "Amount of time to play videos served to this site template before counting a view. Applicable when skippable is true."
+                },
+                "skipOffset": {
+                    "$ref": "VideoOffset",
+                    "description": "Amount of time to play videos served to this site before the skip button should appear. Applicable when skippable is true."
+                },
+                "skippable": {
+                    "description": "Whether the user can skip creatives served to this site. This will act as default for new placements created under this site.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "SiteTranscodeSetting": {
+            "description": "Transcode Settings",
+            "id": "SiteTranscodeSetting",
+            "properties": {
+                "enabledVideoFormats": {
+                    "description": "Allowlist of video formats to be served to this site template. Set this list to null or empty to serve all video formats.",
+                    "items": {
+                        "format": "int32",
+                        "type": "integer"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#siteTranscodeSetting\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SiteVideoSettings": {
+            "description": "Video Settings",
+            "id": "SiteVideoSettings",
+            "properties": {
+                "companionSettings": {
+                    "$ref": "SiteCompanionSetting",
+                    "description": "Settings for the companion creatives of video creatives served to this site."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#siteVideoSettings\".",
+                    "type": "string"
+                },
+                "obaEnabled": {
+                    "description": "Whether OBA icons are enabled for this placement.",
+                    "type": "boolean"
+                },
+                "obaSettings": {
+                    "$ref": "ObaIcon",
+                    "description": "Settings for the OBA icon of video creatives served to this site. This will act as default for new placements created under this site."
+                },
+                "orientation": {
+                    "description": "Orientation of a site template used for video. This will act as default for new placements created under this site.",
+                    "enum": [
+                        "ANY",
+                        "LANDSCAPE",
+                        "PORTRAIT"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "skippableSettings": {
+                    "$ref": "SiteSkippableSetting",
+                    "description": "Settings for the skippability of video creatives served to this site. This will act as default for new placements created under this site."
+                },
+                "transcodeSettings": {
+                    "$ref": "SiteTranscodeSetting",
+                    "description": "Settings for the transcodes of video creatives served to this site. This will act as default for new placements created under this site."
+                }
+            },
+            "type": "object"
+        },
+        "SitesListResponse": {
+            "description": "Site List Response",
+            "id": "SitesListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#sitesListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "sites": {
+                    "description": "Site collection.",
+                    "items": {
+                        "$ref": "Site"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Size": {
+            "description": "Represents the dimensions of ads, placements, creatives, or creative assets.",
+            "id": "Size",
+            "properties": {
+                "height": {
+                    "description": "Height of this size. Acceptable values are 0 to 32767, inclusive.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "iab": {
+                    "description": "IAB standard size. This is a read-only, auto-generated field.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "ID of this size. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#size\".",
+                    "type": "string"
+                },
+                "width": {
+                    "description": "Width of this size. Acceptable values are 0 to 32767, inclusive.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "SizesListResponse": {
+            "description": "Size List Response",
+            "id": "SizesListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#sizesListResponse\".",
+                    "type": "string"
+                },
+                "sizes": {
+                    "description": "Size collection.",
+                    "items": {
+                        "$ref": "Size"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "SkippableSetting": {
+            "description": "Skippable Settings",
+            "id": "SkippableSetting",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#skippableSetting\".",
+                    "type": "string"
+                },
+                "progressOffset": {
+                    "$ref": "VideoOffset",
+                    "description": "Amount of time to play videos served to this placement before counting a view. Applicable when skippable is true."
+                },
+                "skipOffset": {
+                    "$ref": "VideoOffset",
+                    "description": "Amount of time to play videos served to this placement before the skip button should appear. Applicable when skippable is true."
+                },
+                "skippable": {
+                    "description": "Whether the user can skip creatives served to this placement.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "SortedDimension": {
+            "description": "Represents a sorted dimension.",
+            "id": "SortedDimension",
+            "properties": {
+                "kind": {
+                    "description": "The kind of resource this is, in this case dfareporting#sortedDimension.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The name of the dimension.",
+                    "type": "string"
                 },
                 "sortOrder": {
-                  "default": "DESCENDING",
-                  "location": "query",
-                  "enumDescriptions": [
-                    "",
-                    ""
-                  ],
-                  "description": "Order of sorted results.",
-                  "enum": [
-                    "ASCENDING",
-                    "DESCENDING"
-                  ],
-                  "type": "string"
-                },
-                "reportId": {
-                  "required": true,
-                  "format": "int64",
-                  "description": "The ID of the parent report.",
-                  "type": "string",
-                  "location": "path"
-                },
-                "sortField": {
-                  "enum": [
-                    "ID",
-                    "LAST_MODIFIED_TIME"
-                  ],
-                  "location": "query",
-                  "type": "string",
-                  "description": "The field by which to sort the list.",
-                  "enumDescriptions": [
-                    "",
-                    ""
-                  ],
-                  "default": "LAST_MODIFIED_TIME"
+                    "description": "An optional sort order for the dimension column.",
+                    "enum": [
+                        "ASCENDING",
+                        "DESCENDING"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
                 }
-              },
-              "id": "dfareporting.reports.files.list",
-              "description": "Lists files for a report.",
-              "parameterOrder": [
-                "profileId",
-                "reportId"
-              ],
-              "httpMethod": "GET",
-              "flatPath": "userprofiles/{profileId}/reports/{reportId}/files",
-              "response": {
-                "$ref": "FileList"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/dfareporting"
-              ],
-              "path": "userprofiles/{profileId}/reports/{reportId}/files"
             },
-            "get": {
-              "supportsMediaDownload": true,
-              "scopes": [
-                "https://www.googleapis.com/auth/dfareporting"
-              ],
-              "parameterOrder": [
-                "profileId",
-                "reportId",
-                "fileId"
-              ],
-              "id": "dfareporting.reports.files.get",
-              "description": "Retrieves a report file by its report ID and file ID. This method supports media download.",
-              "parameters": {
-                "fileId": {
-                  "location": "path",
-                  "description": "The ID of the report file.",
-                  "required": true,
-                  "format": "int64",
-                  "type": "string"
+            "type": "object"
+        },
+        "Subaccount": {
+            "description": "Contains properties of a Campaign Manager subaccount.",
+            "id": "Subaccount",
+            "properties": {
+                "accountId": {
+                    "description": "ID of the account that contains this subaccount. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
                 },
-                "reportId": {
-                  "type": "string",
-                  "location": "path",
-                  "format": "int64",
-                  "description": "The ID of the report.",
-                  "required": true
+                "availablePermissionIds": {
+                    "description": "IDs of the available user role permissions for this subaccount.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "id": {
+                    "description": "ID of this subaccount. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#subaccount\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this subaccount. This is a required field. Must be less than 128 characters long and be unique among subaccounts of the same account.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SubaccountsListResponse": {
+            "description": "Subaccount List Response",
+            "id": "SubaccountsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#subaccountsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "subaccounts": {
+                    "description": "Subaccount collection.",
+                    "items": {
+                        "$ref": "Subaccount"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "TagData": {
+            "description": "Placement Tag Data",
+            "id": "TagData",
+            "properties": {
+                "adId": {
+                    "description": "Ad associated with this placement tag. Applicable only when format is PLACEMENT_TAG_TRACKING.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "clickTag": {
+                    "description": "Tag string to record a click.",
+                    "type": "string"
+                },
+                "creativeId": {
+                    "description": "Creative associated with this placement tag. Applicable only when format is PLACEMENT_TAG_TRACKING.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "format": {
+                    "description": "TagData tag format of this tag.",
+                    "enum": [
+                        "PLACEMENT_TAG_STANDARD",
+                        "PLACEMENT_TAG_IFRAME_JAVASCRIPT",
+                        "PLACEMENT_TAG_IFRAME_ILAYER",
+                        "PLACEMENT_TAG_INTERNAL_REDIRECT",
+                        "PLACEMENT_TAG_JAVASCRIPT",
+                        "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT",
+                        "PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT",
+                        "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT",
+                        "PLACEMENT_TAG_CLICK_COMMANDS",
+                        "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH",
+                        "PLACEMENT_TAG_TRACKING",
+                        "PLACEMENT_TAG_TRACKING_IFRAME",
+                        "PLACEMENT_TAG_TRACKING_JAVASCRIPT",
+                        "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_3",
+                        "PLACEMENT_TAG_IFRAME_JAVASCRIPT_LEGACY",
+                        "PLACEMENT_TAG_JAVASCRIPT_LEGACY",
+                        "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT_LEGACY",
+                        "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT_LEGACY",
+                        "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_4"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "impressionTag": {
+                    "description": "Tag string for serving an ad.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TagSetting": {
+            "description": "Tag Settings",
+            "id": "TagSetting",
+            "properties": {
+                "additionalKeyValues": {
+                    "description": "Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field.",
+                    "type": "string"
+                },
+                "includeClickThroughUrls": {
+                    "description": "Whether static landing page URLs should be included in the tags. This setting applies only to placements.",
+                    "type": "boolean"
+                },
+                "includeClickTracking": {
+                    "description": "Whether click-tracking string should be included in the tags.",
+                    "type": "boolean"
+                },
+                "keywordOption": {
+                    "description": "Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.",
+                    "enum": [
+                        "PLACEHOLDER_WITH_LIST_OF_KEYWORDS",
+                        "IGNORE",
+                        "GENERATE_SEPARATE_TAG_FOR_EACH_KEYWORD"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TagSettings": {
+            "description": "Dynamic and Image Tag Settings.",
+            "id": "TagSettings",
+            "properties": {
+                "dynamicTagEnabled": {
+                    "description": "Whether dynamic floodlight tags are enabled.",
+                    "type": "boolean"
+                },
+                "imageTagEnabled": {
+                    "description": "Whether image tags are enabled.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "TargetWindow": {
+            "description": "Target Window.",
+            "id": "TargetWindow",
+            "properties": {
+                "customHtml": {
+                    "description": "User-entered value.",
+                    "type": "string"
+                },
+                "targetWindowOption": {
+                    "description": "Type of browser window for which the backup image of the flash creative can be displayed.",
+                    "enum": [
+                        "NEW_WINDOW",
+                        "CURRENT_WINDOW",
+                        "CUSTOM"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TargetableRemarketingList": {
+            "description": "Contains properties of a targetable remarketing list. Remarketing enables you to create lists of users who have performed specific actions on a site, then target ads to members of those lists. This resource is a read-only view of a remarketing list to be used to faciliate targeting ads to specific lists. Remarketing lists that are owned by your advertisers and those that are shared to your advertisers or account are accessible via this resource. To manage remarketing lists that are owned by your advertisers, use the RemarketingLists resource.",
+            "id": "TargetableRemarketingList",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "active": {
+                    "description": "Whether this targetable remarketing list is active.",
+                    "type": "boolean"
+                },
+                "advertiserId": {
+                    "description": "Dimension value for the advertiser ID that owns this targetable remarketing list.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser."
+                },
+                "description": {
+                    "description": "Targetable remarketing list description.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Targetable remarketing list ID.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#targetableRemarketingList\".",
+                    "type": "string"
+                },
+                "lifeSpan": {
+                    "description": "Number of days that a user should remain in the targetable remarketing list without an impression.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "listSize": {
+                    "description": "Number of users currently in the list. This is a read-only field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "listSource": {
+                    "description": "Product from which this targetable remarketing list was originated.",
+                    "enum": [
+                        "REMARKETING_LIST_SOURCE_OTHER",
+                        "REMARKETING_LIST_SOURCE_ADX",
+                        "REMARKETING_LIST_SOURCE_DFP",
+                        "REMARKETING_LIST_SOURCE_XFP",
+                        "REMARKETING_LIST_SOURCE_DFA",
+                        "REMARKETING_LIST_SOURCE_GA",
+                        "REMARKETING_LIST_SOURCE_YOUTUBE",
+                        "REMARKETING_LIST_SOURCE_DBM",
+                        "REMARKETING_LIST_SOURCE_GPLUS",
+                        "REMARKETING_LIST_SOURCE_DMP",
+                        "REMARKETING_LIST_SOURCE_PLAY_STORE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of the targetable remarketing list. Is no greater than 128 characters long.",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TargetableRemarketingListsListResponse": {
+            "description": "Targetable remarketing list response",
+            "id": "TargetableRemarketingListsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#targetableRemarketingListsListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "targetableRemarketingLists": {
+                    "description": "Targetable remarketing list collection.",
+                    "items": {
+                        "$ref": "TargetableRemarketingList"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "TargetingTemplate": {
+            "description": "Contains properties of a targeting template. A targeting template encapsulates targeting information which can be reused across multiple ads.",
+            "id": "TargetingTemplate",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this targeting template. This field, if left unset, will be auto-generated on insert and is read-only after insert.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserId": {
+                    "description": "Advertiser ID of this targeting template. This is a required field on insert and is read-only after insert.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "advertiserIdDimensionValue": {
+                    "$ref": "DimensionValue",
+                    "description": "Dimension value for the ID of the advertiser. This is a read-only, auto-generated field."
+                },
+                "dayPartTargeting": {
+                    "$ref": "DayPartTargeting",
+                    "description": "Time and day targeting criteria."
+                },
+                "geoTargeting": {
+                    "$ref": "GeoTargeting",
+                    "description": "Geographical targeting criteria."
+                },
+                "id": {
+                    "description": "ID of this targeting template. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "keyValueTargetingExpression": {
+                    "$ref": "KeyValueTargetingExpression",
+                    "description": "Key-value targeting criteria."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#targetingTemplate\".",
+                    "type": "string"
+                },
+                "languageTargeting": {
+                    "$ref": "LanguageTargeting",
+                    "description": "Language targeting criteria."
+                },
+                "listTargetingExpression": {
+                    "$ref": "ListTargetingExpression",
+                    "description": "Remarketing list targeting criteria."
+                },
+                "name": {
+                    "description": "Name of this targeting template. This field is required. It must be less than 256 characters long and unique within an advertiser.",
+                    "type": "string"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this targeting template. This field, if left unset, will be auto-generated on insert and is read-only after insert.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "technologyTargeting": {
+                    "$ref": "TechnologyTargeting",
+                    "description": "Technology platform targeting criteria."
+                }
+            },
+            "type": "object"
+        },
+        "TargetingTemplatesListResponse": {
+            "description": "Targeting Template List Response",
+            "id": "TargetingTemplatesListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#targetingTemplatesListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "targetingTemplates": {
+                    "description": "Targeting template collection.",
+                    "items": {
+                        "$ref": "TargetingTemplate"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "TechnologyTargeting": {
+            "description": "Technology Targeting.",
+            "id": "TechnologyTargeting",
+            "properties": {
+                "browsers": {
+                    "description": "Browsers that this ad targets. For each browser either set browserVersionId or dartId along with the version numbers. If both are specified, only browserVersionId will be used. The other fields are populated automatically when the ad is inserted or updated.",
+                    "items": {
+                        "$ref": "Browser"
+                    },
+                    "type": "array"
+                },
+                "connectionTypes": {
+                    "description": "Connection types that this ad targets. For each connection type only id is required. The other fields are populated automatically when the ad is inserted or updated.",
+                    "items": {
+                        "$ref": "ConnectionType"
+                    },
+                    "type": "array"
+                },
+                "mobileCarriers": {
+                    "description": "Mobile carriers that this ad targets. For each mobile carrier only id is required, and the other fields are populated automatically when the ad is inserted or updated. If targeting a mobile carrier, do not set targeting for any zip codes.",
+                    "items": {
+                        "$ref": "MobileCarrier"
+                    },
+                    "type": "array"
+                },
+                "operatingSystemVersions": {
+                    "description": "Operating system versions that this ad targets. To target all versions, use operatingSystems. For each operating system version, only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system version, do not set targeting for the corresponding operating system in operatingSystems.",
+                    "items": {
+                        "$ref": "OperatingSystemVersion"
+                    },
+                    "type": "array"
+                },
+                "operatingSystems": {
+                    "description": "Operating systems that this ad targets. To target specific versions, use operatingSystemVersions. For each operating system only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system, do not set targeting for operating system versions for the same operating system.",
+                    "items": {
+                        "$ref": "OperatingSystem"
+                    },
+                    "type": "array"
+                },
+                "platformTypes": {
+                    "description": "Platform types that this ad targets. For example, desktop, mobile, or tablet. For each platform type, only id is required, and the other fields are populated automatically when the ad is inserted or updated.",
+                    "items": {
+                        "$ref": "PlatformType"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ThirdPartyAuthenticationToken": {
+            "description": "Third Party Authentication Token",
+            "id": "ThirdPartyAuthenticationToken",
+            "properties": {
+                "name": {
+                    "description": "Name of the third-party authentication token.",
+                    "type": "string"
+                },
+                "value": {
+                    "description": "Value of the third-party authentication token. This is a read-only, auto-generated field.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ThirdPartyTrackingUrl": {
+            "description": "Third-party Tracking URL.",
+            "id": "ThirdPartyTrackingUrl",
+            "properties": {
+                "thirdPartyUrlType": {
+                    "description": "Third-party URL type for in-stream video and in-stream audio creatives.",
+                    "enum": [
+                        "IMPRESSION",
+                        "CLICK_TRACKING",
+                        "VIDEO_START",
+                        "VIDEO_FIRST_QUARTILE",
+                        "VIDEO_MIDPOINT",
+                        "VIDEO_THIRD_QUARTILE",
+                        "VIDEO_COMPLETE",
+                        "VIDEO_MUTE",
+                        "VIDEO_PAUSE",
+                        "VIDEO_REWIND",
+                        "VIDEO_FULLSCREEN",
+                        "VIDEO_STOP",
+                        "VIDEO_CUSTOM",
+                        "SURVEY",
+                        "RICH_MEDIA_IMPRESSION",
+                        "RICH_MEDIA_RM_IMPRESSION",
+                        "RICH_MEDIA_BACKUP_IMPRESSION",
+                        "VIDEO_SKIP",
+                        "VIDEO_PROGRESS"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "url": {
+                    "description": "URL for the specified third-party URL type.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TranscodeSetting": {
+            "description": "Transcode Settings",
+            "id": "TranscodeSetting",
+            "properties": {
+                "enabledVideoFormats": {
+                    "description": "Allowlist of video formats to be served to this placement. Set this list to null or empty to serve all video formats.",
+                    "items": {
+                        "format": "int32",
+                        "type": "integer"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#transcodeSetting\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UniversalAdId": {
+            "description": "A Universal Ad ID as per the VAST 4.0 spec. Applicable to the following creative types: INSTREAM_AUDIO, INSTREAM_VIDEO and VPAID.",
+            "id": "UniversalAdId",
+            "properties": {
+                "registry": {
+                    "description": "Registry used for the Ad ID value.",
+                    "enum": [
+                        "OTHER",
+                        "AD_ID_OFFICIAL",
+                        "CLEARCAST",
+                        "DCM"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "value": {
+                    "description": "ID value for this creative. Only alphanumeric characters and the following symbols are valid: \"_/\\-\". Maximum length is 64 characters. Read only when registry is DCM.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UserDefinedVariableConfiguration": {
+            "description": "User Defined Variable configuration.",
+            "id": "UserDefinedVariableConfiguration",
+            "properties": {
+                "dataType": {
+                    "description": "Data type for the variable. This is a required field.",
+                    "enum": [
+                        "STRING",
+                        "NUMBER"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "reportName": {
+                    "description": "User-friendly name for the variable which will appear in reports. This is a required field, must be less than 64 characters long, and cannot contain the following characters: \"\"<>\".",
+                    "type": "string"
+                },
+                "variableType": {
+                    "description": "Variable name in the tag. This is a required field.",
+                    "enum": [
+                        "U1",
+                        "U2",
+                        "U3",
+                        "U4",
+                        "U5",
+                        "U6",
+                        "U7",
+                        "U8",
+                        "U9",
+                        "U10",
+                        "U11",
+                        "U12",
+                        "U13",
+                        "U14",
+                        "U15",
+                        "U16",
+                        "U17",
+                        "U18",
+                        "U19",
+                        "U20",
+                        "U21",
+                        "U22",
+                        "U23",
+                        "U24",
+                        "U25",
+                        "U26",
+                        "U27",
+                        "U28",
+                        "U29",
+                        "U30",
+                        "U31",
+                        "U32",
+                        "U33",
+                        "U34",
+                        "U35",
+                        "U36",
+                        "U37",
+                        "U38",
+                        "U39",
+                        "U40",
+                        "U41",
+                        "U42",
+                        "U43",
+                        "U44",
+                        "U45",
+                        "U46",
+                        "U47",
+                        "U48",
+                        "U49",
+                        "U50",
+                        "U51",
+                        "U52",
+                        "U53",
+                        "U54",
+                        "U55",
+                        "U56",
+                        "U57",
+                        "U58",
+                        "U59",
+                        "U60",
+                        "U61",
+                        "U62",
+                        "U63",
+                        "U64",
+                        "U65",
+                        "U66",
+                        "U67",
+                        "U68",
+                        "U69",
+                        "U70",
+                        "U71",
+                        "U72",
+                        "U73",
+                        "U74",
+                        "U75",
+                        "U76",
+                        "U77",
+                        "U78",
+                        "U79",
+                        "U80",
+                        "U81",
+                        "U82",
+                        "U83",
+                        "U84",
+                        "U85",
+                        "U86",
+                        "U87",
+                        "U88",
+                        "U89",
+                        "U90",
+                        "U91",
+                        "U92",
+                        "U93",
+                        "U94",
+                        "U95",
+                        "U96",
+                        "U97",
+                        "U98",
+                        "U99",
+                        "U100"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UserProfile": {
+            "description": "A UserProfile resource lets you list all DFA user profiles that are associated with a Google user account. The profile_id needs to be specified in other API requests. ",
+            "id": "UserProfile",
+            "properties": {
+                "accountId": {
+                    "description": "The account ID to which this profile belongs.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "accountName": {
+                    "description": "The account name this profile belongs to.",
+                    "type": "string"
+                },
+                "etag": {
+                    "description": "Etag of this resource.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userProfile\".",
+                    "type": "string"
                 },
                 "profileId": {
-                  "location": "path",
-                  "type": "string",
-                  "format": "int64",
-                  "description": "The Campaign Manager 360 user profile ID.",
-                  "required": true
+                    "description": "The unique ID of the user profile.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "subAccountId": {
+                    "description": "The sub account ID this profile belongs to if applicable.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "subAccountName": {
+                    "description": "The sub account name this profile belongs to if applicable.",
+                    "type": "string"
+                },
+                "userName": {
+                    "description": "The user name.",
+                    "type": "string"
                 }
-              },
-              "flatPath": "userprofiles/{profileId}/reports/{reportId}/files/{fileId}",
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "File"
-              },
-              "path": "userprofiles/{profileId}/reports/{reportId}/files/{fileId}"
-            }
-          }
+            },
+            "type": "object"
+        },
+        "UserProfileList": {
+            "description": "Represents the list of user profiles.",
+            "id": "UserProfileList",
+            "properties": {
+                "etag": {
+                    "description": "Etag of this resource.",
+                    "type": "string"
+                },
+                "items": {
+                    "description": "The user profiles returned in this response.",
+                    "items": {
+                        "$ref": "UserProfile"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userProfileList\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UserRole": {
+            "description": "Contains properties of auser role, which is used to manage user access.",
+            "id": "UserRole",
+            "properties": {
+                "accountId": {
+                    "description": "Account ID of this user role. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "defaultUserRole": {
+                    "description": "Whether this is a default user role. Default user roles are created by the system for the account/subaccount and cannot be modified or deleted. Each default user role comes with a basic set of preassigned permissions.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "ID of this user role. This is a read-only, auto-generated field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRole\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this user role. This is a required field. Must be less than 256 characters long. If this user role is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this user role is a top-level user role, and the name must be unique among top-level user roles of the same account.",
+                    "type": "string"
+                },
+                "parentUserRoleId": {
+                    "description": "ID of the user role that this user role is based on or copied from. This is a required field.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "permissions": {
+                    "description": "List of permissions associated with this user role.",
+                    "items": {
+                        "$ref": "UserRolePermission"
+                    },
+                    "type": "array"
+                },
+                "subaccountId": {
+                    "description": "Subaccount ID of this user role. This is a read-only field that can be left blank.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UserRolePermission": {
+            "description": "Contains properties of a user role permission.",
+            "id": "UserRolePermission",
+            "properties": {
+                "availability": {
+                    "description": "Levels of availability for a user role permission.",
+                    "enum": [
+                        "NOT_AVAILABLE_BY_DEFAULT",
+                        "ACCOUNT_BY_DEFAULT",
+                        "SUBACCOUNT_AND_ACCOUNT_BY_DEFAULT",
+                        "ACCOUNT_ALWAYS",
+                        "SUBACCOUNT_AND_ACCOUNT_ALWAYS"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of this user role permission.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolePermission\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this user role permission.",
+                    "type": "string"
+                },
+                "permissionGroupId": {
+                    "description": "ID of the permission group that this user role permission belongs to.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UserRolePermissionGroup": {
+            "description": "Represents a grouping of related user role permissions.",
+            "id": "UserRolePermissionGroup",
+            "properties": {
+                "id": {
+                    "description": "ID of this user role permission.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolePermissionGroup\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of this user role permission group.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UserRolePermissionGroupsListResponse": {
+            "description": "User Role Permission Group List Response",
+            "id": "UserRolePermissionGroupsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolePermissionGroupsListResponse\".",
+                    "type": "string"
+                },
+                "userRolePermissionGroups": {
+                    "description": "User role permission group collection.",
+                    "items": {
+                        "$ref": "UserRolePermissionGroup"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "UserRolePermissionsListResponse": {
+            "description": "User Role Permission List Response",
+            "id": "UserRolePermissionsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolePermissionsListResponse\".",
+                    "type": "string"
+                },
+                "userRolePermissions": {
+                    "description": "User role permission collection.",
+                    "items": {
+                        "$ref": "UserRolePermission"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "UserRolesListResponse": {
+            "description": "User Role List Response",
+            "id": "UserRolesListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#userRolesListResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token to be used for the next list operation.",
+                    "type": "string"
+                },
+                "userRoles": {
+                    "description": "User role collection.",
+                    "items": {
+                        "$ref": "UserRole"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "VideoFormat": {
+            "description": "Contains information about supported video formats.",
+            "id": "VideoFormat",
+            "properties": {
+                "fileType": {
+                    "description": "File type of the video format.",
+                    "enum": [
+                        "FLV",
+                        "THREEGPP",
+                        "MP4",
+                        "WEBM",
+                        "M3U8"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "id": {
+                    "description": "ID of the video format.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#videoFormat\".",
+                    "type": "string"
+                },
+                "resolution": {
+                    "$ref": "Size",
+                    "description": "The resolution of this video format."
+                },
+                "targetBitRate": {
+                    "description": "The target bit rate of this video format.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "VideoFormatsListResponse": {
+            "description": "Video Format List Response",
+            "id": "VideoFormatsListResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#videoFormatsListResponse\".",
+                    "type": "string"
+                },
+                "videoFormats": {
+                    "description": "Video format collection.",
+                    "items": {
+                        "$ref": "VideoFormat"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "VideoOffset": {
+            "description": "Video Offset",
+            "id": "VideoOffset",
+            "properties": {
+                "offsetPercentage": {
+                    "description": "Duration, as a percentage of video duration. Do not set when offsetSeconds is set. Acceptable values are 0 to 100, inclusive.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "offsetSeconds": {
+                    "description": "Duration, in seconds. Do not set when offsetPercentage is set. Acceptable values are 0 to 86399, inclusive.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "VideoSettings": {
+            "description": "Video Settings",
+            "id": "VideoSettings",
+            "properties": {
+                "companionSettings": {
+                    "$ref": "CompanionSetting",
+                    "description": "Settings for the companion creatives of video creatives served to this placement."
+                },
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"dfareporting#videoSettings\".",
+                    "type": "string"
+                },
+                "obaEnabled": {
+                    "description": "Whether OBA icons are enabled for this placement.",
+                    "type": "boolean"
+                },
+                "obaSettings": {
+                    "$ref": "ObaIcon",
+                    "description": "Settings for the OBA icon of video creatives served to this placement. If this object is provided, the creative-level OBA settings will be overridden."
+                },
+                "orientation": {
+                    "description": "Orientation of a video placement. If this value is set, placement will return assets matching the specified orientation.",
+                    "enum": [
+                        "ANY",
+                        "LANDSCAPE",
+                        "PORTRAIT"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "skippableSettings": {
+                    "$ref": "SkippableSetting",
+                    "description": "Settings for the skippability of video creatives served to this placement. If this object is provided, the creative-level skippable settings will be overridden."
+                },
+                "transcodeSettings": {
+                    "$ref": "TranscodeSetting",
+                    "description": "Settings for the transcodes of video creatives served to this placement. If this object is provided, the creative-level transcode settings will be overridden."
+                }
+            },
+            "type": "object"
         }
-      },
-      "methods": {
-        "list": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "httpMethod": "GET",
-          "description": "Retrieves list of reports.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfareporting"
-          ],
-          "flatPath": "userprofiles/{profileId}/reports",
-          "response": {
-            "$ref": "ReportList"
-          },
-          "path": "userprofiles/{profileId}/reports",
-          "id": "dfareporting.reports.list",
-          "parameters": {
-            "maxResults": {
-              "minimum": "0",
-              "default": "10",
-              "maximum": "10",
-              "location": "query",
-              "type": "integer",
-              "format": "int32",
-              "description": "Maximum number of results to return."
-            },
-            "sortField": {
-              "enum": [
-                "ID",
-                "LAST_MODIFIED_TIME",
-                "NAME"
-              ],
-              "type": "string",
-              "description": "The field by which to sort the list.",
-              "location": "query",
-              "default": "LAST_MODIFIED_TIME",
-              "enumDescriptions": [
-                "Sort by report ID.",
-                "Sort by 'lastModifiedTime' field.",
-                "Sort by name of reports."
-              ]
-            },
-            "profileId": {
-              "format": "int64",
-              "required": true,
-              "type": "string",
-              "description": "The Campaign Manager 360 user profile ID.",
-              "location": "path"
-            },
-            "pageToken": {
-              "location": "query",
-              "type": "string",
-              "description": "The value of the nextToken from the previous result page."
-            },
-            "scope": {
-              "type": "string",
-              "location": "query",
-              "enum": [
-                "ALL",
-                "MINE"
-              ],
-              "enumDescriptions": [
-                "All reports in account.",
-                "My reports."
-              ],
-              "description": "The scope that defines which results are returned.",
-              "default": "MINE"
-            },
-            "sortOrder": {
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "enumDescriptions": [
-                "Ascending order.",
-                "Descending order."
-              ],
-              "description": "Order of sorted results.",
-              "type": "string",
-              "location": "query",
-              "default": "DESCENDING"
-            }
-          }
-        },
-        "run": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfareporting"
-          ],
-          "description": "Runs a report.",
-          "path": "userprofiles/{profileId}/reports/{reportId}/run",
-          "parameterOrder": [
-            "profileId",
-            "reportId"
-          ],
-          "flatPath": "userprofiles/{profileId}/reports/{reportId}/run",
-          "httpMethod": "POST",
-          "parameters": {
-            "reportId": {
-              "description": "The ID of the report.",
-              "format": "int64",
-              "location": "path",
-              "required": true,
-              "type": "string"
-            },
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "description": "The Campaign Manager 360 user profile ID.",
-              "required": true,
-              "type": "string"
-            },
-            "synchronous": {
-              "location": "query",
-              "type": "boolean",
-              "description": "If set and true, tries to run the report synchronously.",
-              "default": "false"
-            }
-          },
-          "id": "dfareporting.reports.run",
-          "response": {
-            "$ref": "File"
-          }
-        },
-        "get": {
-          "response": {
-            "$ref": "Report"
-          },
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "description": "The Campaign Manager 360 user profile ID.",
-              "location": "path",
-              "required": true,
-              "format": "int64"
-            },
-            "reportId": {
-              "format": "int64",
-              "description": "The ID of the report.",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "reportId"
-          ],
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/reports/{reportId}",
-          "id": "dfareporting.reports.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfareporting"
-          ],
-          "path": "userprofiles/{profileId}/reports/{reportId}",
-          "description": "Retrieves a report by its ID."
-        },
-        "insert": {
-          "flatPath": "userprofiles/{profileId}/reports",
-          "httpMethod": "POST",
-          "id": "dfareporting.reports.insert",
-          "response": {
-            "$ref": "Report"
-          },
-          "description": "Creates a report.",
-          "request": {
-            "$ref": "Report"
-          },
-          "path": "userprofiles/{profileId}/reports",
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "description": "The Campaign Manager 360 user profile ID.",
-              "location": "path",
-              "format": "int64",
-              "required": true
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfareporting"
-          ]
-        },
-        "update": {
-          "id": "dfareporting.reports.update",
-          "description": "Updates a report.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfareporting"
-          ],
-          "request": {
-            "$ref": "Report"
-          },
-          "response": {
-            "$ref": "Report"
-          },
-          "flatPath": "userprofiles/{profileId}/reports/{reportId}",
-          "parameters": {
-            "reportId": {
-              "description": "The ID of the report.",
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "type": "string"
-            },
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "description": "The Campaign Manager 360 user profile ID."
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "reportId"
-          ],
-          "httpMethod": "PUT",
-          "path": "userprofiles/{profileId}/reports/{reportId}"
-        },
-        "patch": {
-          "id": "dfareporting.reports.patch",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfareporting"
-          ],
-          "path": "userprofiles/{profileId}/reports/{reportId}",
-          "flatPath": "userprofiles/{profileId}/reports/{reportId}",
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "description": "The DFA user profile ID.",
-              "required": true,
-              "location": "path",
-              "type": "string"
-            },
-            "reportId": {
-              "type": "string",
-              "description": "The ID of the report.",
-              "format": "int64",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "httpMethod": "PATCH",
-          "request": {
-            "$ref": "Report"
-          },
-          "description": "Updates an existing report. This method supports patch semantics.",
-          "parameterOrder": [
-            "profileId",
-            "reportId"
-          ],
-          "response": {
-            "$ref": "Report"
-          }
-        },
-        "delete": {
-          "flatPath": "userprofiles/{profileId}/reports/{reportId}",
-          "path": "userprofiles/{profileId}/reports/{reportId}",
-          "httpMethod": "DELETE",
-          "description": "Deletes a report by its ID.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfareporting"
-          ],
-          "id": "dfareporting.reports.delete",
-          "parameters": {
-            "reportId": {
-              "description": "The ID of the report.",
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "format": "int64"
-            },
-            "profileId": {
-              "description": "The Campaign Manager 360 user profile ID.",
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "type": "string"
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "reportId"
-          ]
-        }
-      }
     },
-    "directorySites": {
-      "methods": {
-        "insert": {
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path",
-              "required": true
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/directorySites",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.directorySites.insert",
-          "httpMethod": "POST",
-          "path": "userprofiles/{profileId}/directorySites",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "response": {
-            "$ref": "DirectorySite"
-          },
-          "description": "Inserts a new directory site.",
-          "request": {
-            "$ref": "DirectorySite"
-          }
-        },
-        "get": {
-          "id": "dfareporting.directorySites.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "location": "path"
-            },
-            "id": {
-              "description": "Directory site ID.",
-              "required": true,
-              "location": "path",
-              "type": "string",
-              "format": "int64"
-            }
-          },
-          "httpMethod": "GET",
-          "description": "Gets one directory site by ID.",
-          "response": {
-            "$ref": "DirectorySite"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "flatPath": "userprofiles/{profileId}/directorySites/{id}",
-          "path": "userprofiles/{profileId}/directorySites/{id}"
-        },
-        "list": {
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/directorySites",
-          "description": "Retrieves a list of directory sites, possibly filtered. This method supports paging.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/directorySites",
-          "parameters": {
-            "dfpNetworkCode": {
-              "description": "Select only directory sites with this Ad Manager network code.",
-              "type": "string",
-              "location": "query"
-            },
-            "ids": {
-              "type": "string",
-              "format": "int64",
-              "location": "query",
-              "description": "Select only directory sites with these IDs.",
-              "repeated": true
-            },
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "type": "string"
-            },
-            "active": {
-              "type": "boolean",
-              "description": "Select only active directory sites. Leave blank to retrieve both active and inactive directory sites.",
-              "location": "query"
-            },
-            "searchString": {
-              "type": "string",
-              "location": "query",
-              "description": "Allows searching for objects by name, ID or URL. Wildcards (*) are allowed. For example, \"directory site*2015\" will return objects with names like \"directory site June 2015\", \"directory site April 2015\", or simply \"directory site 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"directory site\" will match objects with name \"my directory site\", \"directory site 2015\" or simply, \"directory site\"."
-            },
-            "sortField": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "type": "string",
-              "location": "query",
-              "default": "ID",
-              "description": "Field by which to sort the list.",
-              "enum": [
-                "ID",
-                "NAME"
-              ]
-            },
-            "maxResults": {
-              "maximum": "1000",
-              "description": "Maximum number of results to return.",
-              "type": "integer",
-              "location": "query",
-              "format": "int32",
-              "default": "1000",
-              "minimum": "0"
-            },
-            "acceptsPublisherPaidPlacements": {
-              "location": "query",
-              "description": "Select only directory sites that accept publisher paid placements. This field can be left blank.",
-              "type": "boolean"
-            },
-            "acceptsInStreamVideoPlacements": {
-              "description": "This search filter is no longer supported and will have no effect on the results returned.",
-              "type": "boolean",
-              "location": "query"
-            },
-            "pageToken": {
-              "description": "Value of the nextPageToken from the previous result page.",
-              "type": "string",
-              "location": "query"
-            },
-            "sortOrder": {
-              "location": "query",
-              "description": "Order of sorted results.",
-              "default": "ASCENDING",
-              "type": "string",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ]
-            },
-            "acceptsInterstitialPlacements": {
-              "type": "boolean",
-              "location": "query",
-              "description": "This search filter is no longer supported and will have no effect on the results returned."
-            }
-          },
-          "response": {
-            "$ref": "DirectorySitesListResponse"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.directorySites.list"
-        }
-      }
-    },
-    "advertiserLandingPages": {
-      "methods": {
-        "list": {
-          "response": {
-            "$ref": "AdvertiserLandingPagesListResponse"
-          },
-          "id": "dfareporting.advertiserLandingPages.list",
-          "httpMethod": "GET",
-          "description": "Retrieves a list of landing pages.",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "format": "int64"
-            },
-            "searchString": {
-              "type": "string",
-              "location": "query",
-              "description": "Allows searching for landing pages by name or ID. Wildcards (*) are allowed. For example, \"landingpage*2017\" will return landing pages with names like \"landingpage July 2017\", \"landingpage March 2017\", or simply \"landingpage 2017\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"landingpage\" will match campaigns with name \"my landingpage\", \"landingpage 2015\", or simply \"landingpage\"."
-            },
-            "sortOrder": {
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "description": "Order of sorted results.",
-              "default": "ASCENDING",
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query"
-            },
-            "maxResults": {
-              "maximum": "1000",
-              "format": "int32",
-              "minimum": "0",
-              "default": "1000",
-              "type": "integer",
-              "description": "Maximum number of results to return.",
-              "location": "query"
-            },
-            "archived": {
-              "type": "boolean",
-              "location": "query",
-              "description": "Select only archived landing pages. Don't set this field to select both archived and non-archived landing pages."
-            },
-            "ids": {
-              "type": "string",
-              "format": "int64",
-              "location": "query",
-              "description": "Select only landing pages with these IDs.",
-              "repeated": true
-            },
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page."
-            },
-            "subaccountId": {
-              "description": "Select only landing pages that belong to this subaccount.",
-              "format": "int64",
-              "location": "query",
-              "type": "string"
-            },
-            "sortField": {
-              "description": "Field by which to sort the list.",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "type": "string",
-              "default": "ID"
-            },
-            "advertiserIds": {
-              "repeated": true,
-              "location": "query",
-              "format": "int64",
-              "type": "string",
-              "description": "Select only landing pages that belong to these advertisers."
-            },
-            "campaignIds": {
-              "type": "string",
-              "repeated": true,
-              "location": "query",
-              "format": "int64",
-              "description": "Select only landing pages that are associated with these campaigns."
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/advertiserLandingPages",
-          "path": "userprofiles/{profileId}/advertiserLandingPages"
-        },
-        "update": {
-          "response": {
-            "$ref": "LandingPage"
-          },
-          "description": "Updates an existing landing page.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/advertiserLandingPages",
-          "flatPath": "userprofiles/{profileId}/advertiserLandingPages",
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "location": "path",
-              "format": "int64"
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "request": {
-            "$ref": "LandingPage"
-          },
-          "id": "dfareporting.advertiserLandingPages.update",
-          "httpMethod": "PUT"
-        },
-        "insert": {
-          "response": {
-            "$ref": "LandingPage"
-          },
-          "description": "Inserts a new landing page.",
-          "httpMethod": "POST",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "location": "path",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "request": {
-            "$ref": "LandingPage"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.advertiserLandingPages.insert",
-          "path": "userprofiles/{profileId}/advertiserLandingPages",
-          "flatPath": "userprofiles/{profileId}/advertiserLandingPages"
-        },
-        "patch": {
-          "description": "Updates an existing advertiser landing page. This method supports patch semantics.",
-          "request": {
-            "$ref": "LandingPage"
-          },
-          "flatPath": "userprofiles/{profileId}/advertiserLandingPages",
-          "httpMethod": "PATCH",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "path": "userprofiles/{profileId}/advertiserLandingPages",
-          "id": "dfareporting.advertiserLandingPages.patch",
-          "response": {
-            "$ref": "LandingPage"
-          },
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "format": "int64",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "location": "path"
-            },
-            "id": {
-              "location": "query",
-              "type": "string",
-              "format": "int64",
-              "description": "LandingPage ID.",
-              "required": true
-            }
-          }
-        },
-        "get": {
-          "path": "userprofiles/{profileId}/advertiserLandingPages/{id}",
-          "httpMethod": "GET",
-          "id": "dfareporting.advertiserLandingPages.get",
-          "response": {
-            "$ref": "LandingPage"
-          },
-          "description": "Gets one landing page by ID.",
-          "flatPath": "userprofiles/{profileId}/advertiserLandingPages/{id}",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "id": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "Landing page ID.",
-              "format": "int64"
-            },
-            "profileId": {
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "required": true,
-              "format": "int64"
-            }
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        }
-      }
-    },
-    "contentCategories": {
-      "methods": {
-        "list": {
-          "response": {
-            "$ref": "ContentCategoriesListResponse"
-          },
-          "id": "dfareporting.contentCategories.list",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "flatPath": "userprofiles/{profileId}/contentCategories",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "parameters": {
-            "pageToken": {
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "type": "string"
-            },
-            "searchString": {
-              "type": "string",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"contentcategory*2015\" will return objects with names like \"contentcategory June 2015\", \"contentcategory April 2015\", or simply \"contentcategory 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"contentcategory\" will match objects with name \"my contentcategory\", \"contentcategory 2015\", or simply \"contentcategory\".",
-              "location": "query"
-            },
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            },
-            "ids": {
-              "repeated": true,
-              "description": "Select only content categories with these IDs.",
-              "location": "query",
-              "format": "int64",
-              "type": "string"
-            },
-            "maxResults": {
-              "description": "Maximum number of results to return.",
-              "location": "query",
-              "maximum": "1000",
-              "minimum": "0",
-              "format": "int32",
-              "default": "1000",
-              "type": "integer"
-            },
-            "sortOrder": {
-              "type": "string",
-              "default": "ASCENDING",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Order of sorted results."
-            },
-            "sortField": {
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "description": "Field by which to sort the list.",
-              "type": "string",
-              "default": "ID",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "location": "query"
-            }
-          },
-          "description": "Retrieves a list of content categories, possibly filtered. This method supports paging.",
-          "path": "userprofiles/{profileId}/contentCategories"
-        },
-        "delete": {
-          "id": "dfareporting.contentCategories.delete",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/contentCategories/{id}",
-          "httpMethod": "DELETE",
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "required": true,
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "location": "path"
-            },
-            "id": {
-              "location": "path",
-              "format": "int64",
-              "description": "Content category ID.",
-              "type": "string",
-              "required": true
-            }
-          },
-          "description": "Deletes an existing content category.",
-          "path": "userprofiles/{profileId}/contentCategories/{id}",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        },
-        "update": {
-          "httpMethod": "PUT",
-          "id": "dfareporting.contentCategories.update",
-          "path": "userprofiles/{profileId}/contentCategories",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "ContentCategory"
-          },
-          "flatPath": "userprofiles/{profileId}/contentCategories",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "request": {
-            "$ref": "ContentCategory"
-          },
-          "description": "Updates an existing content category."
-        },
-        "insert": {
-          "flatPath": "userprofiles/{profileId}/contentCategories",
-          "description": "Inserts a new content category.",
-          "request": {
-            "$ref": "ContentCategory"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "ContentCategory"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "httpMethod": "POST",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64",
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "path": "userprofiles/{profileId}/contentCategories",
-          "id": "dfareporting.contentCategories.insert"
-        },
-        "get": {
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "ContentCategory"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/contentCategories/{id}",
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "description": "User profile ID associated with this request."
-            },
-            "id": {
-              "location": "path",
-              "type": "string",
-              "description": "Content category ID.",
-              "format": "int64",
-              "required": true
-            }
-          },
-          "description": "Gets one content category by ID.",
-          "id": "dfareporting.contentCategories.get",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "path": "userprofiles/{profileId}/contentCategories/{id}"
-        },
-        "patch": {
-          "id": "dfareporting.contentCategories.patch",
-          "path": "userprofiles/{profileId}/contentCategories",
-          "httpMethod": "PATCH",
-          "flatPath": "userprofiles/{profileId}/contentCategories",
-          "response": {
-            "$ref": "ContentCategory"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "id": {
-              "description": "ContentCategory ID.",
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "location": "query"
-            },
-            "profileId": {
-              "format": "int64",
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "description": "Updates an existing content category. This method supports patch semantics.",
-          "request": {
-            "$ref": "ContentCategory"
-          }
-        }
-      }
-    },
-    "placementStrategies": {
-      "methods": {
-        "list": {
-          "description": "Retrieves a list of placement strategies, possibly filtered. This method supports paging.",
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.placementStrategies.list",
-          "path": "userprofiles/{profileId}/placementStrategies",
-          "parameters": {
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "Value of the nextPageToken from the previous result page."
-            },
-            "searchString": {
-              "location": "query",
-              "type": "string",
-              "description": "Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, \"placementstrategy*2015\" will return objects with names like \"placementstrategy June 2015\", \"placementstrategy April 2015\", or simply \"placementstrategy 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"placementstrategy\" will match objects with name \"my placementstrategy\", \"placementstrategy 2015\", or simply \"placementstrategy\"."
-            },
-            "sortField": {
-              "description": "Field by which to sort the list.",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "type": "string",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "default": "ID"
-            },
-            "sortOrder": {
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "default": "ASCENDING",
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "location": "query",
-              "description": "Order of sorted results."
-            },
-            "ids": {
-              "type": "string",
-              "description": "Select only placement strategies with these IDs.",
-              "location": "query",
-              "format": "int64",
-              "repeated": true
-            },
-            "maxResults": {
-              "maximum": "1000",
-              "format": "int32",
-              "type": "integer",
-              "location": "query",
-              "minimum": "0",
-              "default": "1000",
-              "description": "Maximum number of results to return."
-            },
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64"
-            }
-          },
-          "response": {
-            "$ref": "PlacementStrategiesListResponse"
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "flatPath": "userprofiles/{profileId}/placementStrategies"
-        },
-        "delete": {
-          "path": "userprofiles/{profileId}/placementStrategies/{id}",
-          "flatPath": "userprofiles/{profileId}/placementStrategies/{id}",
-          "httpMethod": "DELETE",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "format": "int64"
-            },
-            "id": {
-              "format": "int64",
-              "location": "path",
-              "description": "Placement strategy ID.",
-              "type": "string",
-              "required": true
-            }
-          },
-          "description": "Deletes an existing placement strategy.",
-          "id": "dfareporting.placementStrategies.delete",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        },
-        "patch": {
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "id": {
-              "type": "string",
-              "location": "query",
-              "description": "PlacementStrategy ID.",
-              "format": "int64",
-              "required": true
-            },
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request.",
-              "required": true,
-              "format": "int64"
-            }
-          },
-          "description": "Updates an existing placement strategy. This method supports patch semantics.",
-          "path": "userprofiles/{profileId}/placementStrategies",
-          "httpMethod": "PATCH",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "PlacementStrategy"
-          },
-          "flatPath": "userprofiles/{profileId}/placementStrategies",
-          "request": {
-            "$ref": "PlacementStrategy"
-          },
-          "id": "dfareporting.placementStrategies.patch"
-        },
-        "get": {
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "description": "User profile ID associated with this request."
-            },
-            "id": {
-              "location": "path",
-              "format": "int64",
-              "required": true,
-              "description": "Placement strategy ID.",
-              "type": "string"
-            }
-          },
-          "path": "userprofiles/{profileId}/placementStrategies/{id}",
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "PlacementStrategy"
-          },
-          "flatPath": "userprofiles/{profileId}/placementStrategies/{id}",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "id": "dfareporting.placementStrategies.get",
-          "description": "Gets one placement strategy by ID."
-        },
-        "update": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "id": "dfareporting.placementStrategies.update",
-          "request": {
-            "$ref": "PlacementStrategy"
-          },
-          "httpMethod": "PUT",
-          "path": "userprofiles/{profileId}/placementStrategies",
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "required": true
-            }
-          },
-          "response": {
-            "$ref": "PlacementStrategy"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/placementStrategies",
-          "description": "Updates an existing placement strategy."
-        },
-        "insert": {
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path",
-              "format": "int64",
-              "required": true
-            }
-          },
-          "request": {
-            "$ref": "PlacementStrategy"
-          },
-          "description": "Inserts a new placement strategy.",
-          "path": "userprofiles/{profileId}/placementStrategies",
-          "flatPath": "userprofiles/{profileId}/placementStrategies",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "PlacementStrategy"
-          },
-          "id": "dfareporting.placementStrategies.insert",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "httpMethod": "POST"
-        }
-      }
-    },
-    "projects": {
-      "methods": {
-        "get": {
-          "id": "dfareporting.projects.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/projects/{id}",
-          "response": {
-            "$ref": "Project"
-          },
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "location": "path",
-              "format": "int64",
-              "required": true
-            },
-            "id": {
-              "location": "path",
-              "format": "int64",
-              "type": "string",
-              "description": "Project ID.",
-              "required": true
-            }
-          },
-          "description": "Gets one project by ID.",
-          "path": "userprofiles/{profileId}/projects/{id}",
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ]
-        },
-        "list": {
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/projects",
-          "path": "userprofiles/{profileId}/projects",
-          "parameters": {
-            "searchString": {
-              "location": "query",
-              "description": "Allows searching for projects by name or ID. Wildcards (*) are allowed. For example, \"project*2015\" will return projects with names like \"project June 2015\", \"project April 2015\", or simply \"project 2015\". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of \"project\" will match projects with name \"my project\", \"project 2015\", or simply \"project\".",
-              "type": "string"
-            },
-            "sortOrder": {
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "type": "string",
-              "default": "ASCENDING",
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "description": "Order of sorted results."
-            },
-            "maxResults": {
-              "location": "query",
-              "type": "integer",
-              "maximum": "1000",
-              "minimum": "0",
-              "default": "1000",
-              "format": "int32",
-              "description": "Maximum number of results to return."
-            },
-            "advertiserIds": {
-              "repeated": true,
-              "type": "string",
-              "location": "query",
-              "description": "Select only projects with these advertiser IDs.",
-              "format": "int64"
-            },
-            "pageToken": {
-              "location": "query",
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page."
-            },
-            "sortField": {
-              "type": "string",
-              "description": "Field by which to sort the list.",
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "default": "ID",
-              "location": "query"
-            },
-            "ids": {
-              "description": "Select only projects with these IDs.",
-              "repeated": true,
-              "type": "string",
-              "format": "int64",
-              "location": "query"
-            },
-            "profileId": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "ProjectsListResponse"
-          },
-          "description": "Retrieves a list of projects, possibly filtered. This method supports paging .",
-          "id": "dfareporting.projects.list"
-        }
-      }
-    },
-    "creativeGroups": {
-      "methods": {
-        "patch": {
-          "request": {
-            "$ref": "CreativeGroup"
-          },
-          "description": "Updates an existing creative group. This method supports patch semantics.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "path": "userprofiles/{profileId}/creativeGroups",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "id": "dfareporting.creativeGroups.patch",
-          "flatPath": "userprofiles/{profileId}/creativeGroups",
-          "httpMethod": "PATCH",
-          "response": {
-            "$ref": "CreativeGroup"
-          },
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "format": "int64"
-            },
-            "id": {
-              "location": "query",
-              "description": "CreativeGroup ID.",
-              "required": true,
-              "type": "string",
-              "format": "int64"
-            }
-          }
-        },
-        "update": {
-          "id": "dfareporting.creativeGroups.update",
-          "httpMethod": "PUT",
-          "path": "userprofiles/{profileId}/creativeGroups",
-          "flatPath": "userprofiles/{profileId}/creativeGroups",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "description": "Updates an existing creative group.",
-          "response": {
-            "$ref": "CreativeGroup"
-          },
-          "request": {
-            "$ref": "CreativeGroup"
-          },
-          "parameters": {
-            "profileId": {
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "description": "User profile ID associated with this request."
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ]
-        },
-        "insert": {
-          "flatPath": "userprofiles/{profileId}/creativeGroups",
-          "response": {
-            "$ref": "CreativeGroup"
-          },
-          "parameters": {
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "parameterOrder": [
-            "profileId"
-          ],
-          "path": "userprofiles/{profileId}/creativeGroups",
-          "request": {
-            "$ref": "CreativeGroup"
-          },
-          "id": "dfareporting.creativeGroups.insert",
-          "description": "Inserts a new creative group.",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "POST"
-        },
-        "get": {
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/creativeGroups/{id}",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "response": {
-            "$ref": "CreativeGroup"
-          },
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "id": "dfareporting.creativeGroups.get",
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "User profile ID associated with this request."
-            },
-            "id": {
-              "format": "int64",
-              "required": true,
-              "description": "Creative group ID.",
-              "location": "path",
-              "type": "string"
-            }
-          },
-          "path": "userprofiles/{profileId}/creativeGroups/{id}",
-          "description": "Gets one creative group by ID."
-        },
-        "list": {
-          "response": {
-            "$ref": "CreativeGroupsListResponse"
-          },
-          "path": "userprofiles/{profileId}/creativeGroups",
-          "httpMethod": "GET",
-          "parameters": {
-            "sortField": {
-              "enum": [
-                "ID",
-                "NAME"
-              ],
-              "default": "ID",
-              "description": "Field by which to sort the list.",
-              "location": "query",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "type": "string"
-            },
-            "advertiserIds": {
-              "description": "Select only creative groups that belong to these advertisers.",
-              "repeated": true,
-              "location": "query",
-              "type": "string",
-              "format": "int64"
-            },
-            "ids": {
-              "format": "int64",
-              "description": "Select only creative groups with these IDs.",
-              "location": "query",
-              "type": "string",
-              "repeated": true
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "format": "int64"
-            },
-            "searchString": {
-              "description": "Allows searching for creative groups by name or ID. Wildcards (*) are allowed. For example, \"creativegroup*2015\" will return creative groups with names like \"creativegroup June 2015\", \"creativegroup April 2015\", or simply \"creativegroup 2015\". Most of the searches also add wild-cards implicitly at the start and the end of the search string. For example, a search string of \"creativegroup\" will match creative groups with the name \"my creativegroup\", \"creativegroup 2015\", or simply \"creativegroup\".",
-              "location": "query",
-              "type": "string"
-            },
-            "groupNumber": {
-              "format": "int32",
-              "type": "integer",
-              "location": "query",
-              "description": "Select only creative groups that belong to this subgroup.",
-              "minimum": "1",
-              "maximum": "2"
-            },
-            "maxResults": {
-              "maximum": "1000",
-              "description": "Maximum number of results to return.",
-              "minimum": "0",
-              "default": "1000",
-              "type": "integer",
-              "format": "int32",
-              "location": "query"
-            },
-            "sortOrder": {
-              "default": "ASCENDING",
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ],
-              "location": "query",
-              "description": "Order of sorted results."
-            },
-            "pageToken": {
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query"
-            }
-          },
-          "description": "Retrieves a list of creative groups, possibly filtered. This method supports paging.",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/creativeGroups",
-          "id": "dfareporting.creativeGroups.list"
-        }
-      }
-    },
-    "changeLogs": {
-      "methods": {
-        "get": {
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "httpMethod": "GET",
-          "id": "dfareporting.changeLogs.get",
-          "parameterOrder": [
-            "profileId",
-            "id"
-          ],
-          "parameters": {
-            "profileId": {
-              "required": true,
-              "location": "path",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "type": "string"
-            },
-            "id": {
-              "location": "path",
-              "description": "Change log ID.",
-              "required": true,
-              "format": "int64",
-              "type": "string"
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/changeLogs/{id}",
-          "description": "Gets one change log by ID.",
-          "response": {
-            "$ref": "ChangeLog"
-          },
-          "path": "userprofiles/{profileId}/changeLogs/{id}"
-        },
-        "list": {
-          "response": {
-            "$ref": "ChangeLogsListResponse"
-          },
-          "id": "dfareporting.changeLogs.list",
-          "parameters": {
-            "action": {
-              "description": "Select only change logs with the specified action.",
-              "enum": [
-                "ACTION_CREATE",
-                "ACTION_UPDATE",
-                "ACTION_DELETE",
-                "ACTION_ENABLE",
-                "ACTION_DISABLE",
-                "ACTION_ADD",
-                "ACTION_REMOVE",
-                "ACTION_MARK_AS_DEFAULT",
-                "ACTION_ASSOCIATE",
-                "ACTION_ASSIGN",
-                "ACTION_UNASSIGN",
-                "ACTION_SEND",
-                "ACTION_LINK",
-                "ACTION_UNLINK",
-                "ACTION_PUSH",
-                "ACTION_EMAIL_TAGS",
-                "ACTION_SHARE"
-              ],
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                ""
-              ],
-              "location": "query"
-            },
-            "profileId": {
-              "required": true,
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "type": "string"
-            },
-            "maxChangeTime": {
-              "type": "string",
-              "location": "query",
-              "description": "Select only change logs whose change time is before the specified maxChangeTime.The time should be formatted as an RFC3339 date/time string. For example, for 10:54 PM on July 18th, 2015, in the America/New York time zone, the format is \"2015-07-18T22:54:00-04:00\". In other words, the year, month, day, the letter T, the hour (24-hour clock system), minute, second, and then the time zone offset."
-            },
-            "objectType": {
-              "location": "query",
-              "enum": [
-                "OBJECT_ADVERTISER",
-                "OBJECT_FLOODLIGHT_CONFIGURATION",
-                "OBJECT_AD",
-                "OBJECT_FLOODLIGHT_ACTVITY",
-                "OBJECT_CAMPAIGN",
-                "OBJECT_FLOODLIGHT_ACTIVITY_GROUP",
-                "OBJECT_CREATIVE",
-                "OBJECT_PLACEMENT",
-                "OBJECT_DFA_SITE",
-                "OBJECT_USER_ROLE",
-                "OBJECT_USER_PROFILE",
-                "OBJECT_ADVERTISER_GROUP",
-                "OBJECT_ACCOUNT",
-                "OBJECT_SUBACCOUNT",
-                "OBJECT_RICHMEDIA_CREATIVE",
-                "OBJECT_INSTREAM_CREATIVE",
-                "OBJECT_MEDIA_ORDER",
-                "OBJECT_CONTENT_CATEGORY",
-                "OBJECT_PLACEMENT_STRATEGY",
-                "OBJECT_SD_SITE",
-                "OBJECT_SIZE",
-                "OBJECT_CREATIVE_GROUP",
-                "OBJECT_CREATIVE_ASSET",
-                "OBJECT_USER_PROFILE_FILTER",
-                "OBJECT_LANDING_PAGE",
-                "OBJECT_CREATIVE_FIELD",
-                "OBJECT_REMARKETING_LIST",
-                "OBJECT_PROVIDED_LIST_CLIENT",
-                "OBJECT_EVENT_TAG",
-                "OBJECT_CREATIVE_BUNDLE",
-                "OBJECT_BILLING_ACCOUNT_GROUP",
-                "OBJECT_BILLING_FEATURE",
-                "OBJECT_RATE_CARD",
-                "OBJECT_ACCOUNT_BILLING_FEATURE",
-                "OBJECT_BILLING_MINIMUM_FEE",
-                "OBJECT_BILLING_PROFILE",
-                "OBJECT_PLAYSTORE_LINK",
-                "OBJECT_TARGETING_TEMPLATE",
-                "OBJECT_SEARCH_LIFT_STUDY",
-                "OBJECT_FLOODLIGHT_DV360_LINK"
-              ],
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                "",
-                ""
-              ],
-              "description": "Select only change logs with the specified object type."
-            },
-            "pageToken": {
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query",
-              "type": "string"
-            },
-            "searchString": {
-              "location": "query",
-              "description": "Select only change logs whose object ID, user name, old or new values match the search string.",
-              "type": "string"
-            },
-            "userProfileIds": {
-              "repeated": true,
-              "location": "query",
-              "format": "int64",
-              "description": "Select only change logs with these user profile IDs.",
-              "type": "string"
-            },
-            "minChangeTime": {
-              "location": "query",
-              "description": "Select only change logs whose change time is after the specified minChangeTime.The time should be formatted as an RFC3339 date/time string. For example, for 10:54 PM on July 18th, 2015, in the America/New York time zone, the format is \"2015-07-18T22:54:00-04:00\". In other words, the year, month, day, the letter T, the hour (24-hour clock system), minute, second, and then the time zone offset.",
-              "type": "string"
-            },
-            "ids": {
-              "type": "string",
-              "location": "query",
-              "repeated": true,
-              "format": "int64",
-              "description": "Select only change logs with these IDs."
-            },
-            "maxResults": {
-              "default": "1000",
-              "location": "query",
-              "maximum": "1000",
-              "type": "integer",
-              "description": "Maximum number of results to return.",
-              "minimum": "0",
-              "format": "int32"
-            },
-            "objectIds": {
-              "type": "string",
-              "format": "int64",
-              "location": "query",
-              "description": "Select only change logs with these object IDs.",
-              "repeated": true
-            }
-          },
-          "httpMethod": "GET",
-          "path": "userprofiles/{profileId}/changeLogs",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "flatPath": "userprofiles/{profileId}/changeLogs",
-          "description": "Retrieves a list of change logs. This method supports paging."
-        }
-      }
-    },
-    "campaignCreativeAssociations": {
-      "methods": {
-        "list": {
-          "httpMethod": "GET",
-          "flatPath": "userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations",
-          "id": "dfareporting.campaignCreativeAssociations.list",
-          "description": "Retrieves the list of creative IDs associated with the specified campaign. This method supports paging.",
-          "path": "userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations",
-          "parameters": {
-            "pageToken": {
-              "type": "string",
-              "description": "Value of the nextPageToken from the previous result page.",
-              "location": "query"
-            },
-            "profileId": {
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "required": true,
-              "location": "path",
-              "type": "string"
-            },
-            "campaignId": {
-              "description": "Campaign ID in this association.",
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "required": true
-            },
-            "sortOrder": {
-              "description": "Order of sorted results.",
-              "default": "ASCENDING",
-              "location": "query",
-              "type": "string",
-              "enumDescriptions": [
-                "",
-                ""
-              ],
-              "enum": [
-                "ASCENDING",
-                "DESCENDING"
-              ]
-            },
-            "maxResults": {
-              "default": "1000",
-              "maximum": "1000",
-              "location": "query",
-              "type": "integer",
-              "format": "int32",
-              "minimum": "0",
-              "description": "Maximum number of results to return."
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "parameterOrder": [
-            "profileId",
-            "campaignId"
-          ],
-          "response": {
-            "$ref": "CampaignCreativeAssociationsListResponse"
-          }
-        },
-        "insert": {
-          "flatPath": "userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations",
-          "response": {
-            "$ref": "CampaignCreativeAssociation"
-          },
-          "parameters": {
-            "campaignId": {
-              "type": "string",
-              "format": "int64",
-              "location": "path",
-              "description": "Campaign ID in this association.",
-              "required": true
-            },
-            "profileId": {
-              "location": "path",
-              "description": "User profile ID associated with this request.",
-              "format": "int64",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "id": "dfareporting.campaignCreativeAssociations.insert",
-          "parameterOrder": [
-            "profileId",
-            "campaignId"
-          ],
-          "description": "Associates a creative with the specified campaign. This method creates a default ad with dimensions matching the creative in the campaign if such a default ad does not exist already.",
-          "path": "userprofiles/{profileId}/campaigns/{campaignId}/campaignCreativeAssociations",
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "request": {
-            "$ref": "CampaignCreativeAssociation"
-          }
-        }
-      }
-    },
-    "operatingSystems": {
-      "methods": {
-        "list": {
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ],
-          "id": "dfareporting.operatingSystems.list",
-          "parameters": {
-            "profileId": {
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "location": "path",
-              "type": "string",
-              "required": true
-            }
-          },
-          "description": "Retrieves a list of operating systems.",
-          "path": "userprofiles/{profileId}/operatingSystems",
-          "response": {
-            "$ref": "OperatingSystemsListResponse"
-          },
-          "flatPath": "userprofiles/{profileId}/operatingSystems",
-          "parameterOrder": [
-            "profileId"
-          ]
-        },
-        "get": {
-          "parameters": {
-            "dartId": {
-              "format": "int64",
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "Operating system DART ID."
-            },
-            "profileId": {
-              "type": "string",
-              "location": "path",
-              "format": "int64",
-              "description": "User profile ID associated with this request.",
-              "required": true
-            }
-          },
-          "description": "Gets one operating system by DART ID.",
-          "path": "userprofiles/{profileId}/operatingSystems/{dartId}",
-          "parameterOrder": [
-            "profileId",
-            "dartId"
-          ],
-          "id": "dfareporting.operatingSystems.get",
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "OperatingSystem"
-          },
-          "flatPath": "userprofiles/{profileId}/operatingSystems/{dartId}",
-          "scopes": [
-            "https://www.googleapis.com/auth/dfatrafficking"
-          ]
-        }
-      }
-    },
-    "dimensionValues": {
-      "methods": {
-        "query": {
-          "description": "Retrieves list of report dimension values for a list of filters.",
-          "request": {
-            "$ref": "DimensionValueRequest"
-          },
-          "parameters": {
-            "profileId": {
-              "location": "path",
-              "description": "The Campaign Manager 360 user profile ID.",
-              "type": "string",
-              "format": "int64",
-              "required": true
-            },
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "The value of the nextToken from the previous result page."
-            },
-            "maxResults": {
-              "default": "100",
-              "type": "integer",
-              "maximum": "100",
-              "description": "Maximum number of results to return.",
-              "format": "int32",
-              "minimum": "0",
-              "location": "query"
-            }
-          },
-          "flatPath": "userprofiles/{profileId}/dimensionvalues/query",
-          "id": "dfareporting.dimensionValues.query",
-          "httpMethod": "POST",
-          "parameterOrder": [
-            "profileId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/dfareporting"
-          ],
-          "response": {
-            "$ref": "DimensionValueList"
-          },
-          "path": "userprofiles/{profileId}/dimensionvalues/query"
-        }
-      }
-    }
-  },
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "parameters": {
-    "$.xgafv": {
-      "type": "string",
-      "description": "V1 error format.",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "enum": [
-        "1",
-        "2"
-      ],
-      "location": "query"
-    },
-    "quotaUser": {
-      "type": "string",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "location": "query"
-    },
-    "oauth_token": {
-      "location": "query",
-      "type": "string",
-      "description": "OAuth 2.0 token for the current user."
-    },
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "location": "query"
-    },
-    "callback": {
-      "type": "string",
-      "description": "JSONP",
-      "location": "query"
-    },
-    "key": {
-      "location": "query",
-      "type": "string",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token."
-    },
-    "upload_protocol": {
-      "location": "query",
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
-    },
-    "fields": {
-      "location": "query",
-      "type": "string",
-      "description": "Selector specifying which fields to include in a partial response."
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "type": "boolean",
-      "description": "Returns response with indentations and line breaks.",
-      "default": "true",
-      "location": "query"
-    },
-    "alt": {
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "location": "query",
-      "default": "json",
-      "description": "Data format for response.",
-      "type": "string"
-    }
-  }
-}
+    "servicePath": "dfareporting/v3.4/",
+    "title": "Campaign Manager 360 API",
+    "version": "v3.4"
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/docs.v1.json b/googleapiclient/discovery_cache/documents/docs.v1.json
index b2f6d2c..4c8171a 100644
--- a/googleapiclient/discovery_cache/documents/docs.v1.json
+++ b/googleapiclient/discovery_cache/documents/docs.v1.json
@@ -1,4173 +1,4173 @@
 {
-  "version_module": true,
-  "basePath": "",
-  "protocol": "rest",
-  "servicePath": "",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/drive.readonly": {
-          "description": "See and download all your Google Drive files"
-        },
-        "https://www.googleapis.com/auth/drive.file": {
-          "description": "View and manage Google Drive files and folders that you have opened or created with this app"
-        },
-        "https://www.googleapis.com/auth/documents": {
-          "description": "View and manage your Google Docs documents"
-        },
-        "https://www.googleapis.com/auth/documents.readonly": {
-          "description": "View your Google Docs documents"
-        },
-        "https://www.googleapis.com/auth/drive": {
-          "description": "See, edit, create, and delete all of your Google Drive files"
-        }
-      }
-    }
-  },
-  "batchPath": "batch",
-  "fullyEncodeReservedExpansion": true,
-  "name": "docs",
-  "revision": "20200803",
-  "version": "v1",
-  "schemas": {
-    "Footer": {
-      "properties": {
-        "content": {
-          "items": {
-            "$ref": "StructuralElement"
-          },
-          "type": "array",
-          "description": "The contents of the footer. The indexes for a footer's content begin at zero."
-        },
-        "footerId": {
-          "type": "string",
-          "description": "The ID of the footer."
-        }
-      },
-      "id": "Footer",
-      "description": "A document footer.",
-      "type": "object"
-    },
-    "InlineObjectElement": {
-      "properties": {
-        "suggestedDeletionIds": {
-          "items": {
-            "type": "string"
-          },
-          "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
-          "type": "array"
-        },
-        "inlineObjectId": {
-          "description": "The ID of the InlineObject this element contains.",
-          "type": "string"
-        },
-        "suggestedInsertionIds": {
-          "items": {
-            "type": "string"
-          },
-          "description": "The suggested insertion IDs. An InlineObjectElement may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
-          "type": "array"
-        },
-        "suggestedTextStyleChanges": {
-          "type": "object",
-          "description": "The suggested text style changes to this InlineObject, keyed by suggestion ID.",
-          "additionalProperties": {
-            "$ref": "SuggestedTextStyle"
-          }
-        },
-        "textStyle": {
-          "$ref": "TextStyle",
-          "description": "The text style of this InlineObjectElement. Similar to text content, like text runs and footnote references, the text style of an inline object element can affect content layout as well as the styling of text inserted adjacent to it."
-        }
-      },
-      "type": "object",
-      "id": "InlineObjectElement",
-      "description": "A ParagraphElement that contains an InlineObject."
-    },
-    "SheetsChartReference": {
-      "type": "object",
-      "description": "A reference to a linked chart embedded from Google Sheets.",
-      "properties": {
-        "chartId": {
-          "description": "The ID of the specific chart in the Google Sheets spreadsheet that is embedded.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "spreadsheetId": {
-          "type": "string",
-          "description": "The ID of the Google Sheets spreadsheet that contains the source chart."
-        }
-      },
-      "id": "SheetsChartReference"
-    },
-    "InsertSectionBreakRequest": {
-      "type": "object",
-      "id": "InsertSectionBreakRequest",
-      "properties": {
-        "endOfSegmentLocation": {
-          "description": "Inserts a newline and a section break at the end of the document body. Section breaks cannot be inserted inside a footnote, header or footer. Because section breaks can only be inserted inside the body, the segment ID field must be empty.",
-          "$ref": "EndOfSegmentLocation"
-        },
-        "location": {
-          "description": "Inserts a newline and a section break at a specific index in the document. The section break must be inserted inside the bounds of an existing Paragraph. For instance, it cannot be inserted at a table's start index (i.e. between the table and its preceding paragraph). Section breaks cannot be inserted inside a table, equation, footnote, header, or footer. Since section breaks can only be inserted inside the body, the segment ID field must be empty.",
-          "$ref": "Location"
-        },
-        "sectionType": {
-          "description": "The type of section to insert.",
-          "type": "string",
-          "enumDescriptions": [
-            "The section type is unspecified.",
-            "The section starts immediately after the last paragraph of the previous section.",
-            "The section starts on the next page."
-          ],
-          "enum": [
-            "SECTION_TYPE_UNSPECIFIED",
-            "CONTINUOUS",
-            "NEXT_PAGE"
-          ]
-        }
-      },
-      "description": "Inserts a section break at the given location. A newline character will be inserted before the section break."
-    },
-    "PageBreak": {
-      "id": "PageBreak",
-      "type": "object",
-      "description": "A ParagraphElement representing a page break. A page break makes the subsequent text start at the top of the next page.",
-      "properties": {
-        "suggestedDeletionIds": {
-          "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "textStyle": {
-          "description": "The text style of this PageBreak. Similar to text content, like text runs and footnote references, the text style of a page break can affect content layout as well as the styling of text inserted adjacent to it.",
-          "$ref": "TextStyle"
-        },
-        "suggestedInsertionIds": {
-          "items": {
-            "type": "string"
-          },
-          "description": "The suggested insertion IDs. A PageBreak may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
-          "type": "array"
-        },
-        "suggestedTextStyleChanges": {
-          "description": "The suggested text style changes to this PageBreak, keyed by suggestion ID.",
-          "type": "object",
-          "additionalProperties": {
-            "$ref": "SuggestedTextStyle"
-          }
-        }
-      }
-    },
-    "OptionalColor": {
-      "id": "OptionalColor",
-      "type": "object",
-      "description": "A color that can either be fully opaque or fully transparent.",
-      "properties": {
-        "color": {
-          "description": "If set, this will be used as an opaque color. If unset, this represents a transparent color.",
-          "$ref": "Color"
-        }
-      }
-    },
-    "EmbeddedObjectBorderSuggestionState": {
-      "description": "A mask that indicates which of the fields on the base EmbeddedObjectBorder have been changed in this suggestion. For any field set to true, there is a new suggested value.",
-      "properties": {
-        "widthSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to width."
-        },
-        "propertyStateSuggested": {
-          "description": "Indicates if there was a suggested change to property_state.",
-          "type": "boolean"
-        },
-        "colorSuggested": {
-          "description": "Indicates if there was a suggested change to color.",
-          "type": "boolean"
-        },
-        "dashStyleSuggested": {
-          "description": "Indicates if there was a suggested change to dash_style.",
-          "type": "boolean"
-        }
-      },
-      "id": "EmbeddedObjectBorderSuggestionState",
-      "type": "object"
-    },
-    "Equation": {
-      "description": "A ParagraphElement representing an equation.",
-      "id": "Equation",
-      "type": "object",
-      "properties": {
-        "suggestedDeletionIds": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content."
-        },
-        "suggestedInsertionIds": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "The suggested insertion IDs. A Equation may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion."
-        }
-      }
-    },
-    "TableCellStyle": {
-      "description": "The style of a TableCell. Inherited table cell styles are represented as unset fields in this message. A table cell style can inherit from the table's style.",
-      "id": "TableCellStyle",
-      "properties": {
-        "rowSpan": {
-          "description": "The row span of the cell. This property is read-only.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "paddingBottom": {
-          "$ref": "Dimension",
-          "description": "The bottom padding of the cell."
-        },
-        "borderRight": {
-          "description": "The right border of the cell.",
-          "$ref": "TableCellBorder"
-        },
-        "columnSpan": {
-          "format": "int32",
-          "description": "The column span of the cell. This property is read-only.",
-          "type": "integer"
-        },
-        "backgroundColor": {
-          "$ref": "OptionalColor",
-          "description": "The background color of the cell."
-        },
-        "paddingRight": {
-          "description": "The right padding of the cell.",
-          "$ref": "Dimension"
-        },
-        "paddingLeft": {
-          "$ref": "Dimension",
-          "description": "The left padding of the cell."
-        },
-        "borderLeft": {
-          "$ref": "TableCellBorder",
-          "description": "The left border of the cell."
-        },
-        "contentAlignment": {
-          "enum": [
-            "CONTENT_ALIGNMENT_UNSPECIFIED",
-            "CONTENT_ALIGNMENT_UNSUPPORTED",
-            "TOP",
-            "MIDDLE",
-            "BOTTOM"
-          ],
-          "enumDescriptions": [
-            "An unspecified content alignment. The content alignment is inherited from the parent if one exists.",
-            "An unsupported content alignment.",
-            "An alignment that aligns the content to the top of the content holder. Corresponds to ECMA-376 ST_TextAnchoringType 't'.",
-            "An alignment that aligns the content to the middle of the content holder. Corresponds to ECMA-376 ST_TextAnchoringType 'ctr'.",
-            "An alignment that aligns the content to the bottom of the content holder. Corresponds to ECMA-376 ST_TextAnchoringType 'b'."
-          ],
-          "description": "The alignment of the content in the table cell. The default alignment matches the alignment for newly created table cells in the Docs editor.",
-          "type": "string"
-        },
-        "borderBottom": {
-          "$ref": "TableCellBorder",
-          "description": "The bottom border of the cell."
-        },
-        "paddingTop": {
-          "description": "The top padding of the cell.",
-          "$ref": "Dimension"
-        },
-        "borderTop": {
-          "description": "The top border of the cell.",
-          "$ref": "TableCellBorder"
-        }
-      },
-      "type": "object"
-    },
-    "Header": {
-      "id": "Header",
-      "type": "object",
-      "description": "A document header.",
-      "properties": {
-        "headerId": {
-          "description": "The ID of the header.",
-          "type": "string"
-        },
-        "content": {
-          "items": {
-            "$ref": "StructuralElement"
-          },
-          "type": "array",
-          "description": "The contents of the header. The indexes for a header's content begin at zero."
-        }
-      }
-    },
-    "TextStyleSuggestionState": {
-      "description": "A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. For any field set to true, there is a new suggested value.",
-      "properties": {
-        "italicSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to italic."
-        },
-        "baselineOffsetSuggested": {
-          "description": "Indicates if there was a suggested change to baseline_offset.",
-          "type": "boolean"
-        },
-        "foregroundColorSuggested": {
-          "description": "Indicates if there was a suggested change to foreground_color.",
-          "type": "boolean"
-        },
-        "boldSuggested": {
-          "description": "Indicates if there was a suggested change to bold.",
-          "type": "boolean"
-        },
-        "backgroundColorSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to background_color."
-        },
-        "weightedFontFamilySuggested": {
-          "description": "Indicates if there was a suggested change to weighted_font_family.",
-          "type": "boolean"
-        },
-        "linkSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to link."
-        },
-        "underlineSuggested": {
-          "description": "Indicates if there was a suggested change to underline.",
-          "type": "boolean"
-        },
-        "fontSizeSuggested": {
-          "description": "Indicates if there was a suggested change to font_size.",
-          "type": "boolean"
-        },
-        "strikethroughSuggested": {
-          "description": "Indicates if there was a suggested change to strikethrough.",
-          "type": "boolean"
-        },
-        "smallCapsSuggested": {
-          "description": "Indicates if there was a suggested change to small_caps.",
-          "type": "boolean"
-        }
-      },
-      "id": "TextStyleSuggestionState",
-      "type": "object"
-    },
-    "UpdateParagraphStyleRequest": {
-      "id": "UpdateParagraphStyleRequest",
-      "properties": {
-        "fields": {
-          "description": "The fields that should be updated. At least one field must be specified. The root `paragraph_style` is implied and should not be specified. For example, to update the paragraph style's alignment property, set `fields` to `\"alignment\"`. To reset a property to its default value, include its field name in the field mask but leave the field itself unset.",
-          "format": "google-fieldmask",
-          "type": "string"
-        },
-        "range": {
-          "description": "The range overlapping the paragraphs to style.",
-          "$ref": "Range"
-        },
-        "paragraphStyle": {
-          "$ref": "ParagraphStyle",
-          "description": "The styles to set on the paragraphs. Certain paragraph style changes may cause other changes in order to mirror the behavior of the Docs editor. See the documentation of ParagraphStyle for more information."
-        }
-      },
-      "description": "Update the styling of all paragraphs that overlap with the given range.",
-      "type": "object"
-    },
-    "CreateFootnoteRequest": {
-      "type": "object",
-      "id": "CreateFootnoteRequest",
-      "properties": {
-        "endOfSegmentLocation": {
-          "$ref": "EndOfSegmentLocation",
-          "description": "Inserts the footnote reference at the end of the document body. Footnote references cannot be inserted inside a header, footer or footnote. Since footnote references can only be inserted in the body, the segment ID field must be empty."
-        },
-        "location": {
-          "description": "Inserts the footnote reference at a specific index in the document. The footnote reference must be inserted inside the bounds of an existing Paragraph. For instance, it cannot be inserted at a table's start index (i.e. between the table and its preceding paragraph). Footnote references cannot be inserted inside an equation, header, footer or footnote. Since footnote references can only be inserted in the body, the segment ID field must be empty.",
-          "$ref": "Location"
-        }
-      },
-      "description": "Creates a Footnote segment and inserts a new FootnoteReference to it at the given location. The new Footnote segment will contain a space followed by a newline character."
-    },
-    "InsertTableRowRequest": {
-      "type": "object",
-      "properties": {
-        "insertBelow": {
-          "type": "boolean",
-          "description": "Whether to insert new row below the reference cell location. - `True`: insert below the cell. - `False`: insert above the cell."
-        },
-        "tableCellLocation": {
-          "description": "The reference table cell location from which rows will be inserted. A new row will be inserted above (or below) the row where the reference cell is. If the reference cell is a merged cell, a new row will be inserted above (or below) the merged cell.",
-          "$ref": "TableCellLocation"
-        }
-      },
-      "id": "InsertTableRowRequest",
-      "description": "Inserts an empty row into a table."
-    },
-    "DeleteNamedRangeRequest": {
-      "type": "object",
-      "id": "DeleteNamedRangeRequest",
-      "description": "Deletes a NamedRange.",
-      "properties": {
-        "namedRangeId": {
-          "description": "The ID of the named range to delete.",
-          "type": "string"
-        },
-        "name": {
-          "description": "The name of the range(s) to delete. All named ranges with the given name will be deleted.",
-          "type": "string"
-        }
-      }
-    },
-    "SuggestedInlineObjectProperties": {
-      "type": "object",
-      "id": "SuggestedInlineObjectProperties",
-      "properties": {
-        "inlineObjectPropertiesSuggestionState": {
-          "description": "A mask that indicates which of the fields on the base InlineObjectProperties have been changed in this suggestion.",
-          "$ref": "InlineObjectPropertiesSuggestionState"
-        },
-        "inlineObjectProperties": {
-          "description": "An InlineObjectProperties that only includes the changes made in this suggestion. This can be used along with the inline_object_properties_suggestion_state to see which fields have changed and their new values.",
-          "$ref": "InlineObjectProperties"
-        }
-      },
-      "description": "A suggested change to InlineObjectProperties."
-    },
-    "Paragraph": {
-      "description": "A StructuralElement representing a paragraph. A paragraph is a range of content that is terminated with a newline character.",
-      "id": "Paragraph",
-      "properties": {
-        "suggestedParagraphStyleChanges": {
-          "additionalProperties": {
-            "$ref": "SuggestedParagraphStyle"
-          },
-          "type": "object",
-          "description": "The suggested paragraph style changes to this paragraph, keyed by suggestion ID."
-        },
-        "bullet": {
-          "$ref": "Bullet",
-          "description": "The bullet for this paragraph. If not present, the paragraph does not belong to a list."
-        },
-        "paragraphStyle": {
-          "$ref": "ParagraphStyle",
-          "description": "The style of this paragraph."
-        },
-        "suggestedPositionedObjectIds": {
-          "type": "object",
-          "description": "The IDs of the positioned objects that are suggested to be attached to this paragraph, keyed by suggestion ID.",
-          "additionalProperties": {
-            "$ref": "ObjectReferences"
-          }
-        },
-        "positionedObjectIds": {
-          "description": "The IDs of the positioned objects tethered to this paragraph.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "suggestedBulletChanges": {
-          "additionalProperties": {
-            "$ref": "SuggestedBullet"
-          },
-          "type": "object",
-          "description": "The suggested changes to this paragraph's bullet."
-        },
-        "elements": {
-          "type": "array",
-          "items": {
-            "$ref": "ParagraphElement"
-          },
-          "description": "The content of the paragraph broken down into its component parts."
-        }
-      },
-      "type": "object"
-    },
-    "TableColumnProperties": {
-      "properties": {
-        "width": {
-          "description": "The width of the column. Set when the column's `width_type` is FIXED_WIDTH.",
-          "$ref": "Dimension"
-        },
-        "widthType": {
-          "description": "The width type of the column.",
-          "enumDescriptions": [
-            "The column width type is unspecified.",
-            "The column width is evenly distributed among the other evenly distrubted columns. The width of the column is automatically determined and will have an equal portion of the width remaining for the table after accounting for all columns with specified widths.",
-            "A fixed column width. The width property contains the column's width."
-          ],
-          "type": "string",
-          "enum": [
-            "WIDTH_TYPE_UNSPECIFIED",
-            "EVENLY_DISTRIBUTED",
-            "FIXED_WIDTH"
-          ]
-        }
-      },
-      "id": "TableColumnProperties",
-      "type": "object",
-      "description": "The properties of a column in a table."
-    },
-    "PositionedObjectPositioningSuggestionState": {
-      "description": "A mask that indicates which of the fields on the base PositionedObjectPositioning have been changed in this suggestion. For any field set to true, there is a new suggested value.",
-      "id": "PositionedObjectPositioningSuggestionState",
-      "properties": {
-        "topOffsetSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to top_offset."
-        },
-        "layoutSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to layout."
-        },
-        "leftOffsetSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to left_offset."
-        }
-      },
-      "type": "object"
-    },
-    "SuggestedTextStyle": {
-      "description": "A suggested change to a TextStyle.",
-      "properties": {
-        "textStyleSuggestionState": {
-          "description": "A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.",
-          "$ref": "TextStyleSuggestionState"
-        },
-        "textStyle": {
-          "description": "A TextStyle that only includes the changes made in this suggestion. This can be used along with the text_style_suggestion_state to see which fields have changed and their new values.",
-          "$ref": "TextStyle"
-        }
-      },
-      "id": "SuggestedTextStyle",
-      "type": "object"
-    },
-    "NestingLevelSuggestionState": {
-      "properties": {
-        "glyphFormatSuggested": {
-          "description": "Indicates if there was a suggested change to glyph_format.",
-          "type": "boolean"
-        },
-        "textStyleSuggestionState": {
-          "description": "A mask that indicates which of the fields in text style have been changed in this suggestion.",
-          "$ref": "TextStyleSuggestionState"
-        },
-        "indentFirstLineSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to indent_first_line."
-        },
-        "glyphSymbolSuggested": {
-          "description": "Indicates if there was a suggested change to glyph_symbol.",
-          "type": "boolean"
-        },
-        "indentStartSuggested": {
-          "description": "Indicates if there was a suggested change to indent_start.",
-          "type": "boolean"
-        },
-        "bulletAlignmentSuggested": {
-          "description": "Indicates if there was a suggested change to bullet_alignment.",
-          "type": "boolean"
-        },
-        "glyphTypeSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to glyph_type."
-        },
-        "startNumberSuggested": {
-          "description": "Indicates if there was a suggested change to start_number.",
-          "type": "boolean"
-        }
-      },
-      "id": "NestingLevelSuggestionState",
-      "description": "A mask that indicates which of the fields on the base NestingLevel have been changed in this suggestion. For any field set to true, there is a new suggested value.",
-      "type": "object"
-    },
-    "UpdateSectionStyleRequest": {
-      "id": "UpdateSectionStyleRequest",
-      "type": "object",
-      "properties": {
-        "sectionStyle": {
-          "description": "The styles to be set on the section. Certain section style changes may cause other changes in order to mirror the behavior of the Docs editor. See the documentation of SectionStyle for more information.",
-          "$ref": "SectionStyle"
-        },
-        "fields": {
-          "format": "google-fieldmask",
-          "type": "string",
-          "description": "The fields that should be updated. At least one field must be specified. The root `section_style` is implied and must not be specified. A single `\"*\"` can be used as short-hand for listing every field. For example to update the left margin, set `fields` to `\"margin_left\"`."
-        },
-        "range": {
-          "$ref": "Range",
-          "description": "The range overlapping the sections to style. Because section breaks can only be inserted inside the body, the segment ID field must be empty."
-        }
-      },
-      "description": "Updates the SectionStyle."
-    },
-    "Size": {
-      "type": "object",
-      "description": "A width and height.",
-      "properties": {
-        "width": {
-          "$ref": "Dimension",
-          "description": "The width of the object."
-        },
-        "height": {
-          "description": "The height of the object.",
-          "$ref": "Dimension"
-        }
-      },
-      "id": "Size"
-    },
-    "PositionedObject": {
-      "type": "object",
-      "description": "An object that is tethered to a Paragraph and positioned relative to the beginning of the paragraph. A PositionedObject contains an EmbeddedObject such as an image.",
-      "id": "PositionedObject",
-      "properties": {
-        "positionedObjectProperties": {
-          "description": "The properties of this positioned object.",
-          "$ref": "PositionedObjectProperties"
-        },
-        "suggestedDeletionIds": {
-          "items": {
-            "type": "string"
-          },
-          "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
-          "type": "array"
-        },
-        "suggestedInsertionId": {
-          "description": "The suggested insertion ID. If empty, then this is not a suggested insertion.",
-          "type": "string"
-        },
-        "suggestedPositionedObjectPropertiesChanges": {
-          "additionalProperties": {
-            "$ref": "SuggestedPositionedObjectProperties"
-          },
-          "description": "The suggested changes to the positioned object properties, keyed by suggestion ID.",
-          "type": "object"
-        },
-        "objectId": {
-          "description": "The ID of this positioned object.",
-          "type": "string"
-        }
-      }
-    },
-    "Body": {
-      "properties": {
-        "content": {
-          "description": "The contents of the body. The indexes for the body's content begin at zero.",
-          "type": "array",
-          "items": {
-            "$ref": "StructuralElement"
-          }
-        }
-      },
-      "description": "The document body. The body typically contains the full document contents except for headers, footers and footnotes.",
-      "id": "Body",
-      "type": "object"
-    },
-    "ParagraphElement": {
-      "type": "object",
-      "id": "ParagraphElement",
-      "properties": {
-        "equation": {
-          "$ref": "Equation",
-          "description": "An equation paragraph element."
-        },
-        "autoText": {
-          "description": "An auto text paragraph element.",
-          "$ref": "AutoText"
-        },
-        "startIndex": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The zero-based start index of this paragraph element, in UTF-16 code units."
-        },
-        "endIndex": {
-          "type": "integer",
-          "description": "The zero-base end index of this paragraph element, exclusive, in UTF-16 code units.",
-          "format": "int32"
-        },
-        "textRun": {
-          "description": "A text run paragraph element.",
-          "$ref": "TextRun"
-        },
-        "horizontalRule": {
-          "description": "A horizontal rule paragraph element.",
-          "$ref": "HorizontalRule"
-        },
-        "footnoteReference": {
-          "description": "A footnote reference paragraph element.",
-          "$ref": "FootnoteReference"
-        },
-        "columnBreak": {
-          "$ref": "ColumnBreak",
-          "description": "A column break paragraph element."
-        },
-        "pageBreak": {
-          "$ref": "PageBreak",
-          "description": "A page break paragraph element."
-        },
-        "inlineObjectElement": {
-          "$ref": "InlineObjectElement",
-          "description": "An inline object paragraph element."
-        }
-      },
-      "description": "A ParagraphElement describes content within a Paragraph."
-    },
-    "CropPropertiesSuggestionState": {
-      "description": "A mask that indicates which of the fields on the base CropProperties have been changed in this suggestion. For any field set to true, there is a new suggested value.",
-      "properties": {
-        "offsetLeftSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to offset_left."
-        },
-        "angleSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to angle."
-        },
-        "offsetBottomSuggested": {
-          "description": "Indicates if there was a suggested change to offset_bottom.",
-          "type": "boolean"
-        },
-        "offsetTopSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to offset_top."
-        },
-        "offsetRightSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to offset_right."
-        }
-      },
-      "id": "CropPropertiesSuggestionState",
-      "type": "object"
-    },
-    "TableOfContents": {
-      "id": "TableOfContents",
-      "type": "object",
-      "properties": {
-        "content": {
-          "description": "The content of the table of contents.",
-          "type": "array",
-          "items": {
-            "$ref": "StructuralElement"
-          }
-        },
-        "suggestedDeletionIds": {
-          "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "suggestedInsertionIds": {
-          "items": {
-            "type": "string"
-          },
-          "description": "The suggested insertion IDs. A TableOfContents may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
-          "type": "array"
-        }
-      },
-      "description": "A StructuralElement representing a table of contents."
-    },
-    "TableRowStyleSuggestionState": {
-      "properties": {
-        "minRowHeightSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to min_row_height."
-        }
-      },
-      "id": "TableRowStyleSuggestionState",
-      "type": "object",
-      "description": "A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion. For any field set to true, there is a new suggested value."
-    },
-    "CreateFootnoteResponse": {
-      "description": "The result of creating a footnote.",
-      "properties": {
-        "footnoteId": {
-          "type": "string",
-          "description": "The ID of the created footnote."
-        }
-      },
-      "id": "CreateFootnoteResponse",
-      "type": "object"
-    },
-    "Request": {
-      "id": "Request",
-      "type": "object",
-      "properties": {
-        "insertText": {
-          "$ref": "InsertTextRequest",
-          "description": "Inserts text at the specified location."
-        },
-        "mergeTableCells": {
-          "description": "Merges cells in a table.",
-          "$ref": "MergeTableCellsRequest"
-        },
-        "updateDocumentStyle": {
-          "description": "Updates the style of the document.",
-          "$ref": "UpdateDocumentStyleRequest"
-        },
-        "replaceAllText": {
-          "$ref": "ReplaceAllTextRequest",
-          "description": "Replaces all instances of the specified text."
-        },
-        "createParagraphBullets": {
-          "description": "Creates bullets for paragraphs.",
-          "$ref": "CreateParagraphBulletsRequest"
-        },
-        "replaceImage": {
-          "$ref": "ReplaceImageRequest",
-          "description": "Replaces an image in the document."
-        },
-        "deleteFooter": {
-          "description": "Deletes a footer from the document.",
-          "$ref": "DeleteFooterRequest"
-        },
-        "updateSectionStyle": {
-          "$ref": "UpdateSectionStyleRequest",
-          "description": "Updates the section style of the specified range."
-        },
-        "createFooter": {
-          "description": "Creates a footer.",
-          "$ref": "CreateFooterRequest"
-        },
-        "updateTableColumnProperties": {
-          "$ref": "UpdateTableColumnPropertiesRequest",
-          "description": "Updates the properties of columns in a table."
-        },
-        "insertPageBreak": {
-          "description": "Inserts a page break at the specified location.",
-          "$ref": "InsertPageBreakRequest"
-        },
-        "deleteNamedRange": {
-          "description": "Deletes a named range.",
-          "$ref": "DeleteNamedRangeRequest"
-        },
-        "updateParagraphStyle": {
-          "$ref": "UpdateParagraphStyleRequest",
-          "description": "Updates the paragraph style at the specified range."
-        },
-        "updateTableCellStyle": {
-          "$ref": "UpdateTableCellStyleRequest",
-          "description": "Updates the style of table cells."
-        },
-        "updateTableRowStyle": {
-          "description": "Updates the row style in a table.",
-          "$ref": "UpdateTableRowStyleRequest"
-        },
-        "deleteTableColumn": {
-          "description": "Deletes a column from a table.",
-          "$ref": "DeleteTableColumnRequest"
-        },
-        "insertTableColumn": {
-          "$ref": "InsertTableColumnRequest",
-          "description": "Inserts an empty column into a table."
-        },
-        "insertTableRow": {
-          "description": "Inserts an empty row into a table.",
-          "$ref": "InsertTableRowRequest"
-        },
-        "insertInlineImage": {
-          "$ref": "InsertInlineImageRequest",
-          "description": "Inserts an inline image at the specified location."
-        },
-        "createFootnote": {
-          "$ref": "CreateFootnoteRequest",
-          "description": "Creates a footnote."
-        },
-        "createNamedRange": {
-          "$ref": "CreateNamedRangeRequest",
-          "description": "Creates a named range."
-        },
-        "deleteTableRow": {
-          "description": "Deletes a row from a table.",
-          "$ref": "DeleteTableRowRequest"
-        },
-        "createHeader": {
-          "description": "Creates a header.",
-          "$ref": "CreateHeaderRequest"
-        },
-        "deletePositionedObject": {
-          "$ref": "DeletePositionedObjectRequest",
-          "description": "Deletes a positioned object from the document."
-        },
-        "deleteContentRange": {
-          "description": "Deletes content from the document.",
-          "$ref": "DeleteContentRangeRequest"
-        },
-        "replaceNamedRangeContent": {
-          "$ref": "ReplaceNamedRangeContentRequest",
-          "description": "Replaces the content in a named range."
-        },
-        "insertTable": {
-          "description": "Inserts a table at the specified location.",
-          "$ref": "InsertTableRequest"
-        },
-        "updateTextStyle": {
-          "description": "Updates the text style at the specified range.",
-          "$ref": "UpdateTextStyleRequest"
-        },
-        "insertSectionBreak": {
-          "description": "Inserts a section break at the specified location.",
-          "$ref": "InsertSectionBreakRequest"
-        },
-        "unmergeTableCells": {
-          "$ref": "UnmergeTableCellsRequest",
-          "description": "Unmerges cells in a table."
-        },
-        "deleteParagraphBullets": {
-          "description": "Deletes bullets from paragraphs.",
-          "$ref": "DeleteParagraphBulletsRequest"
-        },
-        "deleteHeader": {
-          "description": "Deletes a header from the document.",
-          "$ref": "DeleteHeaderRequest"
-        }
-      },
-      "description": "A single update to apply to a document."
-    },
-    "MergeTableCellsRequest": {
-      "id": "MergeTableCellsRequest",
-      "properties": {
-        "tableRange": {
-          "$ref": "TableRange",
-          "description": "The table range specifying which cells of the table to merge. Any text in the cells being merged will be concatenated and stored in the \"head\" cell of the range. This is the upper-left cell of the range when the content direction is left to right, and the upper-right cell of the range otherwise. If the range is non-rectangular (which can occur in some cases where the range covers cells that are already merged or where the table is non-rectangular), a 400 bad request error is returned."
-        }
-      },
-      "description": "Merges cells in a Table.",
-      "type": "object"
-    },
-    "ImageProperties": {
-      "description": "The properties of an image.",
-      "properties": {
-        "angle": {
-          "description": "The clockwise rotation angle of the image, in radians.",
-          "type": "number",
-          "format": "float"
-        },
-        "transparency": {
-          "type": "number",
-          "format": "float",
-          "description": "The transparency effect of the image. The value should be in the interval [0.0, 1.0], where 0 means no effect and 1 means completely transparent."
-        },
-        "contentUri": {
-          "type": "string",
-          "description": "A URI to the image with a default lifetime of 30 minutes. This URI is tagged with the account of the requester. Anyone with the URI effectively accesses the image as the original requester. Access to the image may be lost if the document's sharing settings change."
-        },
-        "contrast": {
-          "format": "float",
-          "type": "number",
-          "description": "The contrast effect of the image. The value should be in the interval [-1.0, 1.0], where 0 means no effect."
-        },
-        "cropProperties": {
-          "description": "The crop properties of the image.",
-          "$ref": "CropProperties"
-        },
-        "sourceUri": {
-          "type": "string",
-          "description": "The source URI is the URI used to insert the image. The source URI can be empty."
-        },
-        "brightness": {
-          "format": "float",
-          "type": "number",
-          "description": "The brightness effect of the image. The value should be in the interval [-1.0, 1.0], where 0 means no effect."
-        }
-      },
-      "type": "object",
-      "id": "ImageProperties"
-    },
-    "Link": {
-      "description": "A reference to another portion of a document or an external URL resource.",
-      "type": "object",
-      "properties": {
-        "url": {
-          "type": "string",
-          "description": "An external URL."
-        },
-        "headingId": {
-          "type": "string",
-          "description": "The ID of a heading in this document."
-        },
-        "bookmarkId": {
-          "type": "string",
-          "description": "The ID of a bookmark in this document."
-        }
-      },
-      "id": "Link"
-    },
-    "Table": {
-      "properties": {
-        "suggestedDeletionIds": {
-          "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "columns": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Number of columns in the table. It is possible for a table to be non-rectangular, so some rows may have a different number of cells."
-        },
-        "rows": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Number of rows in the table."
-        },
-        "suggestedInsertionIds": {
-          "description": "The suggested insertion IDs. A Table may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "tableRows": {
-          "description": "The contents and style of each row.",
-          "type": "array",
-          "items": {
-            "$ref": "TableRow"
-          }
-        },
-        "tableStyle": {
-          "description": "The style of the table.",
-          "$ref": "TableStyle"
-        }
-      },
-      "type": "object",
-      "id": "Table",
-      "description": "A StructuralElement representing a table."
-    },
-    "SuggestedDocumentStyle": {
-      "properties": {
-        "documentStyle": {
-          "$ref": "DocumentStyle",
-          "description": "A DocumentStyle that only includes the changes made in this suggestion. This can be used along with the document_style_suggestion_state to see which fields have changed and their new values."
-        },
-        "documentStyleSuggestionState": {
-          "$ref": "DocumentStyleSuggestionState",
-          "description": "A mask that indicates which of the fields on the base DocumentStyle have been changed in this suggestion."
-        }
-      },
-      "type": "object",
-      "description": "A suggested change to the DocumentStyle.",
-      "id": "SuggestedDocumentStyle"
-    },
-    "Dimension": {
-      "id": "Dimension",
-      "properties": {
-        "unit": {
-          "enum": [
-            "UNIT_UNSPECIFIED",
-            "PT"
-          ],
-          "enumDescriptions": [
-            "The units are unknown.",
-            "A point, 1/72 of an inch."
-          ],
-          "type": "string",
-          "description": "The units for magnitude."
-        },
-        "magnitude": {
-          "format": "double",
-          "type": "number",
-          "description": "The magnitude."
-        }
-      },
-      "description": "A magnitude in a single direction in the specified units.",
-      "type": "object"
-    },
-    "TableCellLocation": {
-      "description": "Location of a single cell within a table.",
-      "properties": {
-        "rowIndex": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The zero-based row index. For example, the second row in the table has a row index of 1."
-        },
-        "tableStartLocation": {
-          "$ref": "Location",
-          "description": "The location where the table starts in the document."
-        },
-        "columnIndex": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The zero-based column index. For example, the second column in the table has a column index of 1."
-        }
-      },
-      "id": "TableCellLocation",
-      "type": "object"
-    },
-    "UpdateTextStyleRequest": {
-      "id": "UpdateTextStyleRequest",
-      "description": "Update the styling of text.",
-      "type": "object",
-      "properties": {
-        "fields": {
-          "description": "The fields that should be updated. At least one field must be specified. The root `text_style` is implied and should not be specified. A single `\"*\"` can be used as short-hand for listing every field. For example, to update the text style to bold, set `fields` to `\"bold\"`. To reset a property to its default value, include its field name in the field mask but leave the field itself unset.",
-          "type": "string",
-          "format": "google-fieldmask"
-        },
-        "textStyle": {
-          "$ref": "TextStyle",
-          "description": "The styles to set on the text. If the value for a particular style matches that of the parent, that style will be set to inherit. Certain text style changes may cause other changes in order to to mirror the behavior of the Docs editor. See the documentation of TextStyle for more information."
-        },
-        "range": {
-          "description": "The range of text to style. The range may be extended to include adjacent newlines. If the range fully contains a paragraph belonging to a list, the paragraph's bullet is also updated with the matching text style. Ranges cannot be inserted inside a relative UpdateTextStyleRequest.",
-          "$ref": "Range"
-        }
-      }
-    },
-    "InsertTextRequest": {
-      "id": "InsertTextRequest",
-      "type": "object",
-      "description": "Inserts text at the specified location.",
-      "properties": {
-        "location": {
-          "$ref": "Location",
-          "description": "Inserts the text at a specific index in the document. Text must be inserted inside the bounds of an existing Paragraph. For instance, text cannot be inserted at a table's start index (i.e. between the table and its preceding paragraph). The text must be inserted in the preceding paragraph."
-        },
-        "text": {
-          "type": "string",
-          "description": "The text to be inserted. Inserting a newline character will implicitly create a new Paragraph at that index. The paragraph style of the new paragraph will be copied from the paragraph at the current insertion index, including lists and bullets. Text styles for inserted text will be determined automatically, generally preserving the styling of neighboring text. In most cases, the text style for the inserted text will match the text immediately before the insertion index. Some control characters (U+0000-U+0008, U+000C-U+001F) and characters from the Unicode Basic Multilingual Plane Private Use Area (U+E000-U+F8FF) will be stripped out of the inserted text."
-        },
-        "endOfSegmentLocation": {
-          "$ref": "EndOfSegmentLocation",
-          "description": "Inserts the text at the end of a header, footer, footnote or the document body."
-        }
-      }
-    },
-    "Response": {
-      "type": "object",
-      "description": "A single response from an update.",
-      "id": "Response",
-      "properties": {
-        "replaceAllText": {
-          "description": "The result of replacing text.",
-          "$ref": "ReplaceAllTextResponse"
-        },
-        "createFooter": {
-          "$ref": "CreateFooterResponse",
-          "description": "The result of creating a footer."
-        },
-        "createFootnote": {
-          "$ref": "CreateFootnoteResponse",
-          "description": "The result of creating a footnote."
-        },
-        "insertInlineSheetsChart": {
-          "$ref": "InsertInlineSheetsChartResponse",
-          "description": "The result of inserting an inline Google Sheets chart."
-        },
-        "createHeader": {
-          "$ref": "CreateHeaderResponse",
-          "description": "The result of creating a header."
-        },
-        "insertInlineImage": {
-          "description": "The result of inserting an inline image.",
-          "$ref": "InsertInlineImageResponse"
-        },
-        "createNamedRange": {
-          "description": "The result of creating a named range.",
-          "$ref": "CreateNamedRangeResponse"
-        }
-      }
-    },
-    "SuggestedListProperties": {
-      "properties": {
-        "listProperties": {
-          "description": "A ListProperties that only includes the changes made in this suggestion. This can be used along with the list_properties_suggestion_state to see which fields have changed and their new values.",
-          "$ref": "ListProperties"
-        },
-        "listPropertiesSuggestionState": {
-          "description": "A mask that indicates which of the fields on the base ListProperties have been changed in this suggestion.",
-          "$ref": "ListPropertiesSuggestionState"
-        }
-      },
-      "description": "A suggested change to ListProperties.",
-      "id": "SuggestedListProperties",
-      "type": "object"
-    },
-    "EmbeddedDrawingPropertiesSuggestionState": {
-      "type": "object",
-      "properties": {},
-      "description": "A mask that indicates which of the fields on the base EmbeddedDrawingProperties have been changed in this suggestion. For any field set to true, there is a new suggested value.",
-      "id": "EmbeddedDrawingPropertiesSuggestionState"
-    },
-    "DeletePositionedObjectRequest": {
-      "id": "DeletePositionedObjectRequest",
-      "properties": {
-        "objectId": {
-          "type": "string",
-          "description": "The ID of the positioned object to delete."
-        }
-      },
-      "description": "Deletes a PositionedObject from the document.",
-      "type": "object"
-    },
-    "CreateHeaderResponse": {
-      "id": "CreateHeaderResponse",
-      "type": "object",
-      "properties": {
-        "headerId": {
-          "description": "The ID of the created header.",
-          "type": "string"
-        }
-      },
-      "description": "The result of creating a header."
-    },
-    "NamedStylesSuggestionState": {
-      "properties": {
-        "stylesSuggestionStates": {
-          "items": {
-            "$ref": "NamedStyleSuggestionState"
-          },
-          "description": "A mask that indicates which of the fields on the corresponding NamedStyle in styles have been changed in this suggestion. The order of these named style suggestion states match the order of the corresponding named style within the named styles suggestion.",
-          "type": "array"
-        }
-      },
-      "description": "The suggestion state of a NamedStyles message.",
-      "id": "NamedStylesSuggestionState",
-      "type": "object"
-    },
-    "SuggestedNamedStyles": {
-      "id": "SuggestedNamedStyles",
-      "properties": {
-        "namedStylesSuggestionState": {
-          "description": "A mask that indicates which of the fields on the base NamedStyles have been changed in this suggestion.",
-          "$ref": "NamedStylesSuggestionState"
-        },
-        "namedStyles": {
-          "$ref": "NamedStyles",
-          "description": "A NamedStyles that only includes the changes made in this suggestion. This can be used along with the named_styles_suggestion_state to see which fields have changed and their new values."
-        }
-      },
-      "type": "object",
-      "description": "A suggested change to the NamedStyles."
-    },
-    "TableRow": {
-      "id": "TableRow",
-      "description": "The contents and style of a row in a Table.",
-      "type": "object",
-      "properties": {
-        "tableRowStyle": {
-          "$ref": "TableRowStyle",
-          "description": "The style of the table row."
-        },
-        "suggestedDeletionIds": {
-          "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "suggestedInsertionIds": {
-          "items": {
-            "type": "string"
-          },
-          "description": "The suggested insertion IDs. A TableRow may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
-          "type": "array"
-        },
-        "suggestedTableRowStyleChanges": {
-          "description": "The suggested style changes to this row, keyed by suggestion ID.",
-          "type": "object",
-          "additionalProperties": {
-            "$ref": "SuggestedTableRowStyle"
-          }
-        },
-        "endIndex": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The zero-based end index of this row, exclusive, in UTF-16 code units."
-        },
-        "startIndex": {
-          "type": "integer",
-          "description": "The zero-based start index of this row, in UTF-16 code units.",
-          "format": "int32"
-        },
-        "tableCells": {
-          "items": {
-            "$ref": "TableCell"
-          },
-          "type": "array",
-          "description": "The contents and style of each cell in this row. It is possible for a table to be non-rectangular, so some rows may have a different number of cells than other rows in the same table."
-        }
-      }
-    },
-    "SuggestedBullet": {
-      "id": "SuggestedBullet",
-      "description": "A suggested change to a Bullet.",
-      "properties": {
-        "bulletSuggestionState": {
-          "$ref": "BulletSuggestionState",
-          "description": "A mask that indicates which of the fields on the base Bullet have been changed in this suggestion."
-        },
-        "bullet": {
-          "description": "A Bullet that only includes the changes made in this suggestion. This can be used along with the bullet_suggestion_state to see which fields have changed and their new values.",
-          "$ref": "Bullet"
-        }
-      },
-      "type": "object"
-    },
-    "List": {
-      "description": "A List represents the list attributes for a group of paragraphs that all belong to the same list. A paragraph that is part of a list has a reference to the list's ID in its bullet.",
-      "properties": {
-        "suggestedInsertionId": {
-          "description": "The suggested insertion ID. If empty, then this is not a suggested insertion.",
-          "type": "string"
-        },
-        "listProperties": {
-          "$ref": "ListProperties",
-          "description": "The properties of the list."
-        },
-        "suggestedListPropertiesChanges": {
-          "additionalProperties": {
-            "$ref": "SuggestedListProperties"
-          },
-          "description": "The suggested changes to the list properties, keyed by suggestion ID.",
-          "type": "object"
-        },
-        "suggestedDeletionIds": {
-          "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this list.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        }
-      },
-      "id": "List",
-      "type": "object"
-    },
-    "EndOfSegmentLocation": {
-      "description": "Location at the end of a body, header, footer or footnote. The location is immediately before the last newline in the document segment.",
-      "id": "EndOfSegmentLocation",
-      "type": "object",
-      "properties": {
-        "segmentId": {
-          "description": "The ID of the header, footer or footnote the location is in. An empty segment ID signifies the document's body.",
-          "type": "string"
-        }
-      }
-    },
-    "TableRowStyle": {
-      "description": "Styles that apply to a table row.",
-      "id": "TableRowStyle",
-      "type": "object",
-      "properties": {
-        "minRowHeight": {
-          "description": "The minimum height of the row. The row will be rendered in the Docs editor at a height equal to or greater than this value in order to show all the content in the row's cells.",
-          "$ref": "Dimension"
-        }
-      }
-    },
-    "SuggestedTableCellStyle": {
-      "properties": {
-        "tableCellStyleSuggestionState": {
-          "$ref": "TableCellStyleSuggestionState",
-          "description": "A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion."
-        },
-        "tableCellStyle": {
-          "$ref": "TableCellStyle",
-          "description": "A TableCellStyle that only includes the changes made in this suggestion. This can be used along with the table_cell_style_suggestion_state to see which fields have changed and their new values."
-        }
-      },
-      "type": "object",
-      "description": "A suggested change to a TableCellStyle.",
-      "id": "SuggestedTableCellStyle"
-    },
-    "StructuralElement": {
-      "properties": {
-        "paragraph": {
-          "$ref": "Paragraph",
-          "description": "A paragraph type of structural element."
-        },
-        "table": {
-          "$ref": "Table",
-          "description": "A table type of structural element."
-        },
-        "sectionBreak": {
-          "$ref": "SectionBreak",
-          "description": "A section break type of structural element."
-        },
-        "startIndex": {
-          "format": "int32",
-          "description": "The zero-based start index of this structural element, in UTF-16 code units.",
-          "type": "integer"
-        },
-        "tableOfContents": {
-          "description": "A table of contents type of structural element.",
-          "$ref": "TableOfContents"
-        },
-        "endIndex": {
-          "type": "integer",
-          "description": "The zero-based end index of this structural element, exclusive, in UTF-16 code units.",
-          "format": "int32"
-        }
-      },
-      "id": "StructuralElement",
-      "description": "A StructuralElement describes content that provides structure to the document.",
-      "type": "object"
-    },
-    "TextStyle": {
-      "id": "TextStyle",
-      "properties": {
-        "smallCaps": {
-          "description": "Whether or not the text is in small capital letters.",
-          "type": "boolean"
-        },
-        "foregroundColor": {
-          "$ref": "OptionalColor",
-          "description": "The foreground color of the text. If set, the color is either an RGB color or transparent, depending on the `color` field."
-        },
-        "backgroundColor": {
-          "description": "The background color of the text. If set, the color is either an RGB color or transparent, depending on the `color` field.",
-          "$ref": "OptionalColor"
-        },
-        "bold": {
-          "type": "boolean",
-          "description": "Whether or not the text is rendered as bold."
-        },
-        "underline": {
-          "description": "Whether or not the text is underlined.",
-          "type": "boolean"
-        },
-        "strikethrough": {
-          "description": "Whether or not the text is struck through.",
-          "type": "boolean"
-        },
-        "weightedFontFamily": {
-          "description": "The font family and rendered weight of the text. If an update request specifies values for both `weighted_font_family` and `bold`, the `weighted_font_family` is applied first, then `bold`. If `weighted_font_family#weight` is not set, it defaults to `400`. If `weighted_font_family` is set, then `weighted_font_family#font_family` must also be set with a non-empty value. Otherwise, a 400 bad request error is returned.",
-          "$ref": "WeightedFontFamily"
-        },
-        "fontSize": {
-          "$ref": "Dimension",
-          "description": "The size of the text's font."
-        },
-        "link": {
-          "$ref": "Link",
-          "description": "The hyperlink destination of the text. If unset, there is no link. Links are not inherited from parent text. Changing the link in an update request causes some other changes to the text style of the range: * When setting a link, the text foreground color will be updated to the default link color and the text will be underlined. If these fields are modified in the same request, those values will be used instead of the link defaults. * Setting a link on a text range that overlaps with an existing link will also update the existing link to point to the new URL. * Links are not settable on newline characters. As a result, setting a link on a text range that crosses a paragraph boundary, such as `\"ABC\\n123\"`, will separate the newline character(s) into their own text runs. The link will be applied separately to the runs before and after the newline. * Removing a link will update the text style of the range to match the style of the preceding text (or the default text styles if the preceding text is another link) unless different styles are being set in the same request."
-        },
-        "italic": {
-          "description": "Whether or not the text is italicized.",
-          "type": "boolean"
-        },
-        "baselineOffset": {
-          "type": "string",
-          "description": "The text's vertical offset from its normal position. Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically rendered in a smaller font size, computed based on the `font_size` field. The `font_size` itself is not affected by changes in this field.",
-          "enumDescriptions": [
-            "The text's baseline offset is inherited from the parent.",
-            "The text is not vertically offset.",
-            "The text is vertically offset upwards (superscript).",
-            "The text is vertically offset downwards (subscript)."
-          ],
-          "enum": [
-            "BASELINE_OFFSET_UNSPECIFIED",
-            "NONE",
-            "SUPERSCRIPT",
-            "SUBSCRIPT"
-          ]
-        }
-      },
-      "type": "object",
-      "description": "Represents the styling that can be applied to text. Inherited text styles are represented as unset fields in this message. A text style's parent depends on where the text style is defined: * The TextStyle of text in a Paragraph inherits from the paragraph's corresponding named style type. * The TextStyle on a named style inherits from the normal text named style. * The TextStyle of the normal text named style inherits from the default text style in the Docs editor. * The TextStyle on a Paragraph element that is contained in a table may inherit its text style from the table style. If the text style does not inherit from a parent, unsetting fields will revert the style to a value matching the defaults in the Docs editor."
-    },
-    "CreateParagraphBulletsRequest": {
-      "description": "Creates bullets for all of the paragraphs that overlap with the given range. The nesting level of each paragraph will be determined by counting leading tabs in front of each paragraph. To avoid excess space between the bullet and the corresponding paragraph, these leading tabs are removed by this request. This may change the indices of parts of the text. If the paragraph immediately before paragraphs being updated is in a list with a matching preset, the paragraphs being updated are added to that preceding list.",
-      "properties": {
-        "bulletPreset": {
-          "description": "The kinds of bullet glyphs to be used.",
-          "type": "string",
-          "enumDescriptions": [
-            "The bullet glyph preset is unspecified.",
-            "A bulleted list with a `DISC`, `CIRCLE` and `SQUARE` bullet glyph for the first 3 list nesting levels.",
-            "A bulleted list with a `DIAMONDX`, `ARROW3D` and `SQUARE` bullet glyph for the first 3 list nesting levels.",
-            "A bulleted list with `CHECKBOX` bullet glyphs for all list nesting levels.",
-            "A bulleted list with a `ARROW`, `DIAMOND` and `DISC` bullet glyph for the first 3 list nesting levels.",
-            "A bulleted list with a `STAR`, `CIRCLE` and `SQUARE` bullet glyph for the first 3 list nesting levels.",
-            "A bulleted list with a `ARROW3D`, `CIRCLE` and `SQUARE` bullet glyph for the first 3 list nesting levels.",
-            "A bulleted list with a `LEFTTRIANGLE`, `DIAMOND` and `DISC` bullet glyph for the first 3 list nesting levels.",
-            "A bulleted list with a `DIAMONDX`, `HOLLOWDIAMOND` and `SQUARE` bullet glyph for the first 3 list nesting levels.",
-            "A bulleted list with a `DIAMOND`, `CIRCLE` and `SQUARE` bullet glyph for the first 3 list nesting levels.",
-            "A numbered list with `DECIMAL`, `ALPHA` and `ROMAN` numeric glyphs for the first 3 list nesting levels, followed by periods.",
-            "A numbered list with `DECIMAL`, `ALPHA` and `ROMAN` numeric glyphs for the first 3 list nesting levels, followed by parenthesis.",
-            "A numbered list with `DECIMAL` numeric glyphs separated by periods, where each nesting level uses the previous nesting level's glyph as a prefix. For example: '1.', '1.1.', '2.', '2.2.'.",
-            "A numbered list with `UPPERALPHA`, `ALPHA` and `ROMAN` numeric glyphs for the first 3 list nesting levels, followed by periods.",
-            "A numbered list with `UPPERROMAN`, `UPPERALPHA` and `DECIMAL` numeric glyphs for the first 3 list nesting levels, followed by periods.",
-            "A numbered list with `ZERODECIMAL`, `ALPHA` and `ROMAN` numeric glyphs for the first 3 list nesting levels, followed by periods."
-          ],
-          "enum": [
-            "BULLET_GLYPH_PRESET_UNSPECIFIED",
-            "BULLET_DISC_CIRCLE_SQUARE",
-            "BULLET_DIAMONDX_ARROW3D_SQUARE",
-            "BULLET_CHECKBOX",
-            "BULLET_ARROW_DIAMOND_DISC",
-            "BULLET_STAR_CIRCLE_SQUARE",
-            "BULLET_ARROW3D_CIRCLE_SQUARE",
-            "BULLET_LEFTTRIANGLE_DIAMOND_DISC",
-            "BULLET_DIAMONDX_HOLLOWDIAMOND_SQUARE",
-            "BULLET_DIAMOND_CIRCLE_SQUARE",
-            "NUMBERED_DECIMAL_ALPHA_ROMAN",
-            "NUMBERED_DECIMAL_ALPHA_ROMAN_PARENS",
-            "NUMBERED_DECIMAL_NESTED",
-            "NUMBERED_UPPERALPHA_ALPHA_ROMAN",
-            "NUMBERED_UPPERROMAN_UPPERALPHA_DECIMAL",
-            "NUMBERED_ZERODECIMAL_ALPHA_ROMAN"
-          ]
-        },
-        "range": {
-          "description": "The range to apply the bullet preset to.",
-          "$ref": "Range"
-        }
-      },
-      "id": "CreateParagraphBulletsRequest",
-      "type": "object"
-    },
-    "LinkedContentReferenceSuggestionState": {
-      "id": "LinkedContentReferenceSuggestionState",
-      "type": "object",
-      "properties": {
-        "sheetsChartReferenceSuggestionState": {
-          "$ref": "SheetsChartReferenceSuggestionState",
-          "description": "A mask that indicates which of the fields in sheets_chart_reference have been changed in this suggestion."
-        }
-      },
-      "description": "A mask that indicates which of the fields on the base LinkedContentReference have been changed in this suggestion. For any field set to true, there is a new suggested value."
-    },
-    "InsertInlineSheetsChartResponse": {
-      "description": "The result of inserting an embedded Google Sheets chart.",
-      "properties": {
-        "objectId": {
-          "type": "string",
-          "description": "The object ID of the inserted chart."
-        }
-      },
-      "id": "InsertInlineSheetsChartResponse",
-      "type": "object"
-    },
-    "HorizontalRule": {
-      "properties": {
-        "suggestedDeletionIds": {
-          "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "textStyle": {
-          "description": "The text style of this HorizontalRule. Similar to text content, like text runs and footnote references, the text style of a horizontal rule can affect content layout as well as the styling of text inserted adjacent to it.",
-          "$ref": "TextStyle"
-        },
-        "suggestedInsertionIds": {
-          "type": "array",
-          "description": "The suggested insertion IDs. A HorizontalRule may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
-          "items": {
-            "type": "string"
-          }
-        },
-        "suggestedTextStyleChanges": {
-          "additionalProperties": {
-            "$ref": "SuggestedTextStyle"
-          },
-          "description": "The suggested text style changes to this HorizontalRule, keyed by suggestion ID.",
-          "type": "object"
-        }
-      },
-      "description": "A ParagraphElement representing a horizontal line.",
-      "id": "HorizontalRule",
-      "type": "object"
-    },
-    "InsertTableRequest": {
-      "type": "object",
-      "id": "InsertTableRequest",
-      "properties": {
-        "endOfSegmentLocation": {
-          "description": "Inserts the table at the end of the given header, footer or document body. A newline character will be inserted before the inserted table. Tables cannot be inserted inside a footnote.",
-          "$ref": "EndOfSegmentLocation"
-        },
-        "location": {
-          "$ref": "Location",
-          "description": "Inserts the table at a specific model index. A newline character will be inserted before the inserted table, therefore the table start index will be at the specified location index + 1. The table must be inserted inside the bounds of an existing Paragraph. For instance, it cannot be inserted at a table's start index (i.e. between an existing table and its preceding paragraph). Tables cannot be inserted inside a footnote or equation."
-        },
-        "columns": {
-          "description": "The number of columns in the table.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "rows": {
-          "format": "int32",
-          "description": "The number of rows in the table.",
-          "type": "integer"
-        }
-      },
-      "description": "Inserts a table at the specified location. A newline character will be inserted before the inserted table."
-    },
-    "PositionedObjectPositioning": {
-      "description": "The positioning of a PositionedObject. The positioned object is positioned relative to the beginning of the Paragraph it is tethered to.",
-      "id": "PositionedObjectPositioning",
-      "type": "object",
-      "properties": {
-        "layout": {
-          "description": "The layout of this positioned object.",
-          "type": "string",
-          "enum": [
-            "POSITIONED_OBJECT_LAYOUT_UNSPECIFIED",
-            "WRAP_TEXT",
-            "BREAK_LEFT",
-            "BREAK_RIGHT",
-            "BREAK_LEFT_RIGHT",
-            "IN_FRONT_OF_TEXT"
-          ],
-          "enumDescriptions": [
-            "The layout is unspecified.",
-            "The text wraps around the positioned object.",
-            "Breaks text such that the positioned object is on the left and text is on the right.",
-            "Breaks text such that the positioned object is on the right and text is on the left.",
-            "Breaks text such that there is no text on the left or right of the positioned object.",
-            "The positioned object is in front of the text."
-          ]
-        },
-        "leftOffset": {
-          "description": "The offset of the left edge of the positioned object relative to the beginning of the Paragraph it is tethered to. The exact positioning of the object can depend on other content in the document and the document's styling.",
-          "$ref": "Dimension"
-        },
-        "topOffset": {
-          "$ref": "Dimension",
-          "description": "The offset of the top edge of the positioned object relative to the beginning of the Paragraph it is tethered to. The exact positioning of the object can depend on other content in the document and the document's styling."
-        }
-      }
-    },
-    "InsertPageBreakRequest": {
-      "type": "object",
-      "properties": {
-        "location": {
-          "$ref": "Location",
-          "description": "Inserts the page break at a specific index in the document. The page break must be inserted inside the bounds of an existing Paragraph. For instance, it cannot be inserted at a table's start index (i.e. between the table and its preceding paragraph). Page breaks cannot be inserted inside a table, equation, footnote, header or footer. Since page breaks can only be inserted inside the body, the segment ID field must be empty."
-        },
-        "endOfSegmentLocation": {
-          "$ref": "EndOfSegmentLocation",
-          "description": "Inserts the page break at the end of the document body. Page breaks cannot be inserted inside a footnote, header or footer. Since page breaks can only be inserted inside the body, the segment ID field must be empty."
-        }
-      },
-      "id": "InsertPageBreakRequest",
-      "description": "Inserts a page break followed by a newline at the specified location."
-    },
-    "EmbeddedObjectSuggestionState": {
-      "type": "object",
-      "id": "EmbeddedObjectSuggestionState",
-      "properties": {
-        "marginBottomSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to margin_bottom."
-        },
-        "marginRightSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to margin_right."
-        },
-        "descriptionSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to description."
-        },
-        "sizeSuggestionState": {
-          "$ref": "SizeSuggestionState",
-          "description": "A mask that indicates which of the fields in size have been changed in this suggestion."
-        },
-        "imagePropertiesSuggestionState": {
-          "description": "A mask that indicates which of the fields in image_properties have been changed in this suggestion.",
-          "$ref": "ImagePropertiesSuggestionState"
-        },
-        "titleSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to title."
-        },
-        "marginLeftSuggested": {
-          "description": "Indicates if there was a suggested change to margin_left.",
-          "type": "boolean"
-        },
-        "linkedContentReferenceSuggestionState": {
-          "$ref": "LinkedContentReferenceSuggestionState",
-          "description": "A mask that indicates which of the fields in linked_content_reference have been changed in this suggestion."
-        },
-        "marginTopSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to margin_top."
-        },
-        "embeddedObjectBorderSuggestionState": {
-          "description": "A mask that indicates which of the fields in embedded_object_border have been changed in this suggestion.",
-          "$ref": "EmbeddedObjectBorderSuggestionState"
-        },
-        "embeddedDrawingPropertiesSuggestionState": {
-          "$ref": "EmbeddedDrawingPropertiesSuggestionState",
-          "description": "A mask that indicates which of the fields in embedded_drawing_properties have been changed in this suggestion."
-        }
-      },
-      "description": "A mask that indicates which of the fields on the base EmbeddedObject have been changed in this suggestion. For any field set to true, there is a new suggested value."
-    },
-    "EmbeddedObjectBorder": {
-      "type": "object",
-      "description": "A border around an EmbeddedObject.",
-      "properties": {
-        "propertyState": {
-          "enumDescriptions": [
-            "If a property's state is RENDERED, then the element has the corresponding property when rendered in the document. This is the default value.",
-            "If a property's state is NOT_RENDERED, then the element does not have the corresponding property when rendered in the document."
-          ],
-          "description": "The property state of the border property.",
-          "type": "string",
-          "enum": [
-            "RENDERED",
-            "NOT_RENDERED"
-          ]
-        },
-        "color": {
-          "description": "The color of the border.",
-          "$ref": "OptionalColor"
-        },
-        "width": {
-          "$ref": "Dimension",
-          "description": "The width of the border."
-        },
-        "dashStyle": {
-          "type": "string",
-          "enumDescriptions": [
-            "Unspecified dash style.",
-            "Solid line. Corresponds to ECMA-376 ST_PresetLineDashVal value 'solid'. This is the default dash style.",
-            "Dotted line. Corresponds to ECMA-376 ST_PresetLineDashVal value 'dot'.",
-            "Dashed line. Corresponds to ECMA-376 ST_PresetLineDashVal value 'dash'."
-          ],
-          "enum": [
-            "DASH_STYLE_UNSPECIFIED",
-            "SOLID",
-            "DOT",
-            "DASH"
-          ],
-          "description": "The dash style of the border."
-        }
-      },
-      "id": "EmbeddedObjectBorder"
-    },
-    "Footnote": {
-      "id": "Footnote",
-      "type": "object",
-      "properties": {
-        "footnoteId": {
-          "description": "The ID of the footnote.",
-          "type": "string"
-        },
-        "content": {
-          "description": "The contents of the footnote. The indexes for a footnote's content begin at zero.",
-          "items": {
-            "$ref": "StructuralElement"
-          },
-          "type": "array"
-        }
-      },
-      "description": "A document footnote."
-    },
-    "SuggestedPositionedObjectProperties": {
-      "properties": {
-        "positionedObjectProperties": {
-          "$ref": "PositionedObjectProperties",
-          "description": "A PositionedObjectProperties that only includes the changes made in this suggestion. This can be used along with the positioned_object_properties_suggestion_state to see which fields have changed and their new values."
-        },
-        "positionedObjectPropertiesSuggestionState": {
-          "$ref": "PositionedObjectPropertiesSuggestionState",
-          "description": "A mask that indicates which of the fields on the base PositionedObjectProperties have been changed in this suggestion."
-        }
-      },
-      "description": "A suggested change to PositionedObjectProperties.",
-      "id": "SuggestedPositionedObjectProperties",
-      "type": "object"
-    },
-    "SuggestedParagraphStyle": {
-      "id": "SuggestedParagraphStyle",
-      "type": "object",
-      "properties": {
-        "paragraphStyleSuggestionState": {
-          "$ref": "ParagraphStyleSuggestionState",
-          "description": "A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion."
-        },
-        "paragraphStyle": {
-          "$ref": "ParagraphStyle",
-          "description": "A ParagraphStyle that only includes the changes made in this suggestion. This can be used along with the paragraph_suggestion_state to see which fields have changed and their new values."
-        }
-      },
-      "description": "A suggested change to a ParagraphStyle."
-    },
-    "Location": {
-      "description": "A particular location in the document.",
-      "id": "Location",
-      "properties": {
-        "segmentId": {
-          "type": "string",
-          "description": "The ID of the header, footer or footnote the location is in. An empty segment ID signifies the document's body."
-        },
-        "index": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The zero-based index, in UTF-16 code units. The index is relative to the beginning of the segment specified by segment_id."
-        }
-      },
-      "type": "object"
-    },
-    "InsertTableColumnRequest": {
-      "type": "object",
-      "description": "Inserts an empty column into a table.",
-      "id": "InsertTableColumnRequest",
-      "properties": {
-        "tableCellLocation": {
-          "description": "The reference table cell location from which columns will be inserted. A new column will be inserted to the left (or right) of the column where the reference cell is. If the reference cell is a merged cell, a new column will be inserted to the left (or right) of the merged cell.",
-          "$ref": "TableCellLocation"
-        },
-        "insertRight": {
-          "description": "Whether to insert new column to the right of the reference cell location. - `True`: insert to the right. - `False`: insert to the left.",
-          "type": "boolean"
-        }
-      }
-    },
-    "WeightedFontFamily": {
-      "description": "Represents a font family and weight of text.",
-      "id": "WeightedFontFamily",
-      "type": "object",
-      "properties": {
-        "weight": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The weight of the font. This field can have any value that is a multiple of `100` between `100` and `900`, inclusive. This range corresponds to the numerical values described in the CSS 2.1 Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness), with non-numerical values disallowed. The default value is `400` (\"normal\"). The font weight makes up just one component of the rendered font weight. The rendered weight is determined by a combination of the `weight` and the text style's resolved `bold` value, after accounting for inheritance: * If the text is bold and the weight is less than `400`, the rendered weight is 400. * If the text is bold and the weight is greater than or equal to `400` but is less than `700`, the rendered weight is `700`. * If the weight is greater than or equal to `700`, the rendered weight is equal to the weight. * If the text is not bold, the rendered weight is equal to the weight."
-        },
-        "fontFamily": {
-          "description": "The font family of the text. The font family can be any font from the Font menu in Docs or from [Google Fonts] (https://fonts.google.com/). If the font name is unrecognized, the text is rendered in `Arial`.",
-          "type": "string"
-        }
-      }
-    },
-    "DocumentStyle": {
-      "properties": {
-        "useCustomHeaderFooterMargins": {
-          "description": "Indicates whether DocumentStyle margin_header, SectionStyle margin_header and DocumentStyle margin_footer, SectionStyle margin_footer are respected. When false, the default values in the Docs editor for header and footer margin are used. This property is read-only.",
-          "type": "boolean"
-        },
-        "firstPageHeaderId": {
-          "type": "string",
-          "description": "The ID of the header used only for the first page. If not set then a unique header for the first page does not exist. The value of use_first_page_header_footer determines whether to use the default_header_id or this value for the header on the first page. If not set, there is no first page header. This property is read-only."
-        },
-        "pageSize": {
-          "description": "The size of a page in the document.",
-          "$ref": "Size"
-        },
-        "evenPageFooterId": {
-          "type": "string",
-          "description": "The ID of the footer used only for even pages. The value of use_even_page_header_footer determines whether to use the default_footer_id or this value for the footer on even pages. If not set, there is no even page footer. This property is read-only."
-        },
-        "defaultHeaderId": {
-          "description": "The ID of the default header. If not set, there is no default header. This property is read-only.",
-          "type": "string"
-        },
-        "marginHeader": {
-          "$ref": "Dimension",
-          "description": "The amount of space between the top of the page and the contents of the header."
-        },
-        "marginTop": {
-          "description": "The top page margin. Updating the top page margin on the document style clears the top page margin on all section styles.",
-          "$ref": "Dimension"
-        },
-        "marginFooter": {
-          "$ref": "Dimension",
-          "description": "The amount of space between the bottom of the page and the contents of the footer."
-        },
-        "background": {
-          "$ref": "Background",
-          "description": "The background of the document. Documents cannot have a transparent background color."
-        },
-        "marginRight": {
-          "$ref": "Dimension",
-          "description": "The right page margin. Updating the right page margin on the document style clears the right page margin on all section styles. It may also cause columns to resize in all sections."
-        },
-        "defaultFooterId": {
-          "description": "The ID of the default footer. If not set, there is no default footer. This property is read-only.",
-          "type": "string"
-        },
-        "evenPageHeaderId": {
-          "type": "string",
-          "description": "The ID of the header used only for even pages. The value of use_even_page_header_footer determines whether to use the default_header_id or this value for the header on even pages. If not set, there is no even page header. This property is read-only."
-        },
-        "marginLeft": {
-          "$ref": "Dimension",
-          "description": "The left page margin. Updating the left page margin on the document style clears the left page margin on all section styles. It may also cause columns to resize in all sections."
-        },
-        "useEvenPageHeaderFooter": {
-          "type": "boolean",
-          "description": "Indicates whether to use the even page header / footer IDs for the even pages."
-        },
-        "marginBottom": {
-          "description": "The bottom page margin. Updating the bottom page margin on the document style clears the bottom page margin on all section styles.",
-          "$ref": "Dimension"
-        },
-        "firstPageFooterId": {
-          "description": "The ID of the footer used only for the first page. If not set then a unique footer for the first page does not exist. The value of use_first_page_header_footer determines whether to use the default_footer_id or this value for the footer on the first page. If not set, there is no first page footer. This property is read-only.",
-          "type": "string"
-        },
-        "pageNumberStart": {
-          "description": "The page number from which to start counting the number of pages.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "useFirstPageHeaderFooter": {
-          "type": "boolean",
-          "description": "Indicates whether to use the first page header / footer IDs for the first page."
-        }
-      },
-      "id": "DocumentStyle",
-      "description": "The style of the document.",
-      "type": "object"
-    },
-    "NestingLevel": {
-      "id": "NestingLevel",
-      "description": "Contains properties describing the look and feel of a list bullet at a given level of nesting.",
-      "properties": {
-        "textStyle": {
-          "description": "The text style of bullets at this level of nesting.",
-          "$ref": "TextStyle"
-        },
-        "bulletAlignment": {
-          "enum": [
-            "BULLET_ALIGNMENT_UNSPECIFIED",
-            "START",
-            "CENTER",
-            "END"
-          ],
-          "enumDescriptions": [
-            "The bullet alignment is unspecified.",
-            "The bullet is aligned to the start of the space allotted for rendering the bullet. Left-aligned for LTR text, right-aligned otherwise.",
-            "The bullet is aligned to the center of the space allotted for rendering the bullet.",
-            "The bullet is aligned to the end of the space allotted for rendering the bullet. Right-aligned for LTR text, left-aligned otherwise."
-          ],
-          "type": "string",
-          "description": "The alignment of the bullet within the space allotted for rendering the bullet."
-        },
-        "indentStart": {
-          "description": "The amount of indentation for paragraphs at this level of nesting. Applied to the side that corresponds to the start of the text, based on the paragraph's content direction.",
-          "$ref": "Dimension"
-        },
-        "glyphFormat": {
-          "description": "The format string used by bullets at this level of nesting. The glyph format contains one or more placeholders, and these placeholder are replaced with the appropriate values depending on the glyph_type or glyph_symbol. The placeholders follow the pattern `%[nesting_level]`. Furthermore, placeholders can have prefixes and suffixes. Thus, the glyph format follows the pattern `%[nesting_level]`. Note that the prefix and suffix are optional and can be arbitrary strings. For example, the glyph format `%0.` indicates that the rendered glyph will replace the placeholder with the corresponding glyph for nesting level 0 followed by a period as the suffix. So a list with a glyph type of UPPER_ALPHA and glyph format `%0.` at nesting level 0 will result in a list with rendered glyphs `A.` `B.` `C.` The glyph format can contain placeholders for the current nesting level as well as placeholders for parent nesting levels. For example, a list can have a glyph format of `%0.` at nesting level 0 and a glyph format of `%0.%1.` at nesting level 1. Assuming both nesting levels have DECIMAL glyph types, this would result in a list with rendered glyphs `1.` `2.` ` 2.1.` ` 2.2.` `3.` For nesting levels that are ordered, the string that replaces a placeholder in the glyph format for a particular paragraph depends on the paragraph's order within the list.",
-          "type": "string"
-        },
-        "startNumber": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The number of the first list item at this nesting level. A value of 0 is treated as a value of 1 for lettered lists and roman numeraled lists, i.e. for values of both 0 and 1, lettered and roman numeraled lists will begin at `a` and `i` respectively. This value is ignored for nesting levels with unordered glyphs."
-        },
-        "glyphType": {
-          "type": "string",
-          "description": "The type of glyph used by bullets when paragraphs at this level of nesting are ordered. The glyph type determines the type of glyph used to replace placeholders within the glyph_format when paragraphs at this level of nesting are ordered. For example, if the nesting level is 0, the glyph_format is `%0.` and the glyph type is DECIMAL, then the rendered glyph would replace the placeholder `%0` in the glyph format with a number corresponding to list item's order within the list.",
-          "enum": [
-            "GLYPH_TYPE_UNSPECIFIED",
-            "NONE",
-            "DECIMAL",
-            "ZERO_DECIMAL",
-            "UPPER_ALPHA",
-            "ALPHA",
-            "UPPER_ROMAN",
-            "ROMAN"
-          ],
-          "enumDescriptions": [
-            "The glyph type is unspecified or unsupported.",
-            "An empty string.",
-            "A number, like `1`, `2`, or `3`.",
-            "A number where single digit numbers are prefixed with a zero, like `01`, `02`, or `03`. Numbers with more than one digit are not prefixed with a zero.",
-            "An uppercase letter, like `A`, `B`, or `C`.",
-            "A lowercase letter, like `a`, `b`, or `c`.",
-            "An uppercase Roman numeral, like `I`, `II`, or `III`.",
-            "A lowercase Roman numeral, like `i`, `ii`, or `iii`."
-          ]
-        },
-        "glyphSymbol": {
-          "type": "string",
-          "description": "A custom glyph symbol used by bullets when paragraphs at this level of nesting are unordered. The glyph symbol replaces placeholders within the glyph_format. For example, if the glyph_symbol is the solid circle corresponding to Unicode U+25cf code point and the glyph_format is `%0`, the rendered glyph would be the solid circle."
-        },
-        "indentFirstLine": {
-          "description": "The amount of indentation for the first line of paragraphs at this level of nesting.",
-          "$ref": "Dimension"
-        }
-      },
-      "type": "object"
-    },
-    "ListProperties": {
-      "description": "The properties of a list which describe the look and feel of bullets belonging to paragraphs associated with a list.",
-      "properties": {
-        "nestingLevels": {
-          "description": "Describes the properties of the bullets at the associated level. A list has at most nine levels of nesting with nesting level 0 corresponding to the top-most level and nesting level 8 corresponding to the most nested level. The nesting levels are returned in ascending order with the least nested returned first.",
-          "type": "array",
-          "items": {
-            "$ref": "NestingLevel"
-          }
-        }
-      },
-      "id": "ListProperties",
-      "type": "object"
-    },
-    "UpdateTableRowStyleRequest": {
-      "id": "UpdateTableRowStyleRequest",
-      "type": "object",
-      "properties": {
-        "tableStartLocation": {
-          "$ref": "Location",
-          "description": "The location where the table starts in the document."
-        },
-        "fields": {
-          "format": "google-fieldmask",
-          "description": "The fields that should be updated. At least one field must be specified. The root `tableRowStyle` is implied and should not be specified. A single `\"*\"` can be used as short-hand for listing every field. For example to update the minimum row height, set `fields` to `\"min_row_height\"`.",
-          "type": "string"
-        },
-        "rowIndices": {
-          "type": "array",
-          "description": "The list of zero-based row indices whose style should be updated. If no indices are specified, all rows will be updated.",
-          "items": {
-            "type": "integer",
-            "format": "int32"
-          }
-        },
-        "tableRowStyle": {
-          "description": "The styles to be set on the rows.",
-          "$ref": "TableRowStyle"
-        }
-      },
-      "description": "Updates the TableRowStyle of rows in a table."
-    },
-    "SheetsChartReferenceSuggestionState": {
-      "description": "A mask that indicates which of the fields on the base SheetsChartReference have been changed in this suggestion. For any field set to true, there is a new suggested value.",
-      "properties": {
-        "chartIdSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to chart_id."
-        },
-        "spreadsheetIdSuggested": {
-          "description": "Indicates if there was a suggested change to spreadsheet_id.",
-          "type": "boolean"
-        }
-      },
-      "id": "SheetsChartReferenceSuggestionState",
-      "type": "object"
-    },
-    "CreateHeaderRequest": {
-      "properties": {
-        "sectionBreakLocation": {
-          "$ref": "Location",
-          "description": "The location of the SectionBreak which begins the section this header should belong to. If `section_break_location' is unset or if it refers to the first section break in the document body, the header applies to the DocumentStyle"
-        },
-        "type": {
-          "enumDescriptions": [
-            "The header/footer type is unspecified.",
-            "A default header/footer."
-          ],
-          "enum": [
-            "HEADER_FOOTER_TYPE_UNSPECIFIED",
-            "DEFAULT"
-          ],
-          "description": "The type of header to create.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Creates a Header. The new header is applied to the SectionStyle at the location of the SectionBreak if specificed, otherwise it is applied to the DocumentStyle. If a header of the specified type already exists, a 400 bad request error is returned.",
-      "id": "CreateHeaderRequest"
-    },
-    "TableStyle": {
-      "description": "Styles that apply to a table.",
-      "id": "TableStyle",
-      "properties": {
-        "tableColumnProperties": {
-          "description": "The properties of each column. Note that in Docs, tables contain rows and rows contain cells, similar to HTML. So the properties for a row can be found on the row's table_row_style.",
-          "type": "array",
-          "items": {
-            "$ref": "TableColumnProperties"
-          }
-        }
-      },
-      "type": "object"
-    },
-    "BackgroundSuggestionState": {
-      "type": "object",
-      "properties": {
-        "backgroundColorSuggested": {
-          "type": "boolean",
-          "description": "Indicates whether the current background color has been modified in this suggestion."
-        }
-      },
-      "description": "A mask that indicates which of the fields on the base Background have been changed in this suggestion. For any field set to true, the Backgound has a new suggested value.",
-      "id": "BackgroundSuggestionState"
-    },
-    "PositionedObjectPropertiesSuggestionState": {
-      "properties": {
-        "embeddedObjectSuggestionState": {
-          "description": "A mask that indicates which of the fields in embedded_object have been changed in this suggestion.",
-          "$ref": "EmbeddedObjectSuggestionState"
-        },
-        "positioningSuggestionState": {
-          "$ref": "PositionedObjectPositioningSuggestionState",
-          "description": "A mask that indicates which of the fields in positioning have been changed in this suggestion."
-        }
-      },
-      "type": "object",
-      "description": "A mask that indicates which of the fields on the base PositionedObjectProperties have been changed in this suggestion. For any field set to true, there is a new suggested value.",
-      "id": "PositionedObjectPropertiesSuggestionState"
-    },
-    "Document": {
-      "type": "object",
-      "description": "A Google Docs document.",
-      "properties": {
-        "documentId": {
-          "description": "Output only. The ID of the document.",
-          "type": "string"
-        },
-        "namedStyles": {
-          "description": "Output only. The named styles of the document.",
-          "$ref": "NamedStyles"
-        },
-        "revisionId": {
-          "description": "Output only. The revision ID of the document. Can be used in update requests to specify which revision of a document to apply updates to and how the request should behave if the document has been edited since that revision. Only populated if the user has edit access to the document. The format of the revision ID may change over time, so it should be treated opaquely. A returned revision ID is only guaranteed to be valid for 24 hours after it has been returned and cannot be shared across users. If the revision ID is unchanged between calls, then the document has not changed. Conversely, a changed ID (for the same document and user) usually means the document has been updated; however, a changed ID can also be due to internal factors such as ID format changes.",
-          "type": "string"
-        },
-        "namedRanges": {
-          "additionalProperties": {
-            "$ref": "NamedRanges"
-          },
-          "description": "Output only. The named ranges in the document, keyed by name.",
-          "type": "object"
-        },
-        "suggestedNamedStylesChanges": {
-          "additionalProperties": {
-            "$ref": "SuggestedNamedStyles"
-          },
-          "description": "Output only. The suggested changes to the named styles of the document, keyed by suggestion ID.",
-          "type": "object"
-        },
-        "footers": {
-          "additionalProperties": {
-            "$ref": "Footer"
-          },
-          "description": "Output only. The footers in the document, keyed by footer ID.",
-          "type": "object"
-        },
-        "headers": {
-          "additionalProperties": {
-            "$ref": "Header"
-          },
-          "description": "Output only. The headers in the document, keyed by header ID.",
-          "type": "object"
-        },
-        "title": {
-          "description": "The title of the document.",
-          "type": "string"
-        },
-        "suggestionsViewMode": {
-          "type": "string",
-          "enum": [
-            "DEFAULT_FOR_CURRENT_ACCESS",
-            "SUGGESTIONS_INLINE",
-            "PREVIEW_SUGGESTIONS_ACCEPTED",
-            "PREVIEW_WITHOUT_SUGGESTIONS"
-          ],
-          "description": "Output only. The suggestions view mode applied to the document. Note: When editing a document, changes must be based on a document with SUGGESTIONS_INLINE.",
-          "enumDescriptions": [
-            "The SuggestionsViewMode applied to the returned document depends on the user's current access level. If the user only has view access, PREVIEW_WITHOUT_SUGGESTIONS is applied. Otherwise, SUGGESTIONS_INLINE is applied. This is the default suggestions view mode.",
-            "The returned document has suggestions inline. Suggested changes will be differentiated from base content within the document. Requests to retrieve a document using this mode will return a 403 error if the user does not have permission to view suggested changes.",
-            "The returned document is a preview with all suggested changes accepted. Requests to retrieve a document using this mode will return a 403 error if the user does not have permission to view suggested changes.",
-            "The returned document is a preview with all suggested changes rejected if there are any suggestions in the document."
-          ]
-        },
-        "documentStyle": {
-          "description": "Output only. The style of the document.",
-          "$ref": "DocumentStyle"
-        },
-        "footnotes": {
-          "description": "Output only. The footnotes in the document, keyed by footnote ID.",
-          "type": "object",
-          "additionalProperties": {
-            "$ref": "Footnote"
-          }
-        },
-        "lists": {
-          "type": "object",
-          "additionalProperties": {
-            "$ref": "List"
-          },
-          "description": "Output only. The lists in the document, keyed by list ID."
-        },
-        "body": {
-          "$ref": "Body",
-          "description": "Output only. The main body of the document."
-        },
-        "positionedObjects": {
-          "additionalProperties": {
-            "$ref": "PositionedObject"
-          },
-          "type": "object",
-          "description": "Output only. The positioned objects in the document, keyed by object ID."
-        },
-        "inlineObjects": {
-          "type": "object",
-          "description": "Output only. The inline objects in the document, keyed by object ID.",
-          "additionalProperties": {
-            "$ref": "InlineObject"
-          }
-        },
-        "suggestedDocumentStyleChanges": {
-          "additionalProperties": {
-            "$ref": "SuggestedDocumentStyle"
-          },
-          "type": "object",
-          "description": "Output only. The suggested changes to the style of the document, keyed by suggestion ID."
-        }
-      },
-      "id": "Document"
-    },
-    "SubstringMatchCriteria": {
-      "type": "object",
-      "id": "SubstringMatchCriteria",
-      "properties": {
-        "matchCase": {
-          "description": "Indicates whether the search should respect case: - `True`: the search is case sensitive. - `False`: the search is case insensitive.",
-          "type": "boolean"
-        },
-        "text": {
-          "type": "string",
-          "description": "The text to search for in the document."
-        }
-      },
-      "description": "A criteria that matches a specific string of text in the document."
-    },
-    "CropProperties": {
-      "description": "The crop properties of an image. The crop rectangle is represented using fractional offsets from the original content's four edges. - If the offset is in the interval (0, 1), the corresponding edge of crop rectangle is positioned inside of the image's original bounding rectangle. - If the offset is negative or greater than 1, the corresponding edge of crop rectangle is positioned outside of the image's original bounding rectangle. - If all offsets and rotation angle are 0, the image is not cropped.",
-      "type": "object",
-      "id": "CropProperties",
-      "properties": {
-        "offsetLeft": {
-          "type": "number",
-          "description": "The offset specifies how far inwards the left edge of the crop rectangle is from the left edge of the original content as a fraction of the original content's width.",
-          "format": "float"
-        },
-        "offsetRight": {
-          "type": "number",
-          "description": "The offset specifies how far inwards the right edge of the crop rectangle is from the right edge of the original content as a fraction of the original content's width.",
-          "format": "float"
-        },
-        "offsetBottom": {
-          "description": "The offset specifies how far inwards the bottom edge of the crop rectangle is from the bottom edge of the original content as a fraction of the original content's height.",
-          "type": "number",
-          "format": "float"
-        },
-        "offsetTop": {
-          "format": "float",
-          "description": "The offset specifies how far inwards the top edge of the crop rectangle is from the top edge of the original content as a fraction of the original content's height.",
-          "type": "number"
-        },
-        "angle": {
-          "format": "float",
-          "type": "number",
-          "description": "The clockwise rotation angle of the crop rectangle around its center, in radians. Rotation is applied after the offsets."
-        }
-      }
-    },
-    "LinkedContentReference": {
-      "id": "LinkedContentReference",
-      "description": "A reference to the external linked source content.",
-      "type": "object",
-      "properties": {
-        "sheetsChartReference": {
-          "description": "A reference to the linked chart.",
-          "$ref": "SheetsChartReference"
-        }
-      }
-    },
-    "CreateFooterResponse": {
-      "description": "The result of creating a footer.",
-      "type": "object",
-      "id": "CreateFooterResponse",
-      "properties": {
-        "footerId": {
-          "description": "The ID of the created footer.",
-          "type": "string"
-        }
-      }
-    },
-    "TableCellBorder": {
-      "description": "A border around a table cell. Table cell borders cannot be transparent. To hide a table cell border, make its width 0.",
-      "properties": {
-        "width": {
-          "description": "The width of the border.",
-          "$ref": "Dimension"
-        },
-        "color": {
-          "description": "The color of the border. This color cannot be transparent.",
-          "$ref": "OptionalColor"
-        },
-        "dashStyle": {
-          "description": "The dash style of the border.",
-          "enumDescriptions": [
-            "Unspecified dash style.",
-            "Solid line. Corresponds to ECMA-376 ST_PresetLineDashVal value 'solid'. This is the default dash style.",
-            "Dotted line. Corresponds to ECMA-376 ST_PresetLineDashVal value 'dot'.",
-            "Dashed line. Corresponds to ECMA-376 ST_PresetLineDashVal value 'dash'."
-          ],
-          "type": "string",
-          "enum": [
-            "DASH_STYLE_UNSPECIFIED",
-            "SOLID",
-            "DOT",
-            "DASH"
-          ]
-        }
-      },
-      "type": "object",
-      "id": "TableCellBorder"
-    },
-    "InsertInlineImageResponse": {
-      "id": "InsertInlineImageResponse",
-      "type": "object",
-      "properties": {
-        "objectId": {
-          "type": "string",
-          "description": "The ID of the created InlineObject."
-        }
-      },
-      "description": "The result of inserting an inline image."
-    },
-    "InlineObjectPropertiesSuggestionState": {
-      "id": "InlineObjectPropertiesSuggestionState",
-      "properties": {
-        "embeddedObjectSuggestionState": {
-          "$ref": "EmbeddedObjectSuggestionState",
-          "description": "A mask that indicates which of the fields in embedded_object have been changed in this suggestion."
-        }
-      },
-      "type": "object",
-      "description": "A mask that indicates which of the fields on the base InlineObjectProperties have been changed in this suggestion. For any field set to true, there is a new suggested value."
-    },
-    "ReplaceAllTextRequest": {
-      "type": "object",
-      "description": "Replaces all instances of text matching a criteria with replace text.",
-      "id": "ReplaceAllTextRequest",
-      "properties": {
-        "containsText": {
-          "description": "Finds text in the document matching this substring.",
-          "$ref": "SubstringMatchCriteria"
-        },
-        "replaceText": {
-          "type": "string",
-          "description": "The text that will replace the matched text."
-        }
-      }
-    },
-    "DeleteTableColumnRequest": {
-      "properties": {
-        "tableCellLocation": {
-          "$ref": "TableCellLocation",
-          "description": "The reference table cell location from which the column will be deleted. The column this cell spans will be deleted. If this is a merged cell that spans multiple columns, all columns that the cell spans will be deleted. If no columns remain in the table after this deletion, the whole table is deleted."
-        }
-      },
-      "id": "DeleteTableColumnRequest",
-      "description": "Deletes a column from a table.",
-      "type": "object"
-    },
-    "AutoText": {
-      "description": "A ParagraphElement representing a spot in the text that is dynamically replaced with content that can change over time, like a page number.",
-      "id": "AutoText",
-      "properties": {
-        "suggestedTextStyleChanges": {
-          "type": "object",
-          "additionalProperties": {
-            "$ref": "SuggestedTextStyle"
-          },
-          "description": "The suggested text style changes to this AutoText, keyed by suggestion ID."
-        },
-        "textStyle": {
-          "description": "The text style of this AutoText.",
-          "$ref": "TextStyle"
-        },
-        "type": {
-          "description": "The type of this auto text.",
-          "enum": [
-            "TYPE_UNSPECIFIED",
-            "PAGE_NUMBER",
-            "PAGE_COUNT"
-          ],
-          "enumDescriptions": [
-            "An unspecified auto text type.",
-            "Type for auto text that represents the current page number.",
-            "Type for auto text that represents the total number of pages in the document."
-          ],
-          "type": "string"
-        },
-        "suggestedInsertionIds": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "The suggested insertion IDs. An AutoText may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion."
-        },
-        "suggestedDeletionIds": {
-          "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object"
-    },
-    "SuggestedTableRowStyle": {
-      "properties": {
-        "tableRowStyle": {
-          "$ref": "TableRowStyle",
-          "description": "A TableRowStyle that only includes the changes made in this suggestion. This can be used along with the table_row_style_suggestion_state to see which fields have changed and their new values."
-        },
-        "tableRowStyleSuggestionState": {
-          "description": "A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion.",
-          "$ref": "TableRowStyleSuggestionState"
-        }
-      },
-      "description": "A suggested change to a TableRowStyle.",
-      "id": "SuggestedTableRowStyle",
-      "type": "object"
-    },
-    "UnmergeTableCellsRequest": {
-      "id": "UnmergeTableCellsRequest",
-      "description": "Unmerges cells in a Table.",
-      "properties": {
-        "tableRange": {
-          "description": "The table range specifying which cells of the table to unmerge. All merged cells in this range will be unmerged, and cells that are already unmerged will not be affected. If the range has no merged cells, the request will do nothing. If there is text in any of the merged cells, the text will remain in the \"head\" cell of the resulting block of unmerged cells. The \"head\" cell is the upper-left cell when the content direction is from left to right, and the upper-right otherwise.",
-          "$ref": "TableRange"
-        }
-      },
-      "type": "object"
-    },
-    "EmbeddedObject": {
-      "properties": {
-        "linkedContentReference": {
-          "$ref": "LinkedContentReference",
-          "description": "A reference to the external linked source content. For example, it contains a reference to the source Sheets chart when the embedded object is a linked chart. If unset, then the embedded object is not linked."
-        },
-        "marginRight": {
-          "$ref": "Dimension",
-          "description": "The right margin of the embedded object."
-        },
-        "marginBottom": {
-          "description": "The bottom margin of the embedded object.",
-          "$ref": "Dimension"
-        },
-        "description": {
-          "type": "string",
-          "description": "The description of the embedded object. The `title` and `description` are both combined to display alt text."
-        },
-        "marginLeft": {
-          "$ref": "Dimension",
-          "description": "The left margin of the embedded object."
-        },
-        "size": {
-          "$ref": "Size",
-          "description": "The visible size of the image after cropping."
-        },
-        "marginTop": {
-          "$ref": "Dimension",
-          "description": "The top margin of the embedded object."
-        },
-        "embeddedObjectBorder": {
-          "description": "The border of the embedded object.",
-          "$ref": "EmbeddedObjectBorder"
-        },
-        "imageProperties": {
-          "$ref": "ImageProperties",
-          "description": "The properties of an image."
-        },
-        "embeddedDrawingProperties": {
-          "$ref": "EmbeddedDrawingProperties",
-          "description": "The properties of an embedded drawing."
-        },
-        "title": {
-          "description": "The title of the embedded object. The `title` and `description` are both combined to display alt text.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "EmbeddedObject",
-      "description": "An embedded object in the document."
-    },
-    "DeleteContentRangeRequest": {
-      "id": "DeleteContentRangeRequest",
-      "type": "object",
-      "properties": {
-        "range": {
-          "$ref": "Range",
-          "description": "The range of content to delete. Deleting text that crosses a paragraph boundary may result in changes to paragraph styles, lists, positioned objects and bookmarks as the two paragraphs are merged. Attempting to delete certain ranges can result in an invalid document structure in which case a 400 bad request error is returned. Some examples of invalid delete requests include: * Deleting one code unit of a surrogate pair. * Deleting the last newline character of a Body, Header, Footer, Footnote, TableCell or TableOfContents. * Deleting the start or end of a Table, TableOfContents or Equation without deleting the entire element. * Deleting the newline character before a Table, TableOfContents or SectionBreak without deleting the element. * Deleting individual rows or cells of a table. Deleting the content within a table cell is allowed."
-        }
-      },
-      "description": "Deletes content from the document."
-    },
-    "CreateNamedRangeRequest": {
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "The name of the NamedRange. Names do not need to be unique. Names must be at least 1 character and no more than 256 characters, measured in UTF-16 code units."
-        },
-        "range": {
-          "description": "The range to apply the name to.",
-          "$ref": "Range"
-        }
-      },
-      "description": "Creates a NamedRange referencing the given range.",
-      "type": "object",
-      "id": "CreateNamedRangeRequest"
-    },
-    "DocumentStyleSuggestionState": {
-      "id": "DocumentStyleSuggestionState",
-      "properties": {
-        "useCustomHeaderFooterMarginsSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to use_custom_header_footer_margins."
-        },
-        "pageSizeSuggestionState": {
-          "$ref": "SizeSuggestionState",
-          "description": "A mask that indicates which of the fields in size have been changed in this suggestion."
-        },
-        "defaultFooterIdSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to default_footer_id."
-        },
-        "marginHeaderSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to margin_header."
-        },
-        "backgroundSuggestionState": {
-          "$ref": "BackgroundSuggestionState",
-          "description": "A mask that indicates which of the fields in background have been changed in this suggestion."
-        },
-        "useFirstPageHeaderFooterSuggested": {
-          "description": "Indicates if there was a suggested change to use_first_page_header_footer.",
-          "type": "boolean"
-        },
-        "marginLeftSuggested": {
-          "description": "Indicates if there was a suggested change to margin_left.",
-          "type": "boolean"
-        },
-        "defaultHeaderIdSuggested": {
-          "description": "Indicates if there was a suggested change to default_header_id.",
-          "type": "boolean"
-        },
-        "marginFooterSuggested": {
-          "description": "Indicates if there was a suggested change to margin_footer.",
-          "type": "boolean"
-        },
-        "pageNumberStartSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to page_number_start."
-        },
-        "evenPageFooterIdSuggested": {
-          "description": "Indicates if there was a suggested change to even_page_footer_id.",
-          "type": "boolean"
-        },
-        "firstPageHeaderIdSuggested": {
-          "description": "Indicates if there was a suggested change to first_page_header_id.",
-          "type": "boolean"
-        },
-        "useEvenPageHeaderFooterSuggested": {
-          "description": "Indicates if there was a suggested change to use_even_page_header_footer.",
-          "type": "boolean"
-        },
-        "firstPageFooterIdSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to first_page_footer_id."
-        },
-        "marginBottomSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to margin_bottom."
-        },
-        "evenPageHeaderIdSuggested": {
-          "description": "Indicates if there was a suggested change to even_page_header_id.",
-          "type": "boolean"
-        },
-        "marginRightSuggested": {
-          "description": "Indicates if there was a suggested change to margin_right.",
-          "type": "boolean"
-        },
-        "marginTopSuggested": {
-          "description": "Indicates if there was a suggested change to margin_top.",
-          "type": "boolean"
-        }
-      },
-      "description": "A mask that indicates which of the fields on the base DocumentStyle have been changed in this suggestion. For any field set to true, there is a new suggested value.",
-      "type": "object"
-    },
-    "ObjectReferences": {
-      "type": "object",
-      "description": "A collection of object IDs.",
-      "id": "ObjectReferences",
-      "properties": {
-        "objectIds": {
-          "items": {
-            "type": "string"
-          },
-          "description": "The object IDs.",
-          "type": "array"
-        }
-      }
-    },
-    "NamedStyles": {
-      "id": "NamedStyles",
-      "type": "object",
-      "properties": {
-        "styles": {
-          "type": "array",
-          "description": "The named styles. There is an entry for each of the possible named style types.",
-          "items": {
-            "$ref": "NamedStyle"
-          }
-        }
-      },
-      "description": "The named styles. Paragraphs in the document can inherit their TextStyle and ParagraphStyle from these named styles."
-    },
-    "ReplaceAllTextResponse": {
-      "type": "object",
-      "description": "The result of replacing text.",
-      "id": "ReplaceAllTextResponse",
-      "properties": {
-        "occurrencesChanged": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The number of occurrences changed by replacing all text."
-        }
-      }
-    },
-    "UpdateTableColumnPropertiesRequest": {
-      "id": "UpdateTableColumnPropertiesRequest",
-      "type": "object",
-      "properties": {
-        "fields": {
-          "type": "string",
-          "format": "google-fieldmask",
-          "description": "The fields that should be updated. At least one field must be specified. The root `tableColumnProperties` is implied and should not be specified. A single `\"*\"` can be used as short-hand for listing every field. For example to update the column width, set `fields` to `\"width\"`."
-        },
-        "columnIndices": {
-          "description": "The list of zero-based column indices whose property should be updated. If no indices are specified, all columns will be updated.",
-          "type": "array",
-          "items": {
-            "format": "int32",
-            "type": "integer"
-          }
-        },
-        "tableColumnProperties": {
-          "description": "The table column properties to update. If the value of `table_column_properties#width` is less than 5 points (5/72 inch), a 400 bad request error is returned.",
-          "$ref": "TableColumnProperties"
-        },
-        "tableStartLocation": {
-          "description": "The location where the table starts in the document.",
-          "$ref": "Location"
-        }
-      },
-      "description": "Updates the TableColumnProperties of columns in a table."
-    },
-    "Range": {
-      "id": "Range",
-      "properties": {
-        "segmentId": {
-          "description": "The ID of the header, footer or footnote that this range is contained in. An empty segment ID signifies the document's body.",
-          "type": "string"
-        },
-        "endIndex": {
-          "description": "The zero-based end index of this range, exclusive, in UTF-16 code units. In all current uses, an end index must be provided. This field is an Int32Value in order to accommodate future use cases with open-ended ranges.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "startIndex": {
-          "type": "integer",
-          "description": "The zero-based start index of this range, in UTF-16 code units. In all current uses, a start index must be provided. This field is an Int32Value in order to accommodate future use cases with open-ended ranges.",
-          "format": "int32"
-        }
-      },
-      "description": "Specifies a contiguous range of text.",
-      "type": "object"
-    },
-    "ParagraphStyleSuggestionState": {
-      "id": "ParagraphStyleSuggestionState",
-      "type": "object",
-      "properties": {
-        "alignmentSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to alignment."
-        },
-        "indentStartSuggested": {
-          "description": "Indicates if there was a suggested change to indent_start.",
-          "type": "boolean"
-        },
-        "borderBetweenSuggested": {
-          "description": "Indicates if there was a suggested change to border_between.",
-          "type": "boolean"
-        },
-        "indentEndSuggested": {
-          "description": "Indicates if there was a suggested change to indent_end.",
-          "type": "boolean"
-        },
-        "keepLinesTogetherSuggested": {
-          "description": "Indicates if there was a suggested change to keep_lines_together.",
-          "type": "boolean"
-        },
-        "spaceAboveSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to space_above."
-        },
-        "lineSpacingSuggested": {
-          "description": "Indicates if there was a suggested change to line_spacing.",
-          "type": "boolean"
-        },
-        "headingIdSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to heading_id."
-        },
-        "namedStyleTypeSuggested": {
-          "description": "Indicates if there was a suggested change to named_style_type.",
-          "type": "boolean"
-        },
-        "keepWithNextSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to keep_with_next."
-        },
-        "borderLeftSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to border_left."
-        },
-        "indentFirstLineSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to indent_first_line."
-        },
-        "borderTopSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to border_top."
-        },
-        "spaceBelowSuggested": {
-          "description": "Indicates if there was a suggested change to space_below.",
-          "type": "boolean"
-        },
-        "shadingSuggestionState": {
-          "description": "A mask that indicates which of the fields in shading have been changed in this suggestion.",
-          "$ref": "ShadingSuggestionState"
-        },
-        "borderRightSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to border_right."
-        },
-        "avoidWidowAndOrphanSuggested": {
-          "description": "Indicates if there was a suggested change to avoid_widow_and_orphan.",
-          "type": "boolean"
-        },
-        "borderBottomSuggested": {
-          "description": "Indicates if there was a suggested change to border_bottom.",
-          "type": "boolean"
-        },
-        "directionSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to direction."
-        },
-        "spacingModeSuggested": {
-          "description": "Indicates if there was a suggested change to spacing_mode.",
-          "type": "boolean"
-        }
-      },
-      "description": "A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion. For any field set to true, there is a new suggested value."
-    },
-    "TabStop": {
-      "id": "TabStop",
-      "description": "A tab stop within a paragraph.",
-      "type": "object",
-      "properties": {
-        "offset": {
-          "description": "The offset between this tab stop and the start margin.",
-          "$ref": "Dimension"
-        },
-        "alignment": {
-          "type": "string",
-          "description": "The alignment of this tab stop. If unset, the value defaults to START.",
-          "enum": [
-            "TAB_STOP_ALIGNMENT_UNSPECIFIED",
-            "START",
-            "CENTER",
-            "END"
-          ],
-          "enumDescriptions": [
-            "The tab stop alignment is unspecified.",
-            "The tab stop is aligned to the start of the line. This is the default.",
-            "The tab stop is aligned to the center of the line.",
-            "The tab stop is aligned to the end of the line."
-          ]
-        }
-      }
-    },
-    "Background": {
-      "properties": {
-        "color": {
-          "description": "The background color.",
-          "$ref": "OptionalColor"
-        }
-      },
-      "id": "Background",
-      "type": "object",
-      "description": "Represents the background of a document."
-    },
-    "SectionStyle": {
-      "id": "SectionStyle",
-      "description": "The styling that applies to a section.",
-      "type": "object",
-      "properties": {
-        "columnProperties": {
-          "type": "array",
-          "description": "The section's columns properties. If empty, the section contains one column with the default properties in the Docs editor. A section can be updated to have no more than three columns. When updating this property, setting a concrete value is required. Unsetting this property will result in a 400 bad request error.",
-          "items": {
-            "$ref": "SectionColumnProperties"
-          }
-        },
-        "defaultFooterId": {
-          "type": "string",
-          "description": "The ID of the default footer. If unset, the value inherits from the previous SectionBreak's SectionStyle. If the value is unset in the first SectionBreak, it inherits from DocumentStyle's default_footer_id. This property is read-only."
-        },
-        "firstPageFooterId": {
-          "type": "string",
-          "description": "The ID of the footer used only for the first page of the section. If use_first_page_header_footer is true, this value is used for the footer on the first page of the section. If it is false, the footer on the first page of the section uses the default_footer_id. If unset, the value inherits from the previous SectionBreak's SectionStyle. If the value is unset in the first SectionBreak, it inherits from DocumentStyle's first_page_footer_id. This property is read-only."
-        },
-        "marginFooter": {
-          "$ref": "Dimension",
-          "description": "The footer margin of the section. If unset, uses margin_footer from DocumentStyle. If updated, use_custom_header_footer_margins is set to true on DocumentStyle. The value of use_custom_header_footer_margins on DocumentStyle indicates if a footer margin is being respected for this section When updating this property, setting a concrete value is required. Unsetting this property results in a 400 bad request error."
-        },
-        "evenPageFooterId": {
-          "type": "string",
-          "description": "The ID of the footer used only for even pages. If the value of DocumentStyle's use_even_page_header_footer is true, this value is used for the footers on even pages in the section. If it is false, the footers on even pages uses the default_footer_id. If unset, the value inherits from the previous SectionBreak's SectionStyle. If the value is unset in the first SectionBreak, it inherits from DocumentStyle's even_page_footer_id. This property is read-only."
-        },
-        "contentDirection": {
-          "description": "The content direction of this section. If unset, the value defaults to LEFT_TO_RIGHT. When updating this property, setting a concrete value is required. Unsetting this property results in a 400 bad request error.",
-          "type": "string",
-          "enumDescriptions": [
-            "The content direction is unspecified.",
-            "The content goes from left to right.",
-            "The content goes from right to left."
-          ],
-          "enum": [
-            "CONTENT_DIRECTION_UNSPECIFIED",
-            "LEFT_TO_RIGHT",
-            "RIGHT_TO_LEFT"
-          ]
-        },
-        "columnSeparatorStyle": {
-          "type": "string",
-          "description": "The style of column separators. This style can be set even when there is one column in the section. When updating this property, setting a concrete value is required. Unsetting this property results in a 400 bad request error.",
-          "enum": [
-            "COLUMN_SEPARATOR_STYLE_UNSPECIFIED",
-            "NONE",
-            "BETWEEN_EACH_COLUMN"
-          ],
-          "enumDescriptions": [
-            "An unspecified column separator style.",
-            "No column separator lines between columns.",
-            "Renders a column separator line between each column."
-          ]
-        },
-        "marginLeft": {
-          "description": "The left page margin of the section. If unset, uses margin_left from DocumentStyle. Updating left margin causes columns in this section to resize. Since the margin affects column width, it is applied before column properties. When updating this property, setting a concrete value is required. Unsetting this property results in a 400 bad request error.",
-          "$ref": "Dimension"
-        },
-        "marginTop": {
-          "$ref": "Dimension",
-          "description": "The top page margin of the section. If unset, uses margin_top from DocumentStyle. When updating this property, setting a concrete value is required. Unsetting this property results in a 400 bad request error."
-        },
-        "sectionType": {
-          "description": "Output only. The type of section.",
-          "enum": [
-            "SECTION_TYPE_UNSPECIFIED",
-            "CONTINUOUS",
-            "NEXT_PAGE"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "The section type is unspecified.",
-            "The section starts immediately after the last paragraph of the previous section.",
-            "The section starts on the next page."
-          ]
-        },
-        "useFirstPageHeaderFooter": {
-          "description": "Indicates whether to use the first page header / footer IDs for the first page of the section. If unset, it inherits from DocumentStyle's use_first_page_header_footer for the first section. If the value is unset for subsequent sectors, it should be interpreted as false. When updating this property, setting a concrete value is required. Unsetting this property results in a 400 bad request error.",
-          "type": "boolean"
-        },
-        "marginHeader": {
-          "description": "The header margin of the section. If unset, uses margin_header from DocumentStyle. If updated, use_custom_header_footer_margins is set to true on DocumentStyle. The value of use_custom_header_footer_margins on DocumentStyle indicates if a header margin is being respected for this section. When updating this property, setting a concrete value is required. Unsetting this property results in a 400 bad request error.",
-          "$ref": "Dimension"
-        },
-        "firstPageHeaderId": {
-          "description": "The ID of the header used only for the first page of the section. If use_first_page_header_footer is true, this value is used for the header on the first page of the section. If it is false, the header on the first page of the section uses the default_header_id. If unset, the value inherits from the previous SectionBreak's SectionStyle. If the value is unset in the first SectionBreak, it inherits from DocumentStyle's first_page_header_id. This property is read-only.",
-          "type": "string"
-        },
-        "evenPageHeaderId": {
-          "type": "string",
-          "description": "The ID of the header used only for even pages. If the value of DocumentStyle's use_even_page_header_footer is true, this value is used for the headers on even pages in the section. If it is false, the headers on even pages uses the default_header_id. If unset, the value inherits from the previous SectionBreak's SectionStyle. If the value is unset in the first SectionBreak, it inherits from DocumentStyle's even_page_header_id. This property is read-only."
-        },
-        "marginRight": {
-          "description": "The right page margin of the section. If unset, uses margin_right from DocumentStyle. Updating right margin causes columns in this section to resize. Since the margin affects column width, it is applied before column properties. When updating this property, setting a concrete value is required. Unsetting this property results in a 400 bad request error.",
-          "$ref": "Dimension"
-        },
-        "pageNumberStart": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The page number from which to start counting the number of pages for this section. If unset, page numbering continues from the previous section. If the value is unset in the first SectionBreak, refer to DocumentStyle's page_number_start. When updating this property, setting a concrete value is required. Unsetting this property results in a 400 bad request error."
-        },
-        "defaultHeaderId": {
-          "description": "The ID of the default header. If unset, the value inherits from the previous SectionBreak's SectionStyle. If the value is unset in the first SectionBreak, it inherits from DocumentStyle's default_header_id. This property is read-only.",
-          "type": "string"
-        },
-        "marginBottom": {
-          "$ref": "Dimension",
-          "description": "The bottom page margin of the section. If unset, uses margin_bottom from DocumentStyle. When updating this property, setting a concrete value is required. Unsetting this property results in a 400 bad request error."
-        }
-      }
-    },
-    "ShadingSuggestionState": {
-      "description": "A mask that indicates which of the fields on the base Shading have been changed in this suggested change. For any field set to true, there is a new suggested value.",
-      "properties": {
-        "backgroundColorSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to the Shading."
-        }
-      },
-      "id": "ShadingSuggestionState",
-      "type": "object"
-    },
-    "CreateNamedRangeResponse": {
-      "type": "object",
-      "id": "CreateNamedRangeResponse",
-      "properties": {
-        "namedRangeId": {
-          "description": "The ID of the created named range.",
-          "type": "string"
-        }
-      },
-      "description": "The result of creating a named range."
-    },
-    "NamedStyleSuggestionState": {
-      "id": "NamedStyleSuggestionState",
-      "type": "object",
-      "properties": {
-        "namedStyleType": {
-          "description": "The named style type that this suggestion state corresponds to. This field is provided as a convenience for matching the NamedStyleSuggestionState with its corresponding NamedStyle.",
-          "enumDescriptions": [
-            "The type of named style is unspecified.",
-            "Normal text.",
-            "Title.",
-            "Subtitle.",
-            "Heading 1.",
-            "Heading 2.",
-            "Heading 3.",
-            "Heading 4.",
-            "Heading 5.",
-            "Heading 6."
-          ],
-          "type": "string",
-          "enum": [
-            "NAMED_STYLE_TYPE_UNSPECIFIED",
-            "NORMAL_TEXT",
-            "TITLE",
-            "SUBTITLE",
-            "HEADING_1",
-            "HEADING_2",
-            "HEADING_3",
-            "HEADING_4",
-            "HEADING_5",
-            "HEADING_6"
-          ]
-        },
-        "paragraphStyleSuggestionState": {
-          "description": "A mask that indicates which of the fields in paragraph style have been changed in this suggestion.",
-          "$ref": "ParagraphStyleSuggestionState"
-        },
-        "textStyleSuggestionState": {
-          "$ref": "TextStyleSuggestionState",
-          "description": "A mask that indicates which of the fields in text style have been changed in this suggestion."
-        }
-      },
-      "description": "A suggestion state of a NamedStyle message."
-    },
-    "NamedRanges": {
-      "description": "A collection of all the NamedRanges in the document that share a given name.",
-      "id": "NamedRanges",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "The name that all the named ranges share.",
-          "type": "string"
-        },
-        "namedRanges": {
-          "type": "array",
-          "description": "The NamedRanges that share the same name.",
-          "items": {
-            "$ref": "NamedRange"
-          }
-        }
-      }
-    },
-    "TextRun": {
-      "properties": {
-        "suggestedTextStyleChanges": {
-          "type": "object",
-          "description": "The suggested text style changes to this run, keyed by suggestion ID.",
-          "additionalProperties": {
-            "$ref": "SuggestedTextStyle"
-          }
-        },
-        "textStyle": {
-          "description": "The text style of this run.",
-          "$ref": "TextStyle"
-        },
-        "content": {
-          "type": "string",
-          "description": "The text of this run. Any non-text elements in the run are replaced with the Unicode character U+E907."
-        },
-        "suggestedDeletionIds": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content."
-        },
-        "suggestedInsertionIds": {
-          "description": "The suggested insertion IDs. A TextRun may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        }
-      },
-      "description": "A ParagraphElement that represents a run of text that all has the same styling.",
-      "type": "object",
-      "id": "TextRun"
-    },
-    "TableCell": {
-      "properties": {
-        "suggestedTableCellStyleChanges": {
-          "description": "The suggested changes to the table cell style, keyed by suggestion ID.",
-          "additionalProperties": {
-            "$ref": "SuggestedTableCellStyle"
-          },
-          "type": "object"
-        },
-        "suggestedDeletionIds": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content."
-        },
-        "content": {
-          "description": "The content of the cell.",
-          "items": {
-            "$ref": "StructuralElement"
-          },
-          "type": "array"
-        },
-        "startIndex": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The zero-based start index of this cell, in UTF-16 code units."
-        },
-        "endIndex": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The zero-based end index of this cell, exclusive, in UTF-16 code units."
-        },
-        "tableCellStyle": {
-          "$ref": "TableCellStyle",
-          "description": "The style of the cell."
-        },
-        "suggestedInsertionIds": {
-          "type": "array",
-          "description": "The suggested insertion IDs. A TableCell may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "description": "The contents and style of a cell in a Table.",
-      "type": "object",
-      "id": "TableCell"
-    },
-    "DeleteParagraphBulletsRequest": {
-      "type": "object",
-      "description": "Deletes bullets from all of the paragraphs that overlap with the given range. The nesting level of each paragraph will be visually preserved by adding indent to the start of the corresponding paragraph.",
-      "properties": {
-        "range": {
-          "$ref": "Range",
-          "description": "The range to delete bullets from."
-        }
-      },
-      "id": "DeleteParagraphBulletsRequest"
-    },
-    "TableCellStyleSuggestionState": {
-      "properties": {
-        "paddingLeftSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to padding_left."
-        },
-        "borderBottomSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to border_bottom."
-        },
-        "paddingTopSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to padding_top."
-        },
-        "borderTopSuggested": {
-          "description": "Indicates if there was a suggested change to border_top.",
-          "type": "boolean"
-        },
-        "borderRightSuggested": {
-          "description": "Indicates if there was a suggested change to border_right.",
-          "type": "boolean"
-        },
-        "contentAlignmentSuggested": {
-          "description": "Indicates if there was a suggested change to content_alignment.",
-          "type": "boolean"
-        },
-        "columnSpanSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to column_span."
-        },
-        "rowSpanSuggested": {
-          "description": "Indicates if there was a suggested change to row_span.",
-          "type": "boolean"
-        },
-        "backgroundColorSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to background_color."
-        },
-        "borderLeftSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to border_left."
-        },
-        "paddingRightSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to padding_right."
-        },
-        "paddingBottomSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to padding_bottom."
-        }
-      },
-      "description": "A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion. For any field set to true, there is a new suggested value.",
-      "id": "TableCellStyleSuggestionState",
-      "type": "object"
-    },
-    "InlineObjectProperties": {
-      "properties": {
-        "embeddedObject": {
-          "description": "The embedded object of this inline object.",
-          "$ref": "EmbeddedObject"
-        }
-      },
-      "id": "InlineObjectProperties",
-      "type": "object",
-      "description": "Properties of an InlineObject."
-    },
-    "SectionColumnProperties": {
-      "properties": {
-        "paddingEnd": {
-          "description": "The padding at the end of the column.",
-          "$ref": "Dimension"
-        },
-        "width": {
-          "description": "Output only. The width of the column.",
-          "$ref": "Dimension"
-        }
-      },
-      "id": "SectionColumnProperties",
-      "description": "Properties that apply to a section's column.",
-      "type": "object"
-    },
-    "BatchUpdateDocumentRequest": {
-      "description": "Request message for BatchUpdateDocument.",
-      "type": "object",
-      "id": "BatchUpdateDocumentRequest",
-      "properties": {
-        "writeControl": {
-          "description": "Provides control over how write requests are executed.",
-          "$ref": "WriteControl"
-        },
-        "requests": {
-          "description": "A list of updates to apply to the document.",
-          "items": {
-            "$ref": "Request"
-          },
-          "type": "array"
-        }
-      }
-    },
-    "ParagraphStyle": {
-      "properties": {
-        "spaceAbove": {
-          "description": "The amount of extra space above the paragraph. If unset, the value is inherited from the parent.",
-          "$ref": "Dimension"
-        },
-        "keepLinesTogether": {
-          "type": "boolean",
-          "description": "Whether all lines of the paragraph should be laid out on the same page or column if possible. If unset, the value is inherited from the parent."
-        },
-        "borderBottom": {
-          "$ref": "ParagraphBorder",
-          "description": "The border at the bottom of this paragraph. If unset, the value is inherited from the parent. The bottom border is rendered when the paragraph below has different border and indent properties. Paragraph borders cannot be partially updated. When making changes to a paragraph border the new border must be specified in its entirety."
-        },
-        "headingId": {
-          "type": "string",
-          "description": "The heading ID of the paragraph. If empty, then this paragraph is not a heading. This property is read-only."
-        },
-        "spacingMode": {
-          "enum": [
-            "SPACING_MODE_UNSPECIFIED",
-            "NEVER_COLLAPSE",
-            "COLLAPSE_LISTS"
-          ],
-          "enumDescriptions": [
-            "The spacing mode is inherited from the parent.",
-            "Paragraph spacing is always rendered.",
-            "Paragraph spacing is skipped between list elements."
-          ],
-          "type": "string",
-          "description": "The spacing mode for the paragraph."
-        },
-        "indentStart": {
-          "$ref": "Dimension",
-          "description": "The amount of indentation for the paragraph on the side that corresponds to the start of the text, based on the current paragraph direction. If unset, the value is inherited from the parent."
-        },
-        "direction": {
-          "enumDescriptions": [
-            "The content direction is unspecified.",
-            "The content goes from left to right.",
-            "The content goes from right to left."
-          ],
-          "type": "string",
-          "enum": [
-            "CONTENT_DIRECTION_UNSPECIFIED",
-            "LEFT_TO_RIGHT",
-            "RIGHT_TO_LEFT"
-          ],
-          "description": "The text direction of this paragraph. If unset, the value defaults to LEFT_TO_RIGHT since paragraph direction is not inherited."
-        },
-        "spaceBelow": {
-          "$ref": "Dimension",
-          "description": "The amount of extra space below the paragraph. If unset, the value is inherited from the parent."
-        },
-        "borderBetween": {
-          "description": "The border between this paragraph and the next and previous paragraphs. If unset, the value is inherited from the parent. The between border is rendered when the adjacent paragraph has the same border and indent properties. Paragraph borders cannot be partially updated. When making changes to a paragraph border the new border must be specified in its entirety.",
-          "$ref": "ParagraphBorder"
-        },
-        "borderRight": {
-          "$ref": "ParagraphBorder",
-          "description": "The border to the right of this paragraph. If unset, the value is inherited from the parent. Paragraph borders cannot be partially updated. When making changes to a paragraph border the new border must be specified in its entirety."
-        },
-        "shading": {
-          "$ref": "Shading",
-          "description": "The shading of the paragraph. If unset, the value is inherited from the parent."
-        },
-        "avoidWidowAndOrphan": {
-          "description": "Whether to avoid widows and orphans for the paragraph. If unset, the value is inherited from the parent.",
-          "type": "boolean"
-        },
-        "tabStops": {
-          "description": "A list of the tab stops for this paragraph. The list of tab stops is not inherited. This property is read-only.",
-          "type": "array",
-          "items": {
-            "$ref": "TabStop"
-          }
-        },
-        "borderLeft": {
-          "description": "The border to the left of this paragraph. If unset, the value is inherited from the parent. Paragraph borders cannot be partially updated. When making changes to a paragraph border the new border must be specified in its entirety.",
-          "$ref": "ParagraphBorder"
-        },
-        "alignment": {
-          "description": "The text alignment for this paragraph.",
-          "enum": [
-            "ALIGNMENT_UNSPECIFIED",
-            "START",
-            "CENTER",
-            "END",
-            "JUSTIFIED"
-          ],
-          "enumDescriptions": [
-            "The paragraph alignment is inherited from the parent.",
-            "The paragraph is aligned to the start of the line. Left-aligned for LTR text, right-aligned otherwise.",
-            "The paragraph is centered.",
-            "The paragraph is aligned to the end of the line. Right-aligned for LTR text, left-aligned otherwise.",
-            "The paragraph is justified."
-          ],
-          "type": "string"
-        },
-        "indentEnd": {
-          "$ref": "Dimension",
-          "description": "The amount of indentation for the paragraph on the side that corresponds to the end of the text, based on the current paragraph direction. If unset, the value is inherited from the parent."
-        },
-        "namedStyleType": {
-          "type": "string",
-          "enum": [
-            "NAMED_STYLE_TYPE_UNSPECIFIED",
-            "NORMAL_TEXT",
-            "TITLE",
-            "SUBTITLE",
-            "HEADING_1",
-            "HEADING_2",
-            "HEADING_3",
-            "HEADING_4",
-            "HEADING_5",
-            "HEADING_6"
-          ],
-          "enumDescriptions": [
-            "The type of named style is unspecified.",
-            "Normal text.",
-            "Title.",
-            "Subtitle.",
-            "Heading 1.",
-            "Heading 2.",
-            "Heading 3.",
-            "Heading 4.",
-            "Heading 5.",
-            "Heading 6."
-          ],
-          "description": "The named style type of the paragraph. Since updating the named style type affects other properties within ParagraphStyle, the named style type is applied before the other properties are updated."
-        },
-        "keepWithNext": {
-          "type": "boolean",
-          "description": "Whether at least a part of this paragraph should be laid out on the same page or column as the next paragraph if possible. If unset, the value is inherited from the parent."
-        },
-        "lineSpacing": {
-          "format": "float",
-          "type": "number",
-          "description": "The amount of space between lines, as a percentage of normal, where normal is represented as 100.0. If unset, the value is inherited from the parent."
-        },
-        "indentFirstLine": {
-          "$ref": "Dimension",
-          "description": "The amount of indentation for the first line of the paragraph. If unset, the value is inherited from the parent."
-        },
-        "borderTop": {
-          "$ref": "ParagraphBorder",
-          "description": "The border at the top of this paragraph. If unset, the value is inherited from the parent. The top border is rendered when the paragraph above has different border and indent properties. Paragraph borders cannot be partially updated. When making changes to a paragraph border the new border must be specified in its entirety."
-        }
-      },
-      "description": "Styles that apply to a whole paragraph. Inherited paragraph styles are represented as unset fields in this message. A paragraph style's parent depends on where the paragraph style is defined: * The ParagraphStyle on a Paragraph inherits from the paragraph's corresponding named style type. * The ParagraphStyle on a named style inherits from the normal text named style. * The ParagraphStyle of the normal text named style inherits from the default paragraph style in the Docs editor. * The ParagraphStyle on a Paragraph element that is contained in a table may inherit its paragraph style from the table style. If the paragraph style does not inherit from a parent, unsetting fields will revert the style to a value matching the defaults in the Docs editor.",
-      "type": "object",
-      "id": "ParagraphStyle"
-    },
-    "InlineObject": {
-      "id": "InlineObject",
-      "description": "An object that appears inline with text. An InlineObject contains an EmbeddedObject such as an image.",
-      "type": "object",
-      "properties": {
-        "suggestedInsertionId": {
-          "description": "The suggested insertion ID. If empty, then this is not a suggested insertion.",
-          "type": "string"
-        },
-        "suggestedInlineObjectPropertiesChanges": {
-          "description": "The suggested changes to the inline object properties, keyed by suggestion ID.",
-          "additionalProperties": {
-            "$ref": "SuggestedInlineObjectProperties"
-          },
-          "type": "object"
-        },
-        "inlineObjectProperties": {
-          "$ref": "InlineObjectProperties",
-          "description": "The properties of this inline object."
-        },
-        "objectId": {
-          "type": "string",
-          "description": "The ID of this inline object."
-        },
-        "suggestedDeletionIds": {
-          "type": "array",
-          "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
-          "items": {
-            "type": "string"
-          }
-        }
-      }
-    },
-    "WriteControl": {
-      "type": "object",
-      "id": "WriteControl",
-      "properties": {
-        "targetRevisionId": {
-          "description": "The target revision ID of the document that the write request will be applied to. If collaborator changes have occurred after the document was read using the API, the changes produced by this write request will be transformed against the collaborator changes. This results in a new revision of the document which incorporates both the changes in the request and the collaborator changes, and the Docs server will resolve conflicting changes. When using `target_revision_id`, the API client can be thought of as another collaborator of the document. The target revision ID may only be used to write to recent versions of a document. If the target revision is too far behind the latest revision, the request will not be processed and will return a 400 bad request error and the request should be retried after reading the latest version of the document. In most cases a `revision_id` will remain valid for use as a target revision for several minutes after it is read, but for frequently-edited documents this window may be shorter.",
-          "type": "string"
-        },
-        "requiredRevisionId": {
-          "description": "The revision ID of the document that the write request will be applied to. If this is not the latest revision of the document, the request will not be processed and will return a 400 bad request error. When a required revision ID is returned in a response, it indicates the revision ID of the document after the request was applied.",
-          "type": "string"
-        }
-      },
-      "description": "Provides control over how write requests are executed."
-    },
-    "DeleteFooterRequest": {
-      "properties": {
-        "footerId": {
-          "type": "string",
-          "description": "The id of the footer to delete. If this footer is defined on DocumentStyle, the reference to this footer is removed, resulting in no footer of that type for the first section of the document. If this footer is defined on a SectionStyle, the reference to this footer is removed and the footer of that type is now continued from the previous section."
-        }
-      },
-      "type": "object",
-      "id": "DeleteFooterRequest",
-      "description": "Deletes a Footer from the document."
-    },
-    "NamedStyle": {
-      "description": "A named style. Paragraphs in the document can inherit their TextStyle and ParagraphStyle from this named style when they have the same named style type.",
-      "properties": {
-        "namedStyleType": {
-          "enumDescriptions": [
-            "The type of named style is unspecified.",
-            "Normal text.",
-            "Title.",
-            "Subtitle.",
-            "Heading 1.",
-            "Heading 2.",
-            "Heading 3.",
-            "Heading 4.",
-            "Heading 5.",
-            "Heading 6."
-          ],
-          "type": "string",
-          "enum": [
-            "NAMED_STYLE_TYPE_UNSPECIFIED",
-            "NORMAL_TEXT",
-            "TITLE",
-            "SUBTITLE",
-            "HEADING_1",
-            "HEADING_2",
-            "HEADING_3",
-            "HEADING_4",
-            "HEADING_5",
-            "HEADING_6"
-          ],
-          "description": "The type of this named style."
-        },
-        "textStyle": {
-          "$ref": "TextStyle",
-          "description": "The text style of this named style."
-        },
-        "paragraphStyle": {
-          "$ref": "ParagraphStyle",
-          "description": "The paragraph style of this named style."
-        }
-      },
-      "id": "NamedStyle",
-      "type": "object"
-    },
-    "UpdateDocumentStyleRequest": {
-      "type": "object",
-      "properties": {
-        "documentStyle": {
-          "$ref": "DocumentStyle",
-          "description": "The styles to set on the document. Certain document style changes may cause other changes in order to mirror the behavior of the Docs editor. See the documentation of DocumentStyle for more information."
-        },
-        "fields": {
-          "type": "string",
-          "format": "google-fieldmask",
-          "description": "The fields that should be updated. At least one field must be specified. The root `document_style` is implied and should not be specified. A single `\"*\"` can be used as short-hand for listing every field. For example to update the background, set `fields` to `\"background\"`."
-        }
-      },
-      "description": "Updates the DocumentStyle.",
-      "id": "UpdateDocumentStyleRequest"
-    },
-    "Shading": {
-      "type": "object",
-      "id": "Shading",
-      "properties": {
-        "backgroundColor": {
-          "$ref": "OptionalColor",
-          "description": "The background color of this paragraph shading."
-        }
-      },
-      "description": "The shading of a paragraph."
-    },
-    "InsertInlineImageRequest": {
-      "id": "InsertInlineImageRequest",
-      "properties": {
-        "objectSize": {
-          "description": "The size that the image should appear as in the document. This property is optional and the final size of the image in the document is determined by the following rules: * If neither width nor height is specified, then a default size of the image is calculated based on its resolution. * If one dimension is specified then the other dimension is calculated to preserve the aspect ratio of the image. * If both width and height are specified, the image is scaled to fit within the provided dimensions while maintaining its aspect ratio.",
-          "$ref": "Size"
-        },
-        "location": {
-          "$ref": "Location",
-          "description": "Inserts the image at a specific index in the document. The image must be inserted inside the bounds of an existing Paragraph. For instance, it cannot be inserted at a table's start index (i.e. between the table and its preceding paragraph). Inline images cannot be inserted inside a footnote or equation."
-        },
-        "endOfSegmentLocation": {
-          "$ref": "EndOfSegmentLocation",
-          "description": "Inserts the text at the end of a header, footer or the document body. Inline images cannot be inserted inside a footnote."
-        },
-        "uri": {
-          "description": "The image URI. The image is fetched once at insertion time and a copy is stored for display inside the document. Images must be less than 50MB in size, cannot exceed 25 megapixels, and must be in one of PNG, JPEG, or GIF format. The provided URI can be at most 2 kB in length. The URI itself is saved with the image, and exposed via the ImageProperties.content_uri field.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Inserts an InlineObject containing an image at the given location."
-    },
-    "PositionedObjectProperties": {
-      "type": "object",
-      "properties": {
-        "positioning": {
-          "$ref": "PositionedObjectPositioning",
-          "description": "The positioning of this positioned object relative to the newline of the Paragraph that references this positioned object."
-        },
-        "embeddedObject": {
-          "description": "The embedded object of this positioned object.",
-          "$ref": "EmbeddedObject"
-        }
-      },
-      "id": "PositionedObjectProperties",
-      "description": "Properties of a PositionedObject."
-    },
-    "Bullet": {
-      "description": "Describes the bullet of a paragraph.",
-      "type": "object",
-      "id": "Bullet",
-      "properties": {
-        "nestingLevel": {
-          "description": "The nesting level of this paragraph in the list.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "listId": {
-          "description": "The ID of the list this paragraph belongs to.",
-          "type": "string"
-        },
-        "textStyle": {
-          "$ref": "TextStyle",
-          "description": "The paragraph specific text style applied to this bullet."
-        }
-      }
-    },
-    "DeleteHeaderRequest": {
-      "type": "object",
-      "properties": {
-        "headerId": {
-          "type": "string",
-          "description": "The id of the header to delete. If this header is defined on DocumentStyle, the reference to this header is removed, resulting in no header of that type for the first section of the document. If this header is defined on a SectionStyle, the reference to this header is removed and the header of that type is now continued from the previous section."
-        }
-      },
-      "description": "Deletes a Header from the document.",
-      "id": "DeleteHeaderRequest"
-    },
-    "EmbeddedDrawingProperties": {
-      "properties": {},
-      "type": "object",
-      "description": "The properties of an embedded drawing.",
-      "id": "EmbeddedDrawingProperties"
-    },
-    "TableRange": {
-      "properties": {
-        "rowSpan": {
-          "description": "The row span of the table range.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "tableCellLocation": {
-          "$ref": "TableCellLocation",
-          "description": "The cell location where the table range starts."
-        },
-        "columnSpan": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The column span of the table range."
-        }
-      },
-      "description": "A table range represents a reference to a subset of a table. It's important to note that the cells specified by a table range do not necessarily form a rectangle. For example, let's say we have a 3 x 3 table where all the cells of the last row are merged together. The table looks like this: [ ] A table range with table cell location = (table_start_location, row = 0, column = 0), row span = 3 and column span = 2 specifies the following cells: x x [ x x x ]",
-      "id": "TableRange",
-      "type": "object"
-    },
-    "SizeSuggestionState": {
-      "properties": {
-        "widthSuggested": {
-          "description": "Indicates if there was a suggested change to width.",
-          "type": "boolean"
-        },
-        "heightSuggested": {
-          "description": "Indicates if there was a suggested change to height.",
-          "type": "boolean"
-        }
-      },
-      "type": "object",
-      "id": "SizeSuggestionState",
-      "description": "A mask that indicates which of the fields on the base Size have been changed in this suggestion. For any field set to true, the Size has a new suggested value."
-    },
-    "ListPropertiesSuggestionState": {
-      "type": "object",
-      "properties": {
-        "nestingLevelsSuggestionStates": {
-          "description": "A mask that indicates which of the fields on the corresponding NestingLevel in nesting_levels have been changed in this suggestion. The nesting level suggestion states are returned in ascending order of the nesting level with the least nested returned first.",
-          "type": "array",
-          "items": {
-            "$ref": "NestingLevelSuggestionState"
-          }
-        }
-      },
-      "description": "A mask that indicates which of the fields on the base ListProperties have been changed in this suggestion. For any field set to true, there is a new suggested value.",
-      "id": "ListPropertiesSuggestionState"
-    },
-    "UpdateTableCellStyleRequest": {
-      "properties": {
-        "tableStartLocation": {
-          "description": "The location where the table starts in the document. When specified, the updates are applied to all the cells in the table.",
-          "$ref": "Location"
-        },
-        "tableCellStyle": {
-          "$ref": "TableCellStyle",
-          "description": "The style to set on the table cells. When updating borders, if a cell shares a border with an adjacent cell, the corresponding border property of the adjacent cell is updated as well. Borders that are merged and invisible are not updated. Since updating a border shared by adjacent cells in the same request can cause conflicting border updates, border updates are applied in the following order: - `border_right` - `border_left` - `border_bottom` - `border_top`"
-        },
-        "fields": {
-          "type": "string",
-          "format": "google-fieldmask",
-          "description": "The fields that should be updated. At least one field must be specified. The root `tableCellStyle` is implied and should not be specified. A single `\"*\"` can be used as short-hand for listing every field. For example to update the table cell background color, set `fields` to `\"backgroundColor\"`. To reset a property to its default value, include its field name in the field mask but leave the field itself unset."
-        },
-        "tableRange": {
-          "$ref": "TableRange",
-          "description": "The table range representing the subset of the table to which the updates are applied."
-        }
-      },
-      "id": "UpdateTableCellStyleRequest",
-      "type": "object",
-      "description": "Updates the style of a range of table cells."
-    },
-    "ImagePropertiesSuggestionState": {
-      "type": "object",
-      "description": "A mask that indicates which of the fields on the base ImageProperties have been changed in this suggestion. For any field set to true, there is a new suggested value.",
-      "id": "ImagePropertiesSuggestionState",
-      "properties": {
-        "cropPropertiesSuggestionState": {
-          "description": "A mask that indicates which of the fields in crop_properties have been changed in this suggestion.",
-          "$ref": "CropPropertiesSuggestionState"
-        },
-        "contentUriSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to content_uri."
-        },
-        "contrastSuggested": {
-          "description": "Indicates if there was a suggested change to contrast.",
-          "type": "boolean"
-        },
-        "sourceUriSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to source_uri."
-        },
-        "angleSuggested": {
-          "description": "Indicates if there was a suggested change to angle.",
-          "type": "boolean"
-        },
-        "transparencySuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to transparency."
-        },
-        "brightnessSuggested": {
-          "description": "Indicates if there was a suggested change to brightness.",
-          "type": "boolean"
-        }
-      }
-    },
-    "CreateFooterRequest": {
-      "properties": {
-        "type": {
-          "description": "The type of footer to create.",
-          "type": "string",
-          "enumDescriptions": [
-            "The header/footer type is unspecified.",
-            "A default header/footer."
-          ],
-          "enum": [
-            "HEADER_FOOTER_TYPE_UNSPECIFIED",
-            "DEFAULT"
-          ]
-        },
-        "sectionBreakLocation": {
-          "description": "The location of the SectionBreak immediately preceding the section whose SectionStyle this footer should belong to. If this is unset or refers to the first section break in the document, the footer applies to the document style.",
-          "$ref": "Location"
-        }
-      },
-      "id": "CreateFooterRequest",
-      "type": "object",
-      "description": "Creates a Footer. The new footer is applied to the SectionStyle at the location of the SectionBreak if specificed, otherwise it is applied to the DocumentStyle. If a footer of the specified type already exists, a 400 bad request error is returned."
-    },
-    "DeleteTableRowRequest": {
-      "type": "object",
-      "id": "DeleteTableRowRequest",
-      "description": "Deletes a row from a table.",
-      "properties": {
-        "tableCellLocation": {
-          "description": "The reference table cell location from which the row will be deleted. The row this cell spans will be deleted. If this is a merged cell that spans multiple rows, all rows that the cell spans will be deleted. If no rows remain in the table after this deletion, the whole table is deleted.",
-          "$ref": "TableCellLocation"
-        }
-      }
-    },
-    "NamedRange": {
-      "properties": {
-        "ranges": {
-          "type": "array",
-          "description": "The ranges that belong to this named range.",
-          "items": {
-            "$ref": "Range"
-          }
-        },
-        "namedRangeId": {
-          "description": "The ID of the named range.",
-          "type": "string"
-        },
-        "name": {
-          "description": "The name of the named range.",
-          "type": "string"
-        }
-      },
-      "id": "NamedRange",
-      "type": "object",
-      "description": "A collection of Ranges with the same named range ID. Named ranges allow developers to associate parts of a document with an arbitrary user-defined label so their contents can be programmatically read or edited at a later time. A document can contain multiple named ranges with the same name, but every named range has a unique ID. A named range is created with a single Range, and content inserted inside a named range generally expands that range. However, certain document changes can cause the range to be split into multiple ranges. Named ranges are not private. All applications and collaborators that have access to the document can see its named ranges."
-    },
-    "SectionBreak": {
-      "type": "object",
-      "properties": {
-        "suggestedInsertionIds": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "The suggested insertion IDs. A SectionBreak may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion."
-        },
-        "suggestedDeletionIds": {
-          "items": {
-            "type": "string"
-          },
-          "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
-          "type": "array"
-        },
-        "sectionStyle": {
-          "$ref": "SectionStyle",
-          "description": "The style of the section after this section break."
-        }
-      },
-      "description": "A StructuralElement representing a section break. A section is a range of content which has the same SectionStyle. A section break represents the start of a new section, and the section style applies to the section after the section break. The document body always begins with a section break.",
-      "id": "SectionBreak"
-    },
-    "ReplaceImageRequest": {
-      "properties": {
-        "imageReplaceMethod": {
-          "enumDescriptions": [
-            "Unspecified image replace method. This value must not be used.",
-            "Scales and centers the image to fill the bounds of the original image. The image may be cropped in order to fill the original image's bounds. The rendered size of the image will be the same as that of the original image."
-          ],
-          "description": "The replacement method.",
-          "type": "string",
-          "enum": [
-            "IMAGE_REPLACE_METHOD_UNSPECIFIED",
-            "CENTER_CROP"
-          ]
-        },
-        "uri": {
-          "description": "The URI of the new image. The image is fetched once at insertion time and a copy is stored for display inside the document. Images must be less than 50MB in size, cannot exceed 25 megapixels, and must be in one of PNG, JPEG, or GIF format. The provided URI can be at most 2 kB in length. The URI itself is saved with the image, and exposed via the ImageProperties.source_uri field.",
-          "type": "string"
-        },
-        "imageObjectId": {
-          "description": "The ID of the existing image that will be replaced.",
-          "type": "string"
-        }
-      },
-      "id": "ReplaceImageRequest",
-      "type": "object",
-      "description": "Replaces an existing image with a new image. Replacing an image removes some image effects from the existing image in order to mirror the behavior of the Docs editor."
-    },
-    "RgbColor": {
-      "type": "object",
-      "description": "An RGB color.",
-      "id": "RgbColor",
-      "properties": {
-        "blue": {
-          "type": "number",
-          "format": "float",
-          "description": "The blue component of the color, from 0.0 to 1.0."
-        },
-        "green": {
-          "description": "The green component of the color, from 0.0 to 1.0.",
-          "type": "number",
-          "format": "float"
-        },
-        "red": {
-          "description": "The red component of the color, from 0.0 to 1.0.",
-          "format": "float",
-          "type": "number"
-        }
-      }
-    },
-    "ReplaceNamedRangeContentRequest": {
-      "description": "Replaces the contents of the specified NamedRange or NamedRanges with the given replacement content. Note that an individual NamedRange may consist of multiple discontinuous ranges. In this case, only the content in the first range will be replaced. The other ranges and their content will be deleted. In cases where replacing or deleting any ranges would result in an invalid document structure, a 400 bad request error is returned.",
-      "type": "object",
-      "properties": {
-        "text": {
-          "type": "string",
-          "description": "Replaces the content of the specified named range(s) with the given text."
-        },
-        "namedRangeName": {
-          "type": "string",
-          "description": "The name of the NamedRanges whose content will be replaced. If there are multiple named ranges with the given name, then the content of each one will be replaced. If there are no named ranges with the given name, then the request will be a no-op."
-        },
-        "namedRangeId": {
-          "type": "string",
-          "description": "The ID of the named range whose content will be replaced. If there is no named range with the given ID a 400 bad request error is returned."
-        }
-      },
-      "id": "ReplaceNamedRangeContentRequest"
-    },
-    "BulletSuggestionState": {
-      "type": "object",
-      "id": "BulletSuggestionState",
-      "description": "A mask that indicates which of the fields on the base Bullet have been changed in this suggestion. For any field set to true, there is a new suggested value.",
-      "properties": {
-        "textStyleSuggestionState": {
-          "description": "A mask that indicates which of the fields in text style have been changed in this suggestion.",
-          "$ref": "TextStyleSuggestionState"
-        },
-        "listIdSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to the list_id."
-        },
-        "nestingLevelSuggested": {
-          "type": "boolean",
-          "description": "Indicates if there was a suggested change to the nesting_level."
-        }
-      }
-    },
-    "ColumnBreak": {
-      "description": "A ParagraphElement representing a column break. A column break makes the subsequent text start at the top of the next column.",
-      "type": "object",
-      "id": "ColumnBreak",
-      "properties": {
-        "textStyle": {
-          "$ref": "TextStyle",
-          "description": "The text style of this ColumnBreak. Similar to text content, like text runs and footnote references, the text style of a column break can affect content layout as well as the styling of text inserted adjacent to it."
-        },
-        "suggestedTextStyleChanges": {
-          "additionalProperties": {
-            "$ref": "SuggestedTextStyle"
-          },
-          "type": "object",
-          "description": "The suggested text style changes to this ColumnBreak, keyed by suggestion ID."
-        },
-        "suggestedDeletionIds": {
-          "type": "array",
-          "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
-          "items": {
-            "type": "string"
-          }
-        },
-        "suggestedInsertionIds": {
-          "description": "The suggested insertion IDs. A ColumnBreak may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        }
-      }
-    },
-    "BatchUpdateDocumentResponse": {
-      "description": "Response message from a BatchUpdateDocument request.",
-      "properties": {
-        "replies": {
-          "items": {
-            "$ref": "Response"
-          },
-          "description": "The reply of the updates. This maps 1:1 with the updates, although replies to some requests may be empty.",
-          "type": "array"
-        },
-        "writeControl": {
-          "description": "The updated write control after applying the request.",
-          "$ref": "WriteControl"
-        },
-        "documentId": {
-          "description": "The ID of the document to which the updates were applied to.",
-          "type": "string"
-        }
-      },
-      "id": "BatchUpdateDocumentResponse",
-      "type": "object"
-    },
-    "FootnoteReference": {
-      "properties": {
-        "textStyle": {
-          "$ref": "TextStyle",
-          "description": "The text style of this FootnoteReference."
-        },
-        "suggestedInsertionIds": {
-          "description": "The suggested insertion IDs. A FootnoteReference may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "footnoteNumber": {
-          "type": "string",
-          "description": "The rendered number of this footnote."
-        },
-        "suggestedTextStyleChanges": {
-          "type": "object",
-          "additionalProperties": {
-            "$ref": "SuggestedTextStyle"
-          },
-          "description": "The suggested text style changes to this FootnoteReference, keyed by suggestion ID."
-        },
-        "footnoteId": {
-          "type": "string",
-          "description": "The ID of the footnote that contains the content of this footnote reference."
-        },
-        "suggestedDeletionIds": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content."
-        }
-      },
-      "id": "FootnoteReference",
-      "type": "object",
-      "description": "A ParagraphElement representing a footnote reference. A footnote reference is the inline content rendered with a number and is used to identify the footnote."
-    },
-    "Color": {
-      "properties": {
-        "rgbColor": {
-          "description": "The RGB color value.",
-          "$ref": "RgbColor"
-        }
-      },
-      "type": "object",
-      "id": "Color",
-      "description": "A solid color."
-    },
-    "ParagraphBorder": {
-      "description": "A border around a paragraph.",
-      "id": "ParagraphBorder",
-      "type": "object",
-      "properties": {
-        "padding": {
-          "description": "The padding of the border.",
-          "$ref": "Dimension"
-        },
-        "dashStyle": {
-          "description": "The dash style of the border.",
-          "enumDescriptions": [
-            "Unspecified dash style.",
-            "Solid line. Corresponds to ECMA-376 ST_PresetLineDashVal value 'solid'. This is the default dash style.",
-            "Dotted line. Corresponds to ECMA-376 ST_PresetLineDashVal value 'dot'.",
-            "Dashed line. Corresponds to ECMA-376 ST_PresetLineDashVal value 'dash'."
-          ],
-          "type": "string",
-          "enum": [
-            "DASH_STYLE_UNSPECIFIED",
-            "SOLID",
-            "DOT",
-            "DASH"
-          ]
-        },
-        "width": {
-          "description": "The width of the border.",
-          "$ref": "Dimension"
-        },
-        "color": {
-          "$ref": "OptionalColor",
-          "description": "The color of the border."
-        }
-      }
-    }
-  },
-  "description": "Reads and writes Google Docs documents.",
-  "title": "Google Docs API",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "kind": "discovery#restDescription",
-  "discoveryVersion": "v1",
-  "rootUrl": "https://docs.googleapis.com/",
-  "baseUrl": "https://docs.googleapis.com/",
-  "ownerName": "Google",
-  "parameters": {
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "location": "query",
-      "default": "true"
-    },
-    "alt": {
-      "type": "string",
-      "default": "json",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "location": "query",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "description": "Data format for response."
-    },
-    "$.xgafv": {
-      "type": "string",
-      "description": "V1 error format.",
-      "location": "query",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "enum": [
-        "1",
-        "2"
-      ]
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "location": "query",
-      "type": "string"
-    },
-    "fields": {
-      "type": "string",
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response."
-    },
-    "callback": {
-      "type": "string",
-      "location": "query",
-      "description": "JSONP"
-    },
-    "quotaUser": {
-      "type": "string",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "location": "query"
-    },
-    "key": {
-      "location": "query",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "type": "string"
-    },
-    "access_token": {
-      "description": "OAuth access token.",
-      "location": "query",
-      "type": "string"
-    },
-    "upload_protocol": {
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "location": "query"
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    }
-  },
-  "mtlsRootUrl": "https://docs.mtls.googleapis.com/",
-  "resources": {
-    "documents": {
-      "methods": {
-        "create": {
-          "path": "v1/documents",
-          "response": {
-            "$ref": "Document"
-          },
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/documents",
-            "https://www.googleapis.com/auth/drive",
-            "https://www.googleapis.com/auth/drive.file"
-          ],
-          "request": {
-            "$ref": "Document"
-          },
-          "parameters": {},
-          "parameterOrder": [],
-          "flatPath": "v1/documents",
-          "description": "Creates a blank document using the title given in the request. Other fields in the request, including any provided content, are ignored. Returns the created document.",
-          "id": "docs.documents.create"
-        },
-        "batchUpdate": {
-          "id": "docs.documents.batchUpdate",
-          "flatPath": "v1/documents/{documentId}:batchUpdate",
-          "request": {
-            "$ref": "BatchUpdateDocumentRequest"
-          },
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/documents",
-            "https://www.googleapis.com/auth/drive",
-            "https://www.googleapis.com/auth/drive.file"
-          ],
-          "parameterOrder": [
-            "documentId"
-          ],
-          "response": {
-            "$ref": "BatchUpdateDocumentResponse"
-          },
-          "description": "Applies one or more updates to the document. Each request is validated before being applied. If any request is not valid, then the entire request will fail and nothing will be applied. Some requests have replies to give you some information about how they are applied. Other requests do not need to return information; these each return an empty reply. The order of replies matches that of the requests. For example, suppose you call batchUpdate with four updates, and only the third one returns information. The response would have two empty replies, the reply to the third request, and another empty reply, in that order. Because other users may be editing the document, the document might not exactly reflect your changes: your changes may be altered with respect to collaborator changes. If there are no collaborators, the document should reflect your changes. In any case, the updates in your request are guaranteed to be applied together atomically.",
-          "parameters": {
-            "documentId": {
-              "location": "path",
-              "description": "The ID of the document to update.",
-              "type": "string",
-              "required": true
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/documents": {
+                    "description": "See, create, and edit all Google Docs documents you have access to"
+                },
+                "https://www.googleapis.com/auth/documents.readonly": {
+                    "description": "View your Google Docs documents"
+                },
+                "https://www.googleapis.com/auth/drive": {
+                    "description": "See, edit, create, and delete all of your Google Drive files"
+                },
+                "https://www.googleapis.com/auth/drive.file": {
+                    "description": "View and manage Google Drive files and folders that you have opened or created with this app"
+                },
+                "https://www.googleapis.com/auth/drive.readonly": {
+                    "description": "See and download all your Google Drive files"
+                }
             }
-          },
-          "path": "v1/documents/{documentId}:batchUpdate"
+        }
+    },
+    "basePath": "",
+    "baseUrl": "https://docs.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Docs",
+    "description": "Reads and writes Google Docs documents.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://developers.google.com/docs/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "docs:v1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://docs.mtls.googleapis.com/",
+    "name": "docs",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "get": {
-          "path": "v1/documents/{documentId}",
-          "response": {
-            "$ref": "Document"
-          },
-          "flatPath": "v1/documents/{documentId}",
-          "parameterOrder": [
-            "documentId"
-          ],
-          "description": "Gets the latest version of the specified document.",
-          "parameters": {
-            "documentId": {
-              "type": "string",
-              "required": true,
-              "description": "The ID of the document to retrieve.",
-              "location": "path"
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        }
+    },
+    "protocol": "rest",
+    "resources": {
+        "documents": {
+            "methods": {
+                "batchUpdate": {
+                    "description": "Applies one or more updates to the document. Each request is validated before being applied. If any request is not valid, then the entire request will fail and nothing will be applied. Some requests have replies to give you some information about how they are applied. Other requests do not need to return information; these each return an empty reply. The order of replies matches that of the requests. For example, suppose you call batchUpdate with four updates, and only the third one returns information. The response would have two empty replies, the reply to the third request, and another empty reply, in that order. Because other users may be editing the document, the document might not exactly reflect your changes: your changes may be altered with respect to collaborator changes. If there are no collaborators, the document should reflect your changes. In any case, the updates in your request are guaranteed to be applied together atomically.",
+                    "flatPath": "v1/documents/{documentId}:batchUpdate",
+                    "httpMethod": "POST",
+                    "id": "docs.documents.batchUpdate",
+                    "parameterOrder": [
+                        "documentId"
+                    ],
+                    "parameters": {
+                        "documentId": {
+                            "description": "The ID of the document to update.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/documents/{documentId}:batchUpdate",
+                    "request": {
+                        "$ref": "BatchUpdateDocumentRequest"
+                    },
+                    "response": {
+                        "$ref": "BatchUpdateDocumentResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/documents",
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "create": {
+                    "description": "Creates a blank document using the title given in the request. Other fields in the request, including any provided content, are ignored. Returns the created document.",
+                    "flatPath": "v1/documents",
+                    "httpMethod": "POST",
+                    "id": "docs.documents.create",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v1/documents",
+                    "request": {
+                        "$ref": "Document"
+                    },
+                    "response": {
+                        "$ref": "Document"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/documents",
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "get": {
+                    "description": "Gets the latest version of the specified document.",
+                    "flatPath": "v1/documents/{documentId}",
+                    "httpMethod": "GET",
+                    "id": "docs.documents.get",
+                    "parameterOrder": [
+                        "documentId"
+                    ],
+                    "parameters": {
+                        "documentId": {
+                            "description": "The ID of the document to retrieve.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "suggestionsViewMode": {
+                            "description": "The suggestions view mode to apply to the document. This allows viewing the document with all suggestions inline, accepted or rejected. If one is not specified, DEFAULT_FOR_CURRENT_ACCESS is used.",
+                            "enum": [
+                                "DEFAULT_FOR_CURRENT_ACCESS",
+                                "SUGGESTIONS_INLINE",
+                                "PREVIEW_SUGGESTIONS_ACCEPTED",
+                                "PREVIEW_WITHOUT_SUGGESTIONS"
+                            ],
+                            "enumDescriptions": [
+                                "The SuggestionsViewMode applied to the returned document depends on the user's current access level. If the user only has view access, PREVIEW_WITHOUT_SUGGESTIONS is applied. Otherwise, SUGGESTIONS_INLINE is applied. This is the default suggestions view mode.",
+                                "The returned document has suggestions inline. Suggested changes will be differentiated from base content within the document. Requests to retrieve a document using this mode will return a 403 error if the user does not have permission to view suggested changes.",
+                                "The returned document is a preview with all suggested changes accepted. Requests to retrieve a document using this mode will return a 403 error if the user does not have permission to view suggested changes.",
+                                "The returned document is a preview with all suggested changes rejected if there are any suggestions in the document."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/documents/{documentId}",
+                    "response": {
+                        "$ref": "Document"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/documents",
+                        "https://www.googleapis.com/auth/documents.readonly",
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                }
+            }
+        }
+    },
+    "revision": "20210211",
+    "rootUrl": "https://docs.googleapis.com/",
+    "schemas": {
+        "AutoText": {
+            "description": "A ParagraphElement representing a spot in the text that is dynamically replaced with content that can change over time, like a page number.",
+            "id": "AutoText",
+            "properties": {
+                "suggestedDeletionIds": {
+                    "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedInsertionIds": {
+                    "description": "The suggested insertion IDs. An AutoText may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedTextStyleChanges": {
+                    "additionalProperties": {
+                        "$ref": "SuggestedTextStyle"
+                    },
+                    "description": "The suggested text style changes to this AutoText, keyed by suggestion ID.",
+                    "type": "object"
+                },
+                "textStyle": {
+                    "$ref": "TextStyle",
+                    "description": "The text style of this AutoText."
+                },
+                "type": {
+                    "description": "The type of this auto text.",
+                    "enum": [
+                        "TYPE_UNSPECIFIED",
+                        "PAGE_NUMBER",
+                        "PAGE_COUNT"
+                    ],
+                    "enumDescriptions": [
+                        "An unspecified auto text type.",
+                        "Type for auto text that represents the current page number.",
+                        "Type for auto text that represents the total number of pages in the document."
+                    ],
+                    "type": "string"
+                }
             },
-            "suggestionsViewMode": {
-              "description": "The suggestions view mode to apply to the document. This allows viewing the document with all suggestions inline, accepted or rejected. If one is not specified, DEFAULT_FOR_CURRENT_ACCESS is used.",
-              "enumDescriptions": [
-                "The SuggestionsViewMode applied to the returned document depends on the user's current access level. If the user only has view access, PREVIEW_WITHOUT_SUGGESTIONS is applied. Otherwise, SUGGESTIONS_INLINE is applied. This is the default suggestions view mode.",
-                "The returned document has suggestions inline. Suggested changes will be differentiated from base content within the document. Requests to retrieve a document using this mode will return a 403 error if the user does not have permission to view suggested changes.",
-                "The returned document is a preview with all suggested changes accepted. Requests to retrieve a document using this mode will return a 403 error if the user does not have permission to view suggested changes.",
-                "The returned document is a preview with all suggested changes rejected if there are any suggestions in the document."
-              ],
-              "type": "string",
-              "enum": [
-                "DEFAULT_FOR_CURRENT_ACCESS",
-                "SUGGESTIONS_INLINE",
-                "PREVIEW_SUGGESTIONS_ACCEPTED",
-                "PREVIEW_WITHOUT_SUGGESTIONS"
-              ],
-              "location": "query"
-            }
-          },
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/documents",
-            "https://www.googleapis.com/auth/documents.readonly",
-            "https://www.googleapis.com/auth/drive",
-            "https://www.googleapis.com/auth/drive.file",
-            "https://www.googleapis.com/auth/drive.readonly"
-          ],
-          "id": "docs.documents.get"
+            "type": "object"
+        },
+        "Background": {
+            "description": "Represents the background of a document.",
+            "id": "Background",
+            "properties": {
+                "color": {
+                    "$ref": "OptionalColor",
+                    "description": "The background color."
+                }
+            },
+            "type": "object"
+        },
+        "BackgroundSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base Background have been changed in this suggestion. For any field set to true, the Backgound has a new suggested value.",
+            "id": "BackgroundSuggestionState",
+            "properties": {
+                "backgroundColorSuggested": {
+                    "description": "Indicates whether the current background color has been modified in this suggestion.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "BatchUpdateDocumentRequest": {
+            "description": "Request message for BatchUpdateDocument.",
+            "id": "BatchUpdateDocumentRequest",
+            "properties": {
+                "requests": {
+                    "description": "A list of updates to apply to the document.",
+                    "items": {
+                        "$ref": "Request"
+                    },
+                    "type": "array"
+                },
+                "writeControl": {
+                    "$ref": "WriteControl",
+                    "description": "Provides control over how write requests are executed."
+                }
+            },
+            "type": "object"
+        },
+        "BatchUpdateDocumentResponse": {
+            "description": "Response message from a BatchUpdateDocument request.",
+            "id": "BatchUpdateDocumentResponse",
+            "properties": {
+                "documentId": {
+                    "description": "The ID of the document to which the updates were applied to.",
+                    "type": "string"
+                },
+                "replies": {
+                    "description": "The reply of the updates. This maps 1:1 with the updates, although replies to some requests may be empty.",
+                    "items": {
+                        "$ref": "Response"
+                    },
+                    "type": "array"
+                },
+                "writeControl": {
+                    "$ref": "WriteControl",
+                    "description": "The updated write control after applying the request."
+                }
+            },
+            "type": "object"
+        },
+        "Body": {
+            "description": "The document body. The body typically contains the full document contents except for headers, footers and footnotes.",
+            "id": "Body",
+            "properties": {
+                "content": {
+                    "description": "The contents of the body. The indexes for the body's content begin at zero.",
+                    "items": {
+                        "$ref": "StructuralElement"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Bullet": {
+            "description": "Describes the bullet of a paragraph.",
+            "id": "Bullet",
+            "properties": {
+                "listId": {
+                    "description": "The ID of the list this paragraph belongs to.",
+                    "type": "string"
+                },
+                "nestingLevel": {
+                    "description": "The nesting level of this paragraph in the list.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "textStyle": {
+                    "$ref": "TextStyle",
+                    "description": "The paragraph specific text style applied to this bullet."
+                }
+            },
+            "type": "object"
+        },
+        "BulletSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base Bullet have been changed in this suggestion. For any field set to true, there is a new suggested value.",
+            "id": "BulletSuggestionState",
+            "properties": {
+                "listIdSuggested": {
+                    "description": "Indicates if there was a suggested change to the list_id.",
+                    "type": "boolean"
+                },
+                "nestingLevelSuggested": {
+                    "description": "Indicates if there was a suggested change to the nesting_level.",
+                    "type": "boolean"
+                },
+                "textStyleSuggestionState": {
+                    "$ref": "TextStyleSuggestionState",
+                    "description": "A mask that indicates which of the fields in text style have been changed in this suggestion."
+                }
+            },
+            "type": "object"
+        },
+        "Color": {
+            "description": "A solid color.",
+            "id": "Color",
+            "properties": {
+                "rgbColor": {
+                    "$ref": "RgbColor",
+                    "description": "The RGB color value."
+                }
+            },
+            "type": "object"
+        },
+        "ColumnBreak": {
+            "description": "A ParagraphElement representing a column break. A column break makes the subsequent text start at the top of the next column.",
+            "id": "ColumnBreak",
+            "properties": {
+                "suggestedDeletionIds": {
+                    "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedInsertionIds": {
+                    "description": "The suggested insertion IDs. A ColumnBreak may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedTextStyleChanges": {
+                    "additionalProperties": {
+                        "$ref": "SuggestedTextStyle"
+                    },
+                    "description": "The suggested text style changes to this ColumnBreak, keyed by suggestion ID.",
+                    "type": "object"
+                },
+                "textStyle": {
+                    "$ref": "TextStyle",
+                    "description": "The text style of this ColumnBreak. Similar to text content, like text runs and footnote references, the text style of a column break can affect content layout as well as the styling of text inserted adjacent to it."
+                }
+            },
+            "type": "object"
+        },
+        "CreateFooterRequest": {
+            "description": "Creates a Footer. The new footer is applied to the SectionStyle at the location of the SectionBreak if specificed, otherwise it is applied to the DocumentStyle. If a footer of the specified type already exists, a 400 bad request error is returned.",
+            "id": "CreateFooterRequest",
+            "properties": {
+                "sectionBreakLocation": {
+                    "$ref": "Location",
+                    "description": "The location of the SectionBreak immediately preceding the section whose SectionStyle this footer should belong to. If this is unset or refers to the first section break in the document, the footer applies to the document style."
+                },
+                "type": {
+                    "description": "The type of footer to create.",
+                    "enum": [
+                        "HEADER_FOOTER_TYPE_UNSPECIFIED",
+                        "DEFAULT"
+                    ],
+                    "enumDescriptions": [
+                        "The header/footer type is unspecified.",
+                        "A default header/footer."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreateFooterResponse": {
+            "description": "The result of creating a footer.",
+            "id": "CreateFooterResponse",
+            "properties": {
+                "footerId": {
+                    "description": "The ID of the created footer.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreateFootnoteRequest": {
+            "description": "Creates a Footnote segment and inserts a new FootnoteReference to it at the given location. The new Footnote segment will contain a space followed by a newline character.",
+            "id": "CreateFootnoteRequest",
+            "properties": {
+                "endOfSegmentLocation": {
+                    "$ref": "EndOfSegmentLocation",
+                    "description": "Inserts the footnote reference at the end of the document body. Footnote references cannot be inserted inside a header, footer or footnote. Since footnote references can only be inserted in the body, the segment ID field must be empty."
+                },
+                "location": {
+                    "$ref": "Location",
+                    "description": "Inserts the footnote reference at a specific index in the document. The footnote reference must be inserted inside the bounds of an existing Paragraph. For instance, it cannot be inserted at a table's start index (i.e. between the table and its preceding paragraph). Footnote references cannot be inserted inside an equation, header, footer or footnote. Since footnote references can only be inserted in the body, the segment ID field must be empty."
+                }
+            },
+            "type": "object"
+        },
+        "CreateFootnoteResponse": {
+            "description": "The result of creating a footnote.",
+            "id": "CreateFootnoteResponse",
+            "properties": {
+                "footnoteId": {
+                    "description": "The ID of the created footnote.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreateHeaderRequest": {
+            "description": "Creates a Header. The new header is applied to the SectionStyle at the location of the SectionBreak if specificed, otherwise it is applied to the DocumentStyle. If a header of the specified type already exists, a 400 bad request error is returned.",
+            "id": "CreateHeaderRequest",
+            "properties": {
+                "sectionBreakLocation": {
+                    "$ref": "Location",
+                    "description": "The location of the SectionBreak which begins the section this header should belong to. If `section_break_location' is unset or if it refers to the first section break in the document body, the header applies to the DocumentStyle"
+                },
+                "type": {
+                    "description": "The type of header to create.",
+                    "enum": [
+                        "HEADER_FOOTER_TYPE_UNSPECIFIED",
+                        "DEFAULT"
+                    ],
+                    "enumDescriptions": [
+                        "The header/footer type is unspecified.",
+                        "A default header/footer."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreateHeaderResponse": {
+            "description": "The result of creating a header.",
+            "id": "CreateHeaderResponse",
+            "properties": {
+                "headerId": {
+                    "description": "The ID of the created header.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreateNamedRangeRequest": {
+            "description": "Creates a NamedRange referencing the given range.",
+            "id": "CreateNamedRangeRequest",
+            "properties": {
+                "name": {
+                    "description": "The name of the NamedRange. Names do not need to be unique. Names must be at least 1 character and no more than 256 characters, measured in UTF-16 code units.",
+                    "type": "string"
+                },
+                "range": {
+                    "$ref": "Range",
+                    "description": "The range to apply the name to."
+                }
+            },
+            "type": "object"
+        },
+        "CreateNamedRangeResponse": {
+            "description": "The result of creating a named range.",
+            "id": "CreateNamedRangeResponse",
+            "properties": {
+                "namedRangeId": {
+                    "description": "The ID of the created named range.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CreateParagraphBulletsRequest": {
+            "description": "Creates bullets for all of the paragraphs that overlap with the given range. The nesting level of each paragraph will be determined by counting leading tabs in front of each paragraph. To avoid excess space between the bullet and the corresponding paragraph, these leading tabs are removed by this request. This may change the indices of parts of the text. If the paragraph immediately before paragraphs being updated is in a list with a matching preset, the paragraphs being updated are added to that preceding list.",
+            "id": "CreateParagraphBulletsRequest",
+            "properties": {
+                "bulletPreset": {
+                    "description": "The kinds of bullet glyphs to be used.",
+                    "enum": [
+                        "BULLET_GLYPH_PRESET_UNSPECIFIED",
+                        "BULLET_DISC_CIRCLE_SQUARE",
+                        "BULLET_DIAMONDX_ARROW3D_SQUARE",
+                        "BULLET_CHECKBOX",
+                        "BULLET_ARROW_DIAMOND_DISC",
+                        "BULLET_STAR_CIRCLE_SQUARE",
+                        "BULLET_ARROW3D_CIRCLE_SQUARE",
+                        "BULLET_LEFTTRIANGLE_DIAMOND_DISC",
+                        "BULLET_DIAMONDX_HOLLOWDIAMOND_SQUARE",
+                        "BULLET_DIAMOND_CIRCLE_SQUARE",
+                        "NUMBERED_DECIMAL_ALPHA_ROMAN",
+                        "NUMBERED_DECIMAL_ALPHA_ROMAN_PARENS",
+                        "NUMBERED_DECIMAL_NESTED",
+                        "NUMBERED_UPPERALPHA_ALPHA_ROMAN",
+                        "NUMBERED_UPPERROMAN_UPPERALPHA_DECIMAL",
+                        "NUMBERED_ZERODECIMAL_ALPHA_ROMAN"
+                    ],
+                    "enumDescriptions": [
+                        "The bullet glyph preset is unspecified.",
+                        "A bulleted list with a `DISC`, `CIRCLE` and `SQUARE` bullet glyph for the first 3 list nesting levels.",
+                        "A bulleted list with a `DIAMONDX`, `ARROW3D` and `SQUARE` bullet glyph for the first 3 list nesting levels.",
+                        "A bulleted list with `CHECKBOX` bullet glyphs for all list nesting levels.",
+                        "A bulleted list with a `ARROW`, `DIAMOND` and `DISC` bullet glyph for the first 3 list nesting levels.",
+                        "A bulleted list with a `STAR`, `CIRCLE` and `SQUARE` bullet glyph for the first 3 list nesting levels.",
+                        "A bulleted list with a `ARROW3D`, `CIRCLE` and `SQUARE` bullet glyph for the first 3 list nesting levels.",
+                        "A bulleted list with a `LEFTTRIANGLE`, `DIAMOND` and `DISC` bullet glyph for the first 3 list nesting levels.",
+                        "A bulleted list with a `DIAMONDX`, `HOLLOWDIAMOND` and `SQUARE` bullet glyph for the first 3 list nesting levels.",
+                        "A bulleted list with a `DIAMOND`, `CIRCLE` and `SQUARE` bullet glyph for the first 3 list nesting levels.",
+                        "A numbered list with `DECIMAL`, `ALPHA` and `ROMAN` numeric glyphs for the first 3 list nesting levels, followed by periods.",
+                        "A numbered list with `DECIMAL`, `ALPHA` and `ROMAN` numeric glyphs for the first 3 list nesting levels, followed by parenthesis.",
+                        "A numbered list with `DECIMAL` numeric glyphs separated by periods, where each nesting level uses the previous nesting level's glyph as a prefix. For example: '1.', '1.1.', '2.', '2.2.'.",
+                        "A numbered list with `UPPERALPHA`, `ALPHA` and `ROMAN` numeric glyphs for the first 3 list nesting levels, followed by periods.",
+                        "A numbered list with `UPPERROMAN`, `UPPERALPHA` and `DECIMAL` numeric glyphs for the first 3 list nesting levels, followed by periods.",
+                        "A numbered list with `ZERODECIMAL`, `ALPHA` and `ROMAN` numeric glyphs for the first 3 list nesting levels, followed by periods."
+                    ],
+                    "type": "string"
+                },
+                "range": {
+                    "$ref": "Range",
+                    "description": "The range to apply the bullet preset to."
+                }
+            },
+            "type": "object"
+        },
+        "CropProperties": {
+            "description": "The crop properties of an image. The crop rectangle is represented using fractional offsets from the original content's four edges. - If the offset is in the interval (0, 1), the corresponding edge of crop rectangle is positioned inside of the image's original bounding rectangle. - If the offset is negative or greater than 1, the corresponding edge of crop rectangle is positioned outside of the image's original bounding rectangle. - If all offsets and rotation angle are 0, the image is not cropped.",
+            "id": "CropProperties",
+            "properties": {
+                "angle": {
+                    "description": "The clockwise rotation angle of the crop rectangle around its center, in radians. Rotation is applied after the offsets.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "offsetBottom": {
+                    "description": "The offset specifies how far inwards the bottom edge of the crop rectangle is from the bottom edge of the original content as a fraction of the original content's height.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "offsetLeft": {
+                    "description": "The offset specifies how far inwards the left edge of the crop rectangle is from the left edge of the original content as a fraction of the original content's width.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "offsetRight": {
+                    "description": "The offset specifies how far inwards the right edge of the crop rectangle is from the right edge of the original content as a fraction of the original content's width.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "offsetTop": {
+                    "description": "The offset specifies how far inwards the top edge of the crop rectangle is from the top edge of the original content as a fraction of the original content's height.",
+                    "format": "float",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "CropPropertiesSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base CropProperties have been changed in this suggestion. For any field set to true, there is a new suggested value.",
+            "id": "CropPropertiesSuggestionState",
+            "properties": {
+                "angleSuggested": {
+                    "description": "Indicates if there was a suggested change to angle.",
+                    "type": "boolean"
+                },
+                "offsetBottomSuggested": {
+                    "description": "Indicates if there was a suggested change to offset_bottom.",
+                    "type": "boolean"
+                },
+                "offsetLeftSuggested": {
+                    "description": "Indicates if there was a suggested change to offset_left.",
+                    "type": "boolean"
+                },
+                "offsetRightSuggested": {
+                    "description": "Indicates if there was a suggested change to offset_right.",
+                    "type": "boolean"
+                },
+                "offsetTopSuggested": {
+                    "description": "Indicates if there was a suggested change to offset_top.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "DeleteContentRangeRequest": {
+            "description": "Deletes content from the document.",
+            "id": "DeleteContentRangeRequest",
+            "properties": {
+                "range": {
+                    "$ref": "Range",
+                    "description": "The range of content to delete. Deleting text that crosses a paragraph boundary may result in changes to paragraph styles, lists, positioned objects and bookmarks as the two paragraphs are merged. Attempting to delete certain ranges can result in an invalid document structure in which case a 400 bad request error is returned. Some examples of invalid delete requests include: * Deleting one code unit of a surrogate pair. * Deleting the last newline character of a Body, Header, Footer, Footnote, TableCell or TableOfContents. * Deleting the start or end of a Table, TableOfContents or Equation without deleting the entire element. * Deleting the newline character before a Table, TableOfContents or SectionBreak without deleting the element. * Deleting individual rows or cells of a table. Deleting the content within a table cell is allowed."
+                }
+            },
+            "type": "object"
+        },
+        "DeleteFooterRequest": {
+            "description": "Deletes a Footer from the document.",
+            "id": "DeleteFooterRequest",
+            "properties": {
+                "footerId": {
+                    "description": "The id of the footer to delete. If this footer is defined on DocumentStyle, the reference to this footer is removed, resulting in no footer of that type for the first section of the document. If this footer is defined on a SectionStyle, the reference to this footer is removed and the footer of that type is now continued from the previous section.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DeleteHeaderRequest": {
+            "description": "Deletes a Header from the document.",
+            "id": "DeleteHeaderRequest",
+            "properties": {
+                "headerId": {
+                    "description": "The id of the header to delete. If this header is defined on DocumentStyle, the reference to this header is removed, resulting in no header of that type for the first section of the document. If this header is defined on a SectionStyle, the reference to this header is removed and the header of that type is now continued from the previous section.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DeleteNamedRangeRequest": {
+            "description": "Deletes a NamedRange.",
+            "id": "DeleteNamedRangeRequest",
+            "properties": {
+                "name": {
+                    "description": "The name of the range(s) to delete. All named ranges with the given name will be deleted.",
+                    "type": "string"
+                },
+                "namedRangeId": {
+                    "description": "The ID of the named range to delete.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DeleteParagraphBulletsRequest": {
+            "description": "Deletes bullets from all of the paragraphs that overlap with the given range. The nesting level of each paragraph will be visually preserved by adding indent to the start of the corresponding paragraph.",
+            "id": "DeleteParagraphBulletsRequest",
+            "properties": {
+                "range": {
+                    "$ref": "Range",
+                    "description": "The range to delete bullets from."
+                }
+            },
+            "type": "object"
+        },
+        "DeletePositionedObjectRequest": {
+            "description": "Deletes a PositionedObject from the document.",
+            "id": "DeletePositionedObjectRequest",
+            "properties": {
+                "objectId": {
+                    "description": "The ID of the positioned object to delete.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DeleteTableColumnRequest": {
+            "description": "Deletes a column from a table.",
+            "id": "DeleteTableColumnRequest",
+            "properties": {
+                "tableCellLocation": {
+                    "$ref": "TableCellLocation",
+                    "description": "The reference table cell location from which the column will be deleted. The column this cell spans will be deleted. If this is a merged cell that spans multiple columns, all columns that the cell spans will be deleted. If no columns remain in the table after this deletion, the whole table is deleted."
+                }
+            },
+            "type": "object"
+        },
+        "DeleteTableRowRequest": {
+            "description": "Deletes a row from a table.",
+            "id": "DeleteTableRowRequest",
+            "properties": {
+                "tableCellLocation": {
+                    "$ref": "TableCellLocation",
+                    "description": "The reference table cell location from which the row will be deleted. The row this cell spans will be deleted. If this is a merged cell that spans multiple rows, all rows that the cell spans will be deleted. If no rows remain in the table after this deletion, the whole table is deleted."
+                }
+            },
+            "type": "object"
+        },
+        "Dimension": {
+            "description": "A magnitude in a single direction in the specified units.",
+            "id": "Dimension",
+            "properties": {
+                "magnitude": {
+                    "description": "The magnitude.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "unit": {
+                    "description": "The units for magnitude.",
+                    "enum": [
+                        "UNIT_UNSPECIFIED",
+                        "PT"
+                    ],
+                    "enumDescriptions": [
+                        "The units are unknown.",
+                        "A point, 1/72 of an inch."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Document": {
+            "description": "A Google Docs document.",
+            "id": "Document",
+            "properties": {
+                "body": {
+                    "$ref": "Body",
+                    "description": "Output only. The main body of the document."
+                },
+                "documentId": {
+                    "description": "Output only. The ID of the document.",
+                    "type": "string"
+                },
+                "documentStyle": {
+                    "$ref": "DocumentStyle",
+                    "description": "Output only. The style of the document."
+                },
+                "footers": {
+                    "additionalProperties": {
+                        "$ref": "Footer"
+                    },
+                    "description": "Output only. The footers in the document, keyed by footer ID.",
+                    "type": "object"
+                },
+                "footnotes": {
+                    "additionalProperties": {
+                        "$ref": "Footnote"
+                    },
+                    "description": "Output only. The footnotes in the document, keyed by footnote ID.",
+                    "type": "object"
+                },
+                "headers": {
+                    "additionalProperties": {
+                        "$ref": "Header"
+                    },
+                    "description": "Output only. The headers in the document, keyed by header ID.",
+                    "type": "object"
+                },
+                "inlineObjects": {
+                    "additionalProperties": {
+                        "$ref": "InlineObject"
+                    },
+                    "description": "Output only. The inline objects in the document, keyed by object ID.",
+                    "type": "object"
+                },
+                "lists": {
+                    "additionalProperties": {
+                        "$ref": "List"
+                    },
+                    "description": "Output only. The lists in the document, keyed by list ID.",
+                    "type": "object"
+                },
+                "namedRanges": {
+                    "additionalProperties": {
+                        "$ref": "NamedRanges"
+                    },
+                    "description": "Output only. The named ranges in the document, keyed by name.",
+                    "type": "object"
+                },
+                "namedStyles": {
+                    "$ref": "NamedStyles",
+                    "description": "Output only. The named styles of the document."
+                },
+                "positionedObjects": {
+                    "additionalProperties": {
+                        "$ref": "PositionedObject"
+                    },
+                    "description": "Output only. The positioned objects in the document, keyed by object ID.",
+                    "type": "object"
+                },
+                "revisionId": {
+                    "description": "Output only. The revision ID of the document. Can be used in update requests to specify which revision of a document to apply updates to and how the request should behave if the document has been edited since that revision. Only populated if the user has edit access to the document. The format of the revision ID may change over time, so it should be treated opaquely. A returned revision ID is only guaranteed to be valid for 24 hours after it has been returned and cannot be shared across users. If the revision ID is unchanged between calls, then the document has not changed. Conversely, a changed ID (for the same document and user) usually means the document has been updated; however, a changed ID can also be due to internal factors such as ID format changes.",
+                    "type": "string"
+                },
+                "suggestedDocumentStyleChanges": {
+                    "additionalProperties": {
+                        "$ref": "SuggestedDocumentStyle"
+                    },
+                    "description": "Output only. The suggested changes to the style of the document, keyed by suggestion ID.",
+                    "type": "object"
+                },
+                "suggestedNamedStylesChanges": {
+                    "additionalProperties": {
+                        "$ref": "SuggestedNamedStyles"
+                    },
+                    "description": "Output only. The suggested changes to the named styles of the document, keyed by suggestion ID.",
+                    "type": "object"
+                },
+                "suggestionsViewMode": {
+                    "description": "Output only. The suggestions view mode applied to the document. Note: When editing a document, changes must be based on a document with SUGGESTIONS_INLINE.",
+                    "enum": [
+                        "DEFAULT_FOR_CURRENT_ACCESS",
+                        "SUGGESTIONS_INLINE",
+                        "PREVIEW_SUGGESTIONS_ACCEPTED",
+                        "PREVIEW_WITHOUT_SUGGESTIONS"
+                    ],
+                    "enumDescriptions": [
+                        "The SuggestionsViewMode applied to the returned document depends on the user's current access level. If the user only has view access, PREVIEW_WITHOUT_SUGGESTIONS is applied. Otherwise, SUGGESTIONS_INLINE is applied. This is the default suggestions view mode.",
+                        "The returned document has suggestions inline. Suggested changes will be differentiated from base content within the document. Requests to retrieve a document using this mode will return a 403 error if the user does not have permission to view suggested changes.",
+                        "The returned document is a preview with all suggested changes accepted. Requests to retrieve a document using this mode will return a 403 error if the user does not have permission to view suggested changes.",
+                        "The returned document is a preview with all suggested changes rejected if there are any suggestions in the document."
+                    ],
+                    "type": "string"
+                },
+                "title": {
+                    "description": "The title of the document.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DocumentStyle": {
+            "description": "The style of the document.",
+            "id": "DocumentStyle",
+            "properties": {
+                "background": {
+                    "$ref": "Background",
+                    "description": "The background of the document. Documents cannot have a transparent background color."
+                },
+                "defaultFooterId": {
+                    "description": "The ID of the default footer. If not set, there is no default footer. This property is read-only.",
+                    "type": "string"
+                },
+                "defaultHeaderId": {
+                    "description": "The ID of the default header. If not set, there is no default header. This property is read-only.",
+                    "type": "string"
+                },
+                "evenPageFooterId": {
+                    "description": "The ID of the footer used only for even pages. The value of use_even_page_header_footer determines whether to use the default_footer_id or this value for the footer on even pages. If not set, there is no even page footer. This property is read-only.",
+                    "type": "string"
+                },
+                "evenPageHeaderId": {
+                    "description": "The ID of the header used only for even pages. The value of use_even_page_header_footer determines whether to use the default_header_id or this value for the header on even pages. If not set, there is no even page header. This property is read-only.",
+                    "type": "string"
+                },
+                "firstPageFooterId": {
+                    "description": "The ID of the footer used only for the first page. If not set then a unique footer for the first page does not exist. The value of use_first_page_header_footer determines whether to use the default_footer_id or this value for the footer on the first page. If not set, there is no first page footer. This property is read-only.",
+                    "type": "string"
+                },
+                "firstPageHeaderId": {
+                    "description": "The ID of the header used only for the first page. If not set then a unique header for the first page does not exist. The value of use_first_page_header_footer determines whether to use the default_header_id or this value for the header on the first page. If not set, there is no first page header. This property is read-only.",
+                    "type": "string"
+                },
+                "marginBottom": {
+                    "$ref": "Dimension",
+                    "description": "The bottom page margin. Updating the bottom page margin on the document style clears the bottom page margin on all section styles."
+                },
+                "marginFooter": {
+                    "$ref": "Dimension",
+                    "description": "The amount of space between the bottom of the page and the contents of the footer."
+                },
+                "marginHeader": {
+                    "$ref": "Dimension",
+                    "description": "The amount of space between the top of the page and the contents of the header."
+                },
+                "marginLeft": {
+                    "$ref": "Dimension",
+                    "description": "The left page margin. Updating the left page margin on the document style clears the left page margin on all section styles. It may also cause columns to resize in all sections."
+                },
+                "marginRight": {
+                    "$ref": "Dimension",
+                    "description": "The right page margin. Updating the right page margin on the document style clears the right page margin on all section styles. It may also cause columns to resize in all sections."
+                },
+                "marginTop": {
+                    "$ref": "Dimension",
+                    "description": "The top page margin. Updating the top page margin on the document style clears the top page margin on all section styles."
+                },
+                "pageNumberStart": {
+                    "description": "The page number from which to start counting the number of pages.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "pageSize": {
+                    "$ref": "Size",
+                    "description": "The size of a page in the document."
+                },
+                "useCustomHeaderFooterMargins": {
+                    "description": "Indicates whether DocumentStyle margin_header, SectionStyle margin_header and DocumentStyle margin_footer, SectionStyle margin_footer are respected. When false, the default values in the Docs editor for header and footer margin are used. This property is read-only.",
+                    "type": "boolean"
+                },
+                "useEvenPageHeaderFooter": {
+                    "description": "Indicates whether to use the even page header / footer IDs for the even pages.",
+                    "type": "boolean"
+                },
+                "useFirstPageHeaderFooter": {
+                    "description": "Indicates whether to use the first page header / footer IDs for the first page.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "DocumentStyleSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base DocumentStyle have been changed in this suggestion. For any field set to true, there is a new suggested value.",
+            "id": "DocumentStyleSuggestionState",
+            "properties": {
+                "backgroundSuggestionState": {
+                    "$ref": "BackgroundSuggestionState",
+                    "description": "A mask that indicates which of the fields in background have been changed in this suggestion."
+                },
+                "defaultFooterIdSuggested": {
+                    "description": "Indicates if there was a suggested change to default_footer_id.",
+                    "type": "boolean"
+                },
+                "defaultHeaderIdSuggested": {
+                    "description": "Indicates if there was a suggested change to default_header_id.",
+                    "type": "boolean"
+                },
+                "evenPageFooterIdSuggested": {
+                    "description": "Indicates if there was a suggested change to even_page_footer_id.",
+                    "type": "boolean"
+                },
+                "evenPageHeaderIdSuggested": {
+                    "description": "Indicates if there was a suggested change to even_page_header_id.",
+                    "type": "boolean"
+                },
+                "firstPageFooterIdSuggested": {
+                    "description": "Indicates if there was a suggested change to first_page_footer_id.",
+                    "type": "boolean"
+                },
+                "firstPageHeaderIdSuggested": {
+                    "description": "Indicates if there was a suggested change to first_page_header_id.",
+                    "type": "boolean"
+                },
+                "marginBottomSuggested": {
+                    "description": "Indicates if there was a suggested change to margin_bottom.",
+                    "type": "boolean"
+                },
+                "marginFooterSuggested": {
+                    "description": "Indicates if there was a suggested change to margin_footer.",
+                    "type": "boolean"
+                },
+                "marginHeaderSuggested": {
+                    "description": "Indicates if there was a suggested change to margin_header.",
+                    "type": "boolean"
+                },
+                "marginLeftSuggested": {
+                    "description": "Indicates if there was a suggested change to margin_left.",
+                    "type": "boolean"
+                },
+                "marginRightSuggested": {
+                    "description": "Indicates if there was a suggested change to margin_right.",
+                    "type": "boolean"
+                },
+                "marginTopSuggested": {
+                    "description": "Indicates if there was a suggested change to margin_top.",
+                    "type": "boolean"
+                },
+                "pageNumberStartSuggested": {
+                    "description": "Indicates if there was a suggested change to page_number_start.",
+                    "type": "boolean"
+                },
+                "pageSizeSuggestionState": {
+                    "$ref": "SizeSuggestionState",
+                    "description": "A mask that indicates which of the fields in size have been changed in this suggestion."
+                },
+                "useCustomHeaderFooterMarginsSuggested": {
+                    "description": "Indicates if there was a suggested change to use_custom_header_footer_margins.",
+                    "type": "boolean"
+                },
+                "useEvenPageHeaderFooterSuggested": {
+                    "description": "Indicates if there was a suggested change to use_even_page_header_footer.",
+                    "type": "boolean"
+                },
+                "useFirstPageHeaderFooterSuggested": {
+                    "description": "Indicates if there was a suggested change to use_first_page_header_footer.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "EmbeddedDrawingProperties": {
+            "description": "The properties of an embedded drawing.",
+            "id": "EmbeddedDrawingProperties",
+            "properties": {},
+            "type": "object"
+        },
+        "EmbeddedDrawingPropertiesSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base EmbeddedDrawingProperties have been changed in this suggestion. For any field set to true, there is a new suggested value.",
+            "id": "EmbeddedDrawingPropertiesSuggestionState",
+            "properties": {},
+            "type": "object"
+        },
+        "EmbeddedObject": {
+            "description": "An embedded object in the document.",
+            "id": "EmbeddedObject",
+            "properties": {
+                "description": {
+                    "description": "The description of the embedded object. The `title` and `description` are both combined to display alt text.",
+                    "type": "string"
+                },
+                "embeddedDrawingProperties": {
+                    "$ref": "EmbeddedDrawingProperties",
+                    "description": "The properties of an embedded drawing."
+                },
+                "embeddedObjectBorder": {
+                    "$ref": "EmbeddedObjectBorder",
+                    "description": "The border of the embedded object."
+                },
+                "imageProperties": {
+                    "$ref": "ImageProperties",
+                    "description": "The properties of an image."
+                },
+                "linkedContentReference": {
+                    "$ref": "LinkedContentReference",
+                    "description": "A reference to the external linked source content. For example, it contains a reference to the source Sheets chart when the embedded object is a linked chart. If unset, then the embedded object is not linked."
+                },
+                "marginBottom": {
+                    "$ref": "Dimension",
+                    "description": "The bottom margin of the embedded object."
+                },
+                "marginLeft": {
+                    "$ref": "Dimension",
+                    "description": "The left margin of the embedded object."
+                },
+                "marginRight": {
+                    "$ref": "Dimension",
+                    "description": "The right margin of the embedded object."
+                },
+                "marginTop": {
+                    "$ref": "Dimension",
+                    "description": "The top margin of the embedded object."
+                },
+                "size": {
+                    "$ref": "Size",
+                    "description": "The visible size of the image after cropping."
+                },
+                "title": {
+                    "description": "The title of the embedded object. The `title` and `description` are both combined to display alt text.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "EmbeddedObjectBorder": {
+            "description": "A border around an EmbeddedObject.",
+            "id": "EmbeddedObjectBorder",
+            "properties": {
+                "color": {
+                    "$ref": "OptionalColor",
+                    "description": "The color of the border."
+                },
+                "dashStyle": {
+                    "description": "The dash style of the border.",
+                    "enum": [
+                        "DASH_STYLE_UNSPECIFIED",
+                        "SOLID",
+                        "DOT",
+                        "DASH"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified dash style.",
+                        "Solid line. Corresponds to ECMA-376 ST_PresetLineDashVal value 'solid'. This is the default dash style.",
+                        "Dotted line. Corresponds to ECMA-376 ST_PresetLineDashVal value 'dot'.",
+                        "Dashed line. Corresponds to ECMA-376 ST_PresetLineDashVal value 'dash'."
+                    ],
+                    "type": "string"
+                },
+                "propertyState": {
+                    "description": "The property state of the border property.",
+                    "enum": [
+                        "RENDERED",
+                        "NOT_RENDERED"
+                    ],
+                    "enumDescriptions": [
+                        "If a property's state is RENDERED, then the element has the corresponding property when rendered in the document. This is the default value.",
+                        "If a property's state is NOT_RENDERED, then the element does not have the corresponding property when rendered in the document."
+                    ],
+                    "type": "string"
+                },
+                "width": {
+                    "$ref": "Dimension",
+                    "description": "The width of the border."
+                }
+            },
+            "type": "object"
+        },
+        "EmbeddedObjectBorderSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base EmbeddedObjectBorder have been changed in this suggestion. For any field set to true, there is a new suggested value.",
+            "id": "EmbeddedObjectBorderSuggestionState",
+            "properties": {
+                "colorSuggested": {
+                    "description": "Indicates if there was a suggested change to color.",
+                    "type": "boolean"
+                },
+                "dashStyleSuggested": {
+                    "description": "Indicates if there was a suggested change to dash_style.",
+                    "type": "boolean"
+                },
+                "propertyStateSuggested": {
+                    "description": "Indicates if there was a suggested change to property_state.",
+                    "type": "boolean"
+                },
+                "widthSuggested": {
+                    "description": "Indicates if there was a suggested change to width.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "EmbeddedObjectSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base EmbeddedObject have been changed in this suggestion. For any field set to true, there is a new suggested value.",
+            "id": "EmbeddedObjectSuggestionState",
+            "properties": {
+                "descriptionSuggested": {
+                    "description": "Indicates if there was a suggested change to description.",
+                    "type": "boolean"
+                },
+                "embeddedDrawingPropertiesSuggestionState": {
+                    "$ref": "EmbeddedDrawingPropertiesSuggestionState",
+                    "description": "A mask that indicates which of the fields in embedded_drawing_properties have been changed in this suggestion."
+                },
+                "embeddedObjectBorderSuggestionState": {
+                    "$ref": "EmbeddedObjectBorderSuggestionState",
+                    "description": "A mask that indicates which of the fields in embedded_object_border have been changed in this suggestion."
+                },
+                "imagePropertiesSuggestionState": {
+                    "$ref": "ImagePropertiesSuggestionState",
+                    "description": "A mask that indicates which of the fields in image_properties have been changed in this suggestion."
+                },
+                "linkedContentReferenceSuggestionState": {
+                    "$ref": "LinkedContentReferenceSuggestionState",
+                    "description": "A mask that indicates which of the fields in linked_content_reference have been changed in this suggestion."
+                },
+                "marginBottomSuggested": {
+                    "description": "Indicates if there was a suggested change to margin_bottom.",
+                    "type": "boolean"
+                },
+                "marginLeftSuggested": {
+                    "description": "Indicates if there was a suggested change to margin_left.",
+                    "type": "boolean"
+                },
+                "marginRightSuggested": {
+                    "description": "Indicates if there was a suggested change to margin_right.",
+                    "type": "boolean"
+                },
+                "marginTopSuggested": {
+                    "description": "Indicates if there was a suggested change to margin_top.",
+                    "type": "boolean"
+                },
+                "sizeSuggestionState": {
+                    "$ref": "SizeSuggestionState",
+                    "description": "A mask that indicates which of the fields in size have been changed in this suggestion."
+                },
+                "titleSuggested": {
+                    "description": "Indicates if there was a suggested change to title.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "EndOfSegmentLocation": {
+            "description": "Location at the end of a body, header, footer or footnote. The location is immediately before the last newline in the document segment.",
+            "id": "EndOfSegmentLocation",
+            "properties": {
+                "segmentId": {
+                    "description": "The ID of the header, footer or footnote the location is in. An empty segment ID signifies the document's body.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Equation": {
+            "description": "A ParagraphElement representing an equation.",
+            "id": "Equation",
+            "properties": {
+                "suggestedDeletionIds": {
+                    "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedInsertionIds": {
+                    "description": "The suggested insertion IDs. A Equation may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Footer": {
+            "description": "A document footer.",
+            "id": "Footer",
+            "properties": {
+                "content": {
+                    "description": "The contents of the footer. The indexes for a footer's content begin at zero.",
+                    "items": {
+                        "$ref": "StructuralElement"
+                    },
+                    "type": "array"
+                },
+                "footerId": {
+                    "description": "The ID of the footer.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Footnote": {
+            "description": "A document footnote.",
+            "id": "Footnote",
+            "properties": {
+                "content": {
+                    "description": "The contents of the footnote. The indexes for a footnote's content begin at zero.",
+                    "items": {
+                        "$ref": "StructuralElement"
+                    },
+                    "type": "array"
+                },
+                "footnoteId": {
+                    "description": "The ID of the footnote.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FootnoteReference": {
+            "description": "A ParagraphElement representing a footnote reference. A footnote reference is the inline content rendered with a number and is used to identify the footnote.",
+            "id": "FootnoteReference",
+            "properties": {
+                "footnoteId": {
+                    "description": "The ID of the footnote that contains the content of this footnote reference.",
+                    "type": "string"
+                },
+                "footnoteNumber": {
+                    "description": "The rendered number of this footnote.",
+                    "type": "string"
+                },
+                "suggestedDeletionIds": {
+                    "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedInsertionIds": {
+                    "description": "The suggested insertion IDs. A FootnoteReference may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedTextStyleChanges": {
+                    "additionalProperties": {
+                        "$ref": "SuggestedTextStyle"
+                    },
+                    "description": "The suggested text style changes to this FootnoteReference, keyed by suggestion ID.",
+                    "type": "object"
+                },
+                "textStyle": {
+                    "$ref": "TextStyle",
+                    "description": "The text style of this FootnoteReference."
+                }
+            },
+            "type": "object"
+        },
+        "Header": {
+            "description": "A document header.",
+            "id": "Header",
+            "properties": {
+                "content": {
+                    "description": "The contents of the header. The indexes for a header's content begin at zero.",
+                    "items": {
+                        "$ref": "StructuralElement"
+                    },
+                    "type": "array"
+                },
+                "headerId": {
+                    "description": "The ID of the header.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "HorizontalRule": {
+            "description": "A ParagraphElement representing a horizontal line.",
+            "id": "HorizontalRule",
+            "properties": {
+                "suggestedDeletionIds": {
+                    "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedInsertionIds": {
+                    "description": "The suggested insertion IDs. A HorizontalRule may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedTextStyleChanges": {
+                    "additionalProperties": {
+                        "$ref": "SuggestedTextStyle"
+                    },
+                    "description": "The suggested text style changes to this HorizontalRule, keyed by suggestion ID.",
+                    "type": "object"
+                },
+                "textStyle": {
+                    "$ref": "TextStyle",
+                    "description": "The text style of this HorizontalRule. Similar to text content, like text runs and footnote references, the text style of a horizontal rule can affect content layout as well as the styling of text inserted adjacent to it."
+                }
+            },
+            "type": "object"
+        },
+        "ImageProperties": {
+            "description": "The properties of an image.",
+            "id": "ImageProperties",
+            "properties": {
+                "angle": {
+                    "description": "The clockwise rotation angle of the image, in radians.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "brightness": {
+                    "description": "The brightness effect of the image. The value should be in the interval [-1.0, 1.0], where 0 means no effect.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "contentUri": {
+                    "description": "A URI to the image with a default lifetime of 30 minutes. This URI is tagged with the account of the requester. Anyone with the URI effectively accesses the image as the original requester. Access to the image may be lost if the document's sharing settings change.",
+                    "type": "string"
+                },
+                "contrast": {
+                    "description": "The contrast effect of the image. The value should be in the interval [-1.0, 1.0], where 0 means no effect.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "cropProperties": {
+                    "$ref": "CropProperties",
+                    "description": "The crop properties of the image."
+                },
+                "sourceUri": {
+                    "description": "The source URI is the URI used to insert the image. The source URI can be empty.",
+                    "type": "string"
+                },
+                "transparency": {
+                    "description": "The transparency effect of the image. The value should be in the interval [0.0, 1.0], where 0 means no effect and 1 means completely transparent.",
+                    "format": "float",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "ImagePropertiesSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base ImageProperties have been changed in this suggestion. For any field set to true, there is a new suggested value.",
+            "id": "ImagePropertiesSuggestionState",
+            "properties": {
+                "angleSuggested": {
+                    "description": "Indicates if there was a suggested change to angle.",
+                    "type": "boolean"
+                },
+                "brightnessSuggested": {
+                    "description": "Indicates if there was a suggested change to brightness.",
+                    "type": "boolean"
+                },
+                "contentUriSuggested": {
+                    "description": "Indicates if there was a suggested change to content_uri.",
+                    "type": "boolean"
+                },
+                "contrastSuggested": {
+                    "description": "Indicates if there was a suggested change to contrast.",
+                    "type": "boolean"
+                },
+                "cropPropertiesSuggestionState": {
+                    "$ref": "CropPropertiesSuggestionState",
+                    "description": "A mask that indicates which of the fields in crop_properties have been changed in this suggestion."
+                },
+                "sourceUriSuggested": {
+                    "description": "Indicates if there was a suggested change to source_uri.",
+                    "type": "boolean"
+                },
+                "transparencySuggested": {
+                    "description": "Indicates if there was a suggested change to transparency.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "InlineObject": {
+            "description": "An object that appears inline with text. An InlineObject contains an EmbeddedObject such as an image.",
+            "id": "InlineObject",
+            "properties": {
+                "inlineObjectProperties": {
+                    "$ref": "InlineObjectProperties",
+                    "description": "The properties of this inline object."
+                },
+                "objectId": {
+                    "description": "The ID of this inline object.",
+                    "type": "string"
+                },
+                "suggestedDeletionIds": {
+                    "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedInlineObjectPropertiesChanges": {
+                    "additionalProperties": {
+                        "$ref": "SuggestedInlineObjectProperties"
+                    },
+                    "description": "The suggested changes to the inline object properties, keyed by suggestion ID.",
+                    "type": "object"
+                },
+                "suggestedInsertionId": {
+                    "description": "The suggested insertion ID. If empty, then this is not a suggested insertion.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "InlineObjectElement": {
+            "description": "A ParagraphElement that contains an InlineObject.",
+            "id": "InlineObjectElement",
+            "properties": {
+                "inlineObjectId": {
+                    "description": "The ID of the InlineObject this element contains.",
+                    "type": "string"
+                },
+                "suggestedDeletionIds": {
+                    "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedInsertionIds": {
+                    "description": "The suggested insertion IDs. An InlineObjectElement may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedTextStyleChanges": {
+                    "additionalProperties": {
+                        "$ref": "SuggestedTextStyle"
+                    },
+                    "description": "The suggested text style changes to this InlineObject, keyed by suggestion ID.",
+                    "type": "object"
+                },
+                "textStyle": {
+                    "$ref": "TextStyle",
+                    "description": "The text style of this InlineObjectElement. Similar to text content, like text runs and footnote references, the text style of an inline object element can affect content layout as well as the styling of text inserted adjacent to it."
+                }
+            },
+            "type": "object"
+        },
+        "InlineObjectProperties": {
+            "description": "Properties of an InlineObject.",
+            "id": "InlineObjectProperties",
+            "properties": {
+                "embeddedObject": {
+                    "$ref": "EmbeddedObject",
+                    "description": "The embedded object of this inline object."
+                }
+            },
+            "type": "object"
+        },
+        "InlineObjectPropertiesSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base InlineObjectProperties have been changed in this suggestion. For any field set to true, there is a new suggested value.",
+            "id": "InlineObjectPropertiesSuggestionState",
+            "properties": {
+                "embeddedObjectSuggestionState": {
+                    "$ref": "EmbeddedObjectSuggestionState",
+                    "description": "A mask that indicates which of the fields in embedded_object have been changed in this suggestion."
+                }
+            },
+            "type": "object"
+        },
+        "InsertInlineImageRequest": {
+            "description": "Inserts an InlineObject containing an image at the given location.",
+            "id": "InsertInlineImageRequest",
+            "properties": {
+                "endOfSegmentLocation": {
+                    "$ref": "EndOfSegmentLocation",
+                    "description": "Inserts the text at the end of a header, footer or the document body. Inline images cannot be inserted inside a footnote."
+                },
+                "location": {
+                    "$ref": "Location",
+                    "description": "Inserts the image at a specific index in the document. The image must be inserted inside the bounds of an existing Paragraph. For instance, it cannot be inserted at a table's start index (i.e. between the table and its preceding paragraph). Inline images cannot be inserted inside a footnote or equation."
+                },
+                "objectSize": {
+                    "$ref": "Size",
+                    "description": "The size that the image should appear as in the document. This property is optional and the final size of the image in the document is determined by the following rules: * If neither width nor height is specified, then a default size of the image is calculated based on its resolution. * If one dimension is specified then the other dimension is calculated to preserve the aspect ratio of the image. * If both width and height are specified, the image is scaled to fit within the provided dimensions while maintaining its aspect ratio."
+                },
+                "uri": {
+                    "description": "The image URI. The image is fetched once at insertion time and a copy is stored for display inside the document. Images must be less than 50MB in size, cannot exceed 25 megapixels, and must be in one of PNG, JPEG, or GIF format. The provided URI can be at most 2 kB in length. The URI itself is saved with the image, and exposed via the ImageProperties.content_uri field.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "InsertInlineImageResponse": {
+            "description": "The result of inserting an inline image.",
+            "id": "InsertInlineImageResponse",
+            "properties": {
+                "objectId": {
+                    "description": "The ID of the created InlineObject.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "InsertInlineSheetsChartResponse": {
+            "description": "The result of inserting an embedded Google Sheets chart.",
+            "id": "InsertInlineSheetsChartResponse",
+            "properties": {
+                "objectId": {
+                    "description": "The object ID of the inserted chart.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "InsertPageBreakRequest": {
+            "description": "Inserts a page break followed by a newline at the specified location.",
+            "id": "InsertPageBreakRequest",
+            "properties": {
+                "endOfSegmentLocation": {
+                    "$ref": "EndOfSegmentLocation",
+                    "description": "Inserts the page break at the end of the document body. Page breaks cannot be inserted inside a footnote, header or footer. Since page breaks can only be inserted inside the body, the segment ID field must be empty."
+                },
+                "location": {
+                    "$ref": "Location",
+                    "description": "Inserts the page break at a specific index in the document. The page break must be inserted inside the bounds of an existing Paragraph. For instance, it cannot be inserted at a table's start index (i.e. between the table and its preceding paragraph). Page breaks cannot be inserted inside a table, equation, footnote, header or footer. Since page breaks can only be inserted inside the body, the segment ID field must be empty."
+                }
+            },
+            "type": "object"
+        },
+        "InsertSectionBreakRequest": {
+            "description": "Inserts a section break at the given location. A newline character will be inserted before the section break.",
+            "id": "InsertSectionBreakRequest",
+            "properties": {
+                "endOfSegmentLocation": {
+                    "$ref": "EndOfSegmentLocation",
+                    "description": "Inserts a newline and a section break at the end of the document body. Section breaks cannot be inserted inside a footnote, header or footer. Because section breaks can only be inserted inside the body, the segment ID field must be empty."
+                },
+                "location": {
+                    "$ref": "Location",
+                    "description": "Inserts a newline and a section break at a specific index in the document. The section break must be inserted inside the bounds of an existing Paragraph. For instance, it cannot be inserted at a table's start index (i.e. between the table and its preceding paragraph). Section breaks cannot be inserted inside a table, equation, footnote, header, or footer. Since section breaks can only be inserted inside the body, the segment ID field must be empty."
+                },
+                "sectionType": {
+                    "description": "The type of section to insert.",
+                    "enum": [
+                        "SECTION_TYPE_UNSPECIFIED",
+                        "CONTINUOUS",
+                        "NEXT_PAGE"
+                    ],
+                    "enumDescriptions": [
+                        "The section type is unspecified.",
+                        "The section starts immediately after the last paragraph of the previous section.",
+                        "The section starts on the next page."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "InsertTableColumnRequest": {
+            "description": "Inserts an empty column into a table.",
+            "id": "InsertTableColumnRequest",
+            "properties": {
+                "insertRight": {
+                    "description": "Whether to insert new column to the right of the reference cell location. - `True`: insert to the right. - `False`: insert to the left.",
+                    "type": "boolean"
+                },
+                "tableCellLocation": {
+                    "$ref": "TableCellLocation",
+                    "description": "The reference table cell location from which columns will be inserted. A new column will be inserted to the left (or right) of the column where the reference cell is. If the reference cell is a merged cell, a new column will be inserted to the left (or right) of the merged cell."
+                }
+            },
+            "type": "object"
+        },
+        "InsertTableRequest": {
+            "description": "Inserts a table at the specified location. A newline character will be inserted before the inserted table.",
+            "id": "InsertTableRequest",
+            "properties": {
+                "columns": {
+                    "description": "The number of columns in the table.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "endOfSegmentLocation": {
+                    "$ref": "EndOfSegmentLocation",
+                    "description": "Inserts the table at the end of the given header, footer or document body. A newline character will be inserted before the inserted table. Tables cannot be inserted inside a footnote."
+                },
+                "location": {
+                    "$ref": "Location",
+                    "description": "Inserts the table at a specific model index. A newline character will be inserted before the inserted table, therefore the table start index will be at the specified location index + 1. The table must be inserted inside the bounds of an existing Paragraph. For instance, it cannot be inserted at a table's start index (i.e. between an existing table and its preceding paragraph). Tables cannot be inserted inside a footnote or equation."
+                },
+                "rows": {
+                    "description": "The number of rows in the table.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "InsertTableRowRequest": {
+            "description": "Inserts an empty row into a table.",
+            "id": "InsertTableRowRequest",
+            "properties": {
+                "insertBelow": {
+                    "description": "Whether to insert new row below the reference cell location. - `True`: insert below the cell. - `False`: insert above the cell.",
+                    "type": "boolean"
+                },
+                "tableCellLocation": {
+                    "$ref": "TableCellLocation",
+                    "description": "The reference table cell location from which rows will be inserted. A new row will be inserted above (or below) the row where the reference cell is. If the reference cell is a merged cell, a new row will be inserted above (or below) the merged cell."
+                }
+            },
+            "type": "object"
+        },
+        "InsertTextRequest": {
+            "description": "Inserts text at the specified location.",
+            "id": "InsertTextRequest",
+            "properties": {
+                "endOfSegmentLocation": {
+                    "$ref": "EndOfSegmentLocation",
+                    "description": "Inserts the text at the end of a header, footer, footnote or the document body."
+                },
+                "location": {
+                    "$ref": "Location",
+                    "description": "Inserts the text at a specific index in the document. Text must be inserted inside the bounds of an existing Paragraph. For instance, text cannot be inserted at a table's start index (i.e. between the table and its preceding paragraph). The text must be inserted in the preceding paragraph."
+                },
+                "text": {
+                    "description": "The text to be inserted. Inserting a newline character will implicitly create a new Paragraph at that index. The paragraph style of the new paragraph will be copied from the paragraph at the current insertion index, including lists and bullets. Text styles for inserted text will be determined automatically, generally preserving the styling of neighboring text. In most cases, the text style for the inserted text will match the text immediately before the insertion index. Some control characters (U+0000-U+0008, U+000C-U+001F) and characters from the Unicode Basic Multilingual Plane Private Use Area (U+E000-U+F8FF) will be stripped out of the inserted text.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Link": {
+            "description": "A reference to another portion of a document or an external URL resource.",
+            "id": "Link",
+            "properties": {
+                "bookmarkId": {
+                    "description": "The ID of a bookmark in this document.",
+                    "type": "string"
+                },
+                "headingId": {
+                    "description": "The ID of a heading in this document.",
+                    "type": "string"
+                },
+                "url": {
+                    "description": "An external URL.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LinkedContentReference": {
+            "description": "A reference to the external linked source content.",
+            "id": "LinkedContentReference",
+            "properties": {
+                "sheetsChartReference": {
+                    "$ref": "SheetsChartReference",
+                    "description": "A reference to the linked chart."
+                }
+            },
+            "type": "object"
+        },
+        "LinkedContentReferenceSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base LinkedContentReference have been changed in this suggestion. For any field set to true, there is a new suggested value.",
+            "id": "LinkedContentReferenceSuggestionState",
+            "properties": {
+                "sheetsChartReferenceSuggestionState": {
+                    "$ref": "SheetsChartReferenceSuggestionState",
+                    "description": "A mask that indicates which of the fields in sheets_chart_reference have been changed in this suggestion."
+                }
+            },
+            "type": "object"
+        },
+        "List": {
+            "description": "A List represents the list attributes for a group of paragraphs that all belong to the same list. A paragraph that is part of a list has a reference to the list's ID in its bullet.",
+            "id": "List",
+            "properties": {
+                "listProperties": {
+                    "$ref": "ListProperties",
+                    "description": "The properties of the list."
+                },
+                "suggestedDeletionIds": {
+                    "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this list.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedInsertionId": {
+                    "description": "The suggested insertion ID. If empty, then this is not a suggested insertion.",
+                    "type": "string"
+                },
+                "suggestedListPropertiesChanges": {
+                    "additionalProperties": {
+                        "$ref": "SuggestedListProperties"
+                    },
+                    "description": "The suggested changes to the list properties, keyed by suggestion ID.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "ListProperties": {
+            "description": "The properties of a list which describe the look and feel of bullets belonging to paragraphs associated with a list.",
+            "id": "ListProperties",
+            "properties": {
+                "nestingLevels": {
+                    "description": "Describes the properties of the bullets at the associated level. A list has at most nine levels of nesting with nesting level 0 corresponding to the top-most level and nesting level 8 corresponding to the most nested level. The nesting levels are returned in ascending order with the least nested returned first.",
+                    "items": {
+                        "$ref": "NestingLevel"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListPropertiesSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base ListProperties have been changed in this suggestion. For any field set to true, there is a new suggested value.",
+            "id": "ListPropertiesSuggestionState",
+            "properties": {
+                "nestingLevelsSuggestionStates": {
+                    "description": "A mask that indicates which of the fields on the corresponding NestingLevel in nesting_levels have been changed in this suggestion. The nesting level suggestion states are returned in ascending order of the nesting level with the least nested returned first.",
+                    "items": {
+                        "$ref": "NestingLevelSuggestionState"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Location": {
+            "description": "A particular location in the document.",
+            "id": "Location",
+            "properties": {
+                "index": {
+                    "description": "The zero-based index, in UTF-16 code units. The index is relative to the beginning of the segment specified by segment_id.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "segmentId": {
+                    "description": "The ID of the header, footer or footnote the location is in. An empty segment ID signifies the document's body.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MergeTableCellsRequest": {
+            "description": "Merges cells in a Table.",
+            "id": "MergeTableCellsRequest",
+            "properties": {
+                "tableRange": {
+                    "$ref": "TableRange",
+                    "description": "The table range specifying which cells of the table to merge. Any text in the cells being merged will be concatenated and stored in the \"head\" cell of the range. This is the upper-left cell of the range when the content direction is left to right, and the upper-right cell of the range otherwise. If the range is non-rectangular (which can occur in some cases where the range covers cells that are already merged or where the table is non-rectangular), a 400 bad request error is returned."
+                }
+            },
+            "type": "object"
+        },
+        "NamedRange": {
+            "description": "A collection of Ranges with the same named range ID. Named ranges allow developers to associate parts of a document with an arbitrary user-defined label so their contents can be programmatically read or edited at a later time. A document can contain multiple named ranges with the same name, but every named range has a unique ID. A named range is created with a single Range, and content inserted inside a named range generally expands that range. However, certain document changes can cause the range to be split into multiple ranges. Named ranges are not private. All applications and collaborators that have access to the document can see its named ranges.",
+            "id": "NamedRange",
+            "properties": {
+                "name": {
+                    "description": "The name of the named range.",
+                    "type": "string"
+                },
+                "namedRangeId": {
+                    "description": "The ID of the named range.",
+                    "type": "string"
+                },
+                "ranges": {
+                    "description": "The ranges that belong to this named range.",
+                    "items": {
+                        "$ref": "Range"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "NamedRanges": {
+            "description": "A collection of all the NamedRanges in the document that share a given name.",
+            "id": "NamedRanges",
+            "properties": {
+                "name": {
+                    "description": "The name that all the named ranges share.",
+                    "type": "string"
+                },
+                "namedRanges": {
+                    "description": "The NamedRanges that share the same name.",
+                    "items": {
+                        "$ref": "NamedRange"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "NamedStyle": {
+            "description": "A named style. Paragraphs in the document can inherit their TextStyle and ParagraphStyle from this named style when they have the same named style type.",
+            "id": "NamedStyle",
+            "properties": {
+                "namedStyleType": {
+                    "description": "The type of this named style.",
+                    "enum": [
+                        "NAMED_STYLE_TYPE_UNSPECIFIED",
+                        "NORMAL_TEXT",
+                        "TITLE",
+                        "SUBTITLE",
+                        "HEADING_1",
+                        "HEADING_2",
+                        "HEADING_3",
+                        "HEADING_4",
+                        "HEADING_5",
+                        "HEADING_6"
+                    ],
+                    "enumDescriptions": [
+                        "The type of named style is unspecified.",
+                        "Normal text.",
+                        "Title.",
+                        "Subtitle.",
+                        "Heading 1.",
+                        "Heading 2.",
+                        "Heading 3.",
+                        "Heading 4.",
+                        "Heading 5.",
+                        "Heading 6."
+                    ],
+                    "type": "string"
+                },
+                "paragraphStyle": {
+                    "$ref": "ParagraphStyle",
+                    "description": "The paragraph style of this named style."
+                },
+                "textStyle": {
+                    "$ref": "TextStyle",
+                    "description": "The text style of this named style."
+                }
+            },
+            "type": "object"
+        },
+        "NamedStyleSuggestionState": {
+            "description": "A suggestion state of a NamedStyle message.",
+            "id": "NamedStyleSuggestionState",
+            "properties": {
+                "namedStyleType": {
+                    "description": "The named style type that this suggestion state corresponds to. This field is provided as a convenience for matching the NamedStyleSuggestionState with its corresponding NamedStyle.",
+                    "enum": [
+                        "NAMED_STYLE_TYPE_UNSPECIFIED",
+                        "NORMAL_TEXT",
+                        "TITLE",
+                        "SUBTITLE",
+                        "HEADING_1",
+                        "HEADING_2",
+                        "HEADING_3",
+                        "HEADING_4",
+                        "HEADING_5",
+                        "HEADING_6"
+                    ],
+                    "enumDescriptions": [
+                        "The type of named style is unspecified.",
+                        "Normal text.",
+                        "Title.",
+                        "Subtitle.",
+                        "Heading 1.",
+                        "Heading 2.",
+                        "Heading 3.",
+                        "Heading 4.",
+                        "Heading 5.",
+                        "Heading 6."
+                    ],
+                    "type": "string"
+                },
+                "paragraphStyleSuggestionState": {
+                    "$ref": "ParagraphStyleSuggestionState",
+                    "description": "A mask that indicates which of the fields in paragraph style have been changed in this suggestion."
+                },
+                "textStyleSuggestionState": {
+                    "$ref": "TextStyleSuggestionState",
+                    "description": "A mask that indicates which of the fields in text style have been changed in this suggestion."
+                }
+            },
+            "type": "object"
+        },
+        "NamedStyles": {
+            "description": "The named styles. Paragraphs in the document can inherit their TextStyle and ParagraphStyle from these named styles.",
+            "id": "NamedStyles",
+            "properties": {
+                "styles": {
+                    "description": "The named styles. There is an entry for each of the possible named style types.",
+                    "items": {
+                        "$ref": "NamedStyle"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "NamedStylesSuggestionState": {
+            "description": "The suggestion state of a NamedStyles message.",
+            "id": "NamedStylesSuggestionState",
+            "properties": {
+                "stylesSuggestionStates": {
+                    "description": "A mask that indicates which of the fields on the corresponding NamedStyle in styles have been changed in this suggestion. The order of these named style suggestion states match the order of the corresponding named style within the named styles suggestion.",
+                    "items": {
+                        "$ref": "NamedStyleSuggestionState"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "NestingLevel": {
+            "description": "Contains properties describing the look and feel of a list bullet at a given level of nesting.",
+            "id": "NestingLevel",
+            "properties": {
+                "bulletAlignment": {
+                    "description": "The alignment of the bullet within the space allotted for rendering the bullet.",
+                    "enum": [
+                        "BULLET_ALIGNMENT_UNSPECIFIED",
+                        "START",
+                        "CENTER",
+                        "END"
+                    ],
+                    "enumDescriptions": [
+                        "The bullet alignment is unspecified.",
+                        "The bullet is aligned to the start of the space allotted for rendering the bullet. Left-aligned for LTR text, right-aligned otherwise.",
+                        "The bullet is aligned to the center of the space allotted for rendering the bullet.",
+                        "The bullet is aligned to the end of the space allotted for rendering the bullet. Right-aligned for LTR text, left-aligned otherwise."
+                    ],
+                    "type": "string"
+                },
+                "glyphFormat": {
+                    "description": "The format string used by bullets at this level of nesting. The glyph format contains one or more placeholders, and these placeholder are replaced with the appropriate values depending on the glyph_type or glyph_symbol. The placeholders follow the pattern `%[nesting_level]`. Furthermore, placeholders can have prefixes and suffixes. Thus, the glyph format follows the pattern `%[nesting_level]`. Note that the prefix and suffix are optional and can be arbitrary strings. For example, the glyph format `%0.` indicates that the rendered glyph will replace the placeholder with the corresponding glyph for nesting level 0 followed by a period as the suffix. So a list with a glyph type of UPPER_ALPHA and glyph format `%0.` at nesting level 0 will result in a list with rendered glyphs `A.` `B.` `C.` The glyph format can contain placeholders for the current nesting level as well as placeholders for parent nesting levels. For example, a list can have a glyph format of `%0.` at nesting level 0 and a glyph format of `%0.%1.` at nesting level 1. Assuming both nesting levels have DECIMAL glyph types, this would result in a list with rendered glyphs `1.` `2.` ` 2.1.` ` 2.2.` `3.` For nesting levels that are ordered, the string that replaces a placeholder in the glyph format for a particular paragraph depends on the paragraph's order within the list.",
+                    "type": "string"
+                },
+                "glyphSymbol": {
+                    "description": "A custom glyph symbol used by bullets when paragraphs at this level of nesting are unordered. The glyph symbol replaces placeholders within the glyph_format. For example, if the glyph_symbol is the solid circle corresponding to Unicode U+25cf code point and the glyph_format is `%0`, the rendered glyph would be the solid circle.",
+                    "type": "string"
+                },
+                "glyphType": {
+                    "description": "The type of glyph used by bullets when paragraphs at this level of nesting are ordered. The glyph type determines the type of glyph used to replace placeholders within the glyph_format when paragraphs at this level of nesting are ordered. For example, if the nesting level is 0, the glyph_format is `%0.` and the glyph type is DECIMAL, then the rendered glyph would replace the placeholder `%0` in the glyph format with a number corresponding to list item's order within the list.",
+                    "enum": [
+                        "GLYPH_TYPE_UNSPECIFIED",
+                        "NONE",
+                        "DECIMAL",
+                        "ZERO_DECIMAL",
+                        "UPPER_ALPHA",
+                        "ALPHA",
+                        "UPPER_ROMAN",
+                        "ROMAN"
+                    ],
+                    "enumDescriptions": [
+                        "The glyph type is unspecified or unsupported.",
+                        "An empty string.",
+                        "A number, like `1`, `2`, or `3`.",
+                        "A number where single digit numbers are prefixed with a zero, like `01`, `02`, or `03`. Numbers with more than one digit are not prefixed with a zero.",
+                        "An uppercase letter, like `A`, `B`, or `C`.",
+                        "A lowercase letter, like `a`, `b`, or `c`.",
+                        "An uppercase Roman numeral, like `I`, `II`, or `III`.",
+                        "A lowercase Roman numeral, like `i`, `ii`, or `iii`."
+                    ],
+                    "type": "string"
+                },
+                "indentFirstLine": {
+                    "$ref": "Dimension",
+                    "description": "The amount of indentation for the first line of paragraphs at this level of nesting."
+                },
+                "indentStart": {
+                    "$ref": "Dimension",
+                    "description": "The amount of indentation for paragraphs at this level of nesting. Applied to the side that corresponds to the start of the text, based on the paragraph's content direction."
+                },
+                "startNumber": {
+                    "description": "The number of the first list item at this nesting level. A value of 0 is treated as a value of 1 for lettered lists and roman numeraled lists, i.e. for values of both 0 and 1, lettered and roman numeraled lists will begin at `a` and `i` respectively. This value is ignored for nesting levels with unordered glyphs.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "textStyle": {
+                    "$ref": "TextStyle",
+                    "description": "The text style of bullets at this level of nesting."
+                }
+            },
+            "type": "object"
+        },
+        "NestingLevelSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base NestingLevel have been changed in this suggestion. For any field set to true, there is a new suggested value.",
+            "id": "NestingLevelSuggestionState",
+            "properties": {
+                "bulletAlignmentSuggested": {
+                    "description": "Indicates if there was a suggested change to bullet_alignment.",
+                    "type": "boolean"
+                },
+                "glyphFormatSuggested": {
+                    "description": "Indicates if there was a suggested change to glyph_format.",
+                    "type": "boolean"
+                },
+                "glyphSymbolSuggested": {
+                    "description": "Indicates if there was a suggested change to glyph_symbol.",
+                    "type": "boolean"
+                },
+                "glyphTypeSuggested": {
+                    "description": "Indicates if there was a suggested change to glyph_type.",
+                    "type": "boolean"
+                },
+                "indentFirstLineSuggested": {
+                    "description": "Indicates if there was a suggested change to indent_first_line.",
+                    "type": "boolean"
+                },
+                "indentStartSuggested": {
+                    "description": "Indicates if there was a suggested change to indent_start.",
+                    "type": "boolean"
+                },
+                "startNumberSuggested": {
+                    "description": "Indicates if there was a suggested change to start_number.",
+                    "type": "boolean"
+                },
+                "textStyleSuggestionState": {
+                    "$ref": "TextStyleSuggestionState",
+                    "description": "A mask that indicates which of the fields in text style have been changed in this suggestion."
+                }
+            },
+            "type": "object"
+        },
+        "ObjectReferences": {
+            "description": "A collection of object IDs.",
+            "id": "ObjectReferences",
+            "properties": {
+                "objectIds": {
+                    "description": "The object IDs.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "OptionalColor": {
+            "description": "A color that can either be fully opaque or fully transparent.",
+            "id": "OptionalColor",
+            "properties": {
+                "color": {
+                    "$ref": "Color",
+                    "description": "If set, this will be used as an opaque color. If unset, this represents a transparent color."
+                }
+            },
+            "type": "object"
+        },
+        "PageBreak": {
+            "description": "A ParagraphElement representing a page break. A page break makes the subsequent text start at the top of the next page.",
+            "id": "PageBreak",
+            "properties": {
+                "suggestedDeletionIds": {
+                    "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedInsertionIds": {
+                    "description": "The suggested insertion IDs. A PageBreak may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedTextStyleChanges": {
+                    "additionalProperties": {
+                        "$ref": "SuggestedTextStyle"
+                    },
+                    "description": "The suggested text style changes to this PageBreak, keyed by suggestion ID.",
+                    "type": "object"
+                },
+                "textStyle": {
+                    "$ref": "TextStyle",
+                    "description": "The text style of this PageBreak. Similar to text content, like text runs and footnote references, the text style of a page break can affect content layout as well as the styling of text inserted adjacent to it."
+                }
+            },
+            "type": "object"
+        },
+        "Paragraph": {
+            "description": "A StructuralElement representing a paragraph. A paragraph is a range of content that is terminated with a newline character.",
+            "id": "Paragraph",
+            "properties": {
+                "bullet": {
+                    "$ref": "Bullet",
+                    "description": "The bullet for this paragraph. If not present, the paragraph does not belong to a list."
+                },
+                "elements": {
+                    "description": "The content of the paragraph broken down into its component parts.",
+                    "items": {
+                        "$ref": "ParagraphElement"
+                    },
+                    "type": "array"
+                },
+                "paragraphStyle": {
+                    "$ref": "ParagraphStyle",
+                    "description": "The style of this paragraph."
+                },
+                "positionedObjectIds": {
+                    "description": "The IDs of the positioned objects tethered to this paragraph.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedBulletChanges": {
+                    "additionalProperties": {
+                        "$ref": "SuggestedBullet"
+                    },
+                    "description": "The suggested changes to this paragraph's bullet.",
+                    "type": "object"
+                },
+                "suggestedParagraphStyleChanges": {
+                    "additionalProperties": {
+                        "$ref": "SuggestedParagraphStyle"
+                    },
+                    "description": "The suggested paragraph style changes to this paragraph, keyed by suggestion ID.",
+                    "type": "object"
+                },
+                "suggestedPositionedObjectIds": {
+                    "additionalProperties": {
+                        "$ref": "ObjectReferences"
+                    },
+                    "description": "The IDs of the positioned objects that are suggested to be attached to this paragraph, keyed by suggestion ID.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "ParagraphBorder": {
+            "description": "A border around a paragraph.",
+            "id": "ParagraphBorder",
+            "properties": {
+                "color": {
+                    "$ref": "OptionalColor",
+                    "description": "The color of the border."
+                },
+                "dashStyle": {
+                    "description": "The dash style of the border.",
+                    "enum": [
+                        "DASH_STYLE_UNSPECIFIED",
+                        "SOLID",
+                        "DOT",
+                        "DASH"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified dash style.",
+                        "Solid line. Corresponds to ECMA-376 ST_PresetLineDashVal value 'solid'. This is the default dash style.",
+                        "Dotted line. Corresponds to ECMA-376 ST_PresetLineDashVal value 'dot'.",
+                        "Dashed line. Corresponds to ECMA-376 ST_PresetLineDashVal value 'dash'."
+                    ],
+                    "type": "string"
+                },
+                "padding": {
+                    "$ref": "Dimension",
+                    "description": "The padding of the border."
+                },
+                "width": {
+                    "$ref": "Dimension",
+                    "description": "The width of the border."
+                }
+            },
+            "type": "object"
+        },
+        "ParagraphElement": {
+            "description": "A ParagraphElement describes content within a Paragraph.",
+            "id": "ParagraphElement",
+            "properties": {
+                "autoText": {
+                    "$ref": "AutoText",
+                    "description": "An auto text paragraph element."
+                },
+                "columnBreak": {
+                    "$ref": "ColumnBreak",
+                    "description": "A column break paragraph element."
+                },
+                "endIndex": {
+                    "description": "The zero-base end index of this paragraph element, exclusive, in UTF-16 code units.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "equation": {
+                    "$ref": "Equation",
+                    "description": "An equation paragraph element."
+                },
+                "footnoteReference": {
+                    "$ref": "FootnoteReference",
+                    "description": "A footnote reference paragraph element."
+                },
+                "horizontalRule": {
+                    "$ref": "HorizontalRule",
+                    "description": "A horizontal rule paragraph element."
+                },
+                "inlineObjectElement": {
+                    "$ref": "InlineObjectElement",
+                    "description": "An inline object paragraph element."
+                },
+                "pageBreak": {
+                    "$ref": "PageBreak",
+                    "description": "A page break paragraph element."
+                },
+                "startIndex": {
+                    "description": "The zero-based start index of this paragraph element, in UTF-16 code units.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "textRun": {
+                    "$ref": "TextRun",
+                    "description": "A text run paragraph element."
+                }
+            },
+            "type": "object"
+        },
+        "ParagraphStyle": {
+            "description": "Styles that apply to a whole paragraph. Inherited paragraph styles are represented as unset fields in this message. A paragraph style's parent depends on where the paragraph style is defined: * The ParagraphStyle on a Paragraph inherits from the paragraph's corresponding named style type. * The ParagraphStyle on a named style inherits from the normal text named style. * The ParagraphStyle of the normal text named style inherits from the default paragraph style in the Docs editor. * The ParagraphStyle on a Paragraph element that is contained in a table may inherit its paragraph style from the table style. If the paragraph style does not inherit from a parent, unsetting fields will revert the style to a value matching the defaults in the Docs editor.",
+            "id": "ParagraphStyle",
+            "properties": {
+                "alignment": {
+                    "description": "The text alignment for this paragraph.",
+                    "enum": [
+                        "ALIGNMENT_UNSPECIFIED",
+                        "START",
+                        "CENTER",
+                        "END",
+                        "JUSTIFIED"
+                    ],
+                    "enumDescriptions": [
+                        "The paragraph alignment is inherited from the parent.",
+                        "The paragraph is aligned to the start of the line. Left-aligned for LTR text, right-aligned otherwise.",
+                        "The paragraph is centered.",
+                        "The paragraph is aligned to the end of the line. Right-aligned for LTR text, left-aligned otherwise.",
+                        "The paragraph is justified."
+                    ],
+                    "type": "string"
+                },
+                "avoidWidowAndOrphan": {
+                    "description": "Whether to avoid widows and orphans for the paragraph. If unset, the value is inherited from the parent.",
+                    "type": "boolean"
+                },
+                "borderBetween": {
+                    "$ref": "ParagraphBorder",
+                    "description": "The border between this paragraph and the next and previous paragraphs. If unset, the value is inherited from the parent. The between border is rendered when the adjacent paragraph has the same border and indent properties. Paragraph borders cannot be partially updated. When making changes to a paragraph border the new border must be specified in its entirety."
+                },
+                "borderBottom": {
+                    "$ref": "ParagraphBorder",
+                    "description": "The border at the bottom of this paragraph. If unset, the value is inherited from the parent. The bottom border is rendered when the paragraph below has different border and indent properties. Paragraph borders cannot be partially updated. When making changes to a paragraph border the new border must be specified in its entirety."
+                },
+                "borderLeft": {
+                    "$ref": "ParagraphBorder",
+                    "description": "The border to the left of this paragraph. If unset, the value is inherited from the parent. Paragraph borders cannot be partially updated. When making changes to a paragraph border the new border must be specified in its entirety."
+                },
+                "borderRight": {
+                    "$ref": "ParagraphBorder",
+                    "description": "The border to the right of this paragraph. If unset, the value is inherited from the parent. Paragraph borders cannot be partially updated. When making changes to a paragraph border the new border must be specified in its entirety."
+                },
+                "borderTop": {
+                    "$ref": "ParagraphBorder",
+                    "description": "The border at the top of this paragraph. If unset, the value is inherited from the parent. The top border is rendered when the paragraph above has different border and indent properties. Paragraph borders cannot be partially updated. When making changes to a paragraph border the new border must be specified in its entirety."
+                },
+                "direction": {
+                    "description": "The text direction of this paragraph. If unset, the value defaults to LEFT_TO_RIGHT since paragraph direction is not inherited.",
+                    "enum": [
+                        "CONTENT_DIRECTION_UNSPECIFIED",
+                        "LEFT_TO_RIGHT",
+                        "RIGHT_TO_LEFT"
+                    ],
+                    "enumDescriptions": [
+                        "The content direction is unspecified.",
+                        "The content goes from left to right.",
+                        "The content goes from right to left."
+                    ],
+                    "type": "string"
+                },
+                "headingId": {
+                    "description": "The heading ID of the paragraph. If empty, then this paragraph is not a heading. This property is read-only.",
+                    "type": "string"
+                },
+                "indentEnd": {
+                    "$ref": "Dimension",
+                    "description": "The amount of indentation for the paragraph on the side that corresponds to the end of the text, based on the current paragraph direction. If unset, the value is inherited from the parent."
+                },
+                "indentFirstLine": {
+                    "$ref": "Dimension",
+                    "description": "The amount of indentation for the first line of the paragraph. If unset, the value is inherited from the parent."
+                },
+                "indentStart": {
+                    "$ref": "Dimension",
+                    "description": "The amount of indentation for the paragraph on the side that corresponds to the start of the text, based on the current paragraph direction. If unset, the value is inherited from the parent."
+                },
+                "keepLinesTogether": {
+                    "description": "Whether all lines of the paragraph should be laid out on the same page or column if possible. If unset, the value is inherited from the parent.",
+                    "type": "boolean"
+                },
+                "keepWithNext": {
+                    "description": "Whether at least a part of this paragraph should be laid out on the same page or column as the next paragraph if possible. If unset, the value is inherited from the parent.",
+                    "type": "boolean"
+                },
+                "lineSpacing": {
+                    "description": "The amount of space between lines, as a percentage of normal, where normal is represented as 100.0. If unset, the value is inherited from the parent.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "namedStyleType": {
+                    "description": "The named style type of the paragraph. Since updating the named style type affects other properties within ParagraphStyle, the named style type is applied before the other properties are updated.",
+                    "enum": [
+                        "NAMED_STYLE_TYPE_UNSPECIFIED",
+                        "NORMAL_TEXT",
+                        "TITLE",
+                        "SUBTITLE",
+                        "HEADING_1",
+                        "HEADING_2",
+                        "HEADING_3",
+                        "HEADING_4",
+                        "HEADING_5",
+                        "HEADING_6"
+                    ],
+                    "enumDescriptions": [
+                        "The type of named style is unspecified.",
+                        "Normal text.",
+                        "Title.",
+                        "Subtitle.",
+                        "Heading 1.",
+                        "Heading 2.",
+                        "Heading 3.",
+                        "Heading 4.",
+                        "Heading 5.",
+                        "Heading 6."
+                    ],
+                    "type": "string"
+                },
+                "shading": {
+                    "$ref": "Shading",
+                    "description": "The shading of the paragraph. If unset, the value is inherited from the parent."
+                },
+                "spaceAbove": {
+                    "$ref": "Dimension",
+                    "description": "The amount of extra space above the paragraph. If unset, the value is inherited from the parent."
+                },
+                "spaceBelow": {
+                    "$ref": "Dimension",
+                    "description": "The amount of extra space below the paragraph. If unset, the value is inherited from the parent."
+                },
+                "spacingMode": {
+                    "description": "The spacing mode for the paragraph.",
+                    "enum": [
+                        "SPACING_MODE_UNSPECIFIED",
+                        "NEVER_COLLAPSE",
+                        "COLLAPSE_LISTS"
+                    ],
+                    "enumDescriptions": [
+                        "The spacing mode is inherited from the parent.",
+                        "Paragraph spacing is always rendered.",
+                        "Paragraph spacing is skipped between list elements."
+                    ],
+                    "type": "string"
+                },
+                "tabStops": {
+                    "description": "A list of the tab stops for this paragraph. The list of tab stops is not inherited. This property is read-only.",
+                    "items": {
+                        "$ref": "TabStop"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ParagraphStyleSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion. For any field set to true, there is a new suggested value.",
+            "id": "ParagraphStyleSuggestionState",
+            "properties": {
+                "alignmentSuggested": {
+                    "description": "Indicates if there was a suggested change to alignment.",
+                    "type": "boolean"
+                },
+                "avoidWidowAndOrphanSuggested": {
+                    "description": "Indicates if there was a suggested change to avoid_widow_and_orphan.",
+                    "type": "boolean"
+                },
+                "borderBetweenSuggested": {
+                    "description": "Indicates if there was a suggested change to border_between.",
+                    "type": "boolean"
+                },
+                "borderBottomSuggested": {
+                    "description": "Indicates if there was a suggested change to border_bottom.",
+                    "type": "boolean"
+                },
+                "borderLeftSuggested": {
+                    "description": "Indicates if there was a suggested change to border_left.",
+                    "type": "boolean"
+                },
+                "borderRightSuggested": {
+                    "description": "Indicates if there was a suggested change to border_right.",
+                    "type": "boolean"
+                },
+                "borderTopSuggested": {
+                    "description": "Indicates if there was a suggested change to border_top.",
+                    "type": "boolean"
+                },
+                "directionSuggested": {
+                    "description": "Indicates if there was a suggested change to direction.",
+                    "type": "boolean"
+                },
+                "headingIdSuggested": {
+                    "description": "Indicates if there was a suggested change to heading_id.",
+                    "type": "boolean"
+                },
+                "indentEndSuggested": {
+                    "description": "Indicates if there was a suggested change to indent_end.",
+                    "type": "boolean"
+                },
+                "indentFirstLineSuggested": {
+                    "description": "Indicates if there was a suggested change to indent_first_line.",
+                    "type": "boolean"
+                },
+                "indentStartSuggested": {
+                    "description": "Indicates if there was a suggested change to indent_start.",
+                    "type": "boolean"
+                },
+                "keepLinesTogetherSuggested": {
+                    "description": "Indicates if there was a suggested change to keep_lines_together.",
+                    "type": "boolean"
+                },
+                "keepWithNextSuggested": {
+                    "description": "Indicates if there was a suggested change to keep_with_next.",
+                    "type": "boolean"
+                },
+                "lineSpacingSuggested": {
+                    "description": "Indicates if there was a suggested change to line_spacing.",
+                    "type": "boolean"
+                },
+                "namedStyleTypeSuggested": {
+                    "description": "Indicates if there was a suggested change to named_style_type.",
+                    "type": "boolean"
+                },
+                "shadingSuggestionState": {
+                    "$ref": "ShadingSuggestionState",
+                    "description": "A mask that indicates which of the fields in shading have been changed in this suggestion."
+                },
+                "spaceAboveSuggested": {
+                    "description": "Indicates if there was a suggested change to space_above.",
+                    "type": "boolean"
+                },
+                "spaceBelowSuggested": {
+                    "description": "Indicates if there was a suggested change to space_below.",
+                    "type": "boolean"
+                },
+                "spacingModeSuggested": {
+                    "description": "Indicates if there was a suggested change to spacing_mode.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "PositionedObject": {
+            "description": "An object that is tethered to a Paragraph and positioned relative to the beginning of the paragraph. A PositionedObject contains an EmbeddedObject such as an image.",
+            "id": "PositionedObject",
+            "properties": {
+                "objectId": {
+                    "description": "The ID of this positioned object.",
+                    "type": "string"
+                },
+                "positionedObjectProperties": {
+                    "$ref": "PositionedObjectProperties",
+                    "description": "The properties of this positioned object."
+                },
+                "suggestedDeletionIds": {
+                    "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedInsertionId": {
+                    "description": "The suggested insertion ID. If empty, then this is not a suggested insertion.",
+                    "type": "string"
+                },
+                "suggestedPositionedObjectPropertiesChanges": {
+                    "additionalProperties": {
+                        "$ref": "SuggestedPositionedObjectProperties"
+                    },
+                    "description": "The suggested changes to the positioned object properties, keyed by suggestion ID.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "PositionedObjectPositioning": {
+            "description": "The positioning of a PositionedObject. The positioned object is positioned relative to the beginning of the Paragraph it is tethered to.",
+            "id": "PositionedObjectPositioning",
+            "properties": {
+                "layout": {
+                    "description": "The layout of this positioned object.",
+                    "enum": [
+                        "POSITIONED_OBJECT_LAYOUT_UNSPECIFIED",
+                        "WRAP_TEXT",
+                        "BREAK_LEFT",
+                        "BREAK_RIGHT",
+                        "BREAK_LEFT_RIGHT",
+                        "IN_FRONT_OF_TEXT"
+                    ],
+                    "enumDescriptions": [
+                        "The layout is unspecified.",
+                        "The text wraps around the positioned object.",
+                        "Breaks text such that the positioned object is on the left and text is on the right.",
+                        "Breaks text such that the positioned object is on the right and text is on the left.",
+                        "Breaks text such that there is no text on the left or right of the positioned object.",
+                        "The positioned object is in front of the text."
+                    ],
+                    "type": "string"
+                },
+                "leftOffset": {
+                    "$ref": "Dimension",
+                    "description": "The offset of the left edge of the positioned object relative to the beginning of the Paragraph it is tethered to. The exact positioning of the object can depend on other content in the document and the document's styling."
+                },
+                "topOffset": {
+                    "$ref": "Dimension",
+                    "description": "The offset of the top edge of the positioned object relative to the beginning of the Paragraph it is tethered to. The exact positioning of the object can depend on other content in the document and the document's styling."
+                }
+            },
+            "type": "object"
+        },
+        "PositionedObjectPositioningSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base PositionedObjectPositioning have been changed in this suggestion. For any field set to true, there is a new suggested value.",
+            "id": "PositionedObjectPositioningSuggestionState",
+            "properties": {
+                "layoutSuggested": {
+                    "description": "Indicates if there was a suggested change to layout.",
+                    "type": "boolean"
+                },
+                "leftOffsetSuggested": {
+                    "description": "Indicates if there was a suggested change to left_offset.",
+                    "type": "boolean"
+                },
+                "topOffsetSuggested": {
+                    "description": "Indicates if there was a suggested change to top_offset.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "PositionedObjectProperties": {
+            "description": "Properties of a PositionedObject.",
+            "id": "PositionedObjectProperties",
+            "properties": {
+                "embeddedObject": {
+                    "$ref": "EmbeddedObject",
+                    "description": "The embedded object of this positioned object."
+                },
+                "positioning": {
+                    "$ref": "PositionedObjectPositioning",
+                    "description": "The positioning of this positioned object relative to the newline of the Paragraph that references this positioned object."
+                }
+            },
+            "type": "object"
+        },
+        "PositionedObjectPropertiesSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base PositionedObjectProperties have been changed in this suggestion. For any field set to true, there is a new suggested value.",
+            "id": "PositionedObjectPropertiesSuggestionState",
+            "properties": {
+                "embeddedObjectSuggestionState": {
+                    "$ref": "EmbeddedObjectSuggestionState",
+                    "description": "A mask that indicates which of the fields in embedded_object have been changed in this suggestion."
+                },
+                "positioningSuggestionState": {
+                    "$ref": "PositionedObjectPositioningSuggestionState",
+                    "description": "A mask that indicates which of the fields in positioning have been changed in this suggestion."
+                }
+            },
+            "type": "object"
+        },
+        "Range": {
+            "description": "Specifies a contiguous range of text.",
+            "id": "Range",
+            "properties": {
+                "endIndex": {
+                    "description": "The zero-based end index of this range, exclusive, in UTF-16 code units. In all current uses, an end index must be provided. This field is an Int32Value in order to accommodate future use cases with open-ended ranges.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "segmentId": {
+                    "description": "The ID of the header, footer or footnote that this range is contained in. An empty segment ID signifies the document's body.",
+                    "type": "string"
+                },
+                "startIndex": {
+                    "description": "The zero-based start index of this range, in UTF-16 code units. In all current uses, a start index must be provided. This field is an Int32Value in order to accommodate future use cases with open-ended ranges.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "ReplaceAllTextRequest": {
+            "description": "Replaces all instances of text matching a criteria with replace text.",
+            "id": "ReplaceAllTextRequest",
+            "properties": {
+                "containsText": {
+                    "$ref": "SubstringMatchCriteria",
+                    "description": "Finds text in the document matching this substring."
+                },
+                "replaceText": {
+                    "description": "The text that will replace the matched text.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReplaceAllTextResponse": {
+            "description": "The result of replacing text.",
+            "id": "ReplaceAllTextResponse",
+            "properties": {
+                "occurrencesChanged": {
+                    "description": "The number of occurrences changed by replacing all text.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "ReplaceImageRequest": {
+            "description": "Replaces an existing image with a new image. Replacing an image removes some image effects from the existing image in order to mirror the behavior of the Docs editor.",
+            "id": "ReplaceImageRequest",
+            "properties": {
+                "imageObjectId": {
+                    "description": "The ID of the existing image that will be replaced.",
+                    "type": "string"
+                },
+                "imageReplaceMethod": {
+                    "description": "The replacement method.",
+                    "enum": [
+                        "IMAGE_REPLACE_METHOD_UNSPECIFIED",
+                        "CENTER_CROP"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified image replace method. This value must not be used.",
+                        "Scales and centers the image to fill the bounds of the original image. The image may be cropped in order to fill the original image's bounds. The rendered size of the image will be the same as that of the original image."
+                    ],
+                    "type": "string"
+                },
+                "uri": {
+                    "description": "The URI of the new image. The image is fetched once at insertion time and a copy is stored for display inside the document. Images must be less than 50MB in size, cannot exceed 25 megapixels, and must be in one of PNG, JPEG, or GIF format. The provided URI can be at most 2 kB in length. The URI itself is saved with the image, and exposed via the ImageProperties.source_uri field.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReplaceNamedRangeContentRequest": {
+            "description": "Replaces the contents of the specified NamedRange or NamedRanges with the given replacement content. Note that an individual NamedRange may consist of multiple discontinuous ranges. In this case, only the content in the first range will be replaced. The other ranges and their content will be deleted. In cases where replacing or deleting any ranges would result in an invalid document structure, a 400 bad request error is returned.",
+            "id": "ReplaceNamedRangeContentRequest",
+            "properties": {
+                "namedRangeId": {
+                    "description": "The ID of the named range whose content will be replaced. If there is no named range with the given ID a 400 bad request error is returned.",
+                    "type": "string"
+                },
+                "namedRangeName": {
+                    "description": "The name of the NamedRanges whose content will be replaced. If there are multiple named ranges with the given name, then the content of each one will be replaced. If there are no named ranges with the given name, then the request will be a no-op.",
+                    "type": "string"
+                },
+                "text": {
+                    "description": "Replaces the content of the specified named range(s) with the given text.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Request": {
+            "description": "A single update to apply to a document.",
+            "id": "Request",
+            "properties": {
+                "createFooter": {
+                    "$ref": "CreateFooterRequest",
+                    "description": "Creates a footer."
+                },
+                "createFootnote": {
+                    "$ref": "CreateFootnoteRequest",
+                    "description": "Creates a footnote."
+                },
+                "createHeader": {
+                    "$ref": "CreateHeaderRequest",
+                    "description": "Creates a header."
+                },
+                "createNamedRange": {
+                    "$ref": "CreateNamedRangeRequest",
+                    "description": "Creates a named range."
+                },
+                "createParagraphBullets": {
+                    "$ref": "CreateParagraphBulletsRequest",
+                    "description": "Creates bullets for paragraphs."
+                },
+                "deleteContentRange": {
+                    "$ref": "DeleteContentRangeRequest",
+                    "description": "Deletes content from the document."
+                },
+                "deleteFooter": {
+                    "$ref": "DeleteFooterRequest",
+                    "description": "Deletes a footer from the document."
+                },
+                "deleteHeader": {
+                    "$ref": "DeleteHeaderRequest",
+                    "description": "Deletes a header from the document."
+                },
+                "deleteNamedRange": {
+                    "$ref": "DeleteNamedRangeRequest",
+                    "description": "Deletes a named range."
+                },
+                "deleteParagraphBullets": {
+                    "$ref": "DeleteParagraphBulletsRequest",
+                    "description": "Deletes bullets from paragraphs."
+                },
+                "deletePositionedObject": {
+                    "$ref": "DeletePositionedObjectRequest",
+                    "description": "Deletes a positioned object from the document."
+                },
+                "deleteTableColumn": {
+                    "$ref": "DeleteTableColumnRequest",
+                    "description": "Deletes a column from a table."
+                },
+                "deleteTableRow": {
+                    "$ref": "DeleteTableRowRequest",
+                    "description": "Deletes a row from a table."
+                },
+                "insertInlineImage": {
+                    "$ref": "InsertInlineImageRequest",
+                    "description": "Inserts an inline image at the specified location."
+                },
+                "insertPageBreak": {
+                    "$ref": "InsertPageBreakRequest",
+                    "description": "Inserts a page break at the specified location."
+                },
+                "insertSectionBreak": {
+                    "$ref": "InsertSectionBreakRequest",
+                    "description": "Inserts a section break at the specified location."
+                },
+                "insertTable": {
+                    "$ref": "InsertTableRequest",
+                    "description": "Inserts a table at the specified location."
+                },
+                "insertTableColumn": {
+                    "$ref": "InsertTableColumnRequest",
+                    "description": "Inserts an empty column into a table."
+                },
+                "insertTableRow": {
+                    "$ref": "InsertTableRowRequest",
+                    "description": "Inserts an empty row into a table."
+                },
+                "insertText": {
+                    "$ref": "InsertTextRequest",
+                    "description": "Inserts text at the specified location."
+                },
+                "mergeTableCells": {
+                    "$ref": "MergeTableCellsRequest",
+                    "description": "Merges cells in a table."
+                },
+                "replaceAllText": {
+                    "$ref": "ReplaceAllTextRequest",
+                    "description": "Replaces all instances of the specified text."
+                },
+                "replaceImage": {
+                    "$ref": "ReplaceImageRequest",
+                    "description": "Replaces an image in the document."
+                },
+                "replaceNamedRangeContent": {
+                    "$ref": "ReplaceNamedRangeContentRequest",
+                    "description": "Replaces the content in a named range."
+                },
+                "unmergeTableCells": {
+                    "$ref": "UnmergeTableCellsRequest",
+                    "description": "Unmerges cells in a table."
+                },
+                "updateDocumentStyle": {
+                    "$ref": "UpdateDocumentStyleRequest",
+                    "description": "Updates the style of the document."
+                },
+                "updateParagraphStyle": {
+                    "$ref": "UpdateParagraphStyleRequest",
+                    "description": "Updates the paragraph style at the specified range."
+                },
+                "updateSectionStyle": {
+                    "$ref": "UpdateSectionStyleRequest",
+                    "description": "Updates the section style of the specified range."
+                },
+                "updateTableCellStyle": {
+                    "$ref": "UpdateTableCellStyleRequest",
+                    "description": "Updates the style of table cells."
+                },
+                "updateTableColumnProperties": {
+                    "$ref": "UpdateTableColumnPropertiesRequest",
+                    "description": "Updates the properties of columns in a table."
+                },
+                "updateTableRowStyle": {
+                    "$ref": "UpdateTableRowStyleRequest",
+                    "description": "Updates the row style in a table."
+                },
+                "updateTextStyle": {
+                    "$ref": "UpdateTextStyleRequest",
+                    "description": "Updates the text style at the specified range."
+                }
+            },
+            "type": "object"
+        },
+        "Response": {
+            "description": "A single response from an update.",
+            "id": "Response",
+            "properties": {
+                "createFooter": {
+                    "$ref": "CreateFooterResponse",
+                    "description": "The result of creating a footer."
+                },
+                "createFootnote": {
+                    "$ref": "CreateFootnoteResponse",
+                    "description": "The result of creating a footnote."
+                },
+                "createHeader": {
+                    "$ref": "CreateHeaderResponse",
+                    "description": "The result of creating a header."
+                },
+                "createNamedRange": {
+                    "$ref": "CreateNamedRangeResponse",
+                    "description": "The result of creating a named range."
+                },
+                "insertInlineImage": {
+                    "$ref": "InsertInlineImageResponse",
+                    "description": "The result of inserting an inline image."
+                },
+                "insertInlineSheetsChart": {
+                    "$ref": "InsertInlineSheetsChartResponse",
+                    "description": "The result of inserting an inline Google Sheets chart."
+                },
+                "replaceAllText": {
+                    "$ref": "ReplaceAllTextResponse",
+                    "description": "The result of replacing text."
+                }
+            },
+            "type": "object"
+        },
+        "RgbColor": {
+            "description": "An RGB color.",
+            "id": "RgbColor",
+            "properties": {
+                "blue": {
+                    "description": "The blue component of the color, from 0.0 to 1.0.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "green": {
+                    "description": "The green component of the color, from 0.0 to 1.0.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "red": {
+                    "description": "The red component of the color, from 0.0 to 1.0.",
+                    "format": "float",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "SectionBreak": {
+            "description": "A StructuralElement representing a section break. A section is a range of content which has the same SectionStyle. A section break represents the start of a new section, and the section style applies to the section after the section break. The document body always begins with a section break.",
+            "id": "SectionBreak",
+            "properties": {
+                "sectionStyle": {
+                    "$ref": "SectionStyle",
+                    "description": "The style of the section after this section break."
+                },
+                "suggestedDeletionIds": {
+                    "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedInsertionIds": {
+                    "description": "The suggested insertion IDs. A SectionBreak may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "SectionColumnProperties": {
+            "description": "Properties that apply to a section's column.",
+            "id": "SectionColumnProperties",
+            "properties": {
+                "paddingEnd": {
+                    "$ref": "Dimension",
+                    "description": "The padding at the end of the column."
+                },
+                "width": {
+                    "$ref": "Dimension",
+                    "description": "Output only. The width of the column."
+                }
+            },
+            "type": "object"
+        },
+        "SectionStyle": {
+            "description": "The styling that applies to a section.",
+            "id": "SectionStyle",
+            "properties": {
+                "columnProperties": {
+                    "description": "The section's columns properties. If empty, the section contains one column with the default properties in the Docs editor. A section can be updated to have no more than three columns. When updating this property, setting a concrete value is required. Unsetting this property will result in a 400 bad request error.",
+                    "items": {
+                        "$ref": "SectionColumnProperties"
+                    },
+                    "type": "array"
+                },
+                "columnSeparatorStyle": {
+                    "description": "The style of column separators. This style can be set even when there is one column in the section. When updating this property, setting a concrete value is required. Unsetting this property results in a 400 bad request error.",
+                    "enum": [
+                        "COLUMN_SEPARATOR_STYLE_UNSPECIFIED",
+                        "NONE",
+                        "BETWEEN_EACH_COLUMN"
+                    ],
+                    "enumDescriptions": [
+                        "An unspecified column separator style.",
+                        "No column separator lines between columns.",
+                        "Renders a column separator line between each column."
+                    ],
+                    "type": "string"
+                },
+                "contentDirection": {
+                    "description": "The content direction of this section. If unset, the value defaults to LEFT_TO_RIGHT. When updating this property, setting a concrete value is required. Unsetting this property results in a 400 bad request error.",
+                    "enum": [
+                        "CONTENT_DIRECTION_UNSPECIFIED",
+                        "LEFT_TO_RIGHT",
+                        "RIGHT_TO_LEFT"
+                    ],
+                    "enumDescriptions": [
+                        "The content direction is unspecified.",
+                        "The content goes from left to right.",
+                        "The content goes from right to left."
+                    ],
+                    "type": "string"
+                },
+                "defaultFooterId": {
+                    "description": "The ID of the default footer. If unset, the value inherits from the previous SectionBreak's SectionStyle. If the value is unset in the first SectionBreak, it inherits from DocumentStyle's default_footer_id. This property is read-only.",
+                    "type": "string"
+                },
+                "defaultHeaderId": {
+                    "description": "The ID of the default header. If unset, the value inherits from the previous SectionBreak's SectionStyle. If the value is unset in the first SectionBreak, it inherits from DocumentStyle's default_header_id. This property is read-only.",
+                    "type": "string"
+                },
+                "evenPageFooterId": {
+                    "description": "The ID of the footer used only for even pages. If the value of DocumentStyle's use_even_page_header_footer is true, this value is used for the footers on even pages in the section. If it is false, the footers on even pages uses the default_footer_id. If unset, the value inherits from the previous SectionBreak's SectionStyle. If the value is unset in the first SectionBreak, it inherits from DocumentStyle's even_page_footer_id. This property is read-only.",
+                    "type": "string"
+                },
+                "evenPageHeaderId": {
+                    "description": "The ID of the header used only for even pages. If the value of DocumentStyle's use_even_page_header_footer is true, this value is used for the headers on even pages in the section. If it is false, the headers on even pages uses the default_header_id. If unset, the value inherits from the previous SectionBreak's SectionStyle. If the value is unset in the first SectionBreak, it inherits from DocumentStyle's even_page_header_id. This property is read-only.",
+                    "type": "string"
+                },
+                "firstPageFooterId": {
+                    "description": "The ID of the footer used only for the first page of the section. If use_first_page_header_footer is true, this value is used for the footer on the first page of the section. If it is false, the footer on the first page of the section uses the default_footer_id. If unset, the value inherits from the previous SectionBreak's SectionStyle. If the value is unset in the first SectionBreak, it inherits from DocumentStyle's first_page_footer_id. This property is read-only.",
+                    "type": "string"
+                },
+                "firstPageHeaderId": {
+                    "description": "The ID of the header used only for the first page of the section. If use_first_page_header_footer is true, this value is used for the header on the first page of the section. If it is false, the header on the first page of the section uses the default_header_id. If unset, the value inherits from the previous SectionBreak's SectionStyle. If the value is unset in the first SectionBreak, it inherits from DocumentStyle's first_page_header_id. This property is read-only.",
+                    "type": "string"
+                },
+                "marginBottom": {
+                    "$ref": "Dimension",
+                    "description": "The bottom page margin of the section. If unset, uses margin_bottom from DocumentStyle. When updating this property, setting a concrete value is required. Unsetting this property results in a 400 bad request error."
+                },
+                "marginFooter": {
+                    "$ref": "Dimension",
+                    "description": "The footer margin of the section. If unset, uses margin_footer from DocumentStyle. If updated, use_custom_header_footer_margins is set to true on DocumentStyle. The value of use_custom_header_footer_margins on DocumentStyle indicates if a footer margin is being respected for this section When updating this property, setting a concrete value is required. Unsetting this property results in a 400 bad request error."
+                },
+                "marginHeader": {
+                    "$ref": "Dimension",
+                    "description": "The header margin of the section. If unset, uses margin_header from DocumentStyle. If updated, use_custom_header_footer_margins is set to true on DocumentStyle. The value of use_custom_header_footer_margins on DocumentStyle indicates if a header margin is being respected for this section. When updating this property, setting a concrete value is required. Unsetting this property results in a 400 bad request error."
+                },
+                "marginLeft": {
+                    "$ref": "Dimension",
+                    "description": "The left page margin of the section. If unset, uses margin_left from DocumentStyle. Updating left margin causes columns in this section to resize. Since the margin affects column width, it is applied before column properties. When updating this property, setting a concrete value is required. Unsetting this property results in a 400 bad request error."
+                },
+                "marginRight": {
+                    "$ref": "Dimension",
+                    "description": "The right page margin of the section. If unset, uses margin_right from DocumentStyle. Updating right margin causes columns in this section to resize. Since the margin affects column width, it is applied before column properties. When updating this property, setting a concrete value is required. Unsetting this property results in a 400 bad request error."
+                },
+                "marginTop": {
+                    "$ref": "Dimension",
+                    "description": "The top page margin of the section. If unset, uses margin_top from DocumentStyle. When updating this property, setting a concrete value is required. Unsetting this property results in a 400 bad request error."
+                },
+                "pageNumberStart": {
+                    "description": "The page number from which to start counting the number of pages for this section. If unset, page numbering continues from the previous section. If the value is unset in the first SectionBreak, refer to DocumentStyle's page_number_start. When updating this property, setting a concrete value is required. Unsetting this property results in a 400 bad request error.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "sectionType": {
+                    "description": "Output only. The type of section.",
+                    "enum": [
+                        "SECTION_TYPE_UNSPECIFIED",
+                        "CONTINUOUS",
+                        "NEXT_PAGE"
+                    ],
+                    "enumDescriptions": [
+                        "The section type is unspecified.",
+                        "The section starts immediately after the last paragraph of the previous section.",
+                        "The section starts on the next page."
+                    ],
+                    "type": "string"
+                },
+                "useFirstPageHeaderFooter": {
+                    "description": "Indicates whether to use the first page header / footer IDs for the first page of the section. If unset, it inherits from DocumentStyle's use_first_page_header_footer for the first section. If the value is unset for subsequent sectors, it should be interpreted as false. When updating this property, setting a concrete value is required. Unsetting this property results in a 400 bad request error.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "Shading": {
+            "description": "The shading of a paragraph.",
+            "id": "Shading",
+            "properties": {
+                "backgroundColor": {
+                    "$ref": "OptionalColor",
+                    "description": "The background color of this paragraph shading."
+                }
+            },
+            "type": "object"
+        },
+        "ShadingSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base Shading have been changed in this suggested change. For any field set to true, there is a new suggested value.",
+            "id": "ShadingSuggestionState",
+            "properties": {
+                "backgroundColorSuggested": {
+                    "description": "Indicates if there was a suggested change to the Shading.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "SheetsChartReference": {
+            "description": "A reference to a linked chart embedded from Google Sheets.",
+            "id": "SheetsChartReference",
+            "properties": {
+                "chartId": {
+                    "description": "The ID of the specific chart in the Google Sheets spreadsheet that is embedded.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "spreadsheetId": {
+                    "description": "The ID of the Google Sheets spreadsheet that contains the source chart.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SheetsChartReferenceSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base SheetsChartReference have been changed in this suggestion. For any field set to true, there is a new suggested value.",
+            "id": "SheetsChartReferenceSuggestionState",
+            "properties": {
+                "chartIdSuggested": {
+                    "description": "Indicates if there was a suggested change to chart_id.",
+                    "type": "boolean"
+                },
+                "spreadsheetIdSuggested": {
+                    "description": "Indicates if there was a suggested change to spreadsheet_id.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "Size": {
+            "description": "A width and height.",
+            "id": "Size",
+            "properties": {
+                "height": {
+                    "$ref": "Dimension",
+                    "description": "The height of the object."
+                },
+                "width": {
+                    "$ref": "Dimension",
+                    "description": "The width of the object."
+                }
+            },
+            "type": "object"
+        },
+        "SizeSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base Size have been changed in this suggestion. For any field set to true, the Size has a new suggested value.",
+            "id": "SizeSuggestionState",
+            "properties": {
+                "heightSuggested": {
+                    "description": "Indicates if there was a suggested change to height.",
+                    "type": "boolean"
+                },
+                "widthSuggested": {
+                    "description": "Indicates if there was a suggested change to width.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "StructuralElement": {
+            "description": "A StructuralElement describes content that provides structure to the document.",
+            "id": "StructuralElement",
+            "properties": {
+                "endIndex": {
+                    "description": "The zero-based end index of this structural element, exclusive, in UTF-16 code units.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "paragraph": {
+                    "$ref": "Paragraph",
+                    "description": "A paragraph type of structural element."
+                },
+                "sectionBreak": {
+                    "$ref": "SectionBreak",
+                    "description": "A section break type of structural element."
+                },
+                "startIndex": {
+                    "description": "The zero-based start index of this structural element, in UTF-16 code units.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "table": {
+                    "$ref": "Table",
+                    "description": "A table type of structural element."
+                },
+                "tableOfContents": {
+                    "$ref": "TableOfContents",
+                    "description": "A table of contents type of structural element."
+                }
+            },
+            "type": "object"
+        },
+        "SubstringMatchCriteria": {
+            "description": "A criteria that matches a specific string of text in the document.",
+            "id": "SubstringMatchCriteria",
+            "properties": {
+                "matchCase": {
+                    "description": "Indicates whether the search should respect case: - `True`: the search is case sensitive. - `False`: the search is case insensitive.",
+                    "type": "boolean"
+                },
+                "text": {
+                    "description": "The text to search for in the document.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SuggestedBullet": {
+            "description": "A suggested change to a Bullet.",
+            "id": "SuggestedBullet",
+            "properties": {
+                "bullet": {
+                    "$ref": "Bullet",
+                    "description": "A Bullet that only includes the changes made in this suggestion. This can be used along with the bullet_suggestion_state to see which fields have changed and their new values."
+                },
+                "bulletSuggestionState": {
+                    "$ref": "BulletSuggestionState",
+                    "description": "A mask that indicates which of the fields on the base Bullet have been changed in this suggestion."
+                }
+            },
+            "type": "object"
+        },
+        "SuggestedDocumentStyle": {
+            "description": "A suggested change to the DocumentStyle.",
+            "id": "SuggestedDocumentStyle",
+            "properties": {
+                "documentStyle": {
+                    "$ref": "DocumentStyle",
+                    "description": "A DocumentStyle that only includes the changes made in this suggestion. This can be used along with the document_style_suggestion_state to see which fields have changed and their new values."
+                },
+                "documentStyleSuggestionState": {
+                    "$ref": "DocumentStyleSuggestionState",
+                    "description": "A mask that indicates which of the fields on the base DocumentStyle have been changed in this suggestion."
+                }
+            },
+            "type": "object"
+        },
+        "SuggestedInlineObjectProperties": {
+            "description": "A suggested change to InlineObjectProperties.",
+            "id": "SuggestedInlineObjectProperties",
+            "properties": {
+                "inlineObjectProperties": {
+                    "$ref": "InlineObjectProperties",
+                    "description": "An InlineObjectProperties that only includes the changes made in this suggestion. This can be used along with the inline_object_properties_suggestion_state to see which fields have changed and their new values."
+                },
+                "inlineObjectPropertiesSuggestionState": {
+                    "$ref": "InlineObjectPropertiesSuggestionState",
+                    "description": "A mask that indicates which of the fields on the base InlineObjectProperties have been changed in this suggestion."
+                }
+            },
+            "type": "object"
+        },
+        "SuggestedListProperties": {
+            "description": "A suggested change to ListProperties.",
+            "id": "SuggestedListProperties",
+            "properties": {
+                "listProperties": {
+                    "$ref": "ListProperties",
+                    "description": "A ListProperties that only includes the changes made in this suggestion. This can be used along with the list_properties_suggestion_state to see which fields have changed and their new values."
+                },
+                "listPropertiesSuggestionState": {
+                    "$ref": "ListPropertiesSuggestionState",
+                    "description": "A mask that indicates which of the fields on the base ListProperties have been changed in this suggestion."
+                }
+            },
+            "type": "object"
+        },
+        "SuggestedNamedStyles": {
+            "description": "A suggested change to the NamedStyles.",
+            "id": "SuggestedNamedStyles",
+            "properties": {
+                "namedStyles": {
+                    "$ref": "NamedStyles",
+                    "description": "A NamedStyles that only includes the changes made in this suggestion. This can be used along with the named_styles_suggestion_state to see which fields have changed and their new values."
+                },
+                "namedStylesSuggestionState": {
+                    "$ref": "NamedStylesSuggestionState",
+                    "description": "A mask that indicates which of the fields on the base NamedStyles have been changed in this suggestion."
+                }
+            },
+            "type": "object"
+        },
+        "SuggestedParagraphStyle": {
+            "description": "A suggested change to a ParagraphStyle.",
+            "id": "SuggestedParagraphStyle",
+            "properties": {
+                "paragraphStyle": {
+                    "$ref": "ParagraphStyle",
+                    "description": "A ParagraphStyle that only includes the changes made in this suggestion. This can be used along with the paragraph_suggestion_state to see which fields have changed and their new values."
+                },
+                "paragraphStyleSuggestionState": {
+                    "$ref": "ParagraphStyleSuggestionState",
+                    "description": "A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion."
+                }
+            },
+            "type": "object"
+        },
+        "SuggestedPositionedObjectProperties": {
+            "description": "A suggested change to PositionedObjectProperties.",
+            "id": "SuggestedPositionedObjectProperties",
+            "properties": {
+                "positionedObjectProperties": {
+                    "$ref": "PositionedObjectProperties",
+                    "description": "A PositionedObjectProperties that only includes the changes made in this suggestion. This can be used along with the positioned_object_properties_suggestion_state to see which fields have changed and their new values."
+                },
+                "positionedObjectPropertiesSuggestionState": {
+                    "$ref": "PositionedObjectPropertiesSuggestionState",
+                    "description": "A mask that indicates which of the fields on the base PositionedObjectProperties have been changed in this suggestion."
+                }
+            },
+            "type": "object"
+        },
+        "SuggestedTableCellStyle": {
+            "description": "A suggested change to a TableCellStyle.",
+            "id": "SuggestedTableCellStyle",
+            "properties": {
+                "tableCellStyle": {
+                    "$ref": "TableCellStyle",
+                    "description": "A TableCellStyle that only includes the changes made in this suggestion. This can be used along with the table_cell_style_suggestion_state to see which fields have changed and their new values."
+                },
+                "tableCellStyleSuggestionState": {
+                    "$ref": "TableCellStyleSuggestionState",
+                    "description": "A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion."
+                }
+            },
+            "type": "object"
+        },
+        "SuggestedTableRowStyle": {
+            "description": "A suggested change to a TableRowStyle.",
+            "id": "SuggestedTableRowStyle",
+            "properties": {
+                "tableRowStyle": {
+                    "$ref": "TableRowStyle",
+                    "description": "A TableRowStyle that only includes the changes made in this suggestion. This can be used along with the table_row_style_suggestion_state to see which fields have changed and their new values."
+                },
+                "tableRowStyleSuggestionState": {
+                    "$ref": "TableRowStyleSuggestionState",
+                    "description": "A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion."
+                }
+            },
+            "type": "object"
+        },
+        "SuggestedTextStyle": {
+            "description": "A suggested change to a TextStyle.",
+            "id": "SuggestedTextStyle",
+            "properties": {
+                "textStyle": {
+                    "$ref": "TextStyle",
+                    "description": "A TextStyle that only includes the changes made in this suggestion. This can be used along with the text_style_suggestion_state to see which fields have changed and their new values."
+                },
+                "textStyleSuggestionState": {
+                    "$ref": "TextStyleSuggestionState",
+                    "description": "A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion."
+                }
+            },
+            "type": "object"
+        },
+        "TabStop": {
+            "description": "A tab stop within a paragraph.",
+            "id": "TabStop",
+            "properties": {
+                "alignment": {
+                    "description": "The alignment of this tab stop. If unset, the value defaults to START.",
+                    "enum": [
+                        "TAB_STOP_ALIGNMENT_UNSPECIFIED",
+                        "START",
+                        "CENTER",
+                        "END"
+                    ],
+                    "enumDescriptions": [
+                        "The tab stop alignment is unspecified.",
+                        "The tab stop is aligned to the start of the line. This is the default.",
+                        "The tab stop is aligned to the center of the line.",
+                        "The tab stop is aligned to the end of the line."
+                    ],
+                    "type": "string"
+                },
+                "offset": {
+                    "$ref": "Dimension",
+                    "description": "The offset between this tab stop and the start margin."
+                }
+            },
+            "type": "object"
+        },
+        "Table": {
+            "description": "A StructuralElement representing a table.",
+            "id": "Table",
+            "properties": {
+                "columns": {
+                    "description": "Number of columns in the table. It is possible for a table to be non-rectangular, so some rows may have a different number of cells.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "rows": {
+                    "description": "Number of rows in the table.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "suggestedDeletionIds": {
+                    "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedInsertionIds": {
+                    "description": "The suggested insertion IDs. A Table may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "tableRows": {
+                    "description": "The contents and style of each row.",
+                    "items": {
+                        "$ref": "TableRow"
+                    },
+                    "type": "array"
+                },
+                "tableStyle": {
+                    "$ref": "TableStyle",
+                    "description": "The style of the table."
+                }
+            },
+            "type": "object"
+        },
+        "TableCell": {
+            "description": "The contents and style of a cell in a Table.",
+            "id": "TableCell",
+            "properties": {
+                "content": {
+                    "description": "The content of the cell.",
+                    "items": {
+                        "$ref": "StructuralElement"
+                    },
+                    "type": "array"
+                },
+                "endIndex": {
+                    "description": "The zero-based end index of this cell, exclusive, in UTF-16 code units.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "startIndex": {
+                    "description": "The zero-based start index of this cell, in UTF-16 code units.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "suggestedDeletionIds": {
+                    "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedInsertionIds": {
+                    "description": "The suggested insertion IDs. A TableCell may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedTableCellStyleChanges": {
+                    "additionalProperties": {
+                        "$ref": "SuggestedTableCellStyle"
+                    },
+                    "description": "The suggested changes to the table cell style, keyed by suggestion ID.",
+                    "type": "object"
+                },
+                "tableCellStyle": {
+                    "$ref": "TableCellStyle",
+                    "description": "The style of the cell."
+                }
+            },
+            "type": "object"
+        },
+        "TableCellBorder": {
+            "description": "A border around a table cell. Table cell borders cannot be transparent. To hide a table cell border, make its width 0.",
+            "id": "TableCellBorder",
+            "properties": {
+                "color": {
+                    "$ref": "OptionalColor",
+                    "description": "The color of the border. This color cannot be transparent."
+                },
+                "dashStyle": {
+                    "description": "The dash style of the border.",
+                    "enum": [
+                        "DASH_STYLE_UNSPECIFIED",
+                        "SOLID",
+                        "DOT",
+                        "DASH"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified dash style.",
+                        "Solid line. Corresponds to ECMA-376 ST_PresetLineDashVal value 'solid'. This is the default dash style.",
+                        "Dotted line. Corresponds to ECMA-376 ST_PresetLineDashVal value 'dot'.",
+                        "Dashed line. Corresponds to ECMA-376 ST_PresetLineDashVal value 'dash'."
+                    ],
+                    "type": "string"
+                },
+                "width": {
+                    "$ref": "Dimension",
+                    "description": "The width of the border."
+                }
+            },
+            "type": "object"
+        },
+        "TableCellLocation": {
+            "description": "Location of a single cell within a table.",
+            "id": "TableCellLocation",
+            "properties": {
+                "columnIndex": {
+                    "description": "The zero-based column index. For example, the second column in the table has a column index of 1.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "rowIndex": {
+                    "description": "The zero-based row index. For example, the second row in the table has a row index of 1.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "tableStartLocation": {
+                    "$ref": "Location",
+                    "description": "The location where the table starts in the document."
+                }
+            },
+            "type": "object"
+        },
+        "TableCellStyle": {
+            "description": "The style of a TableCell. Inherited table cell styles are represented as unset fields in this message. A table cell style can inherit from the table's style.",
+            "id": "TableCellStyle",
+            "properties": {
+                "backgroundColor": {
+                    "$ref": "OptionalColor",
+                    "description": "The background color of the cell."
+                },
+                "borderBottom": {
+                    "$ref": "TableCellBorder",
+                    "description": "The bottom border of the cell."
+                },
+                "borderLeft": {
+                    "$ref": "TableCellBorder",
+                    "description": "The left border of the cell."
+                },
+                "borderRight": {
+                    "$ref": "TableCellBorder",
+                    "description": "The right border of the cell."
+                },
+                "borderTop": {
+                    "$ref": "TableCellBorder",
+                    "description": "The top border of the cell."
+                },
+                "columnSpan": {
+                    "description": "The column span of the cell. This property is read-only.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "contentAlignment": {
+                    "description": "The alignment of the content in the table cell. The default alignment matches the alignment for newly created table cells in the Docs editor.",
+                    "enum": [
+                        "CONTENT_ALIGNMENT_UNSPECIFIED",
+                        "CONTENT_ALIGNMENT_UNSUPPORTED",
+                        "TOP",
+                        "MIDDLE",
+                        "BOTTOM"
+                    ],
+                    "enumDescriptions": [
+                        "An unspecified content alignment. The content alignment is inherited from the parent if one exists.",
+                        "An unsupported content alignment.",
+                        "An alignment that aligns the content to the top of the content holder. Corresponds to ECMA-376 ST_TextAnchoringType 't'.",
+                        "An alignment that aligns the content to the middle of the content holder. Corresponds to ECMA-376 ST_TextAnchoringType 'ctr'.",
+                        "An alignment that aligns the content to the bottom of the content holder. Corresponds to ECMA-376 ST_TextAnchoringType 'b'."
+                    ],
+                    "type": "string"
+                },
+                "paddingBottom": {
+                    "$ref": "Dimension",
+                    "description": "The bottom padding of the cell."
+                },
+                "paddingLeft": {
+                    "$ref": "Dimension",
+                    "description": "The left padding of the cell."
+                },
+                "paddingRight": {
+                    "$ref": "Dimension",
+                    "description": "The right padding of the cell."
+                },
+                "paddingTop": {
+                    "$ref": "Dimension",
+                    "description": "The top padding of the cell."
+                },
+                "rowSpan": {
+                    "description": "The row span of the cell. This property is read-only.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "TableCellStyleSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion. For any field set to true, there is a new suggested value.",
+            "id": "TableCellStyleSuggestionState",
+            "properties": {
+                "backgroundColorSuggested": {
+                    "description": "Indicates if there was a suggested change to background_color.",
+                    "type": "boolean"
+                },
+                "borderBottomSuggested": {
+                    "description": "Indicates if there was a suggested change to border_bottom.",
+                    "type": "boolean"
+                },
+                "borderLeftSuggested": {
+                    "description": "Indicates if there was a suggested change to border_left.",
+                    "type": "boolean"
+                },
+                "borderRightSuggested": {
+                    "description": "Indicates if there was a suggested change to border_right.",
+                    "type": "boolean"
+                },
+                "borderTopSuggested": {
+                    "description": "Indicates if there was a suggested change to border_top.",
+                    "type": "boolean"
+                },
+                "columnSpanSuggested": {
+                    "description": "Indicates if there was a suggested change to column_span.",
+                    "type": "boolean"
+                },
+                "contentAlignmentSuggested": {
+                    "description": "Indicates if there was a suggested change to content_alignment.",
+                    "type": "boolean"
+                },
+                "paddingBottomSuggested": {
+                    "description": "Indicates if there was a suggested change to padding_bottom.",
+                    "type": "boolean"
+                },
+                "paddingLeftSuggested": {
+                    "description": "Indicates if there was a suggested change to padding_left.",
+                    "type": "boolean"
+                },
+                "paddingRightSuggested": {
+                    "description": "Indicates if there was a suggested change to padding_right.",
+                    "type": "boolean"
+                },
+                "paddingTopSuggested": {
+                    "description": "Indicates if there was a suggested change to padding_top.",
+                    "type": "boolean"
+                },
+                "rowSpanSuggested": {
+                    "description": "Indicates if there was a suggested change to row_span.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "TableColumnProperties": {
+            "description": "The properties of a column in a table.",
+            "id": "TableColumnProperties",
+            "properties": {
+                "width": {
+                    "$ref": "Dimension",
+                    "description": "The width of the column. Set when the column's `width_type` is FIXED_WIDTH."
+                },
+                "widthType": {
+                    "description": "The width type of the column.",
+                    "enum": [
+                        "WIDTH_TYPE_UNSPECIFIED",
+                        "EVENLY_DISTRIBUTED",
+                        "FIXED_WIDTH"
+                    ],
+                    "enumDescriptions": [
+                        "The column width type is unspecified.",
+                        "The column width is evenly distributed among the other evenly distrubted columns. The width of the column is automatically determined and will have an equal portion of the width remaining for the table after accounting for all columns with specified widths.",
+                        "A fixed column width. The width property contains the column's width."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TableOfContents": {
+            "description": "A StructuralElement representing a table of contents.",
+            "id": "TableOfContents",
+            "properties": {
+                "content": {
+                    "description": "The content of the table of contents.",
+                    "items": {
+                        "$ref": "StructuralElement"
+                    },
+                    "type": "array"
+                },
+                "suggestedDeletionIds": {
+                    "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedInsertionIds": {
+                    "description": "The suggested insertion IDs. A TableOfContents may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "TableRange": {
+            "description": "A table range represents a reference to a subset of a table. It's important to note that the cells specified by a table range do not necessarily form a rectangle. For example, let's say we have a 3 x 3 table where all the cells of the last row are merged together. The table looks like this: [ ] A table range with table cell location = (table_start_location, row = 0, column = 0), row span = 3 and column span = 2 specifies the following cells: x x [ x x x ]",
+            "id": "TableRange",
+            "properties": {
+                "columnSpan": {
+                    "description": "The column span of the table range.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "rowSpan": {
+                    "description": "The row span of the table range.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "tableCellLocation": {
+                    "$ref": "TableCellLocation",
+                    "description": "The cell location where the table range starts."
+                }
+            },
+            "type": "object"
+        },
+        "TableRow": {
+            "description": "The contents and style of a row in a Table.",
+            "id": "TableRow",
+            "properties": {
+                "endIndex": {
+                    "description": "The zero-based end index of this row, exclusive, in UTF-16 code units.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "startIndex": {
+                    "description": "The zero-based start index of this row, in UTF-16 code units.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "suggestedDeletionIds": {
+                    "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedInsertionIds": {
+                    "description": "The suggested insertion IDs. A TableRow may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedTableRowStyleChanges": {
+                    "additionalProperties": {
+                        "$ref": "SuggestedTableRowStyle"
+                    },
+                    "description": "The suggested style changes to this row, keyed by suggestion ID.",
+                    "type": "object"
+                },
+                "tableCells": {
+                    "description": "The contents and style of each cell in this row. It is possible for a table to be non-rectangular, so some rows may have a different number of cells than other rows in the same table.",
+                    "items": {
+                        "$ref": "TableCell"
+                    },
+                    "type": "array"
+                },
+                "tableRowStyle": {
+                    "$ref": "TableRowStyle",
+                    "description": "The style of the table row."
+                }
+            },
+            "type": "object"
+        },
+        "TableRowStyle": {
+            "description": "Styles that apply to a table row.",
+            "id": "TableRowStyle",
+            "properties": {
+                "minRowHeight": {
+                    "$ref": "Dimension",
+                    "description": "The minimum height of the row. The row will be rendered in the Docs editor at a height equal to or greater than this value in order to show all the content in the row's cells."
+                }
+            },
+            "type": "object"
+        },
+        "TableRowStyleSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion. For any field set to true, there is a new suggested value.",
+            "id": "TableRowStyleSuggestionState",
+            "properties": {
+                "minRowHeightSuggested": {
+                    "description": "Indicates if there was a suggested change to min_row_height.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "TableStyle": {
+            "description": "Styles that apply to a table.",
+            "id": "TableStyle",
+            "properties": {
+                "tableColumnProperties": {
+                    "description": "The properties of each column. Note that in Docs, tables contain rows and rows contain cells, similar to HTML. So the properties for a row can be found on the row's table_row_style.",
+                    "items": {
+                        "$ref": "TableColumnProperties"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "TextRun": {
+            "description": "A ParagraphElement that represents a run of text that all has the same styling.",
+            "id": "TextRun",
+            "properties": {
+                "content": {
+                    "description": "The text of this run. Any non-text elements in the run are replaced with the Unicode character U+E907.",
+                    "type": "string"
+                },
+                "suggestedDeletionIds": {
+                    "description": "The suggested deletion IDs. If empty, then there are no suggested deletions of this content.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedInsertionIds": {
+                    "description": "The suggested insertion IDs. A TextRun may have multiple insertion IDs if it is a nested suggested change. If empty, then this is not a suggested insertion.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "suggestedTextStyleChanges": {
+                    "additionalProperties": {
+                        "$ref": "SuggestedTextStyle"
+                    },
+                    "description": "The suggested text style changes to this run, keyed by suggestion ID.",
+                    "type": "object"
+                },
+                "textStyle": {
+                    "$ref": "TextStyle",
+                    "description": "The text style of this run."
+                }
+            },
+            "type": "object"
+        },
+        "TextStyle": {
+            "description": "Represents the styling that can be applied to text. Inherited text styles are represented as unset fields in this message. A text style's parent depends on where the text style is defined: * The TextStyle of text in a Paragraph inherits from the paragraph's corresponding named style type. * The TextStyle on a named style inherits from the normal text named style. * The TextStyle of the normal text named style inherits from the default text style in the Docs editor. * The TextStyle on a Paragraph element that is contained in a table may inherit its text style from the table style. If the text style does not inherit from a parent, unsetting fields will revert the style to a value matching the defaults in the Docs editor.",
+            "id": "TextStyle",
+            "properties": {
+                "backgroundColor": {
+                    "$ref": "OptionalColor",
+                    "description": "The background color of the text. If set, the color is either an RGB color or transparent, depending on the `color` field."
+                },
+                "baselineOffset": {
+                    "description": "The text's vertical offset from its normal position. Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically rendered in a smaller font size, computed based on the `font_size` field. The `font_size` itself is not affected by changes in this field.",
+                    "enum": [
+                        "BASELINE_OFFSET_UNSPECIFIED",
+                        "NONE",
+                        "SUPERSCRIPT",
+                        "SUBSCRIPT"
+                    ],
+                    "enumDescriptions": [
+                        "The text's baseline offset is inherited from the parent.",
+                        "The text is not vertically offset.",
+                        "The text is vertically offset upwards (superscript).",
+                        "The text is vertically offset downwards (subscript)."
+                    ],
+                    "type": "string"
+                },
+                "bold": {
+                    "description": "Whether or not the text is rendered as bold.",
+                    "type": "boolean"
+                },
+                "fontSize": {
+                    "$ref": "Dimension",
+                    "description": "The size of the text's font."
+                },
+                "foregroundColor": {
+                    "$ref": "OptionalColor",
+                    "description": "The foreground color of the text. If set, the color is either an RGB color or transparent, depending on the `color` field."
+                },
+                "italic": {
+                    "description": "Whether or not the text is italicized.",
+                    "type": "boolean"
+                },
+                "link": {
+                    "$ref": "Link",
+                    "description": "The hyperlink destination of the text. If unset, there is no link. Links are not inherited from parent text. Changing the link in an update request causes some other changes to the text style of the range: * When setting a link, the text foreground color will be updated to the default link color and the text will be underlined. If these fields are modified in the same request, those values will be used instead of the link defaults. * Setting a link on a text range that overlaps with an existing link will also update the existing link to point to the new URL. * Links are not settable on newline characters. As a result, setting a link on a text range that crosses a paragraph boundary, such as `\"ABC\\n123\"`, will separate the newline character(s) into their own text runs. The link will be applied separately to the runs before and after the newline. * Removing a link will update the text style of the range to match the style of the preceding text (or the default text styles if the preceding text is another link) unless different styles are being set in the same request."
+                },
+                "smallCaps": {
+                    "description": "Whether or not the text is in small capital letters.",
+                    "type": "boolean"
+                },
+                "strikethrough": {
+                    "description": "Whether or not the text is struck through.",
+                    "type": "boolean"
+                },
+                "underline": {
+                    "description": "Whether or not the text is underlined.",
+                    "type": "boolean"
+                },
+                "weightedFontFamily": {
+                    "$ref": "WeightedFontFamily",
+                    "description": "The font family and rendered weight of the text. If an update request specifies values for both `weighted_font_family` and `bold`, the `weighted_font_family` is applied first, then `bold`. If `weighted_font_family#weight` is not set, it defaults to `400`. If `weighted_font_family` is set, then `weighted_font_family#font_family` must also be set with a non-empty value. Otherwise, a 400 bad request error is returned."
+                }
+            },
+            "type": "object"
+        },
+        "TextStyleSuggestionState": {
+            "description": "A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. For any field set to true, there is a new suggested value.",
+            "id": "TextStyleSuggestionState",
+            "properties": {
+                "backgroundColorSuggested": {
+                    "description": "Indicates if there was a suggested change to background_color.",
+                    "type": "boolean"
+                },
+                "baselineOffsetSuggested": {
+                    "description": "Indicates if there was a suggested change to baseline_offset.",
+                    "type": "boolean"
+                },
+                "boldSuggested": {
+                    "description": "Indicates if there was a suggested change to bold.",
+                    "type": "boolean"
+                },
+                "fontSizeSuggested": {
+                    "description": "Indicates if there was a suggested change to font_size.",
+                    "type": "boolean"
+                },
+                "foregroundColorSuggested": {
+                    "description": "Indicates if there was a suggested change to foreground_color.",
+                    "type": "boolean"
+                },
+                "italicSuggested": {
+                    "description": "Indicates if there was a suggested change to italic.",
+                    "type": "boolean"
+                },
+                "linkSuggested": {
+                    "description": "Indicates if there was a suggested change to link.",
+                    "type": "boolean"
+                },
+                "smallCapsSuggested": {
+                    "description": "Indicates if there was a suggested change to small_caps.",
+                    "type": "boolean"
+                },
+                "strikethroughSuggested": {
+                    "description": "Indicates if there was a suggested change to strikethrough.",
+                    "type": "boolean"
+                },
+                "underlineSuggested": {
+                    "description": "Indicates if there was a suggested change to underline.",
+                    "type": "boolean"
+                },
+                "weightedFontFamilySuggested": {
+                    "description": "Indicates if there was a suggested change to weighted_font_family.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "UnmergeTableCellsRequest": {
+            "description": "Unmerges cells in a Table.",
+            "id": "UnmergeTableCellsRequest",
+            "properties": {
+                "tableRange": {
+                    "$ref": "TableRange",
+                    "description": "The table range specifying which cells of the table to unmerge. All merged cells in this range will be unmerged, and cells that are already unmerged will not be affected. If the range has no merged cells, the request will do nothing. If there is text in any of the merged cells, the text will remain in the \"head\" cell of the resulting block of unmerged cells. The \"head\" cell is the upper-left cell when the content direction is from left to right, and the upper-right otherwise."
+                }
+            },
+            "type": "object"
+        },
+        "UpdateDocumentStyleRequest": {
+            "description": "Updates the DocumentStyle.",
+            "id": "UpdateDocumentStyleRequest",
+            "properties": {
+                "documentStyle": {
+                    "$ref": "DocumentStyle",
+                    "description": "The styles to set on the document. Certain document style changes may cause other changes in order to mirror the behavior of the Docs editor. See the documentation of DocumentStyle for more information."
+                },
+                "fields": {
+                    "description": "The fields that should be updated. At least one field must be specified. The root `document_style` is implied and should not be specified. A single `\"*\"` can be used as short-hand for listing every field. For example to update the background, set `fields` to `\"background\"`.",
+                    "format": "google-fieldmask",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UpdateParagraphStyleRequest": {
+            "description": "Update the styling of all paragraphs that overlap with the given range.",
+            "id": "UpdateParagraphStyleRequest",
+            "properties": {
+                "fields": {
+                    "description": "The fields that should be updated. At least one field must be specified. The root `paragraph_style` is implied and should not be specified. For example, to update the paragraph style's alignment property, set `fields` to `\"alignment\"`. To reset a property to its default value, include its field name in the field mask but leave the field itself unset.",
+                    "format": "google-fieldmask",
+                    "type": "string"
+                },
+                "paragraphStyle": {
+                    "$ref": "ParagraphStyle",
+                    "description": "The styles to set on the paragraphs. Certain paragraph style changes may cause other changes in order to mirror the behavior of the Docs editor. See the documentation of ParagraphStyle for more information."
+                },
+                "range": {
+                    "$ref": "Range",
+                    "description": "The range overlapping the paragraphs to style."
+                }
+            },
+            "type": "object"
+        },
+        "UpdateSectionStyleRequest": {
+            "description": "Updates the SectionStyle.",
+            "id": "UpdateSectionStyleRequest",
+            "properties": {
+                "fields": {
+                    "description": "The fields that should be updated. At least one field must be specified. The root `section_style` is implied and must not be specified. A single `\"*\"` can be used as short-hand for listing every field. For example to update the left margin, set `fields` to `\"margin_left\"`.",
+                    "format": "google-fieldmask",
+                    "type": "string"
+                },
+                "range": {
+                    "$ref": "Range",
+                    "description": "The range overlapping the sections to style. Because section breaks can only be inserted inside the body, the segment ID field must be empty."
+                },
+                "sectionStyle": {
+                    "$ref": "SectionStyle",
+                    "description": "The styles to be set on the section. Certain section style changes may cause other changes in order to mirror the behavior of the Docs editor. See the documentation of SectionStyle for more information."
+                }
+            },
+            "type": "object"
+        },
+        "UpdateTableCellStyleRequest": {
+            "description": "Updates the style of a range of table cells.",
+            "id": "UpdateTableCellStyleRequest",
+            "properties": {
+                "fields": {
+                    "description": "The fields that should be updated. At least one field must be specified. The root `tableCellStyle` is implied and should not be specified. A single `\"*\"` can be used as short-hand for listing every field. For example to update the table cell background color, set `fields` to `\"backgroundColor\"`. To reset a property to its default value, include its field name in the field mask but leave the field itself unset.",
+                    "format": "google-fieldmask",
+                    "type": "string"
+                },
+                "tableCellStyle": {
+                    "$ref": "TableCellStyle",
+                    "description": "The style to set on the table cells. When updating borders, if a cell shares a border with an adjacent cell, the corresponding border property of the adjacent cell is updated as well. Borders that are merged and invisible are not updated. Since updating a border shared by adjacent cells in the same request can cause conflicting border updates, border updates are applied in the following order: - `border_right` - `border_left` - `border_bottom` - `border_top`"
+                },
+                "tableRange": {
+                    "$ref": "TableRange",
+                    "description": "The table range representing the subset of the table to which the updates are applied."
+                },
+                "tableStartLocation": {
+                    "$ref": "Location",
+                    "description": "The location where the table starts in the document. When specified, the updates are applied to all the cells in the table."
+                }
+            },
+            "type": "object"
+        },
+        "UpdateTableColumnPropertiesRequest": {
+            "description": "Updates the TableColumnProperties of columns in a table.",
+            "id": "UpdateTableColumnPropertiesRequest",
+            "properties": {
+                "columnIndices": {
+                    "description": "The list of zero-based column indices whose property should be updated. If no indices are specified, all columns will be updated.",
+                    "items": {
+                        "format": "int32",
+                        "type": "integer"
+                    },
+                    "type": "array"
+                },
+                "fields": {
+                    "description": "The fields that should be updated. At least one field must be specified. The root `tableColumnProperties` is implied and should not be specified. A single `\"*\"` can be used as short-hand for listing every field. For example to update the column width, set `fields` to `\"width\"`.",
+                    "format": "google-fieldmask",
+                    "type": "string"
+                },
+                "tableColumnProperties": {
+                    "$ref": "TableColumnProperties",
+                    "description": "The table column properties to update. If the value of `table_column_properties#width` is less than 5 points (5/72 inch), a 400 bad request error is returned."
+                },
+                "tableStartLocation": {
+                    "$ref": "Location",
+                    "description": "The location where the table starts in the document."
+                }
+            },
+            "type": "object"
+        },
+        "UpdateTableRowStyleRequest": {
+            "description": "Updates the TableRowStyle of rows in a table.",
+            "id": "UpdateTableRowStyleRequest",
+            "properties": {
+                "fields": {
+                    "description": "The fields that should be updated. At least one field must be specified. The root `tableRowStyle` is implied and should not be specified. A single `\"*\"` can be used as short-hand for listing every field. For example to update the minimum row height, set `fields` to `\"min_row_height\"`.",
+                    "format": "google-fieldmask",
+                    "type": "string"
+                },
+                "rowIndices": {
+                    "description": "The list of zero-based row indices whose style should be updated. If no indices are specified, all rows will be updated.",
+                    "items": {
+                        "format": "int32",
+                        "type": "integer"
+                    },
+                    "type": "array"
+                },
+                "tableRowStyle": {
+                    "$ref": "TableRowStyle",
+                    "description": "The styles to be set on the rows."
+                },
+                "tableStartLocation": {
+                    "$ref": "Location",
+                    "description": "The location where the table starts in the document."
+                }
+            },
+            "type": "object"
+        },
+        "UpdateTextStyleRequest": {
+            "description": "Update the styling of text.",
+            "id": "UpdateTextStyleRequest",
+            "properties": {
+                "fields": {
+                    "description": "The fields that should be updated. At least one field must be specified. The root `text_style` is implied and should not be specified. A single `\"*\"` can be used as short-hand for listing every field. For example, to update the text style to bold, set `fields` to `\"bold\"`. To reset a property to its default value, include its field name in the field mask but leave the field itself unset.",
+                    "format": "google-fieldmask",
+                    "type": "string"
+                },
+                "range": {
+                    "$ref": "Range",
+                    "description": "The range of text to style. The range may be extended to include adjacent newlines. If the range fully contains a paragraph belonging to a list, the paragraph's bullet is also updated with the matching text style. Ranges cannot be inserted inside a relative UpdateTextStyleRequest."
+                },
+                "textStyle": {
+                    "$ref": "TextStyle",
+                    "description": "The styles to set on the text. If the value for a particular style matches that of the parent, that style will be set to inherit. Certain text style changes may cause other changes in order to to mirror the behavior of the Docs editor. See the documentation of TextStyle for more information."
+                }
+            },
+            "type": "object"
+        },
+        "WeightedFontFamily": {
+            "description": "Represents a font family and weight of text.",
+            "id": "WeightedFontFamily",
+            "properties": {
+                "fontFamily": {
+                    "description": "The font family of the text. The font family can be any font from the Font menu in Docs or from [Google Fonts] (https://fonts.google.com/). If the font name is unrecognized, the text is rendered in `Arial`.",
+                    "type": "string"
+                },
+                "weight": {
+                    "description": "The weight of the font. This field can have any value that is a multiple of `100` between `100` and `900`, inclusive. This range corresponds to the numerical values described in the CSS 2.1 Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness), with non-numerical values disallowed. The default value is `400` (\"normal\"). The font weight makes up just one component of the rendered font weight. The rendered weight is determined by a combination of the `weight` and the text style's resolved `bold` value, after accounting for inheritance: * If the text is bold and the weight is less than `400`, the rendered weight is 400. * If the text is bold and the weight is greater than or equal to `400` but is less than `700`, the rendered weight is `700`. * If the weight is greater than or equal to `700`, the rendered weight is equal to the weight. * If the text is not bold, the rendered weight is equal to the weight.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "WriteControl": {
+            "description": "Provides control over how write requests are executed.",
+            "id": "WriteControl",
+            "properties": {
+                "requiredRevisionId": {
+                    "description": "The revision ID of the document that the write request will be applied to. If this is not the latest revision of the document, the request will not be processed and will return a 400 bad request error. When a required revision ID is returned in a response, it indicates the revision ID of the document after the request was applied.",
+                    "type": "string"
+                },
+                "targetRevisionId": {
+                    "description": "The target revision ID of the document that the write request will be applied to. If collaborator changes have occurred after the document was read using the API, the changes produced by this write request will be transformed against the collaborator changes. This results in a new revision of the document which incorporates both the changes in the request and the collaborator changes, and the Docs server will resolve conflicting changes. When using `target_revision_id`, the API client can be thought of as another collaborator of the document. The target revision ID may only be used to write to recent versions of a document. If the target revision is too far behind the latest revision, the request will not be processed and will return a 400 bad request error and the request should be retried after reading the latest version of the document. In most cases a `revision_id` will remain valid for use as a target revision for several minutes after it is read, but for frequently-edited documents this window may be shorter.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         }
-      }
-    }
-  },
-  "ownerDomain": "google.com",
-  "canonicalName": "Docs",
-  "id": "docs:v1",
-  "documentationLink": "https://developers.google.com/docs/"
-}
+    },
+    "servicePath": "",
+    "title": "Google Docs API",
+    "version": "v1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/domains.v1alpha2.json b/googleapiclient/discovery_cache/documents/domains.v1alpha2.json
index a7daa26..d52f71c 100644
--- a/googleapiclient/discovery_cache/documents/domains.v1alpha2.json
+++ b/googleapiclient/discovery_cache/documents/domains.v1alpha2.json
@@ -1,1775 +1,1775 @@
 {
-  "fullyEncodeReservedExpansion": true,
-  "ownerName": "Google",
-  "mtlsRootUrl": "https://domains.mtls.googleapis.com/",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "discoveryVersion": "v1",
-  "servicePath": "",
-  "kind": "discovery#restDescription",
-  "parameters": {
-    "access_token": {
-      "location": "query",
-      "description": "OAuth access token.",
-      "type": "string"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "fields": {
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "location": "query",
-      "default": "true"
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "callback": {
-      "type": "string",
-      "location": "query",
-      "description": "JSONP"
-    },
-    "upload_protocol": {
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "location": "query"
-    },
-    "$.xgafv": {
-      "enum": [
-        "1",
-        "2"
-      ],
-      "type": "string",
-      "location": "query",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "description": "V1 error format."
-    },
-    "key": {
-      "location": "query",
-      "type": "string",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token."
-    },
-    "alt": {
-      "description": "Data format for response.",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "location": "query",
-      "type": "string",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "default": "json"
-    },
-    "quotaUser": {
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "type": "string",
-      "location": "query"
-    }
-  },
-  "version": "v1alpha2",
-  "description": "Enables management and configuration of domain names.",
-  "version_module": true,
-  "batchPath": "batch",
-  "rootUrl": "https://domains.googleapis.com/",
-  "schemas": {
-    "Policy": {
-      "type": "object",
-      "id": "Policy",
-      "properties": {
-        "bindings": {
-          "items": {
-            "$ref": "Binding"
-          },
-          "type": "array",
-          "description": "Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member."
-        },
-        "version": {
-          "format": "int32",
-          "description": "Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
-          "type": "integer"
-        },
-        "auditConfigs": {
-          "description": "Specifies cloud audit logging configuration for this policy.",
-          "type": "array",
-          "items": {
-            "$ref": "AuditConfig"
-          }
-        },
-        "etag": {
-          "description": "`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.",
-          "format": "byte",
-          "type": "string"
-        }
-      },
-      "description": "An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { \"bindings\": [ { \"role\": \"roles/resourcemanager.organizationAdmin\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\" ] }, { \"role\": \"roles/resourcemanager.organizationViewer\", \"members\": [ \"user:eve@example.com\" ], \"condition\": { \"title\": \"expirable access\", \"description\": \"Does not grant access after Sep 2020\", \"expression\": \"request.time \u003c timestamp('2020-10-01T00:00:00.000Z')\", } } ], \"etag\": \"BwWWja0YfJA=\", \"version\": 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time \u003c timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/)."
-    },
-    "ListRegistrationsResponse": {
-      "id": "ListRegistrationsResponse",
-      "properties": {
-        "registrations": {
-          "description": "A list of `Registration`s.",
-          "items": {
-            "$ref": "Registration"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "When present, there are more results to retrieve. Set `page_token` to this value on a subsequent call to get the next page of results."
-        }
-      },
-      "type": "object",
-      "description": "Response for the `ListRegistrations` method."
-    },
-    "GlueRecord": {
-      "type": "object",
-      "id": "GlueRecord",
-      "description": "Defines a host on your domain that is a DNS name server for your domain and/or other domains. Glue records are a way of making the IP address of a name server known, even when it serves DNS queries for its parent domain. For example, when `ns.example.com` is a name server for `example.com`, the host `ns.example.com` must have a glue record to break the circular DNS reference.",
-      "properties": {
-        "hostName": {
-          "description": "Required. Domain name of the host in Punycode format.",
-          "type": "string"
-        },
-        "ipv6Addresses": {
-          "items": {
-            "type": "string"
-          },
-          "description": "List of IPv6 addresses corresponding to this host in the standard hexadecimal format (e.g. `2001:db8::`). At least one of `ipv4_address` and `ipv6_address` must be set.",
-          "type": "array"
-        },
-        "ipv4Addresses": {
-          "description": "List of IPv4 addresses corresponding to this host in the standard decimal format (e.g. `198.51.100.1`). At least one of `ipv4_address` and `ipv6_address` must be set.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      }
-    },
-    "RegisterParameters": {
-      "id": "RegisterParameters",
-      "description": "Parameters required to register a new domain.",
-      "properties": {
-        "availability": {
-          "description": "Indicates whether the domain is available for registration. This value is accurate when obtained by calling `RetrieveRegisterParameters`, but is approximate when obtained by calling `SearchDomains`.",
-          "type": "string",
-          "enumDescriptions": [
-            "The availability is unspecified.",
-            "The domain is available for registration.",
-            "The domain is not available for registration. Generally this means it is already registered to another party.",
-            "The domain is not currently supported by Cloud Domains, but may be available elsewhere.",
-            "Cloud Domains is unable to determine domain availability, generally due to system maintenance at the domain name registry."
-          ],
-          "enum": [
-            "AVAILABILITY_UNSPECIFIED",
-            "AVAILABLE",
-            "UNAVAILABLE",
-            "UNSUPPORTED",
-            "UNKNOWN"
-          ]
-        },
-        "yearlyPrice": {
-          "description": "Price to register or renew the domain for one year.",
-          "$ref": "Money"
-        },
-        "domainName": {
-          "description": "The domain name. Unicode domain names are expressed in Punycode format.",
-          "type": "string"
-        },
-        "domainNotices": {
-          "items": {
-            "type": "string",
-            "enumDescriptions": [
-              "The notice is undefined.",
-              "Indicates that the domain is preloaded on the HTTP Strict Transport Security list in browsers. Serving a website on such domain requires an SSL certificate. For details, see [how to get an SSL certificate](https://support.google.com/domains/answer/7638036)."
-            ],
-            "enum": [
-              "DOMAIN_NOTICE_UNSPECIFIED",
-              "HSTS_PRELOADED"
-            ]
-          },
-          "description": "Notices about special properties of the domain.",
-          "type": "array"
-        },
-        "supportedPrivacy": {
-          "type": "array",
-          "items": {
-            "enum": [
-              "CONTACT_PRIVACY_UNSPECIFIED",
-              "PUBLIC_CONTACT_DATA",
-              "PRIVATE_CONTACT_DATA",
-              "REDACTED_CONTACT_DATA"
-            ],
-            "type": "string",
-            "enumDescriptions": [
-              "The contact privacy settings are undefined.",
-              "All the data from `ContactSettings` is publicly available. When setting this option, you must also provide a `PUBLIC_CONTACT_DATA_ACKNOWLEDGEMENT` in the `contact_notices` field of the request.",
-              "None of the data from `ContactSettings` is publicly available. Instead, proxy contact data is published for your domain. Email sent to the proxy email address is forwarded to the registrant's email address. Cloud Domains provides this privacy proxy service at no additional cost.",
-              "Some data from `ContactSettings` is publicly available. The actual information redacted depends on the domain. For details, see [the registration privacy article](https://support.google.com/domains/answer/3251242)."
-            ]
-          },
-          "description": "Contact privacy options that the domain supports."
-        }
-      },
-      "type": "object"
-    },
-    "ConfigureManagementSettingsRequest": {
-      "description": "Request for the `ConfigureManagementSettings` method.",
-      "id": "ConfigureManagementSettingsRequest",
-      "type": "object",
-      "properties": {
-        "managementSettings": {
-          "description": "Fields of the `ManagementSettings` to update.",
-          "$ref": "ManagementSettings"
-        },
-        "updateMask": {
-          "type": "string",
-          "format": "google-fieldmask",
-          "description": "Required. The field mask describing which fields to update as a comma-separated list. For example, if only the transfer lock is being updated, the `update_mask` would be `\"transfer_lock_state\"`."
-        }
-      }
-    },
-    "Money": {
-      "type": "object",
-      "description": "Represents an amount of money with its currency type.",
-      "properties": {
-        "units": {
-          "type": "string",
-          "description": "The whole units of the amount. For example if `currencyCode` is `\"USD\"`, then 1 unit is one US dollar.",
-          "format": "int64"
-        },
-        "currencyCode": {
-          "description": "The three-letter currency code defined in ISO 4217.",
-          "type": "string"
-        },
-        "nanos": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Number of nano (10^-9) units of the amount. The value must be between -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos` must be positive or zero. If `units` is zero, `nanos` can be positive, zero, or negative. If `units` is negative, `nanos` must be negative or zero. For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000."
-        }
-      },
-      "id": "Money"
-    },
-    "Operation": {
-      "properties": {
-        "response": {
-          "type": "object",
-          "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          }
-        },
-        "done": {
-          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
-          "type": "boolean"
-        },
-        "name": {
-          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
-          "type": "string"
-        },
-        "metadata": {
-          "type": "object",
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any."
-        },
-        "error": {
-          "$ref": "Status",
-          "description": "The error result of the operation in case of failure or cancellation."
-        }
-      },
-      "type": "object",
-      "id": "Operation",
-      "description": "This resource represents a long-running operation that is the result of a network API call."
-    },
-    "DnsSettings": {
-      "description": "Defines the DNS configuration of a `Registration`, including name servers, DNSSEC, and glue records.",
-      "id": "DnsSettings",
-      "type": "object",
-      "properties": {
-        "customDns": {
-          "$ref": "CustomDns",
-          "description": "An arbitrary DNS provider identified by its name servers."
-        },
-        "googleDomainsDns": {
-          "$ref": "GoogleDomainsDns",
-          "description": "The free DNS zone provided by [Google Domains](https://domains.google/)."
-        },
-        "glueRecords": {
-          "description": "The list of glue records for this `Registration`. Commonly empty.",
-          "items": {
-            "$ref": "GlueRecord"
-          },
-          "type": "array"
-        }
-      }
-    },
-    "ListLocationsResponse": {
-      "properties": {
-        "locations": {
-          "description": "A list of locations that matches the specified filter in the request.",
-          "type": "array",
-          "items": {
-            "$ref": "Location"
-          }
-        },
-        "nextPageToken": {
-          "description": "The standard List next-page token.",
-          "type": "string"
-        }
-      },
-      "id": "ListLocationsResponse",
-      "description": "The response message for Locations.ListLocations.",
-      "type": "object"
-    },
-    "ResetAuthorizationCodeRequest": {
-      "properties": {},
-      "id": "ResetAuthorizationCodeRequest",
-      "description": "Request for the `ResetAuthorizationCode` method.",
-      "type": "object"
-    },
-    "Binding": {
-      "description": "Associates `members` with a `role`.",
-      "id": "Binding",
-      "properties": {
-        "members": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. "
-        },
-        "condition": {
-          "$ref": "Expr",
-          "description": "The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)."
-        },
-        "role": {
-          "description": "Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "ListOperationsResponse": {
-      "description": "The response message for Operations.ListOperations.",
-      "properties": {
-        "operations": {
-          "type": "array",
-          "items": {
-            "$ref": "Operation"
-          },
-          "description": "A list of operations that matches the specified filter in the request."
-        },
-        "nextPageToken": {
-          "description": "The standard List next-page token.",
-          "type": "string"
-        }
-      },
-      "id": "ListOperationsResponse",
-      "type": "object"
-    },
-    "TestIamPermissionsResponse": {
-      "id": "TestIamPermissionsResponse",
-      "type": "object",
-      "properties": {
-        "permissions": {
-          "items": {
-            "type": "string"
-          },
-          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is allowed.",
-          "type": "array"
-        }
-      },
-      "description": "Response message for `TestIamPermissions` method."
-    },
-    "OperationMetadata": {
-      "description": "Represents the metadata of the long-running operation. Output only.",
-      "id": "OperationMetadata",
-      "properties": {
-        "apiVersion": {
-          "type": "string",
-          "description": "API version used to start the operation."
-        },
-        "endTime": {
-          "format": "google-datetime",
-          "description": "The time the operation finished running.",
-          "type": "string"
-        },
-        "verb": {
-          "type": "string",
-          "description": "Name of the verb executed by the operation."
-        },
-        "statusDetail": {
-          "description": "Human-readable status of the operation, if any.",
-          "type": "string"
-        },
-        "target": {
-          "description": "Server-defined resource path for the target of the operation.",
-          "type": "string"
-        },
-        "createTime": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "The time the operation was created."
-        }
-      },
-      "type": "object"
-    },
-    "RegisterDomainRequest": {
-      "type": "object",
-      "id": "RegisterDomainRequest",
-      "properties": {
-        "domainNotices": {
-          "description": "The list of domain notices that you acknowledge. Call `RetrieveRegisterParameters` to see the notices that need acknowledgement.",
-          "items": {
-            "enum": [
-              "DOMAIN_NOTICE_UNSPECIFIED",
-              "HSTS_PRELOADED"
-            ],
-            "type": "string",
-            "enumDescriptions": [
-              "The notice is undefined.",
-              "Indicates that the domain is preloaded on the HTTP Strict Transport Security list in browsers. Serving a website on such domain requires an SSL certificate. For details, see [how to get an SSL certificate](https://support.google.com/domains/answer/7638036)."
-            ]
-          },
-          "type": "array"
-        },
-        "registration": {
-          "$ref": "Registration",
-          "description": "Required. The complete `Registration` resource to be created."
-        },
-        "validateOnly": {
-          "description": "When true, only validation will be performed, without actually registering the domain. Follows: https://cloud.google.com/apis/design/design_patterns#request_validation",
-          "type": "boolean"
-        },
-        "yearlyPrice": {
-          "description": "Required. Yearly price to register or renew the domain. The value that should be put here can be obtained from RetrieveRegisterParameters or SearchDomains calls.",
-          "$ref": "Money"
-        },
-        "contactNotices": {
-          "type": "array",
-          "description": "The list of contact notices that the caller acknowledges. The notices required here depend on the values specified in `registration.contact_settings`.",
-          "items": {
-            "enumDescriptions": [
-              "The notice is undefined.",
-              "Required when setting the `privacy` field of `ContactSettings` to `PUBLIC_CONTACT_DATA`, which exposes contact data publicly."
-            ],
-            "enum": [
-              "CONTACT_NOTICE_UNSPECIFIED",
-              "PUBLIC_CONTACT_DATA_ACKNOWLEDGEMENT"
-            ],
-            "type": "string"
-          }
-        }
-      },
-      "description": "Request for the `RegisterDomain` method."
-    },
-    "SetIamPolicyRequest": {
-      "id": "SetIamPolicyRequest",
-      "properties": {
-        "policy": {
-          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them.",
-          "$ref": "Policy"
-        },
-        "updateMask": {
-          "type": "string",
-          "format": "google-fieldmask",
-          "description": "OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only the fields in the mask will be modified. If no mask is provided, the following default mask is used: `paths: \"bindings, etag\"`"
-        }
-      },
-      "description": "Request message for `SetIamPolicy` method.",
-      "type": "object"
-    },
-    "ConfigureDnsSettingsRequest": {
-      "type": "object",
-      "properties": {
-        "validateOnly": {
-          "type": "boolean",
-          "description": "Validate the request without actually updating the DNS settings."
-        },
-        "updateMask": {
-          "description": "Required. The field mask describing which fields to update as a comma-separated list. For example, if only the name servers are being updated for an existing Custom DNS configuration, the `update_mask` would be `\"custom_dns.name_servers\"`. When changing the DNS provider from one type to another, pass the new provider's field name as part of the field mask. For example, when changing from a Google Domains DNS configuration to a Custom DNS configuration, the `update_mask` would be `\"custom_dns\"`. //",
-          "type": "string",
-          "format": "google-fieldmask"
-        },
-        "dnsSettings": {
-          "$ref": "DnsSettings",
-          "description": "Fields of the `DnsSettings` to update."
-        }
-      },
-      "id": "ConfigureDnsSettingsRequest",
-      "description": "Request for the `ConfigureDnsSettings` method."
-    },
-    "ContactSettings": {
-      "id": "ContactSettings",
-      "type": "object",
-      "properties": {
-        "technicalContact": {
-          "$ref": "Contact",
-          "description": "Required. The technical contact for the `Registration`."
-        },
-        "privacy": {
-          "enum": [
-            "CONTACT_PRIVACY_UNSPECIFIED",
-            "PUBLIC_CONTACT_DATA",
-            "PRIVATE_CONTACT_DATA",
-            "REDACTED_CONTACT_DATA"
-          ],
-          "type": "string",
-          "description": "Required. Privacy setting for the contacts associated with the `Registration`.",
-          "enumDescriptions": [
-            "The contact privacy settings are undefined.",
-            "All the data from `ContactSettings` is publicly available. When setting this option, you must also provide a `PUBLIC_CONTACT_DATA_ACKNOWLEDGEMENT` in the `contact_notices` field of the request.",
-            "None of the data from `ContactSettings` is publicly available. Instead, proxy contact data is published for your domain. Email sent to the proxy email address is forwarded to the registrant's email address. Cloud Domains provides this privacy proxy service at no additional cost.",
-            "Some data from `ContactSettings` is publicly available. The actual information redacted depends on the domain. For details, see [the registration privacy article](https://support.google.com/domains/answer/3251242)."
-          ]
-        },
-        "registrantContact": {
-          "description": "Required. The registrant contact for the `Registration`. *Caution: Anyone with access to this email address, phone number, and/or postal address can take control of the domain.* *Warning: For new `Registration`s, the registrant will receive an email confirmation that they must complete within 15 days to avoid domain suspension.*",
-          "$ref": "Contact"
-        },
-        "adminContact": {
-          "$ref": "Contact",
-          "description": "Required. The administrative contact for the `Registration`."
-        }
-      },
-      "description": "Defines the contact information associated with a `Registration`. [ICANN](https://icann.org/) requires all domain names to have associated contact information. The `registrant_contact` is considered the domain's legal owner, and often the other contacts are identical."
-    },
-    "PostalAddress": {
-      "properties": {
-        "organization": {
-          "type": "string",
-          "description": "Optional. The name of the organization at the address."
-        },
-        "sortingCode": {
-          "description": "Optional. Additional, country-specific, sorting code. This is not used in most regions. Where it is used, the value is either a string like \"CEDEX\", optionally followed by a number (e.g. \"CEDEX 7\"), or just a number alone, representing the \"sector code\" (Jamaica), \"delivery area indicator\" (Malawi) or \"post office indicator\" (e.g. Côte d'Ivoire).",
-          "type": "string"
-        },
-        "recipients": {
-          "items": {
-            "type": "string"
-          },
-          "description": "Optional. The recipient at the address. This field may, under certain circumstances, contain multiline information. For example, it might contain \"care of\" information.",
-          "type": "array"
-        },
-        "addressLines": {
-          "items": {
-            "type": "string"
-          },
-          "description": "Unstructured address lines describing the lower levels of an address. Because values in address_lines do not have type information and may sometimes contain multiple values in a single field (e.g. \"Austin, TX\"), it is important that the line order is clear. The order of address lines should be \"envelope order\" for the country/region of the address. In places where this can vary (e.g. Japan), address_language is used to make it explicit (e.g. \"ja\" for large-to-small ordering and \"ja-Latn\" or \"en\" for small-to-large). This way, the most specific line of an address can be selected based on the language. The minimum permitted structural representation of an address consists of a region_code with all remaining information placed in the address_lines. It would be possible to format such an address very approximately without geocoding, but no semantic reasoning could be made about any of the address components until it was at least partially resolved. Creating an address only containing a region_code and address_lines, and then geocoding is the recommended way to handle completely unstructured addresses (as opposed to guessing which parts of the address should be localities or administrative areas).",
-          "type": "array"
-        },
-        "regionCode": {
-          "description": "Required. CLDR region code of the country/region of the address. This is never inferred and it is up to the user to ensure the value is correct. See http://cldr.unicode.org/ and http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html for details. Example: \"CH\" for Switzerland.",
-          "type": "string"
-        },
-        "languageCode": {
-          "type": "string",
-          "description": "Optional. BCP-47 language code of the contents of this address (if known). This is often the UI language of the input form or is expected to match one of the languages used in the address' country/region, or their transliterated equivalents. This can affect formatting in certain countries, but is not critical to the correctness of the data and will never affect any validation or other non-formatting related operations. If this value is not known, it should be omitted (rather than specifying a possibly incorrect default). Examples: \"zh-Hant\", \"ja\", \"ja-Latn\", \"en\"."
-        },
-        "postalCode": {
-          "description": "Optional. Postal code of the address. Not all countries use or require postal codes to be present, but where they are used, they may trigger additional validation with other parts of the address (e.g. state/zip validation in the U.S.A.).",
-          "type": "string"
-        },
-        "locality": {
-          "type": "string",
-          "description": "Optional. Generally refers to the city/town portion of the address. Examples: US city, IT comune, UK post town. In regions of the world where localities are not well defined or do not fit into this structure well, leave locality empty and use address_lines."
-        },
-        "administrativeArea": {
-          "type": "string",
-          "description": "Optional. Highest administrative subdivision which is used for postal addresses of a country or region. For example, this can be a state, a province, an oblast, or a prefecture. Specifically, for Spain this is the province and not the autonomous community (e.g. \"Barcelona\" and not \"Catalonia\"). Many countries don't use an administrative area in postal addresses. E.g. in Switzerland this should be left unpopulated."
-        },
-        "sublocality": {
-          "description": "Optional. Sublocality of the address. For example, this can be neighborhoods, boroughs, districts.",
-          "type": "string"
-        },
-        "revision": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The schema revision of the `PostalAddress`. This must be set to 0, which is the latest revision. All new revisions **must** be backward compatible with old revisions."
-        }
-      },
-      "id": "PostalAddress",
-      "description": "Represents a postal address, e.g. for postal delivery or payments addresses. Given a postal address, a postal service can deliver items to a premise, P.O. Box or similar. It is not intended to model geographical locations (roads, towns, mountains). In typical usage an address would be created via user input or from importing existing data, depending on the type of process. Advice on address input / editing: - Use an i18n-ready address widget such as https://github.com/google/libaddressinput) - Users should not be presented with UI elements for input or editing of fields outside countries where that field is used. For more guidance on how to use this schema, please see: https://support.google.com/business/answer/6397478",
-      "type": "object"
-    },
-    "RetrieveRegisterParametersResponse": {
-      "id": "RetrieveRegisterParametersResponse",
-      "description": "Response for the `RetrieveRegisterParameters` method.",
-      "type": "object",
-      "properties": {
-        "registerParameters": {
-          "description": "Parameters to use when calling the `RegisterDomain` method.",
-          "$ref": "RegisterParameters"
-        }
-      }
-    },
-    "Registration": {
-      "properties": {
-        "issues": {
-          "items": {
-            "enum": [
-              "ISSUE_UNSPECIFIED",
-              "CONTACT_SUPPORT",
-              "UNVERIFIED_EMAIL"
-            ],
-            "type": "string",
-            "enumDescriptions": [
-              "The issue is undefined.",
-              "Contact the Cloud Support team to resolve a problem with this domain.",
-              "[ICANN](https://icann.org/) requires verification of the email address in the `Registration`'s `contact_settings.registrant_contact` field. To verify the email address, follow the instructions in the email the `registrant_contact` receives following registration. If you do not complete email verification within 15 days of registration, the domain is suspended. To resend the verification email, call ConfigureContactSettings and provide the current `registrant_contact.email`."
-            ]
-          },
-          "description": "Output only. The set of issues with the `Registration` that require attention.",
-          "type": "array",
-          "readOnly": true
-        },
-        "labels": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Set of labels associated with the `Registration`."
-        },
-        "expireTime": {
-          "type": "string",
-          "description": "Output only. The expiration timestamp of the `Registration`.",
-          "readOnly": true,
-          "format": "google-datetime"
-        },
-        "state": {
-          "readOnly": true,
-          "enum": [
-            "STATE_UNSPECIFIED",
-            "REGISTRATION_PENDING",
-            "REGISTRATION_FAILED",
-            "ACTIVE",
-            "SUSPENDED",
-            "EXPORTED"
-          ],
-          "enumDescriptions": [
-            "The state is undefined.",
-            "The domain is being registered.",
-            "The domain registration failed. You can delete resources in this state to allow registration to be retried.",
-            "The domain is registered and operational. The domain renews automatically as long as it remains in this state.",
-            "The domain is suspended and inoperative. For more details, see the `issues` field.",
-            "The domain has been exported from Cloud Domains to [Google Domains](https://domains.google/). You can no longer update it with this API, and information shown about it may be stale. Without further action, domains in this state expire at their `expire_time`. You can delete the resource after the `expire_time` has passed."
-          ],
-          "type": "string",
-          "description": "Output only. The state of the `Registration`"
-        },
-        "name": {
-          "description": "Output only. Name of the `Registration` resource, in the format `projects/*/locations/*/registrations/`.",
-          "readOnly": true,
-          "type": "string"
-        },
-        "managementSettings": {
-          "$ref": "ManagementSettings",
-          "description": "Settings for management of the `Registration`, including renewal, billing, and transfer. You cannot update these with the `UpdateRegistration` method. To update these settings, use the `ConfigureManagementSettings` method."
-        },
-        "supportedPrivacy": {
-          "items": {
-            "enumDescriptions": [
-              "The contact privacy settings are undefined.",
-              "All the data from `ContactSettings` is publicly available. When setting this option, you must also provide a `PUBLIC_CONTACT_DATA_ACKNOWLEDGEMENT` in the `contact_notices` field of the request.",
-              "None of the data from `ContactSettings` is publicly available. Instead, proxy contact data is published for your domain. Email sent to the proxy email address is forwarded to the registrant's email address. Cloud Domains provides this privacy proxy service at no additional cost.",
-              "Some data from `ContactSettings` is publicly available. The actual information redacted depends on the domain. For details, see [the registration privacy article](https://support.google.com/domains/answer/3251242)."
-            ],
-            "type": "string",
-            "enum": [
-              "CONTACT_PRIVACY_UNSPECIFIED",
-              "PUBLIC_CONTACT_DATA",
-              "PRIVATE_CONTACT_DATA",
-              "REDACTED_CONTACT_DATA"
-            ]
-          },
-          "readOnly": true,
-          "type": "array",
-          "description": "Output only. Set of options for the `contact_settings.privacy` field that this `Registration` supports."
-        },
-        "contactSettings": {
-          "description": "Required. Settings for contact information linked to the `Registration`. You cannot update these with the `UpdateRegistration` method. To update these settings, use the `ConfigureContactSettings` method.",
-          "$ref": "ContactSettings"
-        },
-        "domainName": {
-          "type": "string",
-          "description": "Required. Immutable. The domain name. Unicode domain names must be expressed in Punycode format."
-        },
-        "pendingContactSettings": {
-          "description": "Output only. Pending contact settings for the `Registration`. Updates to the `contact_settings` field that change its `registrant_contact` or `privacy` fields require email confirmation by the `registrant_contact` before taking effect. This field is set only if there are pending updates to the `contact_settings` that have not yet been confirmed. To confirm the changes, the `registrant_contact` must follow the instructions in the email they receive.",
-          "readOnly": true,
-          "$ref": "ContactSettings"
-        },
-        "dnsSettings": {
-          "$ref": "DnsSettings",
-          "description": "Settings controlling the DNS configuration of the `Registration`. You cannot update these with the `UpdateRegistration` method. To update these settings, use the `ConfigureDnsSettings` method."
-        },
-        "createTime": {
-          "description": "Output only. The creation timestamp of the `Registration` resource.",
-          "type": "string",
-          "format": "google-datetime",
-          "readOnly": true
-        }
-      },
-      "id": "Registration",
-      "type": "object",
-      "description": "The `Registration` resource facilitates managing and configuring domain name registrations. To create a new `Registration` resource, find a suitable domain name by calling the `SearchDomains` method with a query to see available domain name options. After choosing a name, call `RetrieveRegisterParameters` to ensure availability and obtain information like pricing, which is needed to build a call to `RegisterDomain`. "
-    },
-    "ConfigureContactSettingsRequest": {
-      "id": "ConfigureContactSettingsRequest",
-      "description": "Request for the `ConfigureContactSettings` method.",
-      "properties": {
-        "contactSettings": {
-          "$ref": "ContactSettings",
-          "description": "Fields of the `ContactSettings` to update."
-        },
-        "validateOnly": {
-          "type": "boolean",
-          "description": "Validate the request without actually updating the contact settings."
-        },
-        "updateMask": {
-          "description": "Required. The field mask describing which fields to update as a comma-separated list. For example, if only the registrant contact is being updated, the `update_mask` would be `\"registrant_contact\"`.",
-          "type": "string",
-          "format": "google-fieldmask"
-        },
-        "contactNotices": {
-          "items": {
-            "enumDescriptions": [
-              "The notice is undefined.",
-              "Required when setting the `privacy` field of `ContactSettings` to `PUBLIC_CONTACT_DATA`, which exposes contact data publicly."
-            ],
-            "enum": [
-              "CONTACT_NOTICE_UNSPECIFIED",
-              "PUBLIC_CONTACT_DATA_ACKNOWLEDGEMENT"
-            ],
-            "type": "string"
-          },
-          "description": "The list of contact notices that the caller acknowledges. The notices required here depend on the values specified in `contact_settings`.",
-          "type": "array"
-        }
-      },
-      "type": "object"
-    },
-    "SearchDomainsResponse": {
-      "type": "object",
-      "id": "SearchDomainsResponse",
-      "properties": {
-        "registerParameters": {
-          "type": "array",
-          "items": {
-            "$ref": "RegisterParameters"
-          },
-          "description": "Results of the domain name search."
-        }
-      },
-      "description": "Response for the `SearchDomains` method."
-    },
-    "Contact": {
-      "id": "Contact",
-      "type": "object",
-      "description": "Details required for a contact associated with a `Registration`.",
-      "properties": {
-        "postalAddress": {
-          "description": "Required. Postal address of the contact.",
-          "$ref": "PostalAddress"
-        },
-        "email": {
-          "description": "Required. Email address of the contact.",
-          "type": "string"
-        },
-        "phoneNumber": {
-          "type": "string",
-          "description": "Required. Phone number of the contact in international format. For example, `\"+1-800-555-0123\"`."
-        },
-        "faxNumber": {
-          "description": "Fax number of the contact in international format. For example, `\"+1-800-555-0123\"`.",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleDomainsDns": {
-      "description": "Configuration for using the free DNS zone provided by Google Domains as a `Registration`'s `dns_provider`. You cannot configure the DNS zone itself using the API. To configure the DNS zone, go to [Google Domains](https://domains.google/).",
-      "id": "GoogleDomainsDns",
-      "properties": {
-        "dsState": {
-          "description": "Required. The state of DS records for this domain. Used to enable or disable automatic DNSSEC.",
-          "enum": [
-            "DS_STATE_UNSPECIFIED",
-            "DS_RECORDS_UNPUBLISHED",
-            "DS_RECORDS_PUBLISHED"
-          ],
-          "enumDescriptions": [
-            "DS state is unspecified.",
-            "DNSSEC is disabled for this domain. No DS records for this domain are published in the parent DNS zone.",
-            "DNSSEC is enabled for this domain. Appropriate DS records for this domain are published in the parent DNS zone. This option is valid only if the DNS zone referenced in the `Registration`'s `dns_provider` field is already DNSSEC-signed."
-          ],
-          "type": "string"
-        },
-        "nameServers": {
-          "readOnly": true,
-          "items": {
-            "type": "string"
-          },
-          "description": "Output only. A list of name servers that store the DNS zone for this domain. Each name server is a domain name, with Unicode domain names expressed in Punycode format. This field is automatically populated with the name servers assigned to the Google Domains DNS zone.",
-          "type": "array"
-        },
-        "dsRecords": {
-          "description": "Output only. The list of DS records published for this domain. The list is automatically populated when `ds_state` is `DS_RECORDS_PUBLISHED`, otherwise it remains empty.",
-          "readOnly": true,
-          "type": "array",
-          "items": {
-            "$ref": "DsRecord"
-          }
-        }
-      },
-      "type": "object"
-    },
-    "DsRecord": {
-      "properties": {
-        "keyTag": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The key tag of the record. Must be set in range 0 -- 65535."
-        },
-        "digestType": {
-          "type": "string",
-          "description": "The hash function used to generate the digest of the referenced DNSKEY.",
-          "enum": [
-            "DIGEST_TYPE_UNSPECIFIED",
-            "SHA1",
-            "SHA256",
-            "GOST3411",
-            "SHA384"
-          ],
-          "enumDescriptions": [
-            "The DigestType is unspecified.",
-            "SHA-1. Not recommended for new deployments.",
-            "SHA-256.",
-            "GOST R 34.11-94.",
-            "SHA-384."
-          ]
-        },
-        "algorithm": {
-          "description": "The algorithm used to generate the referenced DNSKEY.",
-          "enum": [
-            "ALGORITHM_UNSPECIFIED",
-            "DSA",
-            "ECC",
-            "RSASHA1",
-            "DSANSEC3SHA1",
-            "RSASHA1NSEC3SHA1",
-            "RSASHA256",
-            "RSASHA512",
-            "ECCGOST",
-            "ECDSAP256SHA256",
-            "ECDSAP384SHA384",
-            "ED25519",
-            "ED448"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "The algorithm is unspecified.",
-            "DSA/SHA1. Not recommended for new deployments.",
-            "ECC. Not recommended for new deployments.",
-            "RSA/SHA-1. Not recommended for new deployments.",
-            "DSA-NSEC3-SHA1. Not recommended for new deployments.",
-            "RSA/SHA1-NSEC3-SHA1. Not recommended for new deployments.",
-            "RSA/SHA-256.",
-            "RSA/SHA-512.",
-            "GOST R 34.10-2001.",
-            "ECDSA Curve P-256 with SHA-256.",
-            "ECDSA Curve P-384 with SHA-384.",
-            "Ed25519.",
-            "Ed448."
-          ]
-        },
-        "digest": {
-          "type": "string",
-          "description": "The digest generated from the referenced DNSKEY."
-        }
-      },
-      "description": "Defines a Delegation Signer (DS) record, which is needed to enable DNSSEC for a domain. It contains a digest (hash) of a DNSKEY record that must be present in the domain's DNS zone.",
-      "id": "DsRecord",
-      "type": "object"
-    },
-    "CustomDns": {
-      "description": "Configuration for an arbitrary DNS provider.",
-      "properties": {
-        "nameServers": {
-          "description": "Required. A list of name servers that store the DNS zone for this domain. Each name server is a domain name, with Unicode domain names expressed in Punycode format.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "dsRecords": {
-          "items": {
-            "$ref": "DsRecord"
-          },
-          "description": "The list of DS records for this domain, which are used to enable DNSSEC. The domain's DNS provider can provide the values to set here. If this field is empty, DNSSEC is disabled.",
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "id": "CustomDns"
-    },
-    "AuditLogConfig": {
-      "properties": {
-        "logType": {
-          "description": "The log type that this config enables.",
-          "enum": [
-            "LOG_TYPE_UNSPECIFIED",
-            "ADMIN_READ",
-            "DATA_WRITE",
-            "DATA_READ"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "Default case. Should never be this.",
-            "Admin reads. Example: CloudIAM getIamPolicy",
-            "Data writes. Example: CloudSQL Users create",
-            "Data reads. Example: CloudSQL Users list"
-          ]
-        },
-        "exemptedMembers": {
-          "description": "Specifies the identities that do not cause logging for this type of permission. Follows the same format of Binding.members.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "AuditLogConfig",
-      "type": "object",
-      "description": "Provides the configuration for logging a type of permissions. Example: { \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" } ] } This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting jose@example.com from DATA_READ logging."
-    },
-    "Status": {
-      "properties": {
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
-          "type": "string"
-        },
-        "details": {
-          "type": "array",
-          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
-          "items": {
-            "type": "object",
-            "additionalProperties": {
-              "description": "Properties of the object. Contains field @type with type URL.",
-              "type": "any"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
+                }
             }
-          }
-        },
-        "code": {
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "format": "int32",
-          "type": "integer"
         }
-      },
-      "id": "Status",
-      "type": "object",
-      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors)."
     },
-    "TestIamPermissionsRequest": {
-      "id": "TestIamPermissionsRequest",
-      "description": "Request message for `TestIamPermissions` method.",
-      "type": "object",
-      "properties": {
-        "permissions": {
-          "description": "The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or 'storage.*') are not allowed. For more information see [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
-          "items": {
+    "basePath": "",
+    "baseUrl": "https://domains.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Cloud Domains",
+    "description": "Enables management and configuration of domain names.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/domains/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "domains:v1alpha2",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://domains.mtls.googleapis.com/",
+    "name": "domains",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
             "type": "string"
-          },
-          "type": "array"
-        }
-      }
-    },
-    "Location": {
-      "id": "Location",
-      "type": "object",
-      "properties": {
-        "labels": {
-          "additionalProperties": {
+        },
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
             "type": "string"
-          },
-          "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}",
-          "type": "object"
         },
-        "name": {
-          "description": "Resource name for the location, which may vary between implementations. For example: `\"projects/example-project/locations/us-east1\"`",
-          "type": "string"
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "locationId": {
-          "type": "string",
-          "description": "The canonical id for this location. For example: `\"us-east1\"`."
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
         },
-        "metadata": {
-          "description": "Service-specific metadata. For example the available capacity at the given location.",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "type": "object"
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
         },
-        "displayName": {
-          "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\".",
-          "type": "string"
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      },
-      "description": "A resource that represents Google Cloud Platform location."
     },
-    "AuthorizationCode": {
-      "description": "Defines an authorization code.",
-      "id": "AuthorizationCode",
-      "type": "object",
-      "properties": {
-        "code": {
-          "description": "The Authorization Code in ASCII. It can be used to transfer the domain to or from another registrar.",
-          "type": "string"
-        }
-      }
-    },
-    "ExportRegistrationRequest": {
-      "properties": {},
-      "type": "object",
-      "description": "Request for the `ExportRegistration` method.",
-      "id": "ExportRegistrationRequest"
-    },
-    "ManagementSettings": {
-      "id": "ManagementSettings",
-      "description": "Defines renewal, billing, and transfer settings for a `Registration`.",
-      "type": "object",
-      "properties": {
-        "transferLockState": {
-          "enumDescriptions": [
-            "The state is unspecified.",
-            "The domain is unlocked and can be transferred to another registrar.",
-            "The domain is locked and cannot be transferred to another registrar."
-          ],
-          "description": "Controls whether the domain can be transferred to another registrar.",
-          "enum": [
-            "TRANSFER_LOCK_STATE_UNSPECIFIED",
-            "UNLOCKED",
-            "LOCKED"
-          ],
-          "type": "string"
-        },
-        "renewalMethod": {
-          "readOnly": true,
-          "type": "string",
-          "description": "Output only. The renewal method for this `Registration`.",
-          "enumDescriptions": [
-            "The renewal method is undefined.",
-            "The domain is automatically renewed each year . To disable automatic renewals, export the domain by calling `ExportRegistration` .",
-            "The domain must be explicitly renewed each year before its `expire_time`. This option is only available when the `Registration` is in state `EXPORTED`. To manage the domain's current billing and renewal settings, go to [Google Domains](https://domains.google/)."
-          ],
-          "enum": [
-            "RENEWAL_METHOD_UNSPECIFIED",
-            "AUTOMATIC_RENEWAL",
-            "MANUAL_RENEWAL"
-          ]
-        }
-      }
-    },
-    "AuditConfig": {
-      "description": "Specifies the audit configuration for a service. The configuration determines which permission types are logged, and what identities, if any, are exempted from logging. An AuditConfig must have one or more AuditLogConfigs. If there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is used for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each AuditLogConfig are exempted. Example Policy with multiple AuditConfigs: { \"audit_configs\": [ { \"service\": \"allServices\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" }, { \"log_type\": \"ADMIN_READ\" } ] }, { \"service\": \"sampleservice.googleapis.com\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\" }, { \"log_type\": \"DATA_WRITE\", \"exempted_members\": [ \"user:aliya@example.com\" ] } ] } ] } For sampleservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ logging. It also exempts jose@example.com from DATA_READ logging, and aliya@example.com from DATA_WRITE logging.",
-      "type": "object",
-      "properties": {
-        "auditLogConfigs": {
-          "items": {
-            "$ref": "AuditLogConfig"
-          },
-          "description": "The configuration for logging of each type of permission.",
-          "type": "array"
-        },
-        "service": {
-          "type": "string",
-          "description": "Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices` is a special value that covers all services."
-        }
-      },
-      "id": "AuditConfig"
-    },
-    "Expr": {
-      "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() \u003c 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.",
-      "id": "Expr",
-      "properties": {
-        "expression": {
-          "type": "string",
-          "description": "Textual representation of an expression in Common Expression Language syntax."
-        },
-        "description": {
-          "type": "string",
-          "description": "Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI."
-        },
-        "title": {
-          "type": "string",
-          "description": "Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression."
-        },
-        "location": {
-          "type": "string",
-          "description": "Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file."
-        }
-      },
-      "type": "object"
-    }
-  },
-  "canonicalName": "Cloud Domains",
-  "name": "domains",
-  "resources": {
-    "projects": {
-      "resources": {
-        "locations": {
-          "resources": {
-            "operations": {
-              "methods": {
-                "list": {
-                  "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/operations",
-                  "response": {
-                    "$ref": "ListOperationsResponse"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "path": "v1alpha2/{+name}/operations",
-                  "id": "domains.projects.locations.operations.list",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
-                  "httpMethod": "GET",
-                  "parameters": {
-                    "filter": {
-                      "location": "query",
-                      "description": "The standard list filter.",
-                      "type": "string"
+    "protocol": "rest",
+    "resources": {
+        "projects": {
+            "resources": {
+                "locations": {
+                    "methods": {
+                        "get": {
+                            "description": "Gets information about a location.",
+                            "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}",
+                            "httpMethod": "GET",
+                            "id": "domains.projects.locations.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Resource name for the location.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1alpha2/{+name}",
+                            "response": {
+                                "$ref": "Location"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists information about the supported locations for this service.",
+                            "flatPath": "v1alpha2/projects/{projectsId}/locations",
+                            "httpMethod": "GET",
+                            "id": "domains.projects.locations.list",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "The standard list filter.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "name": {
+                                    "description": "The resource that owns the locations collection, if applicable.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "The standard list page size.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The standard list page token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1alpha2/{+name}/locations",
+                            "response": {
+                                "$ref": "ListLocationsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        }
                     },
-                    "name": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "required": true,
-                      "type": "string",
-                      "description": "The name of the operation's parent resource.",
-                      "location": "path"
-                    },
-                    "pageSize": {
-                      "location": "query",
-                      "description": "The standard list page size.",
-                      "type": "integer",
-                      "format": "int32"
-                    },
-                    "pageToken": {
-                      "location": "query",
-                      "description": "The standard list page token.",
-                      "type": "string"
+                    "resources": {
+                        "operations": {
+                            "methods": {
+                                "get": {
+                                    "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
+                                    "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
+                                    "httpMethod": "GET",
+                                    "id": "domains.projects.locations.operations.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The name of the operation resource.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1alpha2/{+name}",
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
+                                    "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/operations",
+                                    "httpMethod": "GET",
+                                    "id": "domains.projects.locations.operations.list",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "filter": {
+                                            "description": "The standard list filter.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "name": {
+                                            "description": "The name of the operation's parent resource.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "The standard list page size.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "The standard list page token.",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1alpha2/{+name}/operations",
+                                    "response": {
+                                        "$ref": "ListOperationsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
+                            }
+                        },
+                        "registrations": {
+                            "methods": {
+                                "configureContactSettings": {
+                                    "description": "Updates a `Registration`'s contact settings. Some changes require confirmation by the domain's registrant contact .",
+                                    "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:configureContactSettings",
+                                    "httpMethod": "POST",
+                                    "id": "domains.projects.locations.registrations.configureContactSettings",
+                                    "parameterOrder": [
+                                        "registration"
+                                    ],
+                                    "parameters": {
+                                        "registration": {
+                                            "description": "Required. The name of the `Registration` whose contact settings are being updated, in the format `projects/*/locations/*/registrations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1alpha2/{+registration}:configureContactSettings",
+                                    "request": {
+                                        "$ref": "ConfigureContactSettingsRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "configureDnsSettings": {
+                                    "description": "Updates a `Registration`'s DNS settings.",
+                                    "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:configureDnsSettings",
+                                    "httpMethod": "POST",
+                                    "id": "domains.projects.locations.registrations.configureDnsSettings",
+                                    "parameterOrder": [
+                                        "registration"
+                                    ],
+                                    "parameters": {
+                                        "registration": {
+                                            "description": "Required. The name of the `Registration` whose DNS settings are being updated, in the format `projects/*/locations/*/registrations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1alpha2/{+registration}:configureDnsSettings",
+                                    "request": {
+                                        "$ref": "ConfigureDnsSettingsRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "configureManagementSettings": {
+                                    "description": "Updates a `Registration`'s management settings.",
+                                    "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:configureManagementSettings",
+                                    "httpMethod": "POST",
+                                    "id": "domains.projects.locations.registrations.configureManagementSettings",
+                                    "parameterOrder": [
+                                        "registration"
+                                    ],
+                                    "parameters": {
+                                        "registration": {
+                                            "description": "Required. The name of the `Registration` whose management settings are being updated, in the format `projects/*/locations/*/registrations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1alpha2/{+registration}:configureManagementSettings",
+                                    "request": {
+                                        "$ref": "ConfigureManagementSettingsRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a `Registration` resource. This method only works on resources in one of the following states: * `state` is `EXPORTED` with `expire_time` in the past * `state` is `REGISTRATION_FAILED`",
+                                    "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "domains.projects.locations.registrations.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The name of the `Registration` to delete, in the format `projects/*/locations/*/registrations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1alpha2/{+name}",
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "export": {
+                                    "description": "Exports a `Registration` that you no longer want to use with Cloud Domains. You can continue to use the domain in [Google Domains](https://domains.google/) until it expires. If the export is successful: * The resource's `state` becomes `EXPORTED`, meaning that it is no longer managed by Cloud Domains * Because individual users can own domains in Google Domains, the calling user becomes the domain's sole owner. Permissions for the domain are subsequently managed in Google Domains. * Without further action, the domain does not renew automatically. The new owner can set up billing in Google Domains to renew the domain if needed.",
+                                    "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:export",
+                                    "httpMethod": "POST",
+                                    "id": "domains.projects.locations.registrations.export",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The name of the `Registration` to export, in the format `projects/*/locations/*/registrations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1alpha2/{+name}:export",
+                                    "request": {
+                                        "$ref": "ExportRegistrationRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets the details of a `Registration` resource.",
+                                    "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}",
+                                    "httpMethod": "GET",
+                                    "id": "domains.projects.locations.registrations.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The name of the `Registration` to get, in the format `projects/*/locations/*/registrations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1alpha2/{+name}",
+                                    "response": {
+                                        "$ref": "Registration"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "getIamPolicy": {
+                                    "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.",
+                                    "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:getIamPolicy",
+                                    "httpMethod": "GET",
+                                    "id": "domains.projects.locations.registrations.getIamPolicy",
+                                    "parameterOrder": [
+                                        "resource"
+                                    ],
+                                    "parameters": {
+                                        "options.requestedPolicyVersion": {
+                                            "description": "Optional. The policy format version to be returned. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional bindings must specify version 3. Policies without any conditional bindings may specify any valid value or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "resource": {
+                                            "description": "REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1alpha2/{+resource}:getIamPolicy",
+                                    "response": {
+                                        "$ref": "Policy"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists the `Registration` resources in a project.",
+                                    "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations",
+                                    "httpMethod": "GET",
+                                    "id": "domains.projects.locations.registrations.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "filter": {
+                                            "description": "Filter expression to restrict the `Registration`s returned. The expression must specify the field name, a comparison operator, and the value that you want to use for filtering. The value must be a string, a number, a boolean, or an enum value. The comparison operator should be one of =, !=, >, <, >=, <=, or : for prefix or wildcard matches. For example, to filter to a specific domain name, use an expression like `domainName=\"example.com\"`. You can also check for the existence of a field; for example, to find domains using custom DNS settings, use an expression like `dnsSettings.customDns:*`. You can also create compound filters by combining expressions with the `AND` and `OR` operators. For example, to find domains that are suspended or have specific issues flagged, use an expression like `(state=SUSPENDED) OR (issue:*)`.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "Maximum number of results to return.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "When set to the `next_page_token` from a prior response, provides the next page of results.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The project and location from which to list `Registration`s, specified in the format `projects/*/locations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1alpha2/{+parent}/registrations",
+                                    "response": {
+                                        "$ref": "ListRegistrationsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "patch": {
+                                    "description": "Updates select fields of a `Registration` resource, notably `labels`. To update other fields, use the appropriate custom update method: * To update management settings, see `ConfigureManagementSettings` * To update DNS configuration, see `ConfigureDnsSettings` * To update contact information, see `ConfigureContactSettings`",
+                                    "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}",
+                                    "httpMethod": "PATCH",
+                                    "id": "domains.projects.locations.registrations.patch",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Output only. Name of the `Registration` resource, in the format `projects/*/locations/*/registrations/`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "updateMask": {
+                                            "description": "Required. The field mask describing which fields to update as a comma-separated list. For example, if only the labels are being updated, the `update_mask` would be `\"labels\"`.",
+                                            "format": "google-fieldmask",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1alpha2/{+name}",
+                                    "request": {
+                                        "$ref": "Registration"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "register": {
+                                    "description": "Registers a new domain name and creates a corresponding `Registration` resource. Call `RetrieveRegisterParameters` first to check availability of the domain name and determine parameters like price that are needed to build a call to this method. A successful call creates a `Registration` resource in state `REGISTRATION_PENDING`, which resolves to `ACTIVE` within 1-2 minutes, indicating that the domain was successfully registered. If the resource ends up in state `REGISTRATION_FAILED`, it indicates that the domain was not registered successfully, and you can safely delete the resource and retry registration.",
+                                    "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations:register",
+                                    "httpMethod": "POST",
+                                    "id": "domains.projects.locations.registrations.register",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "parent": {
+                                            "description": "Required. The parent resource of the `Registration`. Must be in the format `projects/*/locations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1alpha2/{+parent}/registrations:register",
+                                    "request": {
+                                        "$ref": "RegisterDomainRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "resetAuthorizationCode": {
+                                    "description": "Resets the authorization code of the `Registration` to a new random string. You can call this method only after 60 days have elapsed since the initial domain registration.",
+                                    "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:resetAuthorizationCode",
+                                    "httpMethod": "POST",
+                                    "id": "domains.projects.locations.registrations.resetAuthorizationCode",
+                                    "parameterOrder": [
+                                        "registration"
+                                    ],
+                                    "parameters": {
+                                        "registration": {
+                                            "description": "Required. The name of the `Registration` whose authorization code is being reset, in the format `projects/*/locations/*/registrations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1alpha2/{+registration}:resetAuthorizationCode",
+                                    "request": {
+                                        "$ref": "ResetAuthorizationCodeRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "AuthorizationCode"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "retrieveAuthorizationCode": {
+                                    "description": "Gets the authorization code of the `Registration` for the purpose of transferring the domain to another registrar. You can call this method only after 60 days have elapsed since the initial domain registration.",
+                                    "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:retrieveAuthorizationCode",
+                                    "httpMethod": "GET",
+                                    "id": "domains.projects.locations.registrations.retrieveAuthorizationCode",
+                                    "parameterOrder": [
+                                        "registration"
+                                    ],
+                                    "parameters": {
+                                        "registration": {
+                                            "description": "Required. The name of the `Registration` whose authorization code is being retrieved, in the format `projects/*/locations/*/registrations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1alpha2/{+registration}:retrieveAuthorizationCode",
+                                    "response": {
+                                        "$ref": "AuthorizationCode"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "retrieveRegisterParameters": {
+                                    "description": "Gets parameters needed to register a new domain name, including price and up-to-date availability. Use the returned values to call `RegisterDomain`.",
+                                    "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations:retrieveRegisterParameters",
+                                    "httpMethod": "GET",
+                                    "id": "domains.projects.locations.registrations.retrieveRegisterParameters",
+                                    "parameterOrder": [
+                                        "location"
+                                    ],
+                                    "parameters": {
+                                        "domainName": {
+                                            "description": "Required. The domain name. Unicode domain names must be expressed in Punycode format.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "location": {
+                                            "description": "Required. The location. Must be in the format `projects/*/locations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1alpha2/{+location}/registrations:retrieveRegisterParameters",
+                                    "response": {
+                                        "$ref": "RetrieveRegisterParametersResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "searchDomains": {
+                                    "description": "Searches for available domain names similar to the provided query. Availability results from this method are approximate; call `RetrieveRegisterParameters` on a domain before registering to confirm availability.",
+                                    "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations:searchDomains",
+                                    "httpMethod": "GET",
+                                    "id": "domains.projects.locations.registrations.searchDomains",
+                                    "parameterOrder": [
+                                        "location"
+                                    ],
+                                    "parameters": {
+                                        "location": {
+                                            "description": "Required. The location. Must be in the format `projects/*/locations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "query": {
+                                            "description": "Required. String used to search for available domain names.",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1alpha2/{+location}/registrations:searchDomains",
+                                    "response": {
+                                        "$ref": "SearchDomainsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "setIamPolicy": {
+                                    "description": "Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.",
+                                    "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:setIamPolicy",
+                                    "httpMethod": "POST",
+                                    "id": "domains.projects.locations.registrations.setIamPolicy",
+                                    "parameterOrder": [
+                                        "resource"
+                                    ],
+                                    "parameters": {
+                                        "resource": {
+                                            "description": "REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1alpha2/{+resource}:setIamPolicy",
+                                    "request": {
+                                        "$ref": "SetIamPolicyRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Policy"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "testIamPermissions": {
+                                    "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may \"fail open\" without warning.",
+                                    "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:testIamPermissions",
+                                    "httpMethod": "POST",
+                                    "id": "domains.projects.locations.registrations.testIamPermissions",
+                                    "parameterOrder": [
+                                        "resource"
+                                    ],
+                                    "parameters": {
+                                        "resource": {
+                                            "description": "REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1alpha2/{+resource}:testIamPermissions",
+                                    "request": {
+                                        "$ref": "TestIamPermissionsRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "TestIamPermissionsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
+                            }
+                        }
                     }
-                  }
-                },
-                "get": {
-                  "path": "v1alpha2/{+name}",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameters": {
-                    "name": {
-                      "description": "The name of the operation resource.",
-                      "location": "path",
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
-                      "required": true
-                    }
-                  },
-                  "httpMethod": "GET",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
-                  "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
-                  "id": "domains.projects.locations.operations.get",
-                  "parameterOrder": [
-                    "name"
-                  ]
                 }
-              }
-            },
-            "registrations": {
-              "methods": {
-                "retrieveAuthorizationCode": {
-                  "id": "domains.projects.locations.registrations.retrieveAuthorizationCode",
-                  "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:retrieveAuthorizationCode",
-                  "description": "Gets the authorization code of the `Registration` for the purpose of transferring the domain to another registrar. You can call this method only after 60 days have elapsed since the initial domain registration.",
-                  "parameters": {
-                    "registration": {
-                      "required": true,
-                      "description": "Required. The name of the `Registration` whose authorization code is being retrieved, in the format `projects/*/locations/*/registrations/*`.",
-                      "type": "string",
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$"
-                    }
-                  },
-                  "path": "v1alpha2/{+registration}:retrieveAuthorizationCode",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "response": {
-                    "$ref": "AuthorizationCode"
-                  },
-                  "httpMethod": "GET",
-                  "parameterOrder": [
-                    "registration"
-                  ]
-                },
-                "register": {
-                  "parameters": {
-                    "parent": {
-                      "description": "Required. The parent resource of the `Registration`. Must be in the format `projects/*/locations/*`.",
-                      "required": true,
-                      "location": "path",
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$"
-                    }
-                  },
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "path": "v1alpha2/{+parent}/registrations:register",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "httpMethod": "POST",
-                  "request": {
-                    "$ref": "RegisterDomainRequest"
-                  },
-                  "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations:register",
-                  "id": "domains.projects.locations.registrations.register",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "description": "Registers a new domain name and creates a corresponding `Registration` resource. Call `RetrieveRegisterParameters` first to check availability of the domain name and determine parameters like price that are needed to build a call to this method. A successful call creates a `Registration` resource in state `REGISTRATION_PENDING`, which resolves to `ACTIVE` within 1-2 minutes, indicating that the domain was successfully registered. If the resource ends up in state `REGISTRATION_FAILED`, it indicates that the domain was not registered successfully, and you can safely delete the resource and retry registration."
-                },
-                "testIamPermissions": {
-                  "parameters": {
-                    "resource": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
-                      "required": true,
-                      "description": "REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field.",
-                      "type": "string",
-                      "location": "path"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "response": {
-                    "$ref": "TestIamPermissionsResponse"
-                  },
-                  "httpMethod": "POST",
-                  "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may \"fail open\" without warning.",
-                  "id": "domains.projects.locations.registrations.testIamPermissions",
-                  "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:testIamPermissions",
-                  "path": "v1alpha2/{+resource}:testIamPermissions",
-                  "parameterOrder": [
-                    "resource"
-                  ],
-                  "request": {
-                    "$ref": "TestIamPermissionsRequest"
-                  }
-                },
-                "retrieveRegisterParameters": {
-                  "path": "v1alpha2/{+location}/registrations:retrieveRegisterParameters",
-                  "parameterOrder": [
-                    "location"
-                  ],
-                  "response": {
-                    "$ref": "RetrieveRegisterParametersResponse"
-                  },
-                  "parameters": {
-                    "domainName": {
-                      "description": "Required. The domain name. Unicode domain names must be expressed in Punycode format.",
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "location": {
-                      "required": true,
-                      "type": "string",
-                      "description": "Required. The location. Must be in the format `projects/*/locations/*`.",
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$"
-                    }
-                  },
-                  "description": "Gets parameters needed to register a new domain name, including price and up-to-date availability. Use the returned values to call `RegisterDomain`.",
-                  "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations:retrieveRegisterParameters",
-                  "httpMethod": "GET",
-                  "id": "domains.projects.locations.registrations.retrieveRegisterParameters",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ]
-                },
-                "get": {
-                  "description": "Gets the details of a `Registration` resource.",
-                  "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
-                      "description": "Required. The name of the `Registration` to get, in the format `projects/*/locations/*/registrations/*`.",
-                      "location": "path",
-                      "type": "string"
-                    }
-                  },
-                  "httpMethod": "GET",
-                  "id": "domains.projects.locations.registrations.get",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "response": {
-                    "$ref": "Registration"
-                  },
-                  "path": "v1alpha2/{+name}"
-                },
-                "patch": {
-                  "parameters": {
-                    "name": {
-                      "description": "Output only. Name of the `Registration` resource, in the format `projects/*/locations/*/registrations/`.",
-                      "location": "path",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$"
-                    },
-                    "updateMask": {
-                      "type": "string",
-                      "location": "query",
-                      "format": "google-fieldmask",
-                      "description": "Required. The field mask describing which fields to update as a comma-separated list. For example, if only the labels are being updated, the `update_mask` would be `\"labels\"`."
-                    }
-                  },
-                  "description": "Updates select fields of a `Registration` resource, notably `labels`. To update other fields, use the appropriate custom update method: * To update management settings, see `ConfigureManagementSettings` * To update DNS configuration, see `ConfigureDnsSettings` * To update contact information, see `ConfigureContactSettings`",
-                  "request": {
-                    "$ref": "Registration"
-                  },
-                  "id": "domains.projects.locations.registrations.patch",
-                  "path": "v1alpha2/{+name}",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "PATCH",
-                  "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}",
-                  "response": {
-                    "$ref": "Operation"
-                  }
-                },
-                "getIamPolicy": {
-                  "response": {
-                    "$ref": "Policy"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:getIamPolicy",
-                  "path": "v1alpha2/{+resource}:getIamPolicy",
-                  "id": "domains.projects.locations.registrations.getIamPolicy",
-                  "parameters": {
-                    "resource": {
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
-                      "type": "string",
-                      "required": true,
-                      "description": "REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field."
-                    },
-                    "options.requestedPolicyVersion": {
-                      "location": "query",
-                      "format": "int32",
-                      "type": "integer",
-                      "description": "Optional. The policy format version to be returned. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional bindings must specify version 3. Policies without any conditional bindings may specify any valid value or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)."
-                    }
-                  },
-                  "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.",
-                  "httpMethod": "GET",
-                  "parameterOrder": [
-                    "resource"
-                  ]
-                },
-                "list": {
-                  "path": "v1alpha2/{+parent}/registrations",
-                  "description": "Lists the `Registration` resources in a project.",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "id": "domains.projects.locations.registrations.list",
-                  "response": {
-                    "$ref": "ListRegistrationsResponse"
-                  },
-                  "parameters": {
-                    "pageToken": {
-                      "type": "string",
-                      "description": "When set to the `next_page_token` from a prior response, provides the next page of results.",
-                      "location": "query"
-                    },
-                    "pageSize": {
-                      "location": "query",
-                      "type": "integer",
-                      "format": "int32",
-                      "description": "Maximum number of results to return."
-                    },
-                    "filter": {
-                      "description": "Filter expression to restrict the `Registration`s returned. The expression must specify the field name, a comparison operator, and the value that you want to use for filtering. The value must be a string, a number, a boolean, or an enum value. The comparison operator should be one of =, !=, \u003e, \u003c, \u003e=, \u003c=, or : for prefix or wildcard matches. For example, to filter to a specific domain name, use an expression like `domainName=\"example.com\"`. You can also check for the existence of a field; for example, to find domains using custom DNS settings, use an expression like `dnsSettings.customDns:*`. You can also create compound filters by combining expressions with the `AND` and `OR` operators. For example, to find domains that are suspended or have specific issues flagged, use an expression like `(state=SUSPENDED) OR (issue:*)`.",
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "parent": {
-                      "description": "Required. The project and location from which to list `Registration`s, specified in the format `projects/*/locations/*`.",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "type": "string",
-                      "location": "path"
-                    }
-                  },
-                  "httpMethod": "GET"
-                },
-                "resetAuthorizationCode": {
-                  "response": {
-                    "$ref": "AuthorizationCode"
-                  },
-                  "request": {
-                    "$ref": "ResetAuthorizationCodeRequest"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:resetAuthorizationCode",
-                  "parameterOrder": [
-                    "registration"
-                  ],
-                  "parameters": {
-                    "registration": {
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
-                      "description": "Required. The name of the `Registration` whose authorization code is being reset, in the format `projects/*/locations/*/registrations/*`.",
-                      "location": "path"
-                    }
-                  },
-                  "description": "Resets the authorization code of the `Registration` to a new random string. You can call this method only after 60 days have elapsed since the initial domain registration.",
-                  "httpMethod": "POST",
-                  "path": "v1alpha2/{+registration}:resetAuthorizationCode",
-                  "id": "domains.projects.locations.registrations.resetAuthorizationCode"
-                },
-                "export": {
-                  "path": "v1alpha2/{+name}:export",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "request": {
-                    "$ref": "ExportRegistrationRequest"
-                  },
-                  "description": "Exports a `Registration` that you no longer want to use with Cloud Domains. You can continue to use the domain in [Google Domains](https://domains.google/) until it expires. If the export is successful: * The resource's `state` becomes `EXPORTED`, meaning that it is no longer managed by Cloud Domains * Because individual users can own domains in Google Domains, the calling user becomes the domain's sole owner. Permissions for the domain are subsequently managed in Google Domains. * Without further action, the domain does not renew automatically. The new owner can set up billing in Google Domains to renew the domain if needed.",
-                  "parameters": {
-                    "name": {
-                      "required": true,
-                      "location": "path",
-                      "type": "string",
-                      "description": "Required. The name of the `Registration` to export, in the format `projects/*/locations/*/registrations/*`.",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$"
-                    }
-                  },
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "id": "domains.projects.locations.registrations.export",
-                  "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:export"
-                },
-                "configureDnsSettings": {
-                  "path": "v1alpha2/{+registration}:configureDnsSettings",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameterOrder": [
-                    "registration"
-                  ],
-                  "description": "Updates a `Registration`'s DNS settings.",
-                  "httpMethod": "POST",
-                  "request": {
-                    "$ref": "ConfigureDnsSettingsRequest"
-                  },
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "id": "domains.projects.locations.registrations.configureDnsSettings",
-                  "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:configureDnsSettings",
-                  "parameters": {
-                    "registration": {
-                      "description": "Required. The name of the `Registration` whose DNS settings are being updated, in the format `projects/*/locations/*/registrations/*`.",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
-                      "location": "path"
-                    }
-                  }
-                },
-                "configureManagementSettings": {
-                  "description": "Updates a `Registration`'s management settings.",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "id": "domains.projects.locations.registrations.configureManagementSettings",
-                  "httpMethod": "POST",
-                  "request": {
-                    "$ref": "ConfigureManagementSettingsRequest"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameterOrder": [
-                    "registration"
-                  ],
-                  "path": "v1alpha2/{+registration}:configureManagementSettings",
-                  "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:configureManagementSettings",
-                  "parameters": {
-                    "registration": {
-                      "required": true,
-                      "location": "path",
-                      "description": "Required. The name of the `Registration` whose management settings are being updated, in the format `projects/*/locations/*/registrations/*`.",
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$"
-                    }
-                  }
-                },
-                "searchDomains": {
-                  "parameters": {
-                    "location": {
-                      "location": "path",
-                      "description": "Required. The location. Must be in the format `projects/*/locations/*`.",
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "required": true
-                    },
-                    "query": {
-                      "location": "query",
-                      "type": "string",
-                      "description": "Required. String used to search for available domain names."
-                    }
-                  },
-                  "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations:searchDomains",
-                  "httpMethod": "GET",
-                  "id": "domains.projects.locations.registrations.searchDomains",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameterOrder": [
-                    "location"
-                  ],
-                  "path": "v1alpha2/{+location}/registrations:searchDomains",
-                  "description": "Searches for available domain names similar to the provided query. Availability results from this method are approximate; call `RetrieveRegisterParameters` on a domain before registering to confirm availability.",
-                  "response": {
-                    "$ref": "SearchDomainsResponse"
-                  }
-                },
-                "delete": {
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "id": "domains.projects.locations.registrations.delete",
-                  "parameters": {
-                    "name": {
-                      "description": "Required. The name of the `Registration` to delete, in the format `projects/*/locations/*/registrations/*`.",
-                      "type": "string",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
-                      "location": "path"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "httpMethod": "DELETE",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "path": "v1alpha2/{+name}",
-                  "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}",
-                  "description": "Deletes a `Registration` resource. This method only works on resources in one of the following states: * `state` is `EXPORTED` with `expire_time` in the past * `state` is `REGISTRATION_FAILED`"
-                },
-                "setIamPolicy": {
-                  "description": "Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.",
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "resource"
-                  ],
-                  "parameters": {
-                    "resource": {
-                      "description": "REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field.",
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
-                      "type": "string",
-                      "required": true
-                    }
-                  },
-                  "response": {
-                    "$ref": "Policy"
-                  },
-                  "path": "v1alpha2/{+resource}:setIamPolicy",
-                  "request": {
-                    "$ref": "SetIamPolicyRequest"
-                  },
-                  "id": "domains.projects.locations.registrations.setIamPolicy",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:setIamPolicy"
-                },
-                "configureContactSettings": {
-                  "id": "domains.projects.locations.registrations.configureContactSettings",
-                  "request": {
-                    "$ref": "ConfigureContactSettingsRequest"
-                  },
-                  "parameters": {
-                    "registration": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
-                      "location": "path",
-                      "description": "Required. The name of the `Registration` whose contact settings are being updated, in the format `projects/*/locations/*/registrations/*`.",
-                      "type": "string",
-                      "required": true
-                    }
-                  },
-                  "path": "v1alpha2/{+registration}:configureContactSettings",
-                  "description": "Updates a `Registration`'s contact settings. Some changes require confirmation by the domain's registrant contact .",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameterOrder": [
-                    "registration"
-                  ],
-                  "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:configureContactSettings",
-                  "httpMethod": "POST"
-                }
-              }
             }
-          },
-          "methods": {
-            "get": {
-              "parameterOrder": [
-                "name"
-              ],
-              "id": "domains.projects.locations.get",
-              "httpMethod": "GET",
-              "path": "v1alpha2/{+name}",
-              "description": "Gets information about a location.",
-              "parameters": {
-                "name": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "Resource name for the location.",
-                  "pattern": "^projects/[^/]+/locations/[^/]+$"
+        }
+    },
+    "revision": "20210204",
+    "rootUrl": "https://domains.googleapis.com/",
+    "schemas": {
+        "AuditConfig": {
+            "description": "Specifies the audit configuration for a service. The configuration determines which permission types are logged, and what identities, if any, are exempted from logging. An AuditConfig must have one or more AuditLogConfigs. If there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is used for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each AuditLogConfig are exempted. Example Policy with multiple AuditConfigs: { \"audit_configs\": [ { \"service\": \"allServices\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" }, { \"log_type\": \"ADMIN_READ\" } ] }, { \"service\": \"sampleservice.googleapis.com\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\" }, { \"log_type\": \"DATA_WRITE\", \"exempted_members\": [ \"user:aliya@example.com\" ] } ] } ] } For sampleservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ logging. It also exempts jose@example.com from DATA_READ logging, and aliya@example.com from DATA_WRITE logging.",
+            "id": "AuditConfig",
+            "properties": {
+                "auditLogConfigs": {
+                    "description": "The configuration for logging of each type of permission.",
+                    "items": {
+                        "$ref": "AuditLogConfig"
+                    },
+                    "type": "array"
+                },
+                "service": {
+                    "description": "Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices` is a special value that covers all services.",
+                    "type": "string"
                 }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1alpha2/projects/{projectsId}/locations/{locationsId}",
-              "response": {
-                "$ref": "Location"
-              }
             },
-            "list": {
-              "flatPath": "v1alpha2/projects/{projectsId}/locations",
-              "description": "Lists information about the supported locations for this service.",
-              "path": "v1alpha2/{+name}/locations",
-              "id": "domains.projects.locations.list",
-              "response": {
-                "$ref": "ListLocationsResponse"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "pageSize": {
-                  "description": "The standard list page size.",
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query"
+            "type": "object"
+        },
+        "AuditLogConfig": {
+            "description": "Provides the configuration for logging a type of permissions. Example: { \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" } ] } This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting jose@example.com from DATA_READ logging.",
+            "id": "AuditLogConfig",
+            "properties": {
+                "exemptedMembers": {
+                    "description": "Specifies the identities that do not cause logging for this type of permission. Follows the same format of Binding.members.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "logType": {
+                    "description": "The log type that this config enables.",
+                    "enum": [
+                        "LOG_TYPE_UNSPECIFIED",
+                        "ADMIN_READ",
+                        "DATA_WRITE",
+                        "DATA_READ"
+                    ],
+                    "enumDescriptions": [
+                        "Default case. Should never be this.",
+                        "Admin reads. Example: CloudIAM getIamPolicy",
+                        "Data writes. Example: CloudSQL Users create",
+                        "Data reads. Example: CloudSQL Users list"
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AuthorizationCode": {
+            "description": "Defines an authorization code.",
+            "id": "AuthorizationCode",
+            "properties": {
+                "code": {
+                    "description": "The Authorization Code in ASCII. It can be used to transfer the domain to or from another registrar.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Binding": {
+            "description": "Associates `members` with a `role`.",
+            "id": "Binding",
+            "properties": {
+                "condition": {
+                    "$ref": "Expr",
+                    "description": "The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)."
+                },
+                "members": {
+                    "description": "Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. ",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "role": {
+                    "description": "Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ConfigureContactSettingsRequest": {
+            "description": "Request for the `ConfigureContactSettings` method.",
+            "id": "ConfigureContactSettingsRequest",
+            "properties": {
+                "contactNotices": {
+                    "description": "The list of contact notices that the caller acknowledges. The notices needed here depend on the values specified in `contact_settings`.",
+                    "items": {
+                        "enum": [
+                            "CONTACT_NOTICE_UNSPECIFIED",
+                            "PUBLIC_CONTACT_DATA_ACKNOWLEDGEMENT"
+                        ],
+                        "enumDescriptions": [
+                            "The notice is undefined.",
+                            "Required when setting the `privacy` field of `ContactSettings` to `PUBLIC_CONTACT_DATA`, which exposes contact data publicly."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "contactSettings": {
+                    "$ref": "ContactSettings",
+                    "description": "Fields of the `ContactSettings` to update."
+                },
+                "updateMask": {
+                    "description": "Required. The field mask describing which fields to update as a comma-separated list. For example, if only the registrant contact is being updated, the `update_mask` would be `\"registrant_contact\"`.",
+                    "format": "google-fieldmask",
+                    "type": "string"
+                },
+                "validateOnly": {
+                    "description": "Validate the request without actually updating the contact settings.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "ConfigureDnsSettingsRequest": {
+            "description": "Request for the `ConfigureDnsSettings` method.",
+            "id": "ConfigureDnsSettingsRequest",
+            "properties": {
+                "dnsSettings": {
+                    "$ref": "DnsSettings",
+                    "description": "Fields of the `DnsSettings` to update."
+                },
+                "updateMask": {
+                    "description": "Required. The field mask describing which fields to update as a comma-separated list. For example, if only the name servers are being updated for an existing Custom DNS configuration, the `update_mask` would be `\"custom_dns.name_servers\"`. When changing the DNS provider from one type to another, pass the new provider's field name as part of the field mask. For example, when changing from a Google Domains DNS configuration to a Custom DNS configuration, the `update_mask` would be `\"custom_dns\"`. //",
+                    "format": "google-fieldmask",
+                    "type": "string"
+                },
+                "validateOnly": {
+                    "description": "Validate the request without actually updating the DNS settings.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "ConfigureManagementSettingsRequest": {
+            "description": "Request for the `ConfigureManagementSettings` method.",
+            "id": "ConfigureManagementSettingsRequest",
+            "properties": {
+                "managementSettings": {
+                    "$ref": "ManagementSettings",
+                    "description": "Fields of the `ManagementSettings` to update."
+                },
+                "updateMask": {
+                    "description": "Required. The field mask describing which fields to update as a comma-separated list. For example, if only the transfer lock is being updated, the `update_mask` would be `\"transfer_lock_state\"`.",
+                    "format": "google-fieldmask",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Contact": {
+            "description": "Details required for a contact associated with a `Registration`.",
+            "id": "Contact",
+            "properties": {
+                "email": {
+                    "description": "Required. Email address of the contact.",
+                    "type": "string"
+                },
+                "faxNumber": {
+                    "description": "Fax number of the contact in international format. For example, `\"+1-800-555-0123\"`.",
+                    "type": "string"
+                },
+                "phoneNumber": {
+                    "description": "Required. Phone number of the contact in international format. For example, `\"+1-800-555-0123\"`.",
+                    "type": "string"
+                },
+                "postalAddress": {
+                    "$ref": "PostalAddress",
+                    "description": "Required. Postal address of the contact."
+                }
+            },
+            "type": "object"
+        },
+        "ContactSettings": {
+            "description": "Defines the contact information associated with a `Registration`. [ICANN](https://icann.org/) requires all domain names to have associated contact information. The `registrant_contact` is considered the domain's legal owner, and often the other contacts are identical.",
+            "id": "ContactSettings",
+            "properties": {
+                "adminContact": {
+                    "$ref": "Contact",
+                    "description": "Required. The administrative contact for the `Registration`."
+                },
+                "privacy": {
+                    "description": "Required. Privacy setting for the contacts associated with the `Registration`.",
+                    "enum": [
+                        "CONTACT_PRIVACY_UNSPECIFIED",
+                        "PUBLIC_CONTACT_DATA",
+                        "PRIVATE_CONTACT_DATA",
+                        "REDACTED_CONTACT_DATA"
+                    ],
+                    "enumDescriptions": [
+                        "The contact privacy settings are undefined.",
+                        "All the data from `ContactSettings` is publicly available. When setting this option, you must also provide a `PUBLIC_CONTACT_DATA_ACKNOWLEDGEMENT` in the `contact_notices` field of the request.",
+                        "None of the data from `ContactSettings` is publicly available. Instead, proxy contact data is published for your domain. Email sent to the proxy email address is forwarded to the registrant's email address. Cloud Domains provides this privacy proxy service at no additional cost.",
+                        "Some data from `ContactSettings` is publicly available. The actual information redacted depends on the domain. For details, see [the registration privacy article](https://support.google.com/domains/answer/3251242)."
+                    ],
+                    "type": "string"
+                },
+                "registrantContact": {
+                    "$ref": "Contact",
+                    "description": "Required. The registrant contact for the `Registration`. *Caution: Anyone with access to this email address, phone number, and/or postal address can take control of the domain.* *Warning: For new `Registration`s, the registrant will receive an email confirmation that they must complete within 15 days to avoid domain suspension.*"
+                },
+                "technicalContact": {
+                    "$ref": "Contact",
+                    "description": "Required. The technical contact for the `Registration`."
+                }
+            },
+            "type": "object"
+        },
+        "CustomDns": {
+            "description": "Configuration for an arbitrary DNS provider.",
+            "id": "CustomDns",
+            "properties": {
+                "dsRecords": {
+                    "description": "The list of DS records for this domain, which are used to enable DNSSEC. The domain's DNS provider can provide the values to set here. If this field is empty, DNSSEC is disabled.",
+                    "items": {
+                        "$ref": "DsRecord"
+                    },
+                    "type": "array"
+                },
+                "nameServers": {
+                    "description": "Required. A list of name servers that store the DNS zone for this domain. Each name server is a domain name, with Unicode domain names expressed in Punycode format.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "DnsSettings": {
+            "description": "Defines the DNS configuration of a `Registration`, including name servers, DNSSEC, and glue records.",
+            "id": "DnsSettings",
+            "properties": {
+                "customDns": {
+                    "$ref": "CustomDns",
+                    "description": "An arbitrary DNS provider identified by its name servers."
+                },
+                "glueRecords": {
+                    "description": "The list of glue records for this `Registration`. Commonly empty.",
+                    "items": {
+                        "$ref": "GlueRecord"
+                    },
+                    "type": "array"
+                },
+                "googleDomainsDns": {
+                    "$ref": "GoogleDomainsDns",
+                    "description": "The free DNS zone provided by [Google Domains](https://domains.google/)."
+                }
+            },
+            "type": "object"
+        },
+        "DsRecord": {
+            "description": "Defines a Delegation Signer (DS) record, which is needed to enable DNSSEC for a domain. It contains a digest (hash) of a DNSKEY record that must be present in the domain's DNS zone.",
+            "id": "DsRecord",
+            "properties": {
+                "algorithm": {
+                    "description": "The algorithm used to generate the referenced DNSKEY.",
+                    "enum": [
+                        "ALGORITHM_UNSPECIFIED",
+                        "DSA",
+                        "ECC",
+                        "RSASHA1",
+                        "DSANSEC3SHA1",
+                        "RSASHA1NSEC3SHA1",
+                        "RSASHA256",
+                        "RSASHA512",
+                        "ECCGOST",
+                        "ECDSAP256SHA256",
+                        "ECDSAP384SHA384",
+                        "ED25519",
+                        "ED448"
+                    ],
+                    "enumDescriptions": [
+                        "The algorithm is unspecified.",
+                        "DSA/SHA1. Not recommended for new deployments.",
+                        "ECC. Not recommended for new deployments.",
+                        "RSA/SHA-1. Not recommended for new deployments.",
+                        "DSA-NSEC3-SHA1. Not recommended for new deployments.",
+                        "RSA/SHA1-NSEC3-SHA1. Not recommended for new deployments.",
+                        "RSA/SHA-256.",
+                        "RSA/SHA-512.",
+                        "GOST R 34.10-2001.",
+                        "ECDSA Curve P-256 with SHA-256.",
+                        "ECDSA Curve P-384 with SHA-384.",
+                        "Ed25519.",
+                        "Ed448."
+                    ],
+                    "type": "string"
+                },
+                "digest": {
+                    "description": "The digest generated from the referenced DNSKEY.",
+                    "type": "string"
+                },
+                "digestType": {
+                    "description": "The hash function used to generate the digest of the referenced DNSKEY.",
+                    "enum": [
+                        "DIGEST_TYPE_UNSPECIFIED",
+                        "SHA1",
+                        "SHA256",
+                        "GOST3411",
+                        "SHA384"
+                    ],
+                    "enumDescriptions": [
+                        "The DigestType is unspecified.",
+                        "SHA-1. Not recommended for new deployments.",
+                        "SHA-256.",
+                        "GOST R 34.11-94.",
+                        "SHA-384."
+                    ],
+                    "type": "string"
+                },
+                "keyTag": {
+                    "description": "The key tag of the record. Must be set in range 0 -- 65535.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "ExportRegistrationRequest": {
+            "description": "Request for the `ExportRegistration` method.",
+            "id": "ExportRegistrationRequest",
+            "properties": {},
+            "type": "object"
+        },
+        "Expr": {
+            "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.",
+            "id": "Expr",
+            "properties": {
+                "description": {
+                    "description": "Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.",
+                    "type": "string"
+                },
+                "expression": {
+                    "description": "Textual representation of an expression in Common Expression Language syntax.",
+                    "type": "string"
+                },
+                "location": {
+                    "description": "Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GlueRecord": {
+            "description": "Defines a host on your domain that is a DNS name server for your domain and/or other domains. Glue records are a way of making the IP address of a name server known, even when it serves DNS queries for its parent domain. For example, when `ns.example.com` is a name server for `example.com`, the host `ns.example.com` must have a glue record to break the circular DNS reference.",
+            "id": "GlueRecord",
+            "properties": {
+                "hostName": {
+                    "description": "Required. Domain name of the host in Punycode format.",
+                    "type": "string"
+                },
+                "ipv4Addresses": {
+                    "description": "List of IPv4 addresses corresponding to this host in the standard decimal format (e.g. `198.51.100.1`). At least one of `ipv4_address` and `ipv6_address` must be set.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "ipv6Addresses": {
+                    "description": "List of IPv6 addresses corresponding to this host in the standard hexadecimal format (e.g. `2001:db8::`). At least one of `ipv4_address` and `ipv6_address` must be set.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleDomainsDns": {
+            "description": "Configuration for using the free DNS zone provided by Google Domains as a `Registration`'s `dns_provider`. You cannot configure the DNS zone itself using the API. To configure the DNS zone, go to [Google Domains](https://domains.google/).",
+            "id": "GoogleDomainsDns",
+            "properties": {
+                "dsRecords": {
+                    "description": "Output only. The list of DS records published for this domain. The list is automatically populated when `ds_state` is `DS_RECORDS_PUBLISHED`, otherwise it remains empty.",
+                    "items": {
+                        "$ref": "DsRecord"
+                    },
+                    "readOnly": true,
+                    "type": "array"
+                },
+                "dsState": {
+                    "description": "Required. The state of DS records for this domain. Used to enable or disable automatic DNSSEC.",
+                    "enum": [
+                        "DS_STATE_UNSPECIFIED",
+                        "DS_RECORDS_UNPUBLISHED",
+                        "DS_RECORDS_PUBLISHED"
+                    ],
+                    "enumDescriptions": [
+                        "DS state is unspecified.",
+                        "DNSSEC is disabled for this domain. No DS records for this domain are published in the parent DNS zone.",
+                        "DNSSEC is enabled for this domain. Appropriate DS records for this domain are published in the parent DNS zone. This option is valid only if the DNS zone referenced in the `Registration`'s `dns_provider` field is already DNSSEC-signed."
+                    ],
+                    "type": "string"
+                },
+                "nameServers": {
+                    "description": "Output only. A list of name servers that store the DNS zone for this domain. Each name server is a domain name, with Unicode domain names expressed in Punycode format. This field is automatically populated with the name servers assigned to the Google Domains DNS zone.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "readOnly": true,
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListLocationsResponse": {
+            "description": "The response message for Locations.ListLocations.",
+            "id": "ListLocationsResponse",
+            "properties": {
+                "locations": {
+                    "description": "A list of locations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Location"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListOperationsResponse": {
+            "description": "The response message for Operations.ListOperations.",
+            "id": "ListOperationsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                },
+                "operations": {
+                    "description": "A list of operations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Operation"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListRegistrationsResponse": {
+            "description": "Response for the `ListRegistrations` method.",
+            "id": "ListRegistrationsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "When present, there are more results to retrieve. Set `page_token` to this value on a subsequent call to get the next page of results.",
+                    "type": "string"
+                },
+                "registrations": {
+                    "description": "A list of `Registration`s.",
+                    "items": {
+                        "$ref": "Registration"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Location": {
+            "description": "A resource that represents Google Cloud Platform location.",
+            "id": "Location",
+            "properties": {
+                "displayName": {
+                    "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\".",
+                    "type": "string"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}",
+                    "type": "object"
+                },
+                "locationId": {
+                    "description": "The canonical id for this location. For example: `\"us-east1\"`.",
+                    "type": "string"
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata. For example the available capacity at the given location.",
+                    "type": "object"
                 },
                 "name": {
-                  "required": true,
-                  "pattern": "^projects/[^/]+$",
-                  "type": "string",
-                  "location": "path",
-                  "description": "The resource that owns the locations collection, if applicable."
-                },
-                "pageToken": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "The standard list page token."
-                },
-                "filter": {
-                  "description": "The standard list filter.",
-                  "type": "string",
-                  "location": "query"
+                    "description": "Resource name for the location, which may vary between implementations. For example: `\"projects/example-project/locations/us-east1\"`",
+                    "type": "string"
                 }
-              }
-            }
-          }
+            },
+            "type": "object"
+        },
+        "ManagementSettings": {
+            "description": "Defines renewal, billing, and transfer settings for a `Registration`.",
+            "id": "ManagementSettings",
+            "properties": {
+                "renewalMethod": {
+                    "description": "Output only. The renewal method for this `Registration`.",
+                    "enum": [
+                        "RENEWAL_METHOD_UNSPECIFIED",
+                        "AUTOMATIC_RENEWAL",
+                        "MANUAL_RENEWAL"
+                    ],
+                    "enumDescriptions": [
+                        "The renewal method is undefined.",
+                        "The domain is automatically renewed each year . To disable automatic renewals, export the domain by calling `ExportRegistration` .",
+                        "The domain must be explicitly renewed each year before its `expire_time`. This option is only available when the `Registration` is in state `EXPORTED`. To manage the domain's current billing and renewal settings, go to [Google Domains](https://domains.google/)."
+                    ],
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "transferLockState": {
+                    "description": "Controls whether the domain can be transferred to another registrar.",
+                    "enum": [
+                        "TRANSFER_LOCK_STATE_UNSPECIFIED",
+                        "UNLOCKED",
+                        "LOCKED"
+                    ],
+                    "enumDescriptions": [
+                        "The state is unspecified.",
+                        "The domain is unlocked and can be transferred to another registrar.",
+                        "The domain is locked and cannot be transferred to another registrar."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Money": {
+            "description": "Represents an amount of money with its currency type.",
+            "id": "Money",
+            "properties": {
+                "currencyCode": {
+                    "description": "The three-letter currency code defined in ISO 4217.",
+                    "type": "string"
+                },
+                "nanos": {
+                    "description": "Number of nano (10^-9) units of the amount. The value must be between -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos` must be positive or zero. If `units` is zero, `nanos` can be positive, zero, or negative. If `units` is negative, `nanos` must be negative or zero. For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "units": {
+                    "description": "The whole units of the amount. For example if `currencyCode` is `\"USD\"`, then 1 unit is one US dollar.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Operation": {
+            "description": "This resource represents a long-running operation that is the result of a network API call.",
+            "id": "Operation",
+            "properties": {
+                "done": {
+                    "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
+                    "type": "boolean"
+                },
+                "error": {
+                    "$ref": "Status",
+                    "description": "The error result of the operation in case of failure or cancellation."
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
+                    "type": "string"
+                },
+                "response": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "OperationMetadata": {
+            "description": "Represents the metadata of the long-running operation. Output only.",
+            "id": "OperationMetadata",
+            "properties": {
+                "apiVersion": {
+                    "description": "API version used to start the operation.",
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "The time the operation was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "endTime": {
+                    "description": "The time the operation finished running.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "statusDetail": {
+                    "description": "Human-readable status of the operation, if any.",
+                    "type": "string"
+                },
+                "target": {
+                    "description": "Server-defined resource path for the target of the operation.",
+                    "type": "string"
+                },
+                "verb": {
+                    "description": "Name of the verb executed by the operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Policy": {
+            "description": "An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { \"bindings\": [ { \"role\": \"roles/resourcemanager.organizationAdmin\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\" ] }, { \"role\": \"roles/resourcemanager.organizationViewer\", \"members\": [ \"user:eve@example.com\" ], \"condition\": { \"title\": \"expirable access\", \"description\": \"Does not grant access after Sep 2020\", \"expression\": \"request.time < timestamp('2020-10-01T00:00:00.000Z')\", } } ], \"etag\": \"BwWWja0YfJA=\", \"version\": 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).",
+            "id": "Policy",
+            "properties": {
+                "auditConfigs": {
+                    "description": "Specifies cloud audit logging configuration for this policy.",
+                    "items": {
+                        "$ref": "AuditConfig"
+                    },
+                    "type": "array"
+                },
+                "bindings": {
+                    "description": "Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.",
+                    "items": {
+                        "$ref": "Binding"
+                    },
+                    "type": "array"
+                },
+                "etag": {
+                    "description": "`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "version": {
+                    "description": "Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "PostalAddress": {
+            "description": "Represents a postal address, e.g. for postal delivery or payments addresses. Given a postal address, a postal service can deliver items to a premise, P.O. Box or similar. It is not intended to model geographical locations (roads, towns, mountains). In typical usage an address would be created via user input or from importing existing data, depending on the type of process. Advice on address input / editing: - Use an i18n-ready address widget such as https://github.com/google/libaddressinput) - Users should not be presented with UI elements for input or editing of fields outside countries where that field is used. For more guidance on how to use this schema, please see: https://support.google.com/business/answer/6397478",
+            "id": "PostalAddress",
+            "properties": {
+                "addressLines": {
+                    "description": "Unstructured address lines describing the lower levels of an address. Because values in address_lines do not have type information and may sometimes contain multiple values in a single field (e.g. \"Austin, TX\"), it is important that the line order is clear. The order of address lines should be \"envelope order\" for the country/region of the address. In places where this can vary (e.g. Japan), address_language is used to make it explicit (e.g. \"ja\" for large-to-small ordering and \"ja-Latn\" or \"en\" for small-to-large). This way, the most specific line of an address can be selected based on the language. The minimum permitted structural representation of an address consists of a region_code with all remaining information placed in the address_lines. It would be possible to format such an address very approximately without geocoding, but no semantic reasoning could be made about any of the address components until it was at least partially resolved. Creating an address only containing a region_code and address_lines, and then geocoding is the recommended way to handle completely unstructured addresses (as opposed to guessing which parts of the address should be localities or administrative areas).",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "administrativeArea": {
+                    "description": "Optional. Highest administrative subdivision which is used for postal addresses of a country or region. For example, this can be a state, a province, an oblast, or a prefecture. Specifically, for Spain this is the province and not the autonomous community (e.g. \"Barcelona\" and not \"Catalonia\"). Many countries don't use an administrative area in postal addresses. E.g. in Switzerland this should be left unpopulated.",
+                    "type": "string"
+                },
+                "languageCode": {
+                    "description": "Optional. BCP-47 language code of the contents of this address (if known). This is often the UI language of the input form or is expected to match one of the languages used in the address' country/region, or their transliterated equivalents. This can affect formatting in certain countries, but is not critical to the correctness of the data and will never affect any validation or other non-formatting related operations. If this value is not known, it should be omitted (rather than specifying a possibly incorrect default). Examples: \"zh-Hant\", \"ja\", \"ja-Latn\", \"en\".",
+                    "type": "string"
+                },
+                "locality": {
+                    "description": "Optional. Generally refers to the city/town portion of the address. Examples: US city, IT comune, UK post town. In regions of the world where localities are not well defined or do not fit into this structure well, leave locality empty and use address_lines.",
+                    "type": "string"
+                },
+                "organization": {
+                    "description": "Optional. The name of the organization at the address.",
+                    "type": "string"
+                },
+                "postalCode": {
+                    "description": "Optional. Postal code of the address. Not all countries use or require postal codes to be present, but where they are used, they may trigger additional validation with other parts of the address (e.g. state/zip validation in the U.S.A.).",
+                    "type": "string"
+                },
+                "recipients": {
+                    "description": "Optional. The recipient at the address. This field may, under certain circumstances, contain multiline information. For example, it might contain \"care of\" information.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "regionCode": {
+                    "description": "Required. CLDR region code of the country/region of the address. This is never inferred and it is up to the user to ensure the value is correct. See http://cldr.unicode.org/ and http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html for details. Example: \"CH\" for Switzerland.",
+                    "type": "string"
+                },
+                "revision": {
+                    "description": "The schema revision of the `PostalAddress`. This must be set to 0, which is the latest revision. All new revisions **must** be backward compatible with old revisions.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "sortingCode": {
+                    "description": "Optional. Additional, country-specific, sorting code. This is not used in most regions. Where it is used, the value is either a string like \"CEDEX\", optionally followed by a number (e.g. \"CEDEX 7\"), or just a number alone, representing the \"sector code\" (Jamaica), \"delivery area indicator\" (Malawi) or \"post office indicator\" (e.g. C\u00f4te d'Ivoire).",
+                    "type": "string"
+                },
+                "sublocality": {
+                    "description": "Optional. Sublocality of the address. For example, this can be neighborhoods, boroughs, districts.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RegisterDomainRequest": {
+            "description": "Request for the `RegisterDomain` method.",
+            "id": "RegisterDomainRequest",
+            "properties": {
+                "contactNotices": {
+                    "description": "The list of contact notices that the caller acknowledges. The notices needed here depend on the values specified in `registration.contact_settings`.",
+                    "items": {
+                        "enum": [
+                            "CONTACT_NOTICE_UNSPECIFIED",
+                            "PUBLIC_CONTACT_DATA_ACKNOWLEDGEMENT"
+                        ],
+                        "enumDescriptions": [
+                            "The notice is undefined.",
+                            "Required when setting the `privacy` field of `ContactSettings` to `PUBLIC_CONTACT_DATA`, which exposes contact data publicly."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "domainNotices": {
+                    "description": "The list of domain notices that you acknowledge. Call `RetrieveRegisterParameters` to see the notices that need acknowledgement.",
+                    "items": {
+                        "enum": [
+                            "DOMAIN_NOTICE_UNSPECIFIED",
+                            "HSTS_PRELOADED"
+                        ],
+                        "enumDescriptions": [
+                            "The notice is undefined.",
+                            "Indicates that the domain is preloaded on the HTTP Strict Transport Security list in browsers. Serving a website on such domain requires an SSL certificate. For details, see [how to get an SSL certificate](https://support.google.com/domains/answer/7638036)."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "registration": {
+                    "$ref": "Registration",
+                    "description": "Required. The complete `Registration` resource to be created."
+                },
+                "validateOnly": {
+                    "description": "When true, only validation will be performed, without actually registering the domain. Follows: https://cloud.google.com/apis/design/design_patterns#request_validation",
+                    "type": "boolean"
+                },
+                "yearlyPrice": {
+                    "$ref": "Money",
+                    "description": "Required. Yearly price to register or renew the domain. The value that should be put here can be obtained from RetrieveRegisterParameters or SearchDomains calls."
+                }
+            },
+            "type": "object"
+        },
+        "RegisterParameters": {
+            "description": "Parameters required to register a new domain.",
+            "id": "RegisterParameters",
+            "properties": {
+                "availability": {
+                    "description": "Indicates whether the domain is available for registration. This value is accurate when obtained by calling `RetrieveRegisterParameters`, but is approximate when obtained by calling `SearchDomains`.",
+                    "enum": [
+                        "AVAILABILITY_UNSPECIFIED",
+                        "AVAILABLE",
+                        "UNAVAILABLE",
+                        "UNSUPPORTED",
+                        "UNKNOWN"
+                    ],
+                    "enumDescriptions": [
+                        "The availability is unspecified.",
+                        "The domain is available for registration.",
+                        "The domain is not available for registration. Generally this means it is already registered to another party.",
+                        "The domain is not currently supported by Cloud Domains, but may be available elsewhere.",
+                        "Cloud Domains is unable to determine domain availability, generally due to system maintenance at the domain name registry."
+                    ],
+                    "type": "string"
+                },
+                "domainName": {
+                    "description": "The domain name. Unicode domain names are expressed in Punycode format.",
+                    "type": "string"
+                },
+                "domainNotices": {
+                    "description": "Notices about special properties of the domain.",
+                    "items": {
+                        "enum": [
+                            "DOMAIN_NOTICE_UNSPECIFIED",
+                            "HSTS_PRELOADED"
+                        ],
+                        "enumDescriptions": [
+                            "The notice is undefined.",
+                            "Indicates that the domain is preloaded on the HTTP Strict Transport Security list in browsers. Serving a website on such domain requires an SSL certificate. For details, see [how to get an SSL certificate](https://support.google.com/domains/answer/7638036)."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "supportedPrivacy": {
+                    "description": "Contact privacy options that the domain supports.",
+                    "items": {
+                        "enum": [
+                            "CONTACT_PRIVACY_UNSPECIFIED",
+                            "PUBLIC_CONTACT_DATA",
+                            "PRIVATE_CONTACT_DATA",
+                            "REDACTED_CONTACT_DATA"
+                        ],
+                        "enumDescriptions": [
+                            "The contact privacy settings are undefined.",
+                            "All the data from `ContactSettings` is publicly available. When setting this option, you must also provide a `PUBLIC_CONTACT_DATA_ACKNOWLEDGEMENT` in the `contact_notices` field of the request.",
+                            "None of the data from `ContactSettings` is publicly available. Instead, proxy contact data is published for your domain. Email sent to the proxy email address is forwarded to the registrant's email address. Cloud Domains provides this privacy proxy service at no additional cost.",
+                            "Some data from `ContactSettings` is publicly available. The actual information redacted depends on the domain. For details, see [the registration privacy article](https://support.google.com/domains/answer/3251242)."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "yearlyPrice": {
+                    "$ref": "Money",
+                    "description": "Price to register or renew the domain for one year."
+                }
+            },
+            "type": "object"
+        },
+        "Registration": {
+            "description": "The `Registration` resource facilitates managing and configuring domain name registrations. To create a new `Registration` resource, find a suitable domain name by calling the `SearchDomains` method with a query to see available domain name options. After choosing a name, call `RetrieveRegisterParameters` to ensure availability and obtain information like pricing, which is needed to build a call to `RegisterDomain`. ",
+            "id": "Registration",
+            "properties": {
+                "contactSettings": {
+                    "$ref": "ContactSettings",
+                    "description": "Required. Settings for contact information linked to the `Registration`. You cannot update these with the `UpdateRegistration` method. To update these settings, use the `ConfigureContactSettings` method."
+                },
+                "createTime": {
+                    "description": "Output only. The creation timestamp of the `Registration` resource.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "dnsSettings": {
+                    "$ref": "DnsSettings",
+                    "description": "Settings controlling the DNS configuration of the `Registration`. You cannot update these with the `UpdateRegistration` method. To update these settings, use the `ConfigureDnsSettings` method."
+                },
+                "domainName": {
+                    "description": "Required. Immutable. The domain name. Unicode domain names must be expressed in Punycode format.",
+                    "type": "string"
+                },
+                "expireTime": {
+                    "description": "Output only. The expiration timestamp of the `Registration`.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "issues": {
+                    "description": "Output only. The set of issues with the `Registration` that require attention.",
+                    "items": {
+                        "enum": [
+                            "ISSUE_UNSPECIFIED",
+                            "CONTACT_SUPPORT",
+                            "UNVERIFIED_EMAIL"
+                        ],
+                        "enumDescriptions": [
+                            "The issue is undefined.",
+                            "Contact the Cloud Support team to resolve a problem with this domain.",
+                            "[ICANN](https://icann.org/) requires verification of the email address in the `Registration`'s `contact_settings.registrant_contact` field. To verify the email address, follow the instructions in the email the `registrant_contact` receives following registration. If you do not complete email verification within 15 days of registration, the domain is suspended. To resend the verification email, call ConfigureContactSettings and provide the current `registrant_contact.email`."
+                        ],
+                        "type": "string"
+                    },
+                    "readOnly": true,
+                    "type": "array"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Set of labels associated with the `Registration`.",
+                    "type": "object"
+                },
+                "managementSettings": {
+                    "$ref": "ManagementSettings",
+                    "description": "Settings for management of the `Registration`, including renewal, billing, and transfer. You cannot update these with the `UpdateRegistration` method. To update these settings, use the `ConfigureManagementSettings` method."
+                },
+                "name": {
+                    "description": "Output only. Name of the `Registration` resource, in the format `projects/*/locations/*/registrations/`.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "pendingContactSettings": {
+                    "$ref": "ContactSettings",
+                    "description": "Output only. Pending contact settings for the `Registration`. Updates to the `contact_settings` field that change its `registrant_contact` or `privacy` fields require email confirmation by the `registrant_contact` before taking effect. This field is set only if there are pending updates to the `contact_settings` that have not yet been confirmed. To confirm the changes, the `registrant_contact` must follow the instructions in the email they receive.",
+                    "readOnly": true
+                },
+                "state": {
+                    "description": "Output only. The state of the `Registration`",
+                    "enum": [
+                        "STATE_UNSPECIFIED",
+                        "REGISTRATION_PENDING",
+                        "REGISTRATION_FAILED",
+                        "ACTIVE",
+                        "SUSPENDED",
+                        "EXPORTED"
+                    ],
+                    "enumDescriptions": [
+                        "The state is undefined.",
+                        "The domain is being registered.",
+                        "The domain registration failed. You can delete resources in this state to allow registration to be retried.",
+                        "The domain is registered and operational. The domain renews automatically as long as it remains in this state.",
+                        "The domain is suspended and inoperative. For more details, see the `issues` field.",
+                        "The domain has been exported from Cloud Domains to [Google Domains](https://domains.google/). You can no longer update it with this API, and information shown about it may be stale. Without further action, domains in this state expire at their `expire_time`. You can delete the resource after the `expire_time` has passed."
+                    ],
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "supportedPrivacy": {
+                    "description": "Output only. Set of options for the `contact_settings.privacy` field that this `Registration` supports.",
+                    "items": {
+                        "enum": [
+                            "CONTACT_PRIVACY_UNSPECIFIED",
+                            "PUBLIC_CONTACT_DATA",
+                            "PRIVATE_CONTACT_DATA",
+                            "REDACTED_CONTACT_DATA"
+                        ],
+                        "enumDescriptions": [
+                            "The contact privacy settings are undefined.",
+                            "All the data from `ContactSettings` is publicly available. When setting this option, you must also provide a `PUBLIC_CONTACT_DATA_ACKNOWLEDGEMENT` in the `contact_notices` field of the request.",
+                            "None of the data from `ContactSettings` is publicly available. Instead, proxy contact data is published for your domain. Email sent to the proxy email address is forwarded to the registrant's email address. Cloud Domains provides this privacy proxy service at no additional cost.",
+                            "Some data from `ContactSettings` is publicly available. The actual information redacted depends on the domain. For details, see [the registration privacy article](https://support.google.com/domains/answer/3251242)."
+                        ],
+                        "type": "string"
+                    },
+                    "readOnly": true,
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ResetAuthorizationCodeRequest": {
+            "description": "Request for the `ResetAuthorizationCode` method.",
+            "id": "ResetAuthorizationCodeRequest",
+            "properties": {},
+            "type": "object"
+        },
+        "RetrieveRegisterParametersResponse": {
+            "description": "Response for the `RetrieveRegisterParameters` method.",
+            "id": "RetrieveRegisterParametersResponse",
+            "properties": {
+                "registerParameters": {
+                    "$ref": "RegisterParameters",
+                    "description": "Parameters to use when calling the `RegisterDomain` method."
+                }
+            },
+            "type": "object"
+        },
+        "SearchDomainsResponse": {
+            "description": "Response for the `SearchDomains` method.",
+            "id": "SearchDomainsResponse",
+            "properties": {
+                "registerParameters": {
+                    "description": "Results of the domain name search.",
+                    "items": {
+                        "$ref": "RegisterParameters"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "SetIamPolicyRequest": {
+            "description": "Request message for `SetIamPolicy` method.",
+            "id": "SetIamPolicyRequest",
+            "properties": {
+                "policy": {
+                    "$ref": "Policy",
+                    "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them."
+                },
+                "updateMask": {
+                    "description": "OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only the fields in the mask will be modified. If no mask is provided, the following default mask is used: `paths: \"bindings, etag\"`",
+                    "format": "google-fieldmask",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Status": {
+            "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
+            "id": "Status",
+            "properties": {
+                "code": {
+                    "description": "The status code, which should be an enum value of google.rpc.Code.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TestIamPermissionsRequest": {
+            "description": "Request message for `TestIamPermissions` method.",
+            "id": "TestIamPermissionsRequest",
+            "properties": {
+                "permissions": {
+                    "description": "The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or 'storage.*') are not allowed. For more information see [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "TestIamPermissionsResponse": {
+            "description": "Response message for `TestIamPermissions` method.",
+            "id": "TestIamPermissionsResponse",
+            "properties": {
+                "permissions": {
+                    "description": "A subset of `TestPermissionsRequest.permissions` that the caller is allowed.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         }
-      }
-    }
-  },
-  "protocol": "rest",
-  "title": "Cloud Domains API",
-  "basePath": "",
-  "revision": "20201110",
-  "ownerDomain": "google.com",
-  "documentationLink": "https://cloud.google.com/domains/",
-  "baseUrl": "https://domains.googleapis.com/",
-  "id": "domains:v1alpha2"
-}
+    },
+    "servicePath": "",
+    "title": "Cloud Domains API",
+    "version": "v1alpha2",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/domains.v1beta1.json b/googleapiclient/discovery_cache/documents/domains.v1beta1.json
index 81d4c58..d97f194 100644
--- a/googleapiclient/discovery_cache/documents/domains.v1beta1.json
+++ b/googleapiclient/discovery_cache/documents/domains.v1beta1.json
@@ -1,1775 +1,1775 @@
 {
-  "rootUrl": "https://domains.googleapis.com/",
-  "mtlsRootUrl": "https://domains.mtls.googleapis.com/",
-  "batchPath": "batch",
-  "ownerDomain": "google.com",
-  "kind": "discovery#restDescription",
-  "id": "domains:v1beta1",
-  "baseUrl": "https://domains.googleapis.com/",
-  "description": "Enables management and configuration of domain names.",
-  "servicePath": "",
-  "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
-  },
-  "parameters": {
-    "fields": {
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string"
-    },
-    "callback": {
-      "location": "query",
-      "type": "string",
-      "description": "JSONP"
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "upload_protocol": {
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "location": "query"
-    },
-    "quotaUser": {
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "location": "query",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "enum": [
-        "1",
-        "2"
-      ],
-      "type": "string",
-      "location": "query",
-      "description": "V1 error format.",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ]
-    },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "location": "query",
-      "default": "true",
-      "type": "boolean"
-    },
-    "alt": {
-      "default": "json",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "location": "query",
-      "type": "string",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "description": "Data format for response."
-    },
-    "access_token": {
-      "type": "string",
-      "description": "OAuth access token.",
-      "location": "query"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "key": {
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "location": "query",
-      "type": "string"
-    }
-  },
-  "resources": {
-    "projects": {
-      "resources": {
-        "locations": {
-          "resources": {
-            "registrations": {
-              "methods": {
-                "searchDomains": {
-                  "parameters": {
-                    "location": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "type": "string",
-                      "required": true,
-                      "location": "path",
-                      "description": "Required. The location. Must be in the format `projects/*/locations/*`."
-                    },
-                    "query": {
-                      "description": "Required. String used to search for available domain names.",
-                      "type": "string",
-                      "location": "query"
-                    }
-                  },
-                  "id": "domains.projects.locations.registrations.searchDomains",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameterOrder": [
-                    "location"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations:searchDomains",
-                  "response": {
-                    "$ref": "SearchDomainsResponse"
-                  },
-                  "path": "v1beta1/{+location}/registrations:searchDomains",
-                  "description": "Searches for available domain names similar to the provided query. Availability results from this method are approximate; call `RetrieveRegisterParameters` on a domain before registering to confirm availability.",
-                  "httpMethod": "GET"
-                },
-                "list": {
-                  "path": "v1beta1/{+parent}/registrations",
-                  "description": "Lists the `Registration` resources in a project.",
-                  "response": {
-                    "$ref": "ListRegistrationsResponse"
-                  },
-                  "parameters": {
-                    "pageSize": {
-                      "location": "query",
-                      "type": "integer",
-                      "format": "int32",
-                      "description": "Maximum number of results to return."
-                    },
-                    "pageToken": {
-                      "location": "query",
-                      "description": "When set to the `next_page_token` from a prior response, provides the next page of results.",
-                      "type": "string"
-                    },
-                    "filter": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "Filter expression to restrict the `Registration`s returned. The expression must specify the field name, a comparison operator, and the value that you want to use for filtering. The value must be a string, a number, a boolean, or an enum value. The comparison operator should be one of =, !=, \u003e, \u003c, \u003e=, \u003c=, or : for prefix or wildcard matches. For example, to filter to a specific domain name, use an expression like `domainName=\"example.com\"`. You can also check for the existence of a field; for example, to find domains using custom DNS settings, use an expression like `dnsSettings.customDns:*`. You can also create compound filters by combining expressions with the `AND` and `OR` operators. For example, to find domains that are suspended or have specific issues flagged, use an expression like `(state=SUSPENDED) OR (issue:*)`."
-                    },
-                    "parent": {
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "required": true,
-                      "location": "path",
-                      "description": "Required. The project and location from which to list `Registration`s, specified in the format `projects/*/locations/*`."
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "httpMethod": "GET",
-                  "id": "domains.projects.locations.registrations.list",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations"
-                },
-                "patch": {
-                  "httpMethod": "PATCH",
-                  "id": "domains.projects.locations.registrations.patch",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "request": {
-                    "$ref": "Registration"
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "description": "Updates select fields of a `Registration` resource, notably `labels`. To update other fields, use the appropriate custom update method: * To update management settings, see `ConfigureManagementSettings` * To update DNS configuration, see `ConfigureDnsSettings` * To update contact information, see `ConfigureContactSettings`",
-                  "parameters": {
-                    "updateMask": {
-                      "format": "google-fieldmask",
-                      "location": "query",
-                      "description": "Required. The field mask describing which fields to update as a comma-separated list. For example, if only the labels are being updated, the `update_mask` would be `\"labels\"`.",
-                      "type": "string"
-                    },
-                    "name": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Output only. Name of the `Registration` resource, in the format `projects/*/locations/*/registrations/`.",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "path": "v1beta1/{+name}"
-                },
-                "setIamPolicy": {
-                  "id": "domains.projects.locations.registrations.setIamPolicy",
-                  "parameterOrder": [
-                    "resource"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:setIamPolicy",
-                  "description": "Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.",
-                  "parameters": {
-                    "resource": {
-                      "required": true,
-                      "description": "REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field.",
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
-                      "location": "path"
-                    }
-                  },
-                  "request": {
-                    "$ref": "SetIamPolicyRequest"
-                  },
-                  "path": "v1beta1/{+resource}:setIamPolicy",
-                  "httpMethod": "POST",
-                  "response": {
-                    "$ref": "Policy"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ]
-                },
-                "resetAuthorizationCode": {
-                  "path": "v1beta1/{+registration}:resetAuthorizationCode",
-                  "parameters": {
-                    "registration": {
-                      "required": true,
-                      "description": "Required. The name of the `Registration` whose authorization code is being reset, in the format `projects/*/locations/*/registrations/*`.",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
-                      "location": "path",
-                      "type": "string"
-                    }
-                  },
-                  "description": "Resets the authorization code of the `Registration` to a new random string. You can call this method only after 60 days have elapsed since the initial domain registration.",
-                  "id": "domains.projects.locations.registrations.resetAuthorizationCode",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "request": {
-                    "$ref": "ResetAuthorizationCodeRequest"
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:resetAuthorizationCode",
-                  "httpMethod": "POST",
-                  "response": {
-                    "$ref": "AuthorizationCode"
-                  },
-                  "parameterOrder": [
-                    "registration"
-                  ]
-                },
-                "configureContactSettings": {
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:configureContactSettings",
-                  "request": {
-                    "$ref": "ConfigureContactSettingsRequest"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "path": "v1beta1/{+registration}:configureContactSettings",
-                  "id": "domains.projects.locations.registrations.configureContactSettings",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameterOrder": [
-                    "registration"
-                  ],
-                  "parameters": {
-                    "registration": {
-                      "required": true,
-                      "type": "string",
-                      "description": "Required. The name of the `Registration` whose contact settings are being updated, in the format `projects/*/locations/*/registrations/*`.",
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$"
-                    }
-                  },
-                  "httpMethod": "POST",
-                  "description": "Updates a `Registration`'s contact settings. Some changes require confirmation by the domain's registrant contact ."
-                },
-                "retrieveRegisterParameters": {
-                  "parameterOrder": [
-                    "location"
-                  ],
-                  "id": "domains.projects.locations.registrations.retrieveRegisterParameters",
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations:retrieveRegisterParameters",
-                  "description": "Gets parameters needed to register a new domain name, including price and up-to-date availability. Use the returned values to call `RegisterDomain`.",
-                  "httpMethod": "GET",
-                  "path": "v1beta1/{+location}/registrations:retrieveRegisterParameters",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "location": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "description": "Required. The location. Must be in the format `projects/*/locations/*`.",
-                      "location": "path",
-                      "type": "string",
-                      "required": true
-                    },
-                    "domainName": {
-                      "location": "query",
-                      "type": "string",
-                      "description": "Required. The domain name. Unicode domain names must be expressed in Punycode format."
-                    }
-                  },
-                  "response": {
-                    "$ref": "RetrieveRegisterParametersResponse"
-                  }
-                },
-                "configureManagementSettings": {
-                  "path": "v1beta1/{+registration}:configureManagementSettings",
-                  "description": "Updates a `Registration`'s management settings.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "request": {
-                    "$ref": "ConfigureManagementSettingsRequest"
-                  },
-                  "httpMethod": "POST",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameters": {
-                    "registration": {
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
-                      "type": "string",
-                      "description": "Required. The name of the `Registration` whose management settings are being updated, in the format `projects/*/locations/*/registrations/*`.",
-                      "location": "path"
-                    }
-                  },
-                  "parameterOrder": [
-                    "registration"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:configureManagementSettings",
-                  "id": "domains.projects.locations.registrations.configureManagementSettings"
-                },
-                "get": {
-                  "path": "v1beta1/{+name}",
-                  "response": {
-                    "$ref": "Registration"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "GET",
-                  "description": "Gets the details of a `Registration` resource.",
-                  "id": "domains.projects.locations.registrations.get",
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
-                      "location": "path",
-                      "description": "Required. The name of the `Registration` to get, in the format `projects/*/locations/*/registrations/*`."
-                    }
-                  }
-                },
-                "delete": {
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "path": "v1beta1/{+name}",
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}",
-                  "httpMethod": "DELETE",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "id": "domains.projects.locations.registrations.delete",
-                  "description": "Deletes a `Registration` resource. This method only works on resources in one of the following states: * `state` is `EXPORTED` with `expire_time` in the past * `state` is `REGISTRATION_FAILED`",
-                  "parameters": {
-                    "name": {
-                      "location": "path",
-                      "description": "Required. The name of the `Registration` to delete, in the format `projects/*/locations/*/registrations/*`.",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$"
-                    }
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ]
-                },
-                "retrieveAuthorizationCode": {
-                  "description": "Gets the authorization code of the `Registration` for the purpose of transferring the domain to another registrar. You can call this method only after 60 days have elapsed since the initial domain registration.",
-                  "path": "v1beta1/{+registration}:retrieveAuthorizationCode",
-                  "id": "domains.projects.locations.registrations.retrieveAuthorizationCode",
-                  "httpMethod": "GET",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameterOrder": [
-                    "registration"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:retrieveAuthorizationCode",
-                  "parameters": {
-                    "registration": {
-                      "description": "Required. The name of the `Registration` whose authorization code is being retrieved, in the format `projects/*/locations/*/registrations/*`.",
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
-                      "type": "string",
-                      "required": true
-                    }
-                  },
-                  "response": {
-                    "$ref": "AuthorizationCode"
-                  }
-                },
-                "testIamPermissions": {
-                  "response": {
-                    "$ref": "TestIamPermissionsResponse"
-                  },
-                  "parameterOrder": [
-                    "resource"
-                  ],
-                  "request": {
-                    "$ref": "TestIamPermissionsRequest"
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:testIamPermissions",
-                  "id": "domains.projects.locations.registrations.testIamPermissions",
-                  "path": "v1beta1/{+resource}:testIamPermissions",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "httpMethod": "POST",
-                  "parameters": {
-                    "resource": {
-                      "description": "REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field.",
-                      "location": "path",
-                      "type": "string",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$"
-                    }
-                  },
-                  "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may \"fail open\" without warning."
-                },
-                "export": {
-                  "id": "domains.projects.locations.registrations.export",
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "description": "Required. The name of the `Registration` to export, in the format `projects/*/locations/*/registrations/*`.",
-                      "required": true,
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$"
-                    }
-                  },
-                  "path": "v1beta1/{+name}:export",
-                  "description": "Exports a `Registration` that you no longer want to use with Cloud Domains. You can continue to use the domain in [Google Domains](https://domains.google/) until it expires. If the export is successful: * The resource's `state` becomes `EXPORTED`, meaning that it is no longer managed by Cloud Domains * Because individual users can own domains in Google Domains, the calling user becomes the domain's sole owner. Permissions for the domain are subsequently managed in Google Domains. * Without further action, the domain does not renew automatically. The new owner can set up billing in Google Domains to renew the domain if needed.",
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:export",
-                  "request": {
-                    "$ref": "ExportRegistrationRequest"
-                  }
-                },
-                "register": {
-                  "path": "v1beta1/{+parent}/registrations:register",
-                  "request": {
-                    "$ref": "RegisterDomainRequest"
-                  },
-                  "id": "domains.projects.locations.registrations.register",
-                  "description": "Registers a new domain name and creates a corresponding `Registration` resource. Call `RetrieveRegisterParameters` first to check availability of the domain name and determine parameters like price that are needed to build a call to this method. A successful call creates a `Registration` resource in state `REGISTRATION_PENDING`, which resolves to `ACTIVE` within 1-2 minutes, indicating that the domain was successfully registered. If the resource ends up in state `REGISTRATION_FAILED`, it indicates that the domain was not registered successfully, and you can safely delete the resource and retry registration.",
-                  "parameters": {
-                    "parent": {
-                      "type": "string",
-                      "required": true,
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "description": "Required. The parent resource of the `Registration`. Must be in the format `projects/*/locations/*`."
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "httpMethod": "POST",
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations:register",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameterOrder": [
-                    "parent"
-                  ]
-                },
-                "configureDnsSettings": {
-                  "httpMethod": "POST",
-                  "parameters": {
-                    "registration": {
-                      "description": "Required. The name of the `Registration` whose DNS settings are being updated, in the format `projects/*/locations/*/registrations/*`.",
-                      "type": "string",
-                      "required": true,
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$"
-                    }
-                  },
-                  "id": "domains.projects.locations.registrations.configureDnsSettings",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameterOrder": [
-                    "registration"
-                  ],
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "description": "Updates a `Registration`'s DNS settings.",
-                  "path": "v1beta1/{+registration}:configureDnsSettings",
-                  "request": {
-                    "$ref": "ConfigureDnsSettingsRequest"
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:configureDnsSettings"
-                },
-                "getIamPolicy": {
-                  "response": {
-                    "$ref": "Policy"
-                  },
-                  "parameters": {
-                    "options.requestedPolicyVersion": {
-                      "type": "integer",
-                      "description": "Optional. The policy format version to be returned. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional bindings must specify version 3. Policies without any conditional bindings may specify any valid value or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
-                      "location": "query",
-                      "format": "int32"
-                    },
-                    "resource": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
-                      "location": "path",
-                      "type": "string",
-                      "required": true,
-                      "description": "REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field."
-                    }
-                  },
-                  "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.",
-                  "httpMethod": "GET",
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:getIamPolicy",
-                  "id": "domains.projects.locations.registrations.getIamPolicy",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "path": "v1beta1/{+resource}:getIamPolicy",
-                  "parameterOrder": [
-                    "resource"
-                  ]
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
                 }
-              }
-            },
-            "operations": {
-              "methods": {
-                "list": {
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/operations",
-                  "response": {
-                    "$ref": "ListOperationsResponse"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "filter": {
-                      "type": "string",
-                      "description": "The standard list filter.",
-                      "location": "query"
-                    },
-                    "pageToken": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "The standard list page token."
-                    },
-                    "name": {
-                      "location": "path",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "description": "The name of the operation's parent resource.",
-                      "type": "string"
-                    },
-                    "pageSize": {
-                      "description": "The standard list page size.",
-                      "type": "integer",
-                      "format": "int32",
-                      "location": "query"
-                    }
-                  },
-                  "id": "domains.projects.locations.operations.list",
-                  "httpMethod": "GET",
-                  "path": "v1beta1/{+name}/operations",
-                  "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
-                  "parameterOrder": [
-                    "name"
-                  ]
-                },
-                "get": {
-                  "path": "v1beta1/{+name}",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "httpMethod": "GET",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
-                  "id": "domains.projects.locations.operations.get",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
-                  "parameters": {
-                    "name": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "The name of the operation resource.",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$"
-                    }
-                  }
-                }
-              }
             }
-          },
-          "methods": {
-            "get": {
-              "response": {
-                "$ref": "Location"
-              },
-              "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "httpMethod": "GET",
-              "id": "domains.projects.locations.get",
-              "parameterOrder": [
-                "name"
-              ],
-              "path": "v1beta1/{+name}",
-              "description": "Gets information about a location.",
-              "parameters": {
-                "name": {
-                  "required": true,
-                  "description": "Resource name for the location.",
-                  "pattern": "^projects/[^/]+/locations/[^/]+$",
-                  "type": "string",
-                  "location": "path"
+        }
+    },
+    "basePath": "",
+    "baseUrl": "https://domains.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Cloud Domains",
+    "description": "Enables management and configuration of domain names.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/domains/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "domains:v1beta1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://domains.mtls.googleapis.com/",
+    "name": "domains",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        }
+    },
+    "protocol": "rest",
+    "resources": {
+        "projects": {
+            "resources": {
+                "locations": {
+                    "methods": {
+                        "get": {
+                            "description": "Gets information about a location.",
+                            "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}",
+                            "httpMethod": "GET",
+                            "id": "domains.projects.locations.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Resource name for the location.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "response": {
+                                "$ref": "Location"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists information about the supported locations for this service.",
+                            "flatPath": "v1beta1/projects/{projectsId}/locations",
+                            "httpMethod": "GET",
+                            "id": "domains.projects.locations.list",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "The standard list filter.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "name": {
+                                    "description": "The resource that owns the locations collection, if applicable.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "The standard list page size.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The standard list page token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}/locations",
+                            "response": {
+                                "$ref": "ListLocationsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "operations": {
+                            "methods": {
+                                "get": {
+                                    "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
+                                    "httpMethod": "GET",
+                                    "id": "domains.projects.locations.operations.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The name of the operation resource.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/operations",
+                                    "httpMethod": "GET",
+                                    "id": "domains.projects.locations.operations.list",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "filter": {
+                                            "description": "The standard list filter.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "name": {
+                                            "description": "The name of the operation's parent resource.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "The standard list page size.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "The standard list page token.",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}/operations",
+                                    "response": {
+                                        "$ref": "ListOperationsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
+                            }
+                        },
+                        "registrations": {
+                            "methods": {
+                                "configureContactSettings": {
+                                    "description": "Updates a `Registration`'s contact settings. Some changes require confirmation by the domain's registrant contact .",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:configureContactSettings",
+                                    "httpMethod": "POST",
+                                    "id": "domains.projects.locations.registrations.configureContactSettings",
+                                    "parameterOrder": [
+                                        "registration"
+                                    ],
+                                    "parameters": {
+                                        "registration": {
+                                            "description": "Required. The name of the `Registration` whose contact settings are being updated, in the format `projects/*/locations/*/registrations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+registration}:configureContactSettings",
+                                    "request": {
+                                        "$ref": "ConfigureContactSettingsRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "configureDnsSettings": {
+                                    "description": "Updates a `Registration`'s DNS settings.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:configureDnsSettings",
+                                    "httpMethod": "POST",
+                                    "id": "domains.projects.locations.registrations.configureDnsSettings",
+                                    "parameterOrder": [
+                                        "registration"
+                                    ],
+                                    "parameters": {
+                                        "registration": {
+                                            "description": "Required. The name of the `Registration` whose DNS settings are being updated, in the format `projects/*/locations/*/registrations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+registration}:configureDnsSettings",
+                                    "request": {
+                                        "$ref": "ConfigureDnsSettingsRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "configureManagementSettings": {
+                                    "description": "Updates a `Registration`'s management settings.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:configureManagementSettings",
+                                    "httpMethod": "POST",
+                                    "id": "domains.projects.locations.registrations.configureManagementSettings",
+                                    "parameterOrder": [
+                                        "registration"
+                                    ],
+                                    "parameters": {
+                                        "registration": {
+                                            "description": "Required. The name of the `Registration` whose management settings are being updated, in the format `projects/*/locations/*/registrations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+registration}:configureManagementSettings",
+                                    "request": {
+                                        "$ref": "ConfigureManagementSettingsRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a `Registration` resource. This method only works on resources in one of the following states: * `state` is `EXPORTED` with `expire_time` in the past * `state` is `REGISTRATION_FAILED`",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "domains.projects.locations.registrations.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The name of the `Registration` to delete, in the format `projects/*/locations/*/registrations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "export": {
+                                    "description": "Exports a `Registration` that you no longer want to use with Cloud Domains. You can continue to use the domain in [Google Domains](https://domains.google/) until it expires. If the export is successful: * The resource's `state` becomes `EXPORTED`, meaning that it is no longer managed by Cloud Domains * Because individual users can own domains in Google Domains, the calling user becomes the domain's sole owner. Permissions for the domain are subsequently managed in Google Domains. * Without further action, the domain does not renew automatically. The new owner can set up billing in Google Domains to renew the domain if needed.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:export",
+                                    "httpMethod": "POST",
+                                    "id": "domains.projects.locations.registrations.export",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The name of the `Registration` to export, in the format `projects/*/locations/*/registrations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}:export",
+                                    "request": {
+                                        "$ref": "ExportRegistrationRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets the details of a `Registration` resource.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}",
+                                    "httpMethod": "GET",
+                                    "id": "domains.projects.locations.registrations.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The name of the `Registration` to get, in the format `projects/*/locations/*/registrations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "response": {
+                                        "$ref": "Registration"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "getIamPolicy": {
+                                    "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:getIamPolicy",
+                                    "httpMethod": "GET",
+                                    "id": "domains.projects.locations.registrations.getIamPolicy",
+                                    "parameterOrder": [
+                                        "resource"
+                                    ],
+                                    "parameters": {
+                                        "options.requestedPolicyVersion": {
+                                            "description": "Optional. The policy format version to be returned. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional bindings must specify version 3. Policies without any conditional bindings may specify any valid value or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "resource": {
+                                            "description": "REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+resource}:getIamPolicy",
+                                    "response": {
+                                        "$ref": "Policy"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists the `Registration` resources in a project.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations",
+                                    "httpMethod": "GET",
+                                    "id": "domains.projects.locations.registrations.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "filter": {
+                                            "description": "Filter expression to restrict the `Registration`s returned. The expression must specify the field name, a comparison operator, and the value that you want to use for filtering. The value must be a string, a number, a boolean, or an enum value. The comparison operator should be one of =, !=, >, <, >=, <=, or : for prefix or wildcard matches. For example, to filter to a specific domain name, use an expression like `domainName=\"example.com\"`. You can also check for the existence of a field; for example, to find domains using custom DNS settings, use an expression like `dnsSettings.customDns:*`. You can also create compound filters by combining expressions with the `AND` and `OR` operators. For example, to find domains that are suspended or have specific issues flagged, use an expression like `(state=SUSPENDED) OR (issue:*)`.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "Maximum number of results to return.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "When set to the `next_page_token` from a prior response, provides the next page of results.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The project and location from which to list `Registration`s, specified in the format `projects/*/locations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/registrations",
+                                    "response": {
+                                        "$ref": "ListRegistrationsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "patch": {
+                                    "description": "Updates select fields of a `Registration` resource, notably `labels`. To update other fields, use the appropriate custom update method: * To update management settings, see `ConfigureManagementSettings` * To update DNS configuration, see `ConfigureDnsSettings` * To update contact information, see `ConfigureContactSettings`",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}",
+                                    "httpMethod": "PATCH",
+                                    "id": "domains.projects.locations.registrations.patch",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Output only. Name of the `Registration` resource, in the format `projects/*/locations/*/registrations/`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "updateMask": {
+                                            "description": "Required. The field mask describing which fields to update as a comma-separated list. For example, if only the labels are being updated, the `update_mask` would be `\"labels\"`.",
+                                            "format": "google-fieldmask",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "request": {
+                                        "$ref": "Registration"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "register": {
+                                    "description": "Registers a new domain name and creates a corresponding `Registration` resource. Call `RetrieveRegisterParameters` first to check availability of the domain name and determine parameters like price that are needed to build a call to this method. A successful call creates a `Registration` resource in state `REGISTRATION_PENDING`, which resolves to `ACTIVE` within 1-2 minutes, indicating that the domain was successfully registered. If the resource ends up in state `REGISTRATION_FAILED`, it indicates that the domain was not registered successfully, and you can safely delete the resource and retry registration.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations:register",
+                                    "httpMethod": "POST",
+                                    "id": "domains.projects.locations.registrations.register",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "parent": {
+                                            "description": "Required. The parent resource of the `Registration`. Must be in the format `projects/*/locations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/registrations:register",
+                                    "request": {
+                                        "$ref": "RegisterDomainRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "resetAuthorizationCode": {
+                                    "description": "Resets the authorization code of the `Registration` to a new random string. You can call this method only after 60 days have elapsed since the initial domain registration.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:resetAuthorizationCode",
+                                    "httpMethod": "POST",
+                                    "id": "domains.projects.locations.registrations.resetAuthorizationCode",
+                                    "parameterOrder": [
+                                        "registration"
+                                    ],
+                                    "parameters": {
+                                        "registration": {
+                                            "description": "Required. The name of the `Registration` whose authorization code is being reset, in the format `projects/*/locations/*/registrations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+registration}:resetAuthorizationCode",
+                                    "request": {
+                                        "$ref": "ResetAuthorizationCodeRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "AuthorizationCode"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "retrieveAuthorizationCode": {
+                                    "description": "Gets the authorization code of the `Registration` for the purpose of transferring the domain to another registrar. You can call this method only after 60 days have elapsed since the initial domain registration.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:retrieveAuthorizationCode",
+                                    "httpMethod": "GET",
+                                    "id": "domains.projects.locations.registrations.retrieveAuthorizationCode",
+                                    "parameterOrder": [
+                                        "registration"
+                                    ],
+                                    "parameters": {
+                                        "registration": {
+                                            "description": "Required. The name of the `Registration` whose authorization code is being retrieved, in the format `projects/*/locations/*/registrations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+registration}:retrieveAuthorizationCode",
+                                    "response": {
+                                        "$ref": "AuthorizationCode"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "retrieveRegisterParameters": {
+                                    "description": "Gets parameters needed to register a new domain name, including price and up-to-date availability. Use the returned values to call `RegisterDomain`.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations:retrieveRegisterParameters",
+                                    "httpMethod": "GET",
+                                    "id": "domains.projects.locations.registrations.retrieveRegisterParameters",
+                                    "parameterOrder": [
+                                        "location"
+                                    ],
+                                    "parameters": {
+                                        "domainName": {
+                                            "description": "Required. The domain name. Unicode domain names must be expressed in Punycode format.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "location": {
+                                            "description": "Required. The location. Must be in the format `projects/*/locations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+location}/registrations:retrieveRegisterParameters",
+                                    "response": {
+                                        "$ref": "RetrieveRegisterParametersResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "searchDomains": {
+                                    "description": "Searches for available domain names similar to the provided query. Availability results from this method are approximate; call `RetrieveRegisterParameters` on a domain before registering to confirm availability.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations:searchDomains",
+                                    "httpMethod": "GET",
+                                    "id": "domains.projects.locations.registrations.searchDomains",
+                                    "parameterOrder": [
+                                        "location"
+                                    ],
+                                    "parameters": {
+                                        "location": {
+                                            "description": "Required. The location. Must be in the format `projects/*/locations/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "query": {
+                                            "description": "Required. String used to search for available domain names.",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+location}/registrations:searchDomains",
+                                    "response": {
+                                        "$ref": "SearchDomainsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "setIamPolicy": {
+                                    "description": "Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:setIamPolicy",
+                                    "httpMethod": "POST",
+                                    "id": "domains.projects.locations.registrations.setIamPolicy",
+                                    "parameterOrder": [
+                                        "resource"
+                                    ],
+                                    "parameters": {
+                                        "resource": {
+                                            "description": "REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+resource}:setIamPolicy",
+                                    "request": {
+                                        "$ref": "SetIamPolicyRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Policy"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "testIamPermissions": {
+                                    "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may \"fail open\" without warning.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/registrations/{registrationsId}:testIamPermissions",
+                                    "httpMethod": "POST",
+                                    "id": "domains.projects.locations.registrations.testIamPermissions",
+                                    "parameterOrder": [
+                                        "resource"
+                                    ],
+                                    "parameters": {
+                                        "resource": {
+                                            "description": "REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/registrations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+resource}:testIamPermissions",
+                                    "request": {
+                                        "$ref": "TestIamPermissionsRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "TestIamPermissionsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
+                            }
+                        }
+                    }
                 }
-              }
+            }
+        }
+    },
+    "revision": "20210204",
+    "rootUrl": "https://domains.googleapis.com/",
+    "schemas": {
+        "AuditConfig": {
+            "description": "Specifies the audit configuration for a service. The configuration determines which permission types are logged, and what identities, if any, are exempted from logging. An AuditConfig must have one or more AuditLogConfigs. If there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is used for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each AuditLogConfig are exempted. Example Policy with multiple AuditConfigs: { \"audit_configs\": [ { \"service\": \"allServices\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" }, { \"log_type\": \"ADMIN_READ\" } ] }, { \"service\": \"sampleservice.googleapis.com\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\" }, { \"log_type\": \"DATA_WRITE\", \"exempted_members\": [ \"user:aliya@example.com\" ] } ] } ] } For sampleservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ logging. It also exempts jose@example.com from DATA_READ logging, and aliya@example.com from DATA_WRITE logging.",
+            "id": "AuditConfig",
+            "properties": {
+                "auditLogConfigs": {
+                    "description": "The configuration for logging of each type of permission.",
+                    "items": {
+                        "$ref": "AuditLogConfig"
+                    },
+                    "type": "array"
+                },
+                "service": {
+                    "description": "Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices` is a special value that covers all services.",
+                    "type": "string"
+                }
             },
-            "list": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "response": {
-                "$ref": "ListLocationsResponse"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "description": "Lists information about the supported locations for this service.",
-              "parameters": {
-                "filter": {
-                  "description": "The standard list filter.",
-                  "location": "query",
-                  "type": "string"
+            "type": "object"
+        },
+        "AuditLogConfig": {
+            "description": "Provides the configuration for logging a type of permissions. Example: { \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" } ] } This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting jose@example.com from DATA_READ logging.",
+            "id": "AuditLogConfig",
+            "properties": {
+                "exemptedMembers": {
+                    "description": "Specifies the identities that do not cause logging for this type of permission. Follows the same format of Binding.members.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "logType": {
+                    "description": "The log type that this config enables.",
+                    "enum": [
+                        "LOG_TYPE_UNSPECIFIED",
+                        "ADMIN_READ",
+                        "DATA_WRITE",
+                        "DATA_READ"
+                    ],
+                    "enumDescriptions": [
+                        "Default case. Should never be this.",
+                        "Admin reads. Example: CloudIAM getIamPolicy",
+                        "Data writes. Example: CloudSQL Users create",
+                        "Data reads. Example: CloudSQL Users list"
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AuthorizationCode": {
+            "description": "Defines an authorization code.",
+            "id": "AuthorizationCode",
+            "properties": {
+                "code": {
+                    "description": "The Authorization Code in ASCII. It can be used to transfer the domain to or from another registrar.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Binding": {
+            "description": "Associates `members` with a `role`.",
+            "id": "Binding",
+            "properties": {
+                "condition": {
+                    "$ref": "Expr",
+                    "description": "The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)."
+                },
+                "members": {
+                    "description": "Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. ",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "role": {
+                    "description": "Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ConfigureContactSettingsRequest": {
+            "description": "Request for the `ConfigureContactSettings` method.",
+            "id": "ConfigureContactSettingsRequest",
+            "properties": {
+                "contactNotices": {
+                    "description": "The list of contact notices that the caller acknowledges. The notices needed here depend on the values specified in `contact_settings`.",
+                    "items": {
+                        "enum": [
+                            "CONTACT_NOTICE_UNSPECIFIED",
+                            "PUBLIC_CONTACT_DATA_ACKNOWLEDGEMENT"
+                        ],
+                        "enumDescriptions": [
+                            "The notice is undefined.",
+                            "Required when setting the `privacy` field of `ContactSettings` to `PUBLIC_CONTACT_DATA`, which exposes contact data publicly."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "contactSettings": {
+                    "$ref": "ContactSettings",
+                    "description": "Fields of the `ContactSettings` to update."
+                },
+                "updateMask": {
+                    "description": "Required. The field mask describing which fields to update as a comma-separated list. For example, if only the registrant contact is being updated, the `update_mask` would be `\"registrant_contact\"`.",
+                    "format": "google-fieldmask",
+                    "type": "string"
+                },
+                "validateOnly": {
+                    "description": "Validate the request without actually updating the contact settings.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "ConfigureDnsSettingsRequest": {
+            "description": "Request for the `ConfigureDnsSettings` method.",
+            "id": "ConfigureDnsSettingsRequest",
+            "properties": {
+                "dnsSettings": {
+                    "$ref": "DnsSettings",
+                    "description": "Fields of the `DnsSettings` to update."
+                },
+                "updateMask": {
+                    "description": "Required. The field mask describing which fields to update as a comma-separated list. For example, if only the name servers are being updated for an existing Custom DNS configuration, the `update_mask` would be `\"custom_dns.name_servers\"`. When changing the DNS provider from one type to another, pass the new provider's field name as part of the field mask. For example, when changing from a Google Domains DNS configuration to a Custom DNS configuration, the `update_mask` would be `\"custom_dns\"`. //",
+                    "format": "google-fieldmask",
+                    "type": "string"
+                },
+                "validateOnly": {
+                    "description": "Validate the request without actually updating the DNS settings.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "ConfigureManagementSettingsRequest": {
+            "description": "Request for the `ConfigureManagementSettings` method.",
+            "id": "ConfigureManagementSettingsRequest",
+            "properties": {
+                "managementSettings": {
+                    "$ref": "ManagementSettings",
+                    "description": "Fields of the `ManagementSettings` to update."
+                },
+                "updateMask": {
+                    "description": "Required. The field mask describing which fields to update as a comma-separated list. For example, if only the transfer lock is being updated, the `update_mask` would be `\"transfer_lock_state\"`.",
+                    "format": "google-fieldmask",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Contact": {
+            "description": "Details required for a contact associated with a `Registration`.",
+            "id": "Contact",
+            "properties": {
+                "email": {
+                    "description": "Required. Email address of the contact.",
+                    "type": "string"
+                },
+                "faxNumber": {
+                    "description": "Fax number of the contact in international format. For example, `\"+1-800-555-0123\"`.",
+                    "type": "string"
+                },
+                "phoneNumber": {
+                    "description": "Required. Phone number of the contact in international format. For example, `\"+1-800-555-0123\"`.",
+                    "type": "string"
+                },
+                "postalAddress": {
+                    "$ref": "PostalAddress",
+                    "description": "Required. Postal address of the contact."
+                }
+            },
+            "type": "object"
+        },
+        "ContactSettings": {
+            "description": "Defines the contact information associated with a `Registration`. [ICANN](https://icann.org/) requires all domain names to have associated contact information. The `registrant_contact` is considered the domain's legal owner, and often the other contacts are identical.",
+            "id": "ContactSettings",
+            "properties": {
+                "adminContact": {
+                    "$ref": "Contact",
+                    "description": "Required. The administrative contact for the `Registration`."
+                },
+                "privacy": {
+                    "description": "Required. Privacy setting for the contacts associated with the `Registration`.",
+                    "enum": [
+                        "CONTACT_PRIVACY_UNSPECIFIED",
+                        "PUBLIC_CONTACT_DATA",
+                        "PRIVATE_CONTACT_DATA",
+                        "REDACTED_CONTACT_DATA"
+                    ],
+                    "enumDescriptions": [
+                        "The contact privacy settings are undefined.",
+                        "All the data from `ContactSettings` is publicly available. When setting this option, you must also provide a `PUBLIC_CONTACT_DATA_ACKNOWLEDGEMENT` in the `contact_notices` field of the request.",
+                        "None of the data from `ContactSettings` is publicly available. Instead, proxy contact data is published for your domain. Email sent to the proxy email address is forwarded to the registrant's email address. Cloud Domains provides this privacy proxy service at no additional cost.",
+                        "Some data from `ContactSettings` is publicly available. The actual information redacted depends on the domain. For details, see [the registration privacy article](https://support.google.com/domains/answer/3251242)."
+                    ],
+                    "type": "string"
+                },
+                "registrantContact": {
+                    "$ref": "Contact",
+                    "description": "Required. The registrant contact for the `Registration`. *Caution: Anyone with access to this email address, phone number, and/or postal address can take control of the domain.* *Warning: For new `Registration`s, the registrant will receive an email confirmation that they must complete within 15 days to avoid domain suspension.*"
+                },
+                "technicalContact": {
+                    "$ref": "Contact",
+                    "description": "Required. The technical contact for the `Registration`."
+                }
+            },
+            "type": "object"
+        },
+        "CustomDns": {
+            "description": "Configuration for an arbitrary DNS provider.",
+            "id": "CustomDns",
+            "properties": {
+                "dsRecords": {
+                    "description": "The list of DS records for this domain, which are used to enable DNSSEC. The domain's DNS provider can provide the values to set here. If this field is empty, DNSSEC is disabled.",
+                    "items": {
+                        "$ref": "DsRecord"
+                    },
+                    "type": "array"
+                },
+                "nameServers": {
+                    "description": "Required. A list of name servers that store the DNS zone for this domain. Each name server is a domain name, with Unicode domain names expressed in Punycode format.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "DnsSettings": {
+            "description": "Defines the DNS configuration of a `Registration`, including name servers, DNSSEC, and glue records.",
+            "id": "DnsSettings",
+            "properties": {
+                "customDns": {
+                    "$ref": "CustomDns",
+                    "description": "An arbitrary DNS provider identified by its name servers."
+                },
+                "glueRecords": {
+                    "description": "The list of glue records for this `Registration`. Commonly empty.",
+                    "items": {
+                        "$ref": "GlueRecord"
+                    },
+                    "type": "array"
+                },
+                "googleDomainsDns": {
+                    "$ref": "GoogleDomainsDns",
+                    "description": "The free DNS zone provided by [Google Domains](https://domains.google/)."
+                }
+            },
+            "type": "object"
+        },
+        "DsRecord": {
+            "description": "Defines a Delegation Signer (DS) record, which is needed to enable DNSSEC for a domain. It contains a digest (hash) of a DNSKEY record that must be present in the domain's DNS zone.",
+            "id": "DsRecord",
+            "properties": {
+                "algorithm": {
+                    "description": "The algorithm used to generate the referenced DNSKEY.",
+                    "enum": [
+                        "ALGORITHM_UNSPECIFIED",
+                        "DSA",
+                        "ECC",
+                        "RSASHA1",
+                        "DSANSEC3SHA1",
+                        "RSASHA1NSEC3SHA1",
+                        "RSASHA256",
+                        "RSASHA512",
+                        "ECCGOST",
+                        "ECDSAP256SHA256",
+                        "ECDSAP384SHA384",
+                        "ED25519",
+                        "ED448"
+                    ],
+                    "enumDescriptions": [
+                        "The algorithm is unspecified.",
+                        "DSA/SHA1. Not recommended for new deployments.",
+                        "ECC. Not recommended for new deployments.",
+                        "RSA/SHA-1. Not recommended for new deployments.",
+                        "DSA-NSEC3-SHA1. Not recommended for new deployments.",
+                        "RSA/SHA1-NSEC3-SHA1. Not recommended for new deployments.",
+                        "RSA/SHA-256.",
+                        "RSA/SHA-512.",
+                        "GOST R 34.10-2001.",
+                        "ECDSA Curve P-256 with SHA-256.",
+                        "ECDSA Curve P-384 with SHA-384.",
+                        "Ed25519.",
+                        "Ed448."
+                    ],
+                    "type": "string"
+                },
+                "digest": {
+                    "description": "The digest generated from the referenced DNSKEY.",
+                    "type": "string"
+                },
+                "digestType": {
+                    "description": "The hash function used to generate the digest of the referenced DNSKEY.",
+                    "enum": [
+                        "DIGEST_TYPE_UNSPECIFIED",
+                        "SHA1",
+                        "SHA256",
+                        "GOST3411",
+                        "SHA384"
+                    ],
+                    "enumDescriptions": [
+                        "The DigestType is unspecified.",
+                        "SHA-1. Not recommended for new deployments.",
+                        "SHA-256.",
+                        "GOST R 34.11-94.",
+                        "SHA-384."
+                    ],
+                    "type": "string"
+                },
+                "keyTag": {
+                    "description": "The key tag of the record. Must be set in range 0 -- 65535.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "ExportRegistrationRequest": {
+            "description": "Request for the `ExportRegistration` method.",
+            "id": "ExportRegistrationRequest",
+            "properties": {},
+            "type": "object"
+        },
+        "Expr": {
+            "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.",
+            "id": "Expr",
+            "properties": {
+                "description": {
+                    "description": "Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.",
+                    "type": "string"
+                },
+                "expression": {
+                    "description": "Textual representation of an expression in Common Expression Language syntax.",
+                    "type": "string"
+                },
+                "location": {
+                    "description": "Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GlueRecord": {
+            "description": "Defines a host on your domain that is a DNS name server for your domain and/or other domains. Glue records are a way of making the IP address of a name server known, even when it serves DNS queries for its parent domain. For example, when `ns.example.com` is a name server for `example.com`, the host `ns.example.com` must have a glue record to break the circular DNS reference.",
+            "id": "GlueRecord",
+            "properties": {
+                "hostName": {
+                    "description": "Required. Domain name of the host in Punycode format.",
+                    "type": "string"
+                },
+                "ipv4Addresses": {
+                    "description": "List of IPv4 addresses corresponding to this host in the standard decimal format (e.g. `198.51.100.1`). At least one of `ipv4_address` and `ipv6_address` must be set.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "ipv6Addresses": {
+                    "description": "List of IPv6 addresses corresponding to this host in the standard hexadecimal format (e.g. `2001:db8::`). At least one of `ipv4_address` and `ipv6_address` must be set.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleDomainsDns": {
+            "description": "Configuration for using the free DNS zone provided by Google Domains as a `Registration`'s `dns_provider`. You cannot configure the DNS zone itself using the API. To configure the DNS zone, go to [Google Domains](https://domains.google/).",
+            "id": "GoogleDomainsDns",
+            "properties": {
+                "dsRecords": {
+                    "description": "Output only. The list of DS records published for this domain. The list is automatically populated when `ds_state` is `DS_RECORDS_PUBLISHED`, otherwise it remains empty.",
+                    "items": {
+                        "$ref": "DsRecord"
+                    },
+                    "readOnly": true,
+                    "type": "array"
+                },
+                "dsState": {
+                    "description": "Required. The state of DS records for this domain. Used to enable or disable automatic DNSSEC.",
+                    "enum": [
+                        "DS_STATE_UNSPECIFIED",
+                        "DS_RECORDS_UNPUBLISHED",
+                        "DS_RECORDS_PUBLISHED"
+                    ],
+                    "enumDescriptions": [
+                        "DS state is unspecified.",
+                        "DNSSEC is disabled for this domain. No DS records for this domain are published in the parent DNS zone.",
+                        "DNSSEC is enabled for this domain. Appropriate DS records for this domain are published in the parent DNS zone. This option is valid only if the DNS zone referenced in the `Registration`'s `dns_provider` field is already DNSSEC-signed."
+                    ],
+                    "type": "string"
+                },
+                "nameServers": {
+                    "description": "Output only. A list of name servers that store the DNS zone for this domain. Each name server is a domain name, with Unicode domain names expressed in Punycode format. This field is automatically populated with the name servers assigned to the Google Domains DNS zone.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "readOnly": true,
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListLocationsResponse": {
+            "description": "The response message for Locations.ListLocations.",
+            "id": "ListLocationsResponse",
+            "properties": {
+                "locations": {
+                    "description": "A list of locations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Location"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListOperationsResponse": {
+            "description": "The response message for Operations.ListOperations.",
+            "id": "ListOperationsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                },
+                "operations": {
+                    "description": "A list of operations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Operation"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListRegistrationsResponse": {
+            "description": "Response for the `ListRegistrations` method.",
+            "id": "ListRegistrationsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "When present, there are more results to retrieve. Set `page_token` to this value on a subsequent call to get the next page of results.",
+                    "type": "string"
+                },
+                "registrations": {
+                    "description": "A list of `Registration`s.",
+                    "items": {
+                        "$ref": "Registration"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Location": {
+            "description": "A resource that represents Google Cloud Platform location.",
+            "id": "Location",
+            "properties": {
+                "displayName": {
+                    "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\".",
+                    "type": "string"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}",
+                    "type": "object"
+                },
+                "locationId": {
+                    "description": "The canonical id for this location. For example: `\"us-east1\"`.",
+                    "type": "string"
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata. For example the available capacity at the given location.",
+                    "type": "object"
                 },
                 "name": {
-                  "pattern": "^projects/[^/]+$",
-                  "description": "The resource that owns the locations collection, if applicable.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                },
-                "pageToken": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "The standard list page token."
-                },
-                "pageSize": {
-                  "type": "integer",
-                  "description": "The standard list page size.",
-                  "location": "query",
-                  "format": "int32"
+                    "description": "Resource name for the location, which may vary between implementations. For example: `\"projects/example-project/locations/us-east1\"`",
+                    "type": "string"
                 }
-              },
-              "id": "domains.projects.locations.list",
-              "httpMethod": "GET",
-              "path": "v1beta1/{+name}/locations",
-              "flatPath": "v1beta1/projects/{projectsId}/locations"
-            }
-          }
-        }
-      }
-    }
-  },
-  "version_module": true,
-  "protocol": "rest",
-  "revision": "20201110",
-  "schemas": {
-    "Status": {
-      "type": "object",
-      "properties": {
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
-          "type": "string"
+            },
+            "type": "object"
         },
-        "details": {
-          "items": {
-            "type": "object",
-            "additionalProperties": {
-              "type": "any",
-              "description": "Properties of the object. Contains field @type with type URL."
-            }
-          },
-          "type": "array",
-          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use."
+        "ManagementSettings": {
+            "description": "Defines renewal, billing, and transfer settings for a `Registration`.",
+            "id": "ManagementSettings",
+            "properties": {
+                "renewalMethod": {
+                    "description": "Output only. The renewal method for this `Registration`.",
+                    "enum": [
+                        "RENEWAL_METHOD_UNSPECIFIED",
+                        "AUTOMATIC_RENEWAL",
+                        "MANUAL_RENEWAL"
+                    ],
+                    "enumDescriptions": [
+                        "The renewal method is undefined.",
+                        "The domain is automatically renewed each year . To disable automatic renewals, export the domain by calling `ExportRegistration` .",
+                        "The domain must be explicitly renewed each year before its `expire_time`. This option is only available when the `Registration` is in state `EXPORTED`. To manage the domain's current billing and renewal settings, go to [Google Domains](https://domains.google/)."
+                    ],
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "transferLockState": {
+                    "description": "Controls whether the domain can be transferred to another registrar.",
+                    "enum": [
+                        "TRANSFER_LOCK_STATE_UNSPECIFIED",
+                        "UNLOCKED",
+                        "LOCKED"
+                    ],
+                    "enumDescriptions": [
+                        "The state is unspecified.",
+                        "The domain is unlocked and can be transferred to another registrar.",
+                        "The domain is locked and cannot be transferred to another registrar."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "code": {
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "type": "integer",
-          "format": "int32"
+        "Money": {
+            "description": "Represents an amount of money with its currency type.",
+            "id": "Money",
+            "properties": {
+                "currencyCode": {
+                    "description": "The three-letter currency code defined in ISO 4217.",
+                    "type": "string"
+                },
+                "nanos": {
+                    "description": "Number of nano (10^-9) units of the amount. The value must be between -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos` must be positive or zero. If `units` is zero, `nanos` can be positive, zero, or negative. If `units` is negative, `nanos` must be negative or zero. For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "units": {
+                    "description": "The whole units of the amount. For example if `currencyCode` is `\"USD\"`, then 1 unit is one US dollar.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Operation": {
+            "description": "This resource represents a long-running operation that is the result of a network API call.",
+            "id": "Operation",
+            "properties": {
+                "done": {
+                    "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
+                    "type": "boolean"
+                },
+                "error": {
+                    "$ref": "Status",
+                    "description": "The error result of the operation in case of failure or cancellation."
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
+                    "type": "string"
+                },
+                "response": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "OperationMetadata": {
+            "description": "Represents the metadata of the long-running operation. Output only.",
+            "id": "OperationMetadata",
+            "properties": {
+                "apiVersion": {
+                    "description": "API version used to start the operation.",
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "The time the operation was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "endTime": {
+                    "description": "The time the operation finished running.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "statusDetail": {
+                    "description": "Human-readable status of the operation, if any.",
+                    "type": "string"
+                },
+                "target": {
+                    "description": "Server-defined resource path for the target of the operation.",
+                    "type": "string"
+                },
+                "verb": {
+                    "description": "Name of the verb executed by the operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Policy": {
+            "description": "An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { \"bindings\": [ { \"role\": \"roles/resourcemanager.organizationAdmin\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\" ] }, { \"role\": \"roles/resourcemanager.organizationViewer\", \"members\": [ \"user:eve@example.com\" ], \"condition\": { \"title\": \"expirable access\", \"description\": \"Does not grant access after Sep 2020\", \"expression\": \"request.time < timestamp('2020-10-01T00:00:00.000Z')\", } } ], \"etag\": \"BwWWja0YfJA=\", \"version\": 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).",
+            "id": "Policy",
+            "properties": {
+                "auditConfigs": {
+                    "description": "Specifies cloud audit logging configuration for this policy.",
+                    "items": {
+                        "$ref": "AuditConfig"
+                    },
+                    "type": "array"
+                },
+                "bindings": {
+                    "description": "Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.",
+                    "items": {
+                        "$ref": "Binding"
+                    },
+                    "type": "array"
+                },
+                "etag": {
+                    "description": "`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "version": {
+                    "description": "Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "PostalAddress": {
+            "description": "Represents a postal address, e.g. for postal delivery or payments addresses. Given a postal address, a postal service can deliver items to a premise, P.O. Box or similar. It is not intended to model geographical locations (roads, towns, mountains). In typical usage an address would be created via user input or from importing existing data, depending on the type of process. Advice on address input / editing: - Use an i18n-ready address widget such as https://github.com/google/libaddressinput) - Users should not be presented with UI elements for input or editing of fields outside countries where that field is used. For more guidance on how to use this schema, please see: https://support.google.com/business/answer/6397478",
+            "id": "PostalAddress",
+            "properties": {
+                "addressLines": {
+                    "description": "Unstructured address lines describing the lower levels of an address. Because values in address_lines do not have type information and may sometimes contain multiple values in a single field (e.g. \"Austin, TX\"), it is important that the line order is clear. The order of address lines should be \"envelope order\" for the country/region of the address. In places where this can vary (e.g. Japan), address_language is used to make it explicit (e.g. \"ja\" for large-to-small ordering and \"ja-Latn\" or \"en\" for small-to-large). This way, the most specific line of an address can be selected based on the language. The minimum permitted structural representation of an address consists of a region_code with all remaining information placed in the address_lines. It would be possible to format such an address very approximately without geocoding, but no semantic reasoning could be made about any of the address components until it was at least partially resolved. Creating an address only containing a region_code and address_lines, and then geocoding is the recommended way to handle completely unstructured addresses (as opposed to guessing which parts of the address should be localities or administrative areas).",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "administrativeArea": {
+                    "description": "Optional. Highest administrative subdivision which is used for postal addresses of a country or region. For example, this can be a state, a province, an oblast, or a prefecture. Specifically, for Spain this is the province and not the autonomous community (e.g. \"Barcelona\" and not \"Catalonia\"). Many countries don't use an administrative area in postal addresses. E.g. in Switzerland this should be left unpopulated.",
+                    "type": "string"
+                },
+                "languageCode": {
+                    "description": "Optional. BCP-47 language code of the contents of this address (if known). This is often the UI language of the input form or is expected to match one of the languages used in the address' country/region, or their transliterated equivalents. This can affect formatting in certain countries, but is not critical to the correctness of the data and will never affect any validation or other non-formatting related operations. If this value is not known, it should be omitted (rather than specifying a possibly incorrect default). Examples: \"zh-Hant\", \"ja\", \"ja-Latn\", \"en\".",
+                    "type": "string"
+                },
+                "locality": {
+                    "description": "Optional. Generally refers to the city/town portion of the address. Examples: US city, IT comune, UK post town. In regions of the world where localities are not well defined or do not fit into this structure well, leave locality empty and use address_lines.",
+                    "type": "string"
+                },
+                "organization": {
+                    "description": "Optional. The name of the organization at the address.",
+                    "type": "string"
+                },
+                "postalCode": {
+                    "description": "Optional. Postal code of the address. Not all countries use or require postal codes to be present, but where they are used, they may trigger additional validation with other parts of the address (e.g. state/zip validation in the U.S.A.).",
+                    "type": "string"
+                },
+                "recipients": {
+                    "description": "Optional. The recipient at the address. This field may, under certain circumstances, contain multiline information. For example, it might contain \"care of\" information.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "regionCode": {
+                    "description": "Required. CLDR region code of the country/region of the address. This is never inferred and it is up to the user to ensure the value is correct. See http://cldr.unicode.org/ and http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html for details. Example: \"CH\" for Switzerland.",
+                    "type": "string"
+                },
+                "revision": {
+                    "description": "The schema revision of the `PostalAddress`. This must be set to 0, which is the latest revision. All new revisions **must** be backward compatible with old revisions.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "sortingCode": {
+                    "description": "Optional. Additional, country-specific, sorting code. This is not used in most regions. Where it is used, the value is either a string like \"CEDEX\", optionally followed by a number (e.g. \"CEDEX 7\"), or just a number alone, representing the \"sector code\" (Jamaica), \"delivery area indicator\" (Malawi) or \"post office indicator\" (e.g. C\u00f4te d'Ivoire).",
+                    "type": "string"
+                },
+                "sublocality": {
+                    "description": "Optional. Sublocality of the address. For example, this can be neighborhoods, boroughs, districts.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RegisterDomainRequest": {
+            "description": "Request for the `RegisterDomain` method.",
+            "id": "RegisterDomainRequest",
+            "properties": {
+                "contactNotices": {
+                    "description": "The list of contact notices that the caller acknowledges. The notices needed here depend on the values specified in `registration.contact_settings`.",
+                    "items": {
+                        "enum": [
+                            "CONTACT_NOTICE_UNSPECIFIED",
+                            "PUBLIC_CONTACT_DATA_ACKNOWLEDGEMENT"
+                        ],
+                        "enumDescriptions": [
+                            "The notice is undefined.",
+                            "Required when setting the `privacy` field of `ContactSettings` to `PUBLIC_CONTACT_DATA`, which exposes contact data publicly."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "domainNotices": {
+                    "description": "The list of domain notices that you acknowledge. Call `RetrieveRegisterParameters` to see the notices that need acknowledgement.",
+                    "items": {
+                        "enum": [
+                            "DOMAIN_NOTICE_UNSPECIFIED",
+                            "HSTS_PRELOADED"
+                        ],
+                        "enumDescriptions": [
+                            "The notice is undefined.",
+                            "Indicates that the domain is preloaded on the HTTP Strict Transport Security list in browsers. Serving a website on such domain requires an SSL certificate. For details, see [how to get an SSL certificate](https://support.google.com/domains/answer/7638036)."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "registration": {
+                    "$ref": "Registration",
+                    "description": "Required. The complete `Registration` resource to be created."
+                },
+                "validateOnly": {
+                    "description": "When true, only validation will be performed, without actually registering the domain. Follows: https://cloud.google.com/apis/design/design_patterns#request_validation",
+                    "type": "boolean"
+                },
+                "yearlyPrice": {
+                    "$ref": "Money",
+                    "description": "Required. Yearly price to register or renew the domain. The value that should be put here can be obtained from RetrieveRegisterParameters or SearchDomains calls."
+                }
+            },
+            "type": "object"
+        },
+        "RegisterParameters": {
+            "description": "Parameters required to register a new domain.",
+            "id": "RegisterParameters",
+            "properties": {
+                "availability": {
+                    "description": "Indicates whether the domain is available for registration. This value is accurate when obtained by calling `RetrieveRegisterParameters`, but is approximate when obtained by calling `SearchDomains`.",
+                    "enum": [
+                        "AVAILABILITY_UNSPECIFIED",
+                        "AVAILABLE",
+                        "UNAVAILABLE",
+                        "UNSUPPORTED",
+                        "UNKNOWN"
+                    ],
+                    "enumDescriptions": [
+                        "The availability is unspecified.",
+                        "The domain is available for registration.",
+                        "The domain is not available for registration. Generally this means it is already registered to another party.",
+                        "The domain is not currently supported by Cloud Domains, but may be available elsewhere.",
+                        "Cloud Domains is unable to determine domain availability, generally due to system maintenance at the domain name registry."
+                    ],
+                    "type": "string"
+                },
+                "domainName": {
+                    "description": "The domain name. Unicode domain names are expressed in Punycode format.",
+                    "type": "string"
+                },
+                "domainNotices": {
+                    "description": "Notices about special properties of the domain.",
+                    "items": {
+                        "enum": [
+                            "DOMAIN_NOTICE_UNSPECIFIED",
+                            "HSTS_PRELOADED"
+                        ],
+                        "enumDescriptions": [
+                            "The notice is undefined.",
+                            "Indicates that the domain is preloaded on the HTTP Strict Transport Security list in browsers. Serving a website on such domain requires an SSL certificate. For details, see [how to get an SSL certificate](https://support.google.com/domains/answer/7638036)."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "supportedPrivacy": {
+                    "description": "Contact privacy options that the domain supports.",
+                    "items": {
+                        "enum": [
+                            "CONTACT_PRIVACY_UNSPECIFIED",
+                            "PUBLIC_CONTACT_DATA",
+                            "PRIVATE_CONTACT_DATA",
+                            "REDACTED_CONTACT_DATA"
+                        ],
+                        "enumDescriptions": [
+                            "The contact privacy settings are undefined.",
+                            "All the data from `ContactSettings` is publicly available. When setting this option, you must also provide a `PUBLIC_CONTACT_DATA_ACKNOWLEDGEMENT` in the `contact_notices` field of the request.",
+                            "None of the data from `ContactSettings` is publicly available. Instead, proxy contact data is published for your domain. Email sent to the proxy email address is forwarded to the registrant's email address. Cloud Domains provides this privacy proxy service at no additional cost.",
+                            "Some data from `ContactSettings` is publicly available. The actual information redacted depends on the domain. For details, see [the registration privacy article](https://support.google.com/domains/answer/3251242)."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "yearlyPrice": {
+                    "$ref": "Money",
+                    "description": "Price to register or renew the domain for one year."
+                }
+            },
+            "type": "object"
+        },
+        "Registration": {
+            "description": "The `Registration` resource facilitates managing and configuring domain name registrations. To create a new `Registration` resource, find a suitable domain name by calling the `SearchDomains` method with a query to see available domain name options. After choosing a name, call `RetrieveRegisterParameters` to ensure availability and obtain information like pricing, which is needed to build a call to `RegisterDomain`. ",
+            "id": "Registration",
+            "properties": {
+                "contactSettings": {
+                    "$ref": "ContactSettings",
+                    "description": "Required. Settings for contact information linked to the `Registration`. You cannot update these with the `UpdateRegistration` method. To update these settings, use the `ConfigureContactSettings` method."
+                },
+                "createTime": {
+                    "description": "Output only. The creation timestamp of the `Registration` resource.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "dnsSettings": {
+                    "$ref": "DnsSettings",
+                    "description": "Settings controlling the DNS configuration of the `Registration`. You cannot update these with the `UpdateRegistration` method. To update these settings, use the `ConfigureDnsSettings` method."
+                },
+                "domainName": {
+                    "description": "Required. Immutable. The domain name. Unicode domain names must be expressed in Punycode format.",
+                    "type": "string"
+                },
+                "expireTime": {
+                    "description": "Output only. The expiration timestamp of the `Registration`.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "issues": {
+                    "description": "Output only. The set of issues with the `Registration` that require attention.",
+                    "items": {
+                        "enum": [
+                            "ISSUE_UNSPECIFIED",
+                            "CONTACT_SUPPORT",
+                            "UNVERIFIED_EMAIL"
+                        ],
+                        "enumDescriptions": [
+                            "The issue is undefined.",
+                            "Contact the Cloud Support team to resolve a problem with this domain.",
+                            "[ICANN](https://icann.org/) requires verification of the email address in the `Registration`'s `contact_settings.registrant_contact` field. To verify the email address, follow the instructions in the email the `registrant_contact` receives following registration. If you do not complete email verification within 15 days of registration, the domain is suspended. To resend the verification email, call ConfigureContactSettings and provide the current `registrant_contact.email`."
+                        ],
+                        "type": "string"
+                    },
+                    "readOnly": true,
+                    "type": "array"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Set of labels associated with the `Registration`.",
+                    "type": "object"
+                },
+                "managementSettings": {
+                    "$ref": "ManagementSettings",
+                    "description": "Settings for management of the `Registration`, including renewal, billing, and transfer. You cannot update these with the `UpdateRegistration` method. To update these settings, use the `ConfigureManagementSettings` method."
+                },
+                "name": {
+                    "description": "Output only. Name of the `Registration` resource, in the format `projects/*/locations/*/registrations/`.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "pendingContactSettings": {
+                    "$ref": "ContactSettings",
+                    "description": "Output only. Pending contact settings for the `Registration`. Updates to the `contact_settings` field that change its `registrant_contact` or `privacy` fields require email confirmation by the `registrant_contact` before taking effect. This field is set only if there are pending updates to the `contact_settings` that have not yet been confirmed. To confirm the changes, the `registrant_contact` must follow the instructions in the email they receive.",
+                    "readOnly": true
+                },
+                "state": {
+                    "description": "Output only. The state of the `Registration`",
+                    "enum": [
+                        "STATE_UNSPECIFIED",
+                        "REGISTRATION_PENDING",
+                        "REGISTRATION_FAILED",
+                        "ACTIVE",
+                        "SUSPENDED",
+                        "EXPORTED"
+                    ],
+                    "enumDescriptions": [
+                        "The state is undefined.",
+                        "The domain is being registered.",
+                        "The domain registration failed. You can delete resources in this state to allow registration to be retried.",
+                        "The domain is registered and operational. The domain renews automatically as long as it remains in this state.",
+                        "The domain is suspended and inoperative. For more details, see the `issues` field.",
+                        "The domain has been exported from Cloud Domains to [Google Domains](https://domains.google/). You can no longer update it with this API, and information shown about it may be stale. Without further action, domains in this state expire at their `expire_time`. You can delete the resource after the `expire_time` has passed."
+                    ],
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "supportedPrivacy": {
+                    "description": "Output only. Set of options for the `contact_settings.privacy` field that this `Registration` supports.",
+                    "items": {
+                        "enum": [
+                            "CONTACT_PRIVACY_UNSPECIFIED",
+                            "PUBLIC_CONTACT_DATA",
+                            "PRIVATE_CONTACT_DATA",
+                            "REDACTED_CONTACT_DATA"
+                        ],
+                        "enumDescriptions": [
+                            "The contact privacy settings are undefined.",
+                            "All the data from `ContactSettings` is publicly available. When setting this option, you must also provide a `PUBLIC_CONTACT_DATA_ACKNOWLEDGEMENT` in the `contact_notices` field of the request.",
+                            "None of the data from `ContactSettings` is publicly available. Instead, proxy contact data is published for your domain. Email sent to the proxy email address is forwarded to the registrant's email address. Cloud Domains provides this privacy proxy service at no additional cost.",
+                            "Some data from `ContactSettings` is publicly available. The actual information redacted depends on the domain. For details, see [the registration privacy article](https://support.google.com/domains/answer/3251242)."
+                        ],
+                        "type": "string"
+                    },
+                    "readOnly": true,
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ResetAuthorizationCodeRequest": {
+            "description": "Request for the `ResetAuthorizationCode` method.",
+            "id": "ResetAuthorizationCodeRequest",
+            "properties": {},
+            "type": "object"
+        },
+        "RetrieveRegisterParametersResponse": {
+            "description": "Response for the `RetrieveRegisterParameters` method.",
+            "id": "RetrieveRegisterParametersResponse",
+            "properties": {
+                "registerParameters": {
+                    "$ref": "RegisterParameters",
+                    "description": "Parameters to use when calling the `RegisterDomain` method."
+                }
+            },
+            "type": "object"
+        },
+        "SearchDomainsResponse": {
+            "description": "Response for the `SearchDomains` method.",
+            "id": "SearchDomainsResponse",
+            "properties": {
+                "registerParameters": {
+                    "description": "Results of the domain name search.",
+                    "items": {
+                        "$ref": "RegisterParameters"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "SetIamPolicyRequest": {
+            "description": "Request message for `SetIamPolicy` method.",
+            "id": "SetIamPolicyRequest",
+            "properties": {
+                "policy": {
+                    "$ref": "Policy",
+                    "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them."
+                },
+                "updateMask": {
+                    "description": "OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only the fields in the mask will be modified. If no mask is provided, the following default mask is used: `paths: \"bindings, etag\"`",
+                    "format": "google-fieldmask",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Status": {
+            "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
+            "id": "Status",
+            "properties": {
+                "code": {
+                    "description": "The status code, which should be an enum value of google.rpc.Code.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TestIamPermissionsRequest": {
+            "description": "Request message for `TestIamPermissions` method.",
+            "id": "TestIamPermissionsRequest",
+            "properties": {
+                "permissions": {
+                    "description": "The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or 'storage.*') are not allowed. For more information see [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "TestIamPermissionsResponse": {
+            "description": "Response message for `TestIamPermissions` method.",
+            "id": "TestIamPermissionsResponse",
+            "properties": {
+                "permissions": {
+                    "description": "A subset of `TestPermissionsRequest.permissions` that the caller is allowed.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         }
-      },
-      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
-      "id": "Status"
     },
-    "ListOperationsResponse": {
-      "id": "ListOperationsResponse",
-      "type": "object",
-      "description": "The response message for Operations.ListOperations.",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "The standard List next-page token."
-        },
-        "operations": {
-          "type": "array",
-          "description": "A list of operations that matches the specified filter in the request.",
-          "items": {
-            "$ref": "Operation"
-          }
-        }
-      }
-    },
-    "AuditConfig": {
-      "properties": {
-        "auditLogConfigs": {
-          "type": "array",
-          "items": {
-            "$ref": "AuditLogConfig"
-          },
-          "description": "The configuration for logging of each type of permission."
-        },
-        "service": {
-          "type": "string",
-          "description": "Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices` is a special value that covers all services."
-        }
-      },
-      "type": "object",
-      "description": "Specifies the audit configuration for a service. The configuration determines which permission types are logged, and what identities, if any, are exempted from logging. An AuditConfig must have one or more AuditLogConfigs. If there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is used for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each AuditLogConfig are exempted. Example Policy with multiple AuditConfigs: { \"audit_configs\": [ { \"service\": \"allServices\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" }, { \"log_type\": \"ADMIN_READ\" } ] }, { \"service\": \"sampleservice.googleapis.com\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\" }, { \"log_type\": \"DATA_WRITE\", \"exempted_members\": [ \"user:aliya@example.com\" ] } ] } ] } For sampleservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ logging. It also exempts jose@example.com from DATA_READ logging, and aliya@example.com from DATA_WRITE logging.",
-      "id": "AuditConfig"
-    },
-    "ListRegistrationsResponse": {
-      "type": "object",
-      "id": "ListRegistrationsResponse",
-      "description": "Response for the `ListRegistrations` method.",
-      "properties": {
-        "nextPageToken": {
-          "description": "When present, there are more results to retrieve. Set `page_token` to this value on a subsequent call to get the next page of results.",
-          "type": "string"
-        },
-        "registrations": {
-          "description": "A list of `Registration`s.",
-          "type": "array",
-          "items": {
-            "$ref": "Registration"
-          }
-        }
-      }
-    },
-    "ExportRegistrationRequest": {
-      "properties": {},
-      "description": "Request for the `ExportRegistration` method.",
-      "id": "ExportRegistrationRequest",
-      "type": "object"
-    },
-    "PostalAddress": {
-      "properties": {
-        "regionCode": {
-          "type": "string",
-          "description": "Required. CLDR region code of the country/region of the address. This is never inferred and it is up to the user to ensure the value is correct. See http://cldr.unicode.org/ and http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html for details. Example: \"CH\" for Switzerland."
-        },
-        "recipients": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "Optional. The recipient at the address. This field may, under certain circumstances, contain multiline information. For example, it might contain \"care of\" information."
-        },
-        "languageCode": {
-          "description": "Optional. BCP-47 language code of the contents of this address (if known). This is often the UI language of the input form or is expected to match one of the languages used in the address' country/region, or their transliterated equivalents. This can affect formatting in certain countries, but is not critical to the correctness of the data and will never affect any validation or other non-formatting related operations. If this value is not known, it should be omitted (rather than specifying a possibly incorrect default). Examples: \"zh-Hant\", \"ja\", \"ja-Latn\", \"en\".",
-          "type": "string"
-        },
-        "organization": {
-          "type": "string",
-          "description": "Optional. The name of the organization at the address."
-        },
-        "sortingCode": {
-          "description": "Optional. Additional, country-specific, sorting code. This is not used in most regions. Where it is used, the value is either a string like \"CEDEX\", optionally followed by a number (e.g. \"CEDEX 7\"), or just a number alone, representing the \"sector code\" (Jamaica), \"delivery area indicator\" (Malawi) or \"post office indicator\" (e.g. Côte d'Ivoire).",
-          "type": "string"
-        },
-        "revision": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The schema revision of the `PostalAddress`. This must be set to 0, which is the latest revision. All new revisions **must** be backward compatible with old revisions."
-        },
-        "locality": {
-          "description": "Optional. Generally refers to the city/town portion of the address. Examples: US city, IT comune, UK post town. In regions of the world where localities are not well defined or do not fit into this structure well, leave locality empty and use address_lines.",
-          "type": "string"
-        },
-        "sublocality": {
-          "description": "Optional. Sublocality of the address. For example, this can be neighborhoods, boroughs, districts.",
-          "type": "string"
-        },
-        "postalCode": {
-          "description": "Optional. Postal code of the address. Not all countries use or require postal codes to be present, but where they are used, they may trigger additional validation with other parts of the address (e.g. state/zip validation in the U.S.A.).",
-          "type": "string"
-        },
-        "addressLines": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "Unstructured address lines describing the lower levels of an address. Because values in address_lines do not have type information and may sometimes contain multiple values in a single field (e.g. \"Austin, TX\"), it is important that the line order is clear. The order of address lines should be \"envelope order\" for the country/region of the address. In places where this can vary (e.g. Japan), address_language is used to make it explicit (e.g. \"ja\" for large-to-small ordering and \"ja-Latn\" or \"en\" for small-to-large). This way, the most specific line of an address can be selected based on the language. The minimum permitted structural representation of an address consists of a region_code with all remaining information placed in the address_lines. It would be possible to format such an address very approximately without geocoding, but no semantic reasoning could be made about any of the address components until it was at least partially resolved. Creating an address only containing a region_code and address_lines, and then geocoding is the recommended way to handle completely unstructured addresses (as opposed to guessing which parts of the address should be localities or administrative areas)."
-        },
-        "administrativeArea": {
-          "description": "Optional. Highest administrative subdivision which is used for postal addresses of a country or region. For example, this can be a state, a province, an oblast, or a prefecture. Specifically, for Spain this is the province and not the autonomous community (e.g. \"Barcelona\" and not \"Catalonia\"). Many countries don't use an administrative area in postal addresses. E.g. in Switzerland this should be left unpopulated.",
-          "type": "string"
-        }
-      },
-      "id": "PostalAddress",
-      "description": "Represents a postal address, e.g. for postal delivery or payments addresses. Given a postal address, a postal service can deliver items to a premise, P.O. Box or similar. It is not intended to model geographical locations (roads, towns, mountains). In typical usage an address would be created via user input or from importing existing data, depending on the type of process. Advice on address input / editing: - Use an i18n-ready address widget such as https://github.com/google/libaddressinput) - Users should not be presented with UI elements for input or editing of fields outside countries where that field is used. For more guidance on how to use this schema, please see: https://support.google.com/business/answer/6397478",
-      "type": "object"
-    },
-    "RetrieveRegisterParametersResponse": {
-      "id": "RetrieveRegisterParametersResponse",
-      "properties": {
-        "registerParameters": {
-          "$ref": "RegisterParameters",
-          "description": "Parameters to use when calling the `RegisterDomain` method."
-        }
-      },
-      "type": "object",
-      "description": "Response for the `RetrieveRegisterParameters` method."
-    },
-    "ManagementSettings": {
-      "properties": {
-        "renewalMethod": {
-          "readOnly": true,
-          "enum": [
-            "RENEWAL_METHOD_UNSPECIFIED",
-            "AUTOMATIC_RENEWAL",
-            "MANUAL_RENEWAL"
-          ],
-          "enumDescriptions": [
-            "The renewal method is undefined.",
-            "The domain is automatically renewed each year . To disable automatic renewals, export the domain by calling `ExportRegistration` .",
-            "The domain must be explicitly renewed each year before its `expire_time`. This option is only available when the `Registration` is in state `EXPORTED`. To manage the domain's current billing and renewal settings, go to [Google Domains](https://domains.google/)."
-          ],
-          "description": "Output only. The renewal method for this `Registration`.",
-          "type": "string"
-        },
-        "transferLockState": {
-          "description": "Controls whether the domain can be transferred to another registrar.",
-          "enum": [
-            "TRANSFER_LOCK_STATE_UNSPECIFIED",
-            "UNLOCKED",
-            "LOCKED"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "The state is unspecified.",
-            "The domain is unlocked and can be transferred to another registrar.",
-            "The domain is locked and cannot be transferred to another registrar."
-          ]
-        }
-      },
-      "id": "ManagementSettings",
-      "type": "object",
-      "description": "Defines renewal, billing, and transfer settings for a `Registration`."
-    },
-    "Money": {
-      "description": "Represents an amount of money with its currency type.",
-      "properties": {
-        "currencyCode": {
-          "description": "The three-letter currency code defined in ISO 4217.",
-          "type": "string"
-        },
-        "units": {
-          "type": "string",
-          "description": "The whole units of the amount. For example if `currencyCode` is `\"USD\"`, then 1 unit is one US dollar.",
-          "format": "int64"
-        },
-        "nanos": {
-          "type": "integer",
-          "description": "Number of nano (10^-9) units of the amount. The value must be between -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos` must be positive or zero. If `units` is zero, `nanos` can be positive, zero, or negative. If `units` is negative, `nanos` must be negative or zero. For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.",
-          "format": "int32"
-        }
-      },
-      "id": "Money",
-      "type": "object"
-    },
-    "Contact": {
-      "properties": {
-        "email": {
-          "type": "string",
-          "description": "Required. Email address of the contact."
-        },
-        "postalAddress": {
-          "description": "Required. Postal address of the contact.",
-          "$ref": "PostalAddress"
-        },
-        "faxNumber": {
-          "description": "Fax number of the contact in international format. For example, `\"+1-800-555-0123\"`.",
-          "type": "string"
-        },
-        "phoneNumber": {
-          "description": "Required. Phone number of the contact in international format. For example, `\"+1-800-555-0123\"`.",
-          "type": "string"
-        }
-      },
-      "description": "Details required for a contact associated with a `Registration`.",
-      "type": "object",
-      "id": "Contact"
-    },
-    "DsRecord": {
-      "type": "object",
-      "description": "Defines a Delegation Signer (DS) record, which is needed to enable DNSSEC for a domain. It contains a digest (hash) of a DNSKEY record that must be present in the domain's DNS zone.",
-      "properties": {
-        "keyTag": {
-          "description": "The key tag of the record. Must be set in range 0 -- 65535.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "digestType": {
-          "type": "string",
-          "enum": [
-            "DIGEST_TYPE_UNSPECIFIED",
-            "SHA1",
-            "SHA256",
-            "GOST3411",
-            "SHA384"
-          ],
-          "enumDescriptions": [
-            "The DigestType is unspecified.",
-            "SHA-1. Not recommended for new deployments.",
-            "SHA-256.",
-            "GOST R 34.11-94.",
-            "SHA-384."
-          ],
-          "description": "The hash function used to generate the digest of the referenced DNSKEY."
-        },
-        "digest": {
-          "description": "The digest generated from the referenced DNSKEY.",
-          "type": "string"
-        },
-        "algorithm": {
-          "enum": [
-            "ALGORITHM_UNSPECIFIED",
-            "DSA",
-            "ECC",
-            "RSASHA1",
-            "DSANSEC3SHA1",
-            "RSASHA1NSEC3SHA1",
-            "RSASHA256",
-            "RSASHA512",
-            "ECCGOST",
-            "ECDSAP256SHA256",
-            "ECDSAP384SHA384",
-            "ED25519",
-            "ED448"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "The algorithm is unspecified.",
-            "DSA/SHA1. Not recommended for new deployments.",
-            "ECC. Not recommended for new deployments.",
-            "RSA/SHA-1. Not recommended for new deployments.",
-            "DSA-NSEC3-SHA1. Not recommended for new deployments.",
-            "RSA/SHA1-NSEC3-SHA1. Not recommended for new deployments.",
-            "RSA/SHA-256.",
-            "RSA/SHA-512.",
-            "GOST R 34.10-2001.",
-            "ECDSA Curve P-256 with SHA-256.",
-            "ECDSA Curve P-384 with SHA-384.",
-            "Ed25519.",
-            "Ed448."
-          ],
-          "description": "The algorithm used to generate the referenced DNSKEY."
-        }
-      },
-      "id": "DsRecord"
-    },
-    "ConfigureDnsSettingsRequest": {
-      "properties": {
-        "updateMask": {
-          "format": "google-fieldmask",
-          "description": "Required. The field mask describing which fields to update as a comma-separated list. For example, if only the name servers are being updated for an existing Custom DNS configuration, the `update_mask` would be `\"custom_dns.name_servers\"`. When changing the DNS provider from one type to another, pass the new provider's field name as part of the field mask. For example, when changing from a Google Domains DNS configuration to a Custom DNS configuration, the `update_mask` would be `\"custom_dns\"`. //",
-          "type": "string"
-        },
-        "dnsSettings": {
-          "$ref": "DnsSettings",
-          "description": "Fields of the `DnsSettings` to update."
-        },
-        "validateOnly": {
-          "type": "boolean",
-          "description": "Validate the request without actually updating the DNS settings."
-        }
-      },
-      "description": "Request for the `ConfigureDnsSettings` method.",
-      "id": "ConfigureDnsSettingsRequest",
-      "type": "object"
-    },
-    "DnsSettings": {
-      "id": "DnsSettings",
-      "type": "object",
-      "properties": {
-        "customDns": {
-          "description": "An arbitrary DNS provider identified by its name servers.",
-          "$ref": "CustomDns"
-        },
-        "glueRecords": {
-          "description": "The list of glue records for this `Registration`. Commonly empty.",
-          "items": {
-            "$ref": "GlueRecord"
-          },
-          "type": "array"
-        },
-        "googleDomainsDns": {
-          "$ref": "GoogleDomainsDns",
-          "description": "The free DNS zone provided by [Google Domains](https://domains.google/)."
-        }
-      },
-      "description": "Defines the DNS configuration of a `Registration`, including name servers, DNSSEC, and glue records."
-    },
-    "RegisterParameters": {
-      "type": "object",
-      "id": "RegisterParameters",
-      "description": "Parameters required to register a new domain.",
-      "properties": {
-        "domainNotices": {
-          "type": "array",
-          "items": {
-            "enumDescriptions": [
-              "The notice is undefined.",
-              "Indicates that the domain is preloaded on the HTTP Strict Transport Security list in browsers. Serving a website on such domain requires an SSL certificate. For details, see [how to get an SSL certificate](https://support.google.com/domains/answer/7638036)."
-            ],
-            "enum": [
-              "DOMAIN_NOTICE_UNSPECIFIED",
-              "HSTS_PRELOADED"
-            ],
-            "type": "string"
-          },
-          "description": "Notices about special properties of the domain."
-        },
-        "supportedPrivacy": {
-          "items": {
-            "enumDescriptions": [
-              "The contact privacy settings are undefined.",
-              "All the data from `ContactSettings` is publicly available. When setting this option, you must also provide a `PUBLIC_CONTACT_DATA_ACKNOWLEDGEMENT` in the `contact_notices` field of the request.",
-              "None of the data from `ContactSettings` is publicly available. Instead, proxy contact data is published for your domain. Email sent to the proxy email address is forwarded to the registrant's email address. Cloud Domains provides this privacy proxy service at no additional cost.",
-              "Some data from `ContactSettings` is publicly available. The actual information redacted depends on the domain. For details, see [the registration privacy article](https://support.google.com/domains/answer/3251242)."
-            ],
-            "type": "string",
-            "enum": [
-              "CONTACT_PRIVACY_UNSPECIFIED",
-              "PUBLIC_CONTACT_DATA",
-              "PRIVATE_CONTACT_DATA",
-              "REDACTED_CONTACT_DATA"
-            ]
-          },
-          "description": "Contact privacy options that the domain supports.",
-          "type": "array"
-        },
-        "domainName": {
-          "description": "The domain name. Unicode domain names are expressed in Punycode format.",
-          "type": "string"
-        },
-        "availability": {
-          "type": "string",
-          "enumDescriptions": [
-            "The availability is unspecified.",
-            "The domain is available for registration.",
-            "The domain is not available for registration. Generally this means it is already registered to another party.",
-            "The domain is not currently supported by Cloud Domains, but may be available elsewhere.",
-            "Cloud Domains is unable to determine domain availability, generally due to system maintenance at the domain name registry."
-          ],
-          "enum": [
-            "AVAILABILITY_UNSPECIFIED",
-            "AVAILABLE",
-            "UNAVAILABLE",
-            "UNSUPPORTED",
-            "UNKNOWN"
-          ],
-          "description": "Indicates whether the domain is available for registration. This value is accurate when obtained by calling `RetrieveRegisterParameters`, but is approximate when obtained by calling `SearchDomains`."
-        },
-        "yearlyPrice": {
-          "$ref": "Money",
-          "description": "Price to register or renew the domain for one year."
-        }
-      }
-    },
-    "Binding": {
-      "type": "object",
-      "id": "Binding",
-      "description": "Associates `members` with a `role`.",
-      "properties": {
-        "members": {
-          "type": "array",
-          "description": "Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. ",
-          "items": {
-            "type": "string"
-          }
-        },
-        "role": {
-          "type": "string",
-          "description": "Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`."
-        },
-        "condition": {
-          "$ref": "Expr",
-          "description": "The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)."
-        }
-      }
-    },
-    "CustomDns": {
-      "properties": {
-        "nameServers": {
-          "description": "Required. A list of name servers that store the DNS zone for this domain. Each name server is a domain name, with Unicode domain names expressed in Punycode format.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "dsRecords": {
-          "items": {
-            "$ref": "DsRecord"
-          },
-          "description": "The list of DS records for this domain, which are used to enable DNSSEC. The domain's DNS provider can provide the values to set here. If this field is empty, DNSSEC is disabled.",
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "id": "CustomDns",
-      "description": "Configuration for an arbitrary DNS provider."
-    },
-    "AuditLogConfig": {
-      "id": "AuditLogConfig",
-      "description": "Provides the configuration for logging a type of permissions. Example: { \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" } ] } This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting jose@example.com from DATA_READ logging.",
-      "type": "object",
-      "properties": {
-        "logType": {
-          "enum": [
-            "LOG_TYPE_UNSPECIFIED",
-            "ADMIN_READ",
-            "DATA_WRITE",
-            "DATA_READ"
-          ],
-          "description": "The log type that this config enables.",
-          "enumDescriptions": [
-            "Default case. Should never be this.",
-            "Admin reads. Example: CloudIAM getIamPolicy",
-            "Data writes. Example: CloudSQL Users create",
-            "Data reads. Example: CloudSQL Users list"
-          ],
-          "type": "string"
-        },
-        "exemptedMembers": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "Specifies the identities that do not cause logging for this type of permission. Follows the same format of Binding.members."
-        }
-      }
-    },
-    "RegisterDomainRequest": {
-      "id": "RegisterDomainRequest",
-      "properties": {
-        "validateOnly": {
-          "description": "When true, only validation will be performed, without actually registering the domain. Follows: https://cloud.google.com/apis/design/design_patterns#request_validation",
-          "type": "boolean"
-        },
-        "contactNotices": {
-          "type": "array",
-          "description": "The list of contact notices that the caller acknowledges. The notices required here depend on the values specified in `registration.contact_settings`.",
-          "items": {
-            "type": "string",
-            "enum": [
-              "CONTACT_NOTICE_UNSPECIFIED",
-              "PUBLIC_CONTACT_DATA_ACKNOWLEDGEMENT"
-            ],
-            "enumDescriptions": [
-              "The notice is undefined.",
-              "Required when setting the `privacy` field of `ContactSettings` to `PUBLIC_CONTACT_DATA`, which exposes contact data publicly."
-            ]
-          }
-        },
-        "domainNotices": {
-          "description": "The list of domain notices that you acknowledge. Call `RetrieveRegisterParameters` to see the notices that need acknowledgement.",
-          "items": {
-            "enumDescriptions": [
-              "The notice is undefined.",
-              "Indicates that the domain is preloaded on the HTTP Strict Transport Security list in browsers. Serving a website on such domain requires an SSL certificate. For details, see [how to get an SSL certificate](https://support.google.com/domains/answer/7638036)."
-            ],
-            "enum": [
-              "DOMAIN_NOTICE_UNSPECIFIED",
-              "HSTS_PRELOADED"
-            ],
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "registration": {
-          "$ref": "Registration",
-          "description": "Required. The complete `Registration` resource to be created."
-        },
-        "yearlyPrice": {
-          "$ref": "Money",
-          "description": "Required. Yearly price to register or renew the domain. The value that should be put here can be obtained from RetrieveRegisterParameters or SearchDomains calls."
-        }
-      },
-      "type": "object",
-      "description": "Request for the `RegisterDomain` method."
-    },
-    "Policy": {
-      "type": "object",
-      "properties": {
-        "etag": {
-          "type": "string",
-          "format": "byte",
-          "description": "`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost."
-        },
-        "auditConfigs": {
-          "description": "Specifies cloud audit logging configuration for this policy.",
-          "type": "array",
-          "items": {
-            "$ref": "AuditConfig"
-          }
-        },
-        "version": {
-          "type": "integer",
-          "description": "Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
-          "format": "int32"
-        },
-        "bindings": {
-          "type": "array",
-          "description": "Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.",
-          "items": {
-            "$ref": "Binding"
-          }
-        }
-      },
-      "id": "Policy",
-      "description": "An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { \"bindings\": [ { \"role\": \"roles/resourcemanager.organizationAdmin\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\" ] }, { \"role\": \"roles/resourcemanager.organizationViewer\", \"members\": [ \"user:eve@example.com\" ], \"condition\": { \"title\": \"expirable access\", \"description\": \"Does not grant access after Sep 2020\", \"expression\": \"request.time \u003c timestamp('2020-10-01T00:00:00.000Z')\", } } ], \"etag\": \"BwWWja0YfJA=\", \"version\": 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time \u003c timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/)."
-    },
-    "ResetAuthorizationCodeRequest": {
-      "id": "ResetAuthorizationCodeRequest",
-      "description": "Request for the `ResetAuthorizationCode` method.",
-      "properties": {},
-      "type": "object"
-    },
-    "OperationMetadata": {
-      "id": "OperationMetadata",
-      "type": "object",
-      "properties": {
-        "target": {
-          "description": "Server-defined resource path for the target of the operation.",
-          "type": "string"
-        },
-        "verb": {
-          "type": "string",
-          "description": "Name of the verb executed by the operation."
-        },
-        "apiVersion": {
-          "description": "API version used to start the operation.",
-          "type": "string"
-        },
-        "endTime": {
-          "description": "The time the operation finished running.",
-          "type": "string",
-          "format": "google-datetime"
-        },
-        "statusDetail": {
-          "type": "string",
-          "description": "Human-readable status of the operation, if any."
-        },
-        "createTime": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "The time the operation was created."
-        }
-      },
-      "description": "Represents the metadata of the long-running operation. Output only."
-    },
-    "ListLocationsResponse": {
-      "properties": {
-        "locations": {
-          "description": "A list of locations that matches the specified filter in the request.",
-          "items": {
-            "$ref": "Location"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "The standard List next-page token."
-        }
-      },
-      "description": "The response message for Locations.ListLocations.",
-      "id": "ListLocationsResponse",
-      "type": "object"
-    },
-    "GoogleDomainsDns": {
-      "description": "Configuration for using the free DNS zone provided by Google Domains as a `Registration`'s `dns_provider`. You cannot configure the DNS zone itself using the API. To configure the DNS zone, go to [Google Domains](https://domains.google/).",
-      "type": "object",
-      "id": "GoogleDomainsDns",
-      "properties": {
-        "dsRecords": {
-          "items": {
-            "$ref": "DsRecord"
-          },
-          "readOnly": true,
-          "description": "Output only. The list of DS records published for this domain. The list is automatically populated when `ds_state` is `DS_RECORDS_PUBLISHED`, otherwise it remains empty.",
-          "type": "array"
-        },
-        "dsState": {
-          "enum": [
-            "DS_STATE_UNSPECIFIED",
-            "DS_RECORDS_UNPUBLISHED",
-            "DS_RECORDS_PUBLISHED"
-          ],
-          "type": "string",
-          "description": "Required. The state of DS records for this domain. Used to enable or disable automatic DNSSEC.",
-          "enumDescriptions": [
-            "DS state is unspecified.",
-            "DNSSEC is disabled for this domain. No DS records for this domain are published in the parent DNS zone.",
-            "DNSSEC is enabled for this domain. Appropriate DS records for this domain are published in the parent DNS zone. This option is valid only if the DNS zone referenced in the `Registration`'s `dns_provider` field is already DNSSEC-signed."
-          ]
-        },
-        "nameServers": {
-          "items": {
-            "type": "string"
-          },
-          "description": "Output only. A list of name servers that store the DNS zone for this domain. Each name server is a domain name, with Unicode domain names expressed in Punycode format. This field is automatically populated with the name servers assigned to the Google Domains DNS zone.",
-          "readOnly": true,
-          "type": "array"
-        }
-      }
-    },
-    "SearchDomainsResponse": {
-      "properties": {
-        "registerParameters": {
-          "description": "Results of the domain name search.",
-          "type": "array",
-          "items": {
-            "$ref": "RegisterParameters"
-          }
-        }
-      },
-      "type": "object",
-      "id": "SearchDomainsResponse",
-      "description": "Response for the `SearchDomains` method."
-    },
-    "Expr": {
-      "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() \u003c 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.",
-      "properties": {
-        "title": {
-          "description": "Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.",
-          "type": "string"
-        },
-        "description": {
-          "description": "Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.",
-          "type": "string"
-        },
-        "location": {
-          "description": "Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.",
-          "type": "string"
-        },
-        "expression": {
-          "description": "Textual representation of an expression in Common Expression Language syntax.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "Expr"
-    },
-    "TestIamPermissionsResponse": {
-      "description": "Response message for `TestIamPermissions` method.",
-      "id": "TestIamPermissionsResponse",
-      "type": "object",
-      "properties": {
-        "permissions": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is allowed."
-        }
-      }
-    },
-    "Location": {
-      "id": "Location",
-      "properties": {
-        "locationId": {
-          "type": "string",
-          "description": "The canonical id for this location. For example: `\"us-east1\"`."
-        },
-        "name": {
-          "type": "string",
-          "description": "Resource name for the location, which may vary between implementations. For example: `\"projects/example-project/locations/us-east1\"`"
-        },
-        "displayName": {
-          "type": "string",
-          "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\"."
-        },
-        "metadata": {
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "type": "object",
-          "description": "Service-specific metadata. For example the available capacity at the given location."
-        },
-        "labels": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "type": "object",
-          "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}"
-        }
-      },
-      "description": "A resource that represents Google Cloud Platform location.",
-      "type": "object"
-    },
-    "SetIamPolicyRequest": {
-      "id": "SetIamPolicyRequest",
-      "type": "object",
-      "description": "Request message for `SetIamPolicy` method.",
-      "properties": {
-        "policy": {
-          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them.",
-          "$ref": "Policy"
-        },
-        "updateMask": {
-          "format": "google-fieldmask",
-          "description": "OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only the fields in the mask will be modified. If no mask is provided, the following default mask is used: `paths: \"bindings, etag\"`",
-          "type": "string"
-        }
-      }
-    },
-    "GlueRecord": {
-      "id": "GlueRecord",
-      "type": "object",
-      "properties": {
-        "ipv6Addresses": {
-          "description": "List of IPv6 addresses corresponding to this host in the standard hexadecimal format (e.g. `2001:db8::`). At least one of `ipv4_address` and `ipv6_address` must be set.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "ipv4Addresses": {
-          "type": "array",
-          "description": "List of IPv4 addresses corresponding to this host in the standard decimal format (e.g. `198.51.100.1`). At least one of `ipv4_address` and `ipv6_address` must be set.",
-          "items": {
-            "type": "string"
-          }
-        },
-        "hostName": {
-          "description": "Required. Domain name of the host in Punycode format.",
-          "type": "string"
-        }
-      },
-      "description": "Defines a host on your domain that is a DNS name server for your domain and/or other domains. Glue records are a way of making the IP address of a name server known, even when it serves DNS queries for its parent domain. For example, when `ns.example.com` is a name server for `example.com`, the host `ns.example.com` must have a glue record to break the circular DNS reference."
-    },
-    "Operation": {
-      "id": "Operation",
-      "type": "object",
-      "properties": {
-        "error": {
-          "$ref": "Status",
-          "description": "The error result of the operation in case of failure or cancellation."
-        },
-        "response": {
-          "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          }
-        },
-        "metadata": {
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
-          "type": "object"
-        },
-        "name": {
-          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
-          "type": "string"
-        },
-        "done": {
-          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
-          "type": "boolean"
-        }
-      },
-      "description": "This resource represents a long-running operation that is the result of a network API call."
-    },
-    "AuthorizationCode": {
-      "description": "Defines an authorization code.",
-      "properties": {
-        "code": {
-          "description": "The Authorization Code in ASCII. It can be used to transfer the domain to or from another registrar.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "AuthorizationCode"
-    },
-    "TestIamPermissionsRequest": {
-      "id": "TestIamPermissionsRequest",
-      "type": "object",
-      "properties": {
-        "permissions": {
-          "description": "The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or 'storage.*') are not allowed. For more information see [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "description": "Request message for `TestIamPermissions` method."
-    },
-    "Registration": {
-      "type": "object",
-      "description": "The `Registration` resource facilitates managing and configuring domain name registrations. To create a new `Registration` resource, find a suitable domain name by calling the `SearchDomains` method with a query to see available domain name options. After choosing a name, call `RetrieveRegisterParameters` to ensure availability and obtain information like pricing, which is needed to build a call to `RegisterDomain`. ",
-      "properties": {
-        "state": {
-          "description": "Output only. The state of the `Registration`",
-          "enumDescriptions": [
-            "The state is undefined.",
-            "The domain is being registered.",
-            "The domain registration failed. You can delete resources in this state to allow registration to be retried.",
-            "The domain is registered and operational. The domain renews automatically as long as it remains in this state.",
-            "The domain is suspended and inoperative. For more details, see the `issues` field.",
-            "The domain has been exported from Cloud Domains to [Google Domains](https://domains.google/). You can no longer update it with this API, and information shown about it may be stale. Without further action, domains in this state expire at their `expire_time`. You can delete the resource after the `expire_time` has passed."
-          ],
-          "type": "string",
-          "readOnly": true,
-          "enum": [
-            "STATE_UNSPECIFIED",
-            "REGISTRATION_PENDING",
-            "REGISTRATION_FAILED",
-            "ACTIVE",
-            "SUSPENDED",
-            "EXPORTED"
-          ]
-        },
-        "contactSettings": {
-          "description": "Required. Settings for contact information linked to the `Registration`. You cannot update these with the `UpdateRegistration` method. To update these settings, use the `ConfigureContactSettings` method.",
-          "$ref": "ContactSettings"
-        },
-        "dnsSettings": {
-          "$ref": "DnsSettings",
-          "description": "Settings controlling the DNS configuration of the `Registration`. You cannot update these with the `UpdateRegistration` method. To update these settings, use the `ConfigureDnsSettings` method."
-        },
-        "pendingContactSettings": {
-          "description": "Output only. Pending contact settings for the `Registration`. Updates to the `contact_settings` field that change its `registrant_contact` or `privacy` fields require email confirmation by the `registrant_contact` before taking effect. This field is set only if there are pending updates to the `contact_settings` that have not yet been confirmed. To confirm the changes, the `registrant_contact` must follow the instructions in the email they receive.",
-          "$ref": "ContactSettings",
-          "readOnly": true
-        },
-        "name": {
-          "type": "string",
-          "readOnly": true,
-          "description": "Output only. Name of the `Registration` resource, in the format `projects/*/locations/*/registrations/`."
-        },
-        "issues": {
-          "description": "Output only. The set of issues with the `Registration` that require attention.",
-          "type": "array",
-          "readOnly": true,
-          "items": {
-            "enum": [
-              "ISSUE_UNSPECIFIED",
-              "CONTACT_SUPPORT",
-              "UNVERIFIED_EMAIL"
-            ],
-            "enumDescriptions": [
-              "The issue is undefined.",
-              "Contact the Cloud Support team to resolve a problem with this domain.",
-              "[ICANN](https://icann.org/) requires verification of the email address in the `Registration`'s `contact_settings.registrant_contact` field. To verify the email address, follow the instructions in the email the `registrant_contact` receives following registration. If you do not complete email verification within 15 days of registration, the domain is suspended. To resend the verification email, call ConfigureContactSettings and provide the current `registrant_contact.email`."
-            ],
-            "type": "string"
-          }
-        },
-        "domainName": {
-          "description": "Required. Immutable. The domain name. Unicode domain names must be expressed in Punycode format.",
-          "type": "string"
-        },
-        "expireTime": {
-          "readOnly": true,
-          "format": "google-datetime",
-          "description": "Output only. The expiration timestamp of the `Registration`.",
-          "type": "string"
-        },
-        "labels": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Set of labels associated with the `Registration`."
-        },
-        "createTime": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "Output only. The creation timestamp of the `Registration` resource.",
-          "readOnly": true
-        },
-        "supportedPrivacy": {
-          "readOnly": true,
-          "type": "array",
-          "description": "Output only. Set of options for the `contact_settings.privacy` field that this `Registration` supports.",
-          "items": {
-            "type": "string",
-            "enumDescriptions": [
-              "The contact privacy settings are undefined.",
-              "All the data from `ContactSettings` is publicly available. When setting this option, you must also provide a `PUBLIC_CONTACT_DATA_ACKNOWLEDGEMENT` in the `contact_notices` field of the request.",
-              "None of the data from `ContactSettings` is publicly available. Instead, proxy contact data is published for your domain. Email sent to the proxy email address is forwarded to the registrant's email address. Cloud Domains provides this privacy proxy service at no additional cost.",
-              "Some data from `ContactSettings` is publicly available. The actual information redacted depends on the domain. For details, see [the registration privacy article](https://support.google.com/domains/answer/3251242)."
-            ],
-            "enum": [
-              "CONTACT_PRIVACY_UNSPECIFIED",
-              "PUBLIC_CONTACT_DATA",
-              "PRIVATE_CONTACT_DATA",
-              "REDACTED_CONTACT_DATA"
-            ]
-          }
-        },
-        "managementSettings": {
-          "$ref": "ManagementSettings",
-          "description": "Settings for management of the `Registration`, including renewal, billing, and transfer. You cannot update these with the `UpdateRegistration` method. To update these settings, use the `ConfigureManagementSettings` method."
-        }
-      },
-      "id": "Registration"
-    },
-    "ContactSettings": {
-      "description": "Defines the contact information associated with a `Registration`. [ICANN](https://icann.org/) requires all domain names to have associated contact information. The `registrant_contact` is considered the domain's legal owner, and often the other contacts are identical.",
-      "id": "ContactSettings",
-      "properties": {
-        "privacy": {
-          "description": "Required. Privacy setting for the contacts associated with the `Registration`.",
-          "type": "string",
-          "enumDescriptions": [
-            "The contact privacy settings are undefined.",
-            "All the data from `ContactSettings` is publicly available. When setting this option, you must also provide a `PUBLIC_CONTACT_DATA_ACKNOWLEDGEMENT` in the `contact_notices` field of the request.",
-            "None of the data from `ContactSettings` is publicly available. Instead, proxy contact data is published for your domain. Email sent to the proxy email address is forwarded to the registrant's email address. Cloud Domains provides this privacy proxy service at no additional cost.",
-            "Some data from `ContactSettings` is publicly available. The actual information redacted depends on the domain. For details, see [the registration privacy article](https://support.google.com/domains/answer/3251242)."
-          ],
-          "enum": [
-            "CONTACT_PRIVACY_UNSPECIFIED",
-            "PUBLIC_CONTACT_DATA",
-            "PRIVATE_CONTACT_DATA",
-            "REDACTED_CONTACT_DATA"
-          ]
-        },
-        "adminContact": {
-          "description": "Required. The administrative contact for the `Registration`.",
-          "$ref": "Contact"
-        },
-        "registrantContact": {
-          "description": "Required. The registrant contact for the `Registration`. *Caution: Anyone with access to this email address, phone number, and/or postal address can take control of the domain.* *Warning: For new `Registration`s, the registrant will receive an email confirmation that they must complete within 15 days to avoid domain suspension.*",
-          "$ref": "Contact"
-        },
-        "technicalContact": {
-          "$ref": "Contact",
-          "description": "Required. The technical contact for the `Registration`."
-        }
-      },
-      "type": "object"
-    },
-    "ConfigureManagementSettingsRequest": {
-      "properties": {
-        "updateMask": {
-          "type": "string",
-          "format": "google-fieldmask",
-          "description": "Required. The field mask describing which fields to update as a comma-separated list. For example, if only the transfer lock is being updated, the `update_mask` would be `\"transfer_lock_state\"`."
-        },
-        "managementSettings": {
-          "description": "Fields of the `ManagementSettings` to update.",
-          "$ref": "ManagementSettings"
-        }
-      },
-      "type": "object",
-      "id": "ConfigureManagementSettingsRequest",
-      "description": "Request for the `ConfigureManagementSettings` method."
-    },
-    "ConfigureContactSettingsRequest": {
-      "id": "ConfigureContactSettingsRequest",
-      "type": "object",
-      "properties": {
-        "contactNotices": {
-          "type": "array",
-          "items": {
-            "enum": [
-              "CONTACT_NOTICE_UNSPECIFIED",
-              "PUBLIC_CONTACT_DATA_ACKNOWLEDGEMENT"
-            ],
-            "enumDescriptions": [
-              "The notice is undefined.",
-              "Required when setting the `privacy` field of `ContactSettings` to `PUBLIC_CONTACT_DATA`, which exposes contact data publicly."
-            ],
-            "type": "string"
-          },
-          "description": "The list of contact notices that the caller acknowledges. The notices required here depend on the values specified in `contact_settings`."
-        },
-        "updateMask": {
-          "format": "google-fieldmask",
-          "description": "Required. The field mask describing which fields to update as a comma-separated list. For example, if only the registrant contact is being updated, the `update_mask` would be `\"registrant_contact\"`.",
-          "type": "string"
-        },
-        "contactSettings": {
-          "description": "Fields of the `ContactSettings` to update.",
-          "$ref": "ContactSettings"
-        },
-        "validateOnly": {
-          "description": "Validate the request without actually updating the contact settings.",
-          "type": "boolean"
-        }
-      },
-      "description": "Request for the `ConfigureContactSettings` method."
-    }
-  },
-  "canonicalName": "Cloud Domains",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "version": "v1beta1",
-  "basePath": "",
-  "ownerName": "Google",
-  "discoveryVersion": "v1",
-  "title": "Cloud Domains API",
-  "name": "domains",
-  "fullyEncodeReservedExpansion": true,
-  "documentationLink": "https://cloud.google.com/domains/"
-}
+    "servicePath": "",
+    "title": "Cloud Domains API",
+    "version": "v1beta1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/doubleclickbidmanager.v1.1.json b/googleapiclient/discovery_cache/documents/doubleclickbidmanager.v1.1.json
index 5e5fc9b..2383ee9 100644
--- a/googleapiclient/discovery_cache/documents/doubleclickbidmanager.v1.1.json
+++ b/googleapiclient/discovery_cache/documents/doubleclickbidmanager.v1.1.json
@@ -1,3810 +1,3840 @@
 {
-  "schemas": {
-    "ReportKey": {
-      "properties": {
-        "reportId": {
-          "format": "int64",
-          "description": "Report ID.",
-          "type": "string"
-        },
-        "queryId": {
-          "type": "string",
-          "description": "Query ID.",
-          "format": "int64"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/doubleclickbidmanager": {
+                    "description": "View and manage your reports in DoubleClick Bid Manager"
+                }
+            }
         }
-      },
-      "description": "Key used to identify a report.",
-      "id": "ReportKey",
-      "type": "object"
     },
-    "FilterPair": {
-      "id": "FilterPair",
-      "properties": {
-        "type": {
-          "enum": [
-            "FILTER_UNKNOWN",
-            "FILTER_DATE",
-            "FILTER_DAY_OF_WEEK",
-            "FILTER_WEEK",
-            "FILTER_MONTH",
-            "FILTER_YEAR",
-            "FILTER_TIME_OF_DAY",
-            "FILTER_CONVERSION_DELAY",
-            "FILTER_CREATIVE_ID",
-            "FILTER_CREATIVE_SIZE",
-            "FILTER_CREATIVE_TYPE",
-            "FILTER_EXCHANGE_ID",
-            "FILTER_AD_POSITION",
-            "FILTER_PUBLIC_INVENTORY",
-            "FILTER_INVENTORY_SOURCE",
-            "FILTER_CITY",
-            "FILTER_REGION",
-            "FILTER_DMA",
-            "FILTER_COUNTRY",
-            "FILTER_SITE_ID",
-            "FILTER_CHANNEL_ID",
-            "FILTER_PARTNER",
-            "FILTER_ADVERTISER",
-            "FILTER_INSERTION_ORDER",
-            "FILTER_LINE_ITEM",
-            "FILTER_PARTNER_CURRENCY",
-            "FILTER_ADVERTISER_CURRENCY",
-            "FILTER_ADVERTISER_TIMEZONE",
-            "FILTER_LINE_ITEM_TYPE",
-            "FILTER_USER_LIST",
-            "FILTER_USER_LIST_FIRST_PARTY",
-            "FILTER_USER_LIST_THIRD_PARTY",
-            "FILTER_TARGETED_USER_LIST",
-            "FILTER_DATA_PROVIDER",
-            "FILTER_ORDER_ID",
-            "FILTER_VIDEO_PLAYER_SIZE",
-            "FILTER_VIDEO_DURATION_SECONDS",
-            "FILTER_KEYWORD",
-            "FILTER_PAGE_CATEGORY",
-            "FILTER_CAMPAIGN_DAILY_FREQUENCY",
-            "FILTER_LINE_ITEM_DAILY_FREQUENCY",
-            "FILTER_LINE_ITEM_LIFETIME_FREQUENCY",
-            "FILTER_OS",
-            "FILTER_BROWSER",
-            "FILTER_CARRIER",
-            "FILTER_SITE_LANGUAGE",
-            "FILTER_INVENTORY_FORMAT",
-            "FILTER_ZIP_CODE",
-            "FILTER_VIDEO_RATING_TIER",
-            "FILTER_VIDEO_FORMAT_SUPPORT",
-            "FILTER_VIDEO_SKIPPABLE_SUPPORT",
-            "FILTER_VIDEO_VPAID_SUPPORT",
-            "FILTER_VIDEO_CREATIVE_DURATION",
-            "FILTER_PAGE_LAYOUT",
-            "FILTER_VIDEO_AD_POSITION_IN_STREAM",
-            "FILTER_AGE",
-            "FILTER_GENDER",
-            "FILTER_QUARTER",
-            "FILTER_TRUEVIEW_CONVERSION_TYPE",
-            "FILTER_MOBILE_GEO",
-            "FILTER_MRAID_SUPPORT",
-            "FILTER_ACTIVE_VIEW_EXPECTED_VIEWABILITY",
-            "FILTER_VIDEO_CREATIVE_DURATION_SKIPPABLE",
-            "FILTER_NIELSEN_COUNTRY_CODE",
-            "FILTER_NIELSEN_DEVICE_ID",
-            "FILTER_NIELSEN_GENDER",
-            "FILTER_NIELSEN_AGE",
-            "FILTER_INVENTORY_SOURCE_TYPE",
-            "FILTER_CREATIVE_WIDTH",
-            "FILTER_CREATIVE_HEIGHT",
-            "FILTER_DFP_ORDER_ID",
-            "FILTER_TRUEVIEW_AGE",
-            "FILTER_TRUEVIEW_GENDER",
-            "FILTER_TRUEVIEW_PARENTAL_STATUS",
-            "FILTER_TRUEVIEW_REMARKETING_LIST",
-            "FILTER_TRUEVIEW_INTEREST",
-            "FILTER_TRUEVIEW_AD_GROUP_ID",
-            "FILTER_TRUEVIEW_AD_GROUP_AD_ID",
-            "FILTER_TRUEVIEW_IAR_LANGUAGE",
-            "FILTER_TRUEVIEW_IAR_GENDER",
-            "FILTER_TRUEVIEW_IAR_AGE",
-            "FILTER_TRUEVIEW_IAR_CATEGORY",
-            "FILTER_TRUEVIEW_IAR_COUNTRY",
-            "FILTER_TRUEVIEW_IAR_CITY",
-            "FILTER_TRUEVIEW_IAR_REGION",
-            "FILTER_TRUEVIEW_IAR_ZIPCODE",
-            "FILTER_TRUEVIEW_IAR_REMARKETING_LIST",
-            "FILTER_TRUEVIEW_IAR_INTEREST",
-            "FILTER_TRUEVIEW_IAR_PARENTAL_STATUS",
-            "FILTER_TRUEVIEW_IAR_TIME_OF_DAY",
-            "FILTER_TRUEVIEW_CUSTOM_AFFINITY",
-            "FILTER_TRUEVIEW_CATEGORY",
-            "FILTER_TRUEVIEW_KEYWORD",
-            "FILTER_TRUEVIEW_PLACEMENT",
-            "FILTER_TRUEVIEW_URL",
-            "FILTER_TRUEVIEW_COUNTRY",
-            "FILTER_TRUEVIEW_REGION",
-            "FILTER_TRUEVIEW_CITY",
-            "FILTER_TRUEVIEW_DMA",
-            "FILTER_TRUEVIEW_ZIPCODE",
-            "FILTER_NOT_SUPPORTED",
-            "FILTER_MEDIA_PLAN",
-            "FILTER_TRUEVIEW_IAR_YOUTUBE_CHANNEL",
-            "FILTER_TRUEVIEW_IAR_YOUTUBE_VIDEO",
-            "FILTER_SKIPPABLE_SUPPORT",
-            "FILTER_COMPANION_CREATIVE_ID",
-            "FILTER_BUDGET_SEGMENT_DESCRIPTION",
-            "FILTER_FLOODLIGHT_ACTIVITY_ID",
-            "FILTER_DEVICE_MODEL",
-            "FILTER_DEVICE_MAKE",
-            "FILTER_DEVICE_TYPE",
-            "FILTER_CREATIVE_ATTRIBUTE",
-            "FILTER_INVENTORY_COMMITMENT_TYPE",
-            "FILTER_INVENTORY_RATE_TYPE",
-            "FILTER_INVENTORY_DELIVERY_METHOD",
-            "FILTER_INVENTORY_SOURCE_EXTERNAL_ID",
-            "FILTER_AUTHORIZED_SELLER_STATE",
-            "FILTER_VIDEO_DURATION_SECONDS_RANGE",
-            "FILTER_PARTNER_NAME",
-            "FILTER_PARTNER_STATUS",
-            "FILTER_ADVERTISER_NAME",
-            "FILTER_ADVERTISER_INTEGRATION_CODE",
-            "FILTER_ADVERTISER_INTEGRATION_STATUS",
-            "FILTER_CARRIER_NAME",
-            "FILTER_CHANNEL_NAME",
-            "FILTER_CITY_NAME",
-            "FILTER_COMPANION_CREATIVE_NAME",
-            "FILTER_USER_LIST_FIRST_PARTY_NAME",
-            "FILTER_USER_LIST_THIRD_PARTY_NAME",
-            "FILTER_NIELSEN_RESTATEMENT_DATE",
-            "FILTER_NIELSEN_DATE_RANGE",
-            "FILTER_INSERTION_ORDER_NAME",
-            "FILTER_REGION_NAME",
-            "FILTER_DMA_NAME",
-            "FILTER_TRUEVIEW_IAR_REGION_NAME",
-            "FILTER_TRUEVIEW_DMA_NAME",
-            "FILTER_TRUEVIEW_REGION_NAME",
-            "FILTER_ACTIVE_VIEW_CUSTOM_METRIC_ID",
-            "FILTER_ACTIVE_VIEW_CUSTOM_METRIC_NAME",
-            "FILTER_AD_TYPE",
-            "FILTER_ALGORITHM",
-            "FILTER_ALGORITHM_ID",
-            "FILTER_AMP_PAGE_REQUEST",
-            "FILTER_ANONYMOUS_INVENTORY_MODELING",
-            "FILTER_APP_URL",
-            "FILTER_APP_URL_EXCLUDED",
-            "FILTER_ATTRIBUTED_USERLIST",
-            "FILTER_ATTRIBUTED_USERLIST_COST",
-            "FILTER_ATTRIBUTED_USERLIST_TYPE",
-            "FILTER_ATTRIBUTION_MODEL",
-            "FILTER_AUDIENCE_LIST",
-            "FILTER_AUDIENCE_LIST_COST",
-            "FILTER_AUDIENCE_LIST_TYPE",
-            "FILTER_AUDIENCE_NAME",
-            "FILTER_AUDIENCE_TYPE",
-            "FILTER_BILLABLE_OUTCOME",
-            "FILTER_BRAND_LIFT_TYPE",
-            "FILTER_CHANNEL_TYPE",
-            "FILTER_CM_PLACEMENT_ID",
-            "FILTER_CONVERSION_SOURCE",
-            "FILTER_CONVERSION_SOURCE_ID",
-            "FILTER_COUNTRY_ID",
-            "FILTER_CREATIVE",
-            "FILTER_CREATIVE_ASSET",
-            "FILTER_CREATIVE_INTEGRATION_CODE",
-            "FILTER_CREATIVE_RENDERED_IN_AMP",
-            "FILTER_CREATIVE_SOURCE",
-            "FILTER_CREATIVE_STATUS",
-            "FILTER_DATA_PROVIDER_NAME",
-            "FILTER_DETAILED_DEMOGRAPHICS",
-            "FILTER_DETAILED_DEMOGRAPHICS_ID",
-            "FILTER_DEVICE",
-            "FILTER_GAM_INSERTION_ORDER",
-            "FILTER_GAM_LINE_ITEM",
-            "FILTER_GAM_LINE_ITEM_ID",
-            "FILTER_DIGITAL_CONTENT_LABEL",
-            "FILTER_DOMAIN",
-            "FILTER_ELIGIBLE_COOKIES_ON_FIRST_PARTY_AUDIENCE_LIST",
-            "FILTER_ELIGIBLE_COOKIES_ON_THIRD_PARTY_AUDIENCE_LIST_AND_INTEREST",
-            "FILTER_EXCHANGE",
-            "FILTER_EXCHANGE_CODE",
-            "FILTER_EXTENSION",
-            "FILTER_EXTENSION_STATUS",
-            "FILTER_EXTENSION_TYPE",
-            "FILTER_FIRST_PARTY_AUDIENCE_LIST_COST",
-            "FILTER_FIRST_PARTY_AUDIENCE_LIST_TYPE",
-            "FILTER_FLOODLIGHT_ACTIVITY",
-            "FILTER_FORMAT",
-            "FILTER_GMAIL_AGE",
-            "FILTER_GMAIL_CITY",
-            "FILTER_GMAIL_COUNTRY",
-            "FILTER_GMAIL_COUNTRY_NAME",
-            "FILTER_GMAIL_DEVICE_TYPE",
-            "FILTER_GMAIL_DEVICE_TYPE_NAME",
-            "FILTER_GMAIL_GENDER",
-            "FILTER_GMAIL_REGION",
-            "FILTER_GMAIL_REMARKETING_LIST",
-            "FILTER_HOUSEHOLD_INCOME",
-            "FILTER_IMPRESSION_COUNTING_METHOD",
-            "FILTER_YOUTUBE_PROGRAMMATIC_GUARANTEED_INSERTION_ORDER",
-            "FILTER_INSERTION_ORDER_INTEGRATION_CODE",
-            "FILTER_INSERTION_ORDER_STATUS",
-            "FILTER_INTEREST",
-            "FILTER_INVENTORY_SOURCE_GROUP",
-            "FILTER_INVENTORY_SOURCE_GROUP_ID",
-            "FILTER_INVENTORY_SOURCE_ID",
-            "FILTER_INVENTORY_SOURCE_NAME",
-            "FILTER_LIFE_EVENT",
-            "FILTER_LIFE_EVENTS",
-            "FILTER_LINE_ITEM_INTEGRATION_CODE",
-            "FILTER_LINE_ITEM_NAME",
-            "FILTER_LINE_ITEM_STATUS",
-            "FILTER_MATCH_RATIO",
-            "FILTER_MEASUREMENT_SOURCE",
-            "FILTER_MEDIA_PLAN_NAME",
-            "FILTER_PARENTAL_STATUS",
-            "FILTER_PLACEMENT_ALL_YOUTUBE_CHANNELS",
-            "FILTER_PLATFORM",
-            "FILTER_PLAYBACK_METHOD",
-            "FILTER_POSITION_IN_CONTENT",
-            "FILTER_PUBLISHER_PROPERTY",
-            "FILTER_PUBLISHER_PROPERTY_ID",
-            "FILTER_PUBLISHER_PROPERTY_SECTION",
-            "FILTER_PUBLISHER_PROPERTY_SECTION_ID",
-            "FILTER_REFUND_REASON",
-            "FILTER_REMARKETING_LIST",
-            "FILTER_REWARDED",
-            "FILTER_SENSITIVE_CATEGORY",
-            "FILTER_SERVED_PIXEL_DENSITY",
-            "FILTER_TARGETED_DATA_PROVIDERS",
-            "FILTER_THIRD_PARTY_AUDIENCE_LIST_COST",
-            "FILTER_THIRD_PARTY_AUDIENCE_LIST_TYPE",
-            "FILTER_TRUEVIEW_AD",
-            "FILTER_TRUEVIEW_AD_GROUP",
-            "FILTER_TRUEVIEW_DETAILED_DEMOGRAPHICS",
-            "FILTER_TRUEVIEW_DETAILED_DEMOGRAPHICS_ID",
-            "FILTER_TRUEVIEW_HOUSEHOLD_INCOME",
-            "FILTER_TRUEVIEW_IAR_COUNTRY_NAME",
-            "FILTER_TRUEVIEW_REMARKETING_LIST_NAME",
-            "FILTER_VARIANT_ID",
-            "FILTER_VARIANT_NAME",
-            "FILTER_VARIANT_VERSION",
-            "FILTER_VERIFICATION_VIDEO_PLAYER_SIZE",
-            "FILTER_VERIFICATION_VIDEO_POSITION",
-            "FILTER_VIDEO_COMPANION_CREATIVE_SIZE",
-            "FILTER_VIDEO_CONTINUOUS_PLAY",
-            "FILTER_VIDEO_DURATION",
-            "FILTER_YOUTUBE_ADAPTED_AUDIENCE_LIST",
-            "FILTER_YOUTUBE_AD_VIDEO",
-            "FILTER_YOUTUBE_AD_VIDEO_ID",
-            "FILTER_YOUTUBE_CHANNEL",
-            "FILTER_YOUTUBE_PROGRAMMATIC_GUARANTEED_ADVERTISER",
-            "FILTER_YOUTUBE_PROGRAMMATIC_GUARANTEED_PARTNER",
-            "FILTER_YOUTUBE_VIDEO",
-            "FILTER_ZIP_POSTAL_CODE",
-            "FILTER_PLACEMENT_NAME_ALL_YOUTUBE_CHANNELS",
-            "FILTER_TRUEVIEW_PLACEMENT_ID",
-            "FILTER_PATH_PATTERN_ID",
-            "FILTER_PATH_EVENT_INDEX",
-            "FILTER_EVENT_TYPE",
-            "FILTER_CHANNEL_GROUPING",
-            "FILTER_OM_SDK_AVAILABLE",
-            "FILTER_DATA_SOURCE"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "description": "Filter type.",
-          "type": "string"
-        },
-        "value": {
-          "type": "string",
-          "description": "Filter value."
-        }
-      },
-      "description": "Filter used to match traffic data in your report.",
-      "type": "object"
+    "basePath": "/doubleclickbidmanager/v1.1/",
+    "baseUrl": "https://doubleclickbidmanager.googleapis.com/doubleclickbidmanager/v1.1/",
+    "batchPath": "batch",
+    "canonicalName": "DoubleClick Bid Manager",
+    "description": "DoubleClick Bid Manager API allows users to manage and create campaigns and reports.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://developers.google.com/bid-manager/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
     },
-    "ChannelGrouping": {
-      "id": "ChannelGrouping",
-      "type": "object",
-      "properties": {
-        "rules": {
-          "description": "Rules within Channel Grouping. There is a limit of 100 rules that can be set per channel grouping.",
-          "items": {
-            "$ref": "Rule"
-          },
-          "type": "array"
+    "id": "doubleclickbidmanager:v1.1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://doubleclickbidmanager.mtls.googleapis.com/",
+    "name": "doubleclickbidmanager",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "fallbackName": {
-          "type": "string",
-          "description": "The name to apply to an event that does not match any of the rules in the channel grouping."
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
         },
-        "name": {
-          "description": "Channel Grouping name.",
-          "type": "string"
-        }
-      },
-      "description": "A channel grouping defines a set of rules that can be used to categorize events in a path report."
-    },
-    "Report": {
-      "description": "Represents a report.",
-      "id": "Report",
-      "type": "object",
-      "properties": {
-        "metadata": {
-          "$ref": "ReportMetadata",
-          "description": "Report metadata."
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
         },
         "key": {
-          "description": "Key used to identify a report.",
-          "$ref": "ReportKey"
-        },
-        "params": {
-          "description": "Report parameters.",
-          "$ref": "Parameters"
-        }
-      }
-    },
-    "RowStatus": {
-      "description": "Represents the upload status of a row in the request.",
-      "type": "object",
-      "properties": {
-        "errors": {
-          "items": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
             "type": "string"
-          },
-          "type": "array",
-          "description": "Reasons why the entity can't be uploaded."
         },
-        "persisted": {
-          "type": "boolean",
-          "description": "Whether the entity is persisted."
-        },
-        "changed": {
-          "type": "boolean",
-          "description": "Whether the stored entity is changed as a result of upload."
-        },
-        "rowNumber": {
-          "description": "Row number.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "entityId": {
-          "format": "int64",
-          "description": "Entity Id.",
-          "type": "string"
-        },
-        "entityName": {
-          "type": "string",
-          "description": "Entity name."
-        }
-      },
-      "id": "RowStatus"
-    },
-    "PathQueryOptions": {
-      "description": "Path Query Options for Report Options.",
-      "id": "PathQueryOptions",
-      "properties": {
-        "pathFilters": {
-          "description": "Path Filters. There is a limit of 100 path filters that can be set per report.",
-          "type": "array",
-          "items": {
-            "$ref": "PathFilter"
-          }
-        },
-        "channelGrouping": {
-          "description": "Custom Channel Groupings.",
-          "$ref": "ChannelGrouping"
-        }
-      },
-      "type": "object"
-    },
-    "Options": {
-      "description": "Additional query options.",
-      "properties": {
-        "pathQueryOptions": {
-          "$ref": "PathQueryOptions",
-          "description": "Options that contain Path Filters and Custom Channel Groupings."
-        },
-        "includeOnlyTargetedUserLists": {
-          "type": "boolean",
-          "description": "Set to true and filter your report by `FILTER_INSERTION_ORDER` or `FILTER_LINE_ITEM` to include data for audience lists specifically targeted by those items."
-        }
-      },
-      "id": "Options",
-      "type": "object"
-    },
-    "QueryMetadata": {
-      "properties": {
-        "googleCloudStoragePathForLatestReport": {
-          "description": "The path to the location in Google Cloud Storage where the latest report is stored.",
-          "type": "string"
-        },
-        "shareEmailAddress": {
-          "type": "array",
-          "description": "List of email addresses which are sent email notifications when the report is finished. Separate from sendNotification.",
-          "items": {
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
             "type": "string"
-          }
         },
-        "locale": {
-          "type": "string",
-          "description": "Locale of the generated reports. Valid values are cs CZECH de GERMAN en ENGLISH es SPANISH fr FRENCH it ITALIAN ja JAPANESE ko KOREAN pl POLISH pt-BR BRAZILIAN_PORTUGUESE ru RUSSIAN tr TURKISH uk UKRAINIAN zh-CN CHINA_CHINESE zh-TW TAIWAN_CHINESE An locale string not in the list above will generate reports in English."
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
         },
-        "running": {
-          "description": "Whether the latest report is currently running.",
-          "type": "boolean"
-        },
-        "latestReportRunTimeMs": {
-          "description": "The time when the latest report started to run.",
-          "type": "string",
-          "format": "int64"
-        },
-        "dataRange": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "CUSTOM_DATES",
-            "CURRENT_DAY",
-            "PREVIOUS_DAY",
-            "WEEK_TO_DATE",
-            "MONTH_TO_DATE",
-            "QUARTER_TO_DATE",
-            "YEAR_TO_DATE",
-            "PREVIOUS_WEEK",
-            "PREVIOUS_HALF_MONTH",
-            "PREVIOUS_MONTH",
-            "PREVIOUS_QUARTER",
-            "PREVIOUS_YEAR",
-            "LAST_7_DAYS",
-            "LAST_30_DAYS",
-            "LAST_90_DAYS",
-            "LAST_365_DAYS",
-            "ALL_TIME",
-            "LAST_14_DAYS",
-            "TYPE_NOT_SUPPORTED",
-            "LAST_60_DAYS"
-          ],
-          "description": "Range of report data.",
-          "type": "string"
-        },
-        "googleDrivePathForLatestReport": {
-          "type": "string",
-          "description": "The path in Google Drive for the latest report."
-        },
-        "title": {
-          "description": "Query title. It is used to name the reports generated from this query.",
-          "type": "string"
-        },
-        "reportCount": {
-          "description": "Number of reports that have been generated for the query.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "format": {
-          "enum": [
-            "CSV",
-            "EXCEL_CSV",
-            "XLSX"
-          ],
-          "description": "Format of the generated report.",
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ]
-        },
-        "sendNotification": {
-          "type": "boolean",
-          "description": "Whether to send an email notification when a report is ready. Default to false."
-        }
-      },
-      "type": "object",
-      "id": "QueryMetadata",
-      "description": "Query metadata."
-    },
-    "Rule": {
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Rule name."
-        },
-        "disjunctiveMatchStatements": {
-          "items": {
-            "$ref": "DisjunctiveMatchStatement"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "description": "A Rule defines a name, and a boolean expression in [conjunctive normal form](http: //mathworld.wolfram.com/ConjunctiveNormalForm.html){.external} that can be // applied to a path event to determine if that name should be applied.",
-      "id": "Rule"
-    },
-    "DownloadLineItemsRequest": {
-      "description": "Request to fetch stored line items.",
-      "properties": {
-        "format": {
-          "enum": [
-            "CSV"
-          ],
-          "description": "Format in which the line items will be returned. Default to CSV.",
-          "type": "string",
-          "enumDescriptions": [
-            ""
-          ]
-        },
-        "fileSpec": {
-          "type": "string",
-          "enum": [
-            "EWF"
-          ],
-          "enumDescriptions": [
-            ""
-          ],
-          "description": "File specification (column names, types, order) in which the line items will be returned. Default to EWF."
-        },
-        "filterType": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "ADVERTISER_ID",
-            "INSERTION_ORDER_ID",
-            "LINE_ITEM_ID"
-          ],
-          "description": "Filter type used to filter line items to fetch."
-        },
-        "filterIds": {
-          "items": {
-            "format": "int64",
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
             "type": "string"
-          },
-          "type": "array",
-          "description": "Ids of the specified filter type used to filter line items to fetch. If omitted, all the line items will be returned."
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      },
-      "id": "DownloadLineItemsRequest",
-      "type": "object"
     },
-    "UploadLineItemsRequest": {
-      "description": "Request to upload line items.",
-      "id": "UploadLineItemsRequest",
-      "properties": {
-        "format": {
-          "enumDescriptions": [
-            ""
-          ],
-          "type": "string",
-          "enum": [
-            "CSV"
-          ],
-          "description": "Format the line items are in. Default to CSV."
-        },
-        "dryRun": {
-          "description": "Set to true to get upload status without actually persisting the line items.",
-          "type": "boolean"
-        },
-        "lineItems": {
-          "type": "string",
-          "description": "Line items in CSV to upload. Refer to Entity Write File Format for more information on file format."
-        }
-      },
-      "type": "object"
-    },
-    "UploadLineItemsResponse": {
-      "description": "Upload line items response.",
-      "properties": {
-        "uploadStatus": {
-          "$ref": "UploadStatus",
-          "description": "Status of upload."
-        }
-      },
-      "id": "UploadLineItemsResponse",
-      "type": "object"
-    },
-    "ReportStatus": {
-      "description": "Report status.",
-      "properties": {
-        "finishTimeMs": {
-          "type": "string",
-          "format": "int64",
-          "description": "The time when this report either completed successfully or failed."
-        },
-        "format": {
-          "type": "string",
-          "enum": [
-            "CSV",
-            "EXCEL_CSV",
-            "XLSX"
-          ],
-          "description": "The file type of the report.",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ]
-        },
-        "state": {
-          "type": "string",
-          "description": "The state of the report.",
-          "enum": [
-            "RUNNING",
-            "DONE",
-            "FAILED"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ]
-        },
-        "failure": {
-          "$ref": "ReportFailure",
-          "description": "If the report failed, this records the cause."
-        }
-      },
-      "type": "object",
-      "id": "ReportStatus"
-    },
-    "ListReportsResponse": {
-      "description": "List reports response.",
-      "type": "object",
-      "id": "ListReportsResponse",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"doubleclickbidmanager#listReportsResponse\".",
-          "type": "string"
-        },
-        "reports": {
-          "description": "Retrieved reports.",
-          "type": "array",
-          "items": {
-            "$ref": "Report"
-          }
-        },
-        "nextPageToken": {
-          "description": "Next page's pagination token if one exists.",
-          "type": "string"
-        }
-      }
-    },
-    "ReportFailure": {
-      "id": "ReportFailure",
-      "type": "object",
-      "description": "An explanation of a report failure.",
-      "properties": {
-        "errorCode": {
-          "enum": [
-            "AUTHENTICATION_ERROR",
-            "UNAUTHORIZED_API_ACCESS",
-            "SERVER_ERROR",
-            "VALIDATION_ERROR",
-            "REPORTING_FATAL_ERROR",
-            "REPORTING_TRANSIENT_ERROR",
-            "REPORTING_IMCOMPATIBLE_METRICS",
-            "REPORTING_ILLEGAL_FILENAME",
-            "REPORTING_QUERY_NOT_FOUND",
-            "REPORTING_BUCKET_NOT_FOUND",
-            "REPORTING_CREATE_BUCKET_FAILED",
-            "REPORTING_DELETE_BUCKET_FAILED",
-            "REPORTING_UPDATE_BUCKET_PERMISSION_FAILED",
-            "REPORTING_WRITE_BUCKET_OBJECT_FAILED",
-            "DEPRECATED_REPORTING_INVALID_QUERY",
-            "REPORTING_INVALID_QUERY_TOO_MANY_UNFILTERED_LARGE_GROUP_BYS",
-            "REPORTING_INVALID_QUERY_TITLE_MISSING",
-            "REPORTING_INVALID_QUERY_MISSING_PARTNER_AND_ADVERTISER_FILTERS"
-          ],
-          "description": "Error code that shows why the report was not created.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string"
-        }
-      }
-    },
-    "Query": {
-      "id": "Query",
-      "properties": {
-        "queryId": {
-          "type": "string",
-          "format": "int64",
-          "description": "Query ID."
-        },
-        "metadata": {
-          "description": "Query metadata.",
-          "$ref": "QueryMetadata"
-        },
-        "timezoneCode": {
-          "type": "string",
-          "description": "Canonical timezone code for report data time. Defaults to America/New_York."
-        },
-        "reportDataEndTimeMs": {
-          "format": "int64",
-          "type": "string",
-          "description": "The ending time for the data that is shown in the report. Note, reportDataEndTimeMs is required if metadata.dataRange is CUSTOM_DATES and ignored otherwise."
-        },
-        "reportDataStartTimeMs": {
-          "description": "The starting time for the data that is shown in the report. Note, reportDataStartTimeMs is required if metadata.dataRange is CUSTOM_DATES and ignored otherwise.",
-          "format": "int64",
-          "type": "string"
-        },
-        "params": {
-          "$ref": "Parameters",
-          "description": "Query parameters."
-        },
-        "schedule": {
-          "$ref": "QuerySchedule",
-          "description": "Information on how often and when to run a query."
-        },
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"doubleclickbidmanager#query\".",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Represents a query."
-    },
-    "DownloadRequest": {
-      "type": "object",
-      "properties": {
-        "fileTypes": {
-          "description": "File types that will be returned. If INVENTORY_SOURCE is requested, no other file types may be requested. Acceptable values are: - \"AD\" - \"AD_GROUP\" - \"CAMPAIGN\" - \"INSERTION_ORDER\" - \"INVENTORY_SOURCE\" - \"LINE_ITEM\" ",
-          "type": "array",
-          "items": {
-            "type": "string",
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ],
-            "enum": [
-              "INSERTION_ORDER",
-              "LINE_ITEM",
-              "AD_GROUP",
-              "AD",
-              "CAMPAIGN",
-              "INVENTORY_SOURCE"
-            ]
-          }
-        },
-        "filterIds": {
-          "items": {
-            "type": "string",
-            "format": "int64"
-          },
-          "type": "array",
-          "description": "The IDs of the specified filter type. This is used to filter entities to fetch. At least one ID must be specified."
-        },
-        "filterType": {
-          "type": "string",
-          "description": "Filter type used to filter entities to fetch. PARTNER_ID and INVENTORY_SOURCE_ID may only be used when downloading inventory sources.",
-          "enum": [
-            "ADVERTISER_ID",
-            "INSERTION_ORDER_ID",
-            "LINE_ITEM_ID",
-            "CAMPAIGN_ID",
-            "INVENTORY_SOURCE_ID",
-            "PARTNER_ID"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "version": {
-          "description": "SDF Version (column names, types, order) in which the entities will be returned. Default to 5.",
-          "type": "string"
-        }
-      },
-      "id": "DownloadRequest",
-      "description": "Request to fetch stored inventory sources, campaigns, insertion orders, line items, YouTube ad groups and ads."
-    },
-    "PathFilter": {
-      "id": "PathFilter",
-      "properties": {
-        "eventFilters": {
-          "items": {
-            "$ref": "EventFilter"
-          },
-          "type": "array",
-          "description": "Filter on an event to be applied to some part of the path."
-        },
-        "pathMatchPosition": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "description": "Indicates the position of the path the filter should match to (first, last, or any event in path).",
-          "enum": [
-            "ANY",
-            "FIRST",
-            "LAST"
-          ]
-        }
-      },
-      "description": "Path filters specify which paths to include in a report. A path is the result of combining DV360 events based on User ID to create a workflow of users' actions. When a path filter is set, the resulting report will only include paths that match the specified event at the specified position. All other paths will be excluded.",
-      "type": "object"
-    },
-    "DownloadLineItemsResponse": {
-      "properties": {
-        "lineItems": {
-          "description": "Retrieved line items in CSV format. For more information about file formats, see Entity Write File Format.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Download line items response.",
-      "id": "DownloadLineItemsResponse"
-    },
-    "DownloadResponse": {
-      "properties": {
-        "lineItems": {
-          "type": "string",
-          "description": "Retrieved line items in SDF format."
-        },
-        "adGroups": {
-          "type": "string",
-          "description": "Retrieved ad groups in SDF format."
-        },
-        "inventorySources": {
-          "type": "string"
-        },
-        "campaigns": {
-          "type": "string",
-          "description": "Retrieved campaigns in SDF format."
-        },
-        "insertionOrders": {
-          "type": "string",
-          "description": "Retrieved insertion orders in SDF format."
-        },
-        "ads": {
-          "type": "string",
-          "description": "Retrieved ads in SDF format."
-        }
-      },
-      "id": "DownloadResponse",
-      "type": "object",
-      "description": "Download response."
-    },
-    "DisjunctiveMatchStatement": {
-      "properties": {
-        "eventFilters": {
-          "items": {
-            "$ref": "EventFilter"
-          },
-          "description": "Filters. There is a limit of 100 filters that can be set per disjunctive match statement.",
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "description": "DisjunctiveMatchStatement that OR's all contained filters.",
-      "id": "DisjunctiveMatchStatement"
-    },
-    "ListQueriesResponse": {
-      "description": "List queries response.",
-      "id": "ListQueriesResponse",
-      "type": "object",
-      "properties": {
-        "kind": {
-          "description": "Identifies what kind of resource this is. Value: the fixed string \"doubleclickbidmanager#listQueriesResponse\".",
-          "type": "string"
+    "protocol": "rest",
+    "resources": {
+        "lineitems": {
+            "methods": {
+                "downloadlineitems": {
+                    "description": "Retrieves line items in CSV format. YouTube & partners line items are not supported.",
+                    "flatPath": "lineitems/downloadlineitems",
+                    "httpMethod": "POST",
+                    "id": "doubleclickbidmanager.lineitems.downloadlineitems",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "lineitems/downloadlineitems",
+                    "request": {
+                        "$ref": "DownloadLineItemsRequest"
+                    },
+                    "response": {
+                        "$ref": "DownloadLineItemsResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/doubleclickbidmanager"
+                    ]
+                },
+                "uploadlineitems": {
+                    "description": "Uploads line items in CSV format. YouTube & partners line items are not supported.",
+                    "flatPath": "lineitems/uploadlineitems",
+                    "httpMethod": "POST",
+                    "id": "doubleclickbidmanager.lineitems.uploadlineitems",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "lineitems/uploadlineitems",
+                    "request": {
+                        "$ref": "UploadLineItemsRequest"
+                    },
+                    "response": {
+                        "$ref": "UploadLineItemsResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/doubleclickbidmanager"
+                    ]
+                }
+            }
         },
         "queries": {
-          "items": {
-            "$ref": "Query"
-          },
-          "type": "array",
-          "description": "Retrieved queries."
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Next page's pagination token if one exists."
-        }
-      }
-    },
-    "RunQueryRequest": {
-      "type": "object",
-      "description": "Request to run a stored query to generate a report.",
-      "id": "RunQueryRequest",
-      "properties": {
-        "dataRange": {
-          "enum": [
-            "CUSTOM_DATES",
-            "CURRENT_DAY",
-            "PREVIOUS_DAY",
-            "WEEK_TO_DATE",
-            "MONTH_TO_DATE",
-            "QUARTER_TO_DATE",
-            "YEAR_TO_DATE",
-            "PREVIOUS_WEEK",
-            "PREVIOUS_HALF_MONTH",
-            "PREVIOUS_MONTH",
-            "PREVIOUS_QUARTER",
-            "PREVIOUS_YEAR",
-            "LAST_7_DAYS",
-            "LAST_30_DAYS",
-            "LAST_90_DAYS",
-            "LAST_365_DAYS",
-            "ALL_TIME",
-            "LAST_14_DAYS",
-            "TYPE_NOT_SUPPORTED",
-            "LAST_60_DAYS"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "Report data range used to generate the report."
-        },
-        "timezoneCode": {
-          "description": "Canonical timezone code for report data time. Defaults to America/New_York.",
-          "type": "string"
-        },
-        "reportDataStartTimeMs": {
-          "type": "string",
-          "description": "The starting time for the data that is shown in the report. Note, reportDataStartTimeMs is required if dataRange is CUSTOM_DATES and ignored otherwise.",
-          "format": "int64"
-        },
-        "reportDataEndTimeMs": {
-          "type": "string",
-          "description": "The ending time for the data that is shown in the report. Note, reportDataEndTimeMs is required if dataRange is CUSTOM_DATES and ignored otherwise.",
-          "format": "int64"
-        }
-      }
-    },
-    "EventFilter": {
-      "description": "Defines the type of filter to be applied to the path, a DV360 event dimension filter.",
-      "type": "object",
-      "id": "EventFilter",
-      "properties": {
-        "dimensionFilter": {
-          "description": "Filter on a dimension.",
-          "$ref": "PathQueryOptionsFilter"
-        }
-      }
-    },
-    "QuerySchedule": {
-      "id": "QuerySchedule",
-      "properties": {
-        "endTimeMs": {
-          "type": "string",
-          "format": "int64",
-          "description": "Datetime to periodically run the query until."
-        },
-        "frequency": {
-          "enum": [
-            "ONE_TIME",
-            "DAILY",
-            "WEEKLY",
-            "SEMI_MONTHLY",
-            "MONTHLY",
-            "QUARTERLY"
-          ],
-          "type": "string",
-          "description": "How often the query is run.",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ]
-        },
-        "nextRunTimezoneCode": {
-          "description": "Canonical timezone code for report generation time. Defaults to America/New_York.",
-          "type": "string"
-        },
-        "startTimeMs": {
-          "type": "string",
-          "format": "int64",
-          "description": "When to start running the query. Not applicable to `ONE_TIME` frequency."
-        },
-        "nextRunMinuteOfDay": {
-          "description": "Time of day at which a new report will be generated, represented as minutes past midnight. Range is 0 to 1439. Only applies to scheduled reports.",
-          "type": "integer",
-          "format": "int32"
-        }
-      },
-      "type": "object",
-      "description": "Information on how frequently and when to run a query."
-    },
-    "Parameters": {
-      "properties": {
-        "groupBys": {
-          "description": "Data is grouped by the filters listed in this field.",
-          "type": "array",
-          "items": {
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ],
-            "type": "string",
-            "enum": [
-              "FILTER_UNKNOWN",
-              "FILTER_DATE",
-              "FILTER_DAY_OF_WEEK",
-              "FILTER_WEEK",
-              "FILTER_MONTH",
-              "FILTER_YEAR",
-              "FILTER_TIME_OF_DAY",
-              "FILTER_CONVERSION_DELAY",
-              "FILTER_CREATIVE_ID",
-              "FILTER_CREATIVE_SIZE",
-              "FILTER_CREATIVE_TYPE",
-              "FILTER_EXCHANGE_ID",
-              "FILTER_AD_POSITION",
-              "FILTER_PUBLIC_INVENTORY",
-              "FILTER_INVENTORY_SOURCE",
-              "FILTER_CITY",
-              "FILTER_REGION",
-              "FILTER_DMA",
-              "FILTER_COUNTRY",
-              "FILTER_SITE_ID",
-              "FILTER_CHANNEL_ID",
-              "FILTER_PARTNER",
-              "FILTER_ADVERTISER",
-              "FILTER_INSERTION_ORDER",
-              "FILTER_LINE_ITEM",
-              "FILTER_PARTNER_CURRENCY",
-              "FILTER_ADVERTISER_CURRENCY",
-              "FILTER_ADVERTISER_TIMEZONE",
-              "FILTER_LINE_ITEM_TYPE",
-              "FILTER_USER_LIST",
-              "FILTER_USER_LIST_FIRST_PARTY",
-              "FILTER_USER_LIST_THIRD_PARTY",
-              "FILTER_TARGETED_USER_LIST",
-              "FILTER_DATA_PROVIDER",
-              "FILTER_ORDER_ID",
-              "FILTER_VIDEO_PLAYER_SIZE",
-              "FILTER_VIDEO_DURATION_SECONDS",
-              "FILTER_KEYWORD",
-              "FILTER_PAGE_CATEGORY",
-              "FILTER_CAMPAIGN_DAILY_FREQUENCY",
-              "FILTER_LINE_ITEM_DAILY_FREQUENCY",
-              "FILTER_LINE_ITEM_LIFETIME_FREQUENCY",
-              "FILTER_OS",
-              "FILTER_BROWSER",
-              "FILTER_CARRIER",
-              "FILTER_SITE_LANGUAGE",
-              "FILTER_INVENTORY_FORMAT",
-              "FILTER_ZIP_CODE",
-              "FILTER_VIDEO_RATING_TIER",
-              "FILTER_VIDEO_FORMAT_SUPPORT",
-              "FILTER_VIDEO_SKIPPABLE_SUPPORT",
-              "FILTER_VIDEO_VPAID_SUPPORT",
-              "FILTER_VIDEO_CREATIVE_DURATION",
-              "FILTER_PAGE_LAYOUT",
-              "FILTER_VIDEO_AD_POSITION_IN_STREAM",
-              "FILTER_AGE",
-              "FILTER_GENDER",
-              "FILTER_QUARTER",
-              "FILTER_TRUEVIEW_CONVERSION_TYPE",
-              "FILTER_MOBILE_GEO",
-              "FILTER_MRAID_SUPPORT",
-              "FILTER_ACTIVE_VIEW_EXPECTED_VIEWABILITY",
-              "FILTER_VIDEO_CREATIVE_DURATION_SKIPPABLE",
-              "FILTER_NIELSEN_COUNTRY_CODE",
-              "FILTER_NIELSEN_DEVICE_ID",
-              "FILTER_NIELSEN_GENDER",
-              "FILTER_NIELSEN_AGE",
-              "FILTER_INVENTORY_SOURCE_TYPE",
-              "FILTER_CREATIVE_WIDTH",
-              "FILTER_CREATIVE_HEIGHT",
-              "FILTER_DFP_ORDER_ID",
-              "FILTER_TRUEVIEW_AGE",
-              "FILTER_TRUEVIEW_GENDER",
-              "FILTER_TRUEVIEW_PARENTAL_STATUS",
-              "FILTER_TRUEVIEW_REMARKETING_LIST",
-              "FILTER_TRUEVIEW_INTEREST",
-              "FILTER_TRUEVIEW_AD_GROUP_ID",
-              "FILTER_TRUEVIEW_AD_GROUP_AD_ID",
-              "FILTER_TRUEVIEW_IAR_LANGUAGE",
-              "FILTER_TRUEVIEW_IAR_GENDER",
-              "FILTER_TRUEVIEW_IAR_AGE",
-              "FILTER_TRUEVIEW_IAR_CATEGORY",
-              "FILTER_TRUEVIEW_IAR_COUNTRY",
-              "FILTER_TRUEVIEW_IAR_CITY",
-              "FILTER_TRUEVIEW_IAR_REGION",
-              "FILTER_TRUEVIEW_IAR_ZIPCODE",
-              "FILTER_TRUEVIEW_IAR_REMARKETING_LIST",
-              "FILTER_TRUEVIEW_IAR_INTEREST",
-              "FILTER_TRUEVIEW_IAR_PARENTAL_STATUS",
-              "FILTER_TRUEVIEW_IAR_TIME_OF_DAY",
-              "FILTER_TRUEVIEW_CUSTOM_AFFINITY",
-              "FILTER_TRUEVIEW_CATEGORY",
-              "FILTER_TRUEVIEW_KEYWORD",
-              "FILTER_TRUEVIEW_PLACEMENT",
-              "FILTER_TRUEVIEW_URL",
-              "FILTER_TRUEVIEW_COUNTRY",
-              "FILTER_TRUEVIEW_REGION",
-              "FILTER_TRUEVIEW_CITY",
-              "FILTER_TRUEVIEW_DMA",
-              "FILTER_TRUEVIEW_ZIPCODE",
-              "FILTER_NOT_SUPPORTED",
-              "FILTER_MEDIA_PLAN",
-              "FILTER_TRUEVIEW_IAR_YOUTUBE_CHANNEL",
-              "FILTER_TRUEVIEW_IAR_YOUTUBE_VIDEO",
-              "FILTER_SKIPPABLE_SUPPORT",
-              "FILTER_COMPANION_CREATIVE_ID",
-              "FILTER_BUDGET_SEGMENT_DESCRIPTION",
-              "FILTER_FLOODLIGHT_ACTIVITY_ID",
-              "FILTER_DEVICE_MODEL",
-              "FILTER_DEVICE_MAKE",
-              "FILTER_DEVICE_TYPE",
-              "FILTER_CREATIVE_ATTRIBUTE",
-              "FILTER_INVENTORY_COMMITMENT_TYPE",
-              "FILTER_INVENTORY_RATE_TYPE",
-              "FILTER_INVENTORY_DELIVERY_METHOD",
-              "FILTER_INVENTORY_SOURCE_EXTERNAL_ID",
-              "FILTER_AUTHORIZED_SELLER_STATE",
-              "FILTER_VIDEO_DURATION_SECONDS_RANGE",
-              "FILTER_PARTNER_NAME",
-              "FILTER_PARTNER_STATUS",
-              "FILTER_ADVERTISER_NAME",
-              "FILTER_ADVERTISER_INTEGRATION_CODE",
-              "FILTER_ADVERTISER_INTEGRATION_STATUS",
-              "FILTER_CARRIER_NAME",
-              "FILTER_CHANNEL_NAME",
-              "FILTER_CITY_NAME",
-              "FILTER_COMPANION_CREATIVE_NAME",
-              "FILTER_USER_LIST_FIRST_PARTY_NAME",
-              "FILTER_USER_LIST_THIRD_PARTY_NAME",
-              "FILTER_NIELSEN_RESTATEMENT_DATE",
-              "FILTER_NIELSEN_DATE_RANGE",
-              "FILTER_INSERTION_ORDER_NAME",
-              "FILTER_REGION_NAME",
-              "FILTER_DMA_NAME",
-              "FILTER_TRUEVIEW_IAR_REGION_NAME",
-              "FILTER_TRUEVIEW_DMA_NAME",
-              "FILTER_TRUEVIEW_REGION_NAME",
-              "FILTER_ACTIVE_VIEW_CUSTOM_METRIC_ID",
-              "FILTER_ACTIVE_VIEW_CUSTOM_METRIC_NAME",
-              "FILTER_AD_TYPE",
-              "FILTER_ALGORITHM",
-              "FILTER_ALGORITHM_ID",
-              "FILTER_AMP_PAGE_REQUEST",
-              "FILTER_ANONYMOUS_INVENTORY_MODELING",
-              "FILTER_APP_URL",
-              "FILTER_APP_URL_EXCLUDED",
-              "FILTER_ATTRIBUTED_USERLIST",
-              "FILTER_ATTRIBUTED_USERLIST_COST",
-              "FILTER_ATTRIBUTED_USERLIST_TYPE",
-              "FILTER_ATTRIBUTION_MODEL",
-              "FILTER_AUDIENCE_LIST",
-              "FILTER_AUDIENCE_LIST_COST",
-              "FILTER_AUDIENCE_LIST_TYPE",
-              "FILTER_AUDIENCE_NAME",
-              "FILTER_AUDIENCE_TYPE",
-              "FILTER_BILLABLE_OUTCOME",
-              "FILTER_BRAND_LIFT_TYPE",
-              "FILTER_CHANNEL_TYPE",
-              "FILTER_CM_PLACEMENT_ID",
-              "FILTER_CONVERSION_SOURCE",
-              "FILTER_CONVERSION_SOURCE_ID",
-              "FILTER_COUNTRY_ID",
-              "FILTER_CREATIVE",
-              "FILTER_CREATIVE_ASSET",
-              "FILTER_CREATIVE_INTEGRATION_CODE",
-              "FILTER_CREATIVE_RENDERED_IN_AMP",
-              "FILTER_CREATIVE_SOURCE",
-              "FILTER_CREATIVE_STATUS",
-              "FILTER_DATA_PROVIDER_NAME",
-              "FILTER_DETAILED_DEMOGRAPHICS",
-              "FILTER_DETAILED_DEMOGRAPHICS_ID",
-              "FILTER_DEVICE",
-              "FILTER_GAM_INSERTION_ORDER",
-              "FILTER_GAM_LINE_ITEM",
-              "FILTER_GAM_LINE_ITEM_ID",
-              "FILTER_DIGITAL_CONTENT_LABEL",
-              "FILTER_DOMAIN",
-              "FILTER_ELIGIBLE_COOKIES_ON_FIRST_PARTY_AUDIENCE_LIST",
-              "FILTER_ELIGIBLE_COOKIES_ON_THIRD_PARTY_AUDIENCE_LIST_AND_INTEREST",
-              "FILTER_EXCHANGE",
-              "FILTER_EXCHANGE_CODE",
-              "FILTER_EXTENSION",
-              "FILTER_EXTENSION_STATUS",
-              "FILTER_EXTENSION_TYPE",
-              "FILTER_FIRST_PARTY_AUDIENCE_LIST_COST",
-              "FILTER_FIRST_PARTY_AUDIENCE_LIST_TYPE",
-              "FILTER_FLOODLIGHT_ACTIVITY",
-              "FILTER_FORMAT",
-              "FILTER_GMAIL_AGE",
-              "FILTER_GMAIL_CITY",
-              "FILTER_GMAIL_COUNTRY",
-              "FILTER_GMAIL_COUNTRY_NAME",
-              "FILTER_GMAIL_DEVICE_TYPE",
-              "FILTER_GMAIL_DEVICE_TYPE_NAME",
-              "FILTER_GMAIL_GENDER",
-              "FILTER_GMAIL_REGION",
-              "FILTER_GMAIL_REMARKETING_LIST",
-              "FILTER_HOUSEHOLD_INCOME",
-              "FILTER_IMPRESSION_COUNTING_METHOD",
-              "FILTER_YOUTUBE_PROGRAMMATIC_GUARANTEED_INSERTION_ORDER",
-              "FILTER_INSERTION_ORDER_INTEGRATION_CODE",
-              "FILTER_INSERTION_ORDER_STATUS",
-              "FILTER_INTEREST",
-              "FILTER_INVENTORY_SOURCE_GROUP",
-              "FILTER_INVENTORY_SOURCE_GROUP_ID",
-              "FILTER_INVENTORY_SOURCE_ID",
-              "FILTER_INVENTORY_SOURCE_NAME",
-              "FILTER_LIFE_EVENT",
-              "FILTER_LIFE_EVENTS",
-              "FILTER_LINE_ITEM_INTEGRATION_CODE",
-              "FILTER_LINE_ITEM_NAME",
-              "FILTER_LINE_ITEM_STATUS",
-              "FILTER_MATCH_RATIO",
-              "FILTER_MEASUREMENT_SOURCE",
-              "FILTER_MEDIA_PLAN_NAME",
-              "FILTER_PARENTAL_STATUS",
-              "FILTER_PLACEMENT_ALL_YOUTUBE_CHANNELS",
-              "FILTER_PLATFORM",
-              "FILTER_PLAYBACK_METHOD",
-              "FILTER_POSITION_IN_CONTENT",
-              "FILTER_PUBLISHER_PROPERTY",
-              "FILTER_PUBLISHER_PROPERTY_ID",
-              "FILTER_PUBLISHER_PROPERTY_SECTION",
-              "FILTER_PUBLISHER_PROPERTY_SECTION_ID",
-              "FILTER_REFUND_REASON",
-              "FILTER_REMARKETING_LIST",
-              "FILTER_REWARDED",
-              "FILTER_SENSITIVE_CATEGORY",
-              "FILTER_SERVED_PIXEL_DENSITY",
-              "FILTER_TARGETED_DATA_PROVIDERS",
-              "FILTER_THIRD_PARTY_AUDIENCE_LIST_COST",
-              "FILTER_THIRD_PARTY_AUDIENCE_LIST_TYPE",
-              "FILTER_TRUEVIEW_AD",
-              "FILTER_TRUEVIEW_AD_GROUP",
-              "FILTER_TRUEVIEW_DETAILED_DEMOGRAPHICS",
-              "FILTER_TRUEVIEW_DETAILED_DEMOGRAPHICS_ID",
-              "FILTER_TRUEVIEW_HOUSEHOLD_INCOME",
-              "FILTER_TRUEVIEW_IAR_COUNTRY_NAME",
-              "FILTER_TRUEVIEW_REMARKETING_LIST_NAME",
-              "FILTER_VARIANT_ID",
-              "FILTER_VARIANT_NAME",
-              "FILTER_VARIANT_VERSION",
-              "FILTER_VERIFICATION_VIDEO_PLAYER_SIZE",
-              "FILTER_VERIFICATION_VIDEO_POSITION",
-              "FILTER_VIDEO_COMPANION_CREATIVE_SIZE",
-              "FILTER_VIDEO_CONTINUOUS_PLAY",
-              "FILTER_VIDEO_DURATION",
-              "FILTER_YOUTUBE_ADAPTED_AUDIENCE_LIST",
-              "FILTER_YOUTUBE_AD_VIDEO",
-              "FILTER_YOUTUBE_AD_VIDEO_ID",
-              "FILTER_YOUTUBE_CHANNEL",
-              "FILTER_YOUTUBE_PROGRAMMATIC_GUARANTEED_ADVERTISER",
-              "FILTER_YOUTUBE_PROGRAMMATIC_GUARANTEED_PARTNER",
-              "FILTER_YOUTUBE_VIDEO",
-              "FILTER_ZIP_POSTAL_CODE",
-              "FILTER_PLACEMENT_NAME_ALL_YOUTUBE_CHANNELS",
-              "FILTER_TRUEVIEW_PLACEMENT_ID",
-              "FILTER_PATH_PATTERN_ID",
-              "FILTER_PATH_EVENT_INDEX",
-              "FILTER_EVENT_TYPE",
-              "FILTER_CHANNEL_GROUPING",
-              "FILTER_OM_SDK_AVAILABLE",
-              "FILTER_DATA_SOURCE"
-            ]
-          }
-        },
-        "type": {
-          "description": "Report type.",
-          "enum": [
-            "TYPE_GENERAL",
-            "TYPE_AUDIENCE_PERFORMANCE",
-            "TYPE_INVENTORY_AVAILABILITY",
-            "TYPE_KEYWORD",
-            "TYPE_PIXEL_LOAD",
-            "TYPE_AUDIENCE_COMPOSITION",
-            "TYPE_CROSS_PARTNER",
-            "TYPE_PAGE_CATEGORY",
-            "TYPE_THIRD_PARTY_DATA_PROVIDER",
-            "TYPE_CROSS_PARTNER_THIRD_PARTY_DATA_PROVIDER",
-            "TYPE_CLIENT_SAFE",
-            "TYPE_ORDER_ID",
-            "TYPE_FEE",
-            "TYPE_CROSS_FEE",
-            "TYPE_ACTIVE_GRP",
-            "TYPE_YOUTUBE_VERTICAL",
-            "TYPE_COMSCORE_VCE",
-            "TYPE_TRUEVIEW",
-            "TYPE_NIELSEN_AUDIENCE_PROFILE",
-            "TYPE_NIELSEN_DAILY_REACH_BUILD",
-            "TYPE_NIELSEN_SITE",
-            "TYPE_REACH_AND_FREQUENCY",
-            "TYPE_ESTIMATED_CONVERSION",
-            "TYPE_VERIFICATION",
-            "TYPE_TRUEVIEW_IAR",
-            "TYPE_NIELSEN_ONLINE_GLOBAL_MARKET",
-            "TYPE_PETRA_NIELSEN_AUDIENCE_PROFILE",
-            "TYPE_PETRA_NIELSEN_DAILY_REACH_BUILD",
-            "TYPE_PETRA_NIELSEN_ONLINE_GLOBAL_MARKET",
-            "TYPE_NOT_SUPPORTED",
-            "TYPE_REACH_AUDIENCE",
-            "TYPE_LINEAR_TV_SEARCH_LIFT",
-            "TYPE_PATH",
-            "TYPE_PATH_ATTRIBUTION"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string"
-        },
-        "options": {
-          "$ref": "Options",
-          "description": "Additional query options."
-        },
-        "filters": {
-          "description": "Filters used to match traffic data in your report.",
-          "type": "array",
-          "items": {
-            "$ref": "FilterPair"
-          }
-        },
-        "metrics": {
-          "items": {
-            "type": "string",
-            "enum": [
-              "METRIC_UNKNOWN",
-              "METRIC_IMPRESSIONS",
-              "METRIC_CLICKS",
-              "METRIC_LAST_IMPRESSIONS",
-              "METRIC_LAST_CLICKS",
-              "METRIC_TOTAL_CONVERSIONS",
-              "METRIC_MEDIA_COST_ADVERTISER",
-              "METRIC_MEDIA_COST_USD",
-              "METRIC_MEDIA_COST_PARTNER",
-              "METRIC_DATA_COST_ADVERTISER",
-              "METRIC_DATA_COST_USD",
-              "METRIC_DATA_COST_PARTNER",
-              "METRIC_CPM_FEE1_ADVERTISER",
-              "METRIC_CPM_FEE1_USD",
-              "METRIC_CPM_FEE1_PARTNER",
-              "METRIC_CPM_FEE2_ADVERTISER",
-              "METRIC_CPM_FEE2_USD",
-              "METRIC_CPM_FEE2_PARTNER",
-              "METRIC_MEDIA_FEE1_ADVERTISER",
-              "METRIC_MEDIA_FEE1_USD",
-              "METRIC_MEDIA_FEE1_PARTNER",
-              "METRIC_MEDIA_FEE2_ADVERTISER",
-              "METRIC_MEDIA_FEE2_USD",
-              "METRIC_MEDIA_FEE2_PARTNER",
-              "METRIC_REVENUE_ADVERTISER",
-              "METRIC_REVENUE_USD",
-              "METRIC_REVENUE_PARTNER",
-              "METRIC_PROFIT_ADVERTISER",
-              "METRIC_PROFIT_USD",
-              "METRIC_PROFIT_PARTNER",
-              "METRIC_PROFIT_MARGIN",
-              "METRIC_TOTAL_MEDIA_COST_USD",
-              "METRIC_TOTAL_MEDIA_COST_PARTNER",
-              "METRIC_TOTAL_MEDIA_COST_ADVERTISER",
-              "METRIC_BILLABLE_COST_USD",
-              "METRIC_BILLABLE_COST_PARTNER",
-              "METRIC_BILLABLE_COST_ADVERTISER",
-              "METRIC_PLATFORM_FEE_USD",
-              "METRIC_PLATFORM_FEE_PARTNER",
-              "METRIC_PLATFORM_FEE_ADVERTISER",
-              "METRIC_VIDEO_COMPLETION_RATE",
-              "METRIC_PROFIT_ECPM_ADVERTISER",
-              "METRIC_PROFIT_ECPM_USD",
-              "METRIC_PROFIT_ECPM_PARTNER",
-              "METRIC_REVENUE_ECPM_ADVERTISER",
-              "METRIC_REVENUE_ECPM_USD",
-              "METRIC_REVENUE_ECPM_PARTNER",
-              "METRIC_REVENUE_ECPC_ADVERTISER",
-              "METRIC_REVENUE_ECPC_USD",
-              "METRIC_REVENUE_ECPC_PARTNER",
-              "METRIC_REVENUE_ECPA_ADVERTISER",
-              "METRIC_REVENUE_ECPA_USD",
-              "METRIC_REVENUE_ECPA_PARTNER",
-              "METRIC_REVENUE_ECPAPV_ADVERTISER",
-              "METRIC_REVENUE_ECPAPV_USD",
-              "METRIC_REVENUE_ECPAPV_PARTNER",
-              "METRIC_REVENUE_ECPAPC_ADVERTISER",
-              "METRIC_REVENUE_ECPAPC_USD",
-              "METRIC_REVENUE_ECPAPC_PARTNER",
-              "METRIC_MEDIA_COST_ECPM_ADVERTISER",
-              "METRIC_MEDIA_COST_ECPM_USD",
-              "METRIC_MEDIA_COST_ECPM_PARTNER",
-              "METRIC_MEDIA_COST_ECPC_ADVERTISER",
-              "METRIC_MEDIA_COST_ECPC_USD",
-              "METRIC_MEDIA_COST_ECPC_PARTNER",
-              "METRIC_MEDIA_COST_ECPA_ADVERTISER",
-              "METRIC_MEDIA_COST_ECPA_USD",
-              "METRIC_MEDIA_COST_ECPA_PARTNER",
-              "METRIC_MEDIA_COST_ECPAPV_ADVERTISER",
-              "METRIC_MEDIA_COST_ECPAPV_USD",
-              "METRIC_MEDIA_COST_ECPAPV_PARTNER",
-              "METRIC_MEDIA_COST_ECPAPC_ADVERTISER",
-              "METRIC_MEDIA_COST_ECPAPC_USD",
-              "METRIC_MEDIA_COST_ECPAPC_PARTNER",
-              "METRIC_TOTAL_MEDIA_COST_ECPM_ADVERTISER",
-              "METRIC_TOTAL_MEDIA_COST_ECPM_USD",
-              "METRIC_TOTAL_MEDIA_COST_ECPM_PARTNER",
-              "METRIC_TOTAL_MEDIA_COST_ECPC_ADVERTISER",
-              "METRIC_TOTAL_MEDIA_COST_ECPC_USD",
-              "METRIC_TOTAL_MEDIA_COST_ECPC_PARTNER",
-              "METRIC_TOTAL_MEDIA_COST_ECPA_ADVERTISER",
-              "METRIC_TOTAL_MEDIA_COST_ECPA_USD",
-              "METRIC_TOTAL_MEDIA_COST_ECPA_PARTNER",
-              "METRIC_TOTAL_MEDIA_COST_ECPAPV_ADVERTISER",
-              "METRIC_TOTAL_MEDIA_COST_ECPAPV_USD",
-              "METRIC_TOTAL_MEDIA_COST_ECPAPV_PARTNER",
-              "METRIC_TOTAL_MEDIA_COST_ECPAPC_ADVERTISER",
-              "METRIC_TOTAL_MEDIA_COST_ECPAPC_USD",
-              "METRIC_TOTAL_MEDIA_COST_ECPAPC_PARTNER",
-              "METRIC_RICH_MEDIA_VIDEO_PLAYS",
-              "METRIC_RICH_MEDIA_VIDEO_COMPLETIONS",
-              "METRIC_RICH_MEDIA_VIDEO_PAUSES",
-              "METRIC_RICH_MEDIA_VIDEO_MUTES",
-              "METRIC_RICH_MEDIA_VIDEO_MIDPOINTS",
-              "METRIC_RICH_MEDIA_VIDEO_FULL_SCREENS",
-              "METRIC_RICH_MEDIA_VIDEO_FIRST_QUARTILE_COMPLETES",
-              "METRIC_RICH_MEDIA_VIDEO_THIRD_QUARTILE_COMPLETES",
-              "METRIC_CLICK_TO_POST_CLICK_CONVERSION_RATE",
-              "METRIC_IMPRESSIONS_TO_CONVERSION_RATE",
-              "METRIC_CONVERSIONS_PER_MILLE",
-              "METRIC_CTR",
-              "METRIC_BID_REQUESTS",
-              "METRIC_UNIQUE_VISITORS_COOKIES",
-              "METRIC_REVENUE_ECPCV_ADVERTISER",
-              "METRIC_REVENUE_ECPCV_USD",
-              "METRIC_REVENUE_ECPCV_PARTNER",
-              "METRIC_MEDIA_COST_ECPCV_ADVERTISER",
-              "METRIC_MEDIA_COST_ECPCV_USD",
-              "METRIC_MEDIA_COST_ECPCV_PARTNER",
-              "METRIC_TOTAL_MEDIA_COST_ECPCV_ADVERTISER",
-              "METRIC_TOTAL_MEDIA_COST_ECPCV_USD",
-              "METRIC_TOTAL_MEDIA_COST_ECPCV_PARTNER",
-              "METRIC_RICH_MEDIA_VIDEO_SKIPS",
-              "METRIC_FEE2_ADVERTISER",
-              "METRIC_FEE2_USD",
-              "METRIC_FEE2_PARTNER",
-              "METRIC_FEE3_ADVERTISER",
-              "METRIC_FEE3_USD",
-              "METRIC_FEE3_PARTNER",
-              "METRIC_FEE4_ADVERTISER",
-              "METRIC_FEE4_USD",
-              "METRIC_FEE4_PARTNER",
-              "METRIC_FEE5_ADVERTISER",
-              "METRIC_FEE5_USD",
-              "METRIC_FEE5_PARTNER",
-              "METRIC_FEE6_ADVERTISER",
-              "METRIC_FEE6_USD",
-              "METRIC_FEE6_PARTNER",
-              "METRIC_FEE7_ADVERTISER",
-              "METRIC_FEE7_USD",
-              "METRIC_FEE7_PARTNER",
-              "METRIC_FEE8_ADVERTISER",
-              "METRIC_FEE8_USD",
-              "METRIC_FEE8_PARTNER",
-              "METRIC_FEE9_ADVERTISER",
-              "METRIC_FEE9_USD",
-              "METRIC_FEE9_PARTNER",
-              "METRIC_FEE10_ADVERTISER",
-              "METRIC_FEE10_USD",
-              "METRIC_FEE10_PARTNER",
-              "METRIC_FEE11_ADVERTISER",
-              "METRIC_FEE11_USD",
-              "METRIC_FEE11_PARTNER",
-              "METRIC_FEE12_ADVERTISER",
-              "METRIC_FEE12_USD",
-              "METRIC_FEE12_PARTNER",
-              "METRIC_FEE13_ADVERTISER",
-              "METRIC_FEE13_USD",
-              "METRIC_FEE13_PARTNER",
-              "METRIC_FEE14_ADVERTISER",
-              "METRIC_FEE14_USD",
-              "METRIC_FEE14_PARTNER",
-              "METRIC_FEE15_ADVERTISER",
-              "METRIC_FEE15_USD",
-              "METRIC_FEE15_PARTNER",
-              "METRIC_CPM_FEE3_ADVERTISER",
-              "METRIC_CPM_FEE3_USD",
-              "METRIC_CPM_FEE3_PARTNER",
-              "METRIC_CPM_FEE4_ADVERTISER",
-              "METRIC_CPM_FEE4_USD",
-              "METRIC_CPM_FEE4_PARTNER",
-              "METRIC_CPM_FEE5_ADVERTISER",
-              "METRIC_CPM_FEE5_USD",
-              "METRIC_CPM_FEE5_PARTNER",
-              "METRIC_MEDIA_FEE3_ADVERTISER",
-              "METRIC_MEDIA_FEE3_USD",
-              "METRIC_MEDIA_FEE3_PARTNER",
-              "METRIC_MEDIA_FEE4_ADVERTISER",
-              "METRIC_MEDIA_FEE4_USD",
-              "METRIC_MEDIA_FEE4_PARTNER",
-              "METRIC_MEDIA_FEE5_ADVERTISER",
-              "METRIC_MEDIA_FEE5_USD",
-              "METRIC_MEDIA_FEE5_PARTNER",
-              "METRIC_VIDEO_COMPANION_IMPRESSIONS",
-              "METRIC_VIDEO_COMPANION_CLICKS",
-              "METRIC_FEE16_ADVERTISER",
-              "METRIC_FEE16_USD",
-              "METRIC_FEE16_PARTNER",
-              "METRIC_FEE17_ADVERTISER",
-              "METRIC_FEE17_USD",
-              "METRIC_FEE17_PARTNER",
-              "METRIC_FEE18_ADVERTISER",
-              "METRIC_FEE18_USD",
-              "METRIC_FEE18_PARTNER",
-              "METRIC_TRUEVIEW_VIEWS",
-              "METRIC_TRUEVIEW_UNIQUE_VIEWERS",
-              "METRIC_TRUEVIEW_EARNED_VIEWS",
-              "METRIC_TRUEVIEW_EARNED_SUBSCRIBERS",
-              "METRIC_TRUEVIEW_EARNED_PLAYLIST_ADDITIONS",
-              "METRIC_TRUEVIEW_EARNED_LIKES",
-              "METRIC_TRUEVIEW_EARNED_SHARES",
-              "METRIC_TRUEVIEW_IMPRESSION_SHARE",
-              "METRIC_TRUEVIEW_LOST_IS_BUDGET",
-              "METRIC_TRUEVIEW_LOST_IS_RANK",
-              "METRIC_TRUEVIEW_VIEW_THROUGH_CONVERSION",
-              "METRIC_TRUEVIEW_CONVERSION_MANY_PER_VIEW",
-              "METRIC_TRUEVIEW_VIEW_RATE",
-              "METRIC_TRUEVIEW_CONVERSION_RATE_ONE_PER_VIEW",
-              "METRIC_TRUEVIEW_CPV_ADVERTISER",
-              "METRIC_TRUEVIEW_CPV_USD",
-              "METRIC_TRUEVIEW_CPV_PARTNER",
-              "METRIC_FEE19_ADVERTISER",
-              "METRIC_FEE19_USD",
-              "METRIC_FEE19_PARTNER",
-              "METRIC_TEA_TRUEVIEW_IMPRESSIONS",
-              "METRIC_TEA_TRUEVIEW_UNIQUE_COOKIES",
-              "METRIC_FEE20_ADVERTISER",
-              "METRIC_FEE20_USD",
-              "METRIC_FEE20_PARTNER",
-              "METRIC_FEE21_ADVERTISER",
-              "METRIC_FEE21_USD",
-              "METRIC_FEE21_PARTNER",
-              "METRIC_FEE22_ADVERTISER",
-              "METRIC_FEE22_USD",
-              "METRIC_FEE22_PARTNER",
-              "METRIC_TRUEVIEW_TOTAL_CONVERSION_VALUES_ADVERTISER",
-              "METRIC_TRUEVIEW_TOTAL_CONVERSION_VALUES_USD",
-              "METRIC_TRUEVIEW_TOTAL_CONVERSION_VALUES_PARTNER",
-              "METRIC_TRUEVIEW_CONVERSION_COST_MANY_PER_VIEW_ADVERTISER",
-              "METRIC_TRUEVIEW_CONVERSION_COST_MANY_PER_VIEW_USD",
-              "METRIC_TRUEVIEW_CONVERSION_COST_MANY_PER_VIEW_PARTNER",
-              "METRIC_PROFIT_VIEWABLE_ECPM_ADVERTISER",
-              "METRIC_PROFIT_VIEWABLE_ECPM_USD",
-              "METRIC_PROFIT_VIEWABLE_ECPM_PARTNER",
-              "METRIC_REVENUE_VIEWABLE_ECPM_ADVERTISER",
-              "METRIC_REVENUE_VIEWABLE_ECPM_USD",
-              "METRIC_REVENUE_VIEWABLE_ECPM_PARTNER",
-              "METRIC_MEDIA_COST_VIEWABLE_ECPM_ADVERTISER",
-              "METRIC_MEDIA_COST_VIEWABLE_ECPM_USD",
-              "METRIC_MEDIA_COST_VIEWABLE_ECPM_PARTNER",
-              "METRIC_TOTAL_MEDIA_COST_VIEWABLE_ECPM_ADVERTISER",
-              "METRIC_TOTAL_MEDIA_COST_VIEWABLE_ECPM_USD",
-              "METRIC_TOTAL_MEDIA_COST_VIEWABLE_ECPM_PARTNER",
-              "METRIC_TRUEVIEW_ENGAGEMENTS",
-              "METRIC_TRUEVIEW_ENGAGEMENT_RATE",
-              "METRIC_TRUEVIEW_AVERAGE_CPE_ADVERTISER",
-              "METRIC_TRUEVIEW_AVERAGE_CPE_USD",
-              "METRIC_TRUEVIEW_AVERAGE_CPE_PARTNER",
-              "METRIC_ACTIVE_VIEW_VIEWABLE_IMPRESSIONS",
-              "METRIC_ACTIVE_VIEW_ELIGIBLE_IMPRESSIONS",
-              "METRIC_ACTIVE_VIEW_MEASURABLE_IMPRESSIONS",
-              "METRIC_ACTIVE_VIEW_PCT_MEASURABLE_IMPRESSIONS",
-              "METRIC_ACTIVE_VIEW_PCT_VIEWABLE_IMPRESSIONS",
-              "METRIC_ACTIVE_VIEW_AVERAGE_VIEWABLE_TIME",
-              "METRIC_ACTIVE_VIEW_UNMEASURABLE_IMPRESSIONS",
-              "METRIC_ACTIVE_VIEW_UNVIEWABLE_IMPRESSIONS",
-              "METRIC_ACTIVE_VIEW_DISTRIBUTION_UNMEASURABLE",
-              "METRIC_ACTIVE_VIEW_DISTRIBUTION_UNVIEWABLE",
-              "METRIC_ACTIVE_VIEW_DISTRIBUTION_VIEWABLE",
-              "METRIC_ACTIVE_VIEW_PERCENT_VIEWABLE_FOR_TIME_THRESHOLD",
-              "METRIC_ACTIVE_VIEW_VIEWABLE_FOR_TIME_THRESHOLD",
-              "METRIC_ACTIVE_VIEW_PERCENT_VISIBLE_AT_START",
-              "METRIC_ACTIVE_VIEW_PERCENT_VISIBLE_FIRST_QUAR",
-              "METRIC_ACTIVE_VIEW_PERCENT_VISIBLE_SECOND_QUAR",
-              "METRIC_ACTIVE_VIEW_PERCENT_VISIBLE_THIRD_QUAR",
-              "METRIC_ACTIVE_VIEW_PERCENT_VISIBLE_ON_COMPLETE",
-              "METRIC_ACTIVE_VIEW_PERCENT_AUDIBLE_VISIBLE_AT_START",
-              "METRIC_ACTIVE_VIEW_PERCENT_AUDIBLE_VISIBLE_FIRST_QUAR",
-              "METRIC_ACTIVE_VIEW_PERCENT_AUDIBLE_VISIBLE_SECOND_QUAR",
-              "METRIC_ACTIVE_VIEW_PERCENT_AUDIBLE_VISIBLE_THIRD_QUAR",
-              "METRIC_ACTIVE_VIEW_PERCENT_AUDIBLE_VISIBLE_ON_COMPLETE",
-              "METRIC_ACTIVE_VIEW_AUDIBLE_VISIBLE_ON_COMPLETE_IMPRESSIONS",
-              "METRIC_VIEWABLE_BID_REQUESTS",
-              "METRIC_COOKIE_REACH_IMPRESSION_REACH",
-              "METRIC_COOKIE_REACH_AVERAGE_IMPRESSION_FREQUENCY",
-              "METRIC_DBM_ENGAGEMENT_RATE",
-              "METRIC_RICH_MEDIA_SCROLLS",
-              "METRIC_CM_POST_VIEW_REVENUE",
-              "METRIC_CM_POST_CLICK_REVENUE",
-              "METRIC_FLOODLIGHT_IMPRESSIONS",
-              "METRIC_BILLABLE_IMPRESSIONS",
-              "METRIC_NIELSEN_AVERAGE_FREQUENCY",
-              "METRIC_NIELSEN_IMPRESSIONS",
-              "METRIC_NIELSEN_UNIQUE_AUDIENCE",
-              "METRIC_NIELSEN_GRP",
-              "METRIC_NIELSEN_IMPRESSION_INDEX",
-              "METRIC_NIELSEN_IMPRESSIONS_SHARE",
-              "METRIC_NIELSEN_POPULATION",
-              "METRIC_NIELSEN_POPULATION_REACH",
-              "METRIC_NIELSEN_POPULATION_SHARE",
-              "METRIC_NIELSEN_REACH_INDEX",
-              "METRIC_NIELSEN_REACH_SHARE",
-              "METRIC_ACTIVE_VIEW_AUDIBLE_FULLY_ON_SCREEN_HALF_OF_DURATION_IMPRESSIONS",
-              "METRIC_ACTIVE_VIEW_AUDIBLE_FULLY_ON_SCREEN_HALF_OF_DURATION_MEASURABLE_IMPRESSIONS",
-              "METRIC_ACTIVE_VIEW_AUDIBLE_FULLY_ON_SCREEN_HALF_OF_DURATION_RATE",
-              "METRIC_ACTIVE_VIEW_AUDIBLE_FULLY_ON_SCREEN_HALF_OF_DURATION_TRUEVIEW_IMPRESSIONS",
-              "METRIC_ACTIVE_VIEW_AUDIBLE_FULLY_ON_SCREEN_HALF_OF_DURATION_TRUEVIEW_MEASURABLE_IMPRESSIONS",
-              "METRIC_ACTIVE_VIEW_AUDIBLE_FULLY_ON_SCREEN_HALF_OF_DURATION_TRUEVIEW_RATE",
-              "METRIC_ACTIVE_VIEW_CUSTOM_METRIC_MEASURABLE_IMPRESSIONS",
-              "METRIC_ACTIVE_VIEW_CUSTOM_METRIC_VIEWABLE_IMPRESSIONS",
-              "METRIC_ACTIVE_VIEW_CUSTOM_METRIC_VIEWABLE_RATE",
-              "METRIC_ACTIVE_VIEW_PERCENT_AUDIBLE_IMPRESSIONS",
-              "METRIC_ACTIVE_VIEW_PERCENT_FULLY_ON_SCREEN_2_SEC",
-              "METRIC_ACTIVE_VIEW_PERCENT_FULL_SCREEN",
-              "METRIC_ACTIVE_VIEW_PERCENT_IN_BACKGROUND",
-              "METRIC_ACTIVE_VIEW_PERCENT_OF_AD_PLAYED",
-              "METRIC_ACTIVE_VIEW_PERCENT_OF_COMPLETED_IMPRESSIONS_AUDIBLE_AND_VISIBLE",
-              "METRIC_ACTIVE_VIEW_PERCENT_OF_COMPLETED_IMPRESSIONS_VISIBLE",
-              "METRIC_ACTIVE_VIEW_PERCENT_OF_FIRST_QUARTILE_IMPRESSIONS_AUDIBLE_AND_VISIBLE",
-              "METRIC_ACTIVE_VIEW_PERCENT_OF_FIRST_QUARTILE_IMPRESSIONS_VISIBLE",
-              "METRIC_ACTIVE_VIEW_PERCENT_OF_MIDPOINT_IMPRESSIONS_AUDIBLE_AND_VISIBLE",
-              "METRIC_ACTIVE_VIEW_PERCENT_OF_MIDPOINT_IMPRESSIONS_VISIBLE",
-              "METRIC_ACTIVE_VIEW_PERCENT_OF_THIRD_QUARTILE_IMPRESSIONS_AUDIBLE_AND_VISIBLE",
-              "METRIC_ACTIVE_VIEW_PERCENT_OF_THIRD_QUARTILE_IMPRESSIONS_VISIBLE",
-              "METRIC_ACTIVE_VIEW_PERCENT_PLAY_TIME_AUDIBLE",
-              "METRIC_ACTIVE_VIEW_PERCENT_PLAY_TIME_AUDIBLE_AND_VISIBLE",
-              "METRIC_ACTIVE_VIEW_PERCENT_PLAY_TIME_VISIBLE",
-              "METRIC_ADAPTED_AUDIENCE_FREQUENCY",
-              "METRIC_ADLINGO_FEE_ADVERTISER_CURRENCY",
-              "METRIC_AUDIO_CLIENT_COST_ECPCL_ADVERTISER_CURRENCY",
-              "METRIC_AUDIO_MEDIA_COST_ECPCL_ADVERTISER_CURRENCY",
-              "METRIC_AUDIO_MUTES_AUDIO",
-              "METRIC_AUDIO_REVENUE_ECPCL_ADVERTISER_CURRENCY",
-              "METRIC_AUDIO_UNMUTES_AUDIO",
-              "METRIC_AUDIO_UNMUTES_VIDEO",
-              "METRIC_AVERAGE_DISPLAY_TIME",
-              "METRIC_AVERAGE_IMPRESSION_FREQUENCY_PER_USER",
-              "METRIC_AVERAGE_INTERACTION_TIME",
-              "METRIC_AVERAGE_WATCH_TIME_PER_IMPRESSION",
-              "METRIC_BEGIN_TO_RENDER_ELIGIBLE_IMPRESSIONS",
-              "METRIC_BEGIN_TO_RENDER_IMPRESSIONS",
-              "METRIC_BENCHMARK_FREQUENCY",
-              "METRIC_BRAND_LIFT_ABSOLUTE_BRAND_LIFT",
-              "METRIC_BRAND_LIFT_ALL_SURVEY_RESPONSES",
-              "METRIC_BRAND_LIFT_BASELINE_POSITIVE_RESPONSE_RATE",
-              "METRIC_BRAND_LIFT_BASELINE_SURVEY_RESPONSES",
-              "METRIC_BRAND_LIFT_COST_PER_LIFTED_USER",
-              "METRIC_BRAND_LIFT_EXPOSED_SURVEY_RESPONSES",
-              "METRIC_BRAND_LIFT_HEADROOM_BRAND_LIFT",
-              "METRIC_BRAND_LIFT_RELATIVE_BRAND_LIFT",
-              "METRIC_BRAND_LIFT_USERS",
-              "METRIC_CARD_CLICKS",
-              "METRIC_CLIENT_COST_ADVERTISER_CURRENCY",
-              "METRIC_CLIENT_COST_ECPA_ADVERTISER_CURRENCY",
-              "METRIC_CLIENT_COST_ECPA_PC_ADVERTISER_CURRENCY",
-              "METRIC_CLIENT_COST_ECPA_PV_ADVERTISER_CURRENCY",
-              "METRIC_CLIENT_COST_ECPC_ADVERTISER_CURRENCY",
-              "METRIC_CLIENT_COST_ECPM_ADVERTISER_CURRENCY",
-              "METRIC_CLIENT_COST_VIEWABLE_ECPM_ADVERTISER_CURRENCY",
-              "METRIC_CM_POST_CLICK_REVENUE_CROSS_ENVIRONMENT",
-              "METRIC_CM_POST_VIEW_REVENUE_CROSS_ENVIRONMENT",
-              "METRIC_COMPANION_CLICKS_AUDIO",
-              "METRIC_COMPANION_IMPRESSIONS_AUDIO",
-              "METRIC_COMPLETE_LISTENS_AUDIO",
-              "METRIC_COMPLETION_RATE_AUDIO",
-              "METRIC_COUNTERS",
-              "METRIC_CUSTOM_FEE_1_ADVERTISER_CURRENCY",
-              "METRIC_CUSTOM_FEE_2_ADVERTISER_CURRENCY",
-              "METRIC_CUSTOM_FEE_3_ADVERTISER_CURRENCY",
-              "METRIC_CUSTOM_FEE_4_ADVERTISER_CURRENCY",
-              "METRIC_CUSTOM_FEE_5_ADVERTISER_CURRENCY",
-              "METRIC_CUSTOM_VALUE_PER_1000_IMPRESSIONS",
-              "METRIC_ENGAGEMENTS",
-              "METRIC_ESTIMATED_CPM_FOR_IMPRESSIONS_WITH_CUSTOM_VALUE_ADVERTISER_CURRENCY",
-              "METRIC_ESTIMATED_TOTAL_COST_FOR_IMPRESSIONS_WITH_CUSTOM_VALUE_ADVERTISER_CURRENCY",
-              "METRIC_EXITS",
-              "METRIC_EXPANSIONS",
-              "METRIC_FIRST_QUARTILE_AUDIO",
-              "METRIC_GENERAL_INVALID_TRAFFIC_GIVT_IMPRESSIONS",
-              "METRIC_GENERAL_INVALID_TRAFFIC_GIVT_TRACKED_ADS",
-              "METRIC_GIVT_ACTIVE_VIEW_ELIGIBLE_IMPRESSIONS",
-              "METRIC_GIVT_ACTIVE_VIEW_MEASURABLE_IMPRESSIONS",
-              "METRIC_GIVT_ACTIVE_VIEW_VIEWABLE_IMPRESSIONS",
-              "METRIC_GIVT_BEGIN_TO_RENDER_IMPRESSIONS",
-              "METRIC_GIVT_CLICKS",
-              "METRIC_GMAIL_CONVERSIONS",
-              "METRIC_GMAIL_POST_CLICK_CONVERSIONS",
-              "METRIC_GMAIL_POST_VIEW_CONVERSIONS",
-              "METRIC_GMAIL_POTENTIAL_VIEWS",
-              "METRIC_IMPRESSIONS_WITH_CUSTOM_VALUE",
-              "METRIC_IMPRESSIONS_WITH_POSITIVE_CUSTOM_VALUE",
-              "METRIC_IMPRESSION_CUSTOM_VALUE_COST",
-              "METRIC_INTERACTIVE_IMPRESSIONS",
-              "METRIC_INVALID_ACTIVE_VIEW_ELIGIBLE_IMPRESSIONS",
-              "METRIC_INVALID_ACTIVE_VIEW_MEASURABLE_IMPRESSIONS",
-              "METRIC_INVALID_ACTIVE_VIEW_VIEWABLE_IMPRESSIONS",
-              "METRIC_INVALID_BEGIN_TO_RENDER_IMPRESSIONS",
-              "METRIC_INVALID_CLICKS",
-              "METRIC_INVALID_IMPRESSIONS",
-              "METRIC_INVALID_TRACKED_ADS",
-              "METRIC_MEDIA_COST_ADVERTISER_CURRENCY_PER_STORE_VISIT_ADX_ONLY",
-              "METRIC_MIDPOINT_AUDIO",
-              "METRIC_ORIGINAL_AUDIENCE_FREQUENCY",
-              "METRIC_PAUSES_AUDIO",
-              "METRIC_PERCENT_IMPRESSIONS_WITH_POSITIVE_CUSTOM_VALUE",
-              "METRIC_PLATFORM_FEE_RATE",
-              "METRIC_POST_CLICK_CONVERSIONS_CROSS_ENVIRONMENT",
-              "METRIC_POST_VIEW_CONVERSIONS_CROSS_ENVIRONMENT",
-              "METRIC_POTENTIAL_IMPRESSIONS",
-              "METRIC_POTENTIAL_VIEWS",
-              "METRIC_PREMIUM_FEE_ADVERTISER_CURRENCY",
-              "METRIC_PROGRAMMATIC_GUARANTEED_IMPRESSIONS_PASSED_DUE_TO_FREQUENCY",
-              "METRIC_PROGRAMMATIC_GUARANTEED_SAVINGS_RE_INVESTED_DUE_TO_FREQUENCY_ADVERTISER_CURRENCY",
-              "METRIC_REFUND_BILLABLE_COST_ADVERTISER_CURRENCY",
-              "METRIC_REFUND_MEDIA_COST_ADVERTISER_CURRENCY",
-              "METRIC_REFUND_PLATFORM_FEE_ADVERTISER_CURRENCY",
-              "METRIC_REVENUE_ADVERTISER_CURRENCY_PER_STORE_VISIT_ADX_ONLY",
-              "METRIC_RICH_MEDIA_ENGAGEMENTS",
-              "METRIC_STARTS_AUDIO",
-              "METRIC_STOPS_AUDIO",
-              "METRIC_STORE_VISITS_ADX_ONLY",
-              "METRIC_STORE_VISIT_CONVERSIONS",
-              "METRIC_THIRD_QUARTILE_AUDIO",
-              "METRIC_TIMERS",
-              "METRIC_TOTAL_AUDIO_MEDIA_COST_ECPCL_ADVERTISER_CURRENCY",
-              "METRIC_TOTAL_CONVERSIONS_CROSS_ENVIRONMENT",
-              "METRIC_TOTAL_DISPLAY_TIME",
-              "METRIC_TOTAL_IMPRESSION_CUSTOM_VALUE",
-              "METRIC_TOTAL_INTERACTION_TIME",
-              "METRIC_TOTAL_MEDIA_COST_ADVERTISER_CURRENCY_PER_STORE_VISIT_ADX_ONLY",
-              "METRIC_TOTAL_USERS",
-              "METRIC_TRACKED_ADS",
-              "METRIC_TRUEVIEW_GENERAL_INVALID_TRAFFIC_GIVT_VIEWS",
-              "METRIC_TRUEVIEW_INVALID_VIEWS",
-              "METRIC_UNIQUE_COOKIES_WITH_IMPRESSIONS",
-              "METRIC_UNIQUE_REACH_AVERAGE_IMPRESSION_FREQUENCY",
-              "METRIC_UNIQUE_REACH_CLICK_REACH",
-              "METRIC_UNIQUE_REACH_IMPRESSION_REACH",
-              "METRIC_UNIQUE_REACH_TOTAL_REACH",
-              "METRIC_VERIFIABLE_IMPRESSIONS",
-              "METRIC_VIDEO_CLIENT_COST_ECPCV_ADVERTISER_CURRENCY",
-              "METRIC_WATCH_TIME",
-              "METRIC_LAST_TOUCH_TOTAL_CONVERSIONS",
-              "METRIC_LAST_TOUCH_CLICK_THROUGH_CONVERSIONS",
-              "METRIC_LAST_TOUCH_VIEW_THROUGH_CONVERSIONS",
-              "METRIC_TOTAL_PATHS",
-              "METRIC_TOTAL_EXPOSURES",
-              "METRIC_PATH_CONVERSION_RATE",
-              "METRIC_CONVERTING_PATHS",
-              "METRIC_ACTIVITY_REVENUE",
-              "METRIC_PERCENT_INVALID_IMPRESSIONS_PREBID",
-              "METRIC_PROVISIONAL_IMPRESSIONS"
-            ],
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ]
-          },
-          "description": "Metrics to include as columns in your report.",
-          "type": "array"
-        },
-        "includeInviteData": {
-          "type": "boolean",
-          "description": "Deprecated. This field is no longer in use."
-        }
-      },
-      "id": "Parameters",
-      "description": "Parameters of a query or report.",
-      "type": "object"
-    },
-    "PathQueryOptionsFilter": {
-      "id": "PathQueryOptionsFilter",
-      "description": "Dimension Filter on path events.",
-      "type": "object",
-      "properties": {
-        "filter": {
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "FILTER_UNKNOWN",
-            "FILTER_DATE",
-            "FILTER_DAY_OF_WEEK",
-            "FILTER_WEEK",
-            "FILTER_MONTH",
-            "FILTER_YEAR",
-            "FILTER_TIME_OF_DAY",
-            "FILTER_CONVERSION_DELAY",
-            "FILTER_CREATIVE_ID",
-            "FILTER_CREATIVE_SIZE",
-            "FILTER_CREATIVE_TYPE",
-            "FILTER_EXCHANGE_ID",
-            "FILTER_AD_POSITION",
-            "FILTER_PUBLIC_INVENTORY",
-            "FILTER_INVENTORY_SOURCE",
-            "FILTER_CITY",
-            "FILTER_REGION",
-            "FILTER_DMA",
-            "FILTER_COUNTRY",
-            "FILTER_SITE_ID",
-            "FILTER_CHANNEL_ID",
-            "FILTER_PARTNER",
-            "FILTER_ADVERTISER",
-            "FILTER_INSERTION_ORDER",
-            "FILTER_LINE_ITEM",
-            "FILTER_PARTNER_CURRENCY",
-            "FILTER_ADVERTISER_CURRENCY",
-            "FILTER_ADVERTISER_TIMEZONE",
-            "FILTER_LINE_ITEM_TYPE",
-            "FILTER_USER_LIST",
-            "FILTER_USER_LIST_FIRST_PARTY",
-            "FILTER_USER_LIST_THIRD_PARTY",
-            "FILTER_TARGETED_USER_LIST",
-            "FILTER_DATA_PROVIDER",
-            "FILTER_ORDER_ID",
-            "FILTER_VIDEO_PLAYER_SIZE",
-            "FILTER_VIDEO_DURATION_SECONDS",
-            "FILTER_KEYWORD",
-            "FILTER_PAGE_CATEGORY",
-            "FILTER_CAMPAIGN_DAILY_FREQUENCY",
-            "FILTER_LINE_ITEM_DAILY_FREQUENCY",
-            "FILTER_LINE_ITEM_LIFETIME_FREQUENCY",
-            "FILTER_OS",
-            "FILTER_BROWSER",
-            "FILTER_CARRIER",
-            "FILTER_SITE_LANGUAGE",
-            "FILTER_INVENTORY_FORMAT",
-            "FILTER_ZIP_CODE",
-            "FILTER_VIDEO_RATING_TIER",
-            "FILTER_VIDEO_FORMAT_SUPPORT",
-            "FILTER_VIDEO_SKIPPABLE_SUPPORT",
-            "FILTER_VIDEO_VPAID_SUPPORT",
-            "FILTER_VIDEO_CREATIVE_DURATION",
-            "FILTER_PAGE_LAYOUT",
-            "FILTER_VIDEO_AD_POSITION_IN_STREAM",
-            "FILTER_AGE",
-            "FILTER_GENDER",
-            "FILTER_QUARTER",
-            "FILTER_TRUEVIEW_CONVERSION_TYPE",
-            "FILTER_MOBILE_GEO",
-            "FILTER_MRAID_SUPPORT",
-            "FILTER_ACTIVE_VIEW_EXPECTED_VIEWABILITY",
-            "FILTER_VIDEO_CREATIVE_DURATION_SKIPPABLE",
-            "FILTER_NIELSEN_COUNTRY_CODE",
-            "FILTER_NIELSEN_DEVICE_ID",
-            "FILTER_NIELSEN_GENDER",
-            "FILTER_NIELSEN_AGE",
-            "FILTER_INVENTORY_SOURCE_TYPE",
-            "FILTER_CREATIVE_WIDTH",
-            "FILTER_CREATIVE_HEIGHT",
-            "FILTER_DFP_ORDER_ID",
-            "FILTER_TRUEVIEW_AGE",
-            "FILTER_TRUEVIEW_GENDER",
-            "FILTER_TRUEVIEW_PARENTAL_STATUS",
-            "FILTER_TRUEVIEW_REMARKETING_LIST",
-            "FILTER_TRUEVIEW_INTEREST",
-            "FILTER_TRUEVIEW_AD_GROUP_ID",
-            "FILTER_TRUEVIEW_AD_GROUP_AD_ID",
-            "FILTER_TRUEVIEW_IAR_LANGUAGE",
-            "FILTER_TRUEVIEW_IAR_GENDER",
-            "FILTER_TRUEVIEW_IAR_AGE",
-            "FILTER_TRUEVIEW_IAR_CATEGORY",
-            "FILTER_TRUEVIEW_IAR_COUNTRY",
-            "FILTER_TRUEVIEW_IAR_CITY",
-            "FILTER_TRUEVIEW_IAR_REGION",
-            "FILTER_TRUEVIEW_IAR_ZIPCODE",
-            "FILTER_TRUEVIEW_IAR_REMARKETING_LIST",
-            "FILTER_TRUEVIEW_IAR_INTEREST",
-            "FILTER_TRUEVIEW_IAR_PARENTAL_STATUS",
-            "FILTER_TRUEVIEW_IAR_TIME_OF_DAY",
-            "FILTER_TRUEVIEW_CUSTOM_AFFINITY",
-            "FILTER_TRUEVIEW_CATEGORY",
-            "FILTER_TRUEVIEW_KEYWORD",
-            "FILTER_TRUEVIEW_PLACEMENT",
-            "FILTER_TRUEVIEW_URL",
-            "FILTER_TRUEVIEW_COUNTRY",
-            "FILTER_TRUEVIEW_REGION",
-            "FILTER_TRUEVIEW_CITY",
-            "FILTER_TRUEVIEW_DMA",
-            "FILTER_TRUEVIEW_ZIPCODE",
-            "FILTER_NOT_SUPPORTED",
-            "FILTER_MEDIA_PLAN",
-            "FILTER_TRUEVIEW_IAR_YOUTUBE_CHANNEL",
-            "FILTER_TRUEVIEW_IAR_YOUTUBE_VIDEO",
-            "FILTER_SKIPPABLE_SUPPORT",
-            "FILTER_COMPANION_CREATIVE_ID",
-            "FILTER_BUDGET_SEGMENT_DESCRIPTION",
-            "FILTER_FLOODLIGHT_ACTIVITY_ID",
-            "FILTER_DEVICE_MODEL",
-            "FILTER_DEVICE_MAKE",
-            "FILTER_DEVICE_TYPE",
-            "FILTER_CREATIVE_ATTRIBUTE",
-            "FILTER_INVENTORY_COMMITMENT_TYPE",
-            "FILTER_INVENTORY_RATE_TYPE",
-            "FILTER_INVENTORY_DELIVERY_METHOD",
-            "FILTER_INVENTORY_SOURCE_EXTERNAL_ID",
-            "FILTER_AUTHORIZED_SELLER_STATE",
-            "FILTER_VIDEO_DURATION_SECONDS_RANGE",
-            "FILTER_PARTNER_NAME",
-            "FILTER_PARTNER_STATUS",
-            "FILTER_ADVERTISER_NAME",
-            "FILTER_ADVERTISER_INTEGRATION_CODE",
-            "FILTER_ADVERTISER_INTEGRATION_STATUS",
-            "FILTER_CARRIER_NAME",
-            "FILTER_CHANNEL_NAME",
-            "FILTER_CITY_NAME",
-            "FILTER_COMPANION_CREATIVE_NAME",
-            "FILTER_USER_LIST_FIRST_PARTY_NAME",
-            "FILTER_USER_LIST_THIRD_PARTY_NAME",
-            "FILTER_NIELSEN_RESTATEMENT_DATE",
-            "FILTER_NIELSEN_DATE_RANGE",
-            "FILTER_INSERTION_ORDER_NAME",
-            "FILTER_REGION_NAME",
-            "FILTER_DMA_NAME",
-            "FILTER_TRUEVIEW_IAR_REGION_NAME",
-            "FILTER_TRUEVIEW_DMA_NAME",
-            "FILTER_TRUEVIEW_REGION_NAME",
-            "FILTER_ACTIVE_VIEW_CUSTOM_METRIC_ID",
-            "FILTER_ACTIVE_VIEW_CUSTOM_METRIC_NAME",
-            "FILTER_AD_TYPE",
-            "FILTER_ALGORITHM",
-            "FILTER_ALGORITHM_ID",
-            "FILTER_AMP_PAGE_REQUEST",
-            "FILTER_ANONYMOUS_INVENTORY_MODELING",
-            "FILTER_APP_URL",
-            "FILTER_APP_URL_EXCLUDED",
-            "FILTER_ATTRIBUTED_USERLIST",
-            "FILTER_ATTRIBUTED_USERLIST_COST",
-            "FILTER_ATTRIBUTED_USERLIST_TYPE",
-            "FILTER_ATTRIBUTION_MODEL",
-            "FILTER_AUDIENCE_LIST",
-            "FILTER_AUDIENCE_LIST_COST",
-            "FILTER_AUDIENCE_LIST_TYPE",
-            "FILTER_AUDIENCE_NAME",
-            "FILTER_AUDIENCE_TYPE",
-            "FILTER_BILLABLE_OUTCOME",
-            "FILTER_BRAND_LIFT_TYPE",
-            "FILTER_CHANNEL_TYPE",
-            "FILTER_CM_PLACEMENT_ID",
-            "FILTER_CONVERSION_SOURCE",
-            "FILTER_CONVERSION_SOURCE_ID",
-            "FILTER_COUNTRY_ID",
-            "FILTER_CREATIVE",
-            "FILTER_CREATIVE_ASSET",
-            "FILTER_CREATIVE_INTEGRATION_CODE",
-            "FILTER_CREATIVE_RENDERED_IN_AMP",
-            "FILTER_CREATIVE_SOURCE",
-            "FILTER_CREATIVE_STATUS",
-            "FILTER_DATA_PROVIDER_NAME",
-            "FILTER_DETAILED_DEMOGRAPHICS",
-            "FILTER_DETAILED_DEMOGRAPHICS_ID",
-            "FILTER_DEVICE",
-            "FILTER_GAM_INSERTION_ORDER",
-            "FILTER_GAM_LINE_ITEM",
-            "FILTER_GAM_LINE_ITEM_ID",
-            "FILTER_DIGITAL_CONTENT_LABEL",
-            "FILTER_DOMAIN",
-            "FILTER_ELIGIBLE_COOKIES_ON_FIRST_PARTY_AUDIENCE_LIST",
-            "FILTER_ELIGIBLE_COOKIES_ON_THIRD_PARTY_AUDIENCE_LIST_AND_INTEREST",
-            "FILTER_EXCHANGE",
-            "FILTER_EXCHANGE_CODE",
-            "FILTER_EXTENSION",
-            "FILTER_EXTENSION_STATUS",
-            "FILTER_EXTENSION_TYPE",
-            "FILTER_FIRST_PARTY_AUDIENCE_LIST_COST",
-            "FILTER_FIRST_PARTY_AUDIENCE_LIST_TYPE",
-            "FILTER_FLOODLIGHT_ACTIVITY",
-            "FILTER_FORMAT",
-            "FILTER_GMAIL_AGE",
-            "FILTER_GMAIL_CITY",
-            "FILTER_GMAIL_COUNTRY",
-            "FILTER_GMAIL_COUNTRY_NAME",
-            "FILTER_GMAIL_DEVICE_TYPE",
-            "FILTER_GMAIL_DEVICE_TYPE_NAME",
-            "FILTER_GMAIL_GENDER",
-            "FILTER_GMAIL_REGION",
-            "FILTER_GMAIL_REMARKETING_LIST",
-            "FILTER_HOUSEHOLD_INCOME",
-            "FILTER_IMPRESSION_COUNTING_METHOD",
-            "FILTER_YOUTUBE_PROGRAMMATIC_GUARANTEED_INSERTION_ORDER",
-            "FILTER_INSERTION_ORDER_INTEGRATION_CODE",
-            "FILTER_INSERTION_ORDER_STATUS",
-            "FILTER_INTEREST",
-            "FILTER_INVENTORY_SOURCE_GROUP",
-            "FILTER_INVENTORY_SOURCE_GROUP_ID",
-            "FILTER_INVENTORY_SOURCE_ID",
-            "FILTER_INVENTORY_SOURCE_NAME",
-            "FILTER_LIFE_EVENT",
-            "FILTER_LIFE_EVENTS",
-            "FILTER_LINE_ITEM_INTEGRATION_CODE",
-            "FILTER_LINE_ITEM_NAME",
-            "FILTER_LINE_ITEM_STATUS",
-            "FILTER_MATCH_RATIO",
-            "FILTER_MEASUREMENT_SOURCE",
-            "FILTER_MEDIA_PLAN_NAME",
-            "FILTER_PARENTAL_STATUS",
-            "FILTER_PLACEMENT_ALL_YOUTUBE_CHANNELS",
-            "FILTER_PLATFORM",
-            "FILTER_PLAYBACK_METHOD",
-            "FILTER_POSITION_IN_CONTENT",
-            "FILTER_PUBLISHER_PROPERTY",
-            "FILTER_PUBLISHER_PROPERTY_ID",
-            "FILTER_PUBLISHER_PROPERTY_SECTION",
-            "FILTER_PUBLISHER_PROPERTY_SECTION_ID",
-            "FILTER_REFUND_REASON",
-            "FILTER_REMARKETING_LIST",
-            "FILTER_REWARDED",
-            "FILTER_SENSITIVE_CATEGORY",
-            "FILTER_SERVED_PIXEL_DENSITY",
-            "FILTER_TARGETED_DATA_PROVIDERS",
-            "FILTER_THIRD_PARTY_AUDIENCE_LIST_COST",
-            "FILTER_THIRD_PARTY_AUDIENCE_LIST_TYPE",
-            "FILTER_TRUEVIEW_AD",
-            "FILTER_TRUEVIEW_AD_GROUP",
-            "FILTER_TRUEVIEW_DETAILED_DEMOGRAPHICS",
-            "FILTER_TRUEVIEW_DETAILED_DEMOGRAPHICS_ID",
-            "FILTER_TRUEVIEW_HOUSEHOLD_INCOME",
-            "FILTER_TRUEVIEW_IAR_COUNTRY_NAME",
-            "FILTER_TRUEVIEW_REMARKETING_LIST_NAME",
-            "FILTER_VARIANT_ID",
-            "FILTER_VARIANT_NAME",
-            "FILTER_VARIANT_VERSION",
-            "FILTER_VERIFICATION_VIDEO_PLAYER_SIZE",
-            "FILTER_VERIFICATION_VIDEO_POSITION",
-            "FILTER_VIDEO_COMPANION_CREATIVE_SIZE",
-            "FILTER_VIDEO_CONTINUOUS_PLAY",
-            "FILTER_VIDEO_DURATION",
-            "FILTER_YOUTUBE_ADAPTED_AUDIENCE_LIST",
-            "FILTER_YOUTUBE_AD_VIDEO",
-            "FILTER_YOUTUBE_AD_VIDEO_ID",
-            "FILTER_YOUTUBE_CHANNEL",
-            "FILTER_YOUTUBE_PROGRAMMATIC_GUARANTEED_ADVERTISER",
-            "FILTER_YOUTUBE_PROGRAMMATIC_GUARANTEED_PARTNER",
-            "FILTER_YOUTUBE_VIDEO",
-            "FILTER_ZIP_POSTAL_CODE",
-            "FILTER_PLACEMENT_NAME_ALL_YOUTUBE_CHANNELS",
-            "FILTER_TRUEVIEW_PLACEMENT_ID",
-            "FILTER_PATH_PATTERN_ID",
-            "FILTER_PATH_EVENT_INDEX",
-            "FILTER_EVENT_TYPE",
-            "FILTER_CHANNEL_GROUPING",
-            "FILTER_OM_SDK_AVAILABLE",
-            "FILTER_DATA_SOURCE"
-          ],
-          "type": "string",
-          "description": "Dimension the filter is applied to."
-        },
-        "match": {
-          "description": "Indicates how the filter should be matched to the value.",
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "UNKNOWN",
-            "EXACT",
-            "PARTIAL",
-            "BEGINS_WITH",
-            "WILDCARD_EXPRESSION"
-          ]
-        },
-        "values": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "Value to filter on."
-        }
-      }
-    },
-    "UploadStatus": {
-      "properties": {
-        "errors": {
-          "description": "Reasons why upload can't be completed.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "rowStatus": {
-          "description": "Per-row upload status.",
-          "type": "array",
-          "items": {
-            "$ref": "RowStatus"
-          }
-        }
-      },
-      "description": "Represents the status of upload.",
-      "type": "object",
-      "id": "UploadStatus"
-    },
-    "ReportMetadata": {
-      "description": "Report metadata.",
-      "type": "object",
-      "properties": {
-        "reportDataEndTimeMs": {
-          "format": "int64",
-          "description": "The ending time for the data that is shown in the report.",
-          "type": "string"
-        },
-        "googleCloudStoragePath": {
-          "description": "The path to the location in Google Cloud Storage where the report is stored.",
-          "type": "string"
-        },
-        "status": {
-          "$ref": "ReportStatus",
-          "description": "Report status."
-        },
-        "reportDataStartTimeMs": {
-          "format": "int64",
-          "type": "string",
-          "description": "The starting time for the data that is shown in the report."
-        }
-      },
-      "id": "ReportMetadata"
-    }
-  },
-  "discoveryVersion": "v1",
-  "canonicalName": "DoubleClick Bid Manager",
-  "documentationLink": "https://developers.google.com/bid-manager/",
-  "kind": "discovery#restDescription",
-  "revision": "20201105",
-  "batchPath": "batch",
-  "fullyEncodeReservedExpansion": true,
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/doubleclickbidmanager": {
-          "description": "View and manage your reports in DoubleClick Bid Manager"
-        }
-      }
-    }
-  },
-  "parameters": {
-    "alt": {
-      "default": "json",
-      "description": "Data format for response.",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "location": "query",
-      "type": "string",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ]
-    },
-    "quotaUser": {
-      "type": "string",
-      "location": "query",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters."
-    },
-    "fields": {
-      "location": "query",
-      "type": "string",
-      "description": "Selector specifying which fields to include in a partial response."
-    },
-    "key": {
-      "type": "string",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "location": "query"
-    },
-    "callback": {
-      "location": "query",
-      "type": "string",
-      "description": "JSONP"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "default": "true",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean"
-    },
-    "access_token": {
-      "location": "query",
-      "description": "OAuth access token.",
-      "type": "string"
-    },
-    "upload_protocol": {
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "location": "query"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "$.xgafv": {
-      "location": "query",
-      "description": "V1 error format.",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ]
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    }
-  },
-  "version": "v1.1",
-  "resources": {
-    "queries": {
-      "methods": {
-        "createquery": {
-          "response": {
-            "$ref": "Query"
-          },
-          "httpMethod": "POST",
-          "request": {
-            "$ref": "Query"
-          },
-          "path": "query",
-          "parameters": {
-            "asynchronous": {
-              "type": "boolean",
-              "default": "false",
-              "location": "query",
-              "description": "If true, tries to run the query asynchronously. Only applicable when the frequency is ONE_TIME."
+            "methods": {
+                "createquery": {
+                    "description": "Creates a query.",
+                    "flatPath": "query",
+                    "httpMethod": "POST",
+                    "id": "doubleclickbidmanager.queries.createquery",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "asynchronous": {
+                            "default": "false",
+                            "description": "If true, tries to run the query asynchronously. Only applicable when the frequency is ONE_TIME.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "query",
+                    "request": {
+                        "$ref": "Query"
+                    },
+                    "response": {
+                        "$ref": "Query"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/doubleclickbidmanager"
+                    ]
+                },
+                "deletequery": {
+                    "description": "Deletes a stored query as well as the associated stored reports.",
+                    "flatPath": "query/{queryId}",
+                    "httpMethod": "DELETE",
+                    "id": "doubleclickbidmanager.queries.deletequery",
+                    "parameterOrder": [
+                        "queryId"
+                    ],
+                    "parameters": {
+                        "queryId": {
+                            "description": "Query ID to delete.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "query/{queryId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/doubleclickbidmanager"
+                    ]
+                },
+                "getquery": {
+                    "description": "Retrieves a stored query.",
+                    "flatPath": "query/{queryId}",
+                    "httpMethod": "GET",
+                    "id": "doubleclickbidmanager.queries.getquery",
+                    "parameterOrder": [
+                        "queryId"
+                    ],
+                    "parameters": {
+                        "queryId": {
+                            "description": "Query ID to retrieve.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "query/{queryId}",
+                    "response": {
+                        "$ref": "Query"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/doubleclickbidmanager"
+                    ]
+                },
+                "listqueries": {
+                    "description": "Retrieves stored queries.",
+                    "flatPath": "queries",
+                    "httpMethod": "GET",
+                    "id": "doubleclickbidmanager.queries.listqueries",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "pageSize": {
+                            "description": "Maximum number of results per page. Must be between 1 and 100. Defaults to 100 if unspecified.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Optional pagination token.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "queries",
+                    "response": {
+                        "$ref": "ListQueriesResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/doubleclickbidmanager"
+                    ]
+                },
+                "runquery": {
+                    "description": "Runs a stored query to generate a report.",
+                    "flatPath": "query/{queryId}",
+                    "httpMethod": "POST",
+                    "id": "doubleclickbidmanager.queries.runquery",
+                    "parameterOrder": [
+                        "queryId"
+                    ],
+                    "parameters": {
+                        "asynchronous": {
+                            "default": "false",
+                            "description": "If true, tries to run the query asynchronously.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "queryId": {
+                            "description": "Query ID to run.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "query/{queryId}",
+                    "request": {
+                        "$ref": "RunQueryRequest"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/doubleclickbidmanager"
+                    ]
+                }
             }
-          },
-          "parameterOrder": [],
-          "scopes": [
-            "https://www.googleapis.com/auth/doubleclickbidmanager"
-          ],
-          "id": "doubleclickbidmanager.queries.createquery",
-          "flatPath": "query",
-          "description": "Creates a query."
         },
-        "deletequery": {
-          "flatPath": "query/{queryId}",
-          "parameterOrder": [
-            "queryId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/doubleclickbidmanager"
-          ],
-          "description": "Deletes a stored query as well as the associated stored reports.",
-          "path": "query/{queryId}",
-          "httpMethod": "DELETE",
-          "parameters": {
-            "queryId": {
-              "description": "Query ID to delete.",
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "format": "int64"
+        "reports": {
+            "methods": {
+                "listreports": {
+                    "description": "Retrieves stored reports.",
+                    "flatPath": "queries/{queryId}/reports",
+                    "httpMethod": "GET",
+                    "id": "doubleclickbidmanager.reports.listreports",
+                    "parameterOrder": [
+                        "queryId"
+                    ],
+                    "parameters": {
+                        "pageSize": {
+                            "description": "Maximum number of results per page. Must be between 1 and 100. Defaults to 100 if unspecified.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Optional pagination token.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "queryId": {
+                            "description": "Query ID with which the reports are associated.",
+                            "format": "int64",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "queries/{queryId}/reports",
+                    "response": {
+                        "$ref": "ListReportsResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/doubleclickbidmanager"
+                    ]
+                }
             }
-          },
-          "id": "doubleclickbidmanager.queries.deletequery"
         },
-        "getquery": {
-          "path": "query/{queryId}",
-          "response": {
-            "$ref": "Query"
-          },
-          "id": "doubleclickbidmanager.queries.getquery",
-          "flatPath": "query/{queryId}",
-          "scopes": [
-            "https://www.googleapis.com/auth/doubleclickbidmanager"
-          ],
-          "parameterOrder": [
-            "queryId"
-          ],
-          "httpMethod": "GET",
-          "parameters": {
-            "queryId": {
-              "required": true,
-              "type": "string",
-              "format": "int64",
-              "description": "Query ID to retrieve.",
-              "location": "path"
+        "sdf": {
+            "methods": {
+                "download": {
+                    "description": "Retrieves entities in SDF format.",
+                    "flatPath": "sdf/download",
+                    "httpMethod": "POST",
+                    "id": "doubleclickbidmanager.sdf.download",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "sdf/download",
+                    "request": {
+                        "$ref": "DownloadRequest"
+                    },
+                    "response": {
+                        "$ref": "DownloadResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/doubleclickbidmanager"
+                    ]
+                }
             }
-          },
-          "description": "Retrieves a stored query."
-        },
-        "runquery": {
-          "flatPath": "query/{queryId}",
-          "path": "query/{queryId}",
-          "httpMethod": "POST",
-          "request": {
-            "$ref": "RunQueryRequest"
-          },
-          "parameters": {
-            "asynchronous": {
-              "location": "query",
-              "default": "false",
-              "description": "If true, tries to run the query asynchronously.",
-              "type": "boolean"
+        }
+    },
+    "revision": "20210209",
+    "rootUrl": "https://doubleclickbidmanager.googleapis.com/",
+    "schemas": {
+        "ChannelGrouping": {
+            "description": "A channel grouping defines a set of rules that can be used to categorize events in a path report.",
+            "id": "ChannelGrouping",
+            "properties": {
+                "fallbackName": {
+                    "description": "The name to apply to an event that does not match any of the rules in the channel grouping.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Channel Grouping name.",
+                    "type": "string"
+                },
+                "rules": {
+                    "description": "Rules within Channel Grouping. There is a limit of 100 rules that can be set per channel grouping.",
+                    "items": {
+                        "$ref": "Rule"
+                    },
+                    "type": "array"
+                }
             },
-            "queryId": {
-              "location": "path",
-              "required": true,
-              "format": "int64",
-              "description": "Query ID to run.",
-              "type": "string"
-            }
-          },
-          "description": "Runs a stored query to generate a report.",
-          "parameterOrder": [
-            "queryId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/doubleclickbidmanager"
-          ],
-          "id": "doubleclickbidmanager.queries.runquery"
+            "type": "object"
         },
-        "listqueries": {
-          "description": "Retrieves stored queries.",
-          "path": "queries",
-          "id": "doubleclickbidmanager.queries.listqueries",
-          "parameters": {
-            "pageToken": {
-              "type": "string",
-              "description": "Optional pagination token.",
-              "location": "query"
+        "DisjunctiveMatchStatement": {
+            "description": "DisjunctiveMatchStatement that OR's all contained filters.",
+            "id": "DisjunctiveMatchStatement",
+            "properties": {
+                "eventFilters": {
+                    "description": "Filters. There is a limit of 100 filters that can be set per disjunctive match statement.",
+                    "items": {
+                        "$ref": "EventFilter"
+                    },
+                    "type": "array"
+                }
             },
-            "pageSize": {
-              "location": "query",
-              "type": "integer",
-              "format": "int32",
-              "description": "Maximum number of results per page. Must be between 1 and 100. Defaults to 100 if unspecified."
-            }
-          },
-          "parameterOrder": [],
-          "response": {
-            "$ref": "ListQueriesResponse"
-          },
-          "flatPath": "queries",
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/doubleclickbidmanager"
-          ]
-        }
-      }
-    },
-    "reports": {
-      "methods": {
-        "listreports": {
-          "flatPath": "queries/{queryId}/reports",
-          "parameterOrder": [
-            "queryId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/doubleclickbidmanager"
-          ],
-          "response": {
-            "$ref": "ListReportsResponse"
-          },
-          "httpMethod": "GET",
-          "id": "doubleclickbidmanager.reports.listreports",
-          "parameters": {
-            "queryId": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "format": "int64",
-              "description": "Query ID with which the reports are associated."
-            },
-            "pageSize": {
-              "description": "Maximum number of results per page. Must be between 1 and 100. Defaults to 100 if unspecified.",
-              "location": "query",
-              "format": "int32",
-              "type": "integer"
-            },
-            "pageToken": {
-              "description": "Optional pagination token.",
-              "location": "query",
-              "type": "string"
-            }
-          },
-          "path": "queries/{queryId}/reports",
-          "description": "Retrieves stored reports."
-        }
-      }
-    },
-    "lineitems": {
-      "methods": {
-        "downloadlineitems": {
-          "parameters": {},
-          "httpMethod": "POST",
-          "id": "doubleclickbidmanager.lineitems.downloadlineitems",
-          "request": {
-            "$ref": "DownloadLineItemsRequest"
-          },
-          "path": "lineitems/downloadlineitems",
-          "response": {
-            "$ref": "DownloadLineItemsResponse"
-          },
-          "parameterOrder": [],
-          "scopes": [
-            "https://www.googleapis.com/auth/doubleclickbidmanager"
-          ],
-          "flatPath": "lineitems/downloadlineitems",
-          "description": "Retrieves line items in CSV format. YouTube & partners line items are not supported."
+            "type": "object"
         },
-        "uploadlineitems": {
-          "parameterOrder": [],
-          "scopes": [
-            "https://www.googleapis.com/auth/doubleclickbidmanager"
-          ],
-          "flatPath": "lineitems/uploadlineitems",
-          "parameters": {},
-          "httpMethod": "POST",
-          "request": {
-            "$ref": "UploadLineItemsRequest"
-          },
-          "response": {
-            "$ref": "UploadLineItemsResponse"
-          },
-          "path": "lineitems/uploadlineitems",
-          "id": "doubleclickbidmanager.lineitems.uploadlineitems",
-          "description": "Uploads line items in CSV format. YouTube & partners line items are not supported."
+        "DownloadLineItemsRequest": {
+            "description": "Request to fetch stored line items.",
+            "id": "DownloadLineItemsRequest",
+            "properties": {
+                "fileSpec": {
+                    "description": "File specification (column names, types, order) in which the line items will be returned. Default to EWF.",
+                    "enum": [
+                        "EWF"
+                    ],
+                    "enumDescriptions": [
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "filterIds": {
+                    "description": "Ids of the specified filter type used to filter line items to fetch. If omitted, all the line items will be returned.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "filterType": {
+                    "description": "Filter type used to filter line items to fetch.",
+                    "enum": [
+                        "ADVERTISER_ID",
+                        "INSERTION_ORDER_ID",
+                        "LINE_ITEM_ID"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "format": {
+                    "description": "Format in which the line items will be returned. Default to CSV.",
+                    "enum": [
+                        "CSV"
+                    ],
+                    "enumDescriptions": [
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DownloadLineItemsResponse": {
+            "description": "Download line items response.",
+            "id": "DownloadLineItemsResponse",
+            "properties": {
+                "lineItems": {
+                    "description": "Retrieved line items in CSV format. For more information about file formats, see Entity Write File Format.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DownloadRequest": {
+            "description": "Request to fetch stored inventory sources, campaigns, insertion orders, line items, YouTube ad groups and ads.",
+            "id": "DownloadRequest",
+            "properties": {
+                "fileTypes": {
+                    "description": "File types that will be returned. If INVENTORY_SOURCE is requested, no other file types may be requested. Acceptable values are: - \"AD\" - \"AD_GROUP\" - \"CAMPAIGN\" - \"INSERTION_ORDER\" - \"INVENTORY_SOURCE\" - \"LINE_ITEM\" ",
+                    "items": {
+                        "enum": [
+                            "INSERTION_ORDER",
+                            "LINE_ITEM",
+                            "AD_GROUP",
+                            "AD",
+                            "CAMPAIGN",
+                            "INVENTORY_SOURCE"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "filterIds": {
+                    "description": "The IDs of the specified filter type. This is used to filter entities to fetch. At least one ID must be specified.",
+                    "items": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "filterType": {
+                    "description": "Filter type used to filter entities to fetch. PARTNER_ID and INVENTORY_SOURCE_ID may only be used when downloading inventory sources.",
+                    "enum": [
+                        "ADVERTISER_ID",
+                        "INSERTION_ORDER_ID",
+                        "LINE_ITEM_ID",
+                        "CAMPAIGN_ID",
+                        "INVENTORY_SOURCE_ID",
+                        "PARTNER_ID"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "version": {
+                    "description": "SDF Version (column names, types, order) in which the entities will be returned. Default to 5.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DownloadResponse": {
+            "description": "Download response.",
+            "id": "DownloadResponse",
+            "properties": {
+                "adGroups": {
+                    "description": "Retrieved ad groups in SDF format.",
+                    "type": "string"
+                },
+                "ads": {
+                    "description": "Retrieved ads in SDF format.",
+                    "type": "string"
+                },
+                "campaigns": {
+                    "description": "Retrieved campaigns in SDF format.",
+                    "type": "string"
+                },
+                "insertionOrders": {
+                    "description": "Retrieved insertion orders in SDF format.",
+                    "type": "string"
+                },
+                "inventorySources": {
+                    "type": "string"
+                },
+                "lineItems": {
+                    "description": "Retrieved line items in SDF format.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "EventFilter": {
+            "description": "Defines the type of filter to be applied to the path, a DV360 event dimension filter.",
+            "id": "EventFilter",
+            "properties": {
+                "dimensionFilter": {
+                    "$ref": "PathQueryOptionsFilter",
+                    "description": "Filter on a dimension."
+                }
+            },
+            "type": "object"
+        },
+        "FilterPair": {
+            "description": "Filter used to match traffic data in your report.",
+            "id": "FilterPair",
+            "properties": {
+                "type": {
+                    "description": "Filter type.",
+                    "enum": [
+                        "FILTER_UNKNOWN",
+                        "FILTER_DATE",
+                        "FILTER_DAY_OF_WEEK",
+                        "FILTER_WEEK",
+                        "FILTER_MONTH",
+                        "FILTER_YEAR",
+                        "FILTER_TIME_OF_DAY",
+                        "FILTER_CONVERSION_DELAY",
+                        "FILTER_CREATIVE_ID",
+                        "FILTER_CREATIVE_SIZE",
+                        "FILTER_CREATIVE_TYPE",
+                        "FILTER_EXCHANGE_ID",
+                        "FILTER_AD_POSITION",
+                        "FILTER_PUBLIC_INVENTORY",
+                        "FILTER_INVENTORY_SOURCE",
+                        "FILTER_CITY",
+                        "FILTER_REGION",
+                        "FILTER_DMA",
+                        "FILTER_COUNTRY",
+                        "FILTER_SITE_ID",
+                        "FILTER_CHANNEL_ID",
+                        "FILTER_PARTNER",
+                        "FILTER_ADVERTISER",
+                        "FILTER_INSERTION_ORDER",
+                        "FILTER_LINE_ITEM",
+                        "FILTER_PARTNER_CURRENCY",
+                        "FILTER_ADVERTISER_CURRENCY",
+                        "FILTER_ADVERTISER_TIMEZONE",
+                        "FILTER_LINE_ITEM_TYPE",
+                        "FILTER_USER_LIST",
+                        "FILTER_USER_LIST_FIRST_PARTY",
+                        "FILTER_USER_LIST_THIRD_PARTY",
+                        "FILTER_TARGETED_USER_LIST",
+                        "FILTER_DATA_PROVIDER",
+                        "FILTER_ORDER_ID",
+                        "FILTER_VIDEO_PLAYER_SIZE",
+                        "FILTER_VIDEO_DURATION_SECONDS",
+                        "FILTER_KEYWORD",
+                        "FILTER_PAGE_CATEGORY",
+                        "FILTER_CAMPAIGN_DAILY_FREQUENCY",
+                        "FILTER_LINE_ITEM_DAILY_FREQUENCY",
+                        "FILTER_LINE_ITEM_LIFETIME_FREQUENCY",
+                        "FILTER_OS",
+                        "FILTER_BROWSER",
+                        "FILTER_CARRIER",
+                        "FILTER_SITE_LANGUAGE",
+                        "FILTER_INVENTORY_FORMAT",
+                        "FILTER_ZIP_CODE",
+                        "FILTER_VIDEO_RATING_TIER",
+                        "FILTER_VIDEO_FORMAT_SUPPORT",
+                        "FILTER_VIDEO_SKIPPABLE_SUPPORT",
+                        "FILTER_VIDEO_CREATIVE_DURATION",
+                        "FILTER_PAGE_LAYOUT",
+                        "FILTER_VIDEO_AD_POSITION_IN_STREAM",
+                        "FILTER_AGE",
+                        "FILTER_GENDER",
+                        "FILTER_QUARTER",
+                        "FILTER_TRUEVIEW_CONVERSION_TYPE",
+                        "FILTER_MOBILE_GEO",
+                        "FILTER_MRAID_SUPPORT",
+                        "FILTER_ACTIVE_VIEW_EXPECTED_VIEWABILITY",
+                        "FILTER_VIDEO_CREATIVE_DURATION_SKIPPABLE",
+                        "FILTER_NIELSEN_COUNTRY_CODE",
+                        "FILTER_NIELSEN_DEVICE_ID",
+                        "FILTER_NIELSEN_GENDER",
+                        "FILTER_NIELSEN_AGE",
+                        "FILTER_INVENTORY_SOURCE_TYPE",
+                        "FILTER_CREATIVE_WIDTH",
+                        "FILTER_CREATIVE_HEIGHT",
+                        "FILTER_DFP_ORDER_ID",
+                        "FILTER_TRUEVIEW_AGE",
+                        "FILTER_TRUEVIEW_GENDER",
+                        "FILTER_TRUEVIEW_PARENTAL_STATUS",
+                        "FILTER_TRUEVIEW_REMARKETING_LIST",
+                        "FILTER_TRUEVIEW_INTEREST",
+                        "FILTER_TRUEVIEW_AD_GROUP_ID",
+                        "FILTER_TRUEVIEW_AD_GROUP_AD_ID",
+                        "FILTER_TRUEVIEW_IAR_LANGUAGE",
+                        "FILTER_TRUEVIEW_IAR_GENDER",
+                        "FILTER_TRUEVIEW_IAR_AGE",
+                        "FILTER_TRUEVIEW_IAR_CATEGORY",
+                        "FILTER_TRUEVIEW_IAR_COUNTRY",
+                        "FILTER_TRUEVIEW_IAR_CITY",
+                        "FILTER_TRUEVIEW_IAR_REGION",
+                        "FILTER_TRUEVIEW_IAR_ZIPCODE",
+                        "FILTER_TRUEVIEW_IAR_REMARKETING_LIST",
+                        "FILTER_TRUEVIEW_IAR_INTEREST",
+                        "FILTER_TRUEVIEW_IAR_PARENTAL_STATUS",
+                        "FILTER_TRUEVIEW_IAR_TIME_OF_DAY",
+                        "FILTER_TRUEVIEW_CUSTOM_AFFINITY",
+                        "FILTER_TRUEVIEW_CATEGORY",
+                        "FILTER_TRUEVIEW_KEYWORD",
+                        "FILTER_TRUEVIEW_PLACEMENT",
+                        "FILTER_TRUEVIEW_URL",
+                        "FILTER_TRUEVIEW_COUNTRY",
+                        "FILTER_TRUEVIEW_REGION",
+                        "FILTER_TRUEVIEW_CITY",
+                        "FILTER_TRUEVIEW_DMA",
+                        "FILTER_TRUEVIEW_ZIPCODE",
+                        "FILTER_NOT_SUPPORTED",
+                        "FILTER_MEDIA_PLAN",
+                        "FILTER_TRUEVIEW_IAR_YOUTUBE_CHANNEL",
+                        "FILTER_TRUEVIEW_IAR_YOUTUBE_VIDEO",
+                        "FILTER_SKIPPABLE_SUPPORT",
+                        "FILTER_COMPANION_CREATIVE_ID",
+                        "FILTER_BUDGET_SEGMENT_DESCRIPTION",
+                        "FILTER_FLOODLIGHT_ACTIVITY_ID",
+                        "FILTER_DEVICE_MODEL",
+                        "FILTER_DEVICE_MAKE",
+                        "FILTER_DEVICE_TYPE",
+                        "FILTER_CREATIVE_ATTRIBUTE",
+                        "FILTER_INVENTORY_COMMITMENT_TYPE",
+                        "FILTER_INVENTORY_RATE_TYPE",
+                        "FILTER_INVENTORY_DELIVERY_METHOD",
+                        "FILTER_INVENTORY_SOURCE_EXTERNAL_ID",
+                        "FILTER_AUTHORIZED_SELLER_STATE",
+                        "FILTER_VIDEO_DURATION_SECONDS_RANGE",
+                        "FILTER_PARTNER_NAME",
+                        "FILTER_PARTNER_STATUS",
+                        "FILTER_ADVERTISER_NAME",
+                        "FILTER_ADVERTISER_INTEGRATION_CODE",
+                        "FILTER_ADVERTISER_INTEGRATION_STATUS",
+                        "FILTER_CARRIER_NAME",
+                        "FILTER_CHANNEL_NAME",
+                        "FILTER_CITY_NAME",
+                        "FILTER_COMPANION_CREATIVE_NAME",
+                        "FILTER_USER_LIST_FIRST_PARTY_NAME",
+                        "FILTER_USER_LIST_THIRD_PARTY_NAME",
+                        "FILTER_NIELSEN_RESTATEMENT_DATE",
+                        "FILTER_NIELSEN_DATE_RANGE",
+                        "FILTER_INSERTION_ORDER_NAME",
+                        "FILTER_REGION_NAME",
+                        "FILTER_DMA_NAME",
+                        "FILTER_TRUEVIEW_IAR_REGION_NAME",
+                        "FILTER_TRUEVIEW_DMA_NAME",
+                        "FILTER_TRUEVIEW_REGION_NAME",
+                        "FILTER_ACTIVE_VIEW_CUSTOM_METRIC_ID",
+                        "FILTER_ACTIVE_VIEW_CUSTOM_METRIC_NAME",
+                        "FILTER_AD_TYPE",
+                        "FILTER_ALGORITHM",
+                        "FILTER_ALGORITHM_ID",
+                        "FILTER_AMP_PAGE_REQUEST",
+                        "FILTER_ANONYMOUS_INVENTORY_MODELING",
+                        "FILTER_APP_URL",
+                        "FILTER_APP_URL_EXCLUDED",
+                        "FILTER_ATTRIBUTED_USERLIST",
+                        "FILTER_ATTRIBUTED_USERLIST_COST",
+                        "FILTER_ATTRIBUTED_USERLIST_TYPE",
+                        "FILTER_ATTRIBUTION_MODEL",
+                        "FILTER_AUDIENCE_LIST",
+                        "FILTER_AUDIENCE_LIST_COST",
+                        "FILTER_AUDIENCE_LIST_TYPE",
+                        "FILTER_AUDIENCE_NAME",
+                        "FILTER_AUDIENCE_TYPE",
+                        "FILTER_BILLABLE_OUTCOME",
+                        "FILTER_BRAND_LIFT_TYPE",
+                        "FILTER_CHANNEL_TYPE",
+                        "FILTER_CM_PLACEMENT_ID",
+                        "FILTER_CONVERSION_SOURCE",
+                        "FILTER_CONVERSION_SOURCE_ID",
+                        "FILTER_COUNTRY_ID",
+                        "FILTER_CREATIVE",
+                        "FILTER_CREATIVE_ASSET",
+                        "FILTER_CREATIVE_INTEGRATION_CODE",
+                        "FILTER_CREATIVE_RENDERED_IN_AMP",
+                        "FILTER_CREATIVE_SOURCE",
+                        "FILTER_CREATIVE_STATUS",
+                        "FILTER_DATA_PROVIDER_NAME",
+                        "FILTER_DETAILED_DEMOGRAPHICS",
+                        "FILTER_DETAILED_DEMOGRAPHICS_ID",
+                        "FILTER_DEVICE",
+                        "FILTER_GAM_INSERTION_ORDER",
+                        "FILTER_GAM_LINE_ITEM",
+                        "FILTER_GAM_LINE_ITEM_ID",
+                        "FILTER_DIGITAL_CONTENT_LABEL",
+                        "FILTER_DOMAIN",
+                        "FILTER_ELIGIBLE_COOKIES_ON_FIRST_PARTY_AUDIENCE_LIST",
+                        "FILTER_ELIGIBLE_COOKIES_ON_THIRD_PARTY_AUDIENCE_LIST_AND_INTEREST",
+                        "FILTER_EXCHANGE",
+                        "FILTER_EXCHANGE_CODE",
+                        "FILTER_EXTENSION",
+                        "FILTER_EXTENSION_STATUS",
+                        "FILTER_EXTENSION_TYPE",
+                        "FILTER_FIRST_PARTY_AUDIENCE_LIST_COST",
+                        "FILTER_FIRST_PARTY_AUDIENCE_LIST_TYPE",
+                        "FILTER_FLOODLIGHT_ACTIVITY",
+                        "FILTER_FORMAT",
+                        "FILTER_GMAIL_AGE",
+                        "FILTER_GMAIL_CITY",
+                        "FILTER_GMAIL_COUNTRY",
+                        "FILTER_GMAIL_COUNTRY_NAME",
+                        "FILTER_GMAIL_DEVICE_TYPE",
+                        "FILTER_GMAIL_DEVICE_TYPE_NAME",
+                        "FILTER_GMAIL_GENDER",
+                        "FILTER_GMAIL_REGION",
+                        "FILTER_GMAIL_REMARKETING_LIST",
+                        "FILTER_HOUSEHOLD_INCOME",
+                        "FILTER_IMPRESSION_COUNTING_METHOD",
+                        "FILTER_YOUTUBE_PROGRAMMATIC_GUARANTEED_INSERTION_ORDER",
+                        "FILTER_INSERTION_ORDER_INTEGRATION_CODE",
+                        "FILTER_INSERTION_ORDER_STATUS",
+                        "FILTER_INTEREST",
+                        "FILTER_INVENTORY_SOURCE_GROUP",
+                        "FILTER_INVENTORY_SOURCE_GROUP_ID",
+                        "FILTER_INVENTORY_SOURCE_ID",
+                        "FILTER_INVENTORY_SOURCE_NAME",
+                        "FILTER_LIFE_EVENT",
+                        "FILTER_LIFE_EVENTS",
+                        "FILTER_LINE_ITEM_INTEGRATION_CODE",
+                        "FILTER_LINE_ITEM_NAME",
+                        "FILTER_LINE_ITEM_STATUS",
+                        "FILTER_MATCH_RATIO",
+                        "FILTER_MEASUREMENT_SOURCE",
+                        "FILTER_MEDIA_PLAN_NAME",
+                        "FILTER_PARENTAL_STATUS",
+                        "FILTER_PLACEMENT_ALL_YOUTUBE_CHANNELS",
+                        "FILTER_PLATFORM",
+                        "FILTER_PLAYBACK_METHOD",
+                        "FILTER_POSITION_IN_CONTENT",
+                        "FILTER_PUBLISHER_PROPERTY",
+                        "FILTER_PUBLISHER_PROPERTY_ID",
+                        "FILTER_PUBLISHER_PROPERTY_SECTION",
+                        "FILTER_PUBLISHER_PROPERTY_SECTION_ID",
+                        "FILTER_REFUND_REASON",
+                        "FILTER_REMARKETING_LIST",
+                        "FILTER_REWARDED",
+                        "FILTER_SENSITIVE_CATEGORY",
+                        "FILTER_SERVED_PIXEL_DENSITY",
+                        "FILTER_TARGETED_DATA_PROVIDERS",
+                        "FILTER_THIRD_PARTY_AUDIENCE_LIST_COST",
+                        "FILTER_THIRD_PARTY_AUDIENCE_LIST_TYPE",
+                        "FILTER_TRUEVIEW_AD",
+                        "FILTER_TRUEVIEW_AD_GROUP",
+                        "FILTER_TRUEVIEW_DETAILED_DEMOGRAPHICS",
+                        "FILTER_TRUEVIEW_DETAILED_DEMOGRAPHICS_ID",
+                        "FILTER_TRUEVIEW_HOUSEHOLD_INCOME",
+                        "FILTER_TRUEVIEW_IAR_COUNTRY_NAME",
+                        "FILTER_TRUEVIEW_REMARKETING_LIST_NAME",
+                        "FILTER_VARIANT_ID",
+                        "FILTER_VARIANT_NAME",
+                        "FILTER_VARIANT_VERSION",
+                        "FILTER_VERIFICATION_VIDEO_PLAYER_SIZE",
+                        "FILTER_VERIFICATION_VIDEO_POSITION",
+                        "FILTER_VIDEO_COMPANION_CREATIVE_SIZE",
+                        "FILTER_VIDEO_CONTINUOUS_PLAY",
+                        "FILTER_VIDEO_DURATION",
+                        "FILTER_YOUTUBE_ADAPTED_AUDIENCE_LIST",
+                        "FILTER_YOUTUBE_AD_VIDEO",
+                        "FILTER_YOUTUBE_AD_VIDEO_ID",
+                        "FILTER_YOUTUBE_CHANNEL",
+                        "FILTER_YOUTUBE_PROGRAMMATIC_GUARANTEED_ADVERTISER",
+                        "FILTER_YOUTUBE_PROGRAMMATIC_GUARANTEED_PARTNER",
+                        "FILTER_YOUTUBE_VIDEO",
+                        "FILTER_ZIP_POSTAL_CODE",
+                        "FILTER_PLACEMENT_NAME_ALL_YOUTUBE_CHANNELS",
+                        "FILTER_TRUEVIEW_PLACEMENT_ID",
+                        "FILTER_PATH_PATTERN_ID",
+                        "FILTER_PATH_EVENT_INDEX",
+                        "FILTER_EVENT_TYPE",
+                        "FILTER_CHANNEL_GROUPING",
+                        "FILTER_OM_SDK_AVAILABLE",
+                        "FILTER_DATA_SOURCE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "value": {
+                    "description": "Filter value.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListQueriesResponse": {
+            "description": "List queries response.",
+            "id": "ListQueriesResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"doubleclickbidmanager#listQueriesResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Next page's pagination token if one exists.",
+                    "type": "string"
+                },
+                "queries": {
+                    "description": "Retrieved queries.",
+                    "items": {
+                        "$ref": "Query"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListReportsResponse": {
+            "description": "List reports response.",
+            "id": "ListReportsResponse",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"doubleclickbidmanager#listReportsResponse\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Next page's pagination token if one exists.",
+                    "type": "string"
+                },
+                "reports": {
+                    "description": "Retrieved reports.",
+                    "items": {
+                        "$ref": "Report"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Options": {
+            "description": "Additional query options.",
+            "id": "Options",
+            "properties": {
+                "includeOnlyTargetedUserLists": {
+                    "description": "Set to true and filter your report by `FILTER_INSERTION_ORDER` or `FILTER_LINE_ITEM` to include data for audience lists specifically targeted by those items.",
+                    "type": "boolean"
+                },
+                "pathQueryOptions": {
+                    "$ref": "PathQueryOptions",
+                    "description": "Options that contain Path Filters and Custom Channel Groupings."
+                }
+            },
+            "type": "object"
+        },
+        "Parameters": {
+            "description": "Parameters of a query or report.",
+            "id": "Parameters",
+            "properties": {
+                "filters": {
+                    "description": "Filters used to match traffic data in your report.",
+                    "items": {
+                        "$ref": "FilterPair"
+                    },
+                    "type": "array"
+                },
+                "groupBys": {
+                    "description": "Data is grouped by the filters listed in this field.",
+                    "items": {
+                        "enum": [
+                            "FILTER_UNKNOWN",
+                            "FILTER_DATE",
+                            "FILTER_DAY_OF_WEEK",
+                            "FILTER_WEEK",
+                            "FILTER_MONTH",
+                            "FILTER_YEAR",
+                            "FILTER_TIME_OF_DAY",
+                            "FILTER_CONVERSION_DELAY",
+                            "FILTER_CREATIVE_ID",
+                            "FILTER_CREATIVE_SIZE",
+                            "FILTER_CREATIVE_TYPE",
+                            "FILTER_EXCHANGE_ID",
+                            "FILTER_AD_POSITION",
+                            "FILTER_PUBLIC_INVENTORY",
+                            "FILTER_INVENTORY_SOURCE",
+                            "FILTER_CITY",
+                            "FILTER_REGION",
+                            "FILTER_DMA",
+                            "FILTER_COUNTRY",
+                            "FILTER_SITE_ID",
+                            "FILTER_CHANNEL_ID",
+                            "FILTER_PARTNER",
+                            "FILTER_ADVERTISER",
+                            "FILTER_INSERTION_ORDER",
+                            "FILTER_LINE_ITEM",
+                            "FILTER_PARTNER_CURRENCY",
+                            "FILTER_ADVERTISER_CURRENCY",
+                            "FILTER_ADVERTISER_TIMEZONE",
+                            "FILTER_LINE_ITEM_TYPE",
+                            "FILTER_USER_LIST",
+                            "FILTER_USER_LIST_FIRST_PARTY",
+                            "FILTER_USER_LIST_THIRD_PARTY",
+                            "FILTER_TARGETED_USER_LIST",
+                            "FILTER_DATA_PROVIDER",
+                            "FILTER_ORDER_ID",
+                            "FILTER_VIDEO_PLAYER_SIZE",
+                            "FILTER_VIDEO_DURATION_SECONDS",
+                            "FILTER_KEYWORD",
+                            "FILTER_PAGE_CATEGORY",
+                            "FILTER_CAMPAIGN_DAILY_FREQUENCY",
+                            "FILTER_LINE_ITEM_DAILY_FREQUENCY",
+                            "FILTER_LINE_ITEM_LIFETIME_FREQUENCY",
+                            "FILTER_OS",
+                            "FILTER_BROWSER",
+                            "FILTER_CARRIER",
+                            "FILTER_SITE_LANGUAGE",
+                            "FILTER_INVENTORY_FORMAT",
+                            "FILTER_ZIP_CODE",
+                            "FILTER_VIDEO_RATING_TIER",
+                            "FILTER_VIDEO_FORMAT_SUPPORT",
+                            "FILTER_VIDEO_SKIPPABLE_SUPPORT",
+                            "FILTER_VIDEO_CREATIVE_DURATION",
+                            "FILTER_PAGE_LAYOUT",
+                            "FILTER_VIDEO_AD_POSITION_IN_STREAM",
+                            "FILTER_AGE",
+                            "FILTER_GENDER",
+                            "FILTER_QUARTER",
+                            "FILTER_TRUEVIEW_CONVERSION_TYPE",
+                            "FILTER_MOBILE_GEO",
+                            "FILTER_MRAID_SUPPORT",
+                            "FILTER_ACTIVE_VIEW_EXPECTED_VIEWABILITY",
+                            "FILTER_VIDEO_CREATIVE_DURATION_SKIPPABLE",
+                            "FILTER_NIELSEN_COUNTRY_CODE",
+                            "FILTER_NIELSEN_DEVICE_ID",
+                            "FILTER_NIELSEN_GENDER",
+                            "FILTER_NIELSEN_AGE",
+                            "FILTER_INVENTORY_SOURCE_TYPE",
+                            "FILTER_CREATIVE_WIDTH",
+                            "FILTER_CREATIVE_HEIGHT",
+                            "FILTER_DFP_ORDER_ID",
+                            "FILTER_TRUEVIEW_AGE",
+                            "FILTER_TRUEVIEW_GENDER",
+                            "FILTER_TRUEVIEW_PARENTAL_STATUS",
+                            "FILTER_TRUEVIEW_REMARKETING_LIST",
+                            "FILTER_TRUEVIEW_INTEREST",
+                            "FILTER_TRUEVIEW_AD_GROUP_ID",
+                            "FILTER_TRUEVIEW_AD_GROUP_AD_ID",
+                            "FILTER_TRUEVIEW_IAR_LANGUAGE",
+                            "FILTER_TRUEVIEW_IAR_GENDER",
+                            "FILTER_TRUEVIEW_IAR_AGE",
+                            "FILTER_TRUEVIEW_IAR_CATEGORY",
+                            "FILTER_TRUEVIEW_IAR_COUNTRY",
+                            "FILTER_TRUEVIEW_IAR_CITY",
+                            "FILTER_TRUEVIEW_IAR_REGION",
+                            "FILTER_TRUEVIEW_IAR_ZIPCODE",
+                            "FILTER_TRUEVIEW_IAR_REMARKETING_LIST",
+                            "FILTER_TRUEVIEW_IAR_INTEREST",
+                            "FILTER_TRUEVIEW_IAR_PARENTAL_STATUS",
+                            "FILTER_TRUEVIEW_IAR_TIME_OF_DAY",
+                            "FILTER_TRUEVIEW_CUSTOM_AFFINITY",
+                            "FILTER_TRUEVIEW_CATEGORY",
+                            "FILTER_TRUEVIEW_KEYWORD",
+                            "FILTER_TRUEVIEW_PLACEMENT",
+                            "FILTER_TRUEVIEW_URL",
+                            "FILTER_TRUEVIEW_COUNTRY",
+                            "FILTER_TRUEVIEW_REGION",
+                            "FILTER_TRUEVIEW_CITY",
+                            "FILTER_TRUEVIEW_DMA",
+                            "FILTER_TRUEVIEW_ZIPCODE",
+                            "FILTER_NOT_SUPPORTED",
+                            "FILTER_MEDIA_PLAN",
+                            "FILTER_TRUEVIEW_IAR_YOUTUBE_CHANNEL",
+                            "FILTER_TRUEVIEW_IAR_YOUTUBE_VIDEO",
+                            "FILTER_SKIPPABLE_SUPPORT",
+                            "FILTER_COMPANION_CREATIVE_ID",
+                            "FILTER_BUDGET_SEGMENT_DESCRIPTION",
+                            "FILTER_FLOODLIGHT_ACTIVITY_ID",
+                            "FILTER_DEVICE_MODEL",
+                            "FILTER_DEVICE_MAKE",
+                            "FILTER_DEVICE_TYPE",
+                            "FILTER_CREATIVE_ATTRIBUTE",
+                            "FILTER_INVENTORY_COMMITMENT_TYPE",
+                            "FILTER_INVENTORY_RATE_TYPE",
+                            "FILTER_INVENTORY_DELIVERY_METHOD",
+                            "FILTER_INVENTORY_SOURCE_EXTERNAL_ID",
+                            "FILTER_AUTHORIZED_SELLER_STATE",
+                            "FILTER_VIDEO_DURATION_SECONDS_RANGE",
+                            "FILTER_PARTNER_NAME",
+                            "FILTER_PARTNER_STATUS",
+                            "FILTER_ADVERTISER_NAME",
+                            "FILTER_ADVERTISER_INTEGRATION_CODE",
+                            "FILTER_ADVERTISER_INTEGRATION_STATUS",
+                            "FILTER_CARRIER_NAME",
+                            "FILTER_CHANNEL_NAME",
+                            "FILTER_CITY_NAME",
+                            "FILTER_COMPANION_CREATIVE_NAME",
+                            "FILTER_USER_LIST_FIRST_PARTY_NAME",
+                            "FILTER_USER_LIST_THIRD_PARTY_NAME",
+                            "FILTER_NIELSEN_RESTATEMENT_DATE",
+                            "FILTER_NIELSEN_DATE_RANGE",
+                            "FILTER_INSERTION_ORDER_NAME",
+                            "FILTER_REGION_NAME",
+                            "FILTER_DMA_NAME",
+                            "FILTER_TRUEVIEW_IAR_REGION_NAME",
+                            "FILTER_TRUEVIEW_DMA_NAME",
+                            "FILTER_TRUEVIEW_REGION_NAME",
+                            "FILTER_ACTIVE_VIEW_CUSTOM_METRIC_ID",
+                            "FILTER_ACTIVE_VIEW_CUSTOM_METRIC_NAME",
+                            "FILTER_AD_TYPE",
+                            "FILTER_ALGORITHM",
+                            "FILTER_ALGORITHM_ID",
+                            "FILTER_AMP_PAGE_REQUEST",
+                            "FILTER_ANONYMOUS_INVENTORY_MODELING",
+                            "FILTER_APP_URL",
+                            "FILTER_APP_URL_EXCLUDED",
+                            "FILTER_ATTRIBUTED_USERLIST",
+                            "FILTER_ATTRIBUTED_USERLIST_COST",
+                            "FILTER_ATTRIBUTED_USERLIST_TYPE",
+                            "FILTER_ATTRIBUTION_MODEL",
+                            "FILTER_AUDIENCE_LIST",
+                            "FILTER_AUDIENCE_LIST_COST",
+                            "FILTER_AUDIENCE_LIST_TYPE",
+                            "FILTER_AUDIENCE_NAME",
+                            "FILTER_AUDIENCE_TYPE",
+                            "FILTER_BILLABLE_OUTCOME",
+                            "FILTER_BRAND_LIFT_TYPE",
+                            "FILTER_CHANNEL_TYPE",
+                            "FILTER_CM_PLACEMENT_ID",
+                            "FILTER_CONVERSION_SOURCE",
+                            "FILTER_CONVERSION_SOURCE_ID",
+                            "FILTER_COUNTRY_ID",
+                            "FILTER_CREATIVE",
+                            "FILTER_CREATIVE_ASSET",
+                            "FILTER_CREATIVE_INTEGRATION_CODE",
+                            "FILTER_CREATIVE_RENDERED_IN_AMP",
+                            "FILTER_CREATIVE_SOURCE",
+                            "FILTER_CREATIVE_STATUS",
+                            "FILTER_DATA_PROVIDER_NAME",
+                            "FILTER_DETAILED_DEMOGRAPHICS",
+                            "FILTER_DETAILED_DEMOGRAPHICS_ID",
+                            "FILTER_DEVICE",
+                            "FILTER_GAM_INSERTION_ORDER",
+                            "FILTER_GAM_LINE_ITEM",
+                            "FILTER_GAM_LINE_ITEM_ID",
+                            "FILTER_DIGITAL_CONTENT_LABEL",
+                            "FILTER_DOMAIN",
+                            "FILTER_ELIGIBLE_COOKIES_ON_FIRST_PARTY_AUDIENCE_LIST",
+                            "FILTER_ELIGIBLE_COOKIES_ON_THIRD_PARTY_AUDIENCE_LIST_AND_INTEREST",
+                            "FILTER_EXCHANGE",
+                            "FILTER_EXCHANGE_CODE",
+                            "FILTER_EXTENSION",
+                            "FILTER_EXTENSION_STATUS",
+                            "FILTER_EXTENSION_TYPE",
+                            "FILTER_FIRST_PARTY_AUDIENCE_LIST_COST",
+                            "FILTER_FIRST_PARTY_AUDIENCE_LIST_TYPE",
+                            "FILTER_FLOODLIGHT_ACTIVITY",
+                            "FILTER_FORMAT",
+                            "FILTER_GMAIL_AGE",
+                            "FILTER_GMAIL_CITY",
+                            "FILTER_GMAIL_COUNTRY",
+                            "FILTER_GMAIL_COUNTRY_NAME",
+                            "FILTER_GMAIL_DEVICE_TYPE",
+                            "FILTER_GMAIL_DEVICE_TYPE_NAME",
+                            "FILTER_GMAIL_GENDER",
+                            "FILTER_GMAIL_REGION",
+                            "FILTER_GMAIL_REMARKETING_LIST",
+                            "FILTER_HOUSEHOLD_INCOME",
+                            "FILTER_IMPRESSION_COUNTING_METHOD",
+                            "FILTER_YOUTUBE_PROGRAMMATIC_GUARANTEED_INSERTION_ORDER",
+                            "FILTER_INSERTION_ORDER_INTEGRATION_CODE",
+                            "FILTER_INSERTION_ORDER_STATUS",
+                            "FILTER_INTEREST",
+                            "FILTER_INVENTORY_SOURCE_GROUP",
+                            "FILTER_INVENTORY_SOURCE_GROUP_ID",
+                            "FILTER_INVENTORY_SOURCE_ID",
+                            "FILTER_INVENTORY_SOURCE_NAME",
+                            "FILTER_LIFE_EVENT",
+                            "FILTER_LIFE_EVENTS",
+                            "FILTER_LINE_ITEM_INTEGRATION_CODE",
+                            "FILTER_LINE_ITEM_NAME",
+                            "FILTER_LINE_ITEM_STATUS",
+                            "FILTER_MATCH_RATIO",
+                            "FILTER_MEASUREMENT_SOURCE",
+                            "FILTER_MEDIA_PLAN_NAME",
+                            "FILTER_PARENTAL_STATUS",
+                            "FILTER_PLACEMENT_ALL_YOUTUBE_CHANNELS",
+                            "FILTER_PLATFORM",
+                            "FILTER_PLAYBACK_METHOD",
+                            "FILTER_POSITION_IN_CONTENT",
+                            "FILTER_PUBLISHER_PROPERTY",
+                            "FILTER_PUBLISHER_PROPERTY_ID",
+                            "FILTER_PUBLISHER_PROPERTY_SECTION",
+                            "FILTER_PUBLISHER_PROPERTY_SECTION_ID",
+                            "FILTER_REFUND_REASON",
+                            "FILTER_REMARKETING_LIST",
+                            "FILTER_REWARDED",
+                            "FILTER_SENSITIVE_CATEGORY",
+                            "FILTER_SERVED_PIXEL_DENSITY",
+                            "FILTER_TARGETED_DATA_PROVIDERS",
+                            "FILTER_THIRD_PARTY_AUDIENCE_LIST_COST",
+                            "FILTER_THIRD_PARTY_AUDIENCE_LIST_TYPE",
+                            "FILTER_TRUEVIEW_AD",
+                            "FILTER_TRUEVIEW_AD_GROUP",
+                            "FILTER_TRUEVIEW_DETAILED_DEMOGRAPHICS",
+                            "FILTER_TRUEVIEW_DETAILED_DEMOGRAPHICS_ID",
+                            "FILTER_TRUEVIEW_HOUSEHOLD_INCOME",
+                            "FILTER_TRUEVIEW_IAR_COUNTRY_NAME",
+                            "FILTER_TRUEVIEW_REMARKETING_LIST_NAME",
+                            "FILTER_VARIANT_ID",
+                            "FILTER_VARIANT_NAME",
+                            "FILTER_VARIANT_VERSION",
+                            "FILTER_VERIFICATION_VIDEO_PLAYER_SIZE",
+                            "FILTER_VERIFICATION_VIDEO_POSITION",
+                            "FILTER_VIDEO_COMPANION_CREATIVE_SIZE",
+                            "FILTER_VIDEO_CONTINUOUS_PLAY",
+                            "FILTER_VIDEO_DURATION",
+                            "FILTER_YOUTUBE_ADAPTED_AUDIENCE_LIST",
+                            "FILTER_YOUTUBE_AD_VIDEO",
+                            "FILTER_YOUTUBE_AD_VIDEO_ID",
+                            "FILTER_YOUTUBE_CHANNEL",
+                            "FILTER_YOUTUBE_PROGRAMMATIC_GUARANTEED_ADVERTISER",
+                            "FILTER_YOUTUBE_PROGRAMMATIC_GUARANTEED_PARTNER",
+                            "FILTER_YOUTUBE_VIDEO",
+                            "FILTER_ZIP_POSTAL_CODE",
+                            "FILTER_PLACEMENT_NAME_ALL_YOUTUBE_CHANNELS",
+                            "FILTER_TRUEVIEW_PLACEMENT_ID",
+                            "FILTER_PATH_PATTERN_ID",
+                            "FILTER_PATH_EVENT_INDEX",
+                            "FILTER_EVENT_TYPE",
+                            "FILTER_CHANNEL_GROUPING",
+                            "FILTER_OM_SDK_AVAILABLE",
+                            "FILTER_DATA_SOURCE"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "includeInviteData": {
+                    "description": "Deprecated. This field is no longer in use.",
+                    "type": "boolean"
+                },
+                "metrics": {
+                    "description": "Metrics to include as columns in your report.",
+                    "items": {
+                        "enum": [
+                            "METRIC_UNKNOWN",
+                            "METRIC_IMPRESSIONS",
+                            "METRIC_CLICKS",
+                            "METRIC_LAST_IMPRESSIONS",
+                            "METRIC_LAST_CLICKS",
+                            "METRIC_TOTAL_CONVERSIONS",
+                            "METRIC_MEDIA_COST_ADVERTISER",
+                            "METRIC_MEDIA_COST_USD",
+                            "METRIC_MEDIA_COST_PARTNER",
+                            "METRIC_DATA_COST_ADVERTISER",
+                            "METRIC_DATA_COST_USD",
+                            "METRIC_DATA_COST_PARTNER",
+                            "METRIC_CPM_FEE1_ADVERTISER",
+                            "METRIC_CPM_FEE1_USD",
+                            "METRIC_CPM_FEE1_PARTNER",
+                            "METRIC_CPM_FEE2_ADVERTISER",
+                            "METRIC_CPM_FEE2_USD",
+                            "METRIC_CPM_FEE2_PARTNER",
+                            "METRIC_MEDIA_FEE1_ADVERTISER",
+                            "METRIC_MEDIA_FEE1_USD",
+                            "METRIC_MEDIA_FEE1_PARTNER",
+                            "METRIC_MEDIA_FEE2_ADVERTISER",
+                            "METRIC_MEDIA_FEE2_USD",
+                            "METRIC_MEDIA_FEE2_PARTNER",
+                            "METRIC_REVENUE_ADVERTISER",
+                            "METRIC_REVENUE_USD",
+                            "METRIC_REVENUE_PARTNER",
+                            "METRIC_PROFIT_ADVERTISER",
+                            "METRIC_PROFIT_USD",
+                            "METRIC_PROFIT_PARTNER",
+                            "METRIC_PROFIT_MARGIN",
+                            "METRIC_TOTAL_MEDIA_COST_USD",
+                            "METRIC_TOTAL_MEDIA_COST_PARTNER",
+                            "METRIC_TOTAL_MEDIA_COST_ADVERTISER",
+                            "METRIC_BILLABLE_COST_USD",
+                            "METRIC_BILLABLE_COST_PARTNER",
+                            "METRIC_BILLABLE_COST_ADVERTISER",
+                            "METRIC_PLATFORM_FEE_USD",
+                            "METRIC_PLATFORM_FEE_PARTNER",
+                            "METRIC_PLATFORM_FEE_ADVERTISER",
+                            "METRIC_VIDEO_COMPLETION_RATE",
+                            "METRIC_PROFIT_ECPM_ADVERTISER",
+                            "METRIC_PROFIT_ECPM_USD",
+                            "METRIC_PROFIT_ECPM_PARTNER",
+                            "METRIC_REVENUE_ECPM_ADVERTISER",
+                            "METRIC_REVENUE_ECPM_USD",
+                            "METRIC_REVENUE_ECPM_PARTNER",
+                            "METRIC_REVENUE_ECPC_ADVERTISER",
+                            "METRIC_REVENUE_ECPC_USD",
+                            "METRIC_REVENUE_ECPC_PARTNER",
+                            "METRIC_REVENUE_ECPA_ADVERTISER",
+                            "METRIC_REVENUE_ECPA_USD",
+                            "METRIC_REVENUE_ECPA_PARTNER",
+                            "METRIC_REVENUE_ECPAPV_ADVERTISER",
+                            "METRIC_REVENUE_ECPAPV_USD",
+                            "METRIC_REVENUE_ECPAPV_PARTNER",
+                            "METRIC_REVENUE_ECPAPC_ADVERTISER",
+                            "METRIC_REVENUE_ECPAPC_USD",
+                            "METRIC_REVENUE_ECPAPC_PARTNER",
+                            "METRIC_MEDIA_COST_ECPM_ADVERTISER",
+                            "METRIC_MEDIA_COST_ECPM_USD",
+                            "METRIC_MEDIA_COST_ECPM_PARTNER",
+                            "METRIC_MEDIA_COST_ECPC_ADVERTISER",
+                            "METRIC_MEDIA_COST_ECPC_USD",
+                            "METRIC_MEDIA_COST_ECPC_PARTNER",
+                            "METRIC_MEDIA_COST_ECPA_ADVERTISER",
+                            "METRIC_MEDIA_COST_ECPA_USD",
+                            "METRIC_MEDIA_COST_ECPA_PARTNER",
+                            "METRIC_MEDIA_COST_ECPAPV_ADVERTISER",
+                            "METRIC_MEDIA_COST_ECPAPV_USD",
+                            "METRIC_MEDIA_COST_ECPAPV_PARTNER",
+                            "METRIC_MEDIA_COST_ECPAPC_ADVERTISER",
+                            "METRIC_MEDIA_COST_ECPAPC_USD",
+                            "METRIC_MEDIA_COST_ECPAPC_PARTNER",
+                            "METRIC_TOTAL_MEDIA_COST_ECPM_ADVERTISER",
+                            "METRIC_TOTAL_MEDIA_COST_ECPM_USD",
+                            "METRIC_TOTAL_MEDIA_COST_ECPM_PARTNER",
+                            "METRIC_TOTAL_MEDIA_COST_ECPC_ADVERTISER",
+                            "METRIC_TOTAL_MEDIA_COST_ECPC_USD",
+                            "METRIC_TOTAL_MEDIA_COST_ECPC_PARTNER",
+                            "METRIC_TOTAL_MEDIA_COST_ECPA_ADVERTISER",
+                            "METRIC_TOTAL_MEDIA_COST_ECPA_USD",
+                            "METRIC_TOTAL_MEDIA_COST_ECPA_PARTNER",
+                            "METRIC_TOTAL_MEDIA_COST_ECPAPV_ADVERTISER",
+                            "METRIC_TOTAL_MEDIA_COST_ECPAPV_USD",
+                            "METRIC_TOTAL_MEDIA_COST_ECPAPV_PARTNER",
+                            "METRIC_TOTAL_MEDIA_COST_ECPAPC_ADVERTISER",
+                            "METRIC_TOTAL_MEDIA_COST_ECPAPC_USD",
+                            "METRIC_TOTAL_MEDIA_COST_ECPAPC_PARTNER",
+                            "METRIC_RICH_MEDIA_VIDEO_PLAYS",
+                            "METRIC_RICH_MEDIA_VIDEO_COMPLETIONS",
+                            "METRIC_RICH_MEDIA_VIDEO_PAUSES",
+                            "METRIC_RICH_MEDIA_VIDEO_MUTES",
+                            "METRIC_RICH_MEDIA_VIDEO_MIDPOINTS",
+                            "METRIC_RICH_MEDIA_VIDEO_FULL_SCREENS",
+                            "METRIC_RICH_MEDIA_VIDEO_FIRST_QUARTILE_COMPLETES",
+                            "METRIC_RICH_MEDIA_VIDEO_THIRD_QUARTILE_COMPLETES",
+                            "METRIC_CLICK_TO_POST_CLICK_CONVERSION_RATE",
+                            "METRIC_IMPRESSIONS_TO_CONVERSION_RATE",
+                            "METRIC_CONVERSIONS_PER_MILLE",
+                            "METRIC_CTR",
+                            "METRIC_BID_REQUESTS",
+                            "METRIC_UNIQUE_VISITORS_COOKIES",
+                            "METRIC_REVENUE_ECPCV_ADVERTISER",
+                            "METRIC_REVENUE_ECPCV_USD",
+                            "METRIC_REVENUE_ECPCV_PARTNER",
+                            "METRIC_MEDIA_COST_ECPCV_ADVERTISER",
+                            "METRIC_MEDIA_COST_ECPCV_USD",
+                            "METRIC_MEDIA_COST_ECPCV_PARTNER",
+                            "METRIC_TOTAL_MEDIA_COST_ECPCV_ADVERTISER",
+                            "METRIC_TOTAL_MEDIA_COST_ECPCV_USD",
+                            "METRIC_TOTAL_MEDIA_COST_ECPCV_PARTNER",
+                            "METRIC_RICH_MEDIA_VIDEO_SKIPS",
+                            "METRIC_FEE2_ADVERTISER",
+                            "METRIC_FEE2_USD",
+                            "METRIC_FEE2_PARTNER",
+                            "METRIC_FEE3_ADVERTISER",
+                            "METRIC_FEE3_USD",
+                            "METRIC_FEE3_PARTNER",
+                            "METRIC_FEE4_ADVERTISER",
+                            "METRIC_FEE4_USD",
+                            "METRIC_FEE4_PARTNER",
+                            "METRIC_FEE5_ADVERTISER",
+                            "METRIC_FEE5_USD",
+                            "METRIC_FEE5_PARTNER",
+                            "METRIC_FEE6_ADVERTISER",
+                            "METRIC_FEE6_USD",
+                            "METRIC_FEE6_PARTNER",
+                            "METRIC_FEE7_ADVERTISER",
+                            "METRIC_FEE7_USD",
+                            "METRIC_FEE7_PARTNER",
+                            "METRIC_FEE8_ADVERTISER",
+                            "METRIC_FEE8_USD",
+                            "METRIC_FEE8_PARTNER",
+                            "METRIC_FEE9_ADVERTISER",
+                            "METRIC_FEE9_USD",
+                            "METRIC_FEE9_PARTNER",
+                            "METRIC_FEE10_ADVERTISER",
+                            "METRIC_FEE10_USD",
+                            "METRIC_FEE10_PARTNER",
+                            "METRIC_FEE11_ADVERTISER",
+                            "METRIC_FEE11_USD",
+                            "METRIC_FEE11_PARTNER",
+                            "METRIC_FEE12_ADVERTISER",
+                            "METRIC_FEE12_USD",
+                            "METRIC_FEE12_PARTNER",
+                            "METRIC_FEE13_ADVERTISER",
+                            "METRIC_FEE13_USD",
+                            "METRIC_FEE13_PARTNER",
+                            "METRIC_FEE14_ADVERTISER",
+                            "METRIC_FEE14_USD",
+                            "METRIC_FEE14_PARTNER",
+                            "METRIC_FEE15_ADVERTISER",
+                            "METRIC_FEE15_USD",
+                            "METRIC_FEE15_PARTNER",
+                            "METRIC_CPM_FEE3_ADVERTISER",
+                            "METRIC_CPM_FEE3_USD",
+                            "METRIC_CPM_FEE3_PARTNER",
+                            "METRIC_CPM_FEE4_ADVERTISER",
+                            "METRIC_CPM_FEE4_USD",
+                            "METRIC_CPM_FEE4_PARTNER",
+                            "METRIC_CPM_FEE5_ADVERTISER",
+                            "METRIC_CPM_FEE5_USD",
+                            "METRIC_CPM_FEE5_PARTNER",
+                            "METRIC_MEDIA_FEE3_ADVERTISER",
+                            "METRIC_MEDIA_FEE3_USD",
+                            "METRIC_MEDIA_FEE3_PARTNER",
+                            "METRIC_MEDIA_FEE4_ADVERTISER",
+                            "METRIC_MEDIA_FEE4_USD",
+                            "METRIC_MEDIA_FEE4_PARTNER",
+                            "METRIC_MEDIA_FEE5_ADVERTISER",
+                            "METRIC_MEDIA_FEE5_USD",
+                            "METRIC_MEDIA_FEE5_PARTNER",
+                            "METRIC_VIDEO_COMPANION_IMPRESSIONS",
+                            "METRIC_VIDEO_COMPANION_CLICKS",
+                            "METRIC_FEE16_ADVERTISER",
+                            "METRIC_FEE16_USD",
+                            "METRIC_FEE16_PARTNER",
+                            "METRIC_FEE17_ADVERTISER",
+                            "METRIC_FEE17_USD",
+                            "METRIC_FEE17_PARTNER",
+                            "METRIC_FEE18_ADVERTISER",
+                            "METRIC_FEE18_USD",
+                            "METRIC_FEE18_PARTNER",
+                            "METRIC_TRUEVIEW_VIEWS",
+                            "METRIC_TRUEVIEW_UNIQUE_VIEWERS",
+                            "METRIC_TRUEVIEW_EARNED_VIEWS",
+                            "METRIC_TRUEVIEW_EARNED_SUBSCRIBERS",
+                            "METRIC_TRUEVIEW_EARNED_PLAYLIST_ADDITIONS",
+                            "METRIC_TRUEVIEW_EARNED_LIKES",
+                            "METRIC_TRUEVIEW_EARNED_SHARES",
+                            "METRIC_TRUEVIEW_IMPRESSION_SHARE",
+                            "METRIC_TRUEVIEW_LOST_IS_BUDGET",
+                            "METRIC_TRUEVIEW_LOST_IS_RANK",
+                            "METRIC_TRUEVIEW_VIEW_THROUGH_CONVERSION",
+                            "METRIC_TRUEVIEW_CONVERSION_MANY_PER_VIEW",
+                            "METRIC_TRUEVIEW_VIEW_RATE",
+                            "METRIC_TRUEVIEW_CONVERSION_RATE_ONE_PER_VIEW",
+                            "METRIC_TRUEVIEW_CPV_ADVERTISER",
+                            "METRIC_TRUEVIEW_CPV_USD",
+                            "METRIC_TRUEVIEW_CPV_PARTNER",
+                            "METRIC_FEE19_ADVERTISER",
+                            "METRIC_FEE19_USD",
+                            "METRIC_FEE19_PARTNER",
+                            "METRIC_TEA_TRUEVIEW_IMPRESSIONS",
+                            "METRIC_TEA_TRUEVIEW_UNIQUE_COOKIES",
+                            "METRIC_FEE20_ADVERTISER",
+                            "METRIC_FEE20_USD",
+                            "METRIC_FEE20_PARTNER",
+                            "METRIC_FEE21_ADVERTISER",
+                            "METRIC_FEE21_USD",
+                            "METRIC_FEE21_PARTNER",
+                            "METRIC_FEE22_ADVERTISER",
+                            "METRIC_FEE22_USD",
+                            "METRIC_FEE22_PARTNER",
+                            "METRIC_TRUEVIEW_TOTAL_CONVERSION_VALUES_ADVERTISER",
+                            "METRIC_TRUEVIEW_TOTAL_CONVERSION_VALUES_USD",
+                            "METRIC_TRUEVIEW_TOTAL_CONVERSION_VALUES_PARTNER",
+                            "METRIC_TRUEVIEW_CONVERSION_COST_MANY_PER_VIEW_ADVERTISER",
+                            "METRIC_TRUEVIEW_CONVERSION_COST_MANY_PER_VIEW_USD",
+                            "METRIC_TRUEVIEW_CONVERSION_COST_MANY_PER_VIEW_PARTNER",
+                            "METRIC_PROFIT_VIEWABLE_ECPM_ADVERTISER",
+                            "METRIC_PROFIT_VIEWABLE_ECPM_USD",
+                            "METRIC_PROFIT_VIEWABLE_ECPM_PARTNER",
+                            "METRIC_REVENUE_VIEWABLE_ECPM_ADVERTISER",
+                            "METRIC_REVENUE_VIEWABLE_ECPM_USD",
+                            "METRIC_REVENUE_VIEWABLE_ECPM_PARTNER",
+                            "METRIC_MEDIA_COST_VIEWABLE_ECPM_ADVERTISER",
+                            "METRIC_MEDIA_COST_VIEWABLE_ECPM_USD",
+                            "METRIC_MEDIA_COST_VIEWABLE_ECPM_PARTNER",
+                            "METRIC_TOTAL_MEDIA_COST_VIEWABLE_ECPM_ADVERTISER",
+                            "METRIC_TOTAL_MEDIA_COST_VIEWABLE_ECPM_USD",
+                            "METRIC_TOTAL_MEDIA_COST_VIEWABLE_ECPM_PARTNER",
+                            "METRIC_TRUEVIEW_ENGAGEMENTS",
+                            "METRIC_TRUEVIEW_ENGAGEMENT_RATE",
+                            "METRIC_TRUEVIEW_AVERAGE_CPE_ADVERTISER",
+                            "METRIC_TRUEVIEW_AVERAGE_CPE_USD",
+                            "METRIC_TRUEVIEW_AVERAGE_CPE_PARTNER",
+                            "METRIC_ACTIVE_VIEW_VIEWABLE_IMPRESSIONS",
+                            "METRIC_ACTIVE_VIEW_ELIGIBLE_IMPRESSIONS",
+                            "METRIC_ACTIVE_VIEW_MEASURABLE_IMPRESSIONS",
+                            "METRIC_ACTIVE_VIEW_PCT_MEASURABLE_IMPRESSIONS",
+                            "METRIC_ACTIVE_VIEW_PCT_VIEWABLE_IMPRESSIONS",
+                            "METRIC_ACTIVE_VIEW_AVERAGE_VIEWABLE_TIME",
+                            "METRIC_ACTIVE_VIEW_UNMEASURABLE_IMPRESSIONS",
+                            "METRIC_ACTIVE_VIEW_UNVIEWABLE_IMPRESSIONS",
+                            "METRIC_ACTIVE_VIEW_DISTRIBUTION_UNMEASURABLE",
+                            "METRIC_ACTIVE_VIEW_DISTRIBUTION_UNVIEWABLE",
+                            "METRIC_ACTIVE_VIEW_DISTRIBUTION_VIEWABLE",
+                            "METRIC_ACTIVE_VIEW_PERCENT_VIEWABLE_FOR_TIME_THRESHOLD",
+                            "METRIC_ACTIVE_VIEW_VIEWABLE_FOR_TIME_THRESHOLD",
+                            "METRIC_ACTIVE_VIEW_PERCENT_VISIBLE_AT_START",
+                            "METRIC_ACTIVE_VIEW_PERCENT_VISIBLE_FIRST_QUAR",
+                            "METRIC_ACTIVE_VIEW_PERCENT_VISIBLE_SECOND_QUAR",
+                            "METRIC_ACTIVE_VIEW_PERCENT_VISIBLE_THIRD_QUAR",
+                            "METRIC_ACTIVE_VIEW_PERCENT_VISIBLE_ON_COMPLETE",
+                            "METRIC_ACTIVE_VIEW_PERCENT_AUDIBLE_VISIBLE_AT_START",
+                            "METRIC_ACTIVE_VIEW_PERCENT_AUDIBLE_VISIBLE_FIRST_QUAR",
+                            "METRIC_ACTIVE_VIEW_PERCENT_AUDIBLE_VISIBLE_SECOND_QUAR",
+                            "METRIC_ACTIVE_VIEW_PERCENT_AUDIBLE_VISIBLE_THIRD_QUAR",
+                            "METRIC_ACTIVE_VIEW_PERCENT_AUDIBLE_VISIBLE_ON_COMPLETE",
+                            "METRIC_ACTIVE_VIEW_AUDIBLE_VISIBLE_ON_COMPLETE_IMPRESSIONS",
+                            "METRIC_VIEWABLE_BID_REQUESTS",
+                            "METRIC_COOKIE_REACH_IMPRESSION_REACH",
+                            "METRIC_COOKIE_REACH_AVERAGE_IMPRESSION_FREQUENCY",
+                            "METRIC_DBM_ENGAGEMENT_RATE",
+                            "METRIC_RICH_MEDIA_SCROLLS",
+                            "METRIC_CM_POST_VIEW_REVENUE",
+                            "METRIC_CM_POST_CLICK_REVENUE",
+                            "METRIC_FLOODLIGHT_IMPRESSIONS",
+                            "METRIC_BILLABLE_IMPRESSIONS",
+                            "METRIC_NIELSEN_AVERAGE_FREQUENCY",
+                            "METRIC_NIELSEN_IMPRESSIONS",
+                            "METRIC_NIELSEN_UNIQUE_AUDIENCE",
+                            "METRIC_NIELSEN_GRP",
+                            "METRIC_NIELSEN_IMPRESSION_INDEX",
+                            "METRIC_NIELSEN_IMPRESSIONS_SHARE",
+                            "METRIC_NIELSEN_POPULATION",
+                            "METRIC_NIELSEN_POPULATION_REACH",
+                            "METRIC_NIELSEN_POPULATION_SHARE",
+                            "METRIC_NIELSEN_REACH_INDEX",
+                            "METRIC_NIELSEN_REACH_SHARE",
+                            "METRIC_ACTIVE_VIEW_AUDIBLE_FULLY_ON_SCREEN_HALF_OF_DURATION_IMPRESSIONS",
+                            "METRIC_ACTIVE_VIEW_AUDIBLE_FULLY_ON_SCREEN_HALF_OF_DURATION_MEASURABLE_IMPRESSIONS",
+                            "METRIC_ACTIVE_VIEW_AUDIBLE_FULLY_ON_SCREEN_HALF_OF_DURATION_RATE",
+                            "METRIC_ACTIVE_VIEW_AUDIBLE_FULLY_ON_SCREEN_HALF_OF_DURATION_TRUEVIEW_IMPRESSIONS",
+                            "METRIC_ACTIVE_VIEW_AUDIBLE_FULLY_ON_SCREEN_HALF_OF_DURATION_TRUEVIEW_MEASURABLE_IMPRESSIONS",
+                            "METRIC_ACTIVE_VIEW_AUDIBLE_FULLY_ON_SCREEN_HALF_OF_DURATION_TRUEVIEW_RATE",
+                            "METRIC_ACTIVE_VIEW_CUSTOM_METRIC_MEASURABLE_IMPRESSIONS",
+                            "METRIC_ACTIVE_VIEW_CUSTOM_METRIC_VIEWABLE_IMPRESSIONS",
+                            "METRIC_ACTIVE_VIEW_CUSTOM_METRIC_VIEWABLE_RATE",
+                            "METRIC_ACTIVE_VIEW_PERCENT_AUDIBLE_IMPRESSIONS",
+                            "METRIC_ACTIVE_VIEW_PERCENT_FULLY_ON_SCREEN_2_SEC",
+                            "METRIC_ACTIVE_VIEW_PERCENT_FULL_SCREEN",
+                            "METRIC_ACTIVE_VIEW_PERCENT_IN_BACKGROUND",
+                            "METRIC_ACTIVE_VIEW_PERCENT_OF_AD_PLAYED",
+                            "METRIC_ACTIVE_VIEW_PERCENT_OF_COMPLETED_IMPRESSIONS_AUDIBLE_AND_VISIBLE",
+                            "METRIC_ACTIVE_VIEW_PERCENT_OF_COMPLETED_IMPRESSIONS_VISIBLE",
+                            "METRIC_ACTIVE_VIEW_PERCENT_OF_FIRST_QUARTILE_IMPRESSIONS_AUDIBLE_AND_VISIBLE",
+                            "METRIC_ACTIVE_VIEW_PERCENT_OF_FIRST_QUARTILE_IMPRESSIONS_VISIBLE",
+                            "METRIC_ACTIVE_VIEW_PERCENT_OF_MIDPOINT_IMPRESSIONS_AUDIBLE_AND_VISIBLE",
+                            "METRIC_ACTIVE_VIEW_PERCENT_OF_MIDPOINT_IMPRESSIONS_VISIBLE",
+                            "METRIC_ACTIVE_VIEW_PERCENT_OF_THIRD_QUARTILE_IMPRESSIONS_AUDIBLE_AND_VISIBLE",
+                            "METRIC_ACTIVE_VIEW_PERCENT_OF_THIRD_QUARTILE_IMPRESSIONS_VISIBLE",
+                            "METRIC_ACTIVE_VIEW_PERCENT_PLAY_TIME_AUDIBLE",
+                            "METRIC_ACTIVE_VIEW_PERCENT_PLAY_TIME_AUDIBLE_AND_VISIBLE",
+                            "METRIC_ACTIVE_VIEW_PERCENT_PLAY_TIME_VISIBLE",
+                            "METRIC_ADAPTED_AUDIENCE_FREQUENCY",
+                            "METRIC_ADLINGO_FEE_ADVERTISER_CURRENCY",
+                            "METRIC_AUDIO_CLIENT_COST_ECPCL_ADVERTISER_CURRENCY",
+                            "METRIC_AUDIO_MEDIA_COST_ECPCL_ADVERTISER_CURRENCY",
+                            "METRIC_AUDIO_MUTES_AUDIO",
+                            "METRIC_AUDIO_REVENUE_ECPCL_ADVERTISER_CURRENCY",
+                            "METRIC_AUDIO_UNMUTES_AUDIO",
+                            "METRIC_AUDIO_UNMUTES_VIDEO",
+                            "METRIC_AVERAGE_DISPLAY_TIME",
+                            "METRIC_AVERAGE_IMPRESSION_FREQUENCY_PER_USER",
+                            "METRIC_AVERAGE_INTERACTION_TIME",
+                            "METRIC_AVERAGE_WATCH_TIME_PER_IMPRESSION",
+                            "METRIC_BEGIN_TO_RENDER_ELIGIBLE_IMPRESSIONS",
+                            "METRIC_BEGIN_TO_RENDER_IMPRESSIONS",
+                            "METRIC_BENCHMARK_FREQUENCY",
+                            "METRIC_BRAND_LIFT_ABSOLUTE_BRAND_LIFT",
+                            "METRIC_BRAND_LIFT_ALL_SURVEY_RESPONSES",
+                            "METRIC_BRAND_LIFT_BASELINE_POSITIVE_RESPONSE_RATE",
+                            "METRIC_BRAND_LIFT_BASELINE_SURVEY_RESPONSES",
+                            "METRIC_BRAND_LIFT_COST_PER_LIFTED_USER",
+                            "METRIC_BRAND_LIFT_EXPOSED_SURVEY_RESPONSES",
+                            "METRIC_BRAND_LIFT_HEADROOM_BRAND_LIFT",
+                            "METRIC_BRAND_LIFT_RELATIVE_BRAND_LIFT",
+                            "METRIC_BRAND_LIFT_USERS",
+                            "METRIC_CARD_CLICKS",
+                            "METRIC_CLIENT_COST_ADVERTISER_CURRENCY",
+                            "METRIC_CLIENT_COST_ECPA_ADVERTISER_CURRENCY",
+                            "METRIC_CLIENT_COST_ECPA_PC_ADVERTISER_CURRENCY",
+                            "METRIC_CLIENT_COST_ECPA_PV_ADVERTISER_CURRENCY",
+                            "METRIC_CLIENT_COST_ECPC_ADVERTISER_CURRENCY",
+                            "METRIC_CLIENT_COST_ECPM_ADVERTISER_CURRENCY",
+                            "METRIC_CLIENT_COST_VIEWABLE_ECPM_ADVERTISER_CURRENCY",
+                            "METRIC_CM_POST_CLICK_REVENUE_CROSS_ENVIRONMENT",
+                            "METRIC_CM_POST_VIEW_REVENUE_CROSS_ENVIRONMENT",
+                            "METRIC_COMPANION_CLICKS_AUDIO",
+                            "METRIC_COMPANION_IMPRESSIONS_AUDIO",
+                            "METRIC_COMPLETE_LISTENS_AUDIO",
+                            "METRIC_COMPLETION_RATE_AUDIO",
+                            "METRIC_COUNTERS",
+                            "METRIC_CUSTOM_FEE_1_ADVERTISER_CURRENCY",
+                            "METRIC_CUSTOM_FEE_2_ADVERTISER_CURRENCY",
+                            "METRIC_CUSTOM_FEE_3_ADVERTISER_CURRENCY",
+                            "METRIC_CUSTOM_FEE_4_ADVERTISER_CURRENCY",
+                            "METRIC_CUSTOM_FEE_5_ADVERTISER_CURRENCY",
+                            "METRIC_CUSTOM_VALUE_PER_1000_IMPRESSIONS",
+                            "METRIC_ENGAGEMENTS",
+                            "METRIC_ESTIMATED_CPM_FOR_IMPRESSIONS_WITH_CUSTOM_VALUE_ADVERTISER_CURRENCY",
+                            "METRIC_ESTIMATED_TOTAL_COST_FOR_IMPRESSIONS_WITH_CUSTOM_VALUE_ADVERTISER_CURRENCY",
+                            "METRIC_EXITS",
+                            "METRIC_EXPANSIONS",
+                            "METRIC_FIRST_QUARTILE_AUDIO",
+                            "METRIC_GENERAL_INVALID_TRAFFIC_GIVT_IMPRESSIONS",
+                            "METRIC_GENERAL_INVALID_TRAFFIC_GIVT_TRACKED_ADS",
+                            "METRIC_GIVT_ACTIVE_VIEW_ELIGIBLE_IMPRESSIONS",
+                            "METRIC_GIVT_ACTIVE_VIEW_MEASURABLE_IMPRESSIONS",
+                            "METRIC_GIVT_ACTIVE_VIEW_VIEWABLE_IMPRESSIONS",
+                            "METRIC_GIVT_BEGIN_TO_RENDER_IMPRESSIONS",
+                            "METRIC_GIVT_CLICKS",
+                            "METRIC_GMAIL_CONVERSIONS",
+                            "METRIC_GMAIL_POST_CLICK_CONVERSIONS",
+                            "METRIC_GMAIL_POST_VIEW_CONVERSIONS",
+                            "METRIC_GMAIL_POTENTIAL_VIEWS",
+                            "METRIC_IMPRESSIONS_WITH_CUSTOM_VALUE",
+                            "METRIC_IMPRESSIONS_WITH_POSITIVE_CUSTOM_VALUE",
+                            "METRIC_IMPRESSION_CUSTOM_VALUE_COST",
+                            "METRIC_INTERACTIVE_IMPRESSIONS",
+                            "METRIC_INVALID_ACTIVE_VIEW_ELIGIBLE_IMPRESSIONS",
+                            "METRIC_INVALID_ACTIVE_VIEW_MEASURABLE_IMPRESSIONS",
+                            "METRIC_INVALID_ACTIVE_VIEW_VIEWABLE_IMPRESSIONS",
+                            "METRIC_INVALID_BEGIN_TO_RENDER_IMPRESSIONS",
+                            "METRIC_INVALID_CLICKS",
+                            "METRIC_INVALID_IMPRESSIONS",
+                            "METRIC_INVALID_TRACKED_ADS",
+                            "METRIC_MEDIA_COST_ADVERTISER_CURRENCY_PER_STORE_VISIT_ADX_ONLY",
+                            "METRIC_MIDPOINT_AUDIO",
+                            "METRIC_ORIGINAL_AUDIENCE_FREQUENCY",
+                            "METRIC_PAUSES_AUDIO",
+                            "METRIC_PERCENT_IMPRESSIONS_WITH_POSITIVE_CUSTOM_VALUE",
+                            "METRIC_PLATFORM_FEE_RATE",
+                            "METRIC_POST_CLICK_CONVERSIONS_CROSS_ENVIRONMENT",
+                            "METRIC_POST_VIEW_CONVERSIONS_CROSS_ENVIRONMENT",
+                            "METRIC_POTENTIAL_IMPRESSIONS",
+                            "METRIC_POTENTIAL_VIEWS",
+                            "METRIC_PREMIUM_FEE_ADVERTISER_CURRENCY",
+                            "METRIC_PROGRAMMATIC_GUARANTEED_IMPRESSIONS_PASSED_DUE_TO_FREQUENCY",
+                            "METRIC_PROGRAMMATIC_GUARANTEED_SAVINGS_RE_INVESTED_DUE_TO_FREQUENCY_ADVERTISER_CURRENCY",
+                            "METRIC_REFUND_BILLABLE_COST_ADVERTISER_CURRENCY",
+                            "METRIC_REFUND_MEDIA_COST_ADVERTISER_CURRENCY",
+                            "METRIC_REFUND_PLATFORM_FEE_ADVERTISER_CURRENCY",
+                            "METRIC_REVENUE_ADVERTISER_CURRENCY_PER_STORE_VISIT_ADX_ONLY",
+                            "METRIC_RICH_MEDIA_ENGAGEMENTS",
+                            "METRIC_STARTS_AUDIO",
+                            "METRIC_STOPS_AUDIO",
+                            "METRIC_STORE_VISITS_ADX_ONLY",
+                            "METRIC_STORE_VISIT_CONVERSIONS",
+                            "METRIC_THIRD_QUARTILE_AUDIO",
+                            "METRIC_TIMERS",
+                            "METRIC_TOTAL_AUDIO_MEDIA_COST_ECPCL_ADVERTISER_CURRENCY",
+                            "METRIC_TOTAL_CONVERSIONS_CROSS_ENVIRONMENT",
+                            "METRIC_TOTAL_DISPLAY_TIME",
+                            "METRIC_TOTAL_IMPRESSION_CUSTOM_VALUE",
+                            "METRIC_TOTAL_INTERACTION_TIME",
+                            "METRIC_TOTAL_MEDIA_COST_ADVERTISER_CURRENCY_PER_STORE_VISIT_ADX_ONLY",
+                            "METRIC_TOTAL_USERS",
+                            "METRIC_TRACKED_ADS",
+                            "METRIC_TRUEVIEW_GENERAL_INVALID_TRAFFIC_GIVT_VIEWS",
+                            "METRIC_TRUEVIEW_INVALID_VIEWS",
+                            "METRIC_UNIQUE_COOKIES_WITH_IMPRESSIONS",
+                            "METRIC_UNIQUE_REACH_AVERAGE_IMPRESSION_FREQUENCY",
+                            "METRIC_UNIQUE_REACH_CLICK_REACH",
+                            "METRIC_UNIQUE_REACH_IMPRESSION_REACH",
+                            "METRIC_UNIQUE_REACH_TOTAL_REACH",
+                            "METRIC_VERIFIABLE_IMPRESSIONS",
+                            "METRIC_VIDEO_CLIENT_COST_ECPCV_ADVERTISER_CURRENCY",
+                            "METRIC_WATCH_TIME",
+                            "METRIC_LAST_TOUCH_TOTAL_CONVERSIONS",
+                            "METRIC_LAST_TOUCH_CLICK_THROUGH_CONVERSIONS",
+                            "METRIC_LAST_TOUCH_VIEW_THROUGH_CONVERSIONS",
+                            "METRIC_TOTAL_PATHS",
+                            "METRIC_TOTAL_EXPOSURES",
+                            "METRIC_PATH_CONVERSION_RATE",
+                            "METRIC_CONVERTING_PATHS",
+                            "METRIC_ACTIVITY_REVENUE",
+                            "METRIC_PERCENT_INVALID_IMPRESSIONS_PREBID",
+                            "METRIC_GRP_CORRECTED_IMPRESSIONS",
+                            "METRIC_DEMO_CORRECTED_CLICKS",
+                            "METRIC_VIRTUAL_PEOPLE_IMPRESSION_REACH_BY_DEMO",
+                            "METRIC_VIRTUAL_PEOPLE_CLICK_REACH_BY_DEMO",
+                            "METRIC_VIRTUAL_PEOPLE_AVERAGE_IMPRESSION_FREQUENCY_BY_DEMO",
+                            "METRIC_DEMO_COMPOSITION_IMPRESSION",
+                            "METRIC_VIRTUAL_PEOPLE_IMPRESSION_REACH_SHARE_PERCENT",
+                            "METRIC_DEMO_POPULATION",
+                            "METRIC_VIRTUAL_PEOPLE_IMPRESSION_REACH_PERCENT",
+                            "METRIC_TARGET_RATING_POINTS",
+                            "METRIC_PROVISIONAL_IMPRESSIONS",
+                            "METRIC_VENDOR_BLOCKED_ADS",
+                            "METRIC_GRP_CORRECTED_VIEWABLE_IMPRESSIONS",
+                            "METRIC_GRP_CORRECTED_VIEWABLE_IMPRESSIONS_SHARE_PERCENT",
+                            "METRIC_VIEWABLE_GROSS_RATING_POINTS",
+                            "METRIC_VIRTUAL_PEOPLE_AVERAGE_VIEWABLE_IMPRESSION_FREQUENCY_BY_DEMO",
+                            "METRIC_VIRTUAL_PEOPLE_VIEWABLE_IMPRESSION_REACH_BY_DEMO",
+                            "METRIC_VIRTUAL_PEOPLE_VIEWABLE_IMPRESSION_REACH_PERCENT",
+                            "METRIC_VIRTUAL_PEOPLE_VIEWABLE_IMPRESSION_REACH_SHARE_PERCENT"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "options": {
+                    "$ref": "Options",
+                    "description": "Additional query options."
+                },
+                "type": {
+                    "description": "Report type.",
+                    "enum": [
+                        "TYPE_GENERAL",
+                        "TYPE_AUDIENCE_PERFORMANCE",
+                        "TYPE_INVENTORY_AVAILABILITY",
+                        "TYPE_KEYWORD",
+                        "TYPE_PIXEL_LOAD",
+                        "TYPE_AUDIENCE_COMPOSITION",
+                        "TYPE_CROSS_PARTNER",
+                        "TYPE_PAGE_CATEGORY",
+                        "TYPE_THIRD_PARTY_DATA_PROVIDER",
+                        "TYPE_CROSS_PARTNER_THIRD_PARTY_DATA_PROVIDER",
+                        "TYPE_CLIENT_SAFE",
+                        "TYPE_ORDER_ID",
+                        "TYPE_FEE",
+                        "TYPE_CROSS_FEE",
+                        "TYPE_ACTIVE_GRP",
+                        "TYPE_YOUTUBE_VERTICAL",
+                        "TYPE_COMSCORE_VCE",
+                        "TYPE_TRUEVIEW",
+                        "TYPE_NIELSEN_AUDIENCE_PROFILE",
+                        "TYPE_NIELSEN_DAILY_REACH_BUILD",
+                        "TYPE_NIELSEN_SITE",
+                        "TYPE_REACH_AND_FREQUENCY",
+                        "TYPE_ESTIMATED_CONVERSION",
+                        "TYPE_VERIFICATION",
+                        "TYPE_TRUEVIEW_IAR",
+                        "TYPE_NIELSEN_ONLINE_GLOBAL_MARKET",
+                        "TYPE_PETRA_NIELSEN_AUDIENCE_PROFILE",
+                        "TYPE_PETRA_NIELSEN_DAILY_REACH_BUILD",
+                        "TYPE_PETRA_NIELSEN_ONLINE_GLOBAL_MARKET",
+                        "TYPE_NOT_SUPPORTED",
+                        "TYPE_REACH_AUDIENCE",
+                        "TYPE_LINEAR_TV_SEARCH_LIFT",
+                        "TYPE_PATH",
+                        "TYPE_PATH_ATTRIBUTION"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PathFilter": {
+            "description": "Path filters specify which paths to include in a report. A path is the result of combining DV360 events based on User ID to create a workflow of users' actions. When a path filter is set, the resulting report will only include paths that match the specified event at the specified position. All other paths will be excluded.",
+            "id": "PathFilter",
+            "properties": {
+                "eventFilters": {
+                    "description": "Filter on an event to be applied to some part of the path.",
+                    "items": {
+                        "$ref": "EventFilter"
+                    },
+                    "type": "array"
+                },
+                "pathMatchPosition": {
+                    "description": "Indicates the position of the path the filter should match to (first, last, or any event in path).",
+                    "enum": [
+                        "ANY",
+                        "FIRST",
+                        "LAST"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PathQueryOptions": {
+            "description": "Path Query Options for Report Options.",
+            "id": "PathQueryOptions",
+            "properties": {
+                "channelGrouping": {
+                    "$ref": "ChannelGrouping",
+                    "description": "Custom Channel Groupings."
+                },
+                "pathFilters": {
+                    "description": "Path Filters. There is a limit of 100 path filters that can be set per report.",
+                    "items": {
+                        "$ref": "PathFilter"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PathQueryOptionsFilter": {
+            "description": "Dimension Filter on path events.",
+            "id": "PathQueryOptionsFilter",
+            "properties": {
+                "filter": {
+                    "description": "Dimension the filter is applied to.",
+                    "enum": [
+                        "FILTER_UNKNOWN",
+                        "FILTER_DATE",
+                        "FILTER_DAY_OF_WEEK",
+                        "FILTER_WEEK",
+                        "FILTER_MONTH",
+                        "FILTER_YEAR",
+                        "FILTER_TIME_OF_DAY",
+                        "FILTER_CONVERSION_DELAY",
+                        "FILTER_CREATIVE_ID",
+                        "FILTER_CREATIVE_SIZE",
+                        "FILTER_CREATIVE_TYPE",
+                        "FILTER_EXCHANGE_ID",
+                        "FILTER_AD_POSITION",
+                        "FILTER_PUBLIC_INVENTORY",
+                        "FILTER_INVENTORY_SOURCE",
+                        "FILTER_CITY",
+                        "FILTER_REGION",
+                        "FILTER_DMA",
+                        "FILTER_COUNTRY",
+                        "FILTER_SITE_ID",
+                        "FILTER_CHANNEL_ID",
+                        "FILTER_PARTNER",
+                        "FILTER_ADVERTISER",
+                        "FILTER_INSERTION_ORDER",
+                        "FILTER_LINE_ITEM",
+                        "FILTER_PARTNER_CURRENCY",
+                        "FILTER_ADVERTISER_CURRENCY",
+                        "FILTER_ADVERTISER_TIMEZONE",
+                        "FILTER_LINE_ITEM_TYPE",
+                        "FILTER_USER_LIST",
+                        "FILTER_USER_LIST_FIRST_PARTY",
+                        "FILTER_USER_LIST_THIRD_PARTY",
+                        "FILTER_TARGETED_USER_LIST",
+                        "FILTER_DATA_PROVIDER",
+                        "FILTER_ORDER_ID",
+                        "FILTER_VIDEO_PLAYER_SIZE",
+                        "FILTER_VIDEO_DURATION_SECONDS",
+                        "FILTER_KEYWORD",
+                        "FILTER_PAGE_CATEGORY",
+                        "FILTER_CAMPAIGN_DAILY_FREQUENCY",
+                        "FILTER_LINE_ITEM_DAILY_FREQUENCY",
+                        "FILTER_LINE_ITEM_LIFETIME_FREQUENCY",
+                        "FILTER_OS",
+                        "FILTER_BROWSER",
+                        "FILTER_CARRIER",
+                        "FILTER_SITE_LANGUAGE",
+                        "FILTER_INVENTORY_FORMAT",
+                        "FILTER_ZIP_CODE",
+                        "FILTER_VIDEO_RATING_TIER",
+                        "FILTER_VIDEO_FORMAT_SUPPORT",
+                        "FILTER_VIDEO_SKIPPABLE_SUPPORT",
+                        "FILTER_VIDEO_CREATIVE_DURATION",
+                        "FILTER_PAGE_LAYOUT",
+                        "FILTER_VIDEO_AD_POSITION_IN_STREAM",
+                        "FILTER_AGE",
+                        "FILTER_GENDER",
+                        "FILTER_QUARTER",
+                        "FILTER_TRUEVIEW_CONVERSION_TYPE",
+                        "FILTER_MOBILE_GEO",
+                        "FILTER_MRAID_SUPPORT",
+                        "FILTER_ACTIVE_VIEW_EXPECTED_VIEWABILITY",
+                        "FILTER_VIDEO_CREATIVE_DURATION_SKIPPABLE",
+                        "FILTER_NIELSEN_COUNTRY_CODE",
+                        "FILTER_NIELSEN_DEVICE_ID",
+                        "FILTER_NIELSEN_GENDER",
+                        "FILTER_NIELSEN_AGE",
+                        "FILTER_INVENTORY_SOURCE_TYPE",
+                        "FILTER_CREATIVE_WIDTH",
+                        "FILTER_CREATIVE_HEIGHT",
+                        "FILTER_DFP_ORDER_ID",
+                        "FILTER_TRUEVIEW_AGE",
+                        "FILTER_TRUEVIEW_GENDER",
+                        "FILTER_TRUEVIEW_PARENTAL_STATUS",
+                        "FILTER_TRUEVIEW_REMARKETING_LIST",
+                        "FILTER_TRUEVIEW_INTEREST",
+                        "FILTER_TRUEVIEW_AD_GROUP_ID",
+                        "FILTER_TRUEVIEW_AD_GROUP_AD_ID",
+                        "FILTER_TRUEVIEW_IAR_LANGUAGE",
+                        "FILTER_TRUEVIEW_IAR_GENDER",
+                        "FILTER_TRUEVIEW_IAR_AGE",
+                        "FILTER_TRUEVIEW_IAR_CATEGORY",
+                        "FILTER_TRUEVIEW_IAR_COUNTRY",
+                        "FILTER_TRUEVIEW_IAR_CITY",
+                        "FILTER_TRUEVIEW_IAR_REGION",
+                        "FILTER_TRUEVIEW_IAR_ZIPCODE",
+                        "FILTER_TRUEVIEW_IAR_REMARKETING_LIST",
+                        "FILTER_TRUEVIEW_IAR_INTEREST",
+                        "FILTER_TRUEVIEW_IAR_PARENTAL_STATUS",
+                        "FILTER_TRUEVIEW_IAR_TIME_OF_DAY",
+                        "FILTER_TRUEVIEW_CUSTOM_AFFINITY",
+                        "FILTER_TRUEVIEW_CATEGORY",
+                        "FILTER_TRUEVIEW_KEYWORD",
+                        "FILTER_TRUEVIEW_PLACEMENT",
+                        "FILTER_TRUEVIEW_URL",
+                        "FILTER_TRUEVIEW_COUNTRY",
+                        "FILTER_TRUEVIEW_REGION",
+                        "FILTER_TRUEVIEW_CITY",
+                        "FILTER_TRUEVIEW_DMA",
+                        "FILTER_TRUEVIEW_ZIPCODE",
+                        "FILTER_NOT_SUPPORTED",
+                        "FILTER_MEDIA_PLAN",
+                        "FILTER_TRUEVIEW_IAR_YOUTUBE_CHANNEL",
+                        "FILTER_TRUEVIEW_IAR_YOUTUBE_VIDEO",
+                        "FILTER_SKIPPABLE_SUPPORT",
+                        "FILTER_COMPANION_CREATIVE_ID",
+                        "FILTER_BUDGET_SEGMENT_DESCRIPTION",
+                        "FILTER_FLOODLIGHT_ACTIVITY_ID",
+                        "FILTER_DEVICE_MODEL",
+                        "FILTER_DEVICE_MAKE",
+                        "FILTER_DEVICE_TYPE",
+                        "FILTER_CREATIVE_ATTRIBUTE",
+                        "FILTER_INVENTORY_COMMITMENT_TYPE",
+                        "FILTER_INVENTORY_RATE_TYPE",
+                        "FILTER_INVENTORY_DELIVERY_METHOD",
+                        "FILTER_INVENTORY_SOURCE_EXTERNAL_ID",
+                        "FILTER_AUTHORIZED_SELLER_STATE",
+                        "FILTER_VIDEO_DURATION_SECONDS_RANGE",
+                        "FILTER_PARTNER_NAME",
+                        "FILTER_PARTNER_STATUS",
+                        "FILTER_ADVERTISER_NAME",
+                        "FILTER_ADVERTISER_INTEGRATION_CODE",
+                        "FILTER_ADVERTISER_INTEGRATION_STATUS",
+                        "FILTER_CARRIER_NAME",
+                        "FILTER_CHANNEL_NAME",
+                        "FILTER_CITY_NAME",
+                        "FILTER_COMPANION_CREATIVE_NAME",
+                        "FILTER_USER_LIST_FIRST_PARTY_NAME",
+                        "FILTER_USER_LIST_THIRD_PARTY_NAME",
+                        "FILTER_NIELSEN_RESTATEMENT_DATE",
+                        "FILTER_NIELSEN_DATE_RANGE",
+                        "FILTER_INSERTION_ORDER_NAME",
+                        "FILTER_REGION_NAME",
+                        "FILTER_DMA_NAME",
+                        "FILTER_TRUEVIEW_IAR_REGION_NAME",
+                        "FILTER_TRUEVIEW_DMA_NAME",
+                        "FILTER_TRUEVIEW_REGION_NAME",
+                        "FILTER_ACTIVE_VIEW_CUSTOM_METRIC_ID",
+                        "FILTER_ACTIVE_VIEW_CUSTOM_METRIC_NAME",
+                        "FILTER_AD_TYPE",
+                        "FILTER_ALGORITHM",
+                        "FILTER_ALGORITHM_ID",
+                        "FILTER_AMP_PAGE_REQUEST",
+                        "FILTER_ANONYMOUS_INVENTORY_MODELING",
+                        "FILTER_APP_URL",
+                        "FILTER_APP_URL_EXCLUDED",
+                        "FILTER_ATTRIBUTED_USERLIST",
+                        "FILTER_ATTRIBUTED_USERLIST_COST",
+                        "FILTER_ATTRIBUTED_USERLIST_TYPE",
+                        "FILTER_ATTRIBUTION_MODEL",
+                        "FILTER_AUDIENCE_LIST",
+                        "FILTER_AUDIENCE_LIST_COST",
+                        "FILTER_AUDIENCE_LIST_TYPE",
+                        "FILTER_AUDIENCE_NAME",
+                        "FILTER_AUDIENCE_TYPE",
+                        "FILTER_BILLABLE_OUTCOME",
+                        "FILTER_BRAND_LIFT_TYPE",
+                        "FILTER_CHANNEL_TYPE",
+                        "FILTER_CM_PLACEMENT_ID",
+                        "FILTER_CONVERSION_SOURCE",
+                        "FILTER_CONVERSION_SOURCE_ID",
+                        "FILTER_COUNTRY_ID",
+                        "FILTER_CREATIVE",
+                        "FILTER_CREATIVE_ASSET",
+                        "FILTER_CREATIVE_INTEGRATION_CODE",
+                        "FILTER_CREATIVE_RENDERED_IN_AMP",
+                        "FILTER_CREATIVE_SOURCE",
+                        "FILTER_CREATIVE_STATUS",
+                        "FILTER_DATA_PROVIDER_NAME",
+                        "FILTER_DETAILED_DEMOGRAPHICS",
+                        "FILTER_DETAILED_DEMOGRAPHICS_ID",
+                        "FILTER_DEVICE",
+                        "FILTER_GAM_INSERTION_ORDER",
+                        "FILTER_GAM_LINE_ITEM",
+                        "FILTER_GAM_LINE_ITEM_ID",
+                        "FILTER_DIGITAL_CONTENT_LABEL",
+                        "FILTER_DOMAIN",
+                        "FILTER_ELIGIBLE_COOKIES_ON_FIRST_PARTY_AUDIENCE_LIST",
+                        "FILTER_ELIGIBLE_COOKIES_ON_THIRD_PARTY_AUDIENCE_LIST_AND_INTEREST",
+                        "FILTER_EXCHANGE",
+                        "FILTER_EXCHANGE_CODE",
+                        "FILTER_EXTENSION",
+                        "FILTER_EXTENSION_STATUS",
+                        "FILTER_EXTENSION_TYPE",
+                        "FILTER_FIRST_PARTY_AUDIENCE_LIST_COST",
+                        "FILTER_FIRST_PARTY_AUDIENCE_LIST_TYPE",
+                        "FILTER_FLOODLIGHT_ACTIVITY",
+                        "FILTER_FORMAT",
+                        "FILTER_GMAIL_AGE",
+                        "FILTER_GMAIL_CITY",
+                        "FILTER_GMAIL_COUNTRY",
+                        "FILTER_GMAIL_COUNTRY_NAME",
+                        "FILTER_GMAIL_DEVICE_TYPE",
+                        "FILTER_GMAIL_DEVICE_TYPE_NAME",
+                        "FILTER_GMAIL_GENDER",
+                        "FILTER_GMAIL_REGION",
+                        "FILTER_GMAIL_REMARKETING_LIST",
+                        "FILTER_HOUSEHOLD_INCOME",
+                        "FILTER_IMPRESSION_COUNTING_METHOD",
+                        "FILTER_YOUTUBE_PROGRAMMATIC_GUARANTEED_INSERTION_ORDER",
+                        "FILTER_INSERTION_ORDER_INTEGRATION_CODE",
+                        "FILTER_INSERTION_ORDER_STATUS",
+                        "FILTER_INTEREST",
+                        "FILTER_INVENTORY_SOURCE_GROUP",
+                        "FILTER_INVENTORY_SOURCE_GROUP_ID",
+                        "FILTER_INVENTORY_SOURCE_ID",
+                        "FILTER_INVENTORY_SOURCE_NAME",
+                        "FILTER_LIFE_EVENT",
+                        "FILTER_LIFE_EVENTS",
+                        "FILTER_LINE_ITEM_INTEGRATION_CODE",
+                        "FILTER_LINE_ITEM_NAME",
+                        "FILTER_LINE_ITEM_STATUS",
+                        "FILTER_MATCH_RATIO",
+                        "FILTER_MEASUREMENT_SOURCE",
+                        "FILTER_MEDIA_PLAN_NAME",
+                        "FILTER_PARENTAL_STATUS",
+                        "FILTER_PLACEMENT_ALL_YOUTUBE_CHANNELS",
+                        "FILTER_PLATFORM",
+                        "FILTER_PLAYBACK_METHOD",
+                        "FILTER_POSITION_IN_CONTENT",
+                        "FILTER_PUBLISHER_PROPERTY",
+                        "FILTER_PUBLISHER_PROPERTY_ID",
+                        "FILTER_PUBLISHER_PROPERTY_SECTION",
+                        "FILTER_PUBLISHER_PROPERTY_SECTION_ID",
+                        "FILTER_REFUND_REASON",
+                        "FILTER_REMARKETING_LIST",
+                        "FILTER_REWARDED",
+                        "FILTER_SENSITIVE_CATEGORY",
+                        "FILTER_SERVED_PIXEL_DENSITY",
+                        "FILTER_TARGETED_DATA_PROVIDERS",
+                        "FILTER_THIRD_PARTY_AUDIENCE_LIST_COST",
+                        "FILTER_THIRD_PARTY_AUDIENCE_LIST_TYPE",
+                        "FILTER_TRUEVIEW_AD",
+                        "FILTER_TRUEVIEW_AD_GROUP",
+                        "FILTER_TRUEVIEW_DETAILED_DEMOGRAPHICS",
+                        "FILTER_TRUEVIEW_DETAILED_DEMOGRAPHICS_ID",
+                        "FILTER_TRUEVIEW_HOUSEHOLD_INCOME",
+                        "FILTER_TRUEVIEW_IAR_COUNTRY_NAME",
+                        "FILTER_TRUEVIEW_REMARKETING_LIST_NAME",
+                        "FILTER_VARIANT_ID",
+                        "FILTER_VARIANT_NAME",
+                        "FILTER_VARIANT_VERSION",
+                        "FILTER_VERIFICATION_VIDEO_PLAYER_SIZE",
+                        "FILTER_VERIFICATION_VIDEO_POSITION",
+                        "FILTER_VIDEO_COMPANION_CREATIVE_SIZE",
+                        "FILTER_VIDEO_CONTINUOUS_PLAY",
+                        "FILTER_VIDEO_DURATION",
+                        "FILTER_YOUTUBE_ADAPTED_AUDIENCE_LIST",
+                        "FILTER_YOUTUBE_AD_VIDEO",
+                        "FILTER_YOUTUBE_AD_VIDEO_ID",
+                        "FILTER_YOUTUBE_CHANNEL",
+                        "FILTER_YOUTUBE_PROGRAMMATIC_GUARANTEED_ADVERTISER",
+                        "FILTER_YOUTUBE_PROGRAMMATIC_GUARANTEED_PARTNER",
+                        "FILTER_YOUTUBE_VIDEO",
+                        "FILTER_ZIP_POSTAL_CODE",
+                        "FILTER_PLACEMENT_NAME_ALL_YOUTUBE_CHANNELS",
+                        "FILTER_TRUEVIEW_PLACEMENT_ID",
+                        "FILTER_PATH_PATTERN_ID",
+                        "FILTER_PATH_EVENT_INDEX",
+                        "FILTER_EVENT_TYPE",
+                        "FILTER_CHANNEL_GROUPING",
+                        "FILTER_OM_SDK_AVAILABLE",
+                        "FILTER_DATA_SOURCE"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "match": {
+                    "description": "Indicates how the filter should be matched to the value.",
+                    "enum": [
+                        "UNKNOWN",
+                        "EXACT",
+                        "PARTIAL",
+                        "BEGINS_WITH",
+                        "WILDCARD_EXPRESSION"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "values": {
+                    "description": "Value to filter on.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Query": {
+            "description": "Represents a query.",
+            "id": "Query",
+            "properties": {
+                "kind": {
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"doubleclickbidmanager#query\".",
+                    "type": "string"
+                },
+                "metadata": {
+                    "$ref": "QueryMetadata",
+                    "description": "Query metadata."
+                },
+                "params": {
+                    "$ref": "Parameters",
+                    "description": "Query parameters."
+                },
+                "queryId": {
+                    "description": "Query ID.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "reportDataEndTimeMs": {
+                    "description": "The ending time for the data that is shown in the report. Note, reportDataEndTimeMs is required if metadata.dataRange is CUSTOM_DATES and ignored otherwise.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "reportDataStartTimeMs": {
+                    "description": "The starting time for the data that is shown in the report. Note, reportDataStartTimeMs is required if metadata.dataRange is CUSTOM_DATES and ignored otherwise.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "schedule": {
+                    "$ref": "QuerySchedule",
+                    "description": "Information on how often and when to run a query."
+                },
+                "timezoneCode": {
+                    "description": "Canonical timezone code for report data time. Defaults to America/New_York.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "QueryMetadata": {
+            "description": "Query metadata.",
+            "id": "QueryMetadata",
+            "properties": {
+                "dataRange": {
+                    "description": "Range of report data.",
+                    "enum": [
+                        "CUSTOM_DATES",
+                        "CURRENT_DAY",
+                        "PREVIOUS_DAY",
+                        "WEEK_TO_DATE",
+                        "MONTH_TO_DATE",
+                        "QUARTER_TO_DATE",
+                        "YEAR_TO_DATE",
+                        "PREVIOUS_WEEK",
+                        "PREVIOUS_HALF_MONTH",
+                        "PREVIOUS_MONTH",
+                        "PREVIOUS_QUARTER",
+                        "PREVIOUS_YEAR",
+                        "LAST_7_DAYS",
+                        "LAST_30_DAYS",
+                        "LAST_90_DAYS",
+                        "LAST_365_DAYS",
+                        "ALL_TIME",
+                        "LAST_14_DAYS",
+                        "TYPE_NOT_SUPPORTED",
+                        "LAST_60_DAYS"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "format": {
+                    "description": "Format of the generated report.",
+                    "enum": [
+                        "CSV",
+                        "EXCEL_CSV",
+                        "XLSX"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "googleCloudStoragePathForLatestReport": {
+                    "description": "The path to the location in Google Cloud Storage where the latest report is stored.",
+                    "type": "string"
+                },
+                "googleDrivePathForLatestReport": {
+                    "description": "The path in Google Drive for the latest report.",
+                    "type": "string"
+                },
+                "latestReportRunTimeMs": {
+                    "description": "The time when the latest report started to run.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "locale": {
+                    "description": "Locale of the generated reports. Valid values are cs CZECH de GERMAN en ENGLISH es SPANISH fr FRENCH it ITALIAN ja JAPANESE ko KOREAN pl POLISH pt-BR BRAZILIAN_PORTUGUESE ru RUSSIAN tr TURKISH uk UKRAINIAN zh-CN CHINA_CHINESE zh-TW TAIWAN_CHINESE An locale string not in the list above will generate reports in English.",
+                    "type": "string"
+                },
+                "reportCount": {
+                    "description": "Number of reports that have been generated for the query.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "running": {
+                    "description": "Whether the latest report is currently running.",
+                    "type": "boolean"
+                },
+                "sendNotification": {
+                    "description": "Whether to send an email notification when a report is ready. Default to false.",
+                    "type": "boolean"
+                },
+                "shareEmailAddress": {
+                    "description": "List of email addresses which are sent email notifications when the report is finished. Separate from sendNotification.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "title": {
+                    "description": "Query title. It is used to name the reports generated from this query.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "QuerySchedule": {
+            "description": "Information on how frequently and when to run a query.",
+            "id": "QuerySchedule",
+            "properties": {
+                "endTimeMs": {
+                    "description": "Datetime to periodically run the query until.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "frequency": {
+                    "description": "How often the query is run.",
+                    "enum": [
+                        "ONE_TIME",
+                        "DAILY",
+                        "WEEKLY",
+                        "SEMI_MONTHLY",
+                        "MONTHLY",
+                        "QUARTERLY"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "nextRunMinuteOfDay": {
+                    "description": "Time of day at which a new report will be generated, represented as minutes past midnight. Range is 0 to 1439. Only applies to scheduled reports.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "nextRunTimezoneCode": {
+                    "description": "Canonical timezone code for report generation time. Defaults to America/New_York.",
+                    "type": "string"
+                },
+                "startTimeMs": {
+                    "description": "When to start running the query. Not applicable to `ONE_TIME` frequency.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Report": {
+            "description": "Represents a report.",
+            "id": "Report",
+            "properties": {
+                "key": {
+                    "$ref": "ReportKey",
+                    "description": "Key used to identify a report."
+                },
+                "metadata": {
+                    "$ref": "ReportMetadata",
+                    "description": "Report metadata."
+                },
+                "params": {
+                    "$ref": "Parameters",
+                    "description": "Report parameters."
+                }
+            },
+            "type": "object"
+        },
+        "ReportFailure": {
+            "description": "An explanation of a report failure.",
+            "id": "ReportFailure",
+            "properties": {
+                "errorCode": {
+                    "description": "Error code that shows why the report was not created.",
+                    "enum": [
+                        "AUTHENTICATION_ERROR",
+                        "UNAUTHORIZED_API_ACCESS",
+                        "SERVER_ERROR",
+                        "VALIDATION_ERROR",
+                        "REPORTING_FATAL_ERROR",
+                        "REPORTING_TRANSIENT_ERROR",
+                        "REPORTING_IMCOMPATIBLE_METRICS",
+                        "REPORTING_ILLEGAL_FILENAME",
+                        "REPORTING_QUERY_NOT_FOUND",
+                        "REPORTING_BUCKET_NOT_FOUND",
+                        "REPORTING_CREATE_BUCKET_FAILED",
+                        "REPORTING_DELETE_BUCKET_FAILED",
+                        "REPORTING_UPDATE_BUCKET_PERMISSION_FAILED",
+                        "REPORTING_WRITE_BUCKET_OBJECT_FAILED",
+                        "DEPRECATED_REPORTING_INVALID_QUERY",
+                        "REPORTING_INVALID_QUERY_TOO_MANY_UNFILTERED_LARGE_GROUP_BYS",
+                        "REPORTING_INVALID_QUERY_TITLE_MISSING",
+                        "REPORTING_INVALID_QUERY_MISSING_PARTNER_AND_ADVERTISER_FILTERS"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReportKey": {
+            "description": "Key used to identify a report.",
+            "id": "ReportKey",
+            "properties": {
+                "queryId": {
+                    "description": "Query ID.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "reportId": {
+                    "description": "Report ID.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReportMetadata": {
+            "description": "Report metadata.",
+            "id": "ReportMetadata",
+            "properties": {
+                "googleCloudStoragePath": {
+                    "description": "The path to the location in Google Cloud Storage where the report is stored.",
+                    "type": "string"
+                },
+                "reportDataEndTimeMs": {
+                    "description": "The ending time for the data that is shown in the report.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "reportDataStartTimeMs": {
+                    "description": "The starting time for the data that is shown in the report.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "status": {
+                    "$ref": "ReportStatus",
+                    "description": "Report status."
+                }
+            },
+            "type": "object"
+        },
+        "ReportStatus": {
+            "description": "Report status.",
+            "id": "ReportStatus",
+            "properties": {
+                "failure": {
+                    "$ref": "ReportFailure",
+                    "description": "If the report failed, this records the cause."
+                },
+                "finishTimeMs": {
+                    "description": "The time when this report either completed successfully or failed.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "format": {
+                    "description": "The file type of the report.",
+                    "enum": [
+                        "CSV",
+                        "EXCEL_CSV",
+                        "XLSX"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "state": {
+                    "description": "The state of the report.",
+                    "enum": [
+                        "RUNNING",
+                        "DONE",
+                        "FAILED"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RowStatus": {
+            "description": "Represents the upload status of a row in the request.",
+            "id": "RowStatus",
+            "properties": {
+                "changed": {
+                    "description": "Whether the stored entity is changed as a result of upload.",
+                    "type": "boolean"
+                },
+                "entityId": {
+                    "description": "Entity Id.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "entityName": {
+                    "description": "Entity name.",
+                    "type": "string"
+                },
+                "errors": {
+                    "description": "Reasons why the entity can't be uploaded.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "persisted": {
+                    "description": "Whether the entity is persisted.",
+                    "type": "boolean"
+                },
+                "rowNumber": {
+                    "description": "Row number.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "Rule": {
+            "description": "A Rule defines a name, and a boolean expression in [conjunctive normal form](http: //mathworld.wolfram.com/ConjunctiveNormalForm.html){.external} that can be // applied to a path event to determine if that name should be applied.",
+            "id": "Rule",
+            "properties": {
+                "disjunctiveMatchStatements": {
+                    "items": {
+                        "$ref": "DisjunctiveMatchStatement"
+                    },
+                    "type": "array"
+                },
+                "name": {
+                    "description": "Rule name.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RunQueryRequest": {
+            "description": "Request to run a stored query to generate a report.",
+            "id": "RunQueryRequest",
+            "properties": {
+                "dataRange": {
+                    "description": "Report data range used to generate the report.",
+                    "enum": [
+                        "CUSTOM_DATES",
+                        "CURRENT_DAY",
+                        "PREVIOUS_DAY",
+                        "WEEK_TO_DATE",
+                        "MONTH_TO_DATE",
+                        "QUARTER_TO_DATE",
+                        "YEAR_TO_DATE",
+                        "PREVIOUS_WEEK",
+                        "PREVIOUS_HALF_MONTH",
+                        "PREVIOUS_MONTH",
+                        "PREVIOUS_QUARTER",
+                        "PREVIOUS_YEAR",
+                        "LAST_7_DAYS",
+                        "LAST_30_DAYS",
+                        "LAST_90_DAYS",
+                        "LAST_365_DAYS",
+                        "ALL_TIME",
+                        "LAST_14_DAYS",
+                        "TYPE_NOT_SUPPORTED",
+                        "LAST_60_DAYS"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "reportDataEndTimeMs": {
+                    "description": "The ending time for the data that is shown in the report. Note, reportDataEndTimeMs is required if dataRange is CUSTOM_DATES and ignored otherwise.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "reportDataStartTimeMs": {
+                    "description": "The starting time for the data that is shown in the report. Note, reportDataStartTimeMs is required if dataRange is CUSTOM_DATES and ignored otherwise.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "timezoneCode": {
+                    "description": "Canonical timezone code for report data time. Defaults to America/New_York.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UploadLineItemsRequest": {
+            "description": "Request to upload line items.",
+            "id": "UploadLineItemsRequest",
+            "properties": {
+                "dryRun": {
+                    "description": "Set to true to get upload status without actually persisting the line items.",
+                    "type": "boolean"
+                },
+                "format": {
+                    "description": "Format the line items are in. Default to CSV.",
+                    "enum": [
+                        "CSV"
+                    ],
+                    "enumDescriptions": [
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "lineItems": {
+                    "description": "Line items in CSV to upload. Refer to Entity Write File Format for more information on file format.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UploadLineItemsResponse": {
+            "description": "Upload line items response.",
+            "id": "UploadLineItemsResponse",
+            "properties": {
+                "uploadStatus": {
+                    "$ref": "UploadStatus",
+                    "description": "Status of upload."
+                }
+            },
+            "type": "object"
+        },
+        "UploadStatus": {
+            "description": "Represents the status of upload.",
+            "id": "UploadStatus",
+            "properties": {
+                "errors": {
+                    "description": "Reasons why upload can't be completed.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "rowStatus": {
+                    "description": "Per-row upload status.",
+                    "items": {
+                        "$ref": "RowStatus"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         }
-      }
     },
-    "sdf": {
-      "methods": {
-        "download": {
-          "flatPath": "sdf/download",
-          "path": "sdf/download",
-          "response": {
-            "$ref": "DownloadResponse"
-          },
-          "description": "Retrieves entities in SDF format.",
-          "request": {
-            "$ref": "DownloadRequest"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/doubleclickbidmanager"
-          ],
-          "parameters": {},
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "id": "doubleclickbidmanager.sdf.download"
-        }
-      }
-    }
-  },
-  "ownerName": "Google",
-  "title": "DoubleClick Bid Manager API",
-  "rootUrl": "https://doubleclickbidmanager.googleapis.com/",
-  "description": "DoubleClick Bid Manager API allows users to manage and create campaigns and reports.",
-  "protocol": "rest",
-  "ownerDomain": "google.com",
-  "baseUrl": "https://doubleclickbidmanager.googleapis.com/doubleclickbidmanager/v1.1/",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "id": "doubleclickbidmanager:v1.1",
-  "servicePath": "doubleclickbidmanager/v1.1/",
-  "mtlsRootUrl": "https://doubleclickbidmanager.mtls.googleapis.com/",
-  "name": "doubleclickbidmanager",
-  "basePath": "/doubleclickbidmanager/v1.1/"
-}
+    "servicePath": "doubleclickbidmanager/v1.1/",
+    "title": "DoubleClick Bid Manager API",
+    "version": "v1.1"
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/drive.v2.json b/googleapiclient/discovery_cache/documents/drive.v2.json
index 6777150..89a9679 100644
--- a/googleapiclient/discovery_cache/documents/drive.v2.json
+++ b/googleapiclient/discovery_cache/documents/drive.v2.json
@@ -1,6015 +1,6015 @@
 {
- "kind": "discovery#restDescription",
- "etag": "\"-2NioU2H8y8siEzrBOV_qzRI6kQ/Bbkqvt0S850AmVe1JApOfKsd5Ng\"",
- "discoveryVersion": "v1",
- "id": "drive:v2",
- "name": "drive",
- "version": "v2",
- "revision": "20201115",
- "title": "Drive API",
- "description": "Manages files in Drive including uploading, downloading, searching, detecting changes, and updating sharing permissions.",
- "ownerDomain": "google.com",
- "ownerName": "Google",
- "icons": {
-  "x16": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_16.png",
-  "x32": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_32.png"
- },
- "documentationLink": "https://developers.google.com/drive/",
- "protocol": "rest",
- "baseUrl": "https://www.googleapis.com/drive/v2/",
- "basePath": "/drive/v2/",
- "rootUrl": "https://www.googleapis.com/",
- "servicePath": "drive/v2/",
- "batchPath": "batch/drive/v2",
- "parameters": {
-  "alt": {
-   "type": "string",
-   "description": "Data format for the response.",
-   "default": "json",
-   "enum": [
-    "json"
-   ],
-   "enumDescriptions": [
-    "Responses with Content-Type of application/json"
-   ],
-   "location": "query"
-  },
-  "fields": {
-   "type": "string",
-   "description": "Selector specifying which fields to include in a partial response.",
-   "location": "query"
-  },
-  "key": {
-   "type": "string",
-   "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-   "location": "query"
-  },
-  "oauth_token": {
-   "type": "string",
-   "description": "OAuth 2.0 token for the current user.",
-   "location": "query"
-  },
-  "prettyPrint": {
-   "type": "boolean",
-   "description": "Returns response with indentations and line breaks.",
-   "default": "true",
-   "location": "query"
-  },
-  "quotaUser": {
-   "type": "string",
-   "description": "An opaque string that represents a user for quota purposes. Must not exceed 40 characters.",
-   "location": "query"
-  },
-  "userIp": {
-   "type": "string",
-   "description": "Deprecated. Please use quotaUser instead.",
-   "location": "query"
-  }
- },
- "auth": {
-  "oauth2": {
-   "scopes": {
-    "https://www.googleapis.com/auth/drive": {
-     "description": "See, edit, create, and delete all of your Google Drive files"
-    },
-    "https://www.googleapis.com/auth/drive.appdata": {
-     "description": "View and manage its own configuration data in your Google Drive"
-    },
-    "https://www.googleapis.com/auth/drive.apps.readonly": {
-     "description": "View your Google Drive apps"
-    },
-    "https://www.googleapis.com/auth/drive.file": {
-     "description": "View and manage Google Drive files and folders that you have opened or created with this app"
-    },
-    "https://www.googleapis.com/auth/drive.metadata": {
-     "description": "View and manage metadata of files in your Google Drive"
-    },
-    "https://www.googleapis.com/auth/drive.metadata.readonly": {
-     "description": "View metadata for files in your Google Drive"
-    },
-    "https://www.googleapis.com/auth/drive.photos.readonly": {
-     "description": "View the photos, videos and albums in your Google Photos"
-    },
-    "https://www.googleapis.com/auth/drive.readonly": {
-     "description": "See and download all your Google Drive files"
-    },
-    "https://www.googleapis.com/auth/drive.scripts": {
-     "description": "Modify your Google Apps Script scripts' behavior"
-    }
-   }
-  }
- },
- "schemas": {
-  "About": {
-   "id": "About",
-   "type": "object",
-   "description": "An item with user information and settings.",
-   "properties": {
-    "additionalRoleInfo": {
-     "type": "array",
-     "description": "Information about supported additional roles per file type. The most specific type takes precedence.",
-     "items": {
-      "type": "object",
-      "properties": {
-       "roleSets": {
-        "type": "array",
-        "description": "The supported additional roles per primary role.",
-        "items": {
-         "type": "object",
-         "properties": {
-          "additionalRoles": {
-           "type": "array",
-           "description": "The supported additional roles with the primary role.",
-           "items": {
-            "type": "string"
-           }
-          },
-          "primaryRole": {
-           "type": "string",
-           "description": "A primary permission role."
-          }
-         }
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/drive": {
+                    "description": "See, edit, create, and delete all of your Google Drive files"
+                },
+                "https://www.googleapis.com/auth/drive.appdata": {
+                    "description": "See, create, and delete its own configuration data in your Google Drive"
+                },
+                "https://www.googleapis.com/auth/drive.apps.readonly": {
+                    "description": "View your Google Drive apps"
+                },
+                "https://www.googleapis.com/auth/drive.file": {
+                    "description": "View and manage Google Drive files and folders that you have opened or created with this app"
+                },
+                "https://www.googleapis.com/auth/drive.metadata": {
+                    "description": "View and manage metadata of files in your Google Drive"
+                },
+                "https://www.googleapis.com/auth/drive.metadata.readonly": {
+                    "description": "See information about your Google Drive files"
+                },
+                "https://www.googleapis.com/auth/drive.photos.readonly": {
+                    "description": "View the photos, videos and albums in your Google Photos"
+                },
+                "https://www.googleapis.com/auth/drive.readonly": {
+                    "description": "See and download all your Google Drive files"
+                },
+                "https://www.googleapis.com/auth/drive.scripts": {
+                    "description": "Modify your Google Apps Script scripts' behavior"
+                }
+            }
         }
-       },
-       "type": {
-        "type": "string",
-        "description": "The content type that this additional role info applies to."
-       }
-      }
-     }
     },
-    "canCreateDrives": {
-     "type": "boolean",
-     "description": "Whether the user can create shared drives."
-    },
-    "canCreateTeamDrives": {
-     "type": "boolean",
-     "description": "Deprecated - use canCreateDrives instead."
-    },
-    "domainSharingPolicy": {
-     "type": "string",
-     "description": "The domain sharing policy for the current user. Possible values are:  \n- allowed \n- allowedWithWarning \n- incomingOnly \n- disallowed"
-    },
-    "driveThemes": {
-     "type": "array",
-     "description": "A list of themes that are supported for shared drives.",
-     "items": {
-      "type": "object",
-      "properties": {
-       "backgroundImageLink": {
-        "type": "string",
-        "description": "A link to this theme's background image."
-       },
-       "colorRgb": {
-        "type": "string",
-        "description": "The color of this theme as an RGB hex string."
-       },
-       "id": {
-        "type": "string",
-        "description": "The ID of the theme."
-       }
-      }
-     }
-    },
-    "etag": {
-     "type": "string",
-     "description": "The ETag of the item."
-    },
-    "exportFormats": {
-     "type": "array",
-     "description": "The allowable export formats.",
-     "items": {
-      "type": "object",
-      "properties": {
-       "source": {
-        "type": "string",
-        "description": "The content type to convert from."
-       },
-       "targets": {
-        "type": "array",
-        "description": "The possible content types to convert to.",
-        "items": {
-         "type": "string"
-        }
-       }
-      }
-     }
-    },
-    "features": {
-     "type": "array",
-     "description": "List of additional features enabled on this account.",
-     "items": {
-      "type": "object",
-      "properties": {
-       "featureName": {
-        "type": "string",
-        "description": "The name of the feature."
-       },
-       "featureRate": {
-        "type": "number",
-        "description": "The request limit rate for this feature, in queries per second.",
-        "format": "double"
-       }
-      }
-     }
-    },
-    "folderColorPalette": {
-     "type": "array",
-     "description": "The palette of allowable folder colors as RGB hex strings.",
-     "items": {
-      "type": "string"
-     }
-    },
-    "importFormats": {
-     "type": "array",
-     "description": "The allowable import formats.",
-     "items": {
-      "type": "object",
-      "properties": {
-       "source": {
-        "type": "string",
-        "description": "The imported file's content type to convert from."
-       },
-       "targets": {
-        "type": "array",
-        "description": "The possible content types to convert to.",
-        "items": {
-         "type": "string"
-        }
-       }
-      }
-     }
-    },
-    "isCurrentAppInstalled": {
-     "type": "boolean",
-     "description": "A boolean indicating whether the authenticated app is installed by the authenticated user."
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#about.",
-     "default": "drive#about"
-    },
-    "languageCode": {
-     "type": "string",
-     "description": "The user's language or locale code, as defined by BCP 47, with some extensions from Unicode's LDML format (http://www.unicode.org/reports/tr35/)."
-    },
-    "largestChangeId": {
-     "type": "string",
-     "description": "The largest change id.",
-     "format": "int64"
-    },
-    "maxUploadSizes": {
-     "type": "array",
-     "description": "List of max upload sizes for each file type. The most specific type takes precedence.",
-     "items": {
-      "type": "object",
-      "properties": {
-       "size": {
-        "type": "string",
-        "description": "The max upload size for this type.",
-        "format": "int64"
-       },
-       "type": {
-        "type": "string",
-        "description": "The file type."
-       }
-      }
-     }
-    },
-    "name": {
-     "type": "string",
-     "description": "The name of the current user."
-    },
-    "permissionId": {
-     "type": "string",
-     "description": "The current user's ID as visible in the permissions collection."
-    },
-    "quotaBytesByService": {
-     "type": "array",
-     "description": "The amount of storage quota used by different Google services.",
-     "items": {
-      "type": "object",
-      "properties": {
-       "bytesUsed": {
-        "type": "string",
-        "description": "The storage quota bytes used by the service.",
-        "format": "int64"
-       },
-       "serviceName": {
-        "type": "string",
-        "description": "The service's name, e.g. DRIVE, GMAIL, or PHOTOS."
-       }
-      }
-     }
-    },
-    "quotaBytesTotal": {
-     "type": "string",
-     "description": "The total number of quota bytes. This is only relevant when quotaType is LIMITED.",
-     "format": "int64"
-    },
-    "quotaBytesUsed": {
-     "type": "string",
-     "description": "The number of quota bytes used by Google Drive.",
-     "format": "int64"
-    },
-    "quotaBytesUsedAggregate": {
-     "type": "string",
-     "description": "The number of quota bytes used by all Google apps (Drive, Picasa, etc.).",
-     "format": "int64"
-    },
-    "quotaBytesUsedInTrash": {
-     "type": "string",
-     "description": "The number of quota bytes used by trashed items.",
-     "format": "int64"
-    },
-    "quotaType": {
-     "type": "string",
-     "description": "The type of the user's storage quota. Possible values are:  \n- LIMITED \n- UNLIMITED"
-    },
-    "remainingChangeIds": {
-     "type": "string",
-     "description": "The number of remaining change ids, limited to no more than 2500.",
-     "format": "int64"
-    },
-    "rootFolderId": {
-     "type": "string",
-     "description": "The id of the root folder."
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "A link back to this item."
-    },
-    "teamDriveThemes": {
-     "type": "array",
-     "description": "Deprecated - use driveThemes instead.",
-     "items": {
-      "type": "object",
-      "properties": {
-       "backgroundImageLink": {
-        "type": "string",
-        "description": "Deprecated - use driveThemes/backgroundImageLink instead."
-       },
-       "colorRgb": {
-        "type": "string",
-        "description": "Deprecated - use driveThemes/colorRgb instead."
-       },
-       "id": {
-        "type": "string",
-        "description": "Deprecated - use driveThemes/id instead."
-       }
-      }
-     }
-    },
-    "user": {
-     "$ref": "User",
-     "description": "The authenticated user."
-    }
-   }
-  },
-  "App": {
-   "id": "App",
-   "type": "object",
-   "description": "The apps resource provides a list of the apps that a user has installed, with information about each app's supported MIME types, file extensions, and other details.",
-   "properties": {
-    "authorized": {
-     "type": "boolean",
-     "description": "Whether the app is authorized to access data on the user's Drive."
-    },
-    "createInFolderTemplate": {
-     "type": "string",
-     "description": "The template url to create a new file with this app in a given folder. The template will contain {folderId} to be replaced by the folder to create the new file in."
-    },
-    "createUrl": {
-     "type": "string",
-     "description": "The url to create a new file with this app."
-    },
-    "hasDriveWideScope": {
-     "type": "boolean",
-     "description": "Whether the app has drive-wide scope. An app with drive-wide scope can access all files in the user's drive."
-    },
+    "basePath": "/drive/v2/",
+    "baseUrl": "https://www.googleapis.com/drive/v2/",
+    "batchPath": "batch/drive/v2",
+    "description": "Manages files in Drive including uploading, downloading, searching, detecting changes, and updating sharing permissions.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://developers.google.com/drive/",
+    "etag": "\"-2NioU2H8y8siEzrBOV_qzRI6kQ/Gzw3zY4GFM9pYqDRgHZ0YoUbcxg\"",
     "icons": {
-     "type": "array",
-     "description": "The various icons for the app.",
-     "items": {
-      "type": "object",
-      "properties": {
-       "category": {
-        "type": "string",
-        "description": "Category of the icon. Allowed values are:  \n- application - icon for the application \n- document - icon for a file associated with the app \n- documentShared - icon for a shared file associated with the app"
-       },
-       "iconUrl": {
-        "type": "string",
-        "description": "URL for the icon."
-       },
-       "size": {
-        "type": "integer",
-        "description": "Size of the icon. Represented as the maximum of the width and height.",
-        "format": "int32"
-       }
-      }
-     }
+        "x16": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_16.png",
+        "x32": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_32.png"
     },
-    "id": {
-     "type": "string",
-     "description": "The ID of the app."
-    },
-    "installed": {
-     "type": "boolean",
-     "description": "Whether the app is installed."
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#app.",
-     "default": "drive#app"
-    },
-    "longDescription": {
-     "type": "string",
-     "description": "A long description of the app."
-    },
-    "name": {
-     "type": "string",
-     "description": "The name of the app."
-    },
-    "objectType": {
-     "type": "string",
-     "description": "The type of object this app creates (e.g. Chart). If empty, the app name should be used instead."
-    },
-    "openUrlTemplate": {
-     "type": "string",
-     "description": "The template url for opening files with this app. The template will contain {ids} and/or {exportIds} to be replaced by the actual file ids. See  Open Files  for the full documentation."
-    },
-    "primaryFileExtensions": {
-     "type": "array",
-     "description": "The list of primary file extensions.",
-     "items": {
-      "type": "string"
-     }
-    },
-    "primaryMimeTypes": {
-     "type": "array",
-     "description": "The list of primary mime types.",
-     "items": {
-      "type": "string"
-     }
-    },
-    "productId": {
-     "type": "string",
-     "description": "The ID of the product listing for this app."
-    },
-    "productUrl": {
-     "type": "string",
-     "description": "A link to the product listing for this app."
-    },
-    "secondaryFileExtensions": {
-     "type": "array",
-     "description": "The list of secondary file extensions.",
-     "items": {
-      "type": "string"
-     }
-    },
-    "secondaryMimeTypes": {
-     "type": "array",
-     "description": "The list of secondary mime types.",
-     "items": {
-      "type": "string"
-     }
-    },
-    "shortDescription": {
-     "type": "string",
-     "description": "A short description of the app."
-    },
-    "supportsCreate": {
-     "type": "boolean",
-     "description": "Whether this app supports creating new objects."
-    },
-    "supportsImport": {
-     "type": "boolean",
-     "description": "Whether this app supports importing from Docs Editors."
-    },
-    "supportsMultiOpen": {
-     "type": "boolean",
-     "description": "Whether this app supports opening more than one file."
-    },
-    "supportsOfflineCreate": {
-     "type": "boolean",
-     "description": "Whether this app supports creating new files when offline."
-    },
-    "useByDefault": {
-     "type": "boolean",
-     "description": "Whether the app is selected as the default handler for the types it supports."
-    }
-   }
-  },
-  "AppList": {
-   "id": "AppList",
-   "type": "object",
-   "description": "A list of third-party applications which the user has installed or given access to Google Drive.",
-   "properties": {
-    "defaultAppIds": {
-     "type": "array",
-     "description": "List of app IDs that the user has specified to use by default. The list is in reverse-priority order (lowest to highest).",
-     "items": {
-      "type": "string"
-     }
-    },
-    "etag": {
-     "type": "string",
-     "description": "The ETag of the list."
-    },
-    "items": {
-     "type": "array",
-     "description": "The list of apps.",
-     "items": {
-      "$ref": "App"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#appList.",
-     "default": "drive#appList"
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "A link back to this list."
-    }
-   }
-  },
-  "Change": {
-   "id": "Change",
-   "type": "object",
-   "description": "Representation of a change to a file or shared drive.",
-   "properties": {
-    "changeType": {
-     "type": "string",
-     "description": "The type of the change. Possible values are file and drive."
-    },
-    "deleted": {
-     "type": "boolean",
-     "description": "Whether the file or shared drive has been removed from this list of changes, for example by deletion or loss of access."
-    },
-    "drive": {
-     "$ref": "Drive",
-     "description": "The updated state of the shared drive. Present if the changeType is drive, the user is still a member of the shared drive, and the shared drive has not been deleted."
-    },
-    "driveId": {
-     "type": "string",
-     "description": "The ID of the shared drive associated with this change."
-    },
-    "file": {
-     "$ref": "File",
-     "description": "The updated state of the file. Present if the type is file and the file has not been removed from this list of changes."
-    },
-    "fileId": {
-     "type": "string",
-     "description": "The ID of the file associated with this change."
-    },
-    "id": {
-     "type": "string",
-     "description": "The ID of the change.",
-     "format": "int64"
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#change.",
-     "default": "drive#change"
-    },
-    "modificationDate": {
-     "type": "string",
-     "description": "The time of this modification.",
-     "format": "date-time"
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "A link back to this change."
-    },
-    "teamDrive": {
-     "$ref": "TeamDrive",
-     "description": "Deprecated - use drive instead."
-    },
-    "teamDriveId": {
-     "type": "string",
-     "description": "Deprecated - use driveId instead."
-    },
-    "type": {
-     "type": "string",
-     "description": "Deprecated - use changeType instead."
-    }
-   }
-  },
-  "ChangeList": {
-   "id": "ChangeList",
-   "type": "object",
-   "description": "A list of changes for a user.",
-   "properties": {
-    "etag": {
-     "type": "string",
-     "description": "The ETag of the list."
-    },
-    "items": {
-     "type": "array",
-     "description": "The list of changes. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
-     "items": {
-      "$ref": "Change"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#changeList.",
-     "default": "drive#changeList"
-    },
-    "largestChangeId": {
-     "type": "string",
-     "description": "The current largest change ID.",
-     "format": "int64"
-    },
-    "newStartPageToken": {
-     "type": "string",
-     "description": "The starting page token for future changes. This will be present only if the end of the current changes list has been reached."
-    },
-    "nextLink": {
-     "type": "string",
-     "description": "A link to the next page of changes."
-    },
-    "nextPageToken": {
-     "type": "string",
-     "description": "The page token for the next page of changes. This will be absent if the end of the changes list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results."
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "A link back to this list."
-    }
-   }
-  },
-  "Channel": {
-   "id": "Channel",
-   "type": "object",
-   "description": "An notification channel used to watch for resource changes.",
-   "properties": {
-    "address": {
-     "type": "string",
-     "description": "The address where notifications are delivered for this channel."
-    },
-    "expiration": {
-     "type": "string",
-     "description": "Date and time of notification channel expiration, expressed as a Unix timestamp, in milliseconds. Optional.",
-     "format": "int64"
-    },
-    "id": {
-     "type": "string",
-     "description": "A UUID or similar unique string that identifies this channel."
-    },
-    "kind": {
-     "type": "string",
-     "description": "Identifies this as a notification channel used to watch for changes to a resource, which is \"api#channel\".",
-     "default": "api#channel"
-    },
-    "params": {
-     "type": "object",
-     "description": "Additional parameters controlling delivery channel behavior. Optional.",
-     "additionalProperties": {
-      "type": "string",
-      "description": "Declares a new parameter by name."
-     }
-    },
-    "payload": {
-     "type": "boolean",
-     "description": "A Boolean value to indicate whether payload is wanted. Optional."
-    },
-    "resourceId": {
-     "type": "string",
-     "description": "An opaque ID that identifies the resource being watched on this channel. Stable across different API versions."
-    },
-    "resourceUri": {
-     "type": "string",
-     "description": "A version-specific identifier for the watched resource."
-    },
-    "token": {
-     "type": "string",
-     "description": "An arbitrary string delivered to the target address with each notification delivered over this channel. Optional."
-    },
-    "type": {
-     "type": "string",
-     "description": "The type of delivery mechanism used for this channel."
-    }
-   }
-  },
-  "ChildList": {
-   "id": "ChildList",
-   "type": "object",
-   "description": "A list of children of a file.",
-   "properties": {
-    "etag": {
-     "type": "string",
-     "description": "The ETag of the list."
-    },
-    "items": {
-     "type": "array",
-     "description": "The list of children. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
-     "items": {
-      "$ref": "ChildReference"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#childList.",
-     "default": "drive#childList"
-    },
-    "nextLink": {
-     "type": "string",
-     "description": "A link to the next page of children."
-    },
-    "nextPageToken": {
-     "type": "string",
-     "description": "The page token for the next page of children. This will be absent if the end of the children list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results."
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "A link back to this list."
-    }
-   }
-  },
-  "ChildReference": {
-   "id": "ChildReference",
-   "type": "object",
-   "description": "A reference to a folder's child.",
-   "properties": {
-    "childLink": {
-     "type": "string",
-     "description": "A link to the child."
-    },
-    "id": {
-     "type": "string",
-     "description": "The ID of the child.",
-     "annotations": {
-      "required": [
-       "drive.children.insert"
-      ]
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#childReference.",
-     "default": "drive#childReference"
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "A link back to this reference."
-    }
-   }
-  },
-  "Comment": {
-   "id": "Comment",
-   "type": "object",
-   "description": "A comment on a file in Google Drive.",
-   "properties": {
-    "anchor": {
-     "type": "string",
-     "description": "A region of the document represented as a JSON string. See anchor documentation for details on how to define and interpret anchor properties."
-    },
-    "author": {
-     "$ref": "User",
-     "description": "The author of the comment. The author's email address and permission ID will not be populated."
-    },
-    "commentId": {
-     "type": "string",
-     "description": "The ID of the comment."
-    },
-    "content": {
-     "type": "string",
-     "description": "The plain text content used to create this comment. This is not HTML safe and should only be used as a starting point to make edits to a comment's content.",
-     "annotations": {
-      "required": [
-       "drive.comments.insert",
-       "drive.comments.patch",
-       "drive.comments.update"
-      ]
-     }
-    },
-    "context": {
-     "type": "object",
-     "description": "The context of the file which is being commented on.",
-     "properties": {
-      "type": {
-       "type": "string",
-       "description": "The MIME type of the context snippet."
-      },
-      "value": {
-       "type": "string",
-       "description": "Data representation of the segment of the file being commented on. In the case of a text file for example, this would be the actual text that the comment is about."
-      }
-     }
-    },
-    "createdDate": {
-     "type": "string",
-     "description": "The date when this comment was first created.",
-     "format": "date-time"
-    },
-    "deleted": {
-     "type": "boolean",
-     "description": "Whether this comment has been deleted. If a comment has been deleted the content will be cleared and this will only represent a comment that once existed."
-    },
-    "fileId": {
-     "type": "string",
-     "description": "The file which this comment is addressing."
-    },
-    "fileTitle": {
-     "type": "string",
-     "description": "The title of the file which this comment is addressing."
-    },
-    "htmlContent": {
-     "type": "string",
-     "description": "HTML formatted content for this comment."
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#comment.",
-     "default": "drive#comment"
-    },
-    "modifiedDate": {
-     "type": "string",
-     "description": "The date when this comment or any of its replies were last modified.",
-     "format": "date-time"
-    },
-    "replies": {
-     "type": "array",
-     "description": "Replies to this post.",
-     "items": {
-      "$ref": "CommentReply"
-     }
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "A link back to this comment."
-    },
-    "status": {
-     "type": "string",
-     "description": "The status of this comment. Status can be changed by posting a reply to a comment with the desired status.  \n- \"open\" - The comment is still open. \n- \"resolved\" - The comment has been resolved by one of its replies."
-    }
-   }
-  },
-  "CommentList": {
-   "id": "CommentList",
-   "type": "object",
-   "description": "A list of comments on a file in Google Drive.",
-   "properties": {
-    "items": {
-     "type": "array",
-     "description": "The list of comments. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
-     "items": {
-      "$ref": "Comment"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#commentList.",
-     "default": "drive#commentList"
-    },
-    "nextLink": {
-     "type": "string",
-     "description": "A link to the next page of comments."
-    },
-    "nextPageToken": {
-     "type": "string",
-     "description": "The page token for the next page of comments. This will be absent if the end of the comments list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results."
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "A link back to this list."
-    }
-   }
-  },
-  "CommentReply": {
-   "id": "CommentReply",
-   "type": "object",
-   "description": "A comment on a file in Google Drive.",
-   "properties": {
-    "author": {
-     "$ref": "User",
-     "description": "The author of the reply. The author's email address and permission ID will not be populated."
-    },
-    "content": {
-     "type": "string",
-     "description": "The plain text content used to create this reply. This is not HTML safe and should only be used as a starting point to make edits to a reply's content. This field is required on inserts if no verb is specified (resolve/reopen).",
-     "annotations": {
-      "required": [
-       "drive.replies.patch",
-       "drive.replies.update"
-      ]
-     }
-    },
-    "createdDate": {
-     "type": "string",
-     "description": "The date when this reply was first created.",
-     "format": "date-time"
-    },
-    "deleted": {
-     "type": "boolean",
-     "description": "Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed."
-    },
-    "htmlContent": {
-     "type": "string",
-     "description": "HTML formatted content for this reply."
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#commentReply.",
-     "default": "drive#commentReply"
-    },
-    "modifiedDate": {
-     "type": "string",
-     "description": "The date when this reply was last modified.",
-     "format": "date-time"
-    },
-    "replyId": {
-     "type": "string",
-     "description": "The ID of the reply."
-    },
-    "verb": {
-     "type": "string",
-     "description": "The action this reply performed to the parent comment. When creating a new reply this is the action to be perform to the parent comment. Possible values are:  \n- \"resolve\" - To resolve a comment. \n- \"reopen\" - To reopen (un-resolve) a comment."
-    }
-   }
-  },
-  "CommentReplyList": {
-   "id": "CommentReplyList",
-   "type": "object",
-   "description": "A list of replies to a comment on a file in Google Drive.",
-   "properties": {
-    "items": {
-     "type": "array",
-     "description": "The list of replies. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
-     "items": {
-      "$ref": "CommentReply"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#commentReplyList.",
-     "default": "drive#commentReplyList"
-    },
-    "nextLink": {
-     "type": "string",
-     "description": "A link to the next page of replies."
-    },
-    "nextPageToken": {
-     "type": "string",
-     "description": "The page token for the next page of replies. This will be absent if the end of the replies list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results."
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "A link back to this list."
-    }
-   }
-  },
-  "ContentRestriction": {
-   "id": "ContentRestriction",
-   "type": "object",
-   "description": "A restriction for accessing the content of the file.",
-   "properties": {
-    "readOnly": {
-     "type": "boolean",
-     "description": "Whether the content of the file is read-only. If a file is read-only, a new revision of the file may not be added, comments may not be added or modified, and the title of the file may not be modified."
-    },
-    "reason": {
-     "type": "string",
-     "description": "Reason for why the content of the file is restricted. This is only mutable on requests that also set readOnly=true."
-    },
-    "restrictingUser": {
-     "$ref": "User",
-     "description": "The user who set the content restriction. Only populated if readOnly is true."
-    },
-    "restrictionDate": {
-     "type": "string",
-     "description": "The time at which the content restriction was set (formatted RFC 3339 timestamp). Only populated if readOnly is true.",
-     "format": "date-time"
-    },
-    "type": {
-     "type": "string",
-     "description": "The type of the content restriction. Currently the only possible value is globalContentRestriction."
-    }
-   }
-  },
-  "Drive": {
-   "id": "Drive",
-   "type": "object",
-   "description": "Representation of a shared drive.",
-   "properties": {
-    "backgroundImageFile": {
-     "type": "object",
-     "description": "An image file and cropping parameters from which a background image for this shared drive is set. This is a write only field; it can only be set on drive.drives.update requests that don't set themeId. When specified, all fields of the backgroundImageFile must be set.",
-     "properties": {
-      "id": {
-       "type": "string",
-       "description": "The ID of an image file in Google Drive to use for the background image."
-      },
-      "width": {
-       "type": "number",
-       "description": "The width of the cropped image in the closed range of 0 to 1. This value represents the width of the cropped image divided by the width of the entire image. The height is computed by applying a width to height aspect ratio of 80 to 9. The resulting image must be at least 1280 pixels wide and 144 pixels high.",
-       "format": "float"
-      },
-      "xCoordinate": {
-       "type": "number",
-       "description": "The X coordinate of the upper left corner of the cropping area in the background image. This is a value in the closed range of 0 to 1. This value represents the horizontal distance from the left side of the entire image to the left side of the cropping area divided by the width of the entire image.",
-       "format": "float"
-      },
-      "yCoordinate": {
-       "type": "number",
-       "description": "The Y coordinate of the upper left corner of the cropping area in the background image. This is a value in the closed range of 0 to 1. This value represents the vertical distance from the top side of the entire image to the top side of the cropping area divided by the height of the entire image.",
-       "format": "float"
-      }
-     }
-    },
-    "backgroundImageLink": {
-     "type": "string",
-     "description": "A short-lived link to this shared drive's background image."
-    },
-    "capabilities": {
-     "type": "object",
-     "description": "Capabilities the current user has on this shared drive.",
-     "properties": {
-      "canAddChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can add children to folders in this shared drive."
-      },
-      "canChangeCopyRequiresWriterPermissionRestriction": {
-       "type": "boolean",
-       "description": "Whether the current user can change the copyRequiresWriterPermission restriction of this shared drive."
-      },
-      "canChangeDomainUsersOnlyRestriction": {
-       "type": "boolean",
-       "description": "Whether the current user can change the domainUsersOnly restriction of this shared drive."
-      },
-      "canChangeDriveBackground": {
-       "type": "boolean",
-       "description": "Whether the current user can change the background of this shared drive."
-      },
-      "canChangeDriveMembersOnlyRestriction": {
-       "type": "boolean",
-       "description": "Whether the current user can change the driveMembersOnly restriction of this shared drive."
-      },
-      "canComment": {
-       "type": "boolean",
-       "description": "Whether the current user can comment on files in this shared drive."
-      },
-      "canCopy": {
-       "type": "boolean",
-       "description": "Whether the current user can copy files in this shared drive."
-      },
-      "canDeleteChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can delete children from folders in this shared drive."
-      },
-      "canDeleteDrive": {
-       "type": "boolean",
-       "description": "Whether the current user can delete this shared drive. Attempting to delete the shared drive may still fail if there are untrashed items inside the shared drive."
-      },
-      "canDownload": {
-       "type": "boolean",
-       "description": "Whether the current user can download files in this shared drive."
-      },
-      "canEdit": {
-       "type": "boolean",
-       "description": "Whether the current user can edit files in this shared drive"
-      },
-      "canListChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can list the children of folders in this shared drive."
-      },
-      "canManageMembers": {
-       "type": "boolean",
-       "description": "Whether the current user can add members to this shared drive or remove them or change their role."
-      },
-      "canReadRevisions": {
-       "type": "boolean",
-       "description": "Whether the current user can read the revisions resource of files in this shared drive."
-      },
-      "canRename": {
-       "type": "boolean",
-       "description": "Whether the current user can rename files or folders in this shared drive."
-      },
-      "canRenameDrive": {
-       "type": "boolean",
-       "description": "Whether the current user can rename this shared drive."
-      },
-      "canShare": {
-       "type": "boolean",
-       "description": "Whether the current user can share files or folders in this shared drive."
-      },
-      "canTrashChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can trash children from folders in this shared drive."
-      }
-     }
-    },
-    "colorRgb": {
-     "type": "string",
-     "description": "The color of this shared drive as an RGB hex string. It can only be set on a drive.drives.update request that does not set themeId."
-    },
-    "createdDate": {
-     "type": "string",
-     "description": "The time at which the shared drive was created (RFC 3339 date-time).",
-     "format": "date-time"
-    },
-    "hidden": {
-     "type": "boolean",
-     "description": "Whether the shared drive is hidden from default view."
-    },
-    "id": {
-     "type": "string",
-     "description": "The ID of this shared drive which is also the ID of the top level folder of this shared drive."
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#drive",
-     "default": "drive#drive"
-    },
-    "name": {
-     "type": "string",
-     "description": "The name of this shared drive.",
-     "annotations": {
-      "required": [
-       "drive.drives.insert"
-      ]
-     }
-    },
-    "restrictions": {
-     "type": "object",
-     "description": "A set of restrictions that apply to this shared drive or items inside this shared drive.",
-     "properties": {
-      "adminManagedRestrictions": {
-       "type": "boolean",
-       "description": "Whether administrative privileges on this shared drive are required to modify restrictions."
-      },
-      "copyRequiresWriterPermission": {
-       "type": "boolean",
-       "description": "Whether the options to copy, print, or download files inside this shared drive, should be disabled for readers and commenters. When this restriction is set to true, it will override the similarly named field to true for any file inside this shared drive."
-      },
-      "domainUsersOnly": {
-       "type": "boolean",
-       "description": "Whether access to this shared drive and items inside this shared drive is restricted to users of the domain to which this shared drive belongs. This restriction may be overridden by other sharing policies controlled outside of this shared drive."
-      },
-      "driveMembersOnly": {
-       "type": "boolean",
-       "description": "Whether access to items inside this shared drive is restricted to its members."
-      }
-     }
-    },
-    "themeId": {
-     "type": "string",
-     "description": "The ID of the theme from which the background image and color will be set. The set of possible driveThemes can be retrieved from a drive.about.get response. When not specified on a drive.drives.insert request, a random theme is chosen from which the background image and color are set. This is a write-only field; it can only be set on requests that don't set colorRgb or backgroundImageFile."
-    }
-   }
-  },
-  "DriveList": {
-   "id": "DriveList",
-   "type": "object",
-   "description": "A list of shared drives.",
-   "properties": {
-    "items": {
-     "type": "array",
-     "description": "The list of shared drives. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
-     "items": {
-      "$ref": "Drive"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#driveList",
-     "default": "drive#driveList"
-    },
-    "nextPageToken": {
-     "type": "string",
-     "description": "The page token for the next page of shared drives. This will be absent if the end of the list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results."
-    }
-   }
-  },
-  "File": {
-   "id": "File",
-   "type": "object",
-   "description": "The metadata for a file.",
-   "properties": {
-    "alternateLink": {
-     "type": "string",
-     "description": "A link for opening the file in a relevant Google editor or viewer."
-    },
-    "appDataContents": {
-     "type": "boolean",
-     "description": "Whether this file is in the Application Data folder."
-    },
-    "canComment": {
-     "type": "boolean",
-     "description": "Deprecated: use capabilities/canComment."
-    },
-    "canReadRevisions": {
-     "type": "boolean",
-     "description": "Deprecated: use capabilities/canReadRevisions."
-    },
-    "capabilities": {
-     "type": "object",
-     "description": "Capabilities the current user has on this file. Each capability corresponds to a fine-grained action that a user may take.",
-     "properties": {
-      "canAddChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can add children to this folder. This is always false when the item is not a folder."
-      },
-      "canAddFolderFromAnotherDrive": {
-       "type": "boolean",
-       "description": "Whether the current user can add a folder from another drive (different shared drive or My Drive) to this folder. This is false when the item is not a folder. Only populated for items in shared drives."
-      },
-      "canAddMyDriveParent": {
-       "type": "boolean",
-       "description": "Whether the current user can add a parent for the item without removing an existing parent in the same request. Not populated for shared drive files."
-      },
-      "canChangeCopyRequiresWriterPermission": {
-       "type": "boolean",
-       "description": "Whether the current user can change the copyRequiresWriterPermission restriction of this file."
-      },
-      "canChangeRestrictedDownload": {
-       "type": "boolean",
-       "description": "Deprecated"
-      },
-      "canComment": {
-       "type": "boolean",
-       "description": "Whether the current user can comment on this file."
-      },
-      "canCopy": {
-       "type": "boolean",
-       "description": "Whether the current user can copy this file. For an item in a shared drive, whether the current user can copy non-folder descendants of this item, or this item itself if it is not a folder."
-      },
-      "canDelete": {
-       "type": "boolean",
-       "description": "Whether the current user can delete this file."
-      },
-      "canDeleteChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can delete children of this folder. This is false when the item is not a folder. Only populated for items in shared drives."
-      },
-      "canDownload": {
-       "type": "boolean",
-       "description": "Whether the current user can download this file."
-      },
-      "canEdit": {
-       "type": "boolean",
-       "description": "Whether the current user can edit this file. Other factors may limit the type of changes a user can make to a file. For example, see canChangeCopyRequiresWriterPermission or canModifyContent."
-      },
-      "canListChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can list the children of this folder. This is always false when the item is not a folder."
-      },
-      "canModifyContent": {
-       "type": "boolean",
-       "description": "Whether the current user can modify the content of this file."
-      },
-      "canModifyContentRestriction": {
-       "type": "boolean",
-       "description": "Whether the current user can modify restrictions on content of this file."
-      },
-      "canMoveChildrenOutOfDrive": {
-       "type": "boolean",
-       "description": "Whether the current user can move children of this folder outside of the shared drive. This is false when the item is not a folder. Only populated for items in shared drives."
-      },
-      "canMoveChildrenOutOfTeamDrive": {
-       "type": "boolean",
-       "description": "Deprecated - use canMoveChildrenOutOfDrive instead."
-      },
-      "canMoveChildrenWithinDrive": {
-       "type": "boolean",
-       "description": "Whether the current user can move children of this folder within this drive. This is false when the item is not a folder. Note that a request to move the child may still fail depending on the current user's access to the child and to the destination folder."
-      },
-      "canMoveChildrenWithinTeamDrive": {
-       "type": "boolean",
-       "description": "Deprecated - use canMoveChildrenWithinDrive instead."
-      },
-      "canMoveItemIntoTeamDrive": {
-       "type": "boolean",
-       "description": "Deprecated - use canMoveItemOutOfDrive instead."
-      },
-      "canMoveItemOutOfDrive": {
-       "type": "boolean",
-       "description": "Whether the current user can move this item outside of this drive by changing its parent. Note that a request to change the parent of the item may still fail depending on the new parent that is being added."
-      },
-      "canMoveItemOutOfTeamDrive": {
-       "type": "boolean",
-       "description": "Deprecated - use canMoveItemOutOfDrive instead."
-      },
-      "canMoveItemWithinDrive": {
-       "type": "boolean",
-       "description": "Whether the current user can move this item within this drive. Note that a request to change the parent of the item may still fail depending on the new parent that is being added and the parent that is being removed."
-      },
-      "canMoveItemWithinTeamDrive": {
-       "type": "boolean",
-       "description": "Deprecated - use canMoveItemWithinDrive instead."
-      },
-      "canMoveTeamDriveItem": {
-       "type": "boolean",
-       "description": "Deprecated - use canMoveItemWithinDrive or canMoveItemOutOfDrive instead."
-      },
-      "canReadDrive": {
-       "type": "boolean",
-       "description": "Whether the current user can read the shared drive to which this file belongs. Only populated for items in shared drives."
-      },
-      "canReadRevisions": {
-       "type": "boolean",
-       "description": "Whether the current user can read the revisions resource of this file. For a shared drive item, whether revisions of non-folder descendants of this item, or this item itself if it is not a folder, can be read."
-      },
-      "canReadTeamDrive": {
-       "type": "boolean",
-       "description": "Deprecated - use canReadDrive instead."
-      },
-      "canRemoveChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can remove children from this folder. This is always false when the item is not a folder. For a folder in a shared drive, use canDeleteChildren or canTrashChildren instead."
-      },
-      "canRemoveMyDriveParent": {
-       "type": "boolean",
-       "description": "Whether the current user can remove a parent from the item without adding another parent in the same request. Not populated for shared drive files."
-      },
-      "canRename": {
-       "type": "boolean",
-       "description": "Whether the current user can rename this file."
-      },
-      "canShare": {
-       "type": "boolean",
-       "description": "Whether the current user can modify the sharing settings for this file."
-      },
-      "canTrash": {
-       "type": "boolean",
-       "description": "Whether the current user can move this file to trash."
-      },
-      "canTrashChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can trash children of this folder. This is false when the item is not a folder. Only populated for items in shared drives."
-      },
-      "canUntrash": {
-       "type": "boolean",
-       "description": "Whether the current user can restore this file from trash."
-      }
-     }
-    },
-    "contentRestrictions": {
-     "type": "array",
-     "description": "Restrictions for accessing the content of the file. Only populated if such a restriction exists.",
-     "items": {
-      "$ref": "ContentRestriction"
-     }
-    },
-    "copyRequiresWriterPermission": {
-     "type": "boolean",
-     "description": "Whether the options to copy, print, or download this file, should be disabled for readers and commenters."
-    },
-    "copyable": {
-     "type": "boolean",
-     "description": "Deprecated: use capabilities/canCopy."
-    },
-    "createdDate": {
-     "type": "string",
-     "description": "Create time for this file (formatted RFC 3339 timestamp).",
-     "format": "date-time"
-    },
-    "defaultOpenWithLink": {
-     "type": "string",
-     "description": "A link to open this file with the user's default app for this file. Only populated when the drive.apps.readonly scope is used."
-    },
-    "description": {
-     "type": "string",
-     "description": "A short description of the file."
-    },
-    "downloadUrl": {
-     "type": "string",
-     "description": "Short lived download URL for the file. This field is only populated for files with content stored in Google Drive; it is not populated for Docs Editors or shortcut files."
-    },
-    "driveId": {
-     "type": "string",
-     "description": "ID of the shared drive the file resides in. Only populated for items in shared drives."
-    },
-    "editable": {
-     "type": "boolean",
-     "description": "Deprecated: use capabilities/canEdit."
-    },
-    "embedLink": {
-     "type": "string",
-     "description": "A link for embedding the file."
-    },
-    "etag": {
-     "type": "string",
-     "description": "ETag of the file."
-    },
-    "explicitlyTrashed": {
-     "type": "boolean",
-     "description": "Whether this file has been explicitly trashed, as opposed to recursively trashed."
-    },
-    "exportLinks": {
-     "type": "object",
-     "description": "Links for exporting Docs Editors files to specific formats.",
-     "additionalProperties": {
-      "type": "string",
-      "description": "A mapping from export format to URL"
-     }
-    },
-    "fileExtension": {
-     "type": "string",
-     "description": "The final component of fullFileExtension with trailing text that does not appear to be part of the extension removed. This field is only populated for files with content stored in Google Drive; it is not populated for Docs Editors or shortcut files."
-    },
-    "fileSize": {
-     "type": "string",
-     "description": "The size of the file in bytes. This field is populated for files with content stored in Google Drive and for files in Docs Editors; it is not populated for shortcut files.",
-     "format": "int64"
-    },
-    "folderColorRgb": {
-     "type": "string",
-     "description": "Folder color as an RGB hex string if the file is a folder. The list of supported colors is available in the folderColorPalette field of the About resource. If an unsupported color is specified, it will be changed to the closest color in the palette. Not populated for items in shared drives."
-    },
-    "fullFileExtension": {
-     "type": "string",
-     "description": "The full file extension; extracted from the title. May contain multiple concatenated extensions, such as \"tar.gz\". Removing an extension from the title does not clear this field; however, changing the extension on the title does update this field. This field is only populated for files with content stored in Google Drive; it is not populated for Docs Editors or shortcut files."
-    },
-    "hasAugmentedPermissions": {
-     "type": "boolean",
-     "description": "Whether there are permissions directly on this file. This field is only populated for items in shared drives."
-    },
-    "hasThumbnail": {
-     "type": "boolean",
-     "description": "Whether this file has a thumbnail. This does not indicate whether the requesting app has access to the thumbnail. To check access, look for the presence of the thumbnailLink field."
-    },
-    "headRevisionId": {
-     "type": "string",
-     "description": "The ID of the file's head revision. This field is only populated for files with content stored in Google Drive; it is not populated for Docs Editors or shortcut files."
-    },
-    "iconLink": {
-     "type": "string",
-     "description": "A link to the file's icon."
-    },
-    "id": {
-     "type": "string",
-     "description": "The ID of the file."
-    },
-    "imageMediaMetadata": {
-     "type": "object",
-     "description": "Metadata about image media. This will only be present for image types, and its contents will depend on what can be parsed from the image content.",
-     "properties": {
-      "aperture": {
-       "type": "number",
-       "description": "The aperture used to create the photo (f-number).",
-       "format": "float"
-      },
-      "cameraMake": {
-       "type": "string",
-       "description": "The make of the camera used to create the photo."
-      },
-      "cameraModel": {
-       "type": "string",
-       "description": "The model of the camera used to create the photo."
-      },
-      "colorSpace": {
-       "type": "string",
-       "description": "The color space of the photo."
-      },
-      "date": {
-       "type": "string",
-       "description": "The date and time the photo was taken (EXIF format timestamp)."
-      },
-      "exposureBias": {
-       "type": "number",
-       "description": "The exposure bias of the photo (APEX value).",
-       "format": "float"
-      },
-      "exposureMode": {
-       "type": "string",
-       "description": "The exposure mode used to create the photo."
-      },
-      "exposureTime": {
-       "type": "number",
-       "description": "The length of the exposure, in seconds.",
-       "format": "float"
-      },
-      "flashUsed": {
-       "type": "boolean",
-       "description": "Whether a flash was used to create the photo."
-      },
-      "focalLength": {
-       "type": "number",
-       "description": "The focal length used to create the photo, in millimeters.",
-       "format": "float"
-      },
-      "height": {
-       "type": "integer",
-       "description": "The height of the image in pixels.",
-       "format": "int32"
-      },
-      "isoSpeed": {
-       "type": "integer",
-       "description": "The ISO speed used to create the photo.",
-       "format": "int32"
-      },
-      "lens": {
-       "type": "string",
-       "description": "The lens used to create the photo."
-      },
-      "location": {
-       "type": "object",
-       "description": "Geographic location information stored in the image.",
-       "properties": {
-        "altitude": {
-         "type": "number",
-         "description": "The altitude stored in the image.",
-         "format": "double"
+    "id": "drive:v2",
+    "kind": "discovery#restDescription",
+    "name": "drive",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "alt": {
+            "default": "json",
+            "description": "Data format for the response.",
+            "enum": [
+                "json"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "latitude": {
-         "type": "number",
-         "description": "The latitude stored in the image.",
-         "format": "double"
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
         },
-        "longitude": {
-         "type": "number",
-         "description": "The longitude stored in the image.",
-         "format": "double"
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "An opaque string that represents a user for quota purposes. Must not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "userIp": {
+            "description": "Deprecated. Please use quotaUser instead.",
+            "location": "query",
+            "type": "string"
         }
-       }
-      },
-      "maxApertureValue": {
-       "type": "number",
-       "description": "The smallest f-number of the lens at the focal length used to create the photo (APEX value).",
-       "format": "float"
-      },
-      "meteringMode": {
-       "type": "string",
-       "description": "The metering mode used to create the photo."
-      },
-      "rotation": {
-       "type": "integer",
-       "description": "The number of clockwise 90 degree rotations applied from the image's original orientation.",
-       "format": "int32"
-      },
-      "sensor": {
-       "type": "string",
-       "description": "The type of sensor used to create the photo."
-      },
-      "subjectDistance": {
-       "type": "integer",
-       "description": "The distance to the subject of the photo, in meters.",
-       "format": "int32"
-      },
-      "whiteBalance": {
-       "type": "string",
-       "description": "The white balance mode used to create the photo."
-      },
-      "width": {
-       "type": "integer",
-       "description": "The width of the image in pixels.",
-       "format": "int32"
-      }
-     }
     },
-    "indexableText": {
-     "type": "object",
-     "description": "Indexable text attributes for the file (can only be written)",
-     "properties": {
-      "text": {
-       "type": "string",
-       "description": "The text to be indexed for this file."
-      }
-     }
-    },
-    "isAppAuthorized": {
-     "type": "boolean",
-     "description": "Whether the file was created or opened by the requesting app."
-    },
-    "kind": {
-     "type": "string",
-     "description": "The type of file. This is always drive#file.",
-     "default": "drive#file"
-    },
-    "labels": {
-     "type": "object",
-     "description": "A group of labels for the file.",
-     "properties": {
-      "hidden": {
-       "type": "boolean",
-       "description": "Deprecated."
-      },
-      "modified": {
-       "type": "boolean",
-       "description": "Whether the file has been modified by this user."
-      },
-      "restricted": {
-       "type": "boolean",
-       "description": "Deprecated - use copyRequiresWriterPermission instead."
-      },
-      "starred": {
-       "type": "boolean",
-       "description": "Whether this file is starred by the user."
-      },
-      "trashed": {
-       "type": "boolean",
-       "description": "Whether the file has been trashed, either explicitly or from a trashed parent folder. Only the owner may trash a file. The trashed item is excluded from all files.list responses returned for any user who does not own the file. However, all users with access to the file can see the trashed item metadata in an API response. All users with access can copy, download, export, and share the file."
-      },
-      "viewed": {
-       "type": "boolean",
-       "description": "Whether this file has been viewed by this user."
-      }
-     }
-    },
-    "lastModifyingUser": {
-     "$ref": "User",
-     "description": "The last user to modify this file."
-    },
-    "lastModifyingUserName": {
-     "type": "string",
-     "description": "Name of the last user to modify this file."
-    },
-    "lastViewedByMeDate": {
-     "type": "string",
-     "description": "Last time this file was viewed by the user (formatted RFC 3339 timestamp).",
-     "format": "date-time"
-    },
-    "markedViewedByMeDate": {
-     "type": "string",
-     "description": "Deprecated.",
-     "format": "date-time"
-    },
-    "md5Checksum": {
-     "type": "string",
-     "description": "An MD5 checksum for the content of this file. This field is only populated for files with content stored in Google Drive; it is not populated for Docs Editors or shortcut files."
-    },
-    "mimeType": {
-     "type": "string",
-     "description": "The MIME type of the file. This is only mutable on update when uploading new content. This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type."
-    },
-    "modifiedByMeDate": {
-     "type": "string",
-     "description": "Last time this file was modified by the user (formatted RFC 3339 timestamp). Note that setting modifiedDate will also update the modifiedByMe date for the user which set the date.",
-     "format": "date-time"
-    },
-    "modifiedDate": {
-     "type": "string",
-     "description": "Last time this file was modified by anyone (formatted RFC 3339 timestamp). This is only mutable on update when the setModifiedDate parameter is set.",
-     "format": "date-time"
-    },
-    "openWithLinks": {
-     "type": "object",
-     "description": "A map of the id of each of the user's apps to a link to open this file with that app. Only populated when the drive.apps.readonly scope is used.",
-     "additionalProperties": {
-      "type": "string"
-     }
-    },
-    "originalFilename": {
-     "type": "string",
-     "description": "The original filename of the uploaded content if available, or else the original value of the title field. This is only available for files with binary content in Google Drive."
-    },
-    "ownedByMe": {
-     "type": "boolean",
-     "description": "Whether the file is owned by the current user. Not populated for items in shared drives."
-    },
-    "ownerNames": {
-     "type": "array",
-     "description": "Name(s) of the owner(s) of this file. Not populated for items in shared drives.",
-     "items": {
-      "type": "string"
-     }
-    },
-    "owners": {
-     "type": "array",
-     "description": "The owner(s) of this file. Not populated for items in shared drives.",
-     "items": {
-      "$ref": "User"
-     }
-    },
-    "parents": {
-     "type": "array",
-     "description": "Collection of parent folders which contain this file.\nIf not specified as part of an insert request, the file will be placed directly in the user's My Drive folder. If not specified as part of a copy request, the file will inherit any discoverable parents of the source file. Update requests can also use the addParents and removeParents parameters to modify the parents list.",
-     "items": {
-      "$ref": "ParentReference"
-     }
-    },
-    "permissionIds": {
-     "type": "array",
-     "description": "List of permission IDs for users with access to this file.",
-     "items": {
-      "type": "string"
-     }
-    },
-    "permissions": {
-     "type": "array",
-     "description": "The list of permissions for users with access to this file. Not populated for items in shared drives.",
-     "items": {
-      "$ref": "Permission"
-     }
-    },
-    "properties": {
-     "type": "array",
-     "description": "The list of properties.",
-     "items": {
-      "$ref": "Property"
-     }
-    },
-    "quotaBytesUsed": {
-     "type": "string",
-     "description": "The number of quota bytes used by this file.",
-     "format": "int64"
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "A link back to this file."
-    },
-    "shareable": {
-     "type": "boolean",
-     "description": "Deprecated: use capabilities/canShare."
-    },
-    "shared": {
-     "type": "boolean",
-     "description": "Whether the file has been shared. Not populated for items in shared drives."
-    },
-    "sharedWithMeDate": {
-     "type": "string",
-     "description": "Time at which this file was shared with the user (formatted RFC 3339 timestamp).",
-     "format": "date-time"
-    },
-    "sharingUser": {
-     "$ref": "User",
-     "description": "User that shared the item with the current user, if available."
-    },
-    "shortcutDetails": {
-     "type": "object",
-     "description": "Shortcut file details. Only populated for shortcut files, which have the mimeType field set to application/vnd.google-apps.shortcut.",
-     "properties": {
-      "targetId": {
-       "type": "string",
-       "description": "The ID of the file that this shortcut points to."
-      },
-      "targetMimeType": {
-       "type": "string",
-       "description": "The MIME type of the file that this shortcut points to. The value of this field is a snapshot of the target's MIME type, captured when the shortcut is created."
-      }
-     }
-    },
-    "spaces": {
-     "type": "array",
-     "description": "The list of spaces which contain the file. Supported values are 'drive', 'appDataFolder' and 'photos'.",
-     "items": {
-      "type": "string"
-     }
-    },
-    "teamDriveId": {
-     "type": "string",
-     "description": "Deprecated - use driveId instead."
-    },
-    "thumbnail": {
-     "type": "object",
-     "description": "A thumbnail for the file. This will only be used if a standard thumbnail cannot be generated.",
-     "properties": {
-      "image": {
-       "type": "string",
-       "description": "The URL-safe Base64 encoded bytes of the thumbnail image. It should conform to RFC 4648 section 5.",
-       "format": "byte"
-      },
-      "mimeType": {
-       "type": "string",
-       "description": "The MIME type of the thumbnail."
-      }
-     }
-    },
-    "thumbnailLink": {
-     "type": "string",
-     "description": "A short-lived link to the file's thumbnail. Typically lasts on the order of hours. Only populated when the requesting app can access the file's content. If the file isn't shared publicly, the URL returned in Files.thumbnailLink must be fetched using a credentialed request."
-    },
-    "thumbnailVersion": {
-     "type": "string",
-     "description": "The thumbnail version for use in thumbnail cache invalidation.",
-     "format": "int64"
-    },
-    "title": {
-     "type": "string",
-     "description": "The title of this file. Note that for immutable items such as the top level folders of shared drives, My Drive root folder, and Application Data folder the title is constant."
-    },
-    "trashedDate": {
-     "type": "string",
-     "description": "The time that the item was trashed (formatted RFC 3339 timestamp). Only populated for items in shared drives.",
-     "format": "date-time"
-    },
-    "trashingUser": {
-     "$ref": "User",
-     "description": "If the file has been explicitly trashed, the user who trashed it. Only populated for items in shared drives."
-    },
-    "userPermission": {
-     "$ref": "Permission",
-     "description": "The permissions for the authenticated user on this file."
-    },
-    "version": {
-     "type": "string",
-     "description": "A monotonically increasing version number for the file. This reflects every change made to the file on the server, even those not visible to the requesting user.",
-     "format": "int64"
-    },
-    "videoMediaMetadata": {
-     "type": "object",
-     "description": "Metadata about video media. This will only be present for video types.",
-     "properties": {
-      "durationMillis": {
-       "type": "string",
-       "description": "The duration of the video in milliseconds.",
-       "format": "int64"
-      },
-      "height": {
-       "type": "integer",
-       "description": "The height of the video in pixels.",
-       "format": "int32"
-      },
-      "width": {
-       "type": "integer",
-       "description": "The width of the video in pixels.",
-       "format": "int32"
-      }
-     }
-    },
-    "webContentLink": {
-     "type": "string",
-     "description": "A link for downloading the content of the file in a browser using cookie based authentication. In cases where the content is shared publicly, the content can be downloaded without any credentials."
-    },
-    "webViewLink": {
-     "type": "string",
-     "description": "A link only available on public folders for viewing their static web assets (HTML, CSS, JS, etc) via Google Drive's Website Hosting."
-    },
-    "writersCanShare": {
-     "type": "boolean",
-     "description": "Whether writers can share the document with other users. Not populated for items in shared drives."
-    }
-   }
-  },
-  "FileList": {
-   "id": "FileList",
-   "type": "object",
-   "description": "A list of files.",
-   "properties": {
-    "etag": {
-     "type": "string",
-     "description": "The ETag of the list."
-    },
-    "incompleteSearch": {
-     "type": "boolean",
-     "description": "Whether the search process was incomplete. If true, then some search results may be missing, since all documents were not searched. This may occur when searching multiple drives with the \"allDrives\" corpora, but all corpora could not be searched. When this happens, it is suggested that clients narrow their query by choosing a different corpus such as \"default\" or \"drive\"."
-    },
-    "items": {
-     "type": "array",
-     "description": "The list of files. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
-     "items": {
-      "$ref": "File"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#fileList.",
-     "default": "drive#fileList"
-    },
-    "nextLink": {
-     "type": "string",
-     "description": "A link to the next page of files."
-    },
-    "nextPageToken": {
-     "type": "string",
-     "description": "The page token for the next page of files. This will be absent if the end of the files list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results."
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "A link back to this list."
-    }
-   }
-  },
-  "GeneratedIds": {
-   "id": "GeneratedIds",
-   "type": "object",
-   "description": "A list of generated IDs which can be provided in insert requests",
-   "properties": {
-    "ids": {
-     "type": "array",
-     "description": "The IDs generated for the requesting user in the specified space.",
-     "items": {
-      "type": "string"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#generatedIds",
-     "default": "drive#generatedIds"
-    },
-    "space": {
-     "type": "string",
-     "description": "The type of file that can be created with these IDs."
-    }
-   }
-  },
-  "ParentList": {
-   "id": "ParentList",
-   "type": "object",
-   "description": "A list of a file's parents.",
-   "properties": {
-    "etag": {
-     "type": "string",
-     "description": "The ETag of the list."
-    },
-    "items": {
-     "type": "array",
-     "description": "The list of parents.",
-     "items": {
-      "$ref": "ParentReference"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#parentList.",
-     "default": "drive#parentList"
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "A link back to this list."
-    }
-   }
-  },
-  "ParentReference": {
-   "id": "ParentReference",
-   "type": "object",
-   "description": "A reference to a file's parent.",
-   "properties": {
-    "id": {
-     "type": "string",
-     "description": "The ID of the parent.",
-     "annotations": {
-      "required": [
-       "drive.parents.insert"
-      ]
-     }
-    },
-    "isRoot": {
-     "type": "boolean",
-     "description": "Whether or not the parent is the root folder."
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#parentReference.",
-     "default": "drive#parentReference"
-    },
-    "parentLink": {
-     "type": "string",
-     "description": "A link to the parent."
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "A link back to this reference."
-    }
-   }
-  },
-  "Permission": {
-   "id": "Permission",
-   "type": "object",
-   "description": "A permission for a file.",
-   "properties": {
-    "additionalRoles": {
-     "type": "array",
-     "description": "Additional roles for this user. Only commenter is currently allowed, though more may be supported in the future.",
-     "items": {
-      "type": "string"
-     }
-    },
-    "authKey": {
-     "type": "string",
-     "description": "Deprecated."
-    },
-    "deleted": {
-     "type": "boolean",
-     "description": "Whether the account associated with this permission has been deleted. This field only pertains to user and group permissions."
-    },
-    "domain": {
-     "type": "string",
-     "description": "The domain name of the entity this permission refers to. This is an output-only field which is present when the permission type is user, group or domain."
-    },
-    "emailAddress": {
-     "type": "string",
-     "description": "The email address of the user or group this permission refers to. This is an output-only field which is present when the permission type is user or group."
-    },
-    "etag": {
-     "type": "string",
-     "description": "The ETag of the permission."
-    },
-    "expirationDate": {
-     "type": "string",
-     "description": "The time at which this permission will expire (RFC 3339 date-time). Expiration dates have the following restrictions:  \n- They cannot be set on shared drive items \n- They can only be set on user and group permissions \n- The date must be in the future \n- The date cannot be more than a year in the future \n- The date can only be set on drive.permissions.update or drive.permissions.patch requests",
-     "format": "date-time"
-    },
-    "id": {
-     "type": "string",
-     "description": "The ID of the user this permission refers to, and identical to the permissionId in the About and Files resources. When making a drive.permissions.insert request, exactly one of the id or value fields must be specified unless the permission type is anyone, in which case both id and value are ignored."
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#permission.",
-     "default": "drive#permission"
-    },
-    "name": {
-     "type": "string",
-     "description": "The name for this permission."
-    },
-    "permissionDetails": {
-     "type": "array",
-     "description": "Details of whether the permissions on this shared drive item are inherited or directly on this item. This is an output-only field which is present only for shared drive items.",
-     "items": {
-      "type": "object",
-      "properties": {
-       "additionalRoles": {
-        "type": "array",
-        "description": "Additional roles for this user. Only commenter is currently possible, though more may be supported in the future.",
-        "items": {
-         "type": "string"
+    "protocol": "rest",
+    "resources": {
+        "about": {
+            "methods": {
+                "get": {
+                    "description": "Gets the information about the current user along with Drive API settings",
+                    "httpMethod": "GET",
+                    "id": "drive.about.get",
+                    "parameters": {
+                        "includeSubscribed": {
+                            "default": "true",
+                            "description": "Whether to count changes outside the My Drive hierarchy. When set to false, changes to files such as those in the Application Data folder or shared files which have not been added to My Drive will be omitted from the maxChangeIdCount.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "maxChangeIdCount": {
+                            "default": "1",
+                            "description": "Maximum number of remaining change IDs to count",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "startChangeId": {
+                            "description": "Change ID to start counting from when calculating number of remaining change IDs",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "about",
+                    "response": {
+                        "$ref": "About"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                }
+            }
+        },
+        "apps": {
+            "methods": {
+                "get": {
+                    "description": "Gets a specific app.",
+                    "httpMethod": "GET",
+                    "id": "drive.apps.get",
+                    "parameterOrder": [
+                        "appId"
+                    ],
+                    "parameters": {
+                        "appId": {
+                            "description": "The ID of the app.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "apps/{appId}",
+                    "response": {
+                        "$ref": "App"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.apps.readonly",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "list": {
+                    "description": "Lists a user's installed apps.",
+                    "httpMethod": "GET",
+                    "id": "drive.apps.list",
+                    "parameters": {
+                        "appFilterExtensions": {
+                            "default": "",
+                            "description": "A comma-separated list of file extensions for open with filtering. All apps within the given app query scope which can open any of the given file extensions will be included in the response. If appFilterMimeTypes are provided as well, the result is a union of the two resulting app lists.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "appFilterMimeTypes": {
+                            "default": "",
+                            "description": "A comma-separated list of MIME types for open with filtering. All apps within the given app query scope which can open any of the given MIME types will be included in the response. If appFilterExtensions are provided as well, the result is a union of the two resulting app lists.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "languageCode": {
+                            "description": "A language or locale code, as defined by BCP 47, with some extensions from Unicode's LDML format (http://www.unicode.org/reports/tr35/).",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "apps",
+                    "response": {
+                        "$ref": "AppList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive.apps.readonly"
+                    ]
+                }
+            }
+        },
+        "changes": {
+            "methods": {
+                "get": {
+                    "description": "Deprecated - Use changes.getStartPageToken and changes.list to retrieve recent changes.",
+                    "httpMethod": "GET",
+                    "id": "drive.changes.get",
+                    "parameterOrder": [
+                        "changeId"
+                    ],
+                    "parameters": {
+                        "changeId": {
+                            "description": "The ID of the change.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "driveId": {
+                            "description": "The shared drive from which the change is returned.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "teamDriveId": {
+                            "description": "Deprecated use driveId instead.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "changes/{changeId}",
+                    "response": {
+                        "$ref": "Change"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.apps.readonly",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "getStartPageToken": {
+                    "description": "Gets the starting pageToken for listing future changes.",
+                    "httpMethod": "GET",
+                    "id": "drive.changes.getStartPageToken",
+                    "parameters": {
+                        "driveId": {
+                            "description": "The ID of the shared drive for which the starting pageToken for listing future changes from that shared drive is returned.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "teamDriveId": {
+                            "description": "Deprecated use driveId instead.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "changes/startPageToken",
+                    "response": {
+                        "$ref": "StartPageToken"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.apps.readonly",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "list": {
+                    "description": "Lists the changes for a user or shared drive.",
+                    "httpMethod": "GET",
+                    "id": "drive.changes.list",
+                    "parameters": {
+                        "driveId": {
+                            "description": "The shared drive from which changes are returned. If specified the change IDs will be reflective of the shared drive; use the combined drive ID and change ID as an identifier.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "includeCorpusRemovals": {
+                            "default": "false",
+                            "description": "Whether changes should include the file resource if the file is still accessible by the user at the time of the request, even when a file was removed from the list of changes and there will be no further change entries for this file.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "includeDeleted": {
+                            "default": "true",
+                            "description": "Whether to include changes indicating that items have been removed from the list of changes, for example by deletion or loss of access.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "includeItemsFromAllDrives": {
+                            "default": "false",
+                            "description": "Whether both My Drive and shared drive items should be included in results.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "includeSubscribed": {
+                            "default": "true",
+                            "description": "Whether to include changes outside the My Drive hierarchy in the result. When set to false, changes to files such as those in the Application Data folder or shared files which have not been added to My Drive are omitted from the result.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "includeTeamDriveItems": {
+                            "default": "false",
+                            "description": "Deprecated use includeItemsFromAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "maxResults": {
+                            "default": "100",
+                            "description": "Maximum number of changes to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "minimum": "1",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response or to the response from the getStartPageToken method.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "spaces": {
+                            "description": "A comma-separated list of spaces to query. Supported values are 'drive', 'appDataFolder' and 'photos'.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "startChangeId": {
+                            "description": "Deprecated - use pageToken instead.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "teamDriveId": {
+                            "description": "Deprecated use driveId instead.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "changes",
+                    "response": {
+                        "$ref": "ChangeList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.apps.readonly",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ],
+                    "supportsSubscription": true
+                },
+                "watch": {
+                    "description": "Subscribe to changes for a user.",
+                    "httpMethod": "POST",
+                    "id": "drive.changes.watch",
+                    "parameters": {
+                        "driveId": {
+                            "description": "The shared drive from which changes are returned. If specified the change IDs will be reflective of the shared drive; use the combined drive ID and change ID as an identifier.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "includeCorpusRemovals": {
+                            "default": "false",
+                            "description": "Whether changes should include the file resource if the file is still accessible by the user at the time of the request, even when a file was removed from the list of changes and there will be no further change entries for this file.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "includeDeleted": {
+                            "default": "true",
+                            "description": "Whether to include changes indicating that items have been removed from the list of changes, for example by deletion or loss of access.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "includeItemsFromAllDrives": {
+                            "default": "false",
+                            "description": "Whether both My Drive and shared drive items should be included in results.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "includeSubscribed": {
+                            "default": "true",
+                            "description": "Whether to include changes outside the My Drive hierarchy in the result. When set to false, changes to files such as those in the Application Data folder or shared files which have not been added to My Drive are omitted from the result.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "includeTeamDriveItems": {
+                            "default": "false",
+                            "description": "Deprecated use includeItemsFromAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "maxResults": {
+                            "default": "100",
+                            "description": "Maximum number of changes to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "minimum": "1",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response or to the response from the getStartPageToken method.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "spaces": {
+                            "description": "A comma-separated list of spaces to query. Supported values are 'drive', 'appDataFolder' and 'photos'.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "startChangeId": {
+                            "description": "Deprecated - use pageToken instead.",
+                            "format": "int64",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "teamDriveId": {
+                            "description": "Deprecated use driveId instead.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "changes/watch",
+                    "request": {
+                        "$ref": "Channel",
+                        "parameterName": "resource"
+                    },
+                    "response": {
+                        "$ref": "Channel"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.apps.readonly",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ],
+                    "supportsSubscription": true
+                }
+            }
+        },
+        "channels": {
+            "methods": {
+                "stop": {
+                    "description": "Stop watching resources through this channel",
+                    "httpMethod": "POST",
+                    "id": "drive.channels.stop",
+                    "path": "channels/stop",
+                    "request": {
+                        "$ref": "Channel",
+                        "parameterName": "resource"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.apps.readonly",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                }
+            }
+        },
+        "children": {
+            "methods": {
+                "delete": {
+                    "description": "Removes a child from a folder.",
+                    "httpMethod": "DELETE",
+                    "id": "drive.children.delete",
+                    "parameterOrder": [
+                        "folderId",
+                        "childId"
+                    ],
+                    "parameters": {
+                        "childId": {
+                            "description": "The ID of the child.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "enforceSingleParent": {
+                            "default": "false",
+                            "description": "Deprecated. If an item is not in a shared drive and its last parent is deleted but the item itself is not, the item will be placed under its owner's root.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "folderId": {
+                            "description": "The ID of the folder.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{folderId}/children/{childId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "get": {
+                    "description": "Gets a specific child reference.",
+                    "httpMethod": "GET",
+                    "id": "drive.children.get",
+                    "parameterOrder": [
+                        "folderId",
+                        "childId"
+                    ],
+                    "parameters": {
+                        "childId": {
+                            "description": "The ID of the child.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "folderId": {
+                            "description": "The ID of the folder.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{folderId}/children/{childId}",
+                    "response": {
+                        "$ref": "ChildReference"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a file into a folder.",
+                    "httpMethod": "POST",
+                    "id": "drive.children.insert",
+                    "parameterOrder": [
+                        "folderId"
+                    ],
+                    "parameters": {
+                        "enforceSingleParent": {
+                            "default": "false",
+                            "description": "Deprecated. Adding files to multiple folders is no longer supported. Use shortcuts instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "folderId": {
+                            "description": "The ID of the folder.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{folderId}/children",
+                    "request": {
+                        "$ref": "ChildReference"
+                    },
+                    "response": {
+                        "$ref": "ChildReference"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "list": {
+                    "description": "Lists a folder's children.",
+                    "httpMethod": "GET",
+                    "id": "drive.children.list",
+                    "parameterOrder": [
+                        "folderId"
+                    ],
+                    "parameters": {
+                        "folderId": {
+                            "description": "The ID of the folder.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "100",
+                            "description": "Maximum number of children to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "orderBy": {
+                            "description": "A comma-separated list of sort keys. Valid keys are 'createdDate', 'folder', 'lastViewedByMeDate', 'modifiedByMeDate', 'modifiedDate', 'quotaBytesUsed', 'recency', 'sharedWithMeDate', 'starred', and 'title'. Each key sorts ascending by default, but may be reversed with the 'desc' modifier. Example usage: ?orderBy=folder,modifiedDate desc,title. Please note that there is a current limitation for users with approximately one million files in which the requested sort order is ignored.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageToken": {
+                            "description": "Page token for children.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "q": {
+                            "description": "Query string for searching children.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{folderId}/children",
+                    "response": {
+                        "$ref": "ChildList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                }
+            }
+        },
+        "comments": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes a comment.",
+                    "httpMethod": "DELETE",
+                    "id": "drive.comments.delete",
+                    "parameterOrder": [
+                        "fileId",
+                        "commentId"
+                    ],
+                    "parameters": {
+                        "commentId": {
+                            "description": "The ID of the comment.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/comments/{commentId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "get": {
+                    "description": "Gets a comment by ID.",
+                    "httpMethod": "GET",
+                    "id": "drive.comments.get",
+                    "parameterOrder": [
+                        "fileId",
+                        "commentId"
+                    ],
+                    "parameters": {
+                        "commentId": {
+                            "description": "The ID of the comment.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includeDeleted": {
+                            "default": "false",
+                            "description": "If set, this will succeed when retrieving a deleted comment, and will include any deleted replies.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}/comments/{commentId}",
+                    "response": {
+                        "$ref": "Comment"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "insert": {
+                    "description": "Creates a new comment on the given file.",
+                    "httpMethod": "POST",
+                    "id": "drive.comments.insert",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/comments",
+                    "request": {
+                        "$ref": "Comment"
+                    },
+                    "response": {
+                        "$ref": "Comment"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "list": {
+                    "description": "Lists a file's comments.",
+                    "httpMethod": "GET",
+                    "id": "drive.comments.list",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includeDeleted": {
+                            "default": "false",
+                            "description": "If set, all comments and replies, including deleted comments and replies (with content stripped) will be returned.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "maxResults": {
+                            "default": "20",
+                            "description": "The maximum number of discussions to include in the response, used for paging.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "100",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "updatedMin": {
+                            "description": "Only discussions that were updated after this timestamp will be returned. Formatted as an RFC 3339 timestamp.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/comments",
+                    "response": {
+                        "$ref": "CommentList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing comment.",
+                    "httpMethod": "PATCH",
+                    "id": "drive.comments.patch",
+                    "parameterOrder": [
+                        "fileId",
+                        "commentId"
+                    ],
+                    "parameters": {
+                        "commentId": {
+                            "description": "The ID of the comment.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/comments/{commentId}",
+                    "request": {
+                        "$ref": "Comment"
+                    },
+                    "response": {
+                        "$ref": "Comment"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing comment.",
+                    "httpMethod": "PUT",
+                    "id": "drive.comments.update",
+                    "parameterOrder": [
+                        "fileId",
+                        "commentId"
+                    ],
+                    "parameters": {
+                        "commentId": {
+                            "description": "The ID of the comment.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/comments/{commentId}",
+                    "request": {
+                        "$ref": "Comment"
+                    },
+                    "response": {
+                        "$ref": "Comment"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                }
+            }
+        },
+        "drives": {
+            "methods": {
+                "delete": {
+                    "description": "Permanently deletes a shared drive for which the user is an organizer. The shared drive cannot contain any untrashed items.",
+                    "httpMethod": "DELETE",
+                    "id": "drive.drives.delete",
+                    "parameterOrder": [
+                        "driveId"
+                    ],
+                    "parameters": {
+                        "driveId": {
+                            "description": "The ID of the shared drive.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "drives/{driveId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive"
+                    ]
+                },
+                "get": {
+                    "description": "Gets a shared drive's metadata by ID.",
+                    "httpMethod": "GET",
+                    "id": "drive.drives.get",
+                    "parameterOrder": [
+                        "driveId"
+                    ],
+                    "parameters": {
+                        "driveId": {
+                            "description": "The ID of the shared drive.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the shared drive belongs.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "drives/{driveId}",
+                    "response": {
+                        "$ref": "Drive"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "hide": {
+                    "description": "Hides a shared drive from the default view.",
+                    "httpMethod": "POST",
+                    "id": "drive.drives.hide",
+                    "parameterOrder": [
+                        "driveId"
+                    ],
+                    "parameters": {
+                        "driveId": {
+                            "description": "The ID of the shared drive.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "drives/{driveId}/hide",
+                    "response": {
+                        "$ref": "Drive"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive"
+                    ]
+                },
+                "insert": {
+                    "description": "Creates a new shared drive.",
+                    "httpMethod": "POST",
+                    "id": "drive.drives.insert",
+                    "parameterOrder": [
+                        "requestId"
+                    ],
+                    "parameters": {
+                        "requestId": {
+                            "description": "An ID, such as a random UUID, which uniquely identifies this user's request for idempotent creation of a shared drive. A repeated request by the same user and with the same request ID will avoid creating duplicates by attempting to create the same shared drive. If the shared drive already exists a 409 error will be returned.",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "drives",
+                    "request": {
+                        "$ref": "Drive"
+                    },
+                    "response": {
+                        "$ref": "Drive"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive"
+                    ]
+                },
+                "list": {
+                    "description": "Lists the user's shared drives.",
+                    "httpMethod": "GET",
+                    "id": "drive.drives.list",
+                    "parameters": {
+                        "maxResults": {
+                            "default": "10",
+                            "description": "Maximum number of shared drives to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "100",
+                            "minimum": "1",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Page token for shared drives.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "q": {
+                            "description": "Query string for searching shared drives.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then all shared drives of the domain in which the requester is an administrator are returned.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "drives",
+                    "response": {
+                        "$ref": "DriveList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "unhide": {
+                    "description": "Restores a shared drive to the default view.",
+                    "httpMethod": "POST",
+                    "id": "drive.drives.unhide",
+                    "parameterOrder": [
+                        "driveId"
+                    ],
+                    "parameters": {
+                        "driveId": {
+                            "description": "The ID of the shared drive.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "drives/{driveId}/unhide",
+                    "response": {
+                        "$ref": "Drive"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive"
+                    ]
+                },
+                "update": {
+                    "description": "Updates the metadata for a shared drive.",
+                    "httpMethod": "PUT",
+                    "id": "drive.drives.update",
+                    "parameterOrder": [
+                        "driveId"
+                    ],
+                    "parameters": {
+                        "driveId": {
+                            "description": "The ID of the shared drive.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the shared drive belongs.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "drives/{driveId}",
+                    "request": {
+                        "$ref": "Drive"
+                    },
+                    "response": {
+                        "$ref": "Drive"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive"
+                    ]
+                }
+            }
+        },
+        "files": {
+            "methods": {
+                "copy": {
+                    "description": "Creates a copy of the specified file. Folders cannot be copied.",
+                    "httpMethod": "POST",
+                    "id": "drive.files.copy",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "convert": {
+                            "default": "false",
+                            "description": "Whether to convert this file to the corresponding Docs Editors format.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "enforceSingleParent": {
+                            "default": "false",
+                            "description": "Deprecated. Copying files into multiple folders is no longer supported. Use shortcuts instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file to copy.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "ocr": {
+                            "default": "false",
+                            "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ocrLanguage": {
+                            "description": "If ocr is true, hints at the language to use. Valid values are BCP 47 codes.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pinned": {
+                            "default": "false",
+                            "description": "Whether to pin the head revision of the new copy. A file can have a maximum of 200 pinned revisions.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "timedTextLanguage": {
+                            "description": "The language of the timed text.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "timedTextTrackName": {
+                            "description": "The timed text track name.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "visibility": {
+                            "default": "DEFAULT",
+                            "description": "The visibility of the new file. This parameter is only relevant when the source is not a native Google Doc and convert=false.",
+                            "enum": [
+                                "DEFAULT",
+                                "PRIVATE"
+                            ],
+                            "enumDescriptions": [
+                                "The visibility of the new file is determined by the user's default visibility/sharing policies.",
+                                "The new file will be visible to only the owner."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/copy",
+                    "request": {
+                        "$ref": "File"
+                    },
+                    "response": {
+                        "$ref": "File"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.apps.readonly",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.photos.readonly"
+                    ]
+                },
+                "delete": {
+                    "description": "Permanently deletes a file by ID. Skips the trash. The currently authenticated user must own the file or be an organizer on the parent for shared drive files.",
+                    "httpMethod": "DELETE",
+                    "id": "drive.files.delete",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "enforceSingleParent": {
+                            "default": "false",
+                            "description": "Deprecated. If an item is not in a shared drive and its last parent is deleted but the item itself is not, the item will be placed under its owner's root.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file to delete.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "emptyTrash": {
+                    "description": "Permanently deletes all of the user's trashed files.",
+                    "httpMethod": "DELETE",
+                    "id": "drive.files.emptyTrash",
+                    "parameters": {
+                        "enforceSingleParent": {
+                            "default": "false",
+                            "description": "Deprecated. If an item is not in a shared drive and its last parent is deleted but the item itself is not, the item will be placed under its owner's root.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/trash",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive"
+                    ]
+                },
+                "export": {
+                    "description": "Exports a Google Doc to the requested MIME type and returns the exported content. Please note that the exported content is limited to 10MB.",
+                    "httpMethod": "GET",
+                    "id": "drive.files.export",
+                    "parameterOrder": [
+                        "fileId",
+                        "mimeType"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "mimeType": {
+                            "description": "The MIME type of the format requested for this export.",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/export",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ],
+                    "supportsMediaDownload": true
+                },
+                "generateIds": {
+                    "description": "Generates a set of file IDs which can be provided in insert or copy requests.",
+                    "httpMethod": "GET",
+                    "id": "drive.files.generateIds",
+                    "parameters": {
+                        "maxResults": {
+                            "default": "10",
+                            "description": "Maximum number of IDs to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "1",
+                            "type": "integer"
+                        },
+                        "space": {
+                            "default": "drive",
+                            "description": "The space in which the IDs can be used to create new files. Supported values are 'drive' and 'appDataFolder'.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/generateIds",
+                    "response": {
+                        "$ref": "GeneratedIds"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "get": {
+                    "description": "Gets a file's metadata by ID.",
+                    "httpMethod": "GET",
+                    "id": "drive.files.get",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "acknowledgeAbuse": {
+                            "default": "false",
+                            "description": "Whether the user is acknowledging the risk of downloading known malware or other abusive files.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "fileId": {
+                            "description": "The ID for the file in question.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "projection": {
+                            "description": "This parameter is deprecated and has no function.",
+                            "enum": [
+                                "BASIC",
+                                "FULL"
+                            ],
+                            "enumDescriptions": [
+                                "Deprecated",
+                                "Deprecated"
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "revisionId": {
+                            "description": "Specifies the Revision ID that should be downloaded. Ignored unless alt=media is specified.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "updateViewedDate": {
+                            "default": "false",
+                            "description": "Deprecated: Use files.update with modifiedDateBehavior=noChange, updateViewedDate=true and an empty request body.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}",
+                    "response": {
+                        "$ref": "File"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ],
+                    "supportsMediaDownload": true,
+                    "supportsSubscription": true,
+                    "useMediaDownloadService": true
+                },
+                "insert": {
+                    "description": "Insert a new file.",
+                    "httpMethod": "POST",
+                    "id": "drive.files.insert",
+                    "mediaUpload": {
+                        "accept": [
+                            "*/*"
+                        ],
+                        "maxSize": "5120GB",
+                        "protocols": {
+                            "resumable": {
+                                "multipart": true,
+                                "path": "/resumable/upload/drive/v2/files"
+                            },
+                            "simple": {
+                                "multipart": true,
+                                "path": "/upload/drive/v2/files"
+                            }
+                        }
+                    },
+                    "parameters": {
+                        "convert": {
+                            "default": "false",
+                            "description": "Whether to convert this file to the corresponding Docs Editors format.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "enforceSingleParent": {
+                            "default": "false",
+                            "description": "Deprecated. Creating files in multiple folders is no longer supported.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "ocr": {
+                            "default": "false",
+                            "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ocrLanguage": {
+                            "description": "If ocr is true, hints at the language to use. Valid values are BCP 47 codes.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pinned": {
+                            "default": "false",
+                            "description": "Whether to pin the head revision of the uploaded file. A file can have a maximum of 200 pinned revisions.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "timedTextLanguage": {
+                            "description": "The language of the timed text.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "timedTextTrackName": {
+                            "description": "The timed text track name.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "useContentAsIndexableText": {
+                            "default": "false",
+                            "description": "Whether to use the content as indexable text.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "visibility": {
+                            "default": "DEFAULT",
+                            "description": "The visibility of the new file. This parameter is only relevant when convert=false.",
+                            "enum": [
+                                "DEFAULT",
+                                "PRIVATE"
+                            ],
+                            "enumDescriptions": [
+                                "The visibility of the new file is determined by the user's default visibility/sharing policies.",
+                                "The new file will be visible to only the owner."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "files",
+                    "request": {
+                        "$ref": "File"
+                    },
+                    "response": {
+                        "$ref": "File"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.apps.readonly",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ],
+                    "supportsMediaUpload": true,
+                    "supportsSubscription": true
+                },
+                "list": {
+                    "description": "Lists the user's files.",
+                    "httpMethod": "GET",
+                    "id": "drive.files.list",
+                    "parameters": {
+                        "corpora": {
+                            "description": "Groupings of files to which the query applies. Supported groupings are: 'user' (files created by, opened by, or shared directly with the user), 'drive' (files in the specified shared drive as indicated by the 'driveId'), 'domain' (files shared to the user's domain), and 'allDrives' (A combination of 'user' and 'drive' for all drives where the user is a member). When able, use 'user' or 'drive', instead of 'allDrives', for efficiency.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "corpus": {
+                            "description": "The body of items (files/documents) to which the query applies. Deprecated: use 'corpora' instead.",
+                            "enum": [
+                                "DEFAULT",
+                                "DOMAIN"
+                            ],
+                            "enumDescriptions": [
+                                "The items that the user has accessed.",
+                                "Items shared to the user's domain."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "driveId": {
+                            "description": "ID of the shared drive to search.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "includeItemsFromAllDrives": {
+                            "default": "false",
+                            "description": "Whether both My Drive and shared drive items should be included in results.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "includeTeamDriveItems": {
+                            "default": "false",
+                            "description": "Deprecated use includeItemsFromAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "maxResults": {
+                            "default": "100",
+                            "description": "The maximum number of files to return per page. Partial or empty result pages are possible even before the end of the files list has been reached.",
+                            "format": "int32",
+                            "location": "query",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "orderBy": {
+                            "description": "A comma-separated list of sort keys. Valid keys are 'createdDate', 'folder', 'lastViewedByMeDate', 'modifiedByMeDate', 'modifiedDate', 'quotaBytesUsed', 'recency', 'sharedWithMeDate', 'starred', 'title', and 'title_natural'. Each key sorts ascending by default, but may be reversed with the 'desc' modifier. Example usage: ?orderBy=folder,modifiedDate desc,title. Please note that there is a current limitation for users with approximately one million files in which the requested sort order is ignored.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageToken": {
+                            "description": "Page token for files.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "projection": {
+                            "description": "This parameter is deprecated and has no function.",
+                            "enum": [
+                                "BASIC",
+                                "FULL"
+                            ],
+                            "enumDescriptions": [
+                                "Deprecated",
+                                "Deprecated"
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "q": {
+                            "description": "Query string for searching files.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "spaces": {
+                            "description": "A comma-separated list of spaces to query. Supported values are 'drive', 'appDataFolder' and 'photos'.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "teamDriveId": {
+                            "description": "Deprecated use driveId instead.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "files",
+                    "response": {
+                        "$ref": "FileList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.apps.readonly",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates file metadata and/or content. This method supports patch semantics.",
+                    "httpMethod": "PATCH",
+                    "id": "drive.files.patch",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "addParents": {
+                            "description": "Comma-separated list of parent IDs to add.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "convert": {
+                            "default": "false",
+                            "description": "This parameter is deprecated and has no function.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "enforceSingleParent": {
+                            "default": "false",
+                            "description": "Deprecated. Adding files to multiple folders is no longer supported. Use shortcuts instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file to update.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "modifiedDateBehavior": {
+                            "description": "Determines the behavior in which modifiedDate is updated. This overrides setModifiedDate.",
+                            "enum": [
+                                "fromBody",
+                                "fromBodyIfNeeded",
+                                "fromBodyOrNow",
+                                "noChange",
+                                "now",
+                                "nowIfNeeded"
+                            ],
+                            "enumDescriptions": [
+                                "Set modifiedDate to the value provided in the body of the request. No change if no value was provided.",
+                                "Set modifiedDate to the value provided in the body of the request depending on other contents of the update.",
+                                "Set modifiedDate to the value provided in the body of the request, or to the current time if no value was provided.",
+                                "Maintain the previous value of modifiedDate.",
+                                "Set modifiedDate to the current time.",
+                                "Set modifiedDate to the current time depending on contents of the update."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "newRevision": {
+                            "default": "true",
+                            "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If true or not set, a new blob is created as head revision, and previous unpinned revisions are preserved for a short period of time. Pinned revisions are stored indefinitely, using additional storage quota, up to a maximum of 200 revisions. For details on how revisions are retained, see the Drive Help Center. Note that this field is ignored if there is no payload in the request.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ocr": {
+                            "default": "false",
+                            "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ocrLanguage": {
+                            "description": "If ocr is true, hints at the language to use. Valid values are BCP 47 codes.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pinned": {
+                            "default": "false",
+                            "description": "Whether to pin the new revision. A file can have a maximum of 200 pinned revisions. Note that this field is ignored if there is no payload in the request.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "removeParents": {
+                            "description": "Comma-separated list of parent IDs to remove.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "setModifiedDate": {
+                            "default": "false",
+                            "description": "Whether to set the modified date using the value supplied in the request body. Setting this field to true is equivalent to modifiedDateBehavior=fromBodyOrNow, and false is equivalent to modifiedDateBehavior=now. To prevent any changes to the modified date set modifiedDateBehavior=noChange.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "timedTextLanguage": {
+                            "description": "The language of the timed text.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "timedTextTrackName": {
+                            "description": "The timed text track name.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "updateViewedDate": {
+                            "default": "true",
+                            "description": "Whether to update the view date after successfully updating the file.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "useContentAsIndexableText": {
+                            "default": "false",
+                            "description": "Whether to use the content as indexable text.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}",
+                    "request": {
+                        "$ref": "File"
+                    },
+                    "response": {
+                        "$ref": "File"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.apps.readonly",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.scripts"
+                    ]
+                },
+                "touch": {
+                    "description": "Set the file's updated time to the current server time.",
+                    "httpMethod": "POST",
+                    "id": "drive.files.touch",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file to update.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}/touch",
+                    "response": {
+                        "$ref": "File"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.apps.readonly",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata"
+                    ]
+                },
+                "trash": {
+                    "description": "Moves a file to the trash. The currently authenticated user must own the file or be at least a fileOrganizer on the parent for shared drive files. Only the owner may trash a file. The trashed item is excluded from all files.list responses returned for any user who does not own the file. However, all users with access to the file can see the trashed item metadata in an API response. All users with access can copy, download, export, and share the file.",
+                    "httpMethod": "POST",
+                    "id": "drive.files.trash",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file to trash.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}/trash",
+                    "response": {
+                        "$ref": "File"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.apps.readonly",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "untrash": {
+                    "description": "Restores a file from the trash. The currently authenticated user must own the file or be at least a fileOrganizer on the parent for shared drive files. Only the owner may untrash a file.",
+                    "httpMethod": "POST",
+                    "id": "drive.files.untrash",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file to untrash.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}/untrash",
+                    "response": {
+                        "$ref": "File"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.apps.readonly",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "update": {
+                    "description": "Updates file metadata and/or content.",
+                    "httpMethod": "PUT",
+                    "id": "drive.files.update",
+                    "mediaUpload": {
+                        "accept": [
+                            "*/*"
+                        ],
+                        "maxSize": "5120GB",
+                        "protocols": {
+                            "resumable": {
+                                "multipart": true,
+                                "path": "/resumable/upload/drive/v2/files/{fileId}"
+                            },
+                            "simple": {
+                                "multipart": true,
+                                "path": "/upload/drive/v2/files/{fileId}"
+                            }
+                        }
+                    },
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "addParents": {
+                            "description": "Comma-separated list of parent IDs to add.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "convert": {
+                            "default": "false",
+                            "description": "This parameter is deprecated and has no function.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "enforceSingleParent": {
+                            "default": "false",
+                            "description": "Deprecated. Adding files to multiple folders is no longer supported. Use shortcuts instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file to update.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "modifiedDateBehavior": {
+                            "description": "Determines the behavior in which modifiedDate is updated. This overrides setModifiedDate.",
+                            "enum": [
+                                "fromBody",
+                                "fromBodyIfNeeded",
+                                "fromBodyOrNow",
+                                "noChange",
+                                "now",
+                                "nowIfNeeded"
+                            ],
+                            "enumDescriptions": [
+                                "Set modifiedDate to the value provided in the body of the request. No change if no value was provided.",
+                                "Set modifiedDate to the value provided in the body of the request depending on other contents of the update.",
+                                "Set modifiedDate to the value provided in the body of the request, or to the current time if no value was provided.",
+                                "Maintain the previous value of modifiedDate.",
+                                "Set modifiedDate to the current time.",
+                                "Set modifiedDate to the current time depending on contents of the update."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "newRevision": {
+                            "default": "true",
+                            "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If true or not set, a new blob is created as head revision, and previous unpinned revisions are preserved for a short period of time. Pinned revisions are stored indefinitely, using additional storage quota, up to a maximum of 200 revisions. For details on how revisions are retained, see the Drive Help Center. Note that this field is ignored if there is no payload in the request.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ocr": {
+                            "default": "false",
+                            "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ocrLanguage": {
+                            "description": "If ocr is true, hints at the language to use. Valid values are BCP 47 codes.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pinned": {
+                            "default": "false",
+                            "description": "Whether to pin the new revision. A file can have a maximum of 200 pinned revisions. Note that this field is ignored if there is no payload in the request.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "removeParents": {
+                            "description": "Comma-separated list of parent IDs to remove.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "setModifiedDate": {
+                            "default": "false",
+                            "description": "Whether to set the modified date using the value supplied in the request body. Setting this field to true is equivalent to modifiedDateBehavior=fromBodyOrNow, and false is equivalent to modifiedDateBehavior=now. To prevent any changes to the modified date set modifiedDateBehavior=noChange.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "timedTextLanguage": {
+                            "description": "The language of the timed text.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "timedTextTrackName": {
+                            "description": "The timed text track name.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "updateViewedDate": {
+                            "default": "true",
+                            "description": "Whether to update the view date after successfully updating the file.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "useContentAsIndexableText": {
+                            "default": "false",
+                            "description": "Whether to use the content as indexable text.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}",
+                    "request": {
+                        "$ref": "File"
+                    },
+                    "response": {
+                        "$ref": "File"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.apps.readonly",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.scripts"
+                    ],
+                    "supportsMediaUpload": true
+                },
+                "watch": {
+                    "description": "Subscribe to changes on a file",
+                    "httpMethod": "POST",
+                    "id": "drive.files.watch",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "acknowledgeAbuse": {
+                            "default": "false",
+                            "description": "Whether the user is acknowledging the risk of downloading known malware or other abusive files.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "fileId": {
+                            "description": "The ID for the file in question.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "projection": {
+                            "description": "This parameter is deprecated and has no function.",
+                            "enum": [
+                                "BASIC",
+                                "FULL"
+                            ],
+                            "enumDescriptions": [
+                                "Deprecated",
+                                "Deprecated"
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "revisionId": {
+                            "description": "Specifies the Revision ID that should be downloaded. Ignored unless alt=media is specified.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "updateViewedDate": {
+                            "default": "false",
+                            "description": "Deprecated: Use files.update with modifiedDateBehavior=noChange, updateViewedDate=true and an empty request body.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}/watch",
+                    "request": {
+                        "$ref": "Channel",
+                        "parameterName": "resource"
+                    },
+                    "response": {
+                        "$ref": "Channel"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ],
+                    "supportsMediaDownload": true,
+                    "supportsSubscription": true,
+                    "useMediaDownloadService": true
+                }
+            }
+        },
+        "parents": {
+            "methods": {
+                "delete": {
+                    "description": "Removes a parent from a file.",
+                    "httpMethod": "DELETE",
+                    "id": "drive.parents.delete",
+                    "parameterOrder": [
+                        "fileId",
+                        "parentId"
+                    ],
+                    "parameters": {
+                        "enforceSingleParent": {
+                            "default": "false",
+                            "description": "Deprecated. If an item is not in a shared drive and its last parent is deleted but the item itself is not, the item will be placed under its owner's root.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "parentId": {
+                            "description": "The ID of the parent.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/parents/{parentId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "get": {
+                    "description": "Gets a specific parent reference.",
+                    "httpMethod": "GET",
+                    "id": "drive.parents.get",
+                    "parameterOrder": [
+                        "fileId",
+                        "parentId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "parentId": {
+                            "description": "The ID of the parent.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/parents/{parentId}",
+                    "response": {
+                        "$ref": "ParentReference"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "insert": {
+                    "description": "Adds a parent folder for a file.",
+                    "httpMethod": "POST",
+                    "id": "drive.parents.insert",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "enforceSingleParent": {
+                            "default": "false",
+                            "description": "Deprecated. Adding files to multiple folders is no longer supported. Use shortcuts instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}/parents",
+                    "request": {
+                        "$ref": "ParentReference"
+                    },
+                    "response": {
+                        "$ref": "ParentReference"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "list": {
+                    "description": "Lists a file's parents.",
+                    "httpMethod": "GET",
+                    "id": "drive.parents.list",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/parents",
+                    "response": {
+                        "$ref": "ParentList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                }
+            }
+        },
+        "permissions": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes a permission from a file or shared drive.",
+                    "httpMethod": "DELETE",
+                    "id": "drive.permissions.delete",
+                    "parameterOrder": [
+                        "fileId",
+                        "permissionId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID for the file or shared drive.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "permissionId": {
+                            "description": "The ID for the permission.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}/permissions/{permissionId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "get": {
+                    "description": "Gets a permission by ID.",
+                    "httpMethod": "GET",
+                    "id": "drive.permissions.get",
+                    "parameterOrder": [
+                        "fileId",
+                        "permissionId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID for the file or shared drive.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "permissionId": {
+                            "description": "The ID for the permission.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}/permissions/{permissionId}",
+                    "response": {
+                        "$ref": "Permission"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "getIdForEmail": {
+                    "description": "Returns the permission ID for an email address.",
+                    "httpMethod": "GET",
+                    "id": "drive.permissions.getIdForEmail",
+                    "parameterOrder": [
+                        "email"
+                    ],
+                    "parameters": {
+                        "email": {
+                            "description": "The email address for which to return a permission ID",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "permissionIds/{email}",
+                    "response": {
+                        "$ref": "PermissionId"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.apps.readonly",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "insert": {
+                    "description": "Inserts a permission for a file or shared drive.",
+                    "httpMethod": "POST",
+                    "id": "drive.permissions.insert",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "emailMessage": {
+                            "description": "A plain text custom message to include in notification emails.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "enforceSingleParent": {
+                            "default": "false",
+                            "description": "Deprecated. See moveToNewOwnersRoot for details.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "fileId": {
+                            "description": "The ID for the file or shared drive.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "moveToNewOwnersRoot": {
+                            "default": "false",
+                            "description": "This parameter will only take effect if the item is not in a shared drive and the request is attempting to transfer the ownership of the item. If set to true, the item will be moved to the new owner's My Drive root folder and all prior parents removed. If set to false, parents are not changed.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "sendNotificationEmails": {
+                            "default": "true",
+                            "description": "Whether to send notification emails when sharing to users or groups. This parameter is ignored and an email is sent if the role is owner.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}/permissions",
+                    "request": {
+                        "$ref": "Permission"
+                    },
+                    "response": {
+                        "$ref": "Permission"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "list": {
+                    "description": "Lists a file's or shared drive's permissions.",
+                    "httpMethod": "GET",
+                    "id": "drive.permissions.list",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID for the file or shared drive.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "description": "The maximum number of permissions to return per page. When not set for files in a shared drive, at most 100 results will be returned. When not set for files that are not in a shared drive, the entire list will be returned.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "100",
+                            "minimum": "1",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}/permissions",
+                    "response": {
+                        "$ref": "PermissionList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates a permission using patch semantics.",
+                    "httpMethod": "PATCH",
+                    "id": "drive.permissions.patch",
+                    "parameterOrder": [
+                        "fileId",
+                        "permissionId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID for the file or shared drive.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "permissionId": {
+                            "description": "The ID for the permission.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "removeExpiration": {
+                            "default": "false",
+                            "description": "Whether to remove the expiration date.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "transferOwnership": {
+                            "default": "false",
+                            "description": "Whether changing a role to 'owner' downgrades the current owners to writers. Does nothing if the specified role is not 'owner'.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}/permissions/{permissionId}",
+                    "request": {
+                        "$ref": "Permission"
+                    },
+                    "response": {
+                        "$ref": "Permission"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "update": {
+                    "description": "Updates a permission.",
+                    "httpMethod": "PUT",
+                    "id": "drive.permissions.update",
+                    "parameterOrder": [
+                        "fileId",
+                        "permissionId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID for the file or shared drive.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "permissionId": {
+                            "description": "The ID for the permission.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "removeExpiration": {
+                            "default": "false",
+                            "description": "Whether to remove the expiration date.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "transferOwnership": {
+                            "default": "false",
+                            "description": "Whether changing a role to 'owner' downgrades the current owners to writers. Does nothing if the specified role is not 'owner'.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}/permissions/{permissionId}",
+                    "request": {
+                        "$ref": "Permission"
+                    },
+                    "response": {
+                        "$ref": "Permission"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                }
+            }
+        },
+        "properties": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes a property.",
+                    "httpMethod": "DELETE",
+                    "id": "drive.properties.delete",
+                    "parameterOrder": [
+                        "fileId",
+                        "propertyKey"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "propertyKey": {
+                            "description": "The key of the property.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "visibility": {
+                            "default": "private",
+                            "description": "The visibility of the property.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/properties/{propertyKey}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata"
+                    ]
+                },
+                "get": {
+                    "description": "Gets a property by its key.",
+                    "httpMethod": "GET",
+                    "id": "drive.properties.get",
+                    "parameterOrder": [
+                        "fileId",
+                        "propertyKey"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "propertyKey": {
+                            "description": "The key of the property.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "visibility": {
+                            "default": "private",
+                            "description": "The visibility of the property.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/properties/{propertyKey}",
+                    "response": {
+                        "$ref": "Property"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "insert": {
+                    "description": "Adds a property to a file, or updates it if it already exists.",
+                    "httpMethod": "POST",
+                    "id": "drive.properties.insert",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/properties",
+                    "request": {
+                        "$ref": "Property"
+                    },
+                    "response": {
+                        "$ref": "Property"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata"
+                    ]
+                },
+                "list": {
+                    "description": "Lists a file's properties.",
+                    "httpMethod": "GET",
+                    "id": "drive.properties.list",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/properties",
+                    "response": {
+                        "$ref": "PropertyList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates a property.",
+                    "httpMethod": "PATCH",
+                    "id": "drive.properties.patch",
+                    "parameterOrder": [
+                        "fileId",
+                        "propertyKey"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "propertyKey": {
+                            "description": "The key of the property.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "visibility": {
+                            "default": "private",
+                            "description": "The visibility of the property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/properties/{propertyKey}",
+                    "request": {
+                        "$ref": "Property"
+                    },
+                    "response": {
+                        "$ref": "Property"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata"
+                    ]
+                },
+                "update": {
+                    "description": "Updates a property.",
+                    "httpMethod": "PUT",
+                    "id": "drive.properties.update",
+                    "parameterOrder": [
+                        "fileId",
+                        "propertyKey"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "propertyKey": {
+                            "description": "The key of the property.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "visibility": {
+                            "default": "private",
+                            "description": "The visibility of the property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/properties/{propertyKey}",
+                    "request": {
+                        "$ref": "Property"
+                    },
+                    "response": {
+                        "$ref": "Property"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata"
+                    ]
+                }
+            }
+        },
+        "replies": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes a reply.",
+                    "httpMethod": "DELETE",
+                    "id": "drive.replies.delete",
+                    "parameterOrder": [
+                        "fileId",
+                        "commentId",
+                        "replyId"
+                    ],
+                    "parameters": {
+                        "commentId": {
+                            "description": "The ID of the comment.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "replyId": {
+                            "description": "The ID of the reply.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/comments/{commentId}/replies/{replyId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "get": {
+                    "description": "Gets a reply.",
+                    "httpMethod": "GET",
+                    "id": "drive.replies.get",
+                    "parameterOrder": [
+                        "fileId",
+                        "commentId",
+                        "replyId"
+                    ],
+                    "parameters": {
+                        "commentId": {
+                            "description": "The ID of the comment.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includeDeleted": {
+                            "default": "false",
+                            "description": "If set, this will succeed when retrieving a deleted reply.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "replyId": {
+                            "description": "The ID of the reply.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/comments/{commentId}/replies/{replyId}",
+                    "response": {
+                        "$ref": "CommentReply"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "insert": {
+                    "description": "Creates a new reply to the given comment.",
+                    "httpMethod": "POST",
+                    "id": "drive.replies.insert",
+                    "parameterOrder": [
+                        "fileId",
+                        "commentId"
+                    ],
+                    "parameters": {
+                        "commentId": {
+                            "description": "The ID of the comment.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/comments/{commentId}/replies",
+                    "request": {
+                        "$ref": "CommentReply"
+                    },
+                    "response": {
+                        "$ref": "CommentReply"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "list": {
+                    "description": "Lists all of the replies to a comment.",
+                    "httpMethod": "GET",
+                    "id": "drive.replies.list",
+                    "parameterOrder": [
+                        "fileId",
+                        "commentId"
+                    ],
+                    "parameters": {
+                        "commentId": {
+                            "description": "The ID of the comment.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includeDeleted": {
+                            "default": "false",
+                            "description": "If set, all replies, including deleted replies (with content stripped) will be returned.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "maxResults": {
+                            "default": "20",
+                            "description": "The maximum number of replies to include in the response, used for paging.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "100",
+                            "minimum": "0",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/comments/{commentId}/replies",
+                    "response": {
+                        "$ref": "CommentReplyList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing reply.",
+                    "httpMethod": "PATCH",
+                    "id": "drive.replies.patch",
+                    "parameterOrder": [
+                        "fileId",
+                        "commentId",
+                        "replyId"
+                    ],
+                    "parameters": {
+                        "commentId": {
+                            "description": "The ID of the comment.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "replyId": {
+                            "description": "The ID of the reply.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/comments/{commentId}/replies/{replyId}",
+                    "request": {
+                        "$ref": "CommentReply"
+                    },
+                    "response": {
+                        "$ref": "CommentReply"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing reply.",
+                    "httpMethod": "PUT",
+                    "id": "drive.replies.update",
+                    "parameterOrder": [
+                        "fileId",
+                        "commentId",
+                        "replyId"
+                    ],
+                    "parameters": {
+                        "commentId": {
+                            "description": "The ID of the comment.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "replyId": {
+                            "description": "The ID of the reply.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/comments/{commentId}/replies/{replyId}",
+                    "request": {
+                        "$ref": "CommentReply"
+                    },
+                    "response": {
+                        "$ref": "CommentReply"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                }
+            }
+        },
+        "revisions": {
+            "methods": {
+                "delete": {
+                    "description": "Permanently deletes a file version. You can only delete revisions for files with binary content, like images or videos. Revisions for other files, like Google Docs or Sheets, and the last remaining file version can't be deleted.",
+                    "httpMethod": "DELETE",
+                    "id": "drive.revisions.delete",
+                    "parameterOrder": [
+                        "fileId",
+                        "revisionId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "revisionId": {
+                            "description": "The ID of the revision.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/revisions/{revisionId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "get": {
+                    "description": "Gets a specific revision.",
+                    "httpMethod": "GET",
+                    "id": "drive.revisions.get",
+                    "parameterOrder": [
+                        "fileId",
+                        "revisionId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "revisionId": {
+                            "description": "The ID of the revision.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/revisions/{revisionId}",
+                    "response": {
+                        "$ref": "Revision"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "list": {
+                    "description": "Lists a file's revisions.",
+                    "httpMethod": "GET",
+                    "id": "drive.revisions.list",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "default": "200",
+                            "description": "Maximum number of revisions to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "1",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Page token for revisions. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/revisions",
+                    "response": {
+                        "$ref": "RevisionList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates a revision.",
+                    "httpMethod": "PATCH",
+                    "id": "drive.revisions.patch",
+                    "parameterOrder": [
+                        "fileId",
+                        "revisionId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID for the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "revisionId": {
+                            "description": "The ID for the revision.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/revisions/{revisionId}",
+                    "request": {
+                        "$ref": "Revision"
+                    },
+                    "response": {
+                        "$ref": "Revision"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "update": {
+                    "description": "Updates a revision.",
+                    "httpMethod": "PUT",
+                    "id": "drive.revisions.update",
+                    "parameterOrder": [
+                        "fileId",
+                        "revisionId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID for the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "revisionId": {
+                            "description": "The ID for the revision.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/revisions/{revisionId}",
+                    "request": {
+                        "$ref": "Revision"
+                    },
+                    "response": {
+                        "$ref": "Revision"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                }
+            }
+        },
+        "teamdrives": {
+            "methods": {
+                "delete": {
+                    "description": "Deprecated use drives.delete instead.",
+                    "httpMethod": "DELETE",
+                    "id": "drive.teamdrives.delete",
+                    "parameterOrder": [
+                        "teamDriveId"
+                    ],
+                    "parameters": {
+                        "teamDriveId": {
+                            "description": "The ID of the Team Drive",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "teamdrives/{teamDriveId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive"
+                    ]
+                },
+                "get": {
+                    "description": "Deprecated use drives.get instead.",
+                    "httpMethod": "GET",
+                    "id": "drive.teamdrives.get",
+                    "parameterOrder": [
+                        "teamDriveId"
+                    ],
+                    "parameters": {
+                        "teamDriveId": {
+                            "description": "The ID of the Team Drive",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the Team Drive belongs.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "teamdrives/{teamDriveId}",
+                    "response": {
+                        "$ref": "TeamDrive"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "insert": {
+                    "description": "Deprecated use drives.insert instead.",
+                    "httpMethod": "POST",
+                    "id": "drive.teamdrives.insert",
+                    "parameterOrder": [
+                        "requestId"
+                    ],
+                    "parameters": {
+                        "requestId": {
+                            "description": "An ID, such as a random UUID, which uniquely identifies this user's request for idempotent creation of a Team Drive. A repeated request by the same user and with the same request ID will avoid creating duplicates by attempting to create the same Team Drive. If the Team Drive already exists a 409 error will be returned.",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "teamdrives",
+                    "request": {
+                        "$ref": "TeamDrive"
+                    },
+                    "response": {
+                        "$ref": "TeamDrive"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive"
+                    ]
+                },
+                "list": {
+                    "description": "Deprecated use drives.list instead.",
+                    "httpMethod": "GET",
+                    "id": "drive.teamdrives.list",
+                    "parameters": {
+                        "maxResults": {
+                            "default": "10",
+                            "description": "Maximum number of Team Drives to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "100",
+                            "minimum": "1",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Page token for Team Drives.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "q": {
+                            "description": "Query string for searching Team Drives.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then all Team Drives of the domain in which the requester is an administrator are returned.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "teamdrives",
+                    "response": {
+                        "$ref": "TeamDriveList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "update": {
+                    "description": "Deprecated use drives.update instead.",
+                    "httpMethod": "PUT",
+                    "id": "drive.teamdrives.update",
+                    "parameterOrder": [
+                        "teamDriveId"
+                    ],
+                    "parameters": {
+                        "teamDriveId": {
+                            "description": "The ID of the Team Drive",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the Team Drive belongs.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "teamdrives/{teamDriveId}",
+                    "request": {
+                        "$ref": "TeamDrive"
+                    },
+                    "response": {
+                        "$ref": "TeamDrive"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive"
+                    ]
+                }
+            }
         }
-       },
-       "inherited": {
-        "type": "boolean",
-        "description": "Whether this permission is inherited. This field is always populated. This is an output-only field."
-       },
-       "inheritedFrom": {
-        "type": "string",
-        "description": "The ID of the item from which this permission is inherited. This is an output-only field."
-       },
-       "permissionType": {
-        "type": "string",
-        "description": "The permission type for this user. While new values may be added in future, the following are currently possible:  \n- file \n- member"
-       },
-       "role": {
-        "type": "string",
-        "description": "The primary role for this user. While new values may be added in the future, the following are currently possible:  \n- organizer \n- fileOrganizer \n- writer \n- reader"
-       }
-      }
-     }
     },
-    "photoLink": {
-     "type": "string",
-     "description": "A link to the profile photo, if available."
-    },
-    "role": {
-     "type": "string",
-     "description": "The primary role for this user. While new values may be supported in the future, the following are currently allowed:  \n- owner \n- organizer \n- fileOrganizer \n- writer \n- reader",
-     "annotations": {
-      "required": [
-       "drive.permissions.insert"
-      ]
-     }
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "A link back to this permission."
-    },
-    "teamDrivePermissionDetails": {
-     "type": "array",
-     "description": "Deprecated - use permissionDetails instead.",
-     "items": {
-      "type": "object",
-      "properties": {
-       "additionalRoles": {
-        "type": "array",
-        "description": "Deprecated - use permissionDetails/additionalRoles instead.",
-        "items": {
-         "type": "string"
+    "revision": "20210207",
+    "rootUrl": "https://www.googleapis.com/",
+    "schemas": {
+        "About": {
+            "description": "An item with user information and settings.",
+            "id": "About",
+            "properties": {
+                "additionalRoleInfo": {
+                    "description": "Information about supported additional roles per file type. The most specific type takes precedence.",
+                    "items": {
+                        "properties": {
+                            "roleSets": {
+                                "description": "The supported additional roles per primary role.",
+                                "items": {
+                                    "properties": {
+                                        "additionalRoles": {
+                                            "description": "The supported additional roles with the primary role.",
+                                            "items": {
+                                                "type": "string"
+                                            },
+                                            "type": "array"
+                                        },
+                                        "primaryRole": {
+                                            "description": "A primary permission role.",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "type": "object"
+                                },
+                                "type": "array"
+                            },
+                            "type": {
+                                "description": "The content type that this additional role info applies to.",
+                                "type": "string"
+                            }
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "canCreateDrives": {
+                    "description": "Whether the user can create shared drives.",
+                    "type": "boolean"
+                },
+                "canCreateTeamDrives": {
+                    "description": "Deprecated - use canCreateDrives instead.",
+                    "type": "boolean"
+                },
+                "domainSharingPolicy": {
+                    "description": "The domain sharing policy for the current user. Possible values are:  \n- allowed \n- allowedWithWarning \n- incomingOnly \n- disallowed",
+                    "type": "string"
+                },
+                "driveThemes": {
+                    "description": "A list of themes that are supported for shared drives.",
+                    "items": {
+                        "properties": {
+                            "backgroundImageLink": {
+                                "description": "A link to this theme's background image.",
+                                "type": "string"
+                            },
+                            "colorRgb": {
+                                "description": "The color of this theme as an RGB hex string.",
+                                "type": "string"
+                            },
+                            "id": {
+                                "description": "The ID of the theme.",
+                                "type": "string"
+                            }
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "etag": {
+                    "description": "The ETag of the item.",
+                    "type": "string"
+                },
+                "exportFormats": {
+                    "description": "The allowable export formats.",
+                    "items": {
+                        "properties": {
+                            "source": {
+                                "description": "The content type to convert from.",
+                                "type": "string"
+                            },
+                            "targets": {
+                                "description": "The possible content types to convert to.",
+                                "items": {
+                                    "type": "string"
+                                },
+                                "type": "array"
+                            }
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "features": {
+                    "description": "List of additional features enabled on this account.",
+                    "items": {
+                        "properties": {
+                            "featureName": {
+                                "description": "The name of the feature.",
+                                "type": "string"
+                            },
+                            "featureRate": {
+                                "description": "The request limit rate for this feature, in queries per second.",
+                                "format": "double",
+                                "type": "number"
+                            }
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "folderColorPalette": {
+                    "description": "The palette of allowable folder colors as RGB hex strings.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "importFormats": {
+                    "description": "The allowable import formats.",
+                    "items": {
+                        "properties": {
+                            "source": {
+                                "description": "The imported file's content type to convert from.",
+                                "type": "string"
+                            },
+                            "targets": {
+                                "description": "The possible content types to convert to.",
+                                "items": {
+                                    "type": "string"
+                                },
+                                "type": "array"
+                            }
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "isCurrentAppInstalled": {
+                    "description": "A boolean indicating whether the authenticated app is installed by the authenticated user.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "default": "drive#about",
+                    "description": "This is always drive#about.",
+                    "type": "string"
+                },
+                "languageCode": {
+                    "description": "The user's language or locale code, as defined by BCP 47, with some extensions from Unicode's LDML format (http://www.unicode.org/reports/tr35/).",
+                    "type": "string"
+                },
+                "largestChangeId": {
+                    "description": "The largest change id.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "maxUploadSizes": {
+                    "description": "List of max upload sizes for each file type. The most specific type takes precedence.",
+                    "items": {
+                        "properties": {
+                            "size": {
+                                "description": "The max upload size for this type.",
+                                "format": "int64",
+                                "type": "string"
+                            },
+                            "type": {
+                                "description": "The file type.",
+                                "type": "string"
+                            }
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "name": {
+                    "description": "The name of the current user.",
+                    "type": "string"
+                },
+                "permissionId": {
+                    "description": "The current user's ID as visible in the permissions collection.",
+                    "type": "string"
+                },
+                "quotaBytesByService": {
+                    "description": "The amount of storage quota used by different Google services.",
+                    "items": {
+                        "properties": {
+                            "bytesUsed": {
+                                "description": "The storage quota bytes used by the service.",
+                                "format": "int64",
+                                "type": "string"
+                            },
+                            "serviceName": {
+                                "description": "The service's name, e.g. DRIVE, GMAIL, or PHOTOS.",
+                                "type": "string"
+                            }
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "quotaBytesTotal": {
+                    "description": "The total number of quota bytes. This is only relevant when quotaType is LIMITED.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "quotaBytesUsed": {
+                    "description": "The number of quota bytes used by Google Drive.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "quotaBytesUsedAggregate": {
+                    "description": "The number of quota bytes used by all Google apps (Drive, Picasa, etc.).",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "quotaBytesUsedInTrash": {
+                    "description": "The number of quota bytes used by trashed items.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "quotaType": {
+                    "description": "The type of the user's storage quota. Possible values are:  \n- LIMITED \n- UNLIMITED",
+                    "type": "string"
+                },
+                "remainingChangeIds": {
+                    "description": "The number of remaining change ids, limited to no more than 2500.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "rootFolderId": {
+                    "description": "The id of the root folder.",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "A link back to this item.",
+                    "type": "string"
+                },
+                "teamDriveThemes": {
+                    "description": "Deprecated - use driveThemes instead.",
+                    "items": {
+                        "properties": {
+                            "backgroundImageLink": {
+                                "description": "Deprecated - use driveThemes/backgroundImageLink instead.",
+                                "type": "string"
+                            },
+                            "colorRgb": {
+                                "description": "Deprecated - use driveThemes/colorRgb instead.",
+                                "type": "string"
+                            },
+                            "id": {
+                                "description": "Deprecated - use driveThemes/id instead.",
+                                "type": "string"
+                            }
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "user": {
+                    "$ref": "User",
+                    "description": "The authenticated user."
+                }
+            },
+            "type": "object"
+        },
+        "App": {
+            "description": "The apps resource provides a list of the apps that a user has installed, with information about each app's supported MIME types, file extensions, and other details.",
+            "id": "App",
+            "properties": {
+                "authorized": {
+                    "description": "Whether the app is authorized to access data on the user's Drive.",
+                    "type": "boolean"
+                },
+                "createInFolderTemplate": {
+                    "description": "The template url to create a new file with this app in a given folder. The template will contain {folderId} to be replaced by the folder to create the new file in.",
+                    "type": "string"
+                },
+                "createUrl": {
+                    "description": "The url to create a new file with this app.",
+                    "type": "string"
+                },
+                "hasDriveWideScope": {
+                    "description": "Whether the app has drive-wide scope. An app with drive-wide scope can access all files in the user's drive.",
+                    "type": "boolean"
+                },
+                "icons": {
+                    "description": "The various icons for the app.",
+                    "items": {
+                        "properties": {
+                            "category": {
+                                "description": "Category of the icon. Allowed values are:  \n- application - icon for the application \n- document - icon for a file associated with the app \n- documentShared - icon for a shared file associated with the app",
+                                "type": "string"
+                            },
+                            "iconUrl": {
+                                "description": "URL for the icon.",
+                                "type": "string"
+                            },
+                            "size": {
+                                "description": "Size of the icon. Represented as the maximum of the width and height.",
+                                "format": "int32",
+                                "type": "integer"
+                            }
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "id": {
+                    "description": "The ID of the app.",
+                    "type": "string"
+                },
+                "installed": {
+                    "description": "Whether the app is installed.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "default": "drive#app",
+                    "description": "This is always drive#app.",
+                    "type": "string"
+                },
+                "longDescription": {
+                    "description": "A long description of the app.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The name of the app.",
+                    "type": "string"
+                },
+                "objectType": {
+                    "description": "The type of object this app creates (e.g. Chart). If empty, the app name should be used instead.",
+                    "type": "string"
+                },
+                "openUrlTemplate": {
+                    "description": "The template url for opening files with this app. The template will contain {ids} and/or {exportIds} to be replaced by the actual file ids. See  Open Files  for the full documentation.",
+                    "type": "string"
+                },
+                "primaryFileExtensions": {
+                    "description": "The list of primary file extensions.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "primaryMimeTypes": {
+                    "description": "The list of primary mime types.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "productId": {
+                    "description": "The ID of the product listing for this app.",
+                    "type": "string"
+                },
+                "productUrl": {
+                    "description": "A link to the product listing for this app.",
+                    "type": "string"
+                },
+                "secondaryFileExtensions": {
+                    "description": "The list of secondary file extensions.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "secondaryMimeTypes": {
+                    "description": "The list of secondary mime types.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "shortDescription": {
+                    "description": "A short description of the app.",
+                    "type": "string"
+                },
+                "supportsCreate": {
+                    "description": "Whether this app supports creating new objects.",
+                    "type": "boolean"
+                },
+                "supportsImport": {
+                    "description": "Whether this app supports importing from Docs Editors.",
+                    "type": "boolean"
+                },
+                "supportsMultiOpen": {
+                    "description": "Whether this app supports opening more than one file.",
+                    "type": "boolean"
+                },
+                "supportsOfflineCreate": {
+                    "description": "Whether this app supports creating new files when offline.",
+                    "type": "boolean"
+                },
+                "useByDefault": {
+                    "description": "Whether the app is selected as the default handler for the types it supports.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "AppList": {
+            "description": "A list of third-party applications which the user has installed or given access to Google Drive.",
+            "id": "AppList",
+            "properties": {
+                "defaultAppIds": {
+                    "description": "List of app IDs that the user has specified to use by default. The list is in reverse-priority order (lowest to highest).",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "etag": {
+                    "description": "The ETag of the list.",
+                    "type": "string"
+                },
+                "items": {
+                    "description": "The list of apps.",
+                    "items": {
+                        "$ref": "App"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "default": "drive#appList",
+                    "description": "This is always drive#appList.",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "A link back to this list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Change": {
+            "description": "Representation of a change to a file or shared drive.",
+            "id": "Change",
+            "properties": {
+                "changeType": {
+                    "description": "The type of the change. Possible values are file and drive.",
+                    "type": "string"
+                },
+                "deleted": {
+                    "description": "Whether the file or shared drive has been removed from this list of changes, for example by deletion or loss of access.",
+                    "type": "boolean"
+                },
+                "drive": {
+                    "$ref": "Drive",
+                    "description": "The updated state of the shared drive. Present if the changeType is drive, the user is still a member of the shared drive, and the shared drive has not been deleted."
+                },
+                "driveId": {
+                    "description": "The ID of the shared drive associated with this change.",
+                    "type": "string"
+                },
+                "file": {
+                    "$ref": "File",
+                    "description": "The updated state of the file. Present if the type is file and the file has not been removed from this list of changes."
+                },
+                "fileId": {
+                    "description": "The ID of the file associated with this change.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "The ID of the change.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "drive#change",
+                    "description": "This is always drive#change.",
+                    "type": "string"
+                },
+                "modificationDate": {
+                    "description": "The time of this modification.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "A link back to this change.",
+                    "type": "string"
+                },
+                "teamDrive": {
+                    "$ref": "TeamDrive",
+                    "description": "Deprecated - use drive instead."
+                },
+                "teamDriveId": {
+                    "description": "Deprecated - use driveId instead.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Deprecated - use changeType instead.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ChangeList": {
+            "description": "A list of changes for a user.",
+            "id": "ChangeList",
+            "properties": {
+                "etag": {
+                    "description": "The ETag of the list.",
+                    "type": "string"
+                },
+                "items": {
+                    "description": "The list of changes. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
+                    "items": {
+                        "$ref": "Change"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "default": "drive#changeList",
+                    "description": "This is always drive#changeList.",
+                    "type": "string"
+                },
+                "largestChangeId": {
+                    "description": "The current largest change ID.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "newStartPageToken": {
+                    "description": "The starting page token for future changes. This will be present only if the end of the current changes list has been reached.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "A link to the next page of changes.",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "The page token for the next page of changes. This will be absent if the end of the changes list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results.",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "A link back to this list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Channel": {
+            "description": "An notification channel used to watch for resource changes.",
+            "id": "Channel",
+            "properties": {
+                "address": {
+                    "description": "The address where notifications are delivered for this channel.",
+                    "type": "string"
+                },
+                "expiration": {
+                    "description": "Date and time of notification channel expiration, expressed as a Unix timestamp, in milliseconds. Optional.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "A UUID or similar unique string that identifies this channel.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "api#channel",
+                    "description": "Identifies this as a notification channel used to watch for changes to a resource, which is \"api#channel\".",
+                    "type": "string"
+                },
+                "params": {
+                    "additionalProperties": {
+                        "description": "Declares a new parameter by name.",
+                        "type": "string"
+                    },
+                    "description": "Additional parameters controlling delivery channel behavior. Optional.",
+                    "type": "object"
+                },
+                "payload": {
+                    "description": "A Boolean value to indicate whether payload is wanted. Optional.",
+                    "type": "boolean"
+                },
+                "resourceId": {
+                    "description": "An opaque ID that identifies the resource being watched on this channel. Stable across different API versions.",
+                    "type": "string"
+                },
+                "resourceUri": {
+                    "description": "A version-specific identifier for the watched resource.",
+                    "type": "string"
+                },
+                "token": {
+                    "description": "An arbitrary string delivered to the target address with each notification delivered over this channel. Optional.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "The type of delivery mechanism used for this channel.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ChildList": {
+            "description": "A list of children of a file.",
+            "id": "ChildList",
+            "properties": {
+                "etag": {
+                    "description": "The ETag of the list.",
+                    "type": "string"
+                },
+                "items": {
+                    "description": "The list of children. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
+                    "items": {
+                        "$ref": "ChildReference"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "default": "drive#childList",
+                    "description": "This is always drive#childList.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "A link to the next page of children.",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "The page token for the next page of children. This will be absent if the end of the children list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results.",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "A link back to this list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ChildReference": {
+            "description": "A reference to a folder's child.",
+            "id": "ChildReference",
+            "properties": {
+                "childLink": {
+                    "description": "A link to the child.",
+                    "type": "string"
+                },
+                "id": {
+                    "annotations": {
+                        "required": [
+                            "drive.children.insert"
+                        ]
+                    },
+                    "description": "The ID of the child.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "drive#childReference",
+                    "description": "This is always drive#childReference.",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "A link back to this reference.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Comment": {
+            "description": "A comment on a file in Google Drive.",
+            "id": "Comment",
+            "properties": {
+                "anchor": {
+                    "description": "A region of the document represented as a JSON string. See anchor documentation for details on how to define and interpret anchor properties.",
+                    "type": "string"
+                },
+                "author": {
+                    "$ref": "User",
+                    "description": "The author of the comment. The author's email address and permission ID will not be populated."
+                },
+                "commentId": {
+                    "description": "The ID of the comment.",
+                    "type": "string"
+                },
+                "content": {
+                    "annotations": {
+                        "required": [
+                            "drive.comments.insert",
+                            "drive.comments.patch",
+                            "drive.comments.update"
+                        ]
+                    },
+                    "description": "The plain text content used to create this comment. This is not HTML safe and should only be used as a starting point to make edits to a comment's content.",
+                    "type": "string"
+                },
+                "context": {
+                    "description": "The context of the file which is being commented on.",
+                    "properties": {
+                        "type": {
+                            "description": "The MIME type of the context snippet.",
+                            "type": "string"
+                        },
+                        "value": {
+                            "description": "Data representation of the segment of the file being commented on. In the case of a text file for example, this would be the actual text that the comment is about.",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "createdDate": {
+                    "description": "The date when this comment was first created.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "deleted": {
+                    "description": "Whether this comment has been deleted. If a comment has been deleted the content will be cleared and this will only represent a comment that once existed.",
+                    "type": "boolean"
+                },
+                "fileId": {
+                    "description": "The file which this comment is addressing.",
+                    "type": "string"
+                },
+                "fileTitle": {
+                    "description": "The title of the file which this comment is addressing.",
+                    "type": "string"
+                },
+                "htmlContent": {
+                    "description": "HTML formatted content for this comment.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "drive#comment",
+                    "description": "This is always drive#comment.",
+                    "type": "string"
+                },
+                "modifiedDate": {
+                    "description": "The date when this comment or any of its replies were last modified.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "replies": {
+                    "description": "Replies to this post.",
+                    "items": {
+                        "$ref": "CommentReply"
+                    },
+                    "type": "array"
+                },
+                "selfLink": {
+                    "description": "A link back to this comment.",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "The status of this comment. Status can be changed by posting a reply to a comment with the desired status.  \n- \"open\" - The comment is still open. \n- \"resolved\" - The comment has been resolved by one of its replies.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CommentList": {
+            "description": "A list of comments on a file in Google Drive.",
+            "id": "CommentList",
+            "properties": {
+                "items": {
+                    "description": "The list of comments. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
+                    "items": {
+                        "$ref": "Comment"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "default": "drive#commentList",
+                    "description": "This is always drive#commentList.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "A link to the next page of comments.",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "The page token for the next page of comments. This will be absent if the end of the comments list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results.",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "A link back to this list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CommentReply": {
+            "description": "A comment on a file in Google Drive.",
+            "id": "CommentReply",
+            "properties": {
+                "author": {
+                    "$ref": "User",
+                    "description": "The author of the reply. The author's email address and permission ID will not be populated."
+                },
+                "content": {
+                    "annotations": {
+                        "required": [
+                            "drive.replies.patch",
+                            "drive.replies.update"
+                        ]
+                    },
+                    "description": "The plain text content used to create this reply. This is not HTML safe and should only be used as a starting point to make edits to a reply's content. This field is required on inserts if no verb is specified (resolve/reopen).",
+                    "type": "string"
+                },
+                "createdDate": {
+                    "description": "The date when this reply was first created.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "deleted": {
+                    "description": "Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed.",
+                    "type": "boolean"
+                },
+                "htmlContent": {
+                    "description": "HTML formatted content for this reply.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "drive#commentReply",
+                    "description": "This is always drive#commentReply.",
+                    "type": "string"
+                },
+                "modifiedDate": {
+                    "description": "The date when this reply was last modified.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "replyId": {
+                    "description": "The ID of the reply.",
+                    "type": "string"
+                },
+                "verb": {
+                    "description": "The action this reply performed to the parent comment. When creating a new reply this is the action to be perform to the parent comment. Possible values are:  \n- \"resolve\" - To resolve a comment. \n- \"reopen\" - To reopen (un-resolve) a comment.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CommentReplyList": {
+            "description": "A list of replies to a comment on a file in Google Drive.",
+            "id": "CommentReplyList",
+            "properties": {
+                "items": {
+                    "description": "The list of replies. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
+                    "items": {
+                        "$ref": "CommentReply"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "default": "drive#commentReplyList",
+                    "description": "This is always drive#commentReplyList.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "A link to the next page of replies.",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "The page token for the next page of replies. This will be absent if the end of the replies list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results.",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "A link back to this list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ContentRestriction": {
+            "description": "A restriction for accessing the content of the file.",
+            "id": "ContentRestriction",
+            "properties": {
+                "readOnly": {
+                    "description": "Whether the content of the file is read-only. If a file is read-only, a new revision of the file may not be added, comments may not be added or modified, and the title of the file may not be modified.",
+                    "type": "boolean"
+                },
+                "reason": {
+                    "description": "Reason for why the content of the file is restricted. This is only mutable on requests that also set readOnly=true.",
+                    "type": "string"
+                },
+                "restrictingUser": {
+                    "$ref": "User",
+                    "description": "The user who set the content restriction. Only populated if readOnly is true."
+                },
+                "restrictionDate": {
+                    "description": "The time at which the content restriction was set (formatted RFC 3339 timestamp). Only populated if readOnly is true.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "The type of the content restriction. Currently the only possible value is globalContentRestriction.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Drive": {
+            "description": "Representation of a shared drive.",
+            "id": "Drive",
+            "properties": {
+                "backgroundImageFile": {
+                    "description": "An image file and cropping parameters from which a background image for this shared drive is set. This is a write only field; it can only be set on drive.drives.update requests that don't set themeId. When specified, all fields of the backgroundImageFile must be set.",
+                    "properties": {
+                        "id": {
+                            "description": "The ID of an image file in Google Drive to use for the background image.",
+                            "type": "string"
+                        },
+                        "width": {
+                            "description": "The width of the cropped image in the closed range of 0 to 1. This value represents the width of the cropped image divided by the width of the entire image. The height is computed by applying a width to height aspect ratio of 80 to 9. The resulting image must be at least 1280 pixels wide and 144 pixels high.",
+                            "format": "float",
+                            "type": "number"
+                        },
+                        "xCoordinate": {
+                            "description": "The X coordinate of the upper left corner of the cropping area in the background image. This is a value in the closed range of 0 to 1. This value represents the horizontal distance from the left side of the entire image to the left side of the cropping area divided by the width of the entire image.",
+                            "format": "float",
+                            "type": "number"
+                        },
+                        "yCoordinate": {
+                            "description": "The Y coordinate of the upper left corner of the cropping area in the background image. This is a value in the closed range of 0 to 1. This value represents the vertical distance from the top side of the entire image to the top side of the cropping area divided by the height of the entire image.",
+                            "format": "float",
+                            "type": "number"
+                        }
+                    },
+                    "type": "object"
+                },
+                "backgroundImageLink": {
+                    "description": "A short-lived link to this shared drive's background image.",
+                    "type": "string"
+                },
+                "capabilities": {
+                    "description": "Capabilities the current user has on this shared drive.",
+                    "properties": {
+                        "canAddChildren": {
+                            "description": "Whether the current user can add children to folders in this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canChangeCopyRequiresWriterPermissionRestriction": {
+                            "description": "Whether the current user can change the copyRequiresWriterPermission restriction of this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canChangeDomainUsersOnlyRestriction": {
+                            "description": "Whether the current user can change the domainUsersOnly restriction of this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canChangeDriveBackground": {
+                            "description": "Whether the current user can change the background of this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canChangeDriveMembersOnlyRestriction": {
+                            "description": "Whether the current user can change the driveMembersOnly restriction of this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canComment": {
+                            "description": "Whether the current user can comment on files in this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canCopy": {
+                            "description": "Whether the current user can copy files in this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canDeleteChildren": {
+                            "description": "Whether the current user can delete children from folders in this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canDeleteDrive": {
+                            "description": "Whether the current user can delete this shared drive. Attempting to delete the shared drive may still fail if there are untrashed items inside the shared drive.",
+                            "type": "boolean"
+                        },
+                        "canDownload": {
+                            "description": "Whether the current user can download files in this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canEdit": {
+                            "description": "Whether the current user can edit files in this shared drive",
+                            "type": "boolean"
+                        },
+                        "canListChildren": {
+                            "description": "Whether the current user can list the children of folders in this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canManageMembers": {
+                            "description": "Whether the current user can add members to this shared drive or remove them or change their role.",
+                            "type": "boolean"
+                        },
+                        "canReadRevisions": {
+                            "description": "Whether the current user can read the revisions resource of files in this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canRename": {
+                            "description": "Whether the current user can rename files or folders in this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canRenameDrive": {
+                            "description": "Whether the current user can rename this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canShare": {
+                            "description": "Whether the current user can share files or folders in this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canTrashChildren": {
+                            "description": "Whether the current user can trash children from folders in this shared drive.",
+                            "type": "boolean"
+                        }
+                    },
+                    "type": "object"
+                },
+                "colorRgb": {
+                    "description": "The color of this shared drive as an RGB hex string. It can only be set on a drive.drives.update request that does not set themeId.",
+                    "type": "string"
+                },
+                "createdDate": {
+                    "description": "The time at which the shared drive was created (RFC 3339 date-time).",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "hidden": {
+                    "description": "Whether the shared drive is hidden from default view.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "The ID of this shared drive which is also the ID of the top level folder of this shared drive.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "drive#drive",
+                    "description": "This is always drive#drive",
+                    "type": "string"
+                },
+                "name": {
+                    "annotations": {
+                        "required": [
+                            "drive.drives.insert"
+                        ]
+                    },
+                    "description": "The name of this shared drive.",
+                    "type": "string"
+                },
+                "restrictions": {
+                    "description": "A set of restrictions that apply to this shared drive or items inside this shared drive.",
+                    "properties": {
+                        "adminManagedRestrictions": {
+                            "description": "Whether administrative privileges on this shared drive are required to modify restrictions.",
+                            "type": "boolean"
+                        },
+                        "copyRequiresWriterPermission": {
+                            "description": "Whether the options to copy, print, or download files inside this shared drive, should be disabled for readers and commenters. When this restriction is set to true, it will override the similarly named field to true for any file inside this shared drive.",
+                            "type": "boolean"
+                        },
+                        "domainUsersOnly": {
+                            "description": "Whether access to this shared drive and items inside this shared drive is restricted to users of the domain to which this shared drive belongs. This restriction may be overridden by other sharing policies controlled outside of this shared drive.",
+                            "type": "boolean"
+                        },
+                        "driveMembersOnly": {
+                            "description": "Whether access to items inside this shared drive is restricted to its members.",
+                            "type": "boolean"
+                        }
+                    },
+                    "type": "object"
+                },
+                "themeId": {
+                    "description": "The ID of the theme from which the background image and color will be set. The set of possible driveThemes can be retrieved from a drive.about.get response. When not specified on a drive.drives.insert request, a random theme is chosen from which the background image and color are set. This is a write-only field; it can only be set on requests that don't set colorRgb or backgroundImageFile.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DriveList": {
+            "description": "A list of shared drives.",
+            "id": "DriveList",
+            "properties": {
+                "items": {
+                    "description": "The list of shared drives. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
+                    "items": {
+                        "$ref": "Drive"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "default": "drive#driveList",
+                    "description": "This is always drive#driveList",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "The page token for the next page of shared drives. This will be absent if the end of the list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "File": {
+            "description": "The metadata for a file.",
+            "id": "File",
+            "properties": {
+                "alternateLink": {
+                    "description": "A link for opening the file in a relevant Google editor or viewer.",
+                    "type": "string"
+                },
+                "appDataContents": {
+                    "description": "Whether this file is in the Application Data folder.",
+                    "type": "boolean"
+                },
+                "canComment": {
+                    "description": "Deprecated: use capabilities/canComment.",
+                    "type": "boolean"
+                },
+                "canReadRevisions": {
+                    "description": "Deprecated: use capabilities/canReadRevisions.",
+                    "type": "boolean"
+                },
+                "capabilities": {
+                    "description": "Capabilities the current user has on this file. Each capability corresponds to a fine-grained action that a user may take.",
+                    "properties": {
+                        "canAddChildren": {
+                            "description": "Whether the current user can add children to this folder. This is always false when the item is not a folder.",
+                            "type": "boolean"
+                        },
+                        "canAddFolderFromAnotherDrive": {
+                            "description": "Whether the current user can add a folder from another drive (different shared drive or My Drive) to this folder. This is false when the item is not a folder. Only populated for items in shared drives.",
+                            "type": "boolean"
+                        },
+                        "canAddMyDriveParent": {
+                            "description": "Whether the current user can add a parent for the item without removing an existing parent in the same request. Not populated for shared drive files.",
+                            "type": "boolean"
+                        },
+                        "canChangeCopyRequiresWriterPermission": {
+                            "description": "Whether the current user can change the copyRequiresWriterPermission restriction of this file.",
+                            "type": "boolean"
+                        },
+                        "canChangeRestrictedDownload": {
+                            "description": "Deprecated",
+                            "type": "boolean"
+                        },
+                        "canComment": {
+                            "description": "Whether the current user can comment on this file.",
+                            "type": "boolean"
+                        },
+                        "canCopy": {
+                            "description": "Whether the current user can copy this file. For an item in a shared drive, whether the current user can copy non-folder descendants of this item, or this item itself if it is not a folder.",
+                            "type": "boolean"
+                        },
+                        "canDelete": {
+                            "description": "Whether the current user can delete this file.",
+                            "type": "boolean"
+                        },
+                        "canDeleteChildren": {
+                            "description": "Whether the current user can delete children of this folder. This is false when the item is not a folder. Only populated for items in shared drives.",
+                            "type": "boolean"
+                        },
+                        "canDownload": {
+                            "description": "Whether the current user can download this file.",
+                            "type": "boolean"
+                        },
+                        "canEdit": {
+                            "description": "Whether the current user can edit this file. Other factors may limit the type of changes a user can make to a file. For example, see canChangeCopyRequiresWriterPermission or canModifyContent.",
+                            "type": "boolean"
+                        },
+                        "canListChildren": {
+                            "description": "Whether the current user can list the children of this folder. This is always false when the item is not a folder.",
+                            "type": "boolean"
+                        },
+                        "canModifyContent": {
+                            "description": "Whether the current user can modify the content of this file.",
+                            "type": "boolean"
+                        },
+                        "canModifyContentRestriction": {
+                            "description": "Whether the current user can modify restrictions on content of this file.",
+                            "type": "boolean"
+                        },
+                        "canMoveChildrenOutOfDrive": {
+                            "description": "Whether the current user can move children of this folder outside of the shared drive. This is false when the item is not a folder. Only populated for items in shared drives.",
+                            "type": "boolean"
+                        },
+                        "canMoveChildrenOutOfTeamDrive": {
+                            "description": "Deprecated - use canMoveChildrenOutOfDrive instead.",
+                            "type": "boolean"
+                        },
+                        "canMoveChildrenWithinDrive": {
+                            "description": "Whether the current user can move children of this folder within this drive. This is false when the item is not a folder. Note that a request to move the child may still fail depending on the current user's access to the child and to the destination folder.",
+                            "type": "boolean"
+                        },
+                        "canMoveChildrenWithinTeamDrive": {
+                            "description": "Deprecated - use canMoveChildrenWithinDrive instead.",
+                            "type": "boolean"
+                        },
+                        "canMoveItemIntoTeamDrive": {
+                            "description": "Deprecated - use canMoveItemOutOfDrive instead.",
+                            "type": "boolean"
+                        },
+                        "canMoveItemOutOfDrive": {
+                            "description": "Whether the current user can move this item outside of this drive by changing its parent. Note that a request to change the parent of the item may still fail depending on the new parent that is being added.",
+                            "type": "boolean"
+                        },
+                        "canMoveItemOutOfTeamDrive": {
+                            "description": "Deprecated - use canMoveItemOutOfDrive instead.",
+                            "type": "boolean"
+                        },
+                        "canMoveItemWithinDrive": {
+                            "description": "Whether the current user can move this item within this drive. Note that a request to change the parent of the item may still fail depending on the new parent that is being added and the parent that is being removed.",
+                            "type": "boolean"
+                        },
+                        "canMoveItemWithinTeamDrive": {
+                            "description": "Deprecated - use canMoveItemWithinDrive instead.",
+                            "type": "boolean"
+                        },
+                        "canMoveTeamDriveItem": {
+                            "description": "Deprecated - use canMoveItemWithinDrive or canMoveItemOutOfDrive instead.",
+                            "type": "boolean"
+                        },
+                        "canReadDrive": {
+                            "description": "Whether the current user can read the shared drive to which this file belongs. Only populated for items in shared drives.",
+                            "type": "boolean"
+                        },
+                        "canReadRevisions": {
+                            "description": "Whether the current user can read the revisions resource of this file. For a shared drive item, whether revisions of non-folder descendants of this item, or this item itself if it is not a folder, can be read.",
+                            "type": "boolean"
+                        },
+                        "canReadTeamDrive": {
+                            "description": "Deprecated - use canReadDrive instead.",
+                            "type": "boolean"
+                        },
+                        "canRemoveChildren": {
+                            "description": "Whether the current user can remove children from this folder. This is always false when the item is not a folder. For a folder in a shared drive, use canDeleteChildren or canTrashChildren instead.",
+                            "type": "boolean"
+                        },
+                        "canRemoveMyDriveParent": {
+                            "description": "Whether the current user can remove a parent from the item without adding another parent in the same request. Not populated for shared drive files.",
+                            "type": "boolean"
+                        },
+                        "canRename": {
+                            "description": "Whether the current user can rename this file.",
+                            "type": "boolean"
+                        },
+                        "canShare": {
+                            "description": "Whether the current user can modify the sharing settings for this file.",
+                            "type": "boolean"
+                        },
+                        "canTrash": {
+                            "description": "Whether the current user can move this file to trash.",
+                            "type": "boolean"
+                        },
+                        "canTrashChildren": {
+                            "description": "Whether the current user can trash children of this folder. This is false when the item is not a folder. Only populated for items in shared drives.",
+                            "type": "boolean"
+                        },
+                        "canUntrash": {
+                            "description": "Whether the current user can restore this file from trash.",
+                            "type": "boolean"
+                        }
+                    },
+                    "type": "object"
+                },
+                "contentRestrictions": {
+                    "description": "Restrictions for accessing the content of the file. Only populated if such a restriction exists.",
+                    "items": {
+                        "$ref": "ContentRestriction"
+                    },
+                    "type": "array"
+                },
+                "copyRequiresWriterPermission": {
+                    "description": "Whether the options to copy, print, or download this file, should be disabled for readers and commenters.",
+                    "type": "boolean"
+                },
+                "copyable": {
+                    "description": "Deprecated: use capabilities/canCopy.",
+                    "type": "boolean"
+                },
+                "createdDate": {
+                    "description": "Create time for this file (formatted RFC 3339 timestamp).",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "defaultOpenWithLink": {
+                    "description": "A link to open this file with the user's default app for this file. Only populated when the drive.apps.readonly scope is used.",
+                    "type": "string"
+                },
+                "description": {
+                    "description": "A short description of the file.",
+                    "type": "string"
+                },
+                "downloadUrl": {
+                    "description": "Short lived download URL for the file. This field is only populated for files with content stored in Google Drive; it is not populated for Docs Editors or shortcut files.",
+                    "type": "string"
+                },
+                "driveId": {
+                    "description": "ID of the shared drive the file resides in. Only populated for items in shared drives.",
+                    "type": "string"
+                },
+                "editable": {
+                    "description": "Deprecated: use capabilities/canEdit.",
+                    "type": "boolean"
+                },
+                "embedLink": {
+                    "description": "A link for embedding the file.",
+                    "type": "string"
+                },
+                "etag": {
+                    "description": "ETag of the file.",
+                    "type": "string"
+                },
+                "explicitlyTrashed": {
+                    "description": "Whether this file has been explicitly trashed, as opposed to recursively trashed.",
+                    "type": "boolean"
+                },
+                "exportLinks": {
+                    "additionalProperties": {
+                        "description": "A mapping from export format to URL",
+                        "type": "string"
+                    },
+                    "description": "Links for exporting Docs Editors files to specific formats.",
+                    "type": "object"
+                },
+                "fileExtension": {
+                    "description": "The final component of fullFileExtension with trailing text that does not appear to be part of the extension removed. This field is only populated for files with content stored in Google Drive; it is not populated for Docs Editors or shortcut files.",
+                    "type": "string"
+                },
+                "fileSize": {
+                    "description": "The size of the file in bytes. This field is populated for files with content stored in Google Drive and for files in Docs Editors; it is not populated for shortcut files.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "folderColorRgb": {
+                    "description": "Folder color as an RGB hex string if the file is a folder. The list of supported colors is available in the folderColorPalette field of the About resource. If an unsupported color is specified, it will be changed to the closest color in the palette. Not populated for items in shared drives.",
+                    "type": "string"
+                },
+                "fullFileExtension": {
+                    "description": "The full file extension; extracted from the title. May contain multiple concatenated extensions, such as \"tar.gz\". Removing an extension from the title does not clear this field; however, changing the extension on the title does update this field. This field is only populated for files with content stored in Google Drive; it is not populated for Docs Editors or shortcut files.",
+                    "type": "string"
+                },
+                "hasAugmentedPermissions": {
+                    "description": "Whether there are permissions directly on this file. This field is only populated for items in shared drives.",
+                    "type": "boolean"
+                },
+                "hasThumbnail": {
+                    "description": "Whether this file has a thumbnail. This does not indicate whether the requesting app has access to the thumbnail. To check access, look for the presence of the thumbnailLink field.",
+                    "type": "boolean"
+                },
+                "headRevisionId": {
+                    "description": "The ID of the file's head revision. This field is only populated for files with content stored in Google Drive; it is not populated for Docs Editors or shortcut files.",
+                    "type": "string"
+                },
+                "iconLink": {
+                    "description": "A link to the file's icon.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "The ID of the file.",
+                    "type": "string"
+                },
+                "imageMediaMetadata": {
+                    "description": "Metadata about image media. This will only be present for image types, and its contents will depend on what can be parsed from the image content.",
+                    "properties": {
+                        "aperture": {
+                            "description": "The aperture used to create the photo (f-number).",
+                            "format": "float",
+                            "type": "number"
+                        },
+                        "cameraMake": {
+                            "description": "The make of the camera used to create the photo.",
+                            "type": "string"
+                        },
+                        "cameraModel": {
+                            "description": "The model of the camera used to create the photo.",
+                            "type": "string"
+                        },
+                        "colorSpace": {
+                            "description": "The color space of the photo.",
+                            "type": "string"
+                        },
+                        "date": {
+                            "description": "The date and time the photo was taken (EXIF format timestamp).",
+                            "type": "string"
+                        },
+                        "exposureBias": {
+                            "description": "The exposure bias of the photo (APEX value).",
+                            "format": "float",
+                            "type": "number"
+                        },
+                        "exposureMode": {
+                            "description": "The exposure mode used to create the photo.",
+                            "type": "string"
+                        },
+                        "exposureTime": {
+                            "description": "The length of the exposure, in seconds.",
+                            "format": "float",
+                            "type": "number"
+                        },
+                        "flashUsed": {
+                            "description": "Whether a flash was used to create the photo.",
+                            "type": "boolean"
+                        },
+                        "focalLength": {
+                            "description": "The focal length used to create the photo, in millimeters.",
+                            "format": "float",
+                            "type": "number"
+                        },
+                        "height": {
+                            "description": "The height of the image in pixels.",
+                            "format": "int32",
+                            "type": "integer"
+                        },
+                        "isoSpeed": {
+                            "description": "The ISO speed used to create the photo.",
+                            "format": "int32",
+                            "type": "integer"
+                        },
+                        "lens": {
+                            "description": "The lens used to create the photo.",
+                            "type": "string"
+                        },
+                        "location": {
+                            "description": "Geographic location information stored in the image.",
+                            "properties": {
+                                "altitude": {
+                                    "description": "The altitude stored in the image.",
+                                    "format": "double",
+                                    "type": "number"
+                                },
+                                "latitude": {
+                                    "description": "The latitude stored in the image.",
+                                    "format": "double",
+                                    "type": "number"
+                                },
+                                "longitude": {
+                                    "description": "The longitude stored in the image.",
+                                    "format": "double",
+                                    "type": "number"
+                                }
+                            },
+                            "type": "object"
+                        },
+                        "maxApertureValue": {
+                            "description": "The smallest f-number of the lens at the focal length used to create the photo (APEX value).",
+                            "format": "float",
+                            "type": "number"
+                        },
+                        "meteringMode": {
+                            "description": "The metering mode used to create the photo.",
+                            "type": "string"
+                        },
+                        "rotation": {
+                            "description": "The number of clockwise 90 degree rotations applied from the image's original orientation.",
+                            "format": "int32",
+                            "type": "integer"
+                        },
+                        "sensor": {
+                            "description": "The type of sensor used to create the photo.",
+                            "type": "string"
+                        },
+                        "subjectDistance": {
+                            "description": "The distance to the subject of the photo, in meters.",
+                            "format": "int32",
+                            "type": "integer"
+                        },
+                        "whiteBalance": {
+                            "description": "The white balance mode used to create the photo.",
+                            "type": "string"
+                        },
+                        "width": {
+                            "description": "The width of the image in pixels.",
+                            "format": "int32",
+                            "type": "integer"
+                        }
+                    },
+                    "type": "object"
+                },
+                "indexableText": {
+                    "description": "Indexable text attributes for the file (can only be written)",
+                    "properties": {
+                        "text": {
+                            "description": "The text to be indexed for this file.",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "isAppAuthorized": {
+                    "description": "Whether the file was created or opened by the requesting app.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "default": "drive#file",
+                    "description": "The type of file. This is always drive#file.",
+                    "type": "string"
+                },
+                "labels": {
+                    "description": "A group of labels for the file.",
+                    "properties": {
+                        "hidden": {
+                            "description": "Deprecated.",
+                            "type": "boolean"
+                        },
+                        "modified": {
+                            "description": "Whether the file has been modified by this user.",
+                            "type": "boolean"
+                        },
+                        "restricted": {
+                            "description": "Deprecated - use copyRequiresWriterPermission instead.",
+                            "type": "boolean"
+                        },
+                        "starred": {
+                            "description": "Whether this file is starred by the user.",
+                            "type": "boolean"
+                        },
+                        "trashed": {
+                            "description": "Whether the file has been trashed, either explicitly or from a trashed parent folder. Only the owner may trash a file. The trashed item is excluded from all files.list responses returned for any user who does not own the file. However, all users with access to the file can see the trashed item metadata in an API response. All users with access can copy, download, export, and share the file.",
+                            "type": "boolean"
+                        },
+                        "viewed": {
+                            "description": "Whether this file has been viewed by this user.",
+                            "type": "boolean"
+                        }
+                    },
+                    "type": "object"
+                },
+                "lastModifyingUser": {
+                    "$ref": "User",
+                    "description": "The last user to modify this file."
+                },
+                "lastModifyingUserName": {
+                    "description": "Name of the last user to modify this file.",
+                    "type": "string"
+                },
+                "lastViewedByMeDate": {
+                    "description": "Last time this file was viewed by the user (formatted RFC 3339 timestamp).",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "markedViewedByMeDate": {
+                    "description": "Deprecated.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "md5Checksum": {
+                    "description": "An MD5 checksum for the content of this file. This field is only populated for files with content stored in Google Drive; it is not populated for Docs Editors or shortcut files.",
+                    "type": "string"
+                },
+                "mimeType": {
+                    "description": "The MIME type of the file. This is only mutable on update when uploading new content. This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type.",
+                    "type": "string"
+                },
+                "modifiedByMeDate": {
+                    "description": "Last time this file was modified by the user (formatted RFC 3339 timestamp). Note that setting modifiedDate will also update the modifiedByMe date for the user which set the date.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "modifiedDate": {
+                    "description": "Last time this file was modified by anyone (formatted RFC 3339 timestamp). This is only mutable on update when the setModifiedDate parameter is set.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "openWithLinks": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "A map of the id of each of the user's apps to a link to open this file with that app. Only populated when the drive.apps.readonly scope is used.",
+                    "type": "object"
+                },
+                "originalFilename": {
+                    "description": "The original filename of the uploaded content if available, or else the original value of the title field. This is only available for files with binary content in Google Drive.",
+                    "type": "string"
+                },
+                "ownedByMe": {
+                    "description": "Whether the file is owned by the current user. Not populated for items in shared drives.",
+                    "type": "boolean"
+                },
+                "ownerNames": {
+                    "description": "Name(s) of the owner(s) of this file. Not populated for items in shared drives.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "owners": {
+                    "description": "The owner(s) of this file. Not populated for items in shared drives.",
+                    "items": {
+                        "$ref": "User"
+                    },
+                    "type": "array"
+                },
+                "parents": {
+                    "description": "Collection of parent folders which contain this file.\nIf not specified as part of an insert request, the file will be placed directly in the user's My Drive folder. If not specified as part of a copy request, the file will inherit any discoverable parents of the source file. Update requests can also use the addParents and removeParents parameters to modify the parents list.",
+                    "items": {
+                        "$ref": "ParentReference"
+                    },
+                    "type": "array"
+                },
+                "permissionIds": {
+                    "description": "List of permission IDs for users with access to this file.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "permissions": {
+                    "description": "The list of permissions for users with access to this file. Not populated for items in shared drives.",
+                    "items": {
+                        "$ref": "Permission"
+                    },
+                    "type": "array"
+                },
+                "properties": {
+                    "description": "The list of properties.",
+                    "items": {
+                        "$ref": "Property"
+                    },
+                    "type": "array"
+                },
+                "quotaBytesUsed": {
+                    "description": "The number of quota bytes used by this file.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "A link back to this file.",
+                    "type": "string"
+                },
+                "shareable": {
+                    "description": "Deprecated: use capabilities/canShare.",
+                    "type": "boolean"
+                },
+                "shared": {
+                    "description": "Whether the file has been shared. Not populated for items in shared drives.",
+                    "type": "boolean"
+                },
+                "sharedWithMeDate": {
+                    "description": "Time at which this file was shared with the user (formatted RFC 3339 timestamp).",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "sharingUser": {
+                    "$ref": "User",
+                    "description": "User that shared the item with the current user, if available."
+                },
+                "shortcutDetails": {
+                    "description": "Shortcut file details. Only populated for shortcut files, which have the mimeType field set to application/vnd.google-apps.shortcut.",
+                    "properties": {
+                        "targetId": {
+                            "description": "The ID of the file that this shortcut points to.",
+                            "type": "string"
+                        },
+                        "targetMimeType": {
+                            "description": "The MIME type of the file that this shortcut points to. The value of this field is a snapshot of the target's MIME type, captured when the shortcut is created.",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "spaces": {
+                    "description": "The list of spaces which contain the file. Supported values are 'drive', 'appDataFolder' and 'photos'.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "teamDriveId": {
+                    "description": "Deprecated - use driveId instead.",
+                    "type": "string"
+                },
+                "thumbnail": {
+                    "description": "A thumbnail for the file. This will only be used if a standard thumbnail cannot be generated.",
+                    "properties": {
+                        "image": {
+                            "description": "The URL-safe Base64 encoded bytes of the thumbnail image. It should conform to RFC 4648 section 5.",
+                            "format": "byte",
+                            "type": "string"
+                        },
+                        "mimeType": {
+                            "description": "The MIME type of the thumbnail.",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "thumbnailLink": {
+                    "description": "A short-lived link to the file's thumbnail. Typically lasts on the order of hours. Only populated when the requesting app can access the file's content. If the file isn't shared publicly, the URL returned in Files.thumbnailLink must be fetched using a credentialed request.",
+                    "type": "string"
+                },
+                "thumbnailVersion": {
+                    "description": "The thumbnail version for use in thumbnail cache invalidation.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "The title of this file. Note that for immutable items such as the top level folders of shared drives, My Drive root folder, and Application Data folder the title is constant.",
+                    "type": "string"
+                },
+                "trashedDate": {
+                    "description": "The time that the item was trashed (formatted RFC 3339 timestamp). Only populated for items in shared drives.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "trashingUser": {
+                    "$ref": "User",
+                    "description": "If the file has been explicitly trashed, the user who trashed it. Only populated for items in shared drives."
+                },
+                "userPermission": {
+                    "$ref": "Permission",
+                    "description": "The permissions for the authenticated user on this file."
+                },
+                "version": {
+                    "description": "A monotonically increasing version number for the file. This reflects every change made to the file on the server, even those not visible to the requesting user.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "videoMediaMetadata": {
+                    "description": "Metadata about video media. This will only be present for video types.",
+                    "properties": {
+                        "durationMillis": {
+                            "description": "The duration of the video in milliseconds.",
+                            "format": "int64",
+                            "type": "string"
+                        },
+                        "height": {
+                            "description": "The height of the video in pixels.",
+                            "format": "int32",
+                            "type": "integer"
+                        },
+                        "width": {
+                            "description": "The width of the video in pixels.",
+                            "format": "int32",
+                            "type": "integer"
+                        }
+                    },
+                    "type": "object"
+                },
+                "webContentLink": {
+                    "description": "A link for downloading the content of the file in a browser using cookie based authentication. In cases where the content is shared publicly, the content can be downloaded without any credentials.",
+                    "type": "string"
+                },
+                "webViewLink": {
+                    "description": "A link only available on public folders for viewing their static web assets (HTML, CSS, JS, etc) via Google Drive's Website Hosting.",
+                    "type": "string"
+                },
+                "writersCanShare": {
+                    "description": "Whether writers can share the document with other users. Not populated for items in shared drives.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "FileList": {
+            "description": "A list of files.",
+            "id": "FileList",
+            "properties": {
+                "etag": {
+                    "description": "The ETag of the list.",
+                    "type": "string"
+                },
+                "incompleteSearch": {
+                    "description": "Whether the search process was incomplete. If true, then some search results may be missing, since all documents were not searched. This may occur when searching multiple drives with the \"allDrives\" corpora, but all corpora could not be searched. When this happens, it is suggested that clients narrow their query by choosing a different corpus such as \"default\" or \"drive\".",
+                    "type": "boolean"
+                },
+                "items": {
+                    "description": "The list of files. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
+                    "items": {
+                        "$ref": "File"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "default": "drive#fileList",
+                    "description": "This is always drive#fileList.",
+                    "type": "string"
+                },
+                "nextLink": {
+                    "description": "A link to the next page of files.",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "The page token for the next page of files. This will be absent if the end of the files list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results.",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "A link back to this list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GeneratedIds": {
+            "description": "A list of generated IDs which can be provided in insert requests",
+            "id": "GeneratedIds",
+            "properties": {
+                "ids": {
+                    "description": "The IDs generated for the requesting user in the specified space.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "default": "drive#generatedIds",
+                    "description": "This is always drive#generatedIds",
+                    "type": "string"
+                },
+                "space": {
+                    "description": "The type of file that can be created with these IDs.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ParentList": {
+            "description": "A list of a file's parents.",
+            "id": "ParentList",
+            "properties": {
+                "etag": {
+                    "description": "The ETag of the list.",
+                    "type": "string"
+                },
+                "items": {
+                    "description": "The list of parents.",
+                    "items": {
+                        "$ref": "ParentReference"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "default": "drive#parentList",
+                    "description": "This is always drive#parentList.",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "A link back to this list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ParentReference": {
+            "description": "A reference to a file's parent.",
+            "id": "ParentReference",
+            "properties": {
+                "id": {
+                    "annotations": {
+                        "required": [
+                            "drive.parents.insert"
+                        ]
+                    },
+                    "description": "The ID of the parent.",
+                    "type": "string"
+                },
+                "isRoot": {
+                    "description": "Whether or not the parent is the root folder.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "default": "drive#parentReference",
+                    "description": "This is always drive#parentReference.",
+                    "type": "string"
+                },
+                "parentLink": {
+                    "description": "A link to the parent.",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "A link back to this reference.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Permission": {
+            "description": "A permission for a file.",
+            "id": "Permission",
+            "properties": {
+                "additionalRoles": {
+                    "description": "Additional roles for this user. Only commenter is currently allowed, though more may be supported in the future.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "authKey": {
+                    "description": "Deprecated.",
+                    "type": "string"
+                },
+                "deleted": {
+                    "description": "Whether the account associated with this permission has been deleted. This field only pertains to user and group permissions.",
+                    "type": "boolean"
+                },
+                "domain": {
+                    "description": "The domain name of the entity this permission refers to. This is an output-only field which is present when the permission type is user, group or domain.",
+                    "type": "string"
+                },
+                "emailAddress": {
+                    "description": "The email address of the user or group this permission refers to. This is an output-only field which is present when the permission type is user or group.",
+                    "type": "string"
+                },
+                "etag": {
+                    "description": "The ETag of the permission.",
+                    "type": "string"
+                },
+                "expirationDate": {
+                    "description": "The time at which this permission will expire (RFC 3339 date-time). Expiration dates have the following restrictions:  \n- They cannot be set on shared drive items \n- They can only be set on user and group permissions \n- The date must be in the future \n- The date cannot be more than a year in the future \n- The date can only be set on drive.permissions.update or drive.permissions.patch requests",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "The ID of the user this permission refers to, and identical to the permissionId in the About and Files resources. When making a drive.permissions.insert request, exactly one of the id or value fields must be specified unless the permission type is anyone, in which case both id and value are ignored.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "drive#permission",
+                    "description": "This is always drive#permission.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The name for this permission.",
+                    "type": "string"
+                },
+                "permissionDetails": {
+                    "description": "Details of whether the permissions on this shared drive item are inherited or directly on this item. This is an output-only field which is present only for shared drive items.",
+                    "items": {
+                        "properties": {
+                            "additionalRoles": {
+                                "description": "Additional roles for this user. Only commenter is currently possible, though more may be supported in the future.",
+                                "items": {
+                                    "type": "string"
+                                },
+                                "type": "array"
+                            },
+                            "inherited": {
+                                "description": "Whether this permission is inherited. This field is always populated. This is an output-only field.",
+                                "type": "boolean"
+                            },
+                            "inheritedFrom": {
+                                "description": "The ID of the item from which this permission is inherited. This is an output-only field.",
+                                "type": "string"
+                            },
+                            "permissionType": {
+                                "description": "The permission type for this user. While new values may be added in future, the following are currently possible:  \n- file \n- member",
+                                "type": "string"
+                            },
+                            "role": {
+                                "description": "The primary role for this user. While new values may be added in the future, the following are currently possible:  \n- organizer \n- fileOrganizer \n- writer \n- reader",
+                                "type": "string"
+                            }
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "photoLink": {
+                    "description": "A link to the profile photo, if available.",
+                    "type": "string"
+                },
+                "role": {
+                    "annotations": {
+                        "required": [
+                            "drive.permissions.insert"
+                        ]
+                    },
+                    "description": "The primary role for this user. While new values may be supported in the future, the following are currently allowed:  \n- owner \n- organizer \n- fileOrganizer \n- writer \n- reader",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "A link back to this permission.",
+                    "type": "string"
+                },
+                "teamDrivePermissionDetails": {
+                    "description": "Deprecated - use permissionDetails instead.",
+                    "items": {
+                        "properties": {
+                            "additionalRoles": {
+                                "description": "Deprecated - use permissionDetails/additionalRoles instead.",
+                                "items": {
+                                    "type": "string"
+                                },
+                                "type": "array"
+                            },
+                            "inherited": {
+                                "description": "Deprecated - use permissionDetails/inherited instead.",
+                                "type": "boolean"
+                            },
+                            "inheritedFrom": {
+                                "description": "Deprecated - use permissionDetails/inheritedFrom instead.",
+                                "type": "string"
+                            },
+                            "role": {
+                                "description": "Deprecated - use permissionDetails/role instead.",
+                                "type": "string"
+                            },
+                            "teamDrivePermissionType": {
+                                "description": "Deprecated - use permissionDetails/permissionType instead.",
+                                "type": "string"
+                            }
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "type": {
+                    "annotations": {
+                        "required": [
+                            "drive.permissions.insert"
+                        ]
+                    },
+                    "description": "The account type. Allowed values are:  \n- user \n- group \n- domain \n- anyone",
+                    "type": "string"
+                },
+                "value": {
+                    "description": "The email address or domain name for the entity. This is used during inserts and is not populated in responses. When making a drive.permissions.insert request, exactly one of the id or value fields must be specified unless the permission type is anyone, in which case both id and value are ignored.",
+                    "type": "string"
+                },
+                "view": {
+                    "description": "Indicates the view for this permission. Only populated for permissions that belong to a view. published is the only supported value.",
+                    "type": "string"
+                },
+                "withLink": {
+                    "description": "Whether the link is required for this permission.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "PermissionId": {
+            "description": "An ID for a user or group as seen in Permission items.",
+            "id": "PermissionId",
+            "properties": {
+                "id": {
+                    "description": "The permission ID.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "drive#permissionId",
+                    "description": "This is always drive#permissionId.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PermissionList": {
+            "description": "A list of permissions associated with a file.",
+            "id": "PermissionList",
+            "properties": {
+                "etag": {
+                    "description": "The ETag of the list.",
+                    "type": "string"
+                },
+                "items": {
+                    "description": "The list of permissions.",
+                    "items": {
+                        "$ref": "Permission"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "default": "drive#permissionList",
+                    "description": "This is always drive#permissionList.",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "The page token for the next page of permissions. This field will be absent if the end of the permissions list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results.",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "A link back to this list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Property": {
+            "description": "A key-value pair attached to a file that is either public or private to an application.\nThe following limits apply to file properties:  \n- Maximum of 100 properties total per file\n- Maximum of 30 private properties per app\n- Maximum of 30 public properties\n- Maximum of 124 bytes size limit on (key + value) string in UTF-8 encoding for a single property.",
+            "id": "Property",
+            "properties": {
+                "etag": {
+                    "description": "ETag of the property.",
+                    "type": "string"
+                },
+                "key": {
+                    "annotations": {
+                        "required": [
+                            "drive.properties.insert"
+                        ]
+                    },
+                    "description": "The key of this property.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "drive#property",
+                    "description": "This is always drive#property.",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "The link back to this property.",
+                    "type": "string"
+                },
+                "value": {
+                    "description": "The value of this property.",
+                    "type": "string"
+                },
+                "visibility": {
+                    "description": "The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE). Private properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PropertyList": {
+            "description": "A collection of properties, key-value pairs that are either public or private to an application.",
+            "id": "PropertyList",
+            "properties": {
+                "etag": {
+                    "description": "The ETag of the list.",
+                    "type": "string"
+                },
+                "items": {
+                    "description": "The list of properties.",
+                    "items": {
+                        "$ref": "Property"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "default": "drive#propertyList",
+                    "description": "This is always drive#propertyList.",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "The link back to this list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Revision": {
+            "description": "A revision of a file.",
+            "id": "Revision",
+            "properties": {
+                "downloadUrl": {
+                    "type": "string"
+                },
+                "etag": {
+                    "description": "The ETag of the revision.",
+                    "type": "string"
+                },
+                "exportLinks": {
+                    "additionalProperties": {
+                        "description": "A mapping from export format to URL",
+                        "type": "string"
+                    },
+                    "description": "Links for exporting Docs Editors files to specific formats.",
+                    "type": "object"
+                },
+                "fileSize": {
+                    "description": "The size of the revision in bytes. This will only be populated on files with content stored in Drive.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "The ID of the revision.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "drive#revision",
+                    "description": "This is always drive#revision.",
+                    "type": "string"
+                },
+                "lastModifyingUser": {
+                    "$ref": "User",
+                    "description": "The last user to modify this revision."
+                },
+                "lastModifyingUserName": {
+                    "description": "Name of the last user to modify this revision.",
+                    "type": "string"
+                },
+                "md5Checksum": {
+                    "description": "An MD5 checksum for the content of this revision. This will only be populated on files with content stored in Drive.",
+                    "type": "string"
+                },
+                "mimeType": {
+                    "description": "The MIME type of the revision.",
+                    "type": "string"
+                },
+                "modifiedDate": {
+                    "description": "Last time this revision was modified (formatted RFC 3339 timestamp).",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "originalFilename": {
+                    "description": "The original filename when this revision was created. This will only be populated on files with content stored in Drive.",
+                    "type": "string"
+                },
+                "pinned": {
+                    "description": "Whether this revision is pinned to prevent automatic purging. This will only be populated and can only be modified on files with content stored in Drive, excluding Docs Editors files. Revisions can also be pinned when they are created through the drive.files.insert/update/copy by using the pinned query parameter. Pinned revisions are stored indefinitely using additional storage quota, up to a maximum of 200 revisions.",
+                    "type": "boolean"
+                },
+                "publishAuto": {
+                    "description": "Whether subsequent revisions will be automatically republished. This is only populated and can only be modified for Docs Editors files.",
+                    "type": "boolean"
+                },
+                "published": {
+                    "description": "Whether this revision is published. This is only populated and can only be modified for Docs Editors files.",
+                    "type": "boolean"
+                },
+                "publishedLink": {
+                    "description": "A link to the published revision. This is only populated for Google Sites files.",
+                    "type": "string"
+                },
+                "publishedOutsideDomain": {
+                    "description": "Whether this revision is published outside the domain. This is only populated and can only be modified for Docs Editors files.",
+                    "type": "boolean"
+                },
+                "selfLink": {
+                    "description": "A link back to this revision.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RevisionList": {
+            "description": "A list of revisions of a file.",
+            "id": "RevisionList",
+            "properties": {
+                "etag": {
+                    "description": "The ETag of the list.",
+                    "type": "string"
+                },
+                "items": {
+                    "description": "The list of revisions. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
+                    "items": {
+                        "$ref": "Revision"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "default": "drive#revisionList",
+                    "description": "This is always drive#revisionList.",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "The page token for the next page of revisions. This field will be absent if the end of the revisions list has been reached. If the token is rejected for any reason, it should be discarded and pagination should be restarted from the first page of results.",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "A link back to this list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "StartPageToken": {
+            "id": "StartPageToken",
+            "properties": {
+                "kind": {
+                    "default": "drive#startPageToken",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#startPageToken\".",
+                    "type": "string"
+                },
+                "startPageToken": {
+                    "description": "The starting page token for listing changes.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TeamDrive": {
+            "description": "Deprecated: use the drive collection instead.",
+            "id": "TeamDrive",
+            "properties": {
+                "backgroundImageFile": {
+                    "description": "An image file and cropping parameters from which a background image for this Team Drive is set. This is a write only field; it can only be set on drive.teamdrives.update requests that don't set themeId. When specified, all fields of the backgroundImageFile must be set.",
+                    "properties": {
+                        "id": {
+                            "description": "The ID of an image file in Drive to use for the background image.",
+                            "type": "string"
+                        },
+                        "width": {
+                            "description": "The width of the cropped image in the closed range of 0 to 1. This value represents the width of the cropped image divided by the width of the entire image. The height is computed by applying a width to height aspect ratio of 80 to 9. The resulting image must be at least 1280 pixels wide and 144 pixels high.",
+                            "format": "float",
+                            "type": "number"
+                        },
+                        "xCoordinate": {
+                            "description": "The X coordinate of the upper left corner of the cropping area in the background image. This is a value in the closed range of 0 to 1. This value represents the horizontal distance from the left side of the entire image to the left side of the cropping area divided by the width of the entire image.",
+                            "format": "float",
+                            "type": "number"
+                        },
+                        "yCoordinate": {
+                            "description": "The Y coordinate of the upper left corner of the cropping area in the background image. This is a value in the closed range of 0 to 1. This value represents the vertical distance from the top side of the entire image to the top side of the cropping area divided by the height of the entire image.",
+                            "format": "float",
+                            "type": "number"
+                        }
+                    },
+                    "type": "object"
+                },
+                "backgroundImageLink": {
+                    "description": "A short-lived link to this Team Drive's background image.",
+                    "type": "string"
+                },
+                "capabilities": {
+                    "description": "Capabilities the current user has on this Team Drive.",
+                    "properties": {
+                        "canAddChildren": {
+                            "description": "Whether the current user can add children to folders in this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canChangeCopyRequiresWriterPermissionRestriction": {
+                            "description": "Whether the current user can change the copyRequiresWriterPermission restriction of this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canChangeDomainUsersOnlyRestriction": {
+                            "description": "Whether the current user can change the domainUsersOnly restriction of this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canChangeTeamDriveBackground": {
+                            "description": "Whether the current user can change the background of this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canChangeTeamMembersOnlyRestriction": {
+                            "description": "Whether the current user can change the teamMembersOnly restriction of this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canComment": {
+                            "description": "Whether the current user can comment on files in this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canCopy": {
+                            "description": "Whether the current user can copy files in this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canDeleteChildren": {
+                            "description": "Whether the current user can delete children from folders in this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canDeleteTeamDrive": {
+                            "description": "Whether the current user can delete this Team Drive. Attempting to delete the Team Drive may still fail if there are untrashed items inside the Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canDownload": {
+                            "description": "Whether the current user can download files in this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canEdit": {
+                            "description": "Whether the current user can edit files in this Team Drive",
+                            "type": "boolean"
+                        },
+                        "canListChildren": {
+                            "description": "Whether the current user can list the children of folders in this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canManageMembers": {
+                            "description": "Whether the current user can add members to this Team Drive or remove them or change their role.",
+                            "type": "boolean"
+                        },
+                        "canReadRevisions": {
+                            "description": "Whether the current user can read the revisions resource of files in this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canRemoveChildren": {
+                            "description": "Deprecated - use canDeleteChildren or canTrashChildren instead.",
+                            "type": "boolean"
+                        },
+                        "canRename": {
+                            "description": "Whether the current user can rename files or folders in this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canRenameTeamDrive": {
+                            "description": "Whether the current user can rename this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canShare": {
+                            "description": "Whether the current user can share files or folders in this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canTrashChildren": {
+                            "description": "Whether the current user can trash children from folders in this Team Drive.",
+                            "type": "boolean"
+                        }
+                    },
+                    "type": "object"
+                },
+                "colorRgb": {
+                    "description": "The color of this Team Drive as an RGB hex string. It can only be set on a drive.teamdrives.update request that does not set themeId.",
+                    "type": "string"
+                },
+                "createdDate": {
+                    "description": "The time at which the Team Drive was created (RFC 3339 date-time).",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "The ID of this Team Drive which is also the ID of the top level folder of this Team Drive.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "drive#teamDrive",
+                    "description": "This is always drive#teamDrive",
+                    "type": "string"
+                },
+                "name": {
+                    "annotations": {
+                        "required": [
+                            "drive.teamdrives.insert"
+                        ]
+                    },
+                    "description": "The name of this Team Drive.",
+                    "type": "string"
+                },
+                "restrictions": {
+                    "description": "A set of restrictions that apply to this Team Drive or items inside this Team Drive.",
+                    "properties": {
+                        "adminManagedRestrictions": {
+                            "description": "Whether administrative privileges on this Team Drive are required to modify restrictions.",
+                            "type": "boolean"
+                        },
+                        "copyRequiresWriterPermission": {
+                            "description": "Whether the options to copy, print, or download files inside this Team Drive, should be disabled for readers and commenters. When this restriction is set to true, it will override the similarly named field to true for any file inside this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "domainUsersOnly": {
+                            "description": "Whether access to this Team Drive and items inside this Team Drive is restricted to users of the domain to which this Team Drive belongs. This restriction may be overridden by other sharing policies controlled outside of this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "teamMembersOnly": {
+                            "description": "Whether access to items inside this Team Drive is restricted to members of this Team Drive.",
+                            "type": "boolean"
+                        }
+                    },
+                    "type": "object"
+                },
+                "themeId": {
+                    "description": "The ID of the theme from which the background image and color will be set. The set of possible teamDriveThemes can be retrieved from a drive.about.get response. When not specified on a drive.teamdrives.insert request, a random theme is chosen from which the background image and color are set. This is a write-only field; it can only be set on requests that don't set colorRgb or backgroundImageFile.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TeamDriveList": {
+            "description": "A list of Team Drives.",
+            "id": "TeamDriveList",
+            "properties": {
+                "items": {
+                    "description": "The list of Team Drives.",
+                    "items": {
+                        "$ref": "TeamDrive"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "default": "drive#teamDriveList",
+                    "description": "This is always drive#teamDriveList",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "The page token for the next page of Team Drives.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "User": {
+            "description": "Information about a Drive user.",
+            "id": "User",
+            "properties": {
+                "displayName": {
+                    "description": "A plain text displayable name for this user.",
+                    "type": "string"
+                },
+                "emailAddress": {
+                    "description": "The email address of the user.",
+                    "type": "string"
+                },
+                "isAuthenticatedUser": {
+                    "description": "Whether this user is the same as the authenticated user for whom the request was made.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "default": "drive#user",
+                    "description": "This is always drive#user.",
+                    "type": "string"
+                },
+                "permissionId": {
+                    "description": "The user's ID as visible in the permissions collection.",
+                    "type": "string"
+                },
+                "picture": {
+                    "description": "The user's profile picture.",
+                    "properties": {
+                        "url": {
+                            "description": "A URL that points to a profile picture of this user.",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                }
+            },
+            "type": "object"
         }
-       },
-       "inherited": {
-        "type": "boolean",
-        "description": "Deprecated - use permissionDetails/inherited instead."
-       },
-       "inheritedFrom": {
-        "type": "string",
-        "description": "Deprecated - use permissionDetails/inheritedFrom instead."
-       },
-       "role": {
-        "type": "string",
-        "description": "Deprecated - use permissionDetails/role instead."
-       },
-       "teamDrivePermissionType": {
-        "type": "string",
-        "description": "Deprecated - use permissionDetails/permissionType instead."
-       }
-      }
-     }
     },
-    "type": {
-     "type": "string",
-     "description": "The account type. Allowed values are:  \n- user \n- group \n- domain \n- anyone",
-     "annotations": {
-      "required": [
-       "drive.permissions.insert"
-      ]
-     }
-    },
-    "value": {
-     "type": "string",
-     "description": "The email address or domain name for the entity. This is used during inserts and is not populated in responses. When making a drive.permissions.insert request, exactly one of the id or value fields must be specified unless the permission type is anyone, in which case both id and value are ignored."
-    },
-    "view": {
-     "type": "string",
-     "description": "Indicates the view for this permission. Only populated for permissions that belong to a view. published is the only supported value."
-    },
-    "withLink": {
-     "type": "boolean",
-     "description": "Whether the link is required for this permission."
-    }
-   }
-  },
-  "PermissionId": {
-   "id": "PermissionId",
-   "type": "object",
-   "description": "An ID for a user or group as seen in Permission items.",
-   "properties": {
-    "id": {
-     "type": "string",
-     "description": "The permission ID."
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#permissionId.",
-     "default": "drive#permissionId"
-    }
-   }
-  },
-  "PermissionList": {
-   "id": "PermissionList",
-   "type": "object",
-   "description": "A list of permissions associated with a file.",
-   "properties": {
-    "etag": {
-     "type": "string",
-     "description": "The ETag of the list."
-    },
-    "items": {
-     "type": "array",
-     "description": "The list of permissions.",
-     "items": {
-      "$ref": "Permission"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#permissionList.",
-     "default": "drive#permissionList"
-    },
-    "nextPageToken": {
-     "type": "string",
-     "description": "The page token for the next page of permissions. This field will be absent if the end of the permissions list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results."
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "A link back to this list."
-    }
-   }
-  },
-  "Property": {
-   "id": "Property",
-   "type": "object",
-   "description": "A key-value pair attached to a file that is either public or private to an application.\nThe following limits apply to file properties:  \n- Maximum of 100 properties total per file\n- Maximum of 30 private properties per app\n- Maximum of 30 public properties\n- Maximum of 124 bytes size limit on (key + value) string in UTF-8 encoding for a single property.",
-   "properties": {
-    "etag": {
-     "type": "string",
-     "description": "ETag of the property."
-    },
-    "key": {
-     "type": "string",
-     "description": "The key of this property.",
-     "annotations": {
-      "required": [
-       "drive.properties.insert"
-      ]
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#property.",
-     "default": "drive#property"
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "The link back to this property."
-    },
-    "value": {
-     "type": "string",
-     "description": "The value of this property."
-    },
-    "visibility": {
-     "type": "string",
-     "description": "The visibility of this property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)"
-    }
-   }
-  },
-  "PropertyList": {
-   "id": "PropertyList",
-   "type": "object",
-   "description": "A collection of properties, key-value pairs that are either public or private to an application.",
-   "properties": {
-    "etag": {
-     "type": "string",
-     "description": "The ETag of the list."
-    },
-    "items": {
-     "type": "array",
-     "description": "The list of properties.",
-     "items": {
-      "$ref": "Property"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#propertyList.",
-     "default": "drive#propertyList"
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "The link back to this list."
-    }
-   }
-  },
-  "Revision": {
-   "id": "Revision",
-   "type": "object",
-   "description": "A revision of a file.",
-   "properties": {
-    "downloadUrl": {
-     "type": "string"
-    },
-    "etag": {
-     "type": "string",
-     "description": "The ETag of the revision."
-    },
-    "exportLinks": {
-     "type": "object",
-     "description": "Links for exporting Docs Editors files to specific formats.",
-     "additionalProperties": {
-      "type": "string",
-      "description": "A mapping from export format to URL"
-     }
-    },
-    "fileSize": {
-     "type": "string",
-     "description": "The size of the revision in bytes. This will only be populated on files with content stored in Drive.",
-     "format": "int64"
-    },
-    "id": {
-     "type": "string",
-     "description": "The ID of the revision."
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#revision.",
-     "default": "drive#revision"
-    },
-    "lastModifyingUser": {
-     "$ref": "User",
-     "description": "The last user to modify this revision."
-    },
-    "lastModifyingUserName": {
-     "type": "string",
-     "description": "Name of the last user to modify this revision."
-    },
-    "md5Checksum": {
-     "type": "string",
-     "description": "An MD5 checksum for the content of this revision. This will only be populated on files with content stored in Drive."
-    },
-    "mimeType": {
-     "type": "string",
-     "description": "The MIME type of the revision."
-    },
-    "modifiedDate": {
-     "type": "string",
-     "description": "Last time this revision was modified (formatted RFC 3339 timestamp).",
-     "format": "date-time"
-    },
-    "originalFilename": {
-     "type": "string",
-     "description": "The original filename when this revision was created. This will only be populated on files with content stored in Drive."
-    },
-    "pinned": {
-     "type": "boolean",
-     "description": "Whether this revision is pinned to prevent automatic purging. This will only be populated and can only be modified on files with content stored in Drive, excluding Docs Editors files. Revisions can also be pinned when they are created through the drive.files.insert/update/copy by using the pinned query parameter. Pinned revisions are stored indefinitely using additional storage quota, up to a maximum of 200 revisions."
-    },
-    "publishAuto": {
-     "type": "boolean",
-     "description": "Whether subsequent revisions will be automatically republished. This is only populated and can only be modified for Docs Editors files."
-    },
-    "published": {
-     "type": "boolean",
-     "description": "Whether this revision is published. This is only populated and can only be modified for Docs Editors files."
-    },
-    "publishedLink": {
-     "type": "string",
-     "description": "A link to the published revision. This is only populated for Google Sites files."
-    },
-    "publishedOutsideDomain": {
-     "type": "boolean",
-     "description": "Whether this revision is published outside the domain. This is only populated and can only be modified for Docs Editors files."
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "A link back to this revision."
-    }
-   }
-  },
-  "RevisionList": {
-   "id": "RevisionList",
-   "type": "object",
-   "description": "A list of revisions of a file.",
-   "properties": {
-    "etag": {
-     "type": "string",
-     "description": "The ETag of the list."
-    },
-    "items": {
-     "type": "array",
-     "description": "The list of revisions. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
-     "items": {
-      "$ref": "Revision"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#revisionList.",
-     "default": "drive#revisionList"
-    },
-    "nextPageToken": {
-     "type": "string",
-     "description": "The page token for the next page of revisions. This field will be absent if the end of the revisions list has been reached. If the token is rejected for any reason, it should be discarded and pagination should be restarted from the first page of results."
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "A link back to this list."
-    }
-   }
-  },
-  "StartPageToken": {
-   "id": "StartPageToken",
-   "type": "object",
-   "properties": {
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#startPageToken\".",
-     "default": "drive#startPageToken"
-    },
-    "startPageToken": {
-     "type": "string",
-     "description": "The starting page token for listing changes."
-    }
-   }
-  },
-  "TeamDrive": {
-   "id": "TeamDrive",
-   "type": "object",
-   "description": "Deprecated: use the drive collection instead.",
-   "properties": {
-    "backgroundImageFile": {
-     "type": "object",
-     "description": "An image file and cropping parameters from which a background image for this Team Drive is set. This is a write only field; it can only be set on drive.teamdrives.update requests that don't set themeId. When specified, all fields of the backgroundImageFile must be set.",
-     "properties": {
-      "id": {
-       "type": "string",
-       "description": "The ID of an image file in Drive to use for the background image."
-      },
-      "width": {
-       "type": "number",
-       "description": "The width of the cropped image in the closed range of 0 to 1. This value represents the width of the cropped image divided by the width of the entire image. The height is computed by applying a width to height aspect ratio of 80 to 9. The resulting image must be at least 1280 pixels wide and 144 pixels high.",
-       "format": "float"
-      },
-      "xCoordinate": {
-       "type": "number",
-       "description": "The X coordinate of the upper left corner of the cropping area in the background image. This is a value in the closed range of 0 to 1. This value represents the horizontal distance from the left side of the entire image to the left side of the cropping area divided by the width of the entire image.",
-       "format": "float"
-      },
-      "yCoordinate": {
-       "type": "number",
-       "description": "The Y coordinate of the upper left corner of the cropping area in the background image. This is a value in the closed range of 0 to 1. This value represents the vertical distance from the top side of the entire image to the top side of the cropping area divided by the height of the entire image.",
-       "format": "float"
-      }
-     }
-    },
-    "backgroundImageLink": {
-     "type": "string",
-     "description": "A short-lived link to this Team Drive's background image."
-    },
-    "capabilities": {
-     "type": "object",
-     "description": "Capabilities the current user has on this Team Drive.",
-     "properties": {
-      "canAddChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can add children to folders in this Team Drive."
-      },
-      "canChangeCopyRequiresWriterPermissionRestriction": {
-       "type": "boolean",
-       "description": "Whether the current user can change the copyRequiresWriterPermission restriction of this Team Drive."
-      },
-      "canChangeDomainUsersOnlyRestriction": {
-       "type": "boolean",
-       "description": "Whether the current user can change the domainUsersOnly restriction of this Team Drive."
-      },
-      "canChangeTeamDriveBackground": {
-       "type": "boolean",
-       "description": "Whether the current user can change the background of this Team Drive."
-      },
-      "canChangeTeamMembersOnlyRestriction": {
-       "type": "boolean",
-       "description": "Whether the current user can change the teamMembersOnly restriction of this Team Drive."
-      },
-      "canComment": {
-       "type": "boolean",
-       "description": "Whether the current user can comment on files in this Team Drive."
-      },
-      "canCopy": {
-       "type": "boolean",
-       "description": "Whether the current user can copy files in this Team Drive."
-      },
-      "canDeleteChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can delete children from folders in this Team Drive."
-      },
-      "canDeleteTeamDrive": {
-       "type": "boolean",
-       "description": "Whether the current user can delete this Team Drive. Attempting to delete the Team Drive may still fail if there are untrashed items inside the Team Drive."
-      },
-      "canDownload": {
-       "type": "boolean",
-       "description": "Whether the current user can download files in this Team Drive."
-      },
-      "canEdit": {
-       "type": "boolean",
-       "description": "Whether the current user can edit files in this Team Drive"
-      },
-      "canListChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can list the children of folders in this Team Drive."
-      },
-      "canManageMembers": {
-       "type": "boolean",
-       "description": "Whether the current user can add members to this Team Drive or remove them or change their role."
-      },
-      "canReadRevisions": {
-       "type": "boolean",
-       "description": "Whether the current user can read the revisions resource of files in this Team Drive."
-      },
-      "canRemoveChildren": {
-       "type": "boolean",
-       "description": "Deprecated - use canDeleteChildren or canTrashChildren instead."
-      },
-      "canRename": {
-       "type": "boolean",
-       "description": "Whether the current user can rename files or folders in this Team Drive."
-      },
-      "canRenameTeamDrive": {
-       "type": "boolean",
-       "description": "Whether the current user can rename this Team Drive."
-      },
-      "canShare": {
-       "type": "boolean",
-       "description": "Whether the current user can share files or folders in this Team Drive."
-      },
-      "canTrashChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can trash children from folders in this Team Drive."
-      }
-     }
-    },
-    "colorRgb": {
-     "type": "string",
-     "description": "The color of this Team Drive as an RGB hex string. It can only be set on a drive.teamdrives.update request that does not set themeId."
-    },
-    "createdDate": {
-     "type": "string",
-     "description": "The time at which the Team Drive was created (RFC 3339 date-time).",
-     "format": "date-time"
-    },
-    "id": {
-     "type": "string",
-     "description": "The ID of this Team Drive which is also the ID of the top level folder of this Team Drive."
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#teamDrive",
-     "default": "drive#teamDrive"
-    },
-    "name": {
-     "type": "string",
-     "description": "The name of this Team Drive.",
-     "annotations": {
-      "required": [
-       "drive.teamdrives.insert"
-      ]
-     }
-    },
-    "restrictions": {
-     "type": "object",
-     "description": "A set of restrictions that apply to this Team Drive or items inside this Team Drive.",
-     "properties": {
-      "adminManagedRestrictions": {
-       "type": "boolean",
-       "description": "Whether administrative privileges on this Team Drive are required to modify restrictions."
-      },
-      "copyRequiresWriterPermission": {
-       "type": "boolean",
-       "description": "Whether the options to copy, print, or download files inside this Team Drive, should be disabled for readers and commenters. When this restriction is set to true, it will override the similarly named field to true for any file inside this Team Drive."
-      },
-      "domainUsersOnly": {
-       "type": "boolean",
-       "description": "Whether access to this Team Drive and items inside this Team Drive is restricted to users of the domain to which this Team Drive belongs. This restriction may be overridden by other sharing policies controlled outside of this Team Drive."
-      },
-      "teamMembersOnly": {
-       "type": "boolean",
-       "description": "Whether access to items inside this Team Drive is restricted to members of this Team Drive."
-      }
-     }
-    },
-    "themeId": {
-     "type": "string",
-     "description": "The ID of the theme from which the background image and color will be set. The set of possible teamDriveThemes can be retrieved from a drive.about.get response. When not specified on a drive.teamdrives.insert request, a random theme is chosen from which the background image and color are set. This is a write-only field; it can only be set on requests that don't set colorRgb or backgroundImageFile."
-    }
-   }
-  },
-  "TeamDriveList": {
-   "id": "TeamDriveList",
-   "type": "object",
-   "description": "A list of Team Drives.",
-   "properties": {
-    "items": {
-     "type": "array",
-     "description": "The list of Team Drives.",
-     "items": {
-      "$ref": "TeamDrive"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#teamDriveList",
-     "default": "drive#teamDriveList"
-    },
-    "nextPageToken": {
-     "type": "string",
-     "description": "The page token for the next page of Team Drives."
-    }
-   }
-  },
-  "User": {
-   "id": "User",
-   "type": "object",
-   "description": "Information about a Drive user.",
-   "properties": {
-    "displayName": {
-     "type": "string",
-     "description": "A plain text displayable name for this user."
-    },
-    "emailAddress": {
-     "type": "string",
-     "description": "The email address of the user."
-    },
-    "isAuthenticatedUser": {
-     "type": "boolean",
-     "description": "Whether this user is the same as the authenticated user for whom the request was made."
-    },
-    "kind": {
-     "type": "string",
-     "description": "This is always drive#user.",
-     "default": "drive#user"
-    },
-    "permissionId": {
-     "type": "string",
-     "description": "The user's ID as visible in the permissions collection."
-    },
-    "picture": {
-     "type": "object",
-     "description": "The user's profile picture.",
-     "properties": {
-      "url": {
-       "type": "string",
-       "description": "A URL that points to a profile picture of this user."
-      }
-     }
-    }
-   }
-  }
- },
- "resources": {
-  "about": {
-   "methods": {
-    "get": {
-     "id": "drive.about.get",
-     "path": "about",
-     "httpMethod": "GET",
-     "description": "Gets the information about the current user along with Drive API settings",
-     "parameters": {
-      "includeSubscribed": {
-       "type": "boolean",
-       "description": "Whether to count changes outside the My Drive hierarchy. When set to false, changes to files such as those in the Application Data folder or shared files which have not been added to My Drive will be omitted from the maxChangeIdCount.",
-       "default": "true",
-       "location": "query"
-      },
-      "maxChangeIdCount": {
-       "type": "string",
-       "description": "Maximum number of remaining change IDs to count",
-       "default": "1",
-       "format": "int64",
-       "location": "query"
-      },
-      "startChangeId": {
-       "type": "string",
-       "description": "Change ID to start counting from when calculating number of remaining change IDs",
-       "format": "int64",
-       "location": "query"
-      }
-     },
-     "response": {
-      "$ref": "About"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    }
-   }
-  },
-  "apps": {
-   "methods": {
-    "get": {
-     "id": "drive.apps.get",
-     "path": "apps/{appId}",
-     "httpMethod": "GET",
-     "description": "Gets a specific app.",
-     "parameters": {
-      "appId": {
-       "type": "string",
-       "description": "The ID of the app.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "appId"
-     ],
-     "response": {
-      "$ref": "App"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.apps.readonly",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "list": {
-     "id": "drive.apps.list",
-     "path": "apps",
-     "httpMethod": "GET",
-     "description": "Lists a user's installed apps.",
-     "parameters": {
-      "appFilterExtensions": {
-       "type": "string",
-       "description": "A comma-separated list of file extensions for open with filtering. All apps within the given app query scope which can open any of the given file extensions will be included in the response. If appFilterMimeTypes are provided as well, the result is a union of the two resulting app lists.",
-       "default": "",
-       "location": "query"
-      },
-      "appFilterMimeTypes": {
-       "type": "string",
-       "description": "A comma-separated list of MIME types for open with filtering. All apps within the given app query scope which can open any of the given MIME types will be included in the response. If appFilterExtensions are provided as well, the result is a union of the two resulting app lists.",
-       "default": "",
-       "location": "query"
-      },
-      "languageCode": {
-       "type": "string",
-       "description": "A language or locale code, as defined by BCP 47, with some extensions from Unicode's LDML format (http://www.unicode.org/reports/tr35/).",
-       "location": "query"
-      }
-     },
-     "response": {
-      "$ref": "AppList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive.apps.readonly"
-     ]
-    }
-   }
-  },
-  "changes": {
-   "methods": {
-    "get": {
-     "id": "drive.changes.get",
-     "path": "changes/{changeId}",
-     "httpMethod": "GET",
-     "description": "Deprecated - Use changes.getStartPageToken and changes.list to retrieve recent changes.",
-     "parameters": {
-      "changeId": {
-       "type": "string",
-       "description": "The ID of the change.",
-       "required": true,
-       "location": "path"
-      },
-      "driveId": {
-       "type": "string",
-       "description": "The shared drive from which the change is returned.",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "teamDriveId": {
-       "type": "string",
-       "description": "Deprecated use driveId instead.",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "changeId"
-     ],
-     "response": {
-      "$ref": "Change"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.apps.readonly",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "getStartPageToken": {
-     "id": "drive.changes.getStartPageToken",
-     "path": "changes/startPageToken",
-     "httpMethod": "GET",
-     "description": "Gets the starting pageToken for listing future changes.",
-     "parameters": {
-      "driveId": {
-       "type": "string",
-       "description": "The ID of the shared drive for which the starting pageToken for listing future changes from that shared drive is returned.",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "teamDriveId": {
-       "type": "string",
-       "description": "Deprecated use driveId instead.",
-       "location": "query"
-      }
-     },
-     "response": {
-      "$ref": "StartPageToken"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.apps.readonly",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "list": {
-     "id": "drive.changes.list",
-     "path": "changes",
-     "httpMethod": "GET",
-     "description": "Lists the changes for a user or shared drive.",
-     "parameters": {
-      "driveId": {
-       "type": "string",
-       "description": "The shared drive from which changes are returned. If specified the change IDs will be reflective of the shared drive; use the combined drive ID and change ID as an identifier.",
-       "location": "query"
-      },
-      "includeCorpusRemovals": {
-       "type": "boolean",
-       "description": "Whether changes should include the file resource if the file is still accessible by the user at the time of the request, even when a file was removed from the list of changes and there will be no further change entries for this file.",
-       "default": "false",
-       "location": "query"
-      },
-      "includeDeleted": {
-       "type": "boolean",
-       "description": "Whether to include changes indicating that items have been removed from the list of changes, for example by deletion or loss of access.",
-       "default": "true",
-       "location": "query"
-      },
-      "includeItemsFromAllDrives": {
-       "type": "boolean",
-       "description": "Whether both My Drive and shared drive items should be included in results.",
-       "default": "false",
-       "location": "query"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "includeSubscribed": {
-       "type": "boolean",
-       "description": "Whether to include changes outside the My Drive hierarchy in the result. When set to false, changes to files such as those in the Application Data folder or shared files which have not been added to My Drive are omitted from the result.",
-       "default": "true",
-       "location": "query"
-      },
-      "includeTeamDriveItems": {
-       "type": "boolean",
-       "description": "Deprecated use includeItemsFromAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "maxResults": {
-       "type": "integer",
-       "description": "Maximum number of changes to return.",
-       "default": "100",
-       "format": "int32",
-       "minimum": "1",
-       "location": "query"
-      },
-      "pageToken": {
-       "type": "string",
-       "description": "The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response or to the response from the getStartPageToken method.",
-       "location": "query"
-      },
-      "spaces": {
-       "type": "string",
-       "description": "A comma-separated list of spaces to query. Supported values are 'drive', 'appDataFolder' and 'photos'.",
-       "location": "query"
-      },
-      "startChangeId": {
-       "type": "string",
-       "description": "Deprecated - use pageToken instead.",
-       "format": "int64",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "teamDriveId": {
-       "type": "string",
-       "description": "Deprecated use driveId instead.",
-       "location": "query"
-      }
-     },
-     "response": {
-      "$ref": "ChangeList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.apps.readonly",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ],
-     "supportsSubscription": true
-    },
-    "watch": {
-     "id": "drive.changes.watch",
-     "path": "changes/watch",
-     "httpMethod": "POST",
-     "description": "Subscribe to changes for a user.",
-     "parameters": {
-      "driveId": {
-       "type": "string",
-       "description": "The shared drive from which changes are returned. If specified the change IDs will be reflective of the shared drive; use the combined drive ID and change ID as an identifier.",
-       "location": "query"
-      },
-      "includeCorpusRemovals": {
-       "type": "boolean",
-       "description": "Whether changes should include the file resource if the file is still accessible by the user at the time of the request, even when a file was removed from the list of changes and there will be no further change entries for this file.",
-       "default": "false",
-       "location": "query"
-      },
-      "includeDeleted": {
-       "type": "boolean",
-       "description": "Whether to include changes indicating that items have been removed from the list of changes, for example by deletion or loss of access.",
-       "default": "true",
-       "location": "query"
-      },
-      "includeItemsFromAllDrives": {
-       "type": "boolean",
-       "description": "Whether both My Drive and shared drive items should be included in results.",
-       "default": "false",
-       "location": "query"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "includeSubscribed": {
-       "type": "boolean",
-       "description": "Whether to include changes outside the My Drive hierarchy in the result. When set to false, changes to files such as those in the Application Data folder or shared files which have not been added to My Drive are omitted from the result.",
-       "default": "true",
-       "location": "query"
-      },
-      "includeTeamDriveItems": {
-       "type": "boolean",
-       "description": "Deprecated use includeItemsFromAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "maxResults": {
-       "type": "integer",
-       "description": "Maximum number of changes to return.",
-       "default": "100",
-       "format": "int32",
-       "minimum": "1",
-       "location": "query"
-      },
-      "pageToken": {
-       "type": "string",
-       "description": "The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response or to the response from the getStartPageToken method.",
-       "location": "query"
-      },
-      "spaces": {
-       "type": "string",
-       "description": "A comma-separated list of spaces to query. Supported values are 'drive', 'appDataFolder' and 'photos'.",
-       "location": "query"
-      },
-      "startChangeId": {
-       "type": "string",
-       "description": "Deprecated - use pageToken instead.",
-       "format": "int64",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "teamDriveId": {
-       "type": "string",
-       "description": "Deprecated use driveId instead.",
-       "location": "query"
-      }
-     },
-     "request": {
-      "$ref": "Channel",
-      "parameterName": "resource"
-     },
-     "response": {
-      "$ref": "Channel"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.apps.readonly",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ],
-     "supportsSubscription": true
-    }
-   }
-  },
-  "channels": {
-   "methods": {
-    "stop": {
-     "id": "drive.channels.stop",
-     "path": "channels/stop",
-     "httpMethod": "POST",
-     "description": "Stop watching resources through this channel",
-     "request": {
-      "$ref": "Channel",
-      "parameterName": "resource"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.apps.readonly",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    }
-   }
-  },
-  "children": {
-   "methods": {
-    "delete": {
-     "id": "drive.children.delete",
-     "path": "files/{folderId}/children/{childId}",
-     "httpMethod": "DELETE",
-     "description": "Removes a child from a folder.",
-     "parameters": {
-      "childId": {
-       "type": "string",
-       "description": "The ID of the child.",
-       "required": true,
-       "location": "path"
-      },
-      "enforceSingleParent": {
-       "type": "boolean",
-       "description": "Deprecated. If an item is not in a shared drive and its last parent is deleted but the item itself is not, the item will be placed under its owner's root.",
-       "default": "false",
-       "location": "query"
-      },
-      "folderId": {
-       "type": "string",
-       "description": "The ID of the folder.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "folderId",
-      "childId"
-     ],
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "get": {
-     "id": "drive.children.get",
-     "path": "files/{folderId}/children/{childId}",
-     "httpMethod": "GET",
-     "description": "Gets a specific child reference.",
-     "parameters": {
-      "childId": {
-       "type": "string",
-       "description": "The ID of the child.",
-       "required": true,
-       "location": "path"
-      },
-      "folderId": {
-       "type": "string",
-       "description": "The ID of the folder.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "folderId",
-      "childId"
-     ],
-     "response": {
-      "$ref": "ChildReference"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "insert": {
-     "id": "drive.children.insert",
-     "path": "files/{folderId}/children",
-     "httpMethod": "POST",
-     "description": "Inserts a file into a folder.",
-     "parameters": {
-      "enforceSingleParent": {
-       "type": "boolean",
-       "description": "Deprecated. Adding files to multiple folders is no longer supported. Use shortcuts instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "folderId": {
-       "type": "string",
-       "description": "The ID of the folder.",
-       "required": true,
-       "location": "path"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "folderId"
-     ],
-     "request": {
-      "$ref": "ChildReference"
-     },
-     "response": {
-      "$ref": "ChildReference"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "list": {
-     "id": "drive.children.list",
-     "path": "files/{folderId}/children",
-     "httpMethod": "GET",
-     "description": "Lists a folder's children.",
-     "parameters": {
-      "folderId": {
-       "type": "string",
-       "description": "The ID of the folder.",
-       "required": true,
-       "location": "path"
-      },
-      "maxResults": {
-       "type": "integer",
-       "description": "Maximum number of children to return.",
-       "default": "100",
-       "format": "int32",
-       "minimum": "0",
-       "location": "query"
-      },
-      "orderBy": {
-       "type": "string",
-       "description": "A comma-separated list of sort keys. Valid keys are 'createdDate', 'folder', 'lastViewedByMeDate', 'modifiedByMeDate', 'modifiedDate', 'quotaBytesUsed', 'recency', 'sharedWithMeDate', 'starred', and 'title'. Each key sorts ascending by default, but may be reversed with the 'desc' modifier. Example usage: ?orderBy=folder,modifiedDate desc,title. Please note that there is a current limitation for users with approximately one million files in which the requested sort order is ignored.",
-       "location": "query"
-      },
-      "pageToken": {
-       "type": "string",
-       "description": "Page token for children.",
-       "location": "query"
-      },
-      "q": {
-       "type": "string",
-       "description": "Query string for searching children.",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "folderId"
-     ],
-     "response": {
-      "$ref": "ChildList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    }
-   }
-  },
-  "comments": {
-   "methods": {
-    "delete": {
-     "id": "drive.comments.delete",
-     "path": "files/{fileId}/comments/{commentId}",
-     "httpMethod": "DELETE",
-     "description": "Deletes a comment.",
-     "parameters": {
-      "commentId": {
-       "type": "string",
-       "description": "The ID of the comment.",
-       "required": true,
-       "location": "path"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "commentId"
-     ],
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "get": {
-     "id": "drive.comments.get",
-     "path": "files/{fileId}/comments/{commentId}",
-     "httpMethod": "GET",
-     "description": "Gets a comment by ID.",
-     "parameters": {
-      "commentId": {
-       "type": "string",
-       "description": "The ID of the comment.",
-       "required": true,
-       "location": "path"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "includeDeleted": {
-       "type": "boolean",
-       "description": "If set, this will succeed when retrieving a deleted comment, and will include any deleted replies.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "commentId"
-     ],
-     "response": {
-      "$ref": "Comment"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "insert": {
-     "id": "drive.comments.insert",
-     "path": "files/{fileId}/comments",
-     "httpMethod": "POST",
-     "description": "Creates a new comment on the given file.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "request": {
-      "$ref": "Comment"
-     },
-     "response": {
-      "$ref": "Comment"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "list": {
-     "id": "drive.comments.list",
-     "path": "files/{fileId}/comments",
-     "httpMethod": "GET",
-     "description": "Lists a file's comments.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "includeDeleted": {
-       "type": "boolean",
-       "description": "If set, all comments and replies, including deleted comments and replies (with content stripped) will be returned.",
-       "default": "false",
-       "location": "query"
-      },
-      "maxResults": {
-       "type": "integer",
-       "description": "The maximum number of discussions to include in the response, used for paging.",
-       "default": "20",
-       "format": "int32",
-       "minimum": "0",
-       "maximum": "100",
-       "location": "query"
-      },
-      "pageToken": {
-       "type": "string",
-       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.",
-       "location": "query"
-      },
-      "updatedMin": {
-       "type": "string",
-       "description": "Only discussions that were updated after this timestamp will be returned. Formatted as an RFC 3339 timestamp.",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "response": {
-      "$ref": "CommentList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "patch": {
-     "id": "drive.comments.patch",
-     "path": "files/{fileId}/comments/{commentId}",
-     "httpMethod": "PATCH",
-     "description": "Updates an existing comment.",
-     "parameters": {
-      "commentId": {
-       "type": "string",
-       "description": "The ID of the comment.",
-       "required": true,
-       "location": "path"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "commentId"
-     ],
-     "request": {
-      "$ref": "Comment"
-     },
-     "response": {
-      "$ref": "Comment"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "update": {
-     "id": "drive.comments.update",
-     "path": "files/{fileId}/comments/{commentId}",
-     "httpMethod": "PUT",
-     "description": "Updates an existing comment.",
-     "parameters": {
-      "commentId": {
-       "type": "string",
-       "description": "The ID of the comment.",
-       "required": true,
-       "location": "path"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "commentId"
-     ],
-     "request": {
-      "$ref": "Comment"
-     },
-     "response": {
-      "$ref": "Comment"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    }
-   }
-  },
-  "drives": {
-   "methods": {
-    "delete": {
-     "id": "drive.drives.delete",
-     "path": "drives/{driveId}",
-     "httpMethod": "DELETE",
-     "description": "Permanently deletes a shared drive for which the user is an organizer. The shared drive cannot contain any untrashed items.",
-     "parameters": {
-      "driveId": {
-       "type": "string",
-       "description": "The ID of the shared drive.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "driveId"
-     ],
-     "scopes": [
-      "https://www.googleapis.com/auth/drive"
-     ]
-    },
-    "get": {
-     "id": "drive.drives.get",
-     "path": "drives/{driveId}",
-     "httpMethod": "GET",
-     "description": "Gets a shared drive's metadata by ID.",
-     "parameters": {
-      "driveId": {
-       "type": "string",
-       "description": "The ID of the shared drive.",
-       "required": true,
-       "location": "path"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the shared drive belongs.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "driveId"
-     ],
-     "response": {
-      "$ref": "Drive"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "hide": {
-     "id": "drive.drives.hide",
-     "path": "drives/{driveId}/hide",
-     "httpMethod": "POST",
-     "description": "Hides a shared drive from the default view.",
-     "parameters": {
-      "driveId": {
-       "type": "string",
-       "description": "The ID of the shared drive.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "driveId"
-     ],
-     "response": {
-      "$ref": "Drive"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive"
-     ]
-    },
-    "insert": {
-     "id": "drive.drives.insert",
-     "path": "drives",
-     "httpMethod": "POST",
-     "description": "Creates a new shared drive.",
-     "parameters": {
-      "requestId": {
-       "type": "string",
-       "description": "An ID, such as a random UUID, which uniquely identifies this user's request for idempotent creation of a shared drive. A repeated request by the same user and with the same request ID will avoid creating duplicates by attempting to create the same shared drive. If the shared drive already exists a 409 error will be returned.",
-       "required": true,
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "requestId"
-     ],
-     "request": {
-      "$ref": "Drive"
-     },
-     "response": {
-      "$ref": "Drive"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive"
-     ]
-    },
-    "list": {
-     "id": "drive.drives.list",
-     "path": "drives",
-     "httpMethod": "GET",
-     "description": "Lists the user's shared drives.",
-     "parameters": {
-      "maxResults": {
-       "type": "integer",
-       "description": "Maximum number of shared drives to return.",
-       "default": "10",
-       "format": "int32",
-       "minimum": "1",
-       "maximum": "100",
-       "location": "query"
-      },
-      "pageToken": {
-       "type": "string",
-       "description": "Page token for shared drives.",
-       "location": "query"
-      },
-      "q": {
-       "type": "string",
-       "description": "Query string for searching shared drives.",
-       "location": "query"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then all shared drives of the domain in which the requester is an administrator are returned.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "response": {
-      "$ref": "DriveList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "unhide": {
-     "id": "drive.drives.unhide",
-     "path": "drives/{driveId}/unhide",
-     "httpMethod": "POST",
-     "description": "Restores a shared drive to the default view.",
-     "parameters": {
-      "driveId": {
-       "type": "string",
-       "description": "The ID of the shared drive.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "driveId"
-     ],
-     "response": {
-      "$ref": "Drive"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive"
-     ]
-    },
-    "update": {
-     "id": "drive.drives.update",
-     "path": "drives/{driveId}",
-     "httpMethod": "PUT",
-     "description": "Updates the metadata for a shared drive.",
-     "parameters": {
-      "driveId": {
-       "type": "string",
-       "description": "The ID of the shared drive.",
-       "required": true,
-       "location": "path"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the shared drive belongs.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "driveId"
-     ],
-     "request": {
-      "$ref": "Drive"
-     },
-     "response": {
-      "$ref": "Drive"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive"
-     ]
-    }
-   }
-  },
-  "files": {
-   "methods": {
-    "copy": {
-     "id": "drive.files.copy",
-     "path": "files/{fileId}/copy",
-     "httpMethod": "POST",
-     "description": "Creates a copy of the specified file. Folders cannot be copied.",
-     "parameters": {
-      "convert": {
-       "type": "boolean",
-       "description": "Whether to convert this file to the corresponding Docs Editors format.",
-       "default": "false",
-       "location": "query"
-      },
-      "enforceSingleParent": {
-       "type": "boolean",
-       "description": "Deprecated. Copying files into multiple folders is no longer supported. Use shortcuts instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file to copy.",
-       "required": true,
-       "location": "path"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "ocr": {
-       "type": "boolean",
-       "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.",
-       "default": "false",
-       "location": "query"
-      },
-      "ocrLanguage": {
-       "type": "string",
-       "description": "If ocr is true, hints at the language to use. Valid values are BCP 47 codes.",
-       "location": "query"
-      },
-      "pinned": {
-       "type": "boolean",
-       "description": "Whether to pin the head revision of the new copy. A file can have a maximum of 200 pinned revisions.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "timedTextLanguage": {
-       "type": "string",
-       "description": "The language of the timed text.",
-       "location": "query"
-      },
-      "timedTextTrackName": {
-       "type": "string",
-       "description": "The timed text track name.",
-       "location": "query"
-      },
-      "visibility": {
-       "type": "string",
-       "description": "The visibility of the new file. This parameter is only relevant when the source is not a native Google Doc and convert=false.",
-       "default": "DEFAULT",
-       "enum": [
-        "DEFAULT",
-        "PRIVATE"
-       ],
-       "enumDescriptions": [
-        "The visibility of the new file is determined by the user's default visibility/sharing policies.",
-        "The new file will be visible to only the owner."
-       ],
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "request": {
-      "$ref": "File"
-     },
-     "response": {
-      "$ref": "File"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.apps.readonly",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.photos.readonly"
-     ]
-    },
-    "delete": {
-     "id": "drive.files.delete",
-     "path": "files/{fileId}",
-     "httpMethod": "DELETE",
-     "description": "Permanently deletes a file by ID. Skips the trash. The currently authenticated user must own the file or be an organizer on the parent for shared drive files.",
-     "parameters": {
-      "enforceSingleParent": {
-       "type": "boolean",
-       "description": "Deprecated. If an item is not in a shared drive and its last parent is deleted but the item itself is not, the item will be placed under its owner's root.",
-       "default": "false",
-       "location": "query"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file to delete.",
-       "required": true,
-       "location": "path"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "emptyTrash": {
-     "id": "drive.files.emptyTrash",
-     "path": "files/trash",
-     "httpMethod": "DELETE",
-     "description": "Permanently deletes all of the user's trashed files.",
-     "parameters": {
-      "enforceSingleParent": {
-       "type": "boolean",
-       "description": "Deprecated. If an item is not in a shared drive and its last parent is deleted but the item itself is not, the item will be placed under its owner's root.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive"
-     ]
-    },
-    "export": {
-     "id": "drive.files.export",
-     "path": "files/{fileId}/export",
-     "httpMethod": "GET",
-     "description": "Exports a Google Doc to the requested MIME type and returns the exported content. Please note that the exported content is limited to 10MB.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "mimeType": {
-       "type": "string",
-       "description": "The MIME type of the format requested for this export.",
-       "required": true,
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "mimeType"
-     ],
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ],
-     "supportsMediaDownload": true
-    },
-    "generateIds": {
-     "id": "drive.files.generateIds",
-     "path": "files/generateIds",
-     "httpMethod": "GET",
-     "description": "Generates a set of file IDs which can be provided in insert or copy requests.",
-     "parameters": {
-      "maxResults": {
-       "type": "integer",
-       "description": "Maximum number of IDs to return.",
-       "default": "10",
-       "format": "int32",
-       "minimum": "1",
-       "maximum": "1000",
-       "location": "query"
-      },
-      "space": {
-       "type": "string",
-       "description": "The space in which the IDs can be used to create new files. Supported values are 'drive' and 'appDataFolder'.",
-       "default": "drive",
-       "location": "query"
-      }
-     },
-     "response": {
-      "$ref": "GeneratedIds"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "get": {
-     "id": "drive.files.get",
-     "path": "files/{fileId}",
-     "httpMethod": "GET",
-     "description": "Gets a file's metadata by ID.",
-     "parameters": {
-      "acknowledgeAbuse": {
-       "type": "boolean",
-       "description": "Whether the user is acknowledging the risk of downloading known malware or other abusive files.",
-       "default": "false",
-       "location": "query"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID for the file in question.",
-       "required": true,
-       "location": "path"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "projection": {
-       "type": "string",
-       "description": "This parameter is deprecated and has no function.",
-       "enum": [
-        "BASIC",
-        "FULL"
-       ],
-       "enumDescriptions": [
-        "Deprecated",
-        "Deprecated"
-       ],
-       "location": "query"
-      },
-      "revisionId": {
-       "type": "string",
-       "description": "Specifies the Revision ID that should be downloaded. Ignored unless alt=media is specified.",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "updateViewedDate": {
-       "type": "boolean",
-       "description": "Deprecated: Use files.update with modifiedDateBehavior=noChange, updateViewedDate=true and an empty request body.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "response": {
-      "$ref": "File"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ],
-     "supportsMediaDownload": true,
-     "useMediaDownloadService": true,
-     "supportsSubscription": true
-    },
-    "insert": {
-     "id": "drive.files.insert",
-     "path": "files",
-     "httpMethod": "POST",
-     "description": "Insert a new file.",
-     "parameters": {
-      "convert": {
-       "type": "boolean",
-       "description": "Whether to convert this file to the corresponding Docs Editors format.",
-       "default": "false",
-       "location": "query"
-      },
-      "enforceSingleParent": {
-       "type": "boolean",
-       "description": "Deprecated. Creating files in multiple folders is no longer supported.",
-       "default": "false",
-       "location": "query"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "ocr": {
-       "type": "boolean",
-       "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.",
-       "default": "false",
-       "location": "query"
-      },
-      "ocrLanguage": {
-       "type": "string",
-       "description": "If ocr is true, hints at the language to use. Valid values are BCP 47 codes.",
-       "location": "query"
-      },
-      "pinned": {
-       "type": "boolean",
-       "description": "Whether to pin the head revision of the uploaded file. A file can have a maximum of 200 pinned revisions.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "timedTextLanguage": {
-       "type": "string",
-       "description": "The language of the timed text.",
-       "location": "query"
-      },
-      "timedTextTrackName": {
-       "type": "string",
-       "description": "The timed text track name.",
-       "location": "query"
-      },
-      "useContentAsIndexableText": {
-       "type": "boolean",
-       "description": "Whether to use the content as indexable text.",
-       "default": "false",
-       "location": "query"
-      },
-      "visibility": {
-       "type": "string",
-       "description": "The visibility of the new file. This parameter is only relevant when convert=false.",
-       "default": "DEFAULT",
-       "enum": [
-        "DEFAULT",
-        "PRIVATE"
-       ],
-       "enumDescriptions": [
-        "The visibility of the new file is determined by the user's default visibility/sharing policies.",
-        "The new file will be visible to only the owner."
-       ],
-       "location": "query"
-      }
-     },
-     "request": {
-      "$ref": "File"
-     },
-     "response": {
-      "$ref": "File"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.apps.readonly",
-      "https://www.googleapis.com/auth/drive.file"
-     ],
-     "supportsMediaUpload": true,
-     "mediaUpload": {
-      "accept": [
-       "*/*"
-      ],
-      "maxSize": "5120GB",
-      "protocols": {
-       "simple": {
-        "multipart": true,
-        "path": "/upload/drive/v2/files"
-       },
-       "resumable": {
-        "multipart": true,
-        "path": "/resumable/upload/drive/v2/files"
-       }
-      }
-     },
-     "supportsSubscription": true
-    },
-    "list": {
-     "id": "drive.files.list",
-     "path": "files",
-     "httpMethod": "GET",
-     "description": "Lists the user's files.",
-     "parameters": {
-      "corpora": {
-       "type": "string",
-       "description": "Groupings of files to which the query applies. Supported groupings are: 'user' (files created by, opened by, or shared directly with the user), 'drive' (files in the specified shared drive as indicated by the 'driveId'), 'domain' (files shared to the user's domain), and 'allDrives' (A combination of 'user' and 'drive' for all drives where the user is a member). When able, use 'user' or 'drive', instead of 'allDrives', for efficiency.",
-       "location": "query"
-      },
-      "corpus": {
-       "type": "string",
-       "description": "The body of items (files/documents) to which the query applies. Deprecated: use 'corpora' instead.",
-       "enum": [
-        "DEFAULT",
-        "DOMAIN"
-       ],
-       "enumDescriptions": [
-        "The items that the user has accessed.",
-        "Items shared to the user's domain."
-       ],
-       "location": "query"
-      },
-      "driveId": {
-       "type": "string",
-       "description": "ID of the shared drive to search.",
-       "location": "query"
-      },
-      "includeItemsFromAllDrives": {
-       "type": "boolean",
-       "description": "Whether both My Drive and shared drive items should be included in results.",
-       "default": "false",
-       "location": "query"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "includeTeamDriveItems": {
-       "type": "boolean",
-       "description": "Deprecated use includeItemsFromAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "maxResults": {
-       "type": "integer",
-       "description": "The maximum number of files to return per page. Partial or empty result pages are possible even before the end of the files list has been reached.",
-       "default": "100",
-       "format": "int32",
-       "minimum": "0",
-       "location": "query"
-      },
-      "orderBy": {
-       "type": "string",
-       "description": "A comma-separated list of sort keys. Valid keys are 'createdDate', 'folder', 'lastViewedByMeDate', 'modifiedByMeDate', 'modifiedDate', 'quotaBytesUsed', 'recency', 'sharedWithMeDate', 'starred', 'title', and 'title_natural'. Each key sorts ascending by default, but may be reversed with the 'desc' modifier. Example usage: ?orderBy=folder,modifiedDate desc,title. Please note that there is a current limitation for users with approximately one million files in which the requested sort order is ignored.",
-       "location": "query"
-      },
-      "pageToken": {
-       "type": "string",
-       "description": "Page token for files.",
-       "location": "query"
-      },
-      "projection": {
-       "type": "string",
-       "description": "This parameter is deprecated and has no function.",
-       "enum": [
-        "BASIC",
-        "FULL"
-       ],
-       "enumDescriptions": [
-        "Deprecated",
-        "Deprecated"
-       ],
-       "location": "query"
-      },
-      "q": {
-       "type": "string",
-       "description": "Query string for searching files.",
-       "location": "query"
-      },
-      "spaces": {
-       "type": "string",
-       "description": "A comma-separated list of spaces to query. Supported values are 'drive', 'appDataFolder' and 'photos'.",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "teamDriveId": {
-       "type": "string",
-       "description": "Deprecated use driveId instead.",
-       "location": "query"
-      }
-     },
-     "response": {
-      "$ref": "FileList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.apps.readonly",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "patch": {
-     "id": "drive.files.patch",
-     "path": "files/{fileId}",
-     "httpMethod": "PATCH",
-     "description": "Updates file metadata and/or content. This method supports patch semantics.",
-     "parameters": {
-      "addParents": {
-       "type": "string",
-       "description": "Comma-separated list of parent IDs to add.",
-       "location": "query"
-      },
-      "convert": {
-       "type": "boolean",
-       "description": "This parameter is deprecated and has no function.",
-       "default": "false",
-       "location": "query"
-      },
-      "enforceSingleParent": {
-       "type": "boolean",
-       "description": "Deprecated. Adding files to multiple folders is no longer supported. Use shortcuts instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file to update.",
-       "required": true,
-       "location": "path"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "modifiedDateBehavior": {
-       "type": "string",
-       "description": "Determines the behavior in which modifiedDate is updated. This overrides setModifiedDate.",
-       "enum": [
-        "fromBody",
-        "fromBodyIfNeeded",
-        "fromBodyOrNow",
-        "noChange",
-        "now",
-        "nowIfNeeded"
-       ],
-       "enumDescriptions": [
-        "Set modifiedDate to the value provided in the body of the request. No change if no value was provided.",
-        "Set modifiedDate to the value provided in the body of the request depending on other contents of the update.",
-        "Set modifiedDate to the value provided in the body of the request, or to the current time if no value was provided.",
-        "Maintain the previous value of modifiedDate.",
-        "Set modifiedDate to the current time.",
-        "Set modifiedDate to the current time depending on contents of the update."
-       ],
-       "location": "query"
-      },
-      "newRevision": {
-       "type": "boolean",
-       "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If true or not set, a new blob is created as head revision, and previous unpinned revisions are preserved for a short period of time. Pinned revisions are stored indefinitely, using additional storage quota, up to a maximum of 200 revisions. For details on how revisions are retained, see the Drive Help Center. Note that this field is ignored if there is no payload in the request.",
-       "default": "true",
-       "location": "query"
-      },
-      "ocr": {
-       "type": "boolean",
-       "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.",
-       "default": "false",
-       "location": "query"
-      },
-      "ocrLanguage": {
-       "type": "string",
-       "description": "If ocr is true, hints at the language to use. Valid values are BCP 47 codes.",
-       "location": "query"
-      },
-      "pinned": {
-       "type": "boolean",
-       "description": "Whether to pin the new revision. A file can have a maximum of 200 pinned revisions. Note that this field is ignored if there is no payload in the request.",
-       "default": "false",
-       "location": "query"
-      },
-      "removeParents": {
-       "type": "string",
-       "description": "Comma-separated list of parent IDs to remove.",
-       "location": "query"
-      },
-      "setModifiedDate": {
-       "type": "boolean",
-       "description": "Whether to set the modified date using the value supplied in the request body. Setting this field to true is equivalent to modifiedDateBehavior=fromBodyOrNow, and false is equivalent to modifiedDateBehavior=now. To prevent any changes to the modified date set modifiedDateBehavior=noChange.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "timedTextLanguage": {
-       "type": "string",
-       "description": "The language of the timed text.",
-       "location": "query"
-      },
-      "timedTextTrackName": {
-       "type": "string",
-       "description": "The timed text track name.",
-       "location": "query"
-      },
-      "updateViewedDate": {
-       "type": "boolean",
-       "description": "Whether to update the view date after successfully updating the file.",
-       "default": "true",
-       "location": "query"
-      },
-      "useContentAsIndexableText": {
-       "type": "boolean",
-       "description": "Whether to use the content as indexable text.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "request": {
-      "$ref": "File"
-     },
-     "response": {
-      "$ref": "File"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.apps.readonly",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.scripts"
-     ]
-    },
-    "touch": {
-     "id": "drive.files.touch",
-     "path": "files/{fileId}/touch",
-     "httpMethod": "POST",
-     "description": "Set the file's updated time to the current server time.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file to update.",
-       "required": true,
-       "location": "path"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "response": {
-      "$ref": "File"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.apps.readonly",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata"
-     ]
-    },
-    "trash": {
-     "id": "drive.files.trash",
-     "path": "files/{fileId}/trash",
-     "httpMethod": "POST",
-     "description": "Moves a file to the trash. The currently authenticated user must own the file or be at least a fileOrganizer on the parent for shared drive files. Only the owner may trash a file. The trashed item is excluded from all files.list responses returned for any user who does not own the file. However, all users with access to the file can see the trashed item metadata in an API response. All users with access can copy, download, export, and share the file.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file to trash.",
-       "required": true,
-       "location": "path"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "response": {
-      "$ref": "File"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.apps.readonly",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "untrash": {
-     "id": "drive.files.untrash",
-     "path": "files/{fileId}/untrash",
-     "httpMethod": "POST",
-     "description": "Restores a file from the trash. The currently authenticated user must own the file or be at least a fileOrganizer on the parent for shared drive files. Only the owner may untrash a file.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file to untrash.",
-       "required": true,
-       "location": "path"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "response": {
-      "$ref": "File"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.apps.readonly",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "update": {
-     "id": "drive.files.update",
-     "path": "files/{fileId}",
-     "httpMethod": "PUT",
-     "description": "Updates file metadata and/or content.",
-     "parameters": {
-      "addParents": {
-       "type": "string",
-       "description": "Comma-separated list of parent IDs to add.",
-       "location": "query"
-      },
-      "convert": {
-       "type": "boolean",
-       "description": "This parameter is deprecated and has no function.",
-       "default": "false",
-       "location": "query"
-      },
-      "enforceSingleParent": {
-       "type": "boolean",
-       "description": "Deprecated. Adding files to multiple folders is no longer supported. Use shortcuts instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file to update.",
-       "required": true,
-       "location": "path"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "modifiedDateBehavior": {
-       "type": "string",
-       "description": "Determines the behavior in which modifiedDate is updated. This overrides setModifiedDate.",
-       "enum": [
-        "fromBody",
-        "fromBodyIfNeeded",
-        "fromBodyOrNow",
-        "noChange",
-        "now",
-        "nowIfNeeded"
-       ],
-       "enumDescriptions": [
-        "Set modifiedDate to the value provided in the body of the request. No change if no value was provided.",
-        "Set modifiedDate to the value provided in the body of the request depending on other contents of the update.",
-        "Set modifiedDate to the value provided in the body of the request, or to the current time if no value was provided.",
-        "Maintain the previous value of modifiedDate.",
-        "Set modifiedDate to the current time.",
-        "Set modifiedDate to the current time depending on contents of the update."
-       ],
-       "location": "query"
-      },
-      "newRevision": {
-       "type": "boolean",
-       "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If true or not set, a new blob is created as head revision, and previous unpinned revisions are preserved for a short period of time. Pinned revisions are stored indefinitely, using additional storage quota, up to a maximum of 200 revisions. For details on how revisions are retained, see the Drive Help Center. Note that this field is ignored if there is no payload in the request.",
-       "default": "true",
-       "location": "query"
-      },
-      "ocr": {
-       "type": "boolean",
-       "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.",
-       "default": "false",
-       "location": "query"
-      },
-      "ocrLanguage": {
-       "type": "string",
-       "description": "If ocr is true, hints at the language to use. Valid values are BCP 47 codes.",
-       "location": "query"
-      },
-      "pinned": {
-       "type": "boolean",
-       "description": "Whether to pin the new revision. A file can have a maximum of 200 pinned revisions. Note that this field is ignored if there is no payload in the request.",
-       "default": "false",
-       "location": "query"
-      },
-      "removeParents": {
-       "type": "string",
-       "description": "Comma-separated list of parent IDs to remove.",
-       "location": "query"
-      },
-      "setModifiedDate": {
-       "type": "boolean",
-       "description": "Whether to set the modified date using the value supplied in the request body. Setting this field to true is equivalent to modifiedDateBehavior=fromBodyOrNow, and false is equivalent to modifiedDateBehavior=now. To prevent any changes to the modified date set modifiedDateBehavior=noChange.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "timedTextLanguage": {
-       "type": "string",
-       "description": "The language of the timed text.",
-       "location": "query"
-      },
-      "timedTextTrackName": {
-       "type": "string",
-       "description": "The timed text track name.",
-       "location": "query"
-      },
-      "updateViewedDate": {
-       "type": "boolean",
-       "description": "Whether to update the view date after successfully updating the file.",
-       "default": "true",
-       "location": "query"
-      },
-      "useContentAsIndexableText": {
-       "type": "boolean",
-       "description": "Whether to use the content as indexable text.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "request": {
-      "$ref": "File"
-     },
-     "response": {
-      "$ref": "File"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.apps.readonly",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.scripts"
-     ],
-     "supportsMediaUpload": true,
-     "mediaUpload": {
-      "accept": [
-       "*/*"
-      ],
-      "maxSize": "5120GB",
-      "protocols": {
-       "simple": {
-        "multipart": true,
-        "path": "/upload/drive/v2/files/{fileId}"
-       },
-       "resumable": {
-        "multipart": true,
-        "path": "/resumable/upload/drive/v2/files/{fileId}"
-       }
-      }
-     }
-    },
-    "watch": {
-     "id": "drive.files.watch",
-     "path": "files/{fileId}/watch",
-     "httpMethod": "POST",
-     "description": "Subscribe to changes on a file",
-     "parameters": {
-      "acknowledgeAbuse": {
-       "type": "boolean",
-       "description": "Whether the user is acknowledging the risk of downloading known malware or other abusive files.",
-       "default": "false",
-       "location": "query"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID for the file in question.",
-       "required": true,
-       "location": "path"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "projection": {
-       "type": "string",
-       "description": "This parameter is deprecated and has no function.",
-       "enum": [
-        "BASIC",
-        "FULL"
-       ],
-       "enumDescriptions": [
-        "Deprecated",
-        "Deprecated"
-       ],
-       "location": "query"
-      },
-      "revisionId": {
-       "type": "string",
-       "description": "Specifies the Revision ID that should be downloaded. Ignored unless alt=media is specified.",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "updateViewedDate": {
-       "type": "boolean",
-       "description": "Deprecated: Use files.update with modifiedDateBehavior=noChange, updateViewedDate=true and an empty request body.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "request": {
-      "$ref": "Channel",
-      "parameterName": "resource"
-     },
-     "response": {
-      "$ref": "Channel"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ],
-     "supportsMediaDownload": true,
-     "useMediaDownloadService": true,
-     "supportsSubscription": true
-    }
-   }
-  },
-  "parents": {
-   "methods": {
-    "delete": {
-     "id": "drive.parents.delete",
-     "path": "files/{fileId}/parents/{parentId}",
-     "httpMethod": "DELETE",
-     "description": "Removes a parent from a file.",
-     "parameters": {
-      "enforceSingleParent": {
-       "type": "boolean",
-       "description": "Deprecated. If an item is not in a shared drive and its last parent is deleted but the item itself is not, the item will be placed under its owner's root.",
-       "default": "false",
-       "location": "query"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "parentId": {
-       "type": "string",
-       "description": "The ID of the parent.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "parentId"
-     ],
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "get": {
-     "id": "drive.parents.get",
-     "path": "files/{fileId}/parents/{parentId}",
-     "httpMethod": "GET",
-     "description": "Gets a specific parent reference.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "parentId": {
-       "type": "string",
-       "description": "The ID of the parent.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "parentId"
-     ],
-     "response": {
-      "$ref": "ParentReference"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "insert": {
-     "id": "drive.parents.insert",
-     "path": "files/{fileId}/parents",
-     "httpMethod": "POST",
-     "description": "Adds a parent folder for a file.",
-     "parameters": {
-      "enforceSingleParent": {
-       "type": "boolean",
-       "description": "Deprecated. Adding files to multiple folders is no longer supported. Use shortcuts instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "request": {
-      "$ref": "ParentReference"
-     },
-     "response": {
-      "$ref": "ParentReference"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "list": {
-     "id": "drive.parents.list",
-     "path": "files/{fileId}/parents",
-     "httpMethod": "GET",
-     "description": "Lists a file's parents.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "response": {
-      "$ref": "ParentList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    }
-   }
-  },
-  "permissions": {
-   "methods": {
-    "delete": {
-     "id": "drive.permissions.delete",
-     "path": "files/{fileId}/permissions/{permissionId}",
-     "httpMethod": "DELETE",
-     "description": "Deletes a permission from a file or shared drive.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID for the file or shared drive.",
-       "required": true,
-       "location": "path"
-      },
-      "permissionId": {
-       "type": "string",
-       "description": "The ID for the permission.",
-       "required": true,
-       "location": "path"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "permissionId"
-     ],
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "get": {
-     "id": "drive.permissions.get",
-     "path": "files/{fileId}/permissions/{permissionId}",
-     "httpMethod": "GET",
-     "description": "Gets a permission by ID.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID for the file or shared drive.",
-       "required": true,
-       "location": "path"
-      },
-      "permissionId": {
-       "type": "string",
-       "description": "The ID for the permission.",
-       "required": true,
-       "location": "path"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "permissionId"
-     ],
-     "response": {
-      "$ref": "Permission"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "getIdForEmail": {
-     "id": "drive.permissions.getIdForEmail",
-     "path": "permissionIds/{email}",
-     "httpMethod": "GET",
-     "description": "Returns the permission ID for an email address.",
-     "parameters": {
-      "email": {
-       "type": "string",
-       "description": "The email address for which to return a permission ID",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "email"
-     ],
-     "response": {
-      "$ref": "PermissionId"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.apps.readonly",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "insert": {
-     "id": "drive.permissions.insert",
-     "path": "files/{fileId}/permissions",
-     "httpMethod": "POST",
-     "description": "Inserts a permission for a file or shared drive.",
-     "parameters": {
-      "emailMessage": {
-       "type": "string",
-       "description": "A plain text custom message to include in notification emails.",
-       "location": "query"
-      },
-      "enforceSingleParent": {
-       "type": "boolean",
-       "description": "Deprecated. See moveToNewOwnersRoot for details.",
-       "default": "false",
-       "location": "query"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID for the file or shared drive.",
-       "required": true,
-       "location": "path"
-      },
-      "moveToNewOwnersRoot": {
-       "type": "boolean",
-       "description": "This parameter will only take effect if the item is not in a shared drive and the request is attempting to transfer the ownership of the item. If set to true, the item will be moved to the new owner's My Drive root folder and all prior parents removed. If set to false, parents are not changed.",
-       "default": "false",
-       "location": "query"
-      },
-      "sendNotificationEmails": {
-       "type": "boolean",
-       "description": "Whether to send notification emails when sharing to users or groups. This parameter is ignored and an email is sent if the role is owner.",
-       "default": "true",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "request": {
-      "$ref": "Permission"
-     },
-     "response": {
-      "$ref": "Permission"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "list": {
-     "id": "drive.permissions.list",
-     "path": "files/{fileId}/permissions",
-     "httpMethod": "GET",
-     "description": "Lists a file's or shared drive's permissions.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID for the file or shared drive.",
-       "required": true,
-       "location": "path"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "maxResults": {
-       "type": "integer",
-       "description": "The maximum number of permissions to return per page. When not set for files in a shared drive, at most 100 results will be returned. When not set for files that are not in a shared drive, the entire list will be returned.",
-       "format": "int32",
-       "minimum": "1",
-       "maximum": "100",
-       "location": "query"
-      },
-      "pageToken": {
-       "type": "string",
-       "description": "The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response.",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "response": {
-      "$ref": "PermissionList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "patch": {
-     "id": "drive.permissions.patch",
-     "path": "files/{fileId}/permissions/{permissionId}",
-     "httpMethod": "PATCH",
-     "description": "Updates a permission using patch semantics.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID for the file or shared drive.",
-       "required": true,
-       "location": "path"
-      },
-      "permissionId": {
-       "type": "string",
-       "description": "The ID for the permission.",
-       "required": true,
-       "location": "path"
-      },
-      "removeExpiration": {
-       "type": "boolean",
-       "description": "Whether to remove the expiration date.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "transferOwnership": {
-       "type": "boolean",
-       "description": "Whether changing a role to 'owner' downgrades the current owners to writers. Does nothing if the specified role is not 'owner'.",
-       "default": "false",
-       "location": "query"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "permissionId"
-     ],
-     "request": {
-      "$ref": "Permission"
-     },
-     "response": {
-      "$ref": "Permission"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "update": {
-     "id": "drive.permissions.update",
-     "path": "files/{fileId}/permissions/{permissionId}",
-     "httpMethod": "PUT",
-     "description": "Updates a permission.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID for the file or shared drive.",
-       "required": true,
-       "location": "path"
-      },
-      "permissionId": {
-       "type": "string",
-       "description": "The ID for the permission.",
-       "required": true,
-       "location": "path"
-      },
-      "removeExpiration": {
-       "type": "boolean",
-       "description": "Whether to remove the expiration date.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "transferOwnership": {
-       "type": "boolean",
-       "description": "Whether changing a role to 'owner' downgrades the current owners to writers. Does nothing if the specified role is not 'owner'.",
-       "default": "false",
-       "location": "query"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "permissionId"
-     ],
-     "request": {
-      "$ref": "Permission"
-     },
-     "response": {
-      "$ref": "Permission"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    }
-   }
-  },
-  "properties": {
-   "methods": {
-    "delete": {
-     "id": "drive.properties.delete",
-     "path": "files/{fileId}/properties/{propertyKey}",
-     "httpMethod": "DELETE",
-     "description": "Deletes a property.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "propertyKey": {
-       "type": "string",
-       "description": "The key of the property.",
-       "required": true,
-       "location": "path"
-      },
-      "visibility": {
-       "type": "string",
-       "description": "The visibility of the property.",
-       "default": "private",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "propertyKey"
-     ],
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata"
-     ]
-    },
-    "get": {
-     "id": "drive.properties.get",
-     "path": "files/{fileId}/properties/{propertyKey}",
-     "httpMethod": "GET",
-     "description": "Gets a property by its key.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "propertyKey": {
-       "type": "string",
-       "description": "The key of the property.",
-       "required": true,
-       "location": "path"
-      },
-      "visibility": {
-       "type": "string",
-       "description": "The visibility of the property.",
-       "default": "private",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "propertyKey"
-     ],
-     "response": {
-      "$ref": "Property"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "insert": {
-     "id": "drive.properties.insert",
-     "path": "files/{fileId}/properties",
-     "httpMethod": "POST",
-     "description": "Adds a property to a file, or updates it if it already exists.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "request": {
-      "$ref": "Property"
-     },
-     "response": {
-      "$ref": "Property"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata"
-     ]
-    },
-    "list": {
-     "id": "drive.properties.list",
-     "path": "files/{fileId}/properties",
-     "httpMethod": "GET",
-     "description": "Lists a file's properties.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "response": {
-      "$ref": "PropertyList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "patch": {
-     "id": "drive.properties.patch",
-     "path": "files/{fileId}/properties/{propertyKey}",
-     "httpMethod": "PATCH",
-     "description": "Updates a property.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "propertyKey": {
-       "type": "string",
-       "description": "The key of the property.",
-       "required": true,
-       "location": "path"
-      },
-      "visibility": {
-       "type": "string",
-       "description": "The visibility of the property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)",
-       "default": "private",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "propertyKey"
-     ],
-     "request": {
-      "$ref": "Property"
-     },
-     "response": {
-      "$ref": "Property"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata"
-     ]
-    },
-    "update": {
-     "id": "drive.properties.update",
-     "path": "files/{fileId}/properties/{propertyKey}",
-     "httpMethod": "PUT",
-     "description": "Updates a property.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "propertyKey": {
-       "type": "string",
-       "description": "The key of the property.",
-       "required": true,
-       "location": "path"
-      },
-      "visibility": {
-       "type": "string",
-       "description": "The visibility of the property. Allowed values are PRIVATE and PUBLIC. (Default: PRIVATE)",
-       "default": "private",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "propertyKey"
-     ],
-     "request": {
-      "$ref": "Property"
-     },
-     "response": {
-      "$ref": "Property"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata"
-     ]
-    }
-   }
-  },
-  "replies": {
-   "methods": {
-    "delete": {
-     "id": "drive.replies.delete",
-     "path": "files/{fileId}/comments/{commentId}/replies/{replyId}",
-     "httpMethod": "DELETE",
-     "description": "Deletes a reply.",
-     "parameters": {
-      "commentId": {
-       "type": "string",
-       "description": "The ID of the comment.",
-       "required": true,
-       "location": "path"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "replyId": {
-       "type": "string",
-       "description": "The ID of the reply.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "commentId",
-      "replyId"
-     ],
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "get": {
-     "id": "drive.replies.get",
-     "path": "files/{fileId}/comments/{commentId}/replies/{replyId}",
-     "httpMethod": "GET",
-     "description": "Gets a reply.",
-     "parameters": {
-      "commentId": {
-       "type": "string",
-       "description": "The ID of the comment.",
-       "required": true,
-       "location": "path"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "includeDeleted": {
-       "type": "boolean",
-       "description": "If set, this will succeed when retrieving a deleted reply.",
-       "default": "false",
-       "location": "query"
-      },
-      "replyId": {
-       "type": "string",
-       "description": "The ID of the reply.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "commentId",
-      "replyId"
-     ],
-     "response": {
-      "$ref": "CommentReply"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "insert": {
-     "id": "drive.replies.insert",
-     "path": "files/{fileId}/comments/{commentId}/replies",
-     "httpMethod": "POST",
-     "description": "Creates a new reply to the given comment.",
-     "parameters": {
-      "commentId": {
-       "type": "string",
-       "description": "The ID of the comment.",
-       "required": true,
-       "location": "path"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "commentId"
-     ],
-     "request": {
-      "$ref": "CommentReply"
-     },
-     "response": {
-      "$ref": "CommentReply"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "list": {
-     "id": "drive.replies.list",
-     "path": "files/{fileId}/comments/{commentId}/replies",
-     "httpMethod": "GET",
-     "description": "Lists all of the replies to a comment.",
-     "parameters": {
-      "commentId": {
-       "type": "string",
-       "description": "The ID of the comment.",
-       "required": true,
-       "location": "path"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "includeDeleted": {
-       "type": "boolean",
-       "description": "If set, all replies, including deleted replies (with content stripped) will be returned.",
-       "default": "false",
-       "location": "query"
-      },
-      "maxResults": {
-       "type": "integer",
-       "description": "The maximum number of replies to include in the response, used for paging.",
-       "default": "20",
-       "format": "int32",
-       "minimum": "0",
-       "maximum": "100",
-       "location": "query"
-      },
-      "pageToken": {
-       "type": "string",
-       "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "commentId"
-     ],
-     "response": {
-      "$ref": "CommentReplyList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "patch": {
-     "id": "drive.replies.patch",
-     "path": "files/{fileId}/comments/{commentId}/replies/{replyId}",
-     "httpMethod": "PATCH",
-     "description": "Updates an existing reply.",
-     "parameters": {
-      "commentId": {
-       "type": "string",
-       "description": "The ID of the comment.",
-       "required": true,
-       "location": "path"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "replyId": {
-       "type": "string",
-       "description": "The ID of the reply.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "commentId",
-      "replyId"
-     ],
-     "request": {
-      "$ref": "CommentReply"
-     },
-     "response": {
-      "$ref": "CommentReply"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "update": {
-     "id": "drive.replies.update",
-     "path": "files/{fileId}/comments/{commentId}/replies/{replyId}",
-     "httpMethod": "PUT",
-     "description": "Updates an existing reply.",
-     "parameters": {
-      "commentId": {
-       "type": "string",
-       "description": "The ID of the comment.",
-       "required": true,
-       "location": "path"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "replyId": {
-       "type": "string",
-       "description": "The ID of the reply.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "commentId",
-      "replyId"
-     ],
-     "request": {
-      "$ref": "CommentReply"
-     },
-     "response": {
-      "$ref": "CommentReply"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    }
-   }
-  },
-  "revisions": {
-   "methods": {
-    "delete": {
-     "id": "drive.revisions.delete",
-     "path": "files/{fileId}/revisions/{revisionId}",
-     "httpMethod": "DELETE",
-     "description": "Permanently deletes a file version. You can only delete revisions for files with binary content, like images or videos. Revisions for other files, like Google Docs or Sheets, and the last remaining file version can't be deleted.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "revisionId": {
-       "type": "string",
-       "description": "The ID of the revision.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "revisionId"
-     ],
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "get": {
-     "id": "drive.revisions.get",
-     "path": "files/{fileId}/revisions/{revisionId}",
-     "httpMethod": "GET",
-     "description": "Gets a specific revision.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "revisionId": {
-       "type": "string",
-       "description": "The ID of the revision.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "revisionId"
-     ],
-     "response": {
-      "$ref": "Revision"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "list": {
-     "id": "drive.revisions.list",
-     "path": "files/{fileId}/revisions",
-     "httpMethod": "GET",
-     "description": "Lists a file's revisions.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "maxResults": {
-       "type": "integer",
-       "description": "Maximum number of revisions to return.",
-       "default": "200",
-       "format": "int32",
-       "minimum": "1",
-       "maximum": "1000",
-       "location": "query"
-      },
-      "pageToken": {
-       "type": "string",
-       "description": "Page token for revisions. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "response": {
-      "$ref": "RevisionList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "patch": {
-     "id": "drive.revisions.patch",
-     "path": "files/{fileId}/revisions/{revisionId}",
-     "httpMethod": "PATCH",
-     "description": "Updates a revision.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID for the file.",
-       "required": true,
-       "location": "path"
-      },
-      "revisionId": {
-       "type": "string",
-       "description": "The ID for the revision.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "revisionId"
-     ],
-     "request": {
-      "$ref": "Revision"
-     },
-     "response": {
-      "$ref": "Revision"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "update": {
-     "id": "drive.revisions.update",
-     "path": "files/{fileId}/revisions/{revisionId}",
-     "httpMethod": "PUT",
-     "description": "Updates a revision.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID for the file.",
-       "required": true,
-       "location": "path"
-      },
-      "revisionId": {
-       "type": "string",
-       "description": "The ID for the revision.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "revisionId"
-     ],
-     "request": {
-      "$ref": "Revision"
-     },
-     "response": {
-      "$ref": "Revision"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    }
-   }
-  },
-  "teamdrives": {
-   "methods": {
-    "delete": {
-     "id": "drive.teamdrives.delete",
-     "path": "teamdrives/{teamDriveId}",
-     "httpMethod": "DELETE",
-     "description": "Deprecated use drives.delete instead.",
-     "parameters": {
-      "teamDriveId": {
-       "type": "string",
-       "description": "The ID of the Team Drive",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "teamDriveId"
-     ],
-     "scopes": [
-      "https://www.googleapis.com/auth/drive"
-     ]
-    },
-    "get": {
-     "id": "drive.teamdrives.get",
-     "path": "teamdrives/{teamDriveId}",
-     "httpMethod": "GET",
-     "description": "Deprecated use drives.get instead.",
-     "parameters": {
-      "teamDriveId": {
-       "type": "string",
-       "description": "The ID of the Team Drive",
-       "required": true,
-       "location": "path"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the Team Drive belongs.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "teamDriveId"
-     ],
-     "response": {
-      "$ref": "TeamDrive"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "insert": {
-     "id": "drive.teamdrives.insert",
-     "path": "teamdrives",
-     "httpMethod": "POST",
-     "description": "Deprecated use drives.insert instead.",
-     "parameters": {
-      "requestId": {
-       "type": "string",
-       "description": "An ID, such as a random UUID, which uniquely identifies this user's request for idempotent creation of a Team Drive. A repeated request by the same user and with the same request ID will avoid creating duplicates by attempting to create the same Team Drive. If the Team Drive already exists a 409 error will be returned.",
-       "required": true,
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "requestId"
-     ],
-     "request": {
-      "$ref": "TeamDrive"
-     },
-     "response": {
-      "$ref": "TeamDrive"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive"
-     ]
-    },
-    "list": {
-     "id": "drive.teamdrives.list",
-     "path": "teamdrives",
-     "httpMethod": "GET",
-     "description": "Deprecated use drives.list instead.",
-     "parameters": {
-      "maxResults": {
-       "type": "integer",
-       "description": "Maximum number of Team Drives to return.",
-       "default": "10",
-       "format": "int32",
-       "minimum": "1",
-       "maximum": "100",
-       "location": "query"
-      },
-      "pageToken": {
-       "type": "string",
-       "description": "Page token for Team Drives.",
-       "location": "query"
-      },
-      "q": {
-       "type": "string",
-       "description": "Query string for searching Team Drives.",
-       "location": "query"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then all Team Drives of the domain in which the requester is an administrator are returned.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "response": {
-      "$ref": "TeamDriveList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "update": {
-     "id": "drive.teamdrives.update",
-     "path": "teamdrives/{teamDriveId}",
-     "httpMethod": "PUT",
-     "description": "Deprecated use drives.update instead.",
-     "parameters": {
-      "teamDriveId": {
-       "type": "string",
-       "description": "The ID of the Team Drive",
-       "required": true,
-       "location": "path"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the Team Drive belongs.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "teamDriveId"
-     ],
-     "request": {
-      "$ref": "TeamDrive"
-     },
-     "response": {
-      "$ref": "TeamDrive"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive"
-     ]
-    }
-   }
-  }
- }
-}
+    "servicePath": "drive/v2/",
+    "title": "Drive API",
+    "version": "v2"
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/drive.v3.json b/googleapiclient/discovery_cache/documents/drive.v3.json
index 2d0b71d..5b7d174 100644
--- a/googleapiclient/discovery_cache/documents/drive.v3.json
+++ b/googleapiclient/discovery_cache/documents/drive.v3.json
@@ -1,3947 +1,3947 @@
 {
- "kind": "discovery#restDescription",
- "etag": "\"-2NioU2H8y8siEzrBOV_qzRI6kQ/8FPw1QApcT2pBMVV3y4RrpfcbIE\"",
- "discoveryVersion": "v1",
- "id": "drive:v3",
- "name": "drive",
- "version": "v3",
- "revision": "20201115",
- "title": "Drive API",
- "description": "Manages files in Drive including uploading, downloading, searching, detecting changes, and updating sharing permissions.",
- "ownerDomain": "google.com",
- "ownerName": "Google",
- "icons": {
-  "x16": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_16.png",
-  "x32": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_32.png"
- },
- "documentationLink": "https://developers.google.com/drive/",
- "protocol": "rest",
- "baseUrl": "https://www.googleapis.com/drive/v3/",
- "basePath": "/drive/v3/",
- "rootUrl": "https://www.googleapis.com/",
- "servicePath": "drive/v3/",
- "batchPath": "batch/drive/v3",
- "parameters": {
-  "alt": {
-   "type": "string",
-   "description": "Data format for the response.",
-   "default": "json",
-   "enum": [
-    "json"
-   ],
-   "enumDescriptions": [
-    "Responses with Content-Type of application/json"
-   ],
-   "location": "query"
-  },
-  "fields": {
-   "type": "string",
-   "description": "Selector specifying which fields to include in a partial response.",
-   "location": "query"
-  },
-  "key": {
-   "type": "string",
-   "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-   "location": "query"
-  },
-  "oauth_token": {
-   "type": "string",
-   "description": "OAuth 2.0 token for the current user.",
-   "location": "query"
-  },
-  "prettyPrint": {
-   "type": "boolean",
-   "description": "Returns response with indentations and line breaks.",
-   "default": "true",
-   "location": "query"
-  },
-  "quotaUser": {
-   "type": "string",
-   "description": "An opaque string that represents a user for quota purposes. Must not exceed 40 characters.",
-   "location": "query"
-  },
-  "userIp": {
-   "type": "string",
-   "description": "Deprecated. Please use quotaUser instead.",
-   "location": "query"
-  }
- },
- "auth": {
-  "oauth2": {
-   "scopes": {
-    "https://www.googleapis.com/auth/drive": {
-     "description": "See, edit, create, and delete all of your Google Drive files"
-    },
-    "https://www.googleapis.com/auth/drive.appdata": {
-     "description": "View and manage its own configuration data in your Google Drive"
-    },
-    "https://www.googleapis.com/auth/drive.file": {
-     "description": "View and manage Google Drive files and folders that you have opened or created with this app"
-    },
-    "https://www.googleapis.com/auth/drive.metadata": {
-     "description": "View and manage metadata of files in your Google Drive"
-    },
-    "https://www.googleapis.com/auth/drive.metadata.readonly": {
-     "description": "View metadata for files in your Google Drive"
-    },
-    "https://www.googleapis.com/auth/drive.photos.readonly": {
-     "description": "View the photos, videos and albums in your Google Photos"
-    },
-    "https://www.googleapis.com/auth/drive.readonly": {
-     "description": "See and download all your Google Drive files"
-    },
-    "https://www.googleapis.com/auth/drive.scripts": {
-     "description": "Modify your Google Apps Script scripts' behavior"
-    }
-   }
-  }
- },
- "schemas": {
-  "About": {
-   "id": "About",
-   "type": "object",
-   "description": "Information about the user, the user's Drive, and system capabilities.",
-   "properties": {
-    "appInstalled": {
-     "type": "boolean",
-     "description": "Whether the user has installed the requesting app."
-    },
-    "canCreateDrives": {
-     "type": "boolean",
-     "description": "Whether the user can create shared drives."
-    },
-    "canCreateTeamDrives": {
-     "type": "boolean",
-     "description": "Deprecated - use canCreateDrives instead."
-    },
-    "driveThemes": {
-     "type": "array",
-     "description": "A list of themes that are supported for shared drives.",
-     "items": {
-      "type": "object",
-      "properties": {
-       "backgroundImageLink": {
-        "type": "string",
-        "description": "A link to this theme's background image."
-       },
-       "colorRgb": {
-        "type": "string",
-        "description": "The color of this theme as an RGB hex string."
-       },
-       "id": {
-        "type": "string",
-        "description": "The ID of the theme."
-       }
-      }
-     }
-    },
-    "exportFormats": {
-     "type": "object",
-     "description": "A map of source MIME type to possible targets for all supported exports.",
-     "additionalProperties": {
-      "type": "array",
-      "items": {
-       "type": "string"
-      }
-     }
-    },
-    "folderColorPalette": {
-     "type": "array",
-     "description": "The currently supported folder colors as RGB hex strings.",
-     "items": {
-      "type": "string"
-     }
-    },
-    "importFormats": {
-     "type": "object",
-     "description": "A map of source MIME type to possible targets for all supported imports.",
-     "additionalProperties": {
-      "type": "array",
-      "items": {
-       "type": "string"
-      }
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#about\".",
-     "default": "drive#about"
-    },
-    "maxImportSizes": {
-     "type": "object",
-     "description": "A map of maximum import sizes by MIME type, in bytes.",
-     "additionalProperties": {
-      "type": "string",
-      "format": "int64"
-     }
-    },
-    "maxUploadSize": {
-     "type": "string",
-     "description": "The maximum upload size in bytes.",
-     "format": "int64"
-    },
-    "storageQuota": {
-     "type": "object",
-     "description": "The user's storage quota limits and usage. All fields are measured in bytes.",
-     "properties": {
-      "limit": {
-       "type": "string",
-       "description": "The usage limit, if applicable. This will not be present if the user has unlimited storage.",
-       "format": "int64"
-      },
-      "usage": {
-       "type": "string",
-       "description": "The total usage across all services.",
-       "format": "int64"
-      },
-      "usageInDrive": {
-       "type": "string",
-       "description": "The usage by all files in Google Drive.",
-       "format": "int64"
-      },
-      "usageInDriveTrash": {
-       "type": "string",
-       "description": "The usage by trashed files in Google Drive.",
-       "format": "int64"
-      }
-     }
-    },
-    "teamDriveThemes": {
-     "type": "array",
-     "description": "Deprecated - use driveThemes instead.",
-     "items": {
-      "type": "object",
-      "properties": {
-       "backgroundImageLink": {
-        "type": "string",
-        "description": "Deprecated - use driveThemes/backgroundImageLink instead."
-       },
-       "colorRgb": {
-        "type": "string",
-        "description": "Deprecated - use driveThemes/colorRgb instead."
-       },
-       "id": {
-        "type": "string",
-        "description": "Deprecated - use driveThemes/id instead."
-       }
-      }
-     }
-    },
-    "user": {
-     "$ref": "User",
-     "description": "The authenticated user."
-    }
-   }
-  },
-  "Change": {
-   "id": "Change",
-   "type": "object",
-   "description": "A change to a file or shared drive.",
-   "properties": {
-    "changeType": {
-     "type": "string",
-     "description": "The type of the change. Possible values are file and drive."
-    },
-    "drive": {
-     "$ref": "Drive",
-     "description": "The updated state of the shared drive. Present if the changeType is drive, the user is still a member of the shared drive, and the shared drive has not been deleted."
-    },
-    "driveId": {
-     "type": "string",
-     "description": "The ID of the shared drive associated with this change."
-    },
-    "file": {
-     "$ref": "File",
-     "description": "The updated state of the file. Present if the type is file and the file has not been removed from this list of changes."
-    },
-    "fileId": {
-     "type": "string",
-     "description": "The ID of the file which has changed."
-    },
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#change\".",
-     "default": "drive#change"
-    },
-    "removed": {
-     "type": "boolean",
-     "description": "Whether the file or shared drive has been removed from this list of changes, for example by deletion or loss of access."
-    },
-    "teamDrive": {
-     "$ref": "TeamDrive",
-     "description": "Deprecated - use drive instead."
-    },
-    "teamDriveId": {
-     "type": "string",
-     "description": "Deprecated - use driveId instead."
-    },
-    "time": {
-     "type": "string",
-     "description": "The time of this change (RFC 3339 date-time).",
-     "format": "date-time"
-    },
-    "type": {
-     "type": "string",
-     "description": "Deprecated - use changeType instead."
-    }
-   }
-  },
-  "ChangeList": {
-   "id": "ChangeList",
-   "type": "object",
-   "description": "A list of changes for a user.",
-   "properties": {
-    "changes": {
-     "type": "array",
-     "description": "The list of changes. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
-     "items": {
-      "$ref": "Change"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#changeList\".",
-     "default": "drive#changeList"
-    },
-    "newStartPageToken": {
-     "type": "string",
-     "description": "The starting page token for future changes. This will be present only if the end of the current changes list has been reached."
-    },
-    "nextPageToken": {
-     "type": "string",
-     "description": "The page token for the next page of changes. This will be absent if the end of the changes list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results."
-    }
-   }
-  },
-  "Channel": {
-   "id": "Channel",
-   "type": "object",
-   "description": "An notification channel used to watch for resource changes.",
-   "properties": {
-    "address": {
-     "type": "string",
-     "description": "The address where notifications are delivered for this channel."
-    },
-    "expiration": {
-     "type": "string",
-     "description": "Date and time of notification channel expiration, expressed as a Unix timestamp, in milliseconds. Optional.",
-     "format": "int64"
-    },
-    "id": {
-     "type": "string",
-     "description": "A UUID or similar unique string that identifies this channel."
-    },
-    "kind": {
-     "type": "string",
-     "description": "Identifies this as a notification channel used to watch for changes to a resource, which is \"api#channel\".",
-     "default": "api#channel"
-    },
-    "params": {
-     "type": "object",
-     "description": "Additional parameters controlling delivery channel behavior. Optional.",
-     "additionalProperties": {
-      "type": "string",
-      "description": "Declares a new parameter by name."
-     }
-    },
-    "payload": {
-     "type": "boolean",
-     "description": "A Boolean value to indicate whether payload is wanted. Optional."
-    },
-    "resourceId": {
-     "type": "string",
-     "description": "An opaque ID that identifies the resource being watched on this channel. Stable across different API versions."
-    },
-    "resourceUri": {
-     "type": "string",
-     "description": "A version-specific identifier for the watched resource."
-    },
-    "token": {
-     "type": "string",
-     "description": "An arbitrary string delivered to the target address with each notification delivered over this channel. Optional."
-    },
-    "type": {
-     "type": "string",
-     "description": "The type of delivery mechanism used for this channel."
-    }
-   }
-  },
-  "Comment": {
-   "id": "Comment",
-   "type": "object",
-   "description": "A comment on a file.",
-   "properties": {
-    "anchor": {
-     "type": "string",
-     "description": "A region of the document represented as a JSON string. See anchor documentation for details on how to define and interpret anchor properties."
-    },
-    "author": {
-     "$ref": "User",
-     "description": "The author of the comment. The author's email address and permission ID will not be populated."
-    },
-    "content": {
-     "type": "string",
-     "description": "The plain text content of the comment. This field is used for setting the content, while htmlContent should be displayed.",
-     "annotations": {
-      "required": [
-       "drive.comments.create",
-       "drive.comments.update"
-      ]
-     }
-    },
-    "createdTime": {
-     "type": "string",
-     "description": "The time at which the comment was created (RFC 3339 date-time).",
-     "format": "date-time"
-    },
-    "deleted": {
-     "type": "boolean",
-     "description": "Whether the comment has been deleted. A deleted comment has no content."
-    },
-    "htmlContent": {
-     "type": "string",
-     "description": "The content of the comment with HTML formatting."
-    },
-    "id": {
-     "type": "string",
-     "description": "The ID of the comment."
-    },
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#comment\".",
-     "default": "drive#comment"
-    },
-    "modifiedTime": {
-     "type": "string",
-     "description": "The last time the comment or any of its replies was modified (RFC 3339 date-time).",
-     "format": "date-time"
-    },
-    "quotedFileContent": {
-     "type": "object",
-     "description": "The file content to which the comment refers, typically within the anchor region. For a text file, for example, this would be the text at the location of the comment.",
-     "properties": {
-      "mimeType": {
-       "type": "string",
-       "description": "The MIME type of the quoted content."
-      },
-      "value": {
-       "type": "string",
-       "description": "The quoted content itself. This is interpreted as plain text if set through the API."
-      }
-     }
-    },
-    "replies": {
-     "type": "array",
-     "description": "The full list of replies to the comment in chronological order.",
-     "items": {
-      "$ref": "Reply"
-     }
-    },
-    "resolved": {
-     "type": "boolean",
-     "description": "Whether the comment has been resolved by one of its replies."
-    }
-   }
-  },
-  "CommentList": {
-   "id": "CommentList",
-   "type": "object",
-   "description": "A list of comments on a file.",
-   "properties": {
-    "comments": {
-     "type": "array",
-     "description": "The list of comments. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
-     "items": {
-      "$ref": "Comment"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#commentList\".",
-     "default": "drive#commentList"
-    },
-    "nextPageToken": {
-     "type": "string",
-     "description": "The page token for the next page of comments. This will be absent if the end of the comments list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results."
-    }
-   }
-  },
-  "ContentRestriction": {
-   "id": "ContentRestriction",
-   "type": "object",
-   "description": "A restriction for accessing the content of the file.",
-   "properties": {
-    "readOnly": {
-     "type": "boolean",
-     "description": "Whether the content of the file is read-only. If a file is read-only, a new revision of the file may not be added, comments may not be added or modified, and the title of the file may not be modified."
-    },
-    "reason": {
-     "type": "string",
-     "description": "Reason for why the content of the file is restricted. This is only mutable on requests that also set readOnly=true."
-    },
-    "restrictingUser": {
-     "$ref": "User",
-     "description": "The user who set the content restriction. Only populated if readOnly is true."
-    },
-    "restrictionTime": {
-     "type": "string",
-     "description": "The time at which the content restriction was set (formatted RFC 3339 timestamp). Only populated if readOnly is true.",
-     "format": "date-time"
-    },
-    "type": {
-     "type": "string",
-     "description": "The type of the content restriction. Currently the only possible value is globalContentRestriction."
-    }
-   }
-  },
-  "Drive": {
-   "id": "Drive",
-   "type": "object",
-   "description": "Representation of a shared drive.",
-   "properties": {
-    "backgroundImageFile": {
-     "type": "object",
-     "description": "An image file and cropping parameters from which a background image for this shared drive is set. This is a write only field; it can only be set on drive.drives.update requests that don't set themeId. When specified, all fields of the backgroundImageFile must be set.",
-     "properties": {
-      "id": {
-       "type": "string",
-       "description": "The ID of an image file in Google Drive to use for the background image."
-      },
-      "width": {
-       "type": "number",
-       "description": "The width of the cropped image in the closed range of 0 to 1. This value represents the width of the cropped image divided by the width of the entire image. The height is computed by applying a width to height aspect ratio of 80 to 9. The resulting image must be at least 1280 pixels wide and 144 pixels high.",
-       "format": "float"
-      },
-      "xCoordinate": {
-       "type": "number",
-       "description": "The X coordinate of the upper left corner of the cropping area in the background image. This is a value in the closed range of 0 to 1. This value represents the horizontal distance from the left side of the entire image to the left side of the cropping area divided by the width of the entire image.",
-       "format": "float"
-      },
-      "yCoordinate": {
-       "type": "number",
-       "description": "The Y coordinate of the upper left corner of the cropping area in the background image. This is a value in the closed range of 0 to 1. This value represents the vertical distance from the top side of the entire image to the top side of the cropping area divided by the height of the entire image.",
-       "format": "float"
-      }
-     }
-    },
-    "backgroundImageLink": {
-     "type": "string",
-     "description": "A short-lived link to this shared drive's background image."
-    },
-    "capabilities": {
-     "type": "object",
-     "description": "Capabilities the current user has on this shared drive.",
-     "properties": {
-      "canAddChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can add children to folders in this shared drive."
-      },
-      "canChangeCopyRequiresWriterPermissionRestriction": {
-       "type": "boolean",
-       "description": "Whether the current user can change the copyRequiresWriterPermission restriction of this shared drive."
-      },
-      "canChangeDomainUsersOnlyRestriction": {
-       "type": "boolean",
-       "description": "Whether the current user can change the domainUsersOnly restriction of this shared drive."
-      },
-      "canChangeDriveBackground": {
-       "type": "boolean",
-       "description": "Whether the current user can change the background of this shared drive."
-      },
-      "canChangeDriveMembersOnlyRestriction": {
-       "type": "boolean",
-       "description": "Whether the current user can change the driveMembersOnly restriction of this shared drive."
-      },
-      "canComment": {
-       "type": "boolean",
-       "description": "Whether the current user can comment on files in this shared drive."
-      },
-      "canCopy": {
-       "type": "boolean",
-       "description": "Whether the current user can copy files in this shared drive."
-      },
-      "canDeleteChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can delete children from folders in this shared drive."
-      },
-      "canDeleteDrive": {
-       "type": "boolean",
-       "description": "Whether the current user can delete this shared drive. Attempting to delete the shared drive may still fail if there are untrashed items inside the shared drive."
-      },
-      "canDownload": {
-       "type": "boolean",
-       "description": "Whether the current user can download files in this shared drive."
-      },
-      "canEdit": {
-       "type": "boolean",
-       "description": "Whether the current user can edit files in this shared drive"
-      },
-      "canListChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can list the children of folders in this shared drive."
-      },
-      "canManageMembers": {
-       "type": "boolean",
-       "description": "Whether the current user can add members to this shared drive or remove them or change their role."
-      },
-      "canReadRevisions": {
-       "type": "boolean",
-       "description": "Whether the current user can read the revisions resource of files in this shared drive."
-      },
-      "canRename": {
-       "type": "boolean",
-       "description": "Whether the current user can rename files or folders in this shared drive."
-      },
-      "canRenameDrive": {
-       "type": "boolean",
-       "description": "Whether the current user can rename this shared drive."
-      },
-      "canShare": {
-       "type": "boolean",
-       "description": "Whether the current user can share files or folders in this shared drive."
-      },
-      "canTrashChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can trash children from folders in this shared drive."
-      }
-     }
-    },
-    "colorRgb": {
-     "type": "string",
-     "description": "The color of this shared drive as an RGB hex string. It can only be set on a drive.drives.update request that does not set themeId."
-    },
-    "createdTime": {
-     "type": "string",
-     "description": "The time at which the shared drive was created (RFC 3339 date-time).",
-     "format": "date-time"
-    },
-    "hidden": {
-     "type": "boolean",
-     "description": "Whether the shared drive is hidden from default view."
-    },
-    "id": {
-     "type": "string",
-     "description": "The ID of this shared drive which is also the ID of the top level folder of this shared drive."
-    },
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#drive\".",
-     "default": "drive#drive"
-    },
-    "name": {
-     "type": "string",
-     "description": "The name of this shared drive."
-    },
-    "restrictions": {
-     "type": "object",
-     "description": "A set of restrictions that apply to this shared drive or items inside this shared drive.",
-     "properties": {
-      "adminManagedRestrictions": {
-       "type": "boolean",
-       "description": "Whether administrative privileges on this shared drive are required to modify restrictions."
-      },
-      "copyRequiresWriterPermission": {
-       "type": "boolean",
-       "description": "Whether the options to copy, print, or download files inside this shared drive, should be disabled for readers and commenters. When this restriction is set to true, it will override the similarly named field to true for any file inside this shared drive."
-      },
-      "domainUsersOnly": {
-       "type": "boolean",
-       "description": "Whether access to this shared drive and items inside this shared drive is restricted to users of the domain to which this shared drive belongs. This restriction may be overridden by other sharing policies controlled outside of this shared drive."
-      },
-      "driveMembersOnly": {
-       "type": "boolean",
-       "description": "Whether access to items inside this shared drive is restricted to its members."
-      }
-     }
-    },
-    "themeId": {
-     "type": "string",
-     "description": "The ID of the theme from which the background image and color will be set. The set of possible driveThemes can be retrieved from a drive.about.get response. When not specified on a drive.drives.create request, a random theme is chosen from which the background image and color are set. This is a write-only field; it can only be set on requests that don't set colorRgb or backgroundImageFile."
-    }
-   }
-  },
-  "DriveList": {
-   "id": "DriveList",
-   "type": "object",
-   "description": "A list of shared drives.",
-   "properties": {
-    "drives": {
-     "type": "array",
-     "description": "The list of shared drives. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
-     "items": {
-      "$ref": "Drive"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#driveList\".",
-     "default": "drive#driveList"
-    },
-    "nextPageToken": {
-     "type": "string",
-     "description": "The page token for the next page of shared drives. This will be absent if the end of the list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results."
-    }
-   }
-  },
-  "File": {
-   "id": "File",
-   "type": "object",
-   "description": "The metadata for a file.",
-   "properties": {
-    "appProperties": {
-     "type": "object",
-     "description": "A collection of arbitrary key-value pairs which are private to the requesting app.\nEntries with null values are cleared in update and copy requests.",
-     "additionalProperties": {
-      "type": "string"
-     }
-    },
-    "capabilities": {
-     "type": "object",
-     "description": "Capabilities the current user has on this file. Each capability corresponds to a fine-grained action that a user may take.",
-     "properties": {
-      "canAddChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can add children to this folder. This is always false when the item is not a folder."
-      },
-      "canAddFolderFromAnotherDrive": {
-       "type": "boolean",
-       "description": "Whether the current user can add a folder from another drive (different shared drive or My Drive) to this folder. This is false when the item is not a folder. Only populated for items in shared drives."
-      },
-      "canAddMyDriveParent": {
-       "type": "boolean",
-       "description": "Whether the current user can add a parent for the item without removing an existing parent in the same request. Not populated for shared drive files."
-      },
-      "canChangeCopyRequiresWriterPermission": {
-       "type": "boolean",
-       "description": "Whether the current user can change the copyRequiresWriterPermission restriction of this file."
-      },
-      "canChangeViewersCanCopyContent": {
-       "type": "boolean",
-       "description": "Deprecated"
-      },
-      "canComment": {
-       "type": "boolean",
-       "description": "Whether the current user can comment on this file."
-      },
-      "canCopy": {
-       "type": "boolean",
-       "description": "Whether the current user can copy this file. For an item in a shared drive, whether the current user can copy non-folder descendants of this item, or this item itself if it is not a folder."
-      },
-      "canDelete": {
-       "type": "boolean",
-       "description": "Whether the current user can delete this file."
-      },
-      "canDeleteChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can delete children of this folder. This is false when the item is not a folder. Only populated for items in shared drives."
-      },
-      "canDownload": {
-       "type": "boolean",
-       "description": "Whether the current user can download this file."
-      },
-      "canEdit": {
-       "type": "boolean",
-       "description": "Whether the current user can edit this file. Other factors may limit the type of changes a user can make to a file. For example, see canChangeCopyRequiresWriterPermission or canModifyContent."
-      },
-      "canListChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can list the children of this folder. This is always false when the item is not a folder."
-      },
-      "canModifyContent": {
-       "type": "boolean",
-       "description": "Whether the current user can modify the content of this file."
-      },
-      "canModifyContentRestriction": {
-       "type": "boolean",
-       "description": "Whether the current user can modify restrictions on content of this file."
-      },
-      "canMoveChildrenOutOfDrive": {
-       "type": "boolean",
-       "description": "Whether the current user can move children of this folder outside of the shared drive. This is false when the item is not a folder. Only populated for items in shared drives."
-      },
-      "canMoveChildrenOutOfTeamDrive": {
-       "type": "boolean",
-       "description": "Deprecated - use canMoveChildrenOutOfDrive instead."
-      },
-      "canMoveChildrenWithinDrive": {
-       "type": "boolean",
-       "description": "Whether the current user can move children of this folder within this drive. This is false when the item is not a folder. Note that a request to move the child may still fail depending on the current user's access to the child and to the destination folder."
-      },
-      "canMoveChildrenWithinTeamDrive": {
-       "type": "boolean",
-       "description": "Deprecated - use canMoveChildrenWithinDrive instead."
-      },
-      "canMoveItemIntoTeamDrive": {
-       "type": "boolean",
-       "description": "Deprecated - use canMoveItemOutOfDrive instead."
-      },
-      "canMoveItemOutOfDrive": {
-       "type": "boolean",
-       "description": "Whether the current user can move this item outside of this drive by changing its parent. Note that a request to change the parent of the item may still fail depending on the new parent that is being added."
-      },
-      "canMoveItemOutOfTeamDrive": {
-       "type": "boolean",
-       "description": "Deprecated - use canMoveItemOutOfDrive instead."
-      },
-      "canMoveItemWithinDrive": {
-       "type": "boolean",
-       "description": "Whether the current user can move this item within this drive. Note that a request to change the parent of the item may still fail depending on the new parent that is being added and the parent that is being removed."
-      },
-      "canMoveItemWithinTeamDrive": {
-       "type": "boolean",
-       "description": "Deprecated - use canMoveItemWithinDrive instead."
-      },
-      "canMoveTeamDriveItem": {
-       "type": "boolean",
-       "description": "Deprecated - use canMoveItemWithinDrive or canMoveItemOutOfDrive instead."
-      },
-      "canReadDrive": {
-       "type": "boolean",
-       "description": "Whether the current user can read the shared drive to which this file belongs. Only populated for items in shared drives."
-      },
-      "canReadRevisions": {
-       "type": "boolean",
-       "description": "Whether the current user can read the revisions resource of this file. For a shared drive item, whether revisions of non-folder descendants of this item, or this item itself if it is not a folder, can be read."
-      },
-      "canReadTeamDrive": {
-       "type": "boolean",
-       "description": "Deprecated - use canReadDrive instead."
-      },
-      "canRemoveChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can remove children from this folder. This is always false when the item is not a folder. For a folder in a shared drive, use canDeleteChildren or canTrashChildren instead."
-      },
-      "canRemoveMyDriveParent": {
-       "type": "boolean",
-       "description": "Whether the current user can remove a parent from the item without adding another parent in the same request. Not populated for shared drive files."
-      },
-      "canRename": {
-       "type": "boolean",
-       "description": "Whether the current user can rename this file."
-      },
-      "canShare": {
-       "type": "boolean",
-       "description": "Whether the current user can modify the sharing settings for this file."
-      },
-      "canTrash": {
-       "type": "boolean",
-       "description": "Whether the current user can move this file to trash."
-      },
-      "canTrashChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can trash children of this folder. This is false when the item is not a folder. Only populated for items in shared drives."
-      },
-      "canUntrash": {
-       "type": "boolean",
-       "description": "Whether the current user can restore this file from trash."
-      }
-     }
-    },
-    "contentHints": {
-     "type": "object",
-     "description": "Additional information about the content of the file. These fields are never populated in responses.",
-     "properties": {
-      "indexableText": {
-       "type": "string",
-       "description": "Text to be indexed for the file to improve fullText queries. This is limited to 128KB in length and may contain HTML elements."
-      },
-      "thumbnail": {
-       "type": "object",
-       "description": "A thumbnail for the file. This will only be used if Google Drive cannot generate a standard thumbnail.",
-       "properties": {
-        "image": {
-         "type": "string",
-         "description": "The thumbnail data encoded with URL-safe Base64 (RFC 4648 section 5).",
-         "format": "byte"
-        },
-        "mimeType": {
-         "type": "string",
-         "description": "The MIME type of the thumbnail."
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/drive": {
+                    "description": "See, edit, create, and delete all of your Google Drive files"
+                },
+                "https://www.googleapis.com/auth/drive.appdata": {
+                    "description": "See, create, and delete its own configuration data in your Google Drive"
+                },
+                "https://www.googleapis.com/auth/drive.file": {
+                    "description": "View and manage Google Drive files and folders that you have opened or created with this app"
+                },
+                "https://www.googleapis.com/auth/drive.metadata": {
+                    "description": "View and manage metadata of files in your Google Drive"
+                },
+                "https://www.googleapis.com/auth/drive.metadata.readonly": {
+                    "description": "See information about your Google Drive files"
+                },
+                "https://www.googleapis.com/auth/drive.photos.readonly": {
+                    "description": "View the photos, videos and albums in your Google Photos"
+                },
+                "https://www.googleapis.com/auth/drive.readonly": {
+                    "description": "See and download all your Google Drive files"
+                },
+                "https://www.googleapis.com/auth/drive.scripts": {
+                    "description": "Modify your Google Apps Script scripts' behavior"
+                }
+            }
         }
-       }
-      }
-     }
     },
-    "contentRestrictions": {
-     "type": "array",
-     "description": "Restrictions for accessing the content of the file. Only populated if such a restriction exists.",
-     "items": {
-      "$ref": "ContentRestriction"
-     }
+    "basePath": "/drive/v3/",
+    "baseUrl": "https://www.googleapis.com/drive/v3/",
+    "batchPath": "batch/drive/v3",
+    "description": "Manages files in Drive including uploading, downloading, searching, detecting changes, and updating sharing permissions.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://developers.google.com/drive/",
+    "etag": "\"-2NioU2H8y8siEzrBOV_qzRI6kQ/PfnNs6540GtpSJ-y6RmFD__VKLE\"",
+    "icons": {
+        "x16": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_16.png",
+        "x32": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_32.png"
     },
-    "copyRequiresWriterPermission": {
-     "type": "boolean",
-     "description": "Whether the options to copy, print, or download this file, should be disabled for readers and commenters."
-    },
-    "createdTime": {
-     "type": "string",
-     "description": "The time at which the file was created (RFC 3339 date-time).",
-     "format": "date-time"
-    },
-    "description": {
-     "type": "string",
-     "description": "A short description of the file."
-    },
-    "driveId": {
-     "type": "string",
-     "description": "ID of the shared drive the file resides in. Only populated for items in shared drives."
-    },
-    "explicitlyTrashed": {
-     "type": "boolean",
-     "description": "Whether the file has been explicitly trashed, as opposed to recursively trashed from a parent folder."
-    },
-    "exportLinks": {
-     "type": "object",
-     "description": "Links for exporting Docs Editors files to specific formats.",
-     "additionalProperties": {
-      "type": "string",
-      "description": "A mapping from export format to URL"
-     }
-    },
-    "fileExtension": {
-     "type": "string",
-     "description": "The final component of fullFileExtension. This is only available for files with binary content in Google Drive."
-    },
-    "folderColorRgb": {
-     "type": "string",
-     "description": "The color for a folder as an RGB hex string. The supported colors are published in the folderColorPalette field of the About resource.\nIf an unsupported color is specified, the closest color in the palette will be used instead."
-    },
-    "fullFileExtension": {
-     "type": "string",
-     "description": "The full file extension extracted from the name field. May contain multiple concatenated extensions, such as \"tar.gz\". This is only available for files with binary content in Google Drive.\nThis is automatically updated when the name field changes, however it is not cleared if the new name does not contain a valid extension."
-    },
-    "hasAugmentedPermissions": {
-     "type": "boolean",
-     "description": "Whether there are permissions directly on this file. This field is only populated for items in shared drives."
-    },
-    "hasThumbnail": {
-     "type": "boolean",
-     "description": "Whether this file has a thumbnail. This does not indicate whether the requesting app has access to the thumbnail. To check access, look for the presence of the thumbnailLink field."
-    },
-    "headRevisionId": {
-     "type": "string",
-     "description": "The ID of the file's head revision. This is currently only available for files with binary content in Google Drive."
-    },
-    "iconLink": {
-     "type": "string",
-     "description": "A static, unauthenticated link to the file's icon."
-    },
-    "id": {
-     "type": "string",
-     "description": "The ID of the file."
-    },
-    "imageMediaMetadata": {
-     "type": "object",
-     "description": "Additional metadata about image media, if available.",
-     "properties": {
-      "aperture": {
-       "type": "number",
-       "description": "The aperture used to create the photo (f-number).",
-       "format": "float"
-      },
-      "cameraMake": {
-       "type": "string",
-       "description": "The make of the camera used to create the photo."
-      },
-      "cameraModel": {
-       "type": "string",
-       "description": "The model of the camera used to create the photo."
-      },
-      "colorSpace": {
-       "type": "string",
-       "description": "The color space of the photo."
-      },
-      "exposureBias": {
-       "type": "number",
-       "description": "The exposure bias of the photo (APEX value).",
-       "format": "float"
-      },
-      "exposureMode": {
-       "type": "string",
-       "description": "The exposure mode used to create the photo."
-      },
-      "exposureTime": {
-       "type": "number",
-       "description": "The length of the exposure, in seconds.",
-       "format": "float"
-      },
-      "flashUsed": {
-       "type": "boolean",
-       "description": "Whether a flash was used to create the photo."
-      },
-      "focalLength": {
-       "type": "number",
-       "description": "The focal length used to create the photo, in millimeters.",
-       "format": "float"
-      },
-      "height": {
-       "type": "integer",
-       "description": "The height of the image in pixels.",
-       "format": "int32"
-      },
-      "isoSpeed": {
-       "type": "integer",
-       "description": "The ISO speed used to create the photo.",
-       "format": "int32"
-      },
-      "lens": {
-       "type": "string",
-       "description": "The lens used to create the photo."
-      },
-      "location": {
-       "type": "object",
-       "description": "Geographic location information stored in the image.",
-       "properties": {
-        "altitude": {
-         "type": "number",
-         "description": "The altitude stored in the image.",
-         "format": "double"
+    "id": "drive:v3",
+    "kind": "discovery#restDescription",
+    "name": "drive",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "alt": {
+            "default": "json",
+            "description": "Data format for the response.",
+            "enum": [
+                "json"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "latitude": {
-         "type": "number",
-         "description": "The latitude stored in the image.",
-         "format": "double"
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
         },
-        "longitude": {
-         "type": "number",
-         "description": "The longitude stored in the image.",
-         "format": "double"
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "An opaque string that represents a user for quota purposes. Must not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "userIp": {
+            "description": "Deprecated. Please use quotaUser instead.",
+            "location": "query",
+            "type": "string"
         }
-       }
-      },
-      "maxApertureValue": {
-       "type": "number",
-       "description": "The smallest f-number of the lens at the focal length used to create the photo (APEX value).",
-       "format": "float"
-      },
-      "meteringMode": {
-       "type": "string",
-       "description": "The metering mode used to create the photo."
-      },
-      "rotation": {
-       "type": "integer",
-       "description": "The number of clockwise 90 degree rotations applied from the image's original orientation.",
-       "format": "int32"
-      },
-      "sensor": {
-       "type": "string",
-       "description": "The type of sensor used to create the photo."
-      },
-      "subjectDistance": {
-       "type": "integer",
-       "description": "The distance to the subject of the photo, in meters.",
-       "format": "int32"
-      },
-      "time": {
-       "type": "string",
-       "description": "The date and time the photo was taken (EXIF DateTime)."
-      },
-      "whiteBalance": {
-       "type": "string",
-       "description": "The white balance mode used to create the photo."
-      },
-      "width": {
-       "type": "integer",
-       "description": "The width of the image in pixels.",
-       "format": "int32"
-      }
-     }
     },
-    "isAppAuthorized": {
-     "type": "boolean",
-     "description": "Whether the file was created or opened by the requesting app."
+    "protocol": "rest",
+    "resources": {
+        "about": {
+            "methods": {
+                "get": {
+                    "description": "Gets information about the user, the user's Drive, and system capabilities.",
+                    "httpMethod": "GET",
+                    "id": "drive.about.get",
+                    "path": "about",
+                    "response": {
+                        "$ref": "About"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                }
+            }
+        },
+        "changes": {
+            "methods": {
+                "getStartPageToken": {
+                    "description": "Gets the starting pageToken for listing future changes.",
+                    "httpMethod": "GET",
+                    "id": "drive.changes.getStartPageToken",
+                    "parameters": {
+                        "driveId": {
+                            "description": "The ID of the shared drive for which the starting pageToken for listing future changes from that shared drive is returned.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "teamDriveId": {
+                            "description": "Deprecated use driveId instead.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "changes/startPageToken",
+                    "response": {
+                        "$ref": "StartPageToken"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "list": {
+                    "description": "Lists the changes for a user or shared drive.",
+                    "httpMethod": "GET",
+                    "id": "drive.changes.list",
+                    "parameterOrder": [
+                        "pageToken"
+                    ],
+                    "parameters": {
+                        "driveId": {
+                            "description": "The shared drive from which changes are returned. If specified the change IDs will be reflective of the shared drive; use the combined drive ID and change ID as an identifier.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "includeCorpusRemovals": {
+                            "default": "false",
+                            "description": "Whether changes should include the file resource if the file is still accessible by the user at the time of the request, even when a file was removed from the list of changes and there will be no further change entries for this file.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "includeItemsFromAllDrives": {
+                            "default": "false",
+                            "description": "Whether both My Drive and shared drive items should be included in results.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "includeRemoved": {
+                            "default": "true",
+                            "description": "Whether to include changes indicating that items have been removed from the list of changes, for example by deletion or loss of access.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "includeTeamDriveItems": {
+                            "default": "false",
+                            "description": "Deprecated use includeItemsFromAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "pageSize": {
+                            "default": "100",
+                            "description": "The maximum number of changes to return per page.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "1",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response or to the response from the getStartPageToken method.",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "restrictToMyDrive": {
+                            "default": "false",
+                            "description": "Whether to restrict the results to changes inside the My Drive hierarchy. This omits changes to files such as those in the Application Data folder or shared files which have not been added to My Drive.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "spaces": {
+                            "default": "drive",
+                            "description": "A comma-separated list of spaces to query within the user corpus. Supported values are 'drive', 'appDataFolder' and 'photos'.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "teamDriveId": {
+                            "description": "Deprecated use driveId instead.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "changes",
+                    "response": {
+                        "$ref": "ChangeList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ],
+                    "supportsSubscription": true
+                },
+                "watch": {
+                    "description": "Subscribes to changes for a user.",
+                    "httpMethod": "POST",
+                    "id": "drive.changes.watch",
+                    "parameterOrder": [
+                        "pageToken"
+                    ],
+                    "parameters": {
+                        "driveId": {
+                            "description": "The shared drive from which changes are returned. If specified the change IDs will be reflective of the shared drive; use the combined drive ID and change ID as an identifier.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "includeCorpusRemovals": {
+                            "default": "false",
+                            "description": "Whether changes should include the file resource if the file is still accessible by the user at the time of the request, even when a file was removed from the list of changes and there will be no further change entries for this file.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "includeItemsFromAllDrives": {
+                            "default": "false",
+                            "description": "Whether both My Drive and shared drive items should be included in results.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "includeRemoved": {
+                            "default": "true",
+                            "description": "Whether to include changes indicating that items have been removed from the list of changes, for example by deletion or loss of access.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "includeTeamDriveItems": {
+                            "default": "false",
+                            "description": "Deprecated use includeItemsFromAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "pageSize": {
+                            "default": "100",
+                            "description": "The maximum number of changes to return per page.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "1",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response or to the response from the getStartPageToken method.",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "restrictToMyDrive": {
+                            "default": "false",
+                            "description": "Whether to restrict the results to changes inside the My Drive hierarchy. This omits changes to files such as those in the Application Data folder or shared files which have not been added to My Drive.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "spaces": {
+                            "default": "drive",
+                            "description": "A comma-separated list of spaces to query within the user corpus. Supported values are 'drive', 'appDataFolder' and 'photos'.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "teamDriveId": {
+                            "description": "Deprecated use driveId instead.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "changes/watch",
+                    "request": {
+                        "$ref": "Channel",
+                        "parameterName": "resource"
+                    },
+                    "response": {
+                        "$ref": "Channel"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ],
+                    "supportsSubscription": true
+                }
+            }
+        },
+        "channels": {
+            "methods": {
+                "stop": {
+                    "description": "Stop watching resources through this channel",
+                    "httpMethod": "POST",
+                    "id": "drive.channels.stop",
+                    "path": "channels/stop",
+                    "request": {
+                        "$ref": "Channel",
+                        "parameterName": "resource"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                }
+            }
+        },
+        "comments": {
+            "methods": {
+                "create": {
+                    "description": "Creates a new comment on a file.",
+                    "httpMethod": "POST",
+                    "id": "drive.comments.create",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/comments",
+                    "request": {
+                        "$ref": "Comment"
+                    },
+                    "response": {
+                        "$ref": "Comment"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "delete": {
+                    "description": "Deletes a comment.",
+                    "httpMethod": "DELETE",
+                    "id": "drive.comments.delete",
+                    "parameterOrder": [
+                        "fileId",
+                        "commentId"
+                    ],
+                    "parameters": {
+                        "commentId": {
+                            "description": "The ID of the comment.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/comments/{commentId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "get": {
+                    "description": "Gets a comment by ID.",
+                    "httpMethod": "GET",
+                    "id": "drive.comments.get",
+                    "parameterOrder": [
+                        "fileId",
+                        "commentId"
+                    ],
+                    "parameters": {
+                        "commentId": {
+                            "description": "The ID of the comment.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includeDeleted": {
+                            "default": "false",
+                            "description": "Whether to return deleted comments. Deleted comments will not include their original content.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}/comments/{commentId}",
+                    "response": {
+                        "$ref": "Comment"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "list": {
+                    "description": "Lists a file's comments.",
+                    "httpMethod": "GET",
+                    "id": "drive.comments.list",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includeDeleted": {
+                            "default": "false",
+                            "description": "Whether to include deleted comments. Deleted comments will not include their original content.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "pageSize": {
+                            "default": "20",
+                            "description": "The maximum number of comments to return per page.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "100",
+                            "minimum": "1",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "startModifiedTime": {
+                            "description": "The minimum value of 'modifiedTime' for the result comments (RFC 3339 date-time).",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/comments",
+                    "response": {
+                        "$ref": "CommentList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "update": {
+                    "description": "Updates a comment with patch semantics.",
+                    "httpMethod": "PATCH",
+                    "id": "drive.comments.update",
+                    "parameterOrder": [
+                        "fileId",
+                        "commentId"
+                    ],
+                    "parameters": {
+                        "commentId": {
+                            "description": "The ID of the comment.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/comments/{commentId}",
+                    "request": {
+                        "$ref": "Comment"
+                    },
+                    "response": {
+                        "$ref": "Comment"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                }
+            }
+        },
+        "drives": {
+            "methods": {
+                "create": {
+                    "description": "Creates a new shared drive.",
+                    "httpMethod": "POST",
+                    "id": "drive.drives.create",
+                    "parameterOrder": [
+                        "requestId"
+                    ],
+                    "parameters": {
+                        "requestId": {
+                            "description": "An ID, such as a random UUID, which uniquely identifies this user's request for idempotent creation of a shared drive. A repeated request by the same user and with the same request ID will avoid creating duplicates by attempting to create the same shared drive. If the shared drive already exists a 409 error will be returned.",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "drives",
+                    "request": {
+                        "$ref": "Drive"
+                    },
+                    "response": {
+                        "$ref": "Drive"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive"
+                    ]
+                },
+                "delete": {
+                    "description": "Permanently deletes a shared drive for which the user is an organizer. The shared drive cannot contain any untrashed items.",
+                    "httpMethod": "DELETE",
+                    "id": "drive.drives.delete",
+                    "parameterOrder": [
+                        "driveId"
+                    ],
+                    "parameters": {
+                        "driveId": {
+                            "description": "The ID of the shared drive.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "drives/{driveId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive"
+                    ]
+                },
+                "get": {
+                    "description": "Gets a shared drive's metadata by ID.",
+                    "httpMethod": "GET",
+                    "id": "drive.drives.get",
+                    "parameterOrder": [
+                        "driveId"
+                    ],
+                    "parameters": {
+                        "driveId": {
+                            "description": "The ID of the shared drive.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the shared drive belongs.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "drives/{driveId}",
+                    "response": {
+                        "$ref": "Drive"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "hide": {
+                    "description": "Hides a shared drive from the default view.",
+                    "httpMethod": "POST",
+                    "id": "drive.drives.hide",
+                    "parameterOrder": [
+                        "driveId"
+                    ],
+                    "parameters": {
+                        "driveId": {
+                            "description": "The ID of the shared drive.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "drives/{driveId}/hide",
+                    "response": {
+                        "$ref": "Drive"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive"
+                    ]
+                },
+                "list": {
+                    "description": "Lists the user's shared drives.",
+                    "httpMethod": "GET",
+                    "id": "drive.drives.list",
+                    "parameters": {
+                        "pageSize": {
+                            "default": "10",
+                            "description": "Maximum number of shared drives to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "100",
+                            "minimum": "1",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Page token for shared drives.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "q": {
+                            "description": "Query string for searching shared drives.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then all shared drives of the domain in which the requester is an administrator are returned.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "drives",
+                    "response": {
+                        "$ref": "DriveList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "unhide": {
+                    "description": "Restores a shared drive to the default view.",
+                    "httpMethod": "POST",
+                    "id": "drive.drives.unhide",
+                    "parameterOrder": [
+                        "driveId"
+                    ],
+                    "parameters": {
+                        "driveId": {
+                            "description": "The ID of the shared drive.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "drives/{driveId}/unhide",
+                    "response": {
+                        "$ref": "Drive"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive"
+                    ]
+                },
+                "update": {
+                    "description": "Updates the metadate for a shared drive.",
+                    "httpMethod": "PATCH",
+                    "id": "drive.drives.update",
+                    "parameterOrder": [
+                        "driveId"
+                    ],
+                    "parameters": {
+                        "driveId": {
+                            "description": "The ID of the shared drive.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the shared drive belongs.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "drives/{driveId}",
+                    "request": {
+                        "$ref": "Drive"
+                    },
+                    "response": {
+                        "$ref": "Drive"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive"
+                    ]
+                }
+            }
+        },
+        "files": {
+            "methods": {
+                "copy": {
+                    "description": "Creates a copy of a file and applies any requested updates with patch semantics. Folders cannot be copied.",
+                    "httpMethod": "POST",
+                    "id": "drive.files.copy",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "enforceSingleParent": {
+                            "default": "false",
+                            "description": "Deprecated. Copying files into multiple folders is no longer supported. Use shortcuts instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "ignoreDefaultVisibility": {
+                            "default": "false",
+                            "description": "Whether to ignore the domain's default visibility settings for the created file. Domain administrators can choose to make all uploaded files visible to the domain by default; this parameter bypasses that behavior for the request. Permissions are still inherited from parent folders.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "keepRevisionForever": {
+                            "default": "false",
+                            "description": "Whether to set the 'keepForever' field in the new head revision. This is only applicable to files with binary content in Google Drive. Only 200 revisions for the file can be kept forever. If the limit is reached, try deleting pinned revisions.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ocrLanguage": {
+                            "description": "A language hint for OCR processing during image import (ISO 639-1 code).",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}/copy",
+                    "request": {
+                        "$ref": "File"
+                    },
+                    "response": {
+                        "$ref": "File"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.photos.readonly"
+                    ]
+                },
+                "create": {
+                    "description": "Creates a new file.",
+                    "httpMethod": "POST",
+                    "id": "drive.files.create",
+                    "mediaUpload": {
+                        "accept": [
+                            "*/*"
+                        ],
+                        "maxSize": "5120GB",
+                        "protocols": {
+                            "resumable": {
+                                "multipart": true,
+                                "path": "/resumable/upload/drive/v3/files"
+                            },
+                            "simple": {
+                                "multipart": true,
+                                "path": "/upload/drive/v3/files"
+                            }
+                        }
+                    },
+                    "parameters": {
+                        "enforceSingleParent": {
+                            "default": "false",
+                            "description": "Deprecated. Creating files in multiple folders is no longer supported.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ignoreDefaultVisibility": {
+                            "default": "false",
+                            "description": "Whether to ignore the domain's default visibility settings for the created file. Domain administrators can choose to make all uploaded files visible to the domain by default; this parameter bypasses that behavior for the request. Permissions are still inherited from parent folders.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "keepRevisionForever": {
+                            "default": "false",
+                            "description": "Whether to set the 'keepForever' field in the new head revision. This is only applicable to files with binary content in Google Drive. Only 200 revisions for the file can be kept forever. If the limit is reached, try deleting pinned revisions.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ocrLanguage": {
+                            "description": "A language hint for OCR processing during image import (ISO 639-1 code).",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "useContentAsIndexableText": {
+                            "default": "false",
+                            "description": "Whether to use the uploaded content as indexable text.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files",
+                    "request": {
+                        "$ref": "File"
+                    },
+                    "response": {
+                        "$ref": "File"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ],
+                    "supportsMediaUpload": true,
+                    "supportsSubscription": true
+                },
+                "delete": {
+                    "description": "Permanently deletes a file owned by the user without moving it to the trash. If the file belongs to a shared drive the user must be an organizer on the parent. If the target is a folder, all descendants owned by the user are also deleted.",
+                    "httpMethod": "DELETE",
+                    "id": "drive.files.delete",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "enforceSingleParent": {
+                            "default": "false",
+                            "description": "Deprecated. If an item is not in a shared drive and its last parent is deleted but the item itself is not, the item will be placed under its owner's root.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "emptyTrash": {
+                    "description": "Permanently deletes all of the user's trashed files.",
+                    "httpMethod": "DELETE",
+                    "id": "drive.files.emptyTrash",
+                    "parameters": {
+                        "enforceSingleParent": {
+                            "default": "false",
+                            "description": "Deprecated. If an item is not in a shared drive and its last parent is deleted but the item itself is not, the item will be placed under its owner's root.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/trash",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive"
+                    ]
+                },
+                "export": {
+                    "description": "Exports a Google Doc to the requested MIME type and returns the exported content. Please note that the exported content is limited to 10MB.",
+                    "httpMethod": "GET",
+                    "id": "drive.files.export",
+                    "parameterOrder": [
+                        "fileId",
+                        "mimeType"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "mimeType": {
+                            "description": "The MIME type of the format requested for this export.",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/export",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ],
+                    "supportsMediaDownload": true
+                },
+                "generateIds": {
+                    "description": "Generates a set of file IDs which can be provided in create or copy requests.",
+                    "httpMethod": "GET",
+                    "id": "drive.files.generateIds",
+                    "parameters": {
+                        "count": {
+                            "default": "10",
+                            "description": "The number of IDs to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "1",
+                            "type": "integer"
+                        },
+                        "space": {
+                            "default": "drive",
+                            "description": "The space in which the IDs can be used to create new files. Supported values are 'drive' and 'appDataFolder'.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/generateIds",
+                    "response": {
+                        "$ref": "GeneratedIds"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "get": {
+                    "description": "Gets a file's metadata or content by ID.",
+                    "httpMethod": "GET",
+                    "id": "drive.files.get",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "acknowledgeAbuse": {
+                            "default": "false",
+                            "description": "Whether the user is acknowledging the risk of downloading known malware or other abusive files. This is only applicable when alt=media.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}",
+                    "response": {
+                        "$ref": "File"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ],
+                    "supportsMediaDownload": true,
+                    "supportsSubscription": true,
+                    "useMediaDownloadService": true
+                },
+                "list": {
+                    "description": "Lists or searches files.",
+                    "httpMethod": "GET",
+                    "id": "drive.files.list",
+                    "parameters": {
+                        "corpora": {
+                            "description": "Groupings of files to which the query applies. Supported groupings are: 'user' (files created by, opened by, or shared directly with the user), 'drive' (files in the specified shared drive as indicated by the 'driveId'), 'domain' (files shared to the user's domain), and 'allDrives' (A combination of 'user' and 'drive' for all drives where the user is a member). When able, use 'user' or 'drive', instead of 'allDrives', for efficiency.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "corpus": {
+                            "description": "The source of files to list. Deprecated: use 'corpora' instead.",
+                            "enum": [
+                                "domain",
+                                "user"
+                            ],
+                            "enumDescriptions": [
+                                "Files shared to the user's domain.",
+                                "Files owned by or shared to the user. If a user has permissions on a Shared Drive, the files inside it won't be retrieved unless the user has created, opened, or shared the file."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "driveId": {
+                            "description": "ID of the shared drive to search.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "includeItemsFromAllDrives": {
+                            "default": "false",
+                            "description": "Whether both My Drive and shared drive items should be included in results.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "includeTeamDriveItems": {
+                            "default": "false",
+                            "description": "Deprecated use includeItemsFromAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "orderBy": {
+                            "description": "A comma-separated list of sort keys. Valid keys are 'createdTime', 'folder', 'modifiedByMeTime', 'modifiedTime', 'name', 'name_natural', 'quotaBytesUsed', 'recency', 'sharedWithMeTime', 'starred', and 'viewedByMeTime'. Each key sorts ascending by default, but may be reversed with the 'desc' modifier. Example usage: ?orderBy=folder,modifiedTime desc,name. Please note that there is a current limitation for users with approximately one million files in which the requested sort order is ignored.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageSize": {
+                            "default": "100",
+                            "description": "The maximum number of files to return per page. Partial or empty result pages are possible even before the end of the files list has been reached.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "1",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "q": {
+                            "description": "A query for filtering the file results. See the \"Search for Files\" guide for supported syntax.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "spaces": {
+                            "default": "drive",
+                            "description": "A comma-separated list of spaces to query within the corpus. Supported values are 'drive', 'appDataFolder' and 'photos'.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "teamDriveId": {
+                            "description": "Deprecated use driveId instead.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "files",
+                    "response": {
+                        "$ref": "FileList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "update": {
+                    "description": "Updates a file's metadata and/or content. This method supports patch semantics.",
+                    "httpMethod": "PATCH",
+                    "id": "drive.files.update",
+                    "mediaUpload": {
+                        "accept": [
+                            "*/*"
+                        ],
+                        "maxSize": "5120GB",
+                        "protocols": {
+                            "resumable": {
+                                "multipart": true,
+                                "path": "/resumable/upload/drive/v3/files/{fileId}"
+                            },
+                            "simple": {
+                                "multipart": true,
+                                "path": "/upload/drive/v3/files/{fileId}"
+                            }
+                        }
+                    },
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "addParents": {
+                            "description": "A comma-separated list of parent IDs to add.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "enforceSingleParent": {
+                            "default": "false",
+                            "description": "Deprecated. Adding files to multiple folders is no longer supported. Use shortcuts instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "keepRevisionForever": {
+                            "default": "false",
+                            "description": "Whether to set the 'keepForever' field in the new head revision. This is only applicable to files with binary content in Google Drive. Only 200 revisions for the file can be kept forever. If the limit is reached, try deleting pinned revisions.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "ocrLanguage": {
+                            "description": "A language hint for OCR processing during image import (ISO 639-1 code).",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "removeParents": {
+                            "description": "A comma-separated list of parent IDs to remove.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "useContentAsIndexableText": {
+                            "default": "false",
+                            "description": "Whether to use the uploaded content as indexable text.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}",
+                    "request": {
+                        "$ref": "File"
+                    },
+                    "response": {
+                        "$ref": "File"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.scripts"
+                    ],
+                    "supportsMediaUpload": true
+                },
+                "watch": {
+                    "description": "Subscribes to changes to a file",
+                    "httpMethod": "POST",
+                    "id": "drive.files.watch",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "acknowledgeAbuse": {
+                            "default": "false",
+                            "description": "Whether the user is acknowledging the risk of downloading known malware or other abusive files. This is only applicable when alt=media.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}/watch",
+                    "request": {
+                        "$ref": "Channel",
+                        "parameterName": "resource"
+                    },
+                    "response": {
+                        "$ref": "Channel"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ],
+                    "supportsMediaDownload": true,
+                    "supportsSubscription": true,
+                    "useMediaDownloadService": true
+                }
+            }
+        },
+        "permissions": {
+            "methods": {
+                "create": {
+                    "description": "Creates a permission for a file or shared drive.",
+                    "httpMethod": "POST",
+                    "id": "drive.permissions.create",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "emailMessage": {
+                            "description": "A plain text custom message to include in the notification email.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "enforceSingleParent": {
+                            "default": "false",
+                            "description": "Deprecated. See moveToNewOwnersRoot for details.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file or shared drive.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "moveToNewOwnersRoot": {
+                            "default": "false",
+                            "description": "This parameter will only take effect if the item is not in a shared drive and the request is attempting to transfer the ownership of the item. If set to true, the item will be moved to the new owner's My Drive root folder and all prior parents removed. If set to false, parents are not changed.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "sendNotificationEmail": {
+                            "description": "Whether to send a notification email when sharing to users or groups. This defaults to true for users and groups, and is not allowed for other requests. It must not be disabled for ownership transfers.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "transferOwnership": {
+                            "default": "false",
+                            "description": "Whether to transfer ownership to the specified user and downgrade the current owner to a writer. This parameter is required as an acknowledgement of the side effect.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}/permissions",
+                    "request": {
+                        "$ref": "Permission"
+                    },
+                    "response": {
+                        "$ref": "Permission"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "delete": {
+                    "description": "Deletes a permission.",
+                    "httpMethod": "DELETE",
+                    "id": "drive.permissions.delete",
+                    "parameterOrder": [
+                        "fileId",
+                        "permissionId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file or shared drive.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "permissionId": {
+                            "description": "The ID of the permission.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}/permissions/{permissionId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "get": {
+                    "description": "Gets a permission by ID.",
+                    "httpMethod": "GET",
+                    "id": "drive.permissions.get",
+                    "parameterOrder": [
+                        "fileId",
+                        "permissionId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "permissionId": {
+                            "description": "The ID of the permission.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}/permissions/{permissionId}",
+                    "response": {
+                        "$ref": "Permission"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "list": {
+                    "description": "Lists a file's or shared drive's permissions.",
+                    "httpMethod": "GET",
+                    "id": "drive.permissions.list",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file or shared drive.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includePermissionsForView": {
+                            "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageSize": {
+                            "description": "The maximum number of permissions to return per page. When not set for files in a shared drive, at most 100 results will be returned. When not set for files that are not in a shared drive, the entire list will be returned.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "100",
+                            "minimum": "1",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}/permissions",
+                    "response": {
+                        "$ref": "PermissionList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "update": {
+                    "description": "Updates a permission with patch semantics.",
+                    "httpMethod": "PATCH",
+                    "id": "drive.permissions.update",
+                    "parameterOrder": [
+                        "fileId",
+                        "permissionId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file or shared drive.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "permissionId": {
+                            "description": "The ID of the permission.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "removeExpiration": {
+                            "default": "false",
+                            "description": "Whether to remove the expiration date.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsAllDrives": {
+                            "default": "false",
+                            "description": "Whether the requesting application supports both My Drives and shared drives.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "supportsTeamDrives": {
+                            "default": "false",
+                            "description": "Deprecated use supportsAllDrives instead.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "transferOwnership": {
+                            "default": "false",
+                            "description": "Whether to transfer ownership to the specified user and downgrade the current owner to a writer. This parameter is required as an acknowledgement of the side effect.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "files/{fileId}/permissions/{permissionId}",
+                    "request": {
+                        "$ref": "Permission"
+                    },
+                    "response": {
+                        "$ref": "Permission"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                }
+            }
+        },
+        "replies": {
+            "methods": {
+                "create": {
+                    "description": "Creates a new reply to a comment.",
+                    "httpMethod": "POST",
+                    "id": "drive.replies.create",
+                    "parameterOrder": [
+                        "fileId",
+                        "commentId"
+                    ],
+                    "parameters": {
+                        "commentId": {
+                            "description": "The ID of the comment.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/comments/{commentId}/replies",
+                    "request": {
+                        "$ref": "Reply"
+                    },
+                    "response": {
+                        "$ref": "Reply"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "delete": {
+                    "description": "Deletes a reply.",
+                    "httpMethod": "DELETE",
+                    "id": "drive.replies.delete",
+                    "parameterOrder": [
+                        "fileId",
+                        "commentId",
+                        "replyId"
+                    ],
+                    "parameters": {
+                        "commentId": {
+                            "description": "The ID of the comment.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "replyId": {
+                            "description": "The ID of the reply.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/comments/{commentId}/replies/{replyId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "get": {
+                    "description": "Gets a reply by ID.",
+                    "httpMethod": "GET",
+                    "id": "drive.replies.get",
+                    "parameterOrder": [
+                        "fileId",
+                        "commentId",
+                        "replyId"
+                    ],
+                    "parameters": {
+                        "commentId": {
+                            "description": "The ID of the comment.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includeDeleted": {
+                            "default": "false",
+                            "description": "Whether to return deleted replies. Deleted replies will not include their original content.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "replyId": {
+                            "description": "The ID of the reply.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/comments/{commentId}/replies/{replyId}",
+                    "response": {
+                        "$ref": "Reply"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "list": {
+                    "description": "Lists a comment's replies.",
+                    "httpMethod": "GET",
+                    "id": "drive.replies.list",
+                    "parameterOrder": [
+                        "fileId",
+                        "commentId"
+                    ],
+                    "parameters": {
+                        "commentId": {
+                            "description": "The ID of the comment.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "includeDeleted": {
+                            "default": "false",
+                            "description": "Whether to include deleted replies. Deleted replies will not include their original content.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "pageSize": {
+                            "default": "20",
+                            "description": "The maximum number of replies to return per page.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "100",
+                            "minimum": "1",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/comments/{commentId}/replies",
+                    "response": {
+                        "$ref": "ReplyList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "update": {
+                    "description": "Updates a reply with patch semantics.",
+                    "httpMethod": "PATCH",
+                    "id": "drive.replies.update",
+                    "parameterOrder": [
+                        "fileId",
+                        "commentId",
+                        "replyId"
+                    ],
+                    "parameters": {
+                        "commentId": {
+                            "description": "The ID of the comment.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "replyId": {
+                            "description": "The ID of the reply.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/comments/{commentId}/replies/{replyId}",
+                    "request": {
+                        "$ref": "Reply"
+                    },
+                    "response": {
+                        "$ref": "Reply"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                }
+            }
+        },
+        "revisions": {
+            "methods": {
+                "delete": {
+                    "description": "Permanently deletes a file version. You can only delete revisions for files with binary content in Google Drive, like images or videos. Revisions for other files, like Google Docs or Sheets, and the last remaining file version can't be deleted.",
+                    "httpMethod": "DELETE",
+                    "id": "drive.revisions.delete",
+                    "parameterOrder": [
+                        "fileId",
+                        "revisionId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "revisionId": {
+                            "description": "The ID of the revision.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/revisions/{revisionId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                },
+                "get": {
+                    "description": "Gets a revision's metadata or content by ID.",
+                    "httpMethod": "GET",
+                    "id": "drive.revisions.get",
+                    "parameterOrder": [
+                        "fileId",
+                        "revisionId"
+                    ],
+                    "parameters": {
+                        "acknowledgeAbuse": {
+                            "default": "false",
+                            "description": "Whether the user is acknowledging the risk of downloading known malware or other abusive files. This is only applicable when alt=media.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "revisionId": {
+                            "description": "The ID of the revision.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/revisions/{revisionId}",
+                    "response": {
+                        "$ref": "Revision"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ],
+                    "supportsMediaDownload": true,
+                    "useMediaDownloadService": true
+                },
+                "list": {
+                    "description": "Lists a file's revisions.",
+                    "httpMethod": "GET",
+                    "id": "drive.revisions.list",
+                    "parameterOrder": [
+                        "fileId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "pageSize": {
+                            "default": "200",
+                            "description": "The maximum number of revisions to return per page.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "1000",
+                            "minimum": "1",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/revisions",
+                    "response": {
+                        "$ref": "RevisionList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file",
+                        "https://www.googleapis.com/auth/drive.metadata",
+                        "https://www.googleapis.com/auth/drive.metadata.readonly",
+                        "https://www.googleapis.com/auth/drive.photos.readonly",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "update": {
+                    "description": "Updates a revision with patch semantics.",
+                    "httpMethod": "PATCH",
+                    "id": "drive.revisions.update",
+                    "parameterOrder": [
+                        "fileId",
+                        "revisionId"
+                    ],
+                    "parameters": {
+                        "fileId": {
+                            "description": "The ID of the file.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "revisionId": {
+                            "description": "The ID of the revision.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "files/{fileId}/revisions/{revisionId}",
+                    "request": {
+                        "$ref": "Revision"
+                    },
+                    "response": {
+                        "$ref": "Revision"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.appdata",
+                        "https://www.googleapis.com/auth/drive.file"
+                    ]
+                }
+            }
+        },
+        "teamdrives": {
+            "methods": {
+                "create": {
+                    "description": "Deprecated use drives.create instead.",
+                    "httpMethod": "POST",
+                    "id": "drive.teamdrives.create",
+                    "parameterOrder": [
+                        "requestId"
+                    ],
+                    "parameters": {
+                        "requestId": {
+                            "description": "An ID, such as a random UUID, which uniquely identifies this user's request for idempotent creation of a Team Drive. A repeated request by the same user and with the same request ID will avoid creating duplicates by attempting to create the same Team Drive. If the Team Drive already exists a 409 error will be returned.",
+                            "location": "query",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "teamdrives",
+                    "request": {
+                        "$ref": "TeamDrive"
+                    },
+                    "response": {
+                        "$ref": "TeamDrive"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive"
+                    ]
+                },
+                "delete": {
+                    "description": "Deprecated use drives.delete instead.",
+                    "httpMethod": "DELETE",
+                    "id": "drive.teamdrives.delete",
+                    "parameterOrder": [
+                        "teamDriveId"
+                    ],
+                    "parameters": {
+                        "teamDriveId": {
+                            "description": "The ID of the Team Drive",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "teamdrives/{teamDriveId}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive"
+                    ]
+                },
+                "get": {
+                    "description": "Deprecated use drives.get instead.",
+                    "httpMethod": "GET",
+                    "id": "drive.teamdrives.get",
+                    "parameterOrder": [
+                        "teamDriveId"
+                    ],
+                    "parameters": {
+                        "teamDriveId": {
+                            "description": "The ID of the Team Drive",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the Team Drive belongs.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "teamdrives/{teamDriveId}",
+                    "response": {
+                        "$ref": "TeamDrive"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "list": {
+                    "description": "Deprecated use drives.list instead.",
+                    "httpMethod": "GET",
+                    "id": "drive.teamdrives.list",
+                    "parameters": {
+                        "pageSize": {
+                            "default": "10",
+                            "description": "Maximum number of Team Drives to return.",
+                            "format": "int32",
+                            "location": "query",
+                            "maximum": "100",
+                            "minimum": "1",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Page token for Team Drives.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "q": {
+                            "description": "Query string for searching Team Drives.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then all Team Drives of the domain in which the requester is an administrator are returned.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "teamdrives",
+                    "response": {
+                        "$ref": "TeamDriveList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/drive.readonly"
+                    ]
+                },
+                "update": {
+                    "description": "Deprecated use drives.update instead",
+                    "httpMethod": "PATCH",
+                    "id": "drive.teamdrives.update",
+                    "parameterOrder": [
+                        "teamDriveId"
+                    ],
+                    "parameters": {
+                        "teamDriveId": {
+                            "description": "The ID of the Team Drive",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "useDomainAdminAccess": {
+                            "default": "false",
+                            "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the Team Drive belongs.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "teamdrives/{teamDriveId}",
+                    "request": {
+                        "$ref": "TeamDrive"
+                    },
+                    "response": {
+                        "$ref": "TeamDrive"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/drive"
+                    ]
+                }
+            }
+        }
     },
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#file\".",
-     "default": "drive#file"
-    },
-    "lastModifyingUser": {
-     "$ref": "User",
-     "description": "The last user to modify the file."
-    },
-    "md5Checksum": {
-     "type": "string",
-     "description": "The MD5 checksum for the content of the file. This is only applicable to files with binary content in Google Drive."
-    },
-    "mimeType": {
-     "type": "string",
-     "description": "The MIME type of the file.\nGoogle Drive will attempt to automatically detect an appropriate value from uploaded content if no value is provided. The value cannot be changed unless a new revision is uploaded.\nIf a file is created with a Google Doc MIME type, the uploaded content will be imported if possible. The supported import formats are published in the About resource."
-    },
-    "modifiedByMe": {
-     "type": "boolean",
-     "description": "Whether the file has been modified by this user."
-    },
-    "modifiedByMeTime": {
-     "type": "string",
-     "description": "The last time the file was modified by the user (RFC 3339 date-time).",
-     "format": "date-time"
-    },
-    "modifiedTime": {
-     "type": "string",
-     "description": "The last time the file was modified by anyone (RFC 3339 date-time).\nNote that setting modifiedTime will also update modifiedByMeTime for the user.",
-     "format": "date-time"
-    },
-    "name": {
-     "type": "string",
-     "description": "The name of the file. This is not necessarily unique within a folder. Note that for immutable items such as the top level folders of shared drives, My Drive root folder, and Application Data folder the name is constant."
-    },
-    "originalFilename": {
-     "type": "string",
-     "description": "The original filename of the uploaded content if available, or else the original value of the name field. This is only available for files with binary content in Google Drive."
-    },
-    "ownedByMe": {
-     "type": "boolean",
-     "description": "Whether the user owns the file. Not populated for items in shared drives."
-    },
-    "owners": {
-     "type": "array",
-     "description": "The owners of the file. Currently, only certain legacy files may have more than one owner. Not populated for items in shared drives.",
-     "items": {
-      "$ref": "User"
-     }
-    },
-    "parents": {
-     "type": "array",
-     "description": "The IDs of the parent folders which contain the file.\nIf not specified as part of a create request, the file will be placed directly in the user's My Drive folder. If not specified as part of a copy request, the file will inherit any discoverable parents of the source file. Update requests must use the addParents and removeParents parameters to modify the parents list.",
-     "items": {
-      "type": "string"
-     }
-    },
-    "permissionIds": {
-     "type": "array",
-     "description": "List of permission IDs for users with access to this file.",
-     "items": {
-      "type": "string"
-     }
-    },
-    "permissions": {
-     "type": "array",
-     "description": "The full list of permissions for the file. This is only available if the requesting user can share the file. Not populated for items in shared drives.",
-     "items": {
-      "$ref": "Permission"
-     }
-    },
-    "properties": {
-     "type": "object",
-     "description": "A collection of arbitrary key-value pairs which are visible to all apps.\nEntries with null values are cleared in update and copy requests.",
-     "additionalProperties": {
-      "type": "string"
-     }
-    },
-    "quotaBytesUsed": {
-     "type": "string",
-     "description": "The number of storage quota bytes used by the file. This includes the head revision as well as previous revisions with keepForever enabled.",
-     "format": "int64"
-    },
-    "shared": {
-     "type": "boolean",
-     "description": "Whether the file has been shared. Not populated for items in shared drives."
-    },
-    "sharedWithMeTime": {
-     "type": "string",
-     "description": "The time at which the file was shared with the user, if applicable (RFC 3339 date-time).",
-     "format": "date-time"
-    },
-    "sharingUser": {
-     "$ref": "User",
-     "description": "The user who shared the file with the requesting user, if applicable."
-    },
-    "shortcutDetails": {
-     "type": "object",
-     "description": "Shortcut file details. Only populated for shortcut files, which have the mimeType field set to application/vnd.google-apps.shortcut.",
-     "properties": {
-      "targetId": {
-       "type": "string",
-       "description": "The ID of the file that this shortcut points to."
-      },
-      "targetMimeType": {
-       "type": "string",
-       "description": "The MIME type of the file that this shortcut points to. The value of this field is a snapshot of the target's MIME type, captured when the shortcut is created."
-      }
-     }
-    },
-    "size": {
-     "type": "string",
-     "description": "The size of the file's content in bytes. This is applicable to binary files in Google Drive and Google Docs files.",
-     "format": "int64"
-    },
-    "spaces": {
-     "type": "array",
-     "description": "The list of spaces which contain the file. The currently supported values are 'drive', 'appDataFolder' and 'photos'.",
-     "items": {
-      "type": "string"
-     }
-    },
-    "starred": {
-     "type": "boolean",
-     "description": "Whether the user has starred the file."
-    },
-    "teamDriveId": {
-     "type": "string",
-     "description": "Deprecated - use driveId instead."
-    },
-    "thumbnailLink": {
-     "type": "string",
-     "description": "A short-lived link to the file's thumbnail, if available. Typically lasts on the order of hours. Only populated when the requesting app can access the file's content. If the file isn't shared publicly, the URL returned in Files.thumbnailLink must be fetched using a credentialed request."
-    },
-    "thumbnailVersion": {
-     "type": "string",
-     "description": "The thumbnail version for use in thumbnail cache invalidation.",
-     "format": "int64"
-    },
-    "trashed": {
-     "type": "boolean",
-     "description": "Whether the file has been trashed, either explicitly or from a trashed parent folder. Only the owner may trash a file. The trashed item is excluded from all files.list responses returned for any user who does not own the file. However, all users with access to the file can see the trashed item metadata in an API response. All users with access can copy, download, export, and share the file."
-    },
-    "trashedTime": {
-     "type": "string",
-     "description": "The time that the item was trashed (RFC 3339 date-time). Only populated for items in shared drives.",
-     "format": "date-time"
-    },
-    "trashingUser": {
-     "$ref": "User",
-     "description": "If the file has been explicitly trashed, the user who trashed it. Only populated for items in shared drives."
-    },
-    "version": {
-     "type": "string",
-     "description": "A monotonically increasing version number for the file. This reflects every change made to the file on the server, even those not visible to the user.",
-     "format": "int64"
-    },
-    "videoMediaMetadata": {
-     "type": "object",
-     "description": "Additional metadata about video media. This may not be available immediately upon upload.",
-     "properties": {
-      "durationMillis": {
-       "type": "string",
-       "description": "The duration of the video in milliseconds.",
-       "format": "int64"
-      },
-      "height": {
-       "type": "integer",
-       "description": "The height of the video in pixels.",
-       "format": "int32"
-      },
-      "width": {
-       "type": "integer",
-       "description": "The width of the video in pixels.",
-       "format": "int32"
-      }
-     }
-    },
-    "viewedByMe": {
-     "type": "boolean",
-     "description": "Whether the file has been viewed by this user."
-    },
-    "viewedByMeTime": {
-     "type": "string",
-     "description": "The last time the file was viewed by the user (RFC 3339 date-time).",
-     "format": "date-time"
-    },
-    "viewersCanCopyContent": {
-     "type": "boolean",
-     "description": "Deprecated - use copyRequiresWriterPermission instead."
-    },
-    "webContentLink": {
-     "type": "string",
-     "description": "A link for downloading the content of the file in a browser. This is only available for files with binary content in Google Drive."
-    },
-    "webViewLink": {
-     "type": "string",
-     "description": "A link for opening the file in a relevant Google editor or viewer in a browser."
-    },
-    "writersCanShare": {
-     "type": "boolean",
-     "description": "Whether users with only writer permission can modify the file's permissions. Not populated for items in shared drives."
-    }
-   }
-  },
-  "FileList": {
-   "id": "FileList",
-   "type": "object",
-   "description": "A list of files.",
-   "properties": {
-    "files": {
-     "type": "array",
-     "description": "The list of files. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
-     "items": {
-      "$ref": "File"
-     }
-    },
-    "incompleteSearch": {
-     "type": "boolean",
-     "description": "Whether the search process was incomplete. If true, then some search results may be missing, since all documents were not searched. This may occur when searching multiple drives with the \"allDrives\" corpora, but all corpora could not be searched. When this happens, it is suggested that clients narrow their query by choosing a different corpus such as \"user\" or \"drive\"."
-    },
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#fileList\".",
-     "default": "drive#fileList"
-    },
-    "nextPageToken": {
-     "type": "string",
-     "description": "The page token for the next page of files. This will be absent if the end of the files list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results."
-    }
-   }
-  },
-  "GeneratedIds": {
-   "id": "GeneratedIds",
-   "type": "object",
-   "description": "A list of generated file IDs which can be provided in create requests.",
-   "properties": {
-    "ids": {
-     "type": "array",
-     "description": "The IDs generated for the requesting user in the specified space.",
-     "items": {
-      "type": "string"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#generatedIds\".",
-     "default": "drive#generatedIds"
-    },
-    "space": {
-     "type": "string",
-     "description": "The type of file that can be created with these IDs."
-    }
-   }
-  },
-  "Permission": {
-   "id": "Permission",
-   "type": "object",
-   "description": "A permission for a file. A permission grants a user, group, domain or the world access to a file or a folder hierarchy.",
-   "properties": {
-    "allowFileDiscovery": {
-     "type": "boolean",
-     "description": "Whether the permission allows the file to be discovered through search. This is only applicable for permissions of type domain or anyone."
-    },
-    "deleted": {
-     "type": "boolean",
-     "description": "Whether the account associated with this permission has been deleted. This field only pertains to user and group permissions."
-    },
-    "displayName": {
-     "type": "string",
-     "description": "The \"pretty\" name of the value of the permission. The following is a list of examples for each type of permission:  \n- user - User's full name, as defined for their Google account, such as \"Joe Smith.\" \n- group - Name of the Google Group, such as \"The Company Administrators.\" \n- domain - String domain name, such as \"thecompany.com.\" \n- anyone - No displayName is present."
-    },
-    "domain": {
-     "type": "string",
-     "description": "The domain to which this permission refers."
-    },
-    "emailAddress": {
-     "type": "string",
-     "description": "The email address of the user or group to which this permission refers."
-    },
-    "expirationTime": {
-     "type": "string",
-     "description": "The time at which this permission will expire (RFC 3339 date-time). Expiration times have the following restrictions:  \n- They can only be set on user and group permissions \n- The time must be in the future \n- The time cannot be more than a year in the future",
-     "format": "date-time"
-    },
-    "id": {
-     "type": "string",
-     "description": "The ID of this permission. This is a unique identifier for the grantee, and is published in User resources as permissionId. IDs should be treated as opaque values."
-    },
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#permission\".",
-     "default": "drive#permission"
-    },
-    "permissionDetails": {
-     "type": "array",
-     "description": "Details of whether the permissions on this shared drive item are inherited or directly on this item. This is an output-only field which is present only for shared drive items.",
-     "items": {
-      "type": "object",
-      "properties": {
-       "inherited": {
-        "type": "boolean",
-        "description": "Whether this permission is inherited. This field is always populated. This is an output-only field."
-       },
-       "inheritedFrom": {
-        "type": "string",
-        "description": "The ID of the item from which this permission is inherited. This is an output-only field."
-       },
-       "permissionType": {
-        "type": "string",
-        "description": "The permission type for this user. While new values may be added in future, the following are currently possible:  \n- file \n- member"
-       },
-       "role": {
-        "type": "string",
-        "description": "The primary role for this user. While new values may be added in the future, the following are currently possible:  \n- organizer \n- fileOrganizer \n- writer \n- commenter \n- reader"
-       }
-      }
-     }
-    },
-    "photoLink": {
-     "type": "string",
-     "description": "A link to the user's profile photo, if available."
-    },
-    "role": {
-     "type": "string",
-     "description": "The role granted by this permission. While new values may be supported in the future, the following are currently allowed:  \n- owner \n- organizer \n- fileOrganizer \n- writer \n- commenter \n- reader",
-     "annotations": {
-      "required": [
-       "drive.permissions.create"
-      ]
-     }
-    },
-    "teamDrivePermissionDetails": {
-     "type": "array",
-     "description": "Deprecated - use permissionDetails instead.",
-     "items": {
-      "type": "object",
-      "properties": {
-       "inherited": {
-        "type": "boolean",
-        "description": "Deprecated - use permissionDetails/inherited instead."
-       },
-       "inheritedFrom": {
-        "type": "string",
-        "description": "Deprecated - use permissionDetails/inheritedFrom instead."
-       },
-       "role": {
-        "type": "string",
-        "description": "Deprecated - use permissionDetails/role instead."
-       },
-       "teamDrivePermissionType": {
-        "type": "string",
-        "description": "Deprecated - use permissionDetails/permissionType instead."
-       }
-      }
-     }
-    },
-    "type": {
-     "type": "string",
-     "description": "The type of the grantee. Valid values are:  \n- user \n- group \n- domain \n- anyone  When creating a permission, if type is user or group, you must provide an emailAddress for the user or group. When type is domain, you must provide a domain. There isn't extra information required for a anyone type.",
-     "annotations": {
-      "required": [
-       "drive.permissions.create"
-      ]
-     }
-    },
-    "view": {
-     "type": "string",
-     "description": "Indicates the view for this permission. Only populated for permissions that belong to a view. published is the only supported value."
-    }
-   }
-  },
-  "PermissionList": {
-   "id": "PermissionList",
-   "type": "object",
-   "description": "A list of permissions for a file.",
-   "properties": {
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#permissionList\".",
-     "default": "drive#permissionList"
-    },
-    "nextPageToken": {
-     "type": "string",
-     "description": "The page token for the next page of permissions. This field will be absent if the end of the permissions list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results."
-    },
-    "permissions": {
-     "type": "array",
-     "description": "The list of permissions. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
-     "items": {
-      "$ref": "Permission"
-     }
-    }
-   }
-  },
-  "Reply": {
-   "id": "Reply",
-   "type": "object",
-   "description": "A reply to a comment on a file.",
-   "properties": {
-    "action": {
-     "type": "string",
-     "description": "The action the reply performed to the parent comment. Valid values are:  \n- resolve \n- reopen"
-    },
-    "author": {
-     "$ref": "User",
-     "description": "The author of the reply. The author's email address and permission ID will not be populated."
-    },
-    "content": {
-     "type": "string",
-     "description": "The plain text content of the reply. This field is used for setting the content, while htmlContent should be displayed. This is required on creates if no action is specified.",
-     "annotations": {
-      "required": [
-       "drive.replies.update"
-      ]
-     }
-    },
-    "createdTime": {
-     "type": "string",
-     "description": "The time at which the reply was created (RFC 3339 date-time).",
-     "format": "date-time"
-    },
-    "deleted": {
-     "type": "boolean",
-     "description": "Whether the reply has been deleted. A deleted reply has no content."
-    },
-    "htmlContent": {
-     "type": "string",
-     "description": "The content of the reply with HTML formatting."
-    },
-    "id": {
-     "type": "string",
-     "description": "The ID of the reply."
-    },
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#reply\".",
-     "default": "drive#reply"
-    },
-    "modifiedTime": {
-     "type": "string",
-     "description": "The last time the reply was modified (RFC 3339 date-time).",
-     "format": "date-time"
-    }
-   }
-  },
-  "ReplyList": {
-   "id": "ReplyList",
-   "type": "object",
-   "description": "A list of replies to a comment on a file.",
-   "properties": {
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#replyList\".",
-     "default": "drive#replyList"
-    },
-    "nextPageToken": {
-     "type": "string",
-     "description": "The page token for the next page of replies. This will be absent if the end of the replies list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results."
-    },
-    "replies": {
-     "type": "array",
-     "description": "The list of replies. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
-     "items": {
-      "$ref": "Reply"
-     }
-    }
-   }
-  },
-  "Revision": {
-   "id": "Revision",
-   "type": "object",
-   "description": "The metadata for a revision to a file.",
-   "properties": {
-    "exportLinks": {
-     "type": "object",
-     "description": "Links for exporting Docs Editors files to specific formats.",
-     "additionalProperties": {
-      "type": "string",
-      "description": "A mapping from export format to URL"
-     }
-    },
-    "id": {
-     "type": "string",
-     "description": "The ID of the revision."
-    },
-    "keepForever": {
-     "type": "boolean",
-     "description": "Whether to keep this revision forever, even if it is no longer the head revision. If not set, the revision will be automatically purged 30 days after newer content is uploaded. This can be set on a maximum of 200 revisions for a file.\nThis field is only applicable to files with binary content in Drive."
-    },
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#revision\".",
-     "default": "drive#revision"
-    },
-    "lastModifyingUser": {
-     "$ref": "User",
-     "description": "The last user to modify this revision."
-    },
-    "md5Checksum": {
-     "type": "string",
-     "description": "The MD5 checksum of the revision's content. This is only applicable to files with binary content in Drive."
-    },
-    "mimeType": {
-     "type": "string",
-     "description": "The MIME type of the revision."
-    },
-    "modifiedTime": {
-     "type": "string",
-     "description": "The last time the revision was modified (RFC 3339 date-time).",
-     "format": "date-time"
-    },
-    "originalFilename": {
-     "type": "string",
-     "description": "The original filename used to create this revision. This is only applicable to files with binary content in Drive."
-    },
-    "publishAuto": {
-     "type": "boolean",
-     "description": "Whether subsequent revisions will be automatically republished. This is only applicable to Docs Editors files."
-    },
-    "published": {
-     "type": "boolean",
-     "description": "Whether this revision is published. This is only applicable to Docs Editors files."
-    },
-    "publishedLink": {
-     "type": "string",
-     "description": "A link to the published revision. This is only populated for Google Sites files."
-    },
-    "publishedOutsideDomain": {
-     "type": "boolean",
-     "description": "Whether this revision is published outside the domain. This is only applicable to Docs Editors files."
-    },
-    "size": {
-     "type": "string",
-     "description": "The size of the revision's content in bytes. This is only applicable to files with binary content in Drive.",
-     "format": "int64"
-    }
-   }
-  },
-  "RevisionList": {
-   "id": "RevisionList",
-   "type": "object",
-   "description": "A list of revisions of a file.",
-   "properties": {
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#revisionList\".",
-     "default": "drive#revisionList"
-    },
-    "nextPageToken": {
-     "type": "string",
-     "description": "The page token for the next page of revisions. This will be absent if the end of the revisions list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results."
-    },
-    "revisions": {
-     "type": "array",
-     "description": "The list of revisions. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
-     "items": {
-      "$ref": "Revision"
-     }
-    }
-   }
-  },
-  "StartPageToken": {
-   "id": "StartPageToken",
-   "type": "object",
-   "properties": {
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#startPageToken\".",
-     "default": "drive#startPageToken"
-    },
-    "startPageToken": {
-     "type": "string",
-     "description": "The starting page token for listing changes."
-    }
-   }
-  },
-  "TeamDrive": {
-   "id": "TeamDrive",
-   "type": "object",
-   "description": "Deprecated: use the drive collection instead.",
-   "properties": {
-    "backgroundImageFile": {
-     "type": "object",
-     "description": "An image file and cropping parameters from which a background image for this Team Drive is set. This is a write only field; it can only be set on drive.teamdrives.update requests that don't set themeId. When specified, all fields of the backgroundImageFile must be set.",
-     "properties": {
-      "id": {
-       "type": "string",
-       "description": "The ID of an image file in Drive to use for the background image."
-      },
-      "width": {
-       "type": "number",
-       "description": "The width of the cropped image in the closed range of 0 to 1. This value represents the width of the cropped image divided by the width of the entire image. The height is computed by applying a width to height aspect ratio of 80 to 9. The resulting image must be at least 1280 pixels wide and 144 pixels high.",
-       "format": "float"
-      },
-      "xCoordinate": {
-       "type": "number",
-       "description": "The X coordinate of the upper left corner of the cropping area in the background image. This is a value in the closed range of 0 to 1. This value represents the horizontal distance from the left side of the entire image to the left side of the cropping area divided by the width of the entire image.",
-       "format": "float"
-      },
-      "yCoordinate": {
-       "type": "number",
-       "description": "The Y coordinate of the upper left corner of the cropping area in the background image. This is a value in the closed range of 0 to 1. This value represents the vertical distance from the top side of the entire image to the top side of the cropping area divided by the height of the entire image.",
-       "format": "float"
-      }
-     }
-    },
-    "backgroundImageLink": {
-     "type": "string",
-     "description": "A short-lived link to this Team Drive's background image."
-    },
-    "capabilities": {
-     "type": "object",
-     "description": "Capabilities the current user has on this Team Drive.",
-     "properties": {
-      "canAddChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can add children to folders in this Team Drive."
-      },
-      "canChangeCopyRequiresWriterPermissionRestriction": {
-       "type": "boolean",
-       "description": "Whether the current user can change the copyRequiresWriterPermission restriction of this Team Drive."
-      },
-      "canChangeDomainUsersOnlyRestriction": {
-       "type": "boolean",
-       "description": "Whether the current user can change the domainUsersOnly restriction of this Team Drive."
-      },
-      "canChangeTeamDriveBackground": {
-       "type": "boolean",
-       "description": "Whether the current user can change the background of this Team Drive."
-      },
-      "canChangeTeamMembersOnlyRestriction": {
-       "type": "boolean",
-       "description": "Whether the current user can change the teamMembersOnly restriction of this Team Drive."
-      },
-      "canComment": {
-       "type": "boolean",
-       "description": "Whether the current user can comment on files in this Team Drive."
-      },
-      "canCopy": {
-       "type": "boolean",
-       "description": "Whether the current user can copy files in this Team Drive."
-      },
-      "canDeleteChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can delete children from folders in this Team Drive."
-      },
-      "canDeleteTeamDrive": {
-       "type": "boolean",
-       "description": "Whether the current user can delete this Team Drive. Attempting to delete the Team Drive may still fail if there are untrashed items inside the Team Drive."
-      },
-      "canDownload": {
-       "type": "boolean",
-       "description": "Whether the current user can download files in this Team Drive."
-      },
-      "canEdit": {
-       "type": "boolean",
-       "description": "Whether the current user can edit files in this Team Drive"
-      },
-      "canListChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can list the children of folders in this Team Drive."
-      },
-      "canManageMembers": {
-       "type": "boolean",
-       "description": "Whether the current user can add members to this Team Drive or remove them or change their role."
-      },
-      "canReadRevisions": {
-       "type": "boolean",
-       "description": "Whether the current user can read the revisions resource of files in this Team Drive."
-      },
-      "canRemoveChildren": {
-       "type": "boolean",
-       "description": "Deprecated - use canDeleteChildren or canTrashChildren instead."
-      },
-      "canRename": {
-       "type": "boolean",
-       "description": "Whether the current user can rename files or folders in this Team Drive."
-      },
-      "canRenameTeamDrive": {
-       "type": "boolean",
-       "description": "Whether the current user can rename this Team Drive."
-      },
-      "canShare": {
-       "type": "boolean",
-       "description": "Whether the current user can share files or folders in this Team Drive."
-      },
-      "canTrashChildren": {
-       "type": "boolean",
-       "description": "Whether the current user can trash children from folders in this Team Drive."
-      }
-     }
-    },
-    "colorRgb": {
-     "type": "string",
-     "description": "The color of this Team Drive as an RGB hex string. It can only be set on a drive.teamdrives.update request that does not set themeId."
-    },
-    "createdTime": {
-     "type": "string",
-     "description": "The time at which the Team Drive was created (RFC 3339 date-time).",
-     "format": "date-time"
-    },
-    "id": {
-     "type": "string",
-     "description": "The ID of this Team Drive which is also the ID of the top level folder of this Team Drive."
-    },
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#teamDrive\".",
-     "default": "drive#teamDrive"
-    },
-    "name": {
-     "type": "string",
-     "description": "The name of this Team Drive."
-    },
-    "restrictions": {
-     "type": "object",
-     "description": "A set of restrictions that apply to this Team Drive or items inside this Team Drive.",
-     "properties": {
-      "adminManagedRestrictions": {
-       "type": "boolean",
-       "description": "Whether administrative privileges on this Team Drive are required to modify restrictions."
-      },
-      "copyRequiresWriterPermission": {
-       "type": "boolean",
-       "description": "Whether the options to copy, print, or download files inside this Team Drive, should be disabled for readers and commenters. When this restriction is set to true, it will override the similarly named field to true for any file inside this Team Drive."
-      },
-      "domainUsersOnly": {
-       "type": "boolean",
-       "description": "Whether access to this Team Drive and items inside this Team Drive is restricted to users of the domain to which this Team Drive belongs. This restriction may be overridden by other sharing policies controlled outside of this Team Drive."
-      },
-      "teamMembersOnly": {
-       "type": "boolean",
-       "description": "Whether access to items inside this Team Drive is restricted to members of this Team Drive."
-      }
-     }
-    },
-    "themeId": {
-     "type": "string",
-     "description": "The ID of the theme from which the background image and color will be set. The set of possible teamDriveThemes can be retrieved from a drive.about.get response. When not specified on a drive.teamdrives.create request, a random theme is chosen from which the background image and color are set. This is a write-only field; it can only be set on requests that don't set colorRgb or backgroundImageFile."
-    }
-   }
-  },
-  "TeamDriveList": {
-   "id": "TeamDriveList",
-   "type": "object",
-   "description": "A list of Team Drives.",
-   "properties": {
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#teamDriveList\".",
-     "default": "drive#teamDriveList"
-    },
-    "nextPageToken": {
-     "type": "string",
-     "description": "The page token for the next page of Team Drives. This will be absent if the end of the Team Drives list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results."
-    },
-    "teamDrives": {
-     "type": "array",
-     "description": "The list of Team Drives. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
-     "items": {
-      "$ref": "TeamDrive"
-     }
-    }
-   }
-  },
-  "User": {
-   "id": "User",
-   "type": "object",
-   "description": "Information about a Drive user.",
-   "properties": {
-    "displayName": {
-     "type": "string",
-     "description": "A plain text displayable name for this user."
-    },
-    "emailAddress": {
-     "type": "string",
-     "description": "The email address of the user. This may not be present in certain contexts if the user has not made their email address visible to the requester."
-    },
-    "kind": {
-     "type": "string",
-     "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#user\".",
-     "default": "drive#user"
-    },
-    "me": {
-     "type": "boolean",
-     "description": "Whether this user is the requesting user."
-    },
-    "permissionId": {
-     "type": "string",
-     "description": "The user's ID as visible in Permission resources."
-    },
-    "photoLink": {
-     "type": "string",
-     "description": "A link to the user's profile photo, if available."
-    }
-   }
-  }
- },
- "resources": {
-  "about": {
-   "methods": {
-    "get": {
-     "id": "drive.about.get",
-     "path": "about",
-     "httpMethod": "GET",
-     "description": "Gets information about the user, the user's Drive, and system capabilities.",
-     "response": {
-      "$ref": "About"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    }
-   }
-  },
-  "changes": {
-   "methods": {
-    "getStartPageToken": {
-     "id": "drive.changes.getStartPageToken",
-     "path": "changes/startPageToken",
-     "httpMethod": "GET",
-     "description": "Gets the starting pageToken for listing future changes.",
-     "parameters": {
-      "driveId": {
-       "type": "string",
-       "description": "The ID of the shared drive for which the starting pageToken for listing future changes from that shared drive is returned.",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "teamDriveId": {
-       "type": "string",
-       "description": "Deprecated use driveId instead.",
-       "location": "query"
-      }
-     },
-     "response": {
-      "$ref": "StartPageToken"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "list": {
-     "id": "drive.changes.list",
-     "path": "changes",
-     "httpMethod": "GET",
-     "description": "Lists the changes for a user or shared drive.",
-     "parameters": {
-      "driveId": {
-       "type": "string",
-       "description": "The shared drive from which changes are returned. If specified the change IDs will be reflective of the shared drive; use the combined drive ID and change ID as an identifier.",
-       "location": "query"
-      },
-      "includeCorpusRemovals": {
-       "type": "boolean",
-       "description": "Whether changes should include the file resource if the file is still accessible by the user at the time of the request, even when a file was removed from the list of changes and there will be no further change entries for this file.",
-       "default": "false",
-       "location": "query"
-      },
-      "includeItemsFromAllDrives": {
-       "type": "boolean",
-       "description": "Whether both My Drive and shared drive items should be included in results.",
-       "default": "false",
-       "location": "query"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "includeRemoved": {
-       "type": "boolean",
-       "description": "Whether to include changes indicating that items have been removed from the list of changes, for example by deletion or loss of access.",
-       "default": "true",
-       "location": "query"
-      },
-      "includeTeamDriveItems": {
-       "type": "boolean",
-       "description": "Deprecated use includeItemsFromAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "pageSize": {
-       "type": "integer",
-       "description": "The maximum number of changes to return per page.",
-       "default": "100",
-       "format": "int32",
-       "minimum": "1",
-       "maximum": "1000",
-       "location": "query"
-      },
-      "pageToken": {
-       "type": "string",
-       "description": "The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response or to the response from the getStartPageToken method.",
-       "required": true,
-       "location": "query"
-      },
-      "restrictToMyDrive": {
-       "type": "boolean",
-       "description": "Whether to restrict the results to changes inside the My Drive hierarchy. This omits changes to files such as those in the Application Data folder or shared files which have not been added to My Drive.",
-       "default": "false",
-       "location": "query"
-      },
-      "spaces": {
-       "type": "string",
-       "description": "A comma-separated list of spaces to query within the user corpus. Supported values are 'drive', 'appDataFolder' and 'photos'.",
-       "default": "drive",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "teamDriveId": {
-       "type": "string",
-       "description": "Deprecated use driveId instead.",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "pageToken"
-     ],
-     "response": {
-      "$ref": "ChangeList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ],
-     "supportsSubscription": true
-    },
-    "watch": {
-     "id": "drive.changes.watch",
-     "path": "changes/watch",
-     "httpMethod": "POST",
-     "description": "Subscribes to changes for a user.",
-     "parameters": {
-      "driveId": {
-       "type": "string",
-       "description": "The shared drive from which changes are returned. If specified the change IDs will be reflective of the shared drive; use the combined drive ID and change ID as an identifier.",
-       "location": "query"
-      },
-      "includeCorpusRemovals": {
-       "type": "boolean",
-       "description": "Whether changes should include the file resource if the file is still accessible by the user at the time of the request, even when a file was removed from the list of changes and there will be no further change entries for this file.",
-       "default": "false",
-       "location": "query"
-      },
-      "includeItemsFromAllDrives": {
-       "type": "boolean",
-       "description": "Whether both My Drive and shared drive items should be included in results.",
-       "default": "false",
-       "location": "query"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "includeRemoved": {
-       "type": "boolean",
-       "description": "Whether to include changes indicating that items have been removed from the list of changes, for example by deletion or loss of access.",
-       "default": "true",
-       "location": "query"
-      },
-      "includeTeamDriveItems": {
-       "type": "boolean",
-       "description": "Deprecated use includeItemsFromAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "pageSize": {
-       "type": "integer",
-       "description": "The maximum number of changes to return per page.",
-       "default": "100",
-       "format": "int32",
-       "minimum": "1",
-       "maximum": "1000",
-       "location": "query"
-      },
-      "pageToken": {
-       "type": "string",
-       "description": "The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response or to the response from the getStartPageToken method.",
-       "required": true,
-       "location": "query"
-      },
-      "restrictToMyDrive": {
-       "type": "boolean",
-       "description": "Whether to restrict the results to changes inside the My Drive hierarchy. This omits changes to files such as those in the Application Data folder or shared files which have not been added to My Drive.",
-       "default": "false",
-       "location": "query"
-      },
-      "spaces": {
-       "type": "string",
-       "description": "A comma-separated list of spaces to query within the user corpus. Supported values are 'drive', 'appDataFolder' and 'photos'.",
-       "default": "drive",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "teamDriveId": {
-       "type": "string",
-       "description": "Deprecated use driveId instead.",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "pageToken"
-     ],
-     "request": {
-      "$ref": "Channel",
-      "parameterName": "resource"
-     },
-     "response": {
-      "$ref": "Channel"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ],
-     "supportsSubscription": true
-    }
-   }
-  },
-  "channels": {
-   "methods": {
-    "stop": {
-     "id": "drive.channels.stop",
-     "path": "channels/stop",
-     "httpMethod": "POST",
-     "description": "Stop watching resources through this channel",
-     "request": {
-      "$ref": "Channel",
-      "parameterName": "resource"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    }
-   }
-  },
-  "comments": {
-   "methods": {
-    "create": {
-     "id": "drive.comments.create",
-     "path": "files/{fileId}/comments",
-     "httpMethod": "POST",
-     "description": "Creates a new comment on a file.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "request": {
-      "$ref": "Comment"
-     },
-     "response": {
-      "$ref": "Comment"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "delete": {
-     "id": "drive.comments.delete",
-     "path": "files/{fileId}/comments/{commentId}",
-     "httpMethod": "DELETE",
-     "description": "Deletes a comment.",
-     "parameters": {
-      "commentId": {
-       "type": "string",
-       "description": "The ID of the comment.",
-       "required": true,
-       "location": "path"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "commentId"
-     ],
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "get": {
-     "id": "drive.comments.get",
-     "path": "files/{fileId}/comments/{commentId}",
-     "httpMethod": "GET",
-     "description": "Gets a comment by ID.",
-     "parameters": {
-      "commentId": {
-       "type": "string",
-       "description": "The ID of the comment.",
-       "required": true,
-       "location": "path"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "includeDeleted": {
-       "type": "boolean",
-       "description": "Whether to return deleted comments. Deleted comments will not include their original content.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "commentId"
-     ],
-     "response": {
-      "$ref": "Comment"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "list": {
-     "id": "drive.comments.list",
-     "path": "files/{fileId}/comments",
-     "httpMethod": "GET",
-     "description": "Lists a file's comments.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "includeDeleted": {
-       "type": "boolean",
-       "description": "Whether to include deleted comments. Deleted comments will not include their original content.",
-       "default": "false",
-       "location": "query"
-      },
-      "pageSize": {
-       "type": "integer",
-       "description": "The maximum number of comments to return per page.",
-       "default": "20",
-       "format": "int32",
-       "minimum": "1",
-       "maximum": "100",
-       "location": "query"
-      },
-      "pageToken": {
-       "type": "string",
-       "description": "The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response.",
-       "location": "query"
-      },
-      "startModifiedTime": {
-       "type": "string",
-       "description": "The minimum value of 'modifiedTime' for the result comments (RFC 3339 date-time).",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "response": {
-      "$ref": "CommentList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "update": {
-     "id": "drive.comments.update",
-     "path": "files/{fileId}/comments/{commentId}",
-     "httpMethod": "PATCH",
-     "description": "Updates a comment with patch semantics.",
-     "parameters": {
-      "commentId": {
-       "type": "string",
-       "description": "The ID of the comment.",
-       "required": true,
-       "location": "path"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "commentId"
-     ],
-     "request": {
-      "$ref": "Comment"
-     },
-     "response": {
-      "$ref": "Comment"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    }
-   }
-  },
-  "drives": {
-   "methods": {
-    "create": {
-     "id": "drive.drives.create",
-     "path": "drives",
-     "httpMethod": "POST",
-     "description": "Creates a new shared drive.",
-     "parameters": {
-      "requestId": {
-       "type": "string",
-       "description": "An ID, such as a random UUID, which uniquely identifies this user's request for idempotent creation of a shared drive. A repeated request by the same user and with the same request ID will avoid creating duplicates by attempting to create the same shared drive. If the shared drive already exists a 409 error will be returned.",
-       "required": true,
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "requestId"
-     ],
-     "request": {
-      "$ref": "Drive"
-     },
-     "response": {
-      "$ref": "Drive"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive"
-     ]
-    },
-    "delete": {
-     "id": "drive.drives.delete",
-     "path": "drives/{driveId}",
-     "httpMethod": "DELETE",
-     "description": "Permanently deletes a shared drive for which the user is an organizer. The shared drive cannot contain any untrashed items.",
-     "parameters": {
-      "driveId": {
-       "type": "string",
-       "description": "The ID of the shared drive.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "driveId"
-     ],
-     "scopes": [
-      "https://www.googleapis.com/auth/drive"
-     ]
-    },
-    "get": {
-     "id": "drive.drives.get",
-     "path": "drives/{driveId}",
-     "httpMethod": "GET",
-     "description": "Gets a shared drive's metadata by ID.",
-     "parameters": {
-      "driveId": {
-       "type": "string",
-       "description": "The ID of the shared drive.",
-       "required": true,
-       "location": "path"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the shared drive belongs.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "driveId"
-     ],
-     "response": {
-      "$ref": "Drive"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "hide": {
-     "id": "drive.drives.hide",
-     "path": "drives/{driveId}/hide",
-     "httpMethod": "POST",
-     "description": "Hides a shared drive from the default view.",
-     "parameters": {
-      "driveId": {
-       "type": "string",
-       "description": "The ID of the shared drive.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "driveId"
-     ],
-     "response": {
-      "$ref": "Drive"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive"
-     ]
-    },
-    "list": {
-     "id": "drive.drives.list",
-     "path": "drives",
-     "httpMethod": "GET",
-     "description": "Lists the user's shared drives.",
-     "parameters": {
-      "pageSize": {
-       "type": "integer",
-       "description": "Maximum number of shared drives to return.",
-       "default": "10",
-       "format": "int32",
-       "minimum": "1",
-       "maximum": "100",
-       "location": "query"
-      },
-      "pageToken": {
-       "type": "string",
-       "description": "Page token for shared drives.",
-       "location": "query"
-      },
-      "q": {
-       "type": "string",
-       "description": "Query string for searching shared drives.",
-       "location": "query"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then all shared drives of the domain in which the requester is an administrator are returned.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "response": {
-      "$ref": "DriveList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "unhide": {
-     "id": "drive.drives.unhide",
-     "path": "drives/{driveId}/unhide",
-     "httpMethod": "POST",
-     "description": "Restores a shared drive to the default view.",
-     "parameters": {
-      "driveId": {
-       "type": "string",
-       "description": "The ID of the shared drive.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "driveId"
-     ],
-     "response": {
-      "$ref": "Drive"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive"
-     ]
-    },
-    "update": {
-     "id": "drive.drives.update",
-     "path": "drives/{driveId}",
-     "httpMethod": "PATCH",
-     "description": "Updates the metadate for a shared drive.",
-     "parameters": {
-      "driveId": {
-       "type": "string",
-       "description": "The ID of the shared drive.",
-       "required": true,
-       "location": "path"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the shared drive belongs.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "driveId"
-     ],
-     "request": {
-      "$ref": "Drive"
-     },
-     "response": {
-      "$ref": "Drive"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive"
-     ]
-    }
-   }
-  },
-  "files": {
-   "methods": {
-    "copy": {
-     "id": "drive.files.copy",
-     "path": "files/{fileId}/copy",
-     "httpMethod": "POST",
-     "description": "Creates a copy of a file and applies any requested updates with patch semantics. Folders cannot be copied.",
-     "parameters": {
-      "enforceSingleParent": {
-       "type": "boolean",
-       "description": "Deprecated. Copying files into multiple folders is no longer supported. Use shortcuts instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "ignoreDefaultVisibility": {
-       "type": "boolean",
-       "description": "Whether to ignore the domain's default visibility settings for the created file. Domain administrators can choose to make all uploaded files visible to the domain by default; this parameter bypasses that behavior for the request. Permissions are still inherited from parent folders.",
-       "default": "false",
-       "location": "query"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "keepRevisionForever": {
-       "type": "boolean",
-       "description": "Whether to set the 'keepForever' field in the new head revision. This is only applicable to files with binary content in Google Drive. Only 200 revisions for the file can be kept forever. If the limit is reached, try deleting pinned revisions.",
-       "default": "false",
-       "location": "query"
-      },
-      "ocrLanguage": {
-       "type": "string",
-       "description": "A language hint for OCR processing during image import (ISO 639-1 code).",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "request": {
-      "$ref": "File"
-     },
-     "response": {
-      "$ref": "File"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.photos.readonly"
-     ]
-    },
-    "create": {
-     "id": "drive.files.create",
-     "path": "files",
-     "httpMethod": "POST",
-     "description": "Creates a new file.",
-     "parameters": {
-      "enforceSingleParent": {
-       "type": "boolean",
-       "description": "Deprecated. Creating files in multiple folders is no longer supported.",
-       "default": "false",
-       "location": "query"
-      },
-      "ignoreDefaultVisibility": {
-       "type": "boolean",
-       "description": "Whether to ignore the domain's default visibility settings for the created file. Domain administrators can choose to make all uploaded files visible to the domain by default; this parameter bypasses that behavior for the request. Permissions are still inherited from parent folders.",
-       "default": "false",
-       "location": "query"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "keepRevisionForever": {
-       "type": "boolean",
-       "description": "Whether to set the 'keepForever' field in the new head revision. This is only applicable to files with binary content in Google Drive. Only 200 revisions for the file can be kept forever. If the limit is reached, try deleting pinned revisions.",
-       "default": "false",
-       "location": "query"
-      },
-      "ocrLanguage": {
-       "type": "string",
-       "description": "A language hint for OCR processing during image import (ISO 639-1 code).",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "useContentAsIndexableText": {
-       "type": "boolean",
-       "description": "Whether to use the uploaded content as indexable text.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "request": {
-      "$ref": "File"
-     },
-     "response": {
-      "$ref": "File"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file"
-     ],
-     "supportsMediaUpload": true,
-     "mediaUpload": {
-      "accept": [
-       "*/*"
-      ],
-      "maxSize": "5120GB",
-      "protocols": {
-       "simple": {
-        "multipart": true,
-        "path": "/upload/drive/v3/files"
-       },
-       "resumable": {
-        "multipart": true,
-        "path": "/resumable/upload/drive/v3/files"
-       }
-      }
-     },
-     "supportsSubscription": true
-    },
-    "delete": {
-     "id": "drive.files.delete",
-     "path": "files/{fileId}",
-     "httpMethod": "DELETE",
-     "description": "Permanently deletes a file owned by the user without moving it to the trash. If the file belongs to a shared drive the user must be an organizer on the parent. If the target is a folder, all descendants owned by the user are also deleted.",
-     "parameters": {
-      "enforceSingleParent": {
-       "type": "boolean",
-       "description": "Deprecated. If an item is not in a shared drive and its last parent is deleted but the item itself is not, the item will be placed under its owner's root.",
-       "default": "false",
-       "location": "query"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "emptyTrash": {
-     "id": "drive.files.emptyTrash",
-     "path": "files/trash",
-     "httpMethod": "DELETE",
-     "description": "Permanently deletes all of the user's trashed files.",
-     "parameters": {
-      "enforceSingleParent": {
-       "type": "boolean",
-       "description": "Deprecated. If an item is not in a shared drive and its last parent is deleted but the item itself is not, the item will be placed under its owner's root.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive"
-     ]
-    },
-    "export": {
-     "id": "drive.files.export",
-     "path": "files/{fileId}/export",
-     "httpMethod": "GET",
-     "description": "Exports a Google Doc to the requested MIME type and returns the exported content. Please note that the exported content is limited to 10MB.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "mimeType": {
-       "type": "string",
-       "description": "The MIME type of the format requested for this export.",
-       "required": true,
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "mimeType"
-     ],
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ],
-     "supportsMediaDownload": true
-    },
-    "generateIds": {
-     "id": "drive.files.generateIds",
-     "path": "files/generateIds",
-     "httpMethod": "GET",
-     "description": "Generates a set of file IDs which can be provided in create or copy requests.",
-     "parameters": {
-      "count": {
-       "type": "integer",
-       "description": "The number of IDs to return.",
-       "default": "10",
-       "format": "int32",
-       "minimum": "1",
-       "maximum": "1000",
-       "location": "query"
-      },
-      "space": {
-       "type": "string",
-       "description": "The space in which the IDs can be used to create new files. Supported values are 'drive' and 'appDataFolder'.",
-       "default": "drive",
-       "location": "query"
-      }
-     },
-     "response": {
-      "$ref": "GeneratedIds"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "get": {
-     "id": "drive.files.get",
-     "path": "files/{fileId}",
-     "httpMethod": "GET",
-     "description": "Gets a file's metadata or content by ID.",
-     "parameters": {
-      "acknowledgeAbuse": {
-       "type": "boolean",
-       "description": "Whether the user is acknowledging the risk of downloading known malware or other abusive files. This is only applicable when alt=media.",
-       "default": "false",
-       "location": "query"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "response": {
-      "$ref": "File"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ],
-     "supportsMediaDownload": true,
-     "useMediaDownloadService": true,
-     "supportsSubscription": true
-    },
-    "list": {
-     "id": "drive.files.list",
-     "path": "files",
-     "httpMethod": "GET",
-     "description": "Lists or searches files.",
-     "parameters": {
-      "corpora": {
-       "type": "string",
-       "description": "Groupings of files to which the query applies. Supported groupings are: 'user' (files created by, opened by, or shared directly with the user), 'drive' (files in the specified shared drive as indicated by the 'driveId'), 'domain' (files shared to the user's domain), and 'allDrives' (A combination of 'user' and 'drive' for all drives where the user is a member). When able, use 'user' or 'drive', instead of 'allDrives', for efficiency.",
-       "location": "query"
-      },
-      "corpus": {
-       "type": "string",
-       "description": "The source of files to list. Deprecated: use 'corpora' instead.",
-       "enum": [
-        "domain",
-        "user"
-       ],
-       "enumDescriptions": [
-        "Files shared to the user's domain.",
-        "Files owned by or shared to the user. If a user has permissions on a Shared Drive, the files inside it won't be retrieved unless the user has created, opened, or shared the file."
-       ],
-       "location": "query"
-      },
-      "driveId": {
-       "type": "string",
-       "description": "ID of the shared drive to search.",
-       "location": "query"
-      },
-      "includeItemsFromAllDrives": {
-       "type": "boolean",
-       "description": "Whether both My Drive and shared drive items should be included in results.",
-       "default": "false",
-       "location": "query"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "includeTeamDriveItems": {
-       "type": "boolean",
-       "description": "Deprecated use includeItemsFromAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "orderBy": {
-       "type": "string",
-       "description": "A comma-separated list of sort keys. Valid keys are 'createdTime', 'folder', 'modifiedByMeTime', 'modifiedTime', 'name', 'name_natural', 'quotaBytesUsed', 'recency', 'sharedWithMeTime', 'starred', and 'viewedByMeTime'. Each key sorts ascending by default, but may be reversed with the 'desc' modifier. Example usage: ?orderBy=folder,modifiedTime desc,name. Please note that there is a current limitation for users with approximately one million files in which the requested sort order is ignored.",
-       "location": "query"
-      },
-      "pageSize": {
-       "type": "integer",
-       "description": "The maximum number of files to return per page. Partial or empty result pages are possible even before the end of the files list has been reached.",
-       "default": "100",
-       "format": "int32",
-       "minimum": "1",
-       "maximum": "1000",
-       "location": "query"
-      },
-      "pageToken": {
-       "type": "string",
-       "description": "The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response.",
-       "location": "query"
-      },
-      "q": {
-       "type": "string",
-       "description": "A query for filtering the file results. See the \"Search for Files\" guide for supported syntax.",
-       "location": "query"
-      },
-      "spaces": {
-       "type": "string",
-       "description": "A comma-separated list of spaces to query within the corpus. Supported values are 'drive', 'appDataFolder' and 'photos'.",
-       "default": "drive",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "teamDriveId": {
-       "type": "string",
-       "description": "Deprecated use driveId instead.",
-       "location": "query"
-      }
-     },
-     "response": {
-      "$ref": "FileList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "update": {
-     "id": "drive.files.update",
-     "path": "files/{fileId}",
-     "httpMethod": "PATCH",
-     "description": "Updates a file's metadata and/or content. This method supports patch semantics.",
-     "parameters": {
-      "addParents": {
-       "type": "string",
-       "description": "A comma-separated list of parent IDs to add.",
-       "location": "query"
-      },
-      "enforceSingleParent": {
-       "type": "boolean",
-       "description": "Deprecated. Adding files to multiple folders is no longer supported. Use shortcuts instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "keepRevisionForever": {
-       "type": "boolean",
-       "description": "Whether to set the 'keepForever' field in the new head revision. This is only applicable to files with binary content in Google Drive. Only 200 revisions for the file can be kept forever. If the limit is reached, try deleting pinned revisions.",
-       "default": "false",
-       "location": "query"
-      },
-      "ocrLanguage": {
-       "type": "string",
-       "description": "A language hint for OCR processing during image import (ISO 639-1 code).",
-       "location": "query"
-      },
-      "removeParents": {
-       "type": "string",
-       "description": "A comma-separated list of parent IDs to remove.",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "useContentAsIndexableText": {
-       "type": "boolean",
-       "description": "Whether to use the uploaded content as indexable text.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "request": {
-      "$ref": "File"
-     },
-     "response": {
-      "$ref": "File"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.scripts"
-     ],
-     "supportsMediaUpload": true,
-     "mediaUpload": {
-      "accept": [
-       "*/*"
-      ],
-      "maxSize": "5120GB",
-      "protocols": {
-       "simple": {
-        "multipart": true,
-        "path": "/upload/drive/v3/files/{fileId}"
-       },
-       "resumable": {
-        "multipart": true,
-        "path": "/resumable/upload/drive/v3/files/{fileId}"
-       }
-      }
-     }
-    },
-    "watch": {
-     "id": "drive.files.watch",
-     "path": "files/{fileId}/watch",
-     "httpMethod": "POST",
-     "description": "Subscribes to changes to a file",
-     "parameters": {
-      "acknowledgeAbuse": {
-       "type": "boolean",
-       "description": "Whether the user is acknowledging the risk of downloading known malware or other abusive files. This is only applicable when alt=media.",
-       "default": "false",
-       "location": "query"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "request": {
-      "$ref": "Channel",
-      "parameterName": "resource"
-     },
-     "response": {
-      "$ref": "Channel"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ],
-     "supportsMediaDownload": true,
-     "useMediaDownloadService": true,
-     "supportsSubscription": true
-    }
-   }
-  },
-  "permissions": {
-   "methods": {
-    "create": {
-     "id": "drive.permissions.create",
-     "path": "files/{fileId}/permissions",
-     "httpMethod": "POST",
-     "description": "Creates a permission for a file or shared drive.",
-     "parameters": {
-      "emailMessage": {
-       "type": "string",
-       "description": "A plain text custom message to include in the notification email.",
-       "location": "query"
-      },
-      "enforceSingleParent": {
-       "type": "boolean",
-       "description": "Deprecated. See moveToNewOwnersRoot for details.",
-       "default": "false",
-       "location": "query"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file or shared drive.",
-       "required": true,
-       "location": "path"
-      },
-      "moveToNewOwnersRoot": {
-       "type": "boolean",
-       "description": "This parameter will only take effect if the item is not in a shared drive and the request is attempting to transfer the ownership of the item. If set to true, the item will be moved to the new owner's My Drive root folder and all prior parents removed. If set to false, parents are not changed.",
-       "default": "false",
-       "location": "query"
-      },
-      "sendNotificationEmail": {
-       "type": "boolean",
-       "description": "Whether to send a notification email when sharing to users or groups. This defaults to true for users and groups, and is not allowed for other requests. It must not be disabled for ownership transfers.",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "transferOwnership": {
-       "type": "boolean",
-       "description": "Whether to transfer ownership to the specified user and downgrade the current owner to a writer. This parameter is required as an acknowledgement of the side effect.",
-       "default": "false",
-       "location": "query"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "request": {
-      "$ref": "Permission"
-     },
-     "response": {
-      "$ref": "Permission"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "delete": {
-     "id": "drive.permissions.delete",
-     "path": "files/{fileId}/permissions/{permissionId}",
-     "httpMethod": "DELETE",
-     "description": "Deletes a permission.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file or shared drive.",
-       "required": true,
-       "location": "path"
-      },
-      "permissionId": {
-       "type": "string",
-       "description": "The ID of the permission.",
-       "required": true,
-       "location": "path"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "permissionId"
-     ],
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "get": {
-     "id": "drive.permissions.get",
-     "path": "files/{fileId}/permissions/{permissionId}",
-     "httpMethod": "GET",
-     "description": "Gets a permission by ID.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "permissionId": {
-       "type": "string",
-       "description": "The ID of the permission.",
-       "required": true,
-       "location": "path"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "permissionId"
-     ],
-     "response": {
-      "$ref": "Permission"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "list": {
-     "id": "drive.permissions.list",
-     "path": "files/{fileId}/permissions",
-     "httpMethod": "GET",
-     "description": "Lists a file's or shared drive's permissions.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file or shared drive.",
-       "required": true,
-       "location": "path"
-      },
-      "includePermissionsForView": {
-       "type": "string",
-       "description": "Specifies which additional view's permissions to include in the response. Only 'published' is supported.",
-       "location": "query"
-      },
-      "pageSize": {
-       "type": "integer",
-       "description": "The maximum number of permissions to return per page. When not set for files in a shared drive, at most 100 results will be returned. When not set for files that are not in a shared drive, the entire list will be returned.",
-       "format": "int32",
-       "minimum": "1",
-       "maximum": "100",
-       "location": "query"
-      },
-      "pageToken": {
-       "type": "string",
-       "description": "The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response.",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "response": {
-      "$ref": "PermissionList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "update": {
-     "id": "drive.permissions.update",
-     "path": "files/{fileId}/permissions/{permissionId}",
-     "httpMethod": "PATCH",
-     "description": "Updates a permission with patch semantics.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file or shared drive.",
-       "required": true,
-       "location": "path"
-      },
-      "permissionId": {
-       "type": "string",
-       "description": "The ID of the permission.",
-       "required": true,
-       "location": "path"
-      },
-      "removeExpiration": {
-       "type": "boolean",
-       "description": "Whether to remove the expiration date.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsAllDrives": {
-       "type": "boolean",
-       "description": "Whether the requesting application supports both My Drives and shared drives.",
-       "default": "false",
-       "location": "query"
-      },
-      "supportsTeamDrives": {
-       "type": "boolean",
-       "description": "Deprecated use supportsAllDrives instead.",
-       "default": "false",
-       "location": "query"
-      },
-      "transferOwnership": {
-       "type": "boolean",
-       "description": "Whether to transfer ownership to the specified user and downgrade the current owner to a writer. This parameter is required as an acknowledgement of the side effect.",
-       "default": "false",
-       "location": "query"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if the file ID parameter refers to a shared drive and the requester is an administrator of the domain to which the shared drive belongs.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "permissionId"
-     ],
-     "request": {
-      "$ref": "Permission"
-     },
-     "response": {
-      "$ref": "Permission"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    }
-   }
-  },
-  "replies": {
-   "methods": {
-    "create": {
-     "id": "drive.replies.create",
-     "path": "files/{fileId}/comments/{commentId}/replies",
-     "httpMethod": "POST",
-     "description": "Creates a new reply to a comment.",
-     "parameters": {
-      "commentId": {
-       "type": "string",
-       "description": "The ID of the comment.",
-       "required": true,
-       "location": "path"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "commentId"
-     ],
-     "request": {
-      "$ref": "Reply"
-     },
-     "response": {
-      "$ref": "Reply"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "delete": {
-     "id": "drive.replies.delete",
-     "path": "files/{fileId}/comments/{commentId}/replies/{replyId}",
-     "httpMethod": "DELETE",
-     "description": "Deletes a reply.",
-     "parameters": {
-      "commentId": {
-       "type": "string",
-       "description": "The ID of the comment.",
-       "required": true,
-       "location": "path"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "replyId": {
-       "type": "string",
-       "description": "The ID of the reply.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "commentId",
-      "replyId"
-     ],
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "get": {
-     "id": "drive.replies.get",
-     "path": "files/{fileId}/comments/{commentId}/replies/{replyId}",
-     "httpMethod": "GET",
-     "description": "Gets a reply by ID.",
-     "parameters": {
-      "commentId": {
-       "type": "string",
-       "description": "The ID of the comment.",
-       "required": true,
-       "location": "path"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "includeDeleted": {
-       "type": "boolean",
-       "description": "Whether to return deleted replies. Deleted replies will not include their original content.",
-       "default": "false",
-       "location": "query"
-      },
-      "replyId": {
-       "type": "string",
-       "description": "The ID of the reply.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "commentId",
-      "replyId"
-     ],
-     "response": {
-      "$ref": "Reply"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "list": {
-     "id": "drive.replies.list",
-     "path": "files/{fileId}/comments/{commentId}/replies",
-     "httpMethod": "GET",
-     "description": "Lists a comment's replies.",
-     "parameters": {
-      "commentId": {
-       "type": "string",
-       "description": "The ID of the comment.",
-       "required": true,
-       "location": "path"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "includeDeleted": {
-       "type": "boolean",
-       "description": "Whether to include deleted replies. Deleted replies will not include their original content.",
-       "default": "false",
-       "location": "query"
-      },
-      "pageSize": {
-       "type": "integer",
-       "description": "The maximum number of replies to return per page.",
-       "default": "20",
-       "format": "int32",
-       "minimum": "1",
-       "maximum": "100",
-       "location": "query"
-      },
-      "pageToken": {
-       "type": "string",
-       "description": "The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response.",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "commentId"
-     ],
-     "response": {
-      "$ref": "ReplyList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "update": {
-     "id": "drive.replies.update",
-     "path": "files/{fileId}/comments/{commentId}/replies/{replyId}",
-     "httpMethod": "PATCH",
-     "description": "Updates a reply with patch semantics.",
-     "parameters": {
-      "commentId": {
-       "type": "string",
-       "description": "The ID of the comment.",
-       "required": true,
-       "location": "path"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "replyId": {
-       "type": "string",
-       "description": "The ID of the reply.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "commentId",
-      "replyId"
-     ],
-     "request": {
-      "$ref": "Reply"
-     },
-     "response": {
-      "$ref": "Reply"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    }
-   }
-  },
-  "revisions": {
-   "methods": {
-    "delete": {
-     "id": "drive.revisions.delete",
-     "path": "files/{fileId}/revisions/{revisionId}",
-     "httpMethod": "DELETE",
-     "description": "Permanently deletes a file version. You can only delete revisions for files with binary content in Google Drive, like images or videos. Revisions for other files, like Google Docs or Sheets, and the last remaining file version can't be deleted.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "revisionId": {
-       "type": "string",
-       "description": "The ID of the revision.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "revisionId"
-     ],
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    },
-    "get": {
-     "id": "drive.revisions.get",
-     "path": "files/{fileId}/revisions/{revisionId}",
-     "httpMethod": "GET",
-     "description": "Gets a revision's metadata or content by ID.",
-     "parameters": {
-      "acknowledgeAbuse": {
-       "type": "boolean",
-       "description": "Whether the user is acknowledging the risk of downloading known malware or other abusive files. This is only applicable when alt=media.",
-       "default": "false",
-       "location": "query"
-      },
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "revisionId": {
-       "type": "string",
-       "description": "The ID of the revision.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "revisionId"
-     ],
-     "response": {
-      "$ref": "Revision"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ],
-     "supportsMediaDownload": true,
-     "useMediaDownloadService": true
-    },
-    "list": {
-     "id": "drive.revisions.list",
-     "path": "files/{fileId}/revisions",
-     "httpMethod": "GET",
-     "description": "Lists a file's revisions.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "pageSize": {
-       "type": "integer",
-       "description": "The maximum number of revisions to return per page.",
-       "default": "200",
-       "format": "int32",
-       "minimum": "1",
-       "maximum": "1000",
-       "location": "query"
-      },
-      "pageToken": {
-       "type": "string",
-       "description": "The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response.",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "fileId"
-     ],
-     "response": {
-      "$ref": "RevisionList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file",
-      "https://www.googleapis.com/auth/drive.metadata",
-      "https://www.googleapis.com/auth/drive.metadata.readonly",
-      "https://www.googleapis.com/auth/drive.photos.readonly",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "update": {
-     "id": "drive.revisions.update",
-     "path": "files/{fileId}/revisions/{revisionId}",
-     "httpMethod": "PATCH",
-     "description": "Updates a revision with patch semantics.",
-     "parameters": {
-      "fileId": {
-       "type": "string",
-       "description": "The ID of the file.",
-       "required": true,
-       "location": "path"
-      },
-      "revisionId": {
-       "type": "string",
-       "description": "The ID of the revision.",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "fileId",
-      "revisionId"
-     ],
-     "request": {
-      "$ref": "Revision"
-     },
-     "response": {
-      "$ref": "Revision"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.appdata",
-      "https://www.googleapis.com/auth/drive.file"
-     ]
-    }
-   }
-  },
-  "teamdrives": {
-   "methods": {
-    "create": {
-     "id": "drive.teamdrives.create",
-     "path": "teamdrives",
-     "httpMethod": "POST",
-     "description": "Deprecated use drives.create instead.",
-     "parameters": {
-      "requestId": {
-       "type": "string",
-       "description": "An ID, such as a random UUID, which uniquely identifies this user's request for idempotent creation of a Team Drive. A repeated request by the same user and with the same request ID will avoid creating duplicates by attempting to create the same Team Drive. If the Team Drive already exists a 409 error will be returned.",
-       "required": true,
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "requestId"
-     ],
-     "request": {
-      "$ref": "TeamDrive"
-     },
-     "response": {
-      "$ref": "TeamDrive"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive"
-     ]
-    },
-    "delete": {
-     "id": "drive.teamdrives.delete",
-     "path": "teamdrives/{teamDriveId}",
-     "httpMethod": "DELETE",
-     "description": "Deprecated use drives.delete instead.",
-     "parameters": {
-      "teamDriveId": {
-       "type": "string",
-       "description": "The ID of the Team Drive",
-       "required": true,
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "teamDriveId"
-     ],
-     "scopes": [
-      "https://www.googleapis.com/auth/drive"
-     ]
-    },
-    "get": {
-     "id": "drive.teamdrives.get",
-     "path": "teamdrives/{teamDriveId}",
-     "httpMethod": "GET",
-     "description": "Deprecated use drives.get instead.",
-     "parameters": {
-      "teamDriveId": {
-       "type": "string",
-       "description": "The ID of the Team Drive",
-       "required": true,
-       "location": "path"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the Team Drive belongs.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "teamDriveId"
-     ],
-     "response": {
-      "$ref": "TeamDrive"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
-    },
-    "list": {
-     "id": "drive.teamdrives.list",
-     "path": "teamdrives",
-     "httpMethod": "GET",
-     "description": "Deprecated use drives.list instead.",
-     "parameters": {
-      "pageSize": {
-       "type": "integer",
-       "description": "Maximum number of Team Drives to return.",
-       "default": "10",
-       "format": "int32",
-       "minimum": "1",
-       "maximum": "100",
-       "location": "query"
-      },
-      "pageToken": {
-       "type": "string",
-       "description": "Page token for Team Drives.",
-       "location": "query"
-      },
-      "q": {
-       "type": "string",
-       "description": "Query string for searching Team Drives.",
-       "location": "query"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then all Team Drives of the domain in which the requester is an administrator are returned.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "response": {
-      "$ref": "TeamDriveList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive",
-      "https://www.googleapis.com/auth/drive.readonly"
-     ]
+    "revision": "20210207",
+    "rootUrl": "https://www.googleapis.com/",
+    "schemas": {
+        "About": {
+            "description": "Information about the user, the user's Drive, and system capabilities.",
+            "id": "About",
+            "properties": {
+                "appInstalled": {
+                    "description": "Whether the user has installed the requesting app.",
+                    "type": "boolean"
+                },
+                "canCreateDrives": {
+                    "description": "Whether the user can create shared drives.",
+                    "type": "boolean"
+                },
+                "canCreateTeamDrives": {
+                    "description": "Deprecated - use canCreateDrives instead.",
+                    "type": "boolean"
+                },
+                "driveThemes": {
+                    "description": "A list of themes that are supported for shared drives.",
+                    "items": {
+                        "properties": {
+                            "backgroundImageLink": {
+                                "description": "A link to this theme's background image.",
+                                "type": "string"
+                            },
+                            "colorRgb": {
+                                "description": "The color of this theme as an RGB hex string.",
+                                "type": "string"
+                            },
+                            "id": {
+                                "description": "The ID of the theme.",
+                                "type": "string"
+                            }
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "exportFormats": {
+                    "additionalProperties": {
+                        "items": {
+                            "type": "string"
+                        },
+                        "type": "array"
+                    },
+                    "description": "A map of source MIME type to possible targets for all supported exports.",
+                    "type": "object"
+                },
+                "folderColorPalette": {
+                    "description": "The currently supported folder colors as RGB hex strings.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "importFormats": {
+                    "additionalProperties": {
+                        "items": {
+                            "type": "string"
+                        },
+                        "type": "array"
+                    },
+                    "description": "A map of source MIME type to possible targets for all supported imports.",
+                    "type": "object"
+                },
+                "kind": {
+                    "default": "drive#about",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#about\".",
+                    "type": "string"
+                },
+                "maxImportSizes": {
+                    "additionalProperties": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "description": "A map of maximum import sizes by MIME type, in bytes.",
+                    "type": "object"
+                },
+                "maxUploadSize": {
+                    "description": "The maximum upload size in bytes.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "storageQuota": {
+                    "description": "The user's storage quota limits and usage. All fields are measured in bytes.",
+                    "properties": {
+                        "limit": {
+                            "description": "The usage limit, if applicable. This will not be present if the user has unlimited storage.",
+                            "format": "int64",
+                            "type": "string"
+                        },
+                        "usage": {
+                            "description": "The total usage across all services.",
+                            "format": "int64",
+                            "type": "string"
+                        },
+                        "usageInDrive": {
+                            "description": "The usage by all files in Google Drive.",
+                            "format": "int64",
+                            "type": "string"
+                        },
+                        "usageInDriveTrash": {
+                            "description": "The usage by trashed files in Google Drive.",
+                            "format": "int64",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "teamDriveThemes": {
+                    "description": "Deprecated - use driveThemes instead.",
+                    "items": {
+                        "properties": {
+                            "backgroundImageLink": {
+                                "description": "Deprecated - use driveThemes/backgroundImageLink instead.",
+                                "type": "string"
+                            },
+                            "colorRgb": {
+                                "description": "Deprecated - use driveThemes/colorRgb instead.",
+                                "type": "string"
+                            },
+                            "id": {
+                                "description": "Deprecated - use driveThemes/id instead.",
+                                "type": "string"
+                            }
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "user": {
+                    "$ref": "User",
+                    "description": "The authenticated user."
+                }
+            },
+            "type": "object"
+        },
+        "Change": {
+            "description": "A change to a file or shared drive.",
+            "id": "Change",
+            "properties": {
+                "changeType": {
+                    "description": "The type of the change. Possible values are file and drive.",
+                    "type": "string"
+                },
+                "drive": {
+                    "$ref": "Drive",
+                    "description": "The updated state of the shared drive. Present if the changeType is drive, the user is still a member of the shared drive, and the shared drive has not been deleted."
+                },
+                "driveId": {
+                    "description": "The ID of the shared drive associated with this change.",
+                    "type": "string"
+                },
+                "file": {
+                    "$ref": "File",
+                    "description": "The updated state of the file. Present if the type is file and the file has not been removed from this list of changes."
+                },
+                "fileId": {
+                    "description": "The ID of the file which has changed.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "drive#change",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#change\".",
+                    "type": "string"
+                },
+                "removed": {
+                    "description": "Whether the file or shared drive has been removed from this list of changes, for example by deletion or loss of access.",
+                    "type": "boolean"
+                },
+                "teamDrive": {
+                    "$ref": "TeamDrive",
+                    "description": "Deprecated - use drive instead."
+                },
+                "teamDriveId": {
+                    "description": "Deprecated - use driveId instead.",
+                    "type": "string"
+                },
+                "time": {
+                    "description": "The time of this change (RFC 3339 date-time).",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Deprecated - use changeType instead.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ChangeList": {
+            "description": "A list of changes for a user.",
+            "id": "ChangeList",
+            "properties": {
+                "changes": {
+                    "description": "The list of changes. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
+                    "items": {
+                        "$ref": "Change"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "default": "drive#changeList",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#changeList\".",
+                    "type": "string"
+                },
+                "newStartPageToken": {
+                    "description": "The starting page token for future changes. This will be present only if the end of the current changes list has been reached.",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "The page token for the next page of changes. This will be absent if the end of the changes list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Channel": {
+            "description": "An notification channel used to watch for resource changes.",
+            "id": "Channel",
+            "properties": {
+                "address": {
+                    "description": "The address where notifications are delivered for this channel.",
+                    "type": "string"
+                },
+                "expiration": {
+                    "description": "Date and time of notification channel expiration, expressed as a Unix timestamp, in milliseconds. Optional.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "A UUID or similar unique string that identifies this channel.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "api#channel",
+                    "description": "Identifies this as a notification channel used to watch for changes to a resource, which is \"api#channel\".",
+                    "type": "string"
+                },
+                "params": {
+                    "additionalProperties": {
+                        "description": "Declares a new parameter by name.",
+                        "type": "string"
+                    },
+                    "description": "Additional parameters controlling delivery channel behavior. Optional.",
+                    "type": "object"
+                },
+                "payload": {
+                    "description": "A Boolean value to indicate whether payload is wanted. Optional.",
+                    "type": "boolean"
+                },
+                "resourceId": {
+                    "description": "An opaque ID that identifies the resource being watched on this channel. Stable across different API versions.",
+                    "type": "string"
+                },
+                "resourceUri": {
+                    "description": "A version-specific identifier for the watched resource.",
+                    "type": "string"
+                },
+                "token": {
+                    "description": "An arbitrary string delivered to the target address with each notification delivered over this channel. Optional.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "The type of delivery mechanism used for this channel.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Comment": {
+            "description": "A comment on a file.",
+            "id": "Comment",
+            "properties": {
+                "anchor": {
+                    "description": "A region of the document represented as a JSON string. See anchor documentation for details on how to define and interpret anchor properties.",
+                    "type": "string"
+                },
+                "author": {
+                    "$ref": "User",
+                    "description": "The author of the comment. The author's email address and permission ID will not be populated."
+                },
+                "content": {
+                    "annotations": {
+                        "required": [
+                            "drive.comments.create",
+                            "drive.comments.update"
+                        ]
+                    },
+                    "description": "The plain text content of the comment. This field is used for setting the content, while htmlContent should be displayed.",
+                    "type": "string"
+                },
+                "createdTime": {
+                    "description": "The time at which the comment was created (RFC 3339 date-time).",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "deleted": {
+                    "description": "Whether the comment has been deleted. A deleted comment has no content.",
+                    "type": "boolean"
+                },
+                "htmlContent": {
+                    "description": "The content of the comment with HTML formatting.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "The ID of the comment.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "drive#comment",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#comment\".",
+                    "type": "string"
+                },
+                "modifiedTime": {
+                    "description": "The last time the comment or any of its replies was modified (RFC 3339 date-time).",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "quotedFileContent": {
+                    "description": "The file content to which the comment refers, typically within the anchor region. For a text file, for example, this would be the text at the location of the comment.",
+                    "properties": {
+                        "mimeType": {
+                            "description": "The MIME type of the quoted content.",
+                            "type": "string"
+                        },
+                        "value": {
+                            "description": "The quoted content itself. This is interpreted as plain text if set through the API.",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "replies": {
+                    "description": "The full list of replies to the comment in chronological order.",
+                    "items": {
+                        "$ref": "Reply"
+                    },
+                    "type": "array"
+                },
+                "resolved": {
+                    "description": "Whether the comment has been resolved by one of its replies.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "CommentList": {
+            "description": "A list of comments on a file.",
+            "id": "CommentList",
+            "properties": {
+                "comments": {
+                    "description": "The list of comments. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
+                    "items": {
+                        "$ref": "Comment"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "default": "drive#commentList",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#commentList\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "The page token for the next page of comments. This will be absent if the end of the comments list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ContentRestriction": {
+            "description": "A restriction for accessing the content of the file.",
+            "id": "ContentRestriction",
+            "properties": {
+                "readOnly": {
+                    "description": "Whether the content of the file is read-only. If a file is read-only, a new revision of the file may not be added, comments may not be added or modified, and the title of the file may not be modified.",
+                    "type": "boolean"
+                },
+                "reason": {
+                    "description": "Reason for why the content of the file is restricted. This is only mutable on requests that also set readOnly=true.",
+                    "type": "string"
+                },
+                "restrictingUser": {
+                    "$ref": "User",
+                    "description": "The user who set the content restriction. Only populated if readOnly is true."
+                },
+                "restrictionTime": {
+                    "description": "The time at which the content restriction was set (formatted RFC 3339 timestamp). Only populated if readOnly is true.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "The type of the content restriction. Currently the only possible value is globalContentRestriction.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Drive": {
+            "description": "Representation of a shared drive.",
+            "id": "Drive",
+            "properties": {
+                "backgroundImageFile": {
+                    "description": "An image file and cropping parameters from which a background image for this shared drive is set. This is a write only field; it can only be set on drive.drives.update requests that don't set themeId. When specified, all fields of the backgroundImageFile must be set.",
+                    "properties": {
+                        "id": {
+                            "description": "The ID of an image file in Google Drive to use for the background image.",
+                            "type": "string"
+                        },
+                        "width": {
+                            "description": "The width of the cropped image in the closed range of 0 to 1. This value represents the width of the cropped image divided by the width of the entire image. The height is computed by applying a width to height aspect ratio of 80 to 9. The resulting image must be at least 1280 pixels wide and 144 pixels high.",
+                            "format": "float",
+                            "type": "number"
+                        },
+                        "xCoordinate": {
+                            "description": "The X coordinate of the upper left corner of the cropping area in the background image. This is a value in the closed range of 0 to 1. This value represents the horizontal distance from the left side of the entire image to the left side of the cropping area divided by the width of the entire image.",
+                            "format": "float",
+                            "type": "number"
+                        },
+                        "yCoordinate": {
+                            "description": "The Y coordinate of the upper left corner of the cropping area in the background image. This is a value in the closed range of 0 to 1. This value represents the vertical distance from the top side of the entire image to the top side of the cropping area divided by the height of the entire image.",
+                            "format": "float",
+                            "type": "number"
+                        }
+                    },
+                    "type": "object"
+                },
+                "backgroundImageLink": {
+                    "description": "A short-lived link to this shared drive's background image.",
+                    "type": "string"
+                },
+                "capabilities": {
+                    "description": "Capabilities the current user has on this shared drive.",
+                    "properties": {
+                        "canAddChildren": {
+                            "description": "Whether the current user can add children to folders in this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canChangeCopyRequiresWriterPermissionRestriction": {
+                            "description": "Whether the current user can change the copyRequiresWriterPermission restriction of this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canChangeDomainUsersOnlyRestriction": {
+                            "description": "Whether the current user can change the domainUsersOnly restriction of this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canChangeDriveBackground": {
+                            "description": "Whether the current user can change the background of this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canChangeDriveMembersOnlyRestriction": {
+                            "description": "Whether the current user can change the driveMembersOnly restriction of this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canComment": {
+                            "description": "Whether the current user can comment on files in this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canCopy": {
+                            "description": "Whether the current user can copy files in this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canDeleteChildren": {
+                            "description": "Whether the current user can delete children from folders in this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canDeleteDrive": {
+                            "description": "Whether the current user can delete this shared drive. Attempting to delete the shared drive may still fail if there are untrashed items inside the shared drive.",
+                            "type": "boolean"
+                        },
+                        "canDownload": {
+                            "description": "Whether the current user can download files in this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canEdit": {
+                            "description": "Whether the current user can edit files in this shared drive",
+                            "type": "boolean"
+                        },
+                        "canListChildren": {
+                            "description": "Whether the current user can list the children of folders in this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canManageMembers": {
+                            "description": "Whether the current user can add members to this shared drive or remove them or change their role.",
+                            "type": "boolean"
+                        },
+                        "canReadRevisions": {
+                            "description": "Whether the current user can read the revisions resource of files in this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canRename": {
+                            "description": "Whether the current user can rename files or folders in this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canRenameDrive": {
+                            "description": "Whether the current user can rename this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canShare": {
+                            "description": "Whether the current user can share files or folders in this shared drive.",
+                            "type": "boolean"
+                        },
+                        "canTrashChildren": {
+                            "description": "Whether the current user can trash children from folders in this shared drive.",
+                            "type": "boolean"
+                        }
+                    },
+                    "type": "object"
+                },
+                "colorRgb": {
+                    "description": "The color of this shared drive as an RGB hex string. It can only be set on a drive.drives.update request that does not set themeId.",
+                    "type": "string"
+                },
+                "createdTime": {
+                    "description": "The time at which the shared drive was created (RFC 3339 date-time).",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "hidden": {
+                    "description": "Whether the shared drive is hidden from default view.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "The ID of this shared drive which is also the ID of the top level folder of this shared drive.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "drive#drive",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#drive\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The name of this shared drive.",
+                    "type": "string"
+                },
+                "restrictions": {
+                    "description": "A set of restrictions that apply to this shared drive or items inside this shared drive.",
+                    "properties": {
+                        "adminManagedRestrictions": {
+                            "description": "Whether administrative privileges on this shared drive are required to modify restrictions.",
+                            "type": "boolean"
+                        },
+                        "copyRequiresWriterPermission": {
+                            "description": "Whether the options to copy, print, or download files inside this shared drive, should be disabled for readers and commenters. When this restriction is set to true, it will override the similarly named field to true for any file inside this shared drive.",
+                            "type": "boolean"
+                        },
+                        "domainUsersOnly": {
+                            "description": "Whether access to this shared drive and items inside this shared drive is restricted to users of the domain to which this shared drive belongs. This restriction may be overridden by other sharing policies controlled outside of this shared drive.",
+                            "type": "boolean"
+                        },
+                        "driveMembersOnly": {
+                            "description": "Whether access to items inside this shared drive is restricted to its members.",
+                            "type": "boolean"
+                        }
+                    },
+                    "type": "object"
+                },
+                "themeId": {
+                    "description": "The ID of the theme from which the background image and color will be set. The set of possible driveThemes can be retrieved from a drive.about.get response. When not specified on a drive.drives.create request, a random theme is chosen from which the background image and color are set. This is a write-only field; it can only be set on requests that don't set colorRgb or backgroundImageFile.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DriveList": {
+            "description": "A list of shared drives.",
+            "id": "DriveList",
+            "properties": {
+                "drives": {
+                    "description": "The list of shared drives. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
+                    "items": {
+                        "$ref": "Drive"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "default": "drive#driveList",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#driveList\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "The page token for the next page of shared drives. This will be absent if the end of the list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "File": {
+            "description": "The metadata for a file.",
+            "id": "File",
+            "properties": {
+                "appProperties": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "A collection of arbitrary key-value pairs which are private to the requesting app.\nEntries with null values are cleared in update and copy requests. These properties can only be retrieved using an authenticated request. An authenticated request uses an access token obtained with a OAuth 2 client ID. You cannot use an API key to retrieve private properties.",
+                    "type": "object"
+                },
+                "capabilities": {
+                    "description": "Capabilities the current user has on this file. Each capability corresponds to a fine-grained action that a user may take.",
+                    "properties": {
+                        "canAddChildren": {
+                            "description": "Whether the current user can add children to this folder. This is always false when the item is not a folder.",
+                            "type": "boolean"
+                        },
+                        "canAddFolderFromAnotherDrive": {
+                            "description": "Whether the current user can add a folder from another drive (different shared drive or My Drive) to this folder. This is false when the item is not a folder. Only populated for items in shared drives.",
+                            "type": "boolean"
+                        },
+                        "canAddMyDriveParent": {
+                            "description": "Whether the current user can add a parent for the item without removing an existing parent in the same request. Not populated for shared drive files.",
+                            "type": "boolean"
+                        },
+                        "canChangeCopyRequiresWriterPermission": {
+                            "description": "Whether the current user can change the copyRequiresWriterPermission restriction of this file.",
+                            "type": "boolean"
+                        },
+                        "canChangeViewersCanCopyContent": {
+                            "description": "Deprecated",
+                            "type": "boolean"
+                        },
+                        "canComment": {
+                            "description": "Whether the current user can comment on this file.",
+                            "type": "boolean"
+                        },
+                        "canCopy": {
+                            "description": "Whether the current user can copy this file. For an item in a shared drive, whether the current user can copy non-folder descendants of this item, or this item itself if it is not a folder.",
+                            "type": "boolean"
+                        },
+                        "canDelete": {
+                            "description": "Whether the current user can delete this file.",
+                            "type": "boolean"
+                        },
+                        "canDeleteChildren": {
+                            "description": "Whether the current user can delete children of this folder. This is false when the item is not a folder. Only populated for items in shared drives.",
+                            "type": "boolean"
+                        },
+                        "canDownload": {
+                            "description": "Whether the current user can download this file.",
+                            "type": "boolean"
+                        },
+                        "canEdit": {
+                            "description": "Whether the current user can edit this file. Other factors may limit the type of changes a user can make to a file. For example, see canChangeCopyRequiresWriterPermission or canModifyContent.",
+                            "type": "boolean"
+                        },
+                        "canListChildren": {
+                            "description": "Whether the current user can list the children of this folder. This is always false when the item is not a folder.",
+                            "type": "boolean"
+                        },
+                        "canModifyContent": {
+                            "description": "Whether the current user can modify the content of this file.",
+                            "type": "boolean"
+                        },
+                        "canModifyContentRestriction": {
+                            "description": "Whether the current user can modify restrictions on content of this file.",
+                            "type": "boolean"
+                        },
+                        "canMoveChildrenOutOfDrive": {
+                            "description": "Whether the current user can move children of this folder outside of the shared drive. This is false when the item is not a folder. Only populated for items in shared drives.",
+                            "type": "boolean"
+                        },
+                        "canMoveChildrenOutOfTeamDrive": {
+                            "description": "Deprecated - use canMoveChildrenOutOfDrive instead.",
+                            "type": "boolean"
+                        },
+                        "canMoveChildrenWithinDrive": {
+                            "description": "Whether the current user can move children of this folder within this drive. This is false when the item is not a folder. Note that a request to move the child may still fail depending on the current user's access to the child and to the destination folder.",
+                            "type": "boolean"
+                        },
+                        "canMoveChildrenWithinTeamDrive": {
+                            "description": "Deprecated - use canMoveChildrenWithinDrive instead.",
+                            "type": "boolean"
+                        },
+                        "canMoveItemIntoTeamDrive": {
+                            "description": "Deprecated - use canMoveItemOutOfDrive instead.",
+                            "type": "boolean"
+                        },
+                        "canMoveItemOutOfDrive": {
+                            "description": "Whether the current user can move this item outside of this drive by changing its parent. Note that a request to change the parent of the item may still fail depending on the new parent that is being added.",
+                            "type": "boolean"
+                        },
+                        "canMoveItemOutOfTeamDrive": {
+                            "description": "Deprecated - use canMoveItemOutOfDrive instead.",
+                            "type": "boolean"
+                        },
+                        "canMoveItemWithinDrive": {
+                            "description": "Whether the current user can move this item within this drive. Note that a request to change the parent of the item may still fail depending on the new parent that is being added and the parent that is being removed.",
+                            "type": "boolean"
+                        },
+                        "canMoveItemWithinTeamDrive": {
+                            "description": "Deprecated - use canMoveItemWithinDrive instead.",
+                            "type": "boolean"
+                        },
+                        "canMoveTeamDriveItem": {
+                            "description": "Deprecated - use canMoveItemWithinDrive or canMoveItemOutOfDrive instead.",
+                            "type": "boolean"
+                        },
+                        "canReadDrive": {
+                            "description": "Whether the current user can read the shared drive to which this file belongs. Only populated for items in shared drives.",
+                            "type": "boolean"
+                        },
+                        "canReadRevisions": {
+                            "description": "Whether the current user can read the revisions resource of this file. For a shared drive item, whether revisions of non-folder descendants of this item, or this item itself if it is not a folder, can be read.",
+                            "type": "boolean"
+                        },
+                        "canReadTeamDrive": {
+                            "description": "Deprecated - use canReadDrive instead.",
+                            "type": "boolean"
+                        },
+                        "canRemoveChildren": {
+                            "description": "Whether the current user can remove children from this folder. This is always false when the item is not a folder. For a folder in a shared drive, use canDeleteChildren or canTrashChildren instead.",
+                            "type": "boolean"
+                        },
+                        "canRemoveMyDriveParent": {
+                            "description": "Whether the current user can remove a parent from the item without adding another parent in the same request. Not populated for shared drive files.",
+                            "type": "boolean"
+                        },
+                        "canRename": {
+                            "description": "Whether the current user can rename this file.",
+                            "type": "boolean"
+                        },
+                        "canShare": {
+                            "description": "Whether the current user can modify the sharing settings for this file.",
+                            "type": "boolean"
+                        },
+                        "canTrash": {
+                            "description": "Whether the current user can move this file to trash.",
+                            "type": "boolean"
+                        },
+                        "canTrashChildren": {
+                            "description": "Whether the current user can trash children of this folder. This is false when the item is not a folder. Only populated for items in shared drives.",
+                            "type": "boolean"
+                        },
+                        "canUntrash": {
+                            "description": "Whether the current user can restore this file from trash.",
+                            "type": "boolean"
+                        }
+                    },
+                    "type": "object"
+                },
+                "contentHints": {
+                    "description": "Additional information about the content of the file. These fields are never populated in responses.",
+                    "properties": {
+                        "indexableText": {
+                            "description": "Text to be indexed for the file to improve fullText queries. This is limited to 128KB in length and may contain HTML elements.",
+                            "type": "string"
+                        },
+                        "thumbnail": {
+                            "description": "A thumbnail for the file. This will only be used if Google Drive cannot generate a standard thumbnail.",
+                            "properties": {
+                                "image": {
+                                    "description": "The thumbnail data encoded with URL-safe Base64 (RFC 4648 section 5).",
+                                    "format": "byte",
+                                    "type": "string"
+                                },
+                                "mimeType": {
+                                    "description": "The MIME type of the thumbnail.",
+                                    "type": "string"
+                                }
+                            },
+                            "type": "object"
+                        }
+                    },
+                    "type": "object"
+                },
+                "contentRestrictions": {
+                    "description": "Restrictions for accessing the content of the file. Only populated if such a restriction exists.",
+                    "items": {
+                        "$ref": "ContentRestriction"
+                    },
+                    "type": "array"
+                },
+                "copyRequiresWriterPermission": {
+                    "description": "Whether the options to copy, print, or download this file, should be disabled for readers and commenters.",
+                    "type": "boolean"
+                },
+                "createdTime": {
+                    "description": "The time at which the file was created (RFC 3339 date-time).",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "description": {
+                    "description": "A short description of the file.",
+                    "type": "string"
+                },
+                "driveId": {
+                    "description": "ID of the shared drive the file resides in. Only populated for items in shared drives.",
+                    "type": "string"
+                },
+                "explicitlyTrashed": {
+                    "description": "Whether the file has been explicitly trashed, as opposed to recursively trashed from a parent folder.",
+                    "type": "boolean"
+                },
+                "exportLinks": {
+                    "additionalProperties": {
+                        "description": "A mapping from export format to URL",
+                        "type": "string"
+                    },
+                    "description": "Links for exporting Docs Editors files to specific formats.",
+                    "type": "object"
+                },
+                "fileExtension": {
+                    "description": "The final component of fullFileExtension. This is only available for files with binary content in Google Drive.",
+                    "type": "string"
+                },
+                "folderColorRgb": {
+                    "description": "The color for a folder as an RGB hex string. The supported colors are published in the folderColorPalette field of the About resource.\nIf an unsupported color is specified, the closest color in the palette will be used instead.",
+                    "type": "string"
+                },
+                "fullFileExtension": {
+                    "description": "The full file extension extracted from the name field. May contain multiple concatenated extensions, such as \"tar.gz\". This is only available for files with binary content in Google Drive.\nThis is automatically updated when the name field changes, however it is not cleared if the new name does not contain a valid extension.",
+                    "type": "string"
+                },
+                "hasAugmentedPermissions": {
+                    "description": "Whether there are permissions directly on this file. This field is only populated for items in shared drives.",
+                    "type": "boolean"
+                },
+                "hasThumbnail": {
+                    "description": "Whether this file has a thumbnail. This does not indicate whether the requesting app has access to the thumbnail. To check access, look for the presence of the thumbnailLink field.",
+                    "type": "boolean"
+                },
+                "headRevisionId": {
+                    "description": "The ID of the file's head revision. This is currently only available for files with binary content in Google Drive.",
+                    "type": "string"
+                },
+                "iconLink": {
+                    "description": "A static, unauthenticated link to the file's icon.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "The ID of the file.",
+                    "type": "string"
+                },
+                "imageMediaMetadata": {
+                    "description": "Additional metadata about image media, if available.",
+                    "properties": {
+                        "aperture": {
+                            "description": "The aperture used to create the photo (f-number).",
+                            "format": "float",
+                            "type": "number"
+                        },
+                        "cameraMake": {
+                            "description": "The make of the camera used to create the photo.",
+                            "type": "string"
+                        },
+                        "cameraModel": {
+                            "description": "The model of the camera used to create the photo.",
+                            "type": "string"
+                        },
+                        "colorSpace": {
+                            "description": "The color space of the photo.",
+                            "type": "string"
+                        },
+                        "exposureBias": {
+                            "description": "The exposure bias of the photo (APEX value).",
+                            "format": "float",
+                            "type": "number"
+                        },
+                        "exposureMode": {
+                            "description": "The exposure mode used to create the photo.",
+                            "type": "string"
+                        },
+                        "exposureTime": {
+                            "description": "The length of the exposure, in seconds.",
+                            "format": "float",
+                            "type": "number"
+                        },
+                        "flashUsed": {
+                            "description": "Whether a flash was used to create the photo.",
+                            "type": "boolean"
+                        },
+                        "focalLength": {
+                            "description": "The focal length used to create the photo, in millimeters.",
+                            "format": "float",
+                            "type": "number"
+                        },
+                        "height": {
+                            "description": "The height of the image in pixels.",
+                            "format": "int32",
+                            "type": "integer"
+                        },
+                        "isoSpeed": {
+                            "description": "The ISO speed used to create the photo.",
+                            "format": "int32",
+                            "type": "integer"
+                        },
+                        "lens": {
+                            "description": "The lens used to create the photo.",
+                            "type": "string"
+                        },
+                        "location": {
+                            "description": "Geographic location information stored in the image.",
+                            "properties": {
+                                "altitude": {
+                                    "description": "The altitude stored in the image.",
+                                    "format": "double",
+                                    "type": "number"
+                                },
+                                "latitude": {
+                                    "description": "The latitude stored in the image.",
+                                    "format": "double",
+                                    "type": "number"
+                                },
+                                "longitude": {
+                                    "description": "The longitude stored in the image.",
+                                    "format": "double",
+                                    "type": "number"
+                                }
+                            },
+                            "type": "object"
+                        },
+                        "maxApertureValue": {
+                            "description": "The smallest f-number of the lens at the focal length used to create the photo (APEX value).",
+                            "format": "float",
+                            "type": "number"
+                        },
+                        "meteringMode": {
+                            "description": "The metering mode used to create the photo.",
+                            "type": "string"
+                        },
+                        "rotation": {
+                            "description": "The number of clockwise 90 degree rotations applied from the image's original orientation.",
+                            "format": "int32",
+                            "type": "integer"
+                        },
+                        "sensor": {
+                            "description": "The type of sensor used to create the photo.",
+                            "type": "string"
+                        },
+                        "subjectDistance": {
+                            "description": "The distance to the subject of the photo, in meters.",
+                            "format": "int32",
+                            "type": "integer"
+                        },
+                        "time": {
+                            "description": "The date and time the photo was taken (EXIF DateTime).",
+                            "type": "string"
+                        },
+                        "whiteBalance": {
+                            "description": "The white balance mode used to create the photo.",
+                            "type": "string"
+                        },
+                        "width": {
+                            "description": "The width of the image in pixels.",
+                            "format": "int32",
+                            "type": "integer"
+                        }
+                    },
+                    "type": "object"
+                },
+                "isAppAuthorized": {
+                    "description": "Whether the file was created or opened by the requesting app.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "default": "drive#file",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#file\".",
+                    "type": "string"
+                },
+                "lastModifyingUser": {
+                    "$ref": "User",
+                    "description": "The last user to modify the file."
+                },
+                "md5Checksum": {
+                    "description": "The MD5 checksum for the content of the file. This is only applicable to files with binary content in Google Drive.",
+                    "type": "string"
+                },
+                "mimeType": {
+                    "description": "The MIME type of the file.\nGoogle Drive will attempt to automatically detect an appropriate value from uploaded content if no value is provided. The value cannot be changed unless a new revision is uploaded.\nIf a file is created with a Google Doc MIME type, the uploaded content will be imported if possible. The supported import formats are published in the About resource.",
+                    "type": "string"
+                },
+                "modifiedByMe": {
+                    "description": "Whether the file has been modified by this user.",
+                    "type": "boolean"
+                },
+                "modifiedByMeTime": {
+                    "description": "The last time the file was modified by the user (RFC 3339 date-time).",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "modifiedTime": {
+                    "description": "The last time the file was modified by anyone (RFC 3339 date-time).\nNote that setting modifiedTime will also update modifiedByMeTime for the user.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The name of the file. This is not necessarily unique within a folder. Note that for immutable items such as the top level folders of shared drives, My Drive root folder, and Application Data folder the name is constant.",
+                    "type": "string"
+                },
+                "originalFilename": {
+                    "description": "The original filename of the uploaded content if available, or else the original value of the name field. This is only available for files with binary content in Google Drive.",
+                    "type": "string"
+                },
+                "ownedByMe": {
+                    "description": "Whether the user owns the file. Not populated for items in shared drives.",
+                    "type": "boolean"
+                },
+                "owners": {
+                    "description": "The owners of the file. Currently, only certain legacy files may have more than one owner. Not populated for items in shared drives.",
+                    "items": {
+                        "$ref": "User"
+                    },
+                    "type": "array"
+                },
+                "parents": {
+                    "description": "The IDs of the parent folders which contain the file.\nIf not specified as part of a create request, the file will be placed directly in the user's My Drive folder. If not specified as part of a copy request, the file will inherit any discoverable parents of the source file. Update requests must use the addParents and removeParents parameters to modify the parents list.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "permissionIds": {
+                    "description": "List of permission IDs for users with access to this file.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "permissions": {
+                    "description": "The full list of permissions for the file. This is only available if the requesting user can share the file. Not populated for items in shared drives.",
+                    "items": {
+                        "$ref": "Permission"
+                    },
+                    "type": "array"
+                },
+                "properties": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "A collection of arbitrary key-value pairs which are visible to all apps.\nEntries with null values are cleared in update and copy requests.",
+                    "type": "object"
+                },
+                "quotaBytesUsed": {
+                    "description": "The number of storage quota bytes used by the file. This includes the head revision as well as previous revisions with keepForever enabled.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "shared": {
+                    "description": "Whether the file has been shared. Not populated for items in shared drives.",
+                    "type": "boolean"
+                },
+                "sharedWithMeTime": {
+                    "description": "The time at which the file was shared with the user, if applicable (RFC 3339 date-time).",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "sharingUser": {
+                    "$ref": "User",
+                    "description": "The user who shared the file with the requesting user, if applicable."
+                },
+                "shortcutDetails": {
+                    "description": "Shortcut file details. Only populated for shortcut files, which have the mimeType field set to application/vnd.google-apps.shortcut.",
+                    "properties": {
+                        "targetId": {
+                            "description": "The ID of the file that this shortcut points to.",
+                            "type": "string"
+                        },
+                        "targetMimeType": {
+                            "description": "The MIME type of the file that this shortcut points to. The value of this field is a snapshot of the target's MIME type, captured when the shortcut is created.",
+                            "type": "string"
+                        }
+                    },
+                    "type": "object"
+                },
+                "size": {
+                    "description": "The size of the file's content in bytes. This is applicable to binary files in Google Drive and Google Docs files.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "spaces": {
+                    "description": "The list of spaces which contain the file. The currently supported values are 'drive', 'appDataFolder' and 'photos'.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "starred": {
+                    "description": "Whether the user has starred the file.",
+                    "type": "boolean"
+                },
+                "teamDriveId": {
+                    "description": "Deprecated - use driveId instead.",
+                    "type": "string"
+                },
+                "thumbnailLink": {
+                    "description": "A short-lived link to the file's thumbnail, if available. Typically lasts on the order of hours. Only populated when the requesting app can access the file's content. If the file isn't shared publicly, the URL returned in Files.thumbnailLink must be fetched using a credentialed request.",
+                    "type": "string"
+                },
+                "thumbnailVersion": {
+                    "description": "The thumbnail version for use in thumbnail cache invalidation.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "trashed": {
+                    "description": "Whether the file has been trashed, either explicitly or from a trashed parent folder. Only the owner may trash a file. The trashed item is excluded from all files.list responses returned for any user who does not own the file. However, all users with access to the file can see the trashed item metadata in an API response. All users with access can copy, download, export, and share the file.",
+                    "type": "boolean"
+                },
+                "trashedTime": {
+                    "description": "The time that the item was trashed (RFC 3339 date-time). Only populated for items in shared drives.",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "trashingUser": {
+                    "$ref": "User",
+                    "description": "If the file has been explicitly trashed, the user who trashed it. Only populated for items in shared drives."
+                },
+                "version": {
+                    "description": "A monotonically increasing version number for the file. This reflects every change made to the file on the server, even those not visible to the user.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "videoMediaMetadata": {
+                    "description": "Additional metadata about video media. This may not be available immediately upon upload.",
+                    "properties": {
+                        "durationMillis": {
+                            "description": "The duration of the video in milliseconds.",
+                            "format": "int64",
+                            "type": "string"
+                        },
+                        "height": {
+                            "description": "The height of the video in pixels.",
+                            "format": "int32",
+                            "type": "integer"
+                        },
+                        "width": {
+                            "description": "The width of the video in pixels.",
+                            "format": "int32",
+                            "type": "integer"
+                        }
+                    },
+                    "type": "object"
+                },
+                "viewedByMe": {
+                    "description": "Whether the file has been viewed by this user.",
+                    "type": "boolean"
+                },
+                "viewedByMeTime": {
+                    "description": "The last time the file was viewed by the user (RFC 3339 date-time).",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "viewersCanCopyContent": {
+                    "description": "Deprecated - use copyRequiresWriterPermission instead.",
+                    "type": "boolean"
+                },
+                "webContentLink": {
+                    "description": "A link for downloading the content of the file in a browser. This is only available for files with binary content in Google Drive.",
+                    "type": "string"
+                },
+                "webViewLink": {
+                    "description": "A link for opening the file in a relevant Google editor or viewer in a browser.",
+                    "type": "string"
+                },
+                "writersCanShare": {
+                    "description": "Whether users with only writer permission can modify the file's permissions. Not populated for items in shared drives.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "FileList": {
+            "description": "A list of files.",
+            "id": "FileList",
+            "properties": {
+                "files": {
+                    "description": "The list of files. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
+                    "items": {
+                        "$ref": "File"
+                    },
+                    "type": "array"
+                },
+                "incompleteSearch": {
+                    "description": "Whether the search process was incomplete. If true, then some search results may be missing, since all documents were not searched. This may occur when searching multiple drives with the \"allDrives\" corpora, but all corpora could not be searched. When this happens, it is suggested that clients narrow their query by choosing a different corpus such as \"user\" or \"drive\".",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "default": "drive#fileList",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#fileList\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "The page token for the next page of files. This will be absent if the end of the files list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GeneratedIds": {
+            "description": "A list of generated file IDs which can be provided in create requests.",
+            "id": "GeneratedIds",
+            "properties": {
+                "ids": {
+                    "description": "The IDs generated for the requesting user in the specified space.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "default": "drive#generatedIds",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#generatedIds\".",
+                    "type": "string"
+                },
+                "space": {
+                    "description": "The type of file that can be created with these IDs.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Permission": {
+            "description": "A permission for a file. A permission grants a user, group, domain or the world access to a file or a folder hierarchy.",
+            "id": "Permission",
+            "properties": {
+                "allowFileDiscovery": {
+                    "description": "Whether the permission allows the file to be discovered through search. This is only applicable for permissions of type domain or anyone.",
+                    "type": "boolean"
+                },
+                "deleted": {
+                    "description": "Whether the account associated with this permission has been deleted. This field only pertains to user and group permissions.",
+                    "type": "boolean"
+                },
+                "displayName": {
+                    "description": "The \"pretty\" name of the value of the permission. The following is a list of examples for each type of permission:  \n- user - User's full name, as defined for their Google account, such as \"Joe Smith.\" \n- group - Name of the Google Group, such as \"The Company Administrators.\" \n- domain - String domain name, such as \"thecompany.com.\" \n- anyone - No displayName is present.",
+                    "type": "string"
+                },
+                "domain": {
+                    "description": "The domain to which this permission refers.",
+                    "type": "string"
+                },
+                "emailAddress": {
+                    "description": "The email address of the user or group to which this permission refers.",
+                    "type": "string"
+                },
+                "expirationTime": {
+                    "description": "The time at which this permission will expire (RFC 3339 date-time). Expiration times have the following restrictions:  \n- They can only be set on user and group permissions \n- The time must be in the future \n- The time cannot be more than a year in the future",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "The ID of this permission. This is a unique identifier for the grantee, and is published in User resources as permissionId. IDs should be treated as opaque values.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "drive#permission",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#permission\".",
+                    "type": "string"
+                },
+                "permissionDetails": {
+                    "description": "Details of whether the permissions on this shared drive item are inherited or directly on this item. This is an output-only field which is present only for shared drive items.",
+                    "items": {
+                        "properties": {
+                            "inherited": {
+                                "description": "Whether this permission is inherited. This field is always populated. This is an output-only field.",
+                                "type": "boolean"
+                            },
+                            "inheritedFrom": {
+                                "description": "The ID of the item from which this permission is inherited. This is an output-only field.",
+                                "type": "string"
+                            },
+                            "permissionType": {
+                                "description": "The permission type for this user. While new values may be added in future, the following are currently possible:  \n- file \n- member",
+                                "type": "string"
+                            },
+                            "role": {
+                                "description": "The primary role for this user. While new values may be added in the future, the following are currently possible:  \n- organizer \n- fileOrganizer \n- writer \n- commenter \n- reader",
+                                "type": "string"
+                            }
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "photoLink": {
+                    "description": "A link to the user's profile photo, if available.",
+                    "type": "string"
+                },
+                "role": {
+                    "annotations": {
+                        "required": [
+                            "drive.permissions.create"
+                        ]
+                    },
+                    "description": "The role granted by this permission. While new values may be supported in the future, the following are currently allowed:  \n- owner \n- organizer \n- fileOrganizer \n- writer \n- commenter \n- reader",
+                    "type": "string"
+                },
+                "teamDrivePermissionDetails": {
+                    "description": "Deprecated - use permissionDetails instead.",
+                    "items": {
+                        "properties": {
+                            "inherited": {
+                                "description": "Deprecated - use permissionDetails/inherited instead.",
+                                "type": "boolean"
+                            },
+                            "inheritedFrom": {
+                                "description": "Deprecated - use permissionDetails/inheritedFrom instead.",
+                                "type": "string"
+                            },
+                            "role": {
+                                "description": "Deprecated - use permissionDetails/role instead.",
+                                "type": "string"
+                            },
+                            "teamDrivePermissionType": {
+                                "description": "Deprecated - use permissionDetails/permissionType instead.",
+                                "type": "string"
+                            }
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "type": {
+                    "annotations": {
+                        "required": [
+                            "drive.permissions.create"
+                        ]
+                    },
+                    "description": "The type of the grantee. Valid values are:  \n- user \n- group \n- domain \n- anyone  When creating a permission, if type is user or group, you must provide an emailAddress for the user or group. When type is domain, you must provide a domain. There isn't extra information required for a anyone type.",
+                    "type": "string"
+                },
+                "view": {
+                    "description": "Indicates the view for this permission. Only populated for permissions that belong to a view. published is the only supported value.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PermissionList": {
+            "description": "A list of permissions for a file.",
+            "id": "PermissionList",
+            "properties": {
+                "kind": {
+                    "default": "drive#permissionList",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#permissionList\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "The page token for the next page of permissions. This field will be absent if the end of the permissions list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results.",
+                    "type": "string"
+                },
+                "permissions": {
+                    "description": "The list of permissions. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
+                    "items": {
+                        "$ref": "Permission"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Reply": {
+            "description": "A reply to a comment on a file.",
+            "id": "Reply",
+            "properties": {
+                "action": {
+                    "description": "The action the reply performed to the parent comment. Valid values are:  \n- resolve \n- reopen",
+                    "type": "string"
+                },
+                "author": {
+                    "$ref": "User",
+                    "description": "The author of the reply. The author's email address and permission ID will not be populated."
+                },
+                "content": {
+                    "annotations": {
+                        "required": [
+                            "drive.replies.update"
+                        ]
+                    },
+                    "description": "The plain text content of the reply. This field is used for setting the content, while htmlContent should be displayed. This is required on creates if no action is specified.",
+                    "type": "string"
+                },
+                "createdTime": {
+                    "description": "The time at which the reply was created (RFC 3339 date-time).",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "deleted": {
+                    "description": "Whether the reply has been deleted. A deleted reply has no content.",
+                    "type": "boolean"
+                },
+                "htmlContent": {
+                    "description": "The content of the reply with HTML formatting.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "The ID of the reply.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "drive#reply",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#reply\".",
+                    "type": "string"
+                },
+                "modifiedTime": {
+                    "description": "The last time the reply was modified (RFC 3339 date-time).",
+                    "format": "date-time",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReplyList": {
+            "description": "A list of replies to a comment on a file.",
+            "id": "ReplyList",
+            "properties": {
+                "kind": {
+                    "default": "drive#replyList",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#replyList\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "The page token for the next page of replies. This will be absent if the end of the replies list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results.",
+                    "type": "string"
+                },
+                "replies": {
+                    "description": "The list of replies. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
+                    "items": {
+                        "$ref": "Reply"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Revision": {
+            "description": "The metadata for a revision to a file.",
+            "id": "Revision",
+            "properties": {
+                "exportLinks": {
+                    "additionalProperties": {
+                        "description": "A mapping from export format to URL",
+                        "type": "string"
+                    },
+                    "description": "Links for exporting Docs Editors files to specific formats.",
+                    "type": "object"
+                },
+                "id": {
+                    "description": "The ID of the revision.",
+                    "type": "string"
+                },
+                "keepForever": {
+                    "description": "Whether to keep this revision forever, even if it is no longer the head revision. If not set, the revision will be automatically purged 30 days after newer content is uploaded. This can be set on a maximum of 200 revisions for a file.\nThis field is only applicable to files with binary content in Drive.",
+                    "type": "boolean"
+                },
+                "kind": {
+                    "default": "drive#revision",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#revision\".",
+                    "type": "string"
+                },
+                "lastModifyingUser": {
+                    "$ref": "User",
+                    "description": "The last user to modify this revision."
+                },
+                "md5Checksum": {
+                    "description": "The MD5 checksum of the revision's content. This is only applicable to files with binary content in Drive.",
+                    "type": "string"
+                },
+                "mimeType": {
+                    "description": "The MIME type of the revision.",
+                    "type": "string"
+                },
+                "modifiedTime": {
+                    "description": "The last time the revision was modified (RFC 3339 date-time).",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "originalFilename": {
+                    "description": "The original filename used to create this revision. This is only applicable to files with binary content in Drive.",
+                    "type": "string"
+                },
+                "publishAuto": {
+                    "description": "Whether subsequent revisions will be automatically republished. This is only applicable to Docs Editors files.",
+                    "type": "boolean"
+                },
+                "published": {
+                    "description": "Whether this revision is published. This is only applicable to Docs Editors files.",
+                    "type": "boolean"
+                },
+                "publishedLink": {
+                    "description": "A link to the published revision. This is only populated for Google Sites files.",
+                    "type": "string"
+                },
+                "publishedOutsideDomain": {
+                    "description": "Whether this revision is published outside the domain. This is only applicable to Docs Editors files.",
+                    "type": "boolean"
+                },
+                "size": {
+                    "description": "The size of the revision's content in bytes. This is only applicable to files with binary content in Drive.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RevisionList": {
+            "description": "A list of revisions of a file.",
+            "id": "RevisionList",
+            "properties": {
+                "kind": {
+                    "default": "drive#revisionList",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#revisionList\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "The page token for the next page of revisions. This will be absent if the end of the revisions list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results.",
+                    "type": "string"
+                },
+                "revisions": {
+                    "description": "The list of revisions. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
+                    "items": {
+                        "$ref": "Revision"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "StartPageToken": {
+            "id": "StartPageToken",
+            "properties": {
+                "kind": {
+                    "default": "drive#startPageToken",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#startPageToken\".",
+                    "type": "string"
+                },
+                "startPageToken": {
+                    "description": "The starting page token for listing changes.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TeamDrive": {
+            "description": "Deprecated: use the drive collection instead.",
+            "id": "TeamDrive",
+            "properties": {
+                "backgroundImageFile": {
+                    "description": "An image file and cropping parameters from which a background image for this Team Drive is set. This is a write only field; it can only be set on drive.teamdrives.update requests that don't set themeId. When specified, all fields of the backgroundImageFile must be set.",
+                    "properties": {
+                        "id": {
+                            "description": "The ID of an image file in Drive to use for the background image.",
+                            "type": "string"
+                        },
+                        "width": {
+                            "description": "The width of the cropped image in the closed range of 0 to 1. This value represents the width of the cropped image divided by the width of the entire image. The height is computed by applying a width to height aspect ratio of 80 to 9. The resulting image must be at least 1280 pixels wide and 144 pixels high.",
+                            "format": "float",
+                            "type": "number"
+                        },
+                        "xCoordinate": {
+                            "description": "The X coordinate of the upper left corner of the cropping area in the background image. This is a value in the closed range of 0 to 1. This value represents the horizontal distance from the left side of the entire image to the left side of the cropping area divided by the width of the entire image.",
+                            "format": "float",
+                            "type": "number"
+                        },
+                        "yCoordinate": {
+                            "description": "The Y coordinate of the upper left corner of the cropping area in the background image. This is a value in the closed range of 0 to 1. This value represents the vertical distance from the top side of the entire image to the top side of the cropping area divided by the height of the entire image.",
+                            "format": "float",
+                            "type": "number"
+                        }
+                    },
+                    "type": "object"
+                },
+                "backgroundImageLink": {
+                    "description": "A short-lived link to this Team Drive's background image.",
+                    "type": "string"
+                },
+                "capabilities": {
+                    "description": "Capabilities the current user has on this Team Drive.",
+                    "properties": {
+                        "canAddChildren": {
+                            "description": "Whether the current user can add children to folders in this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canChangeCopyRequiresWriterPermissionRestriction": {
+                            "description": "Whether the current user can change the copyRequiresWriterPermission restriction of this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canChangeDomainUsersOnlyRestriction": {
+                            "description": "Whether the current user can change the domainUsersOnly restriction of this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canChangeTeamDriveBackground": {
+                            "description": "Whether the current user can change the background of this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canChangeTeamMembersOnlyRestriction": {
+                            "description": "Whether the current user can change the teamMembersOnly restriction of this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canComment": {
+                            "description": "Whether the current user can comment on files in this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canCopy": {
+                            "description": "Whether the current user can copy files in this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canDeleteChildren": {
+                            "description": "Whether the current user can delete children from folders in this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canDeleteTeamDrive": {
+                            "description": "Whether the current user can delete this Team Drive. Attempting to delete the Team Drive may still fail if there are untrashed items inside the Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canDownload": {
+                            "description": "Whether the current user can download files in this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canEdit": {
+                            "description": "Whether the current user can edit files in this Team Drive",
+                            "type": "boolean"
+                        },
+                        "canListChildren": {
+                            "description": "Whether the current user can list the children of folders in this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canManageMembers": {
+                            "description": "Whether the current user can add members to this Team Drive or remove them or change their role.",
+                            "type": "boolean"
+                        },
+                        "canReadRevisions": {
+                            "description": "Whether the current user can read the revisions resource of files in this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canRemoveChildren": {
+                            "description": "Deprecated - use canDeleteChildren or canTrashChildren instead.",
+                            "type": "boolean"
+                        },
+                        "canRename": {
+                            "description": "Whether the current user can rename files or folders in this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canRenameTeamDrive": {
+                            "description": "Whether the current user can rename this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canShare": {
+                            "description": "Whether the current user can share files or folders in this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "canTrashChildren": {
+                            "description": "Whether the current user can trash children from folders in this Team Drive.",
+                            "type": "boolean"
+                        }
+                    },
+                    "type": "object"
+                },
+                "colorRgb": {
+                    "description": "The color of this Team Drive as an RGB hex string. It can only be set on a drive.teamdrives.update request that does not set themeId.",
+                    "type": "string"
+                },
+                "createdTime": {
+                    "description": "The time at which the Team Drive was created (RFC 3339 date-time).",
+                    "format": "date-time",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "The ID of this Team Drive which is also the ID of the top level folder of this Team Drive.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "drive#teamDrive",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#teamDrive\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The name of this Team Drive.",
+                    "type": "string"
+                },
+                "restrictions": {
+                    "description": "A set of restrictions that apply to this Team Drive or items inside this Team Drive.",
+                    "properties": {
+                        "adminManagedRestrictions": {
+                            "description": "Whether administrative privileges on this Team Drive are required to modify restrictions.",
+                            "type": "boolean"
+                        },
+                        "copyRequiresWriterPermission": {
+                            "description": "Whether the options to copy, print, or download files inside this Team Drive, should be disabled for readers and commenters. When this restriction is set to true, it will override the similarly named field to true for any file inside this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "domainUsersOnly": {
+                            "description": "Whether access to this Team Drive and items inside this Team Drive is restricted to users of the domain to which this Team Drive belongs. This restriction may be overridden by other sharing policies controlled outside of this Team Drive.",
+                            "type": "boolean"
+                        },
+                        "teamMembersOnly": {
+                            "description": "Whether access to items inside this Team Drive is restricted to members of this Team Drive.",
+                            "type": "boolean"
+                        }
+                    },
+                    "type": "object"
+                },
+                "themeId": {
+                    "description": "The ID of the theme from which the background image and color will be set. The set of possible teamDriveThemes can be retrieved from a drive.about.get response. When not specified on a drive.teamdrives.create request, a random theme is chosen from which the background image and color are set. This is a write-only field; it can only be set on requests that don't set colorRgb or backgroundImageFile.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TeamDriveList": {
+            "description": "A list of Team Drives.",
+            "id": "TeamDriveList",
+            "properties": {
+                "kind": {
+                    "default": "drive#teamDriveList",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#teamDriveList\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "The page token for the next page of Team Drives. This will be absent if the end of the Team Drives list has been reached. If the token is rejected for any reason, it should be discarded, and pagination should be restarted from the first page of results.",
+                    "type": "string"
+                },
+                "teamDrives": {
+                    "description": "The list of Team Drives. If nextPageToken is populated, then this list may be incomplete and an additional page of results should be fetched.",
+                    "items": {
+                        "$ref": "TeamDrive"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "User": {
+            "description": "Information about a Drive user.",
+            "id": "User",
+            "properties": {
+                "displayName": {
+                    "description": "A plain text displayable name for this user.",
+                    "type": "string"
+                },
+                "emailAddress": {
+                    "description": "The email address of the user. This may not be present in certain contexts if the user has not made their email address visible to the requester.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "drive#user",
+                    "description": "Identifies what kind of resource this is. Value: the fixed string \"drive#user\".",
+                    "type": "string"
+                },
+                "me": {
+                    "description": "Whether this user is the requesting user.",
+                    "type": "boolean"
+                },
+                "permissionId": {
+                    "description": "The user's ID as visible in Permission resources.",
+                    "type": "string"
+                },
+                "photoLink": {
+                    "description": "A link to the user's profile photo, if available.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        }
     },
-    "update": {
-     "id": "drive.teamdrives.update",
-     "path": "teamdrives/{teamDriveId}",
-     "httpMethod": "PATCH",
-     "description": "Deprecated use drives.update instead",
-     "parameters": {
-      "teamDriveId": {
-       "type": "string",
-       "description": "The ID of the Team Drive",
-       "required": true,
-       "location": "path"
-      },
-      "useDomainAdminAccess": {
-       "type": "boolean",
-       "description": "Issue the request as a domain administrator; if set to true, then the requester will be granted access if they are an administrator of the domain to which the Team Drive belongs.",
-       "default": "false",
-       "location": "query"
-      }
-     },
-     "parameterOrder": [
-      "teamDriveId"
-     ],
-     "request": {
-      "$ref": "TeamDrive"
-     },
-     "response": {
-      "$ref": "TeamDrive"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/drive"
-     ]
-    }
-   }
-  }
- }
-}
+    "servicePath": "drive/v3/",
+    "title": "Drive API",
+    "version": "v3"
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/fcm.v1.json b/googleapiclient/discovery_cache/documents/fcm.v1.json
index 2bf9464..fcdd822 100644
--- a/googleapiclient/discovery_cache/documents/fcm.v1.json
+++ b/googleapiclient/discovery_cache/documents/fcm.v1.json
@@ -1,594 +1,594 @@
 {
-  "description": "FCM send API that provides a cross-platform messaging solution to reliably deliver messages at no cost.",
-  "servicePath": "",
-  "batchPath": "batch",
-  "name": "fcm",
-  "version": "v1",
-  "fullyEncodeReservedExpansion": true,
-  "parameters": {
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "callback": {
-      "location": "query",
-      "type": "string",
-      "description": "JSONP"
-    },
-    "upload_protocol": {
-      "location": "query",
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "location": "query",
-      "type": "string"
-    },
-    "alt": {
-      "default": "json",
-      "location": "query",
-      "description": "Data format for response.",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "type": "string"
-    },
-    "key": {
-      "type": "string",
-      "location": "query",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token."
-    },
-    "prettyPrint": {
-      "default": "true",
-      "description": "Returns response with indentations and line breaks.",
-      "location": "query",
-      "type": "boolean"
-    },
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "location": "query"
-    },
-    "$.xgafv": {
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format.",
-      "location": "query"
-    },
-    "quotaUser": {
-      "location": "query",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "type": "string"
-    }
-  },
-  "documentationLink": "https://firebase.google.com/docs/cloud-messaging",
-  "ownerName": "Google",
-  "discoveryVersion": "v1",
-  "title": "Firebase Cloud Messaging API",
-  "version_module": true,
-  "kind": "discovery#restDescription",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "protocol": "rest",
-  "basePath": "",
-  "id": "fcm:v1",
-  "schemas": {
-    "Message": {
-      "type": "object",
-      "id": "Message",
-      "description": "Message to send by Firebase Cloud Messaging Service.",
-      "properties": {
-        "condition": {
-          "description": "Condition to send a message to, e.g. \"'foo' in topics && 'bar' in topics\".",
-          "type": "string"
-        },
-        "webpush": {
-          "$ref": "WebpushConfig",
-          "description": "Input only. [Webpush protocol](https://tools.ietf.org/html/rfc8030) options."
-        },
-        "android": {
-          "description": "Input only. Android specific options for messages sent through [FCM connection server](https://goo.gl/4GLdUl).",
-          "$ref": "AndroidConfig"
-        },
-        "apns": {
-          "description": "Input only. [Apple Push Notification Service](https://goo.gl/MXRTPa) specific options.",
-          "$ref": "ApnsConfig"
-        },
-        "token": {
-          "description": "Registration token to send a message to.",
-          "type": "string"
-        },
-        "notification": {
-          "description": "Input only. Basic notification template to use across all platforms.",
-          "$ref": "Notification"
-        },
-        "topic": {
-          "description": "Topic name to send a message to, e.g. \"weather\". Note: \"/topics/\" prefix should not be provided.",
-          "type": "string"
-        },
-        "fcmOptions": {
-          "description": "Input only. Template for FCM SDK feature options to use across all platforms.",
-          "$ref": "FcmOptions"
-        },
-        "name": {
-          "type": "string",
-          "description": "Output Only. The identifier of the message sent, in the format of `projects/*/messages/{message_id}`."
-        },
-        "data": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Input only. Arbitrary key/value payload. The key should not be a reserved word (\"from\", \"message_type\", or any word starting with \"google\" or \"gcm\")."
-        }
-      }
-    },
-    "Color": {
-      "properties": {
-        "red": {
-          "description": "The amount of red in the color as a value in the interval [0, 1].",
-          "format": "float",
-          "type": "number"
-        },
-        "blue": {
-          "description": "The amount of blue in the color as a value in the interval [0, 1].",
-          "format": "float",
-          "type": "number"
-        },
-        "green": {
-          "description": "The amount of green in the color as a value in the interval [0, 1].",
-          "type": "number",
-          "format": "float"
-        },
-        "alpha": {
-          "format": "float",
-          "description": "The fraction of this color that should be applied to the pixel. That is, the final pixel color is defined by the equation: pixel color = alpha * (this color) + (1.0 - alpha) * (background color) This means that a value of 1.0 corresponds to a solid color, whereas a value of 0.0 corresponds to a completely transparent color. This uses a wrapper message rather than a simple float scalar so that it is possible to distinguish between a default value and the value being unset. If omitted, this color object is to be rendered as a solid color (as if the alpha value had been explicitly given with a value of 1.0).",
-          "type": "number"
-        }
-      },
-      "description": "Represents a color in the RGBA color space. This representation is designed for simplicity of conversion to/from color representations in various languages over compactness; for example, the fields of this representation can be trivially provided to the constructor of \"java.awt.Color\" in Java; it can also be trivially provided to UIColor's \"+colorWithRed:green:blue:alpha\" method in iOS; and, with just a little work, it can be easily formatted into a CSS \"rgba()\" string in JavaScript, as well. Note: this proto does not carry information about the absolute color space that should be used to interpret the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, applications SHOULD assume the sRGB color space. Note: when color equality needs to be decided, implementations, unless documented otherwise, will treat two colors to be equal if all their red, green, blue and alpha values each differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... public static java.awt.Color fromProto(Color protocolor) { float alpha = protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue(), alpha); } public static Color toProto(java.awt.Color color) { float red = (float) color.getRed(); float green = (float) color.getGreen(); float blue = (float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) { result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / denominator) .build()); } return resultBuilder.build(); } // ... Example (iOS / Obj-C): // ... static UIColor* fromProto(Color* protocolor) { float red = [protocolor red]; float green = [protocolor green]; float blue = [protocolor blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if (alpha_wrapper != nil) { alpha = [alpha_wrapper value]; } return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; } static Color* toProto(UIColor* color) { CGFloat red, green, blue, alpha; if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) { return nil; } Color* result = [[Color alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue:blue]; if (alpha \u003c= 0.9999) { [result setAlpha:floatWrapperWithValue(alpha)]; } [result autorelease]; return result; } // ... Example (JavaScript): // ... var protoToCssColor = function(rgb_color) { var redFrac = rgb_color.red || 0.0; var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) { return rgbToCssColor_(red, green, blue); } var alphaFrac = rgb_color.alpha.value || 0.0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ',', alphaFrac, ')'].join(''); }; var rgbToCssColor_ = function(red, green, blue) { var rgbNumber = new Number((red \u003c\u003c 16) | (green \u003c\u003c 8) | blue); var hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; var resultBuilder = ['#']; for (var i = 0; i \u003c missingZeros; i++) { resultBuilder.push('0'); } resultBuilder.push(hexString); return resultBuilder.join(''); }; // ...",
-      "type": "object",
-      "id": "Color"
-    },
-    "WebpushFcmOptions": {
-      "description": "Options for features provided by the FCM SDK for Web.",
-      "properties": {
-        "analyticsLabel": {
-          "type": "string",
-          "description": "Label associated with the message's analytics data."
-        },
-        "link": {
-          "type": "string",
-          "description": "The link to open when the user clicks on the notification. For all URL values, HTTPS is required."
-        }
-      },
-      "id": "WebpushFcmOptions",
-      "type": "object"
-    },
-    "Notification": {
-      "properties": {
-        "body": {
-          "description": "The notification's body text.",
-          "type": "string"
-        },
-        "image": {
-          "type": "string",
-          "description": "Contains the URL of an image that is going to be downloaded on the device and displayed in a notification. JPEG, PNG, BMP have full support across platforms. Animated GIF and video only work on iOS. WebP and HEIF have varying levels of support across platforms and platform versions. Android has 1MB image size limit. Quota usage and implications/costs for hosting image on Firebase Storage: https://firebase.google.com/pricing"
-        },
-        "title": {
-          "type": "string",
-          "description": "The notification's title."
-        }
-      },
-      "description": "Basic notification template to use across all platforms.",
-      "type": "object",
-      "id": "Notification"
-    },
-    "AndroidFcmOptions": {
-      "properties": {
-        "analyticsLabel": {
-          "description": "Label associated with the message's analytics data.",
-          "type": "string"
-        }
-      },
-      "description": "Options for features provided by the FCM SDK for Android.",
-      "type": "object",
-      "id": "AndroidFcmOptions"
-    },
-    "SendMessageRequest": {
-      "description": "Request to send a message to specified target.",
-      "id": "SendMessageRequest",
-      "properties": {
-        "message": {
-          "description": "Required. Message to send.",
-          "$ref": "Message"
-        },
-        "validateOnly": {
-          "description": "Flag for testing the request without actually delivering the message.",
-          "type": "boolean"
-        }
-      },
-      "type": "object"
-    },
-    "LightSettings": {
-      "type": "object",
-      "properties": {
-        "lightOffDuration": {
-          "type": "string",
-          "format": "google-duration",
-          "description": "Required. Along with `light_on_duration `, define the blink rate of LED flashes. Resolution defined by [proto.Duration](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration)"
-        },
-        "color": {
-          "$ref": "Color",
-          "description": "Required. Set `color` of the LED with [google.type.Color](https://github.com/googleapis/googleapis/blob/master/google/type/color.proto)."
-        },
-        "lightOnDuration": {
-          "description": "Required. Along with `light_off_duration`, define the blink rate of LED flashes. Resolution defined by [proto.Duration](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration)",
-          "type": "string",
-          "format": "google-duration"
-        }
-      },
-      "id": "LightSettings",
-      "description": "Settings to control notification LED."
-    },
-    "FcmOptions": {
-      "type": "object",
-      "id": "FcmOptions",
-      "description": "Platform independent options for features provided by the FCM SDKs.",
-      "properties": {
-        "analyticsLabel": {
-          "type": "string",
-          "description": "Label associated with the message's analytics data."
-        }
-      }
-    },
-    "ApnsFcmOptions": {
-      "properties": {
-        "analyticsLabel": {
-          "description": "Label associated with the message's analytics data.",
-          "type": "string"
-        },
-        "image": {
-          "description": "Contains the URL of an image that is going to be displayed in a notification. If present, it will override google.firebase.fcm.v1.Notification.image.",
-          "type": "string"
-        }
-      },
-      "id": "ApnsFcmOptions",
-      "description": "Options for features provided by the FCM SDK for iOS.",
-      "type": "object"
-    },
-    "WebpushConfig": {
-      "description": "[Webpush protocol](https://tools.ietf.org/html/rfc8030) options.",
-      "properties": {
-        "headers": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "HTTP headers defined in webpush protocol. Refer to [Webpush protocol](https://tools.ietf.org/html/rfc8030#section-5) for supported headers, e.g. \"TTL\": \"15\".",
-          "type": "object"
-        },
-        "fcmOptions": {
-          "description": "Options for features provided by the FCM SDK for Web.",
-          "$ref": "WebpushFcmOptions"
-        },
-        "notification": {
-          "description": "Web Notification options as a JSON object. Supports Notification instance properties as defined in [Web Notification API](https://developer.mozilla.org/en-US/docs/Web/API/Notification). If present, \"title\" and \"body\" fields override [google.firebase.fcm.v1.Notification.title] and [google.firebase.fcm.v1.Notification.body].",
-          "type": "object",
-          "additionalProperties": {
-            "description": "Properties of the object.",
-            "type": "any"
-          }
-        },
-        "data": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Arbitrary key/value payload. If present, it will override google.firebase.fcm.v1.Message.data.",
-          "type": "object"
-        }
-      },
-      "type": "object",
-      "id": "WebpushConfig"
-    },
-    "AndroidConfig": {
-      "properties": {
-        "collapseKey": {
-          "description": "An identifier of a group of messages that can be collapsed, so that only the last message gets sent when delivery can be resumed. A maximum of 4 different collapse keys is allowed at any given time.",
-          "type": "string"
-        },
-        "priority": {
-          "type": "string",
-          "description": "Message priority. Can take \"normal\" and \"high\" values. For more information, see [Setting the priority of a message](https://goo.gl/GjONJv).",
-          "enum": [
-            "NORMAL",
-            "HIGH"
-          ],
-          "enumDescriptions": [
-            "Default priority for data messages. Normal priority messages won't open network connections on a sleeping device, and their delivery may be delayed to conserve the battery. For less time-sensitive messages, such as notifications of new email or other data to sync, choose normal delivery priority.",
-            "Default priority for notification messages. FCM attempts to deliver high priority messages immediately, allowing the FCM service to wake a sleeping device when possible and open a network connection to your app server. Apps with instant messaging, chat, or voice call alerts, for example, generally need to open a network connection and make sure FCM delivers the message to the device without delay. Set high priority if the message is time-critical and requires the user's immediate interaction, but beware that setting your messages to high priority contributes more to battery drain compared with normal priority messages."
-          ]
-        },
-        "restrictedPackageName": {
-          "type": "string",
-          "description": "Package name of the application where the registration token must match in order to receive the message."
-        },
-        "notification": {
-          "description": "Notification to send to android devices.",
-          "$ref": "AndroidNotification"
-        },
-        "fcmOptions": {
-          "description": "Options for features provided by the FCM SDK for Android.",
-          "$ref": "AndroidFcmOptions"
-        },
-        "directBootOk": {
-          "type": "boolean",
-          "description": "If set to true, messages will be allowed to be delivered to the app while the device is in direct boot mode. See [Support Direct Boot mode](https://developer.android.com/training/articles/direct-boot)."
-        },
-        "ttl": {
-          "description": "How long (in seconds) the message should be kept in FCM storage if the device is offline. The maximum time to live supported is 4 weeks, and the default value is 4 weeks if not set. Set it to 0 if want to send the message immediately. In JSON format, the Duration type is encoded as a string rather than an object, where the string ends in the suffix \"s\" (indicating seconds) and is preceded by the number of seconds, with nanoseconds expressed as fractional seconds. For example, 3 seconds with 0 nanoseconds should be encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should be expressed in JSON format as \"3.000000001s\". The ttl will be rounded down to the nearest second.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "data": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "type": "object",
-          "description": "Arbitrary key/value payload. If present, it will override google.firebase.fcm.v1.Message.data."
-        }
-      },
-      "type": "object",
-      "id": "AndroidConfig",
-      "description": "Android specific options for messages sent through [FCM connection server](https://goo.gl/4GLdUl)."
-    },
-    "ApnsConfig": {
-      "properties": {
-        "fcmOptions": {
-          "$ref": "ApnsFcmOptions",
-          "description": "Options for features provided by the FCM SDK for iOS."
-        },
-        "payload": {
-          "type": "object",
-          "additionalProperties": {
-            "description": "Properties of the object.",
-            "type": "any"
-          },
-          "description": "APNs payload as a JSON object, including both `aps` dictionary and custom payload. See [Payload Key Reference](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/generating_a_remote_notification). If present, it overrides google.firebase.fcm.v1.Notification.title and google.firebase.fcm.v1.Notification.body."
-        },
-        "headers": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "type": "object",
-          "description": "HTTP request headers defined in Apple Push Notification Service. Refer to [APNs request headers](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns) for supported headers, e.g. \"apns-priority\": \"10\"."
-        }
-      },
-      "description": "[Apple Push Notification Service](https://goo.gl/MXRTPa) specific options.",
-      "type": "object",
-      "id": "ApnsConfig"
-    },
-    "AndroidNotification": {
-      "description": "Notification to send to android devices.",
-      "properties": {
-        "channelId": {
-          "type": "string",
-          "description": "The [notification's channel id](https://developer.android.com/guide/topics/ui/notifiers/notifications#ManageChannels) (new in Android O). The app must create a channel with this channel ID before any notification with this channel ID is received. If you don't send this channel ID in the request, or if the channel ID provided has not yet been created by the app, FCM uses the channel ID specified in the app manifest."
-        },
-        "bodyLocArgs": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "Variable string values to be used in place of the format specifiers in body_loc_key to use to localize the body text to the user's current localization. See [Formatting and Styling](https://goo.gl/MalYE3) for more information."
-        },
-        "icon": {
-          "type": "string",
-          "description": "The notification's icon. Sets the notification icon to myicon for drawable resource myicon. If you don't send this key in the request, FCM displays the launcher icon specified in your app manifest."
-        },
-        "notificationCount": {
-          "description": "Sets the number of items this notification represents. May be displayed as a badge count for launchers that support badging.See [Notification Badge](https://developer.android.com/training/notify-user/badges). For example, this might be useful if you're using just one notification to represent multiple new messages but you want the count here to represent the number of total new messages. If zero or unspecified, systems that support badging use the default, which is to increment a number displayed on the long-press menu each time a new notification arrives.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "defaultVibrateTimings": {
-          "type": "boolean",
-          "description": "If set to true, use the Android framework's default vibrate pattern for the notification. Default values are specified in [config.xml](https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml). If `default_vibrate_timings` is set to true and `vibrate_timings` is also set, the default value is used instead of the user-specified `vibrate_timings`."
-        },
-        "visibility": {
-          "description": "Set the [Notification.visibility](https://developer.android.com/reference/android/app/Notification.html#visibility) of the notification.",
-          "enumDescriptions": [
-            "If unspecified, default to `Visibility.PRIVATE`.",
-            "Show this notification on all lockscreens, but conceal sensitive or private information on secure lockscreens.",
-            "Show this notification in its entirety on all lockscreens.",
-            "Do not reveal any part of this notification on a secure lockscreen."
-          ],
-          "enum": [
-            "VISIBILITY_UNSPECIFIED",
-            "PRIVATE",
-            "PUBLIC",
-            "SECRET"
-          ],
-          "type": "string"
-        },
-        "tag": {
-          "description": "Identifier used to replace existing notifications in the notification drawer. If not specified, each request creates a new notification. If specified and a notification with the same tag is already being shown, the new notification replaces the existing one in the notification drawer.",
-          "type": "string"
-        },
-        "titleLocKey": {
-          "type": "string",
-          "description": "The key to the title string in the app's string resources to use to localize the title text to the user's current localization. See [String Resources](https://goo.gl/NdFZGI) for more information."
-        },
-        "notificationPriority": {
-          "description": "Set the relative priority for this notification. Priority is an indication of how much of the user's attention should be consumed by this notification. Low-priority notifications may be hidden from the user in certain situations, while the user might be interrupted for a higher-priority notification. The effect of setting the same priorities may differ slightly on different platforms. Note this priority differs from `AndroidMessagePriority`. This priority is processed by the client after the message has been delivered, whereas [AndroidMessagePriority](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#androidmessagepriority) is an FCM concept that controls when the message is delivered.",
-          "enumDescriptions": [
-            "If priority is unspecified, notification priority is set to `PRIORITY_DEFAULT`.",
-            "Lowest notification priority. Notifications with this `PRIORITY_MIN` might not be shown to the user except under special circumstances, such as detailed notification logs.",
-            "Lower notification priority. The UI may choose to show the notifications smaller, or at a different position in the list, compared with notifications with `PRIORITY_DEFAULT`.",
-            "Default notification priority. If the application does not prioritize its own notifications, use this value for all notifications.",
-            "Higher notification priority. Use this for more important notifications or alerts. The UI may choose to show these notifications larger, or at a different position in the notification lists, compared with notifications with `PRIORITY_DEFAULT`.",
-            "Highest notification priority. Use this for the application's most important items that require the user's prompt attention or input."
-          ],
-          "type": "string",
-          "enum": [
-            "PRIORITY_UNSPECIFIED",
-            "PRIORITY_MIN",
-            "PRIORITY_LOW",
-            "PRIORITY_DEFAULT",
-            "PRIORITY_HIGH",
-            "PRIORITY_MAX"
-          ]
-        },
-        "defaultSound": {
-          "description": "If set to true, use the Android framework's default sound for the notification. Default values are specified in [config.xml](https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml).",
-          "type": "boolean"
-        },
-        "clickAction": {
-          "description": "The action associated with a user click on the notification. If specified, an activity with a matching intent filter is launched when a user clicks on the notification.",
-          "type": "string"
-        },
-        "vibrateTimings": {
-          "items": {
-            "format": "google-duration",
-            "type": "string"
-          },
-          "type": "array",
-          "description": "Set the vibration pattern to use. Pass in an array of [protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration) to turn on or off the vibrator. The first value indicates the `Duration` to wait before turning the vibrator on. The next value indicates the `Duration` to keep the vibrator on. Subsequent values alternate between `Duration` to turn the vibrator off and to turn the vibrator on. If `vibrate_timings` is set and `default_vibrate_timings` is set to `true`, the default value is used instead of the user-specified `vibrate_timings`."
-        },
-        "title": {
-          "description": "The notification's title. If present, it will override google.firebase.fcm.v1.Notification.title.",
-          "type": "string"
-        },
-        "sound": {
-          "type": "string",
-          "description": "The sound to play when the device receives the notification. Supports \"default\" or the filename of a sound resource bundled in the app. Sound files must reside in /res/raw/."
-        },
-        "localOnly": {
-          "description": "Set whether or not this notification is relevant only to the current device. Some notifications can be bridged to other devices for remote display, such as a Wear OS watch. This hint can be set to recommend this notification not be bridged. See [Wear OS guides](https://developer.android.com/training/wearables/notifications/bridger#existing-method-of-preventing-bridging)",
-          "type": "boolean"
-        },
-        "defaultLightSettings": {
-          "type": "boolean",
-          "description": "If set to true, use the Android framework's default LED light settings for the notification. Default values are specified in [config.xml](https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml). If `default_light_settings` is set to true and `light_settings` is also set, the user-specified `light_settings` is used instead of the default value."
-        },
-        "bodyLocKey": {
-          "description": "The key to the body string in the app's string resources to use to localize the body text to the user's current localization. See [String Resources](https://goo.gl/NdFZGI) for more information.",
-          "type": "string"
-        },
-        "lightSettings": {
-          "description": "Settings to control the notification's LED blinking rate and color if LED is available on the device. The total blinking time is controlled by the OS.",
-          "$ref": "LightSettings"
-        },
-        "image": {
-          "type": "string",
-          "description": "Contains the URL of an image that is going to be displayed in a notification. If present, it will override google.firebase.fcm.v1.Notification.image."
-        },
-        "sticky": {
-          "type": "boolean",
-          "description": "When set to false or unset, the notification is automatically dismissed when the user clicks it in the panel. When set to true, the notification persists even when the user clicks it."
-        },
-        "body": {
-          "description": "The notification's body text. If present, it will override google.firebase.fcm.v1.Notification.body.",
-          "type": "string"
-        },
-        "color": {
-          "description": "The notification's icon color, expressed in #rrggbb format.",
-          "type": "string"
-        },
-        "titleLocArgs": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "Variable string values to be used in place of the format specifiers in title_loc_key to use to localize the title text to the user's current localization. See [Formatting and Styling](https://goo.gl/MalYE3) for more information."
-        },
-        "eventTime": {
-          "description": "Set the time that the event in the notification occurred. Notifications in the panel are sorted by this time. A point in time is represented using [protobuf.Timestamp](https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/Timestamp).",
-          "type": "string",
-          "format": "google-datetime"
-        },
-        "ticker": {
-          "type": "string",
-          "description": "Sets the \"ticker\" text, which is sent to accessibility services. Prior to API level 21 (`Lollipop`), sets the text that is displayed in the status bar when the notification first arrives."
-        }
-      },
-      "type": "object",
-      "id": "AndroidNotification"
-    }
-  },
-  "resources": {
-    "projects": {
-      "resources": {
-        "messages": {
-          "methods": {
-            "send": {
-              "request": {
-                "$ref": "SendMessageRequest"
-              },
-              "id": "fcm.projects.messages.send",
-              "description": "Send a message to specified target (a registration token, topic or condition).",
-              "path": "v1/{+parent}/messages:send",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "httpMethod": "POST",
-              "parameters": {
-                "parent": {
-                  "description": "Required. It contains the Firebase project id (i.e. the unique identifier for your Firebase project), in the format of `projects/{project_id}`. For legacy support, the numeric project number with no padding is also supported in the format of `projects/{project_number}`.",
-                  "required": true,
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path",
-                  "type": "string"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
                 }
-              },
-              "flatPath": "v1/projects/{projectsId}/messages:send",
-              "parameterOrder": [
-                "parent"
-              ],
-              "response": {
-                "$ref": "Message"
-              }
             }
-          }
         }
-      }
-    }
-  },
-  "baseUrl": "https://fcm.googleapis.com/",
-  "mtlsRootUrl": "https://fcm.mtls.googleapis.com/",
-  "rootUrl": "https://fcm.googleapis.com/",
-  "revision": "20200720",
-  "ownerDomain": "google.com",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "canonicalName": "Firebase Cloud Messaging"
-}
+    },
+    "basePath": "",
+    "baseUrl": "https://fcm.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Firebase Cloud Messaging",
+    "description": "FCM send API that provides a cross-platform messaging solution to reliably deliver messages at no cost.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://firebase.google.com/docs/cloud-messaging",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "fcm:v1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://fcm.mtls.googleapis.com/",
+    "name": "fcm",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        }
+    },
+    "protocol": "rest",
+    "resources": {
+        "projects": {
+            "resources": {
+                "messages": {
+                    "methods": {
+                        "send": {
+                            "description": "Send a message to specified target (a registration token, topic or condition).",
+                            "flatPath": "v1/projects/{projectsId}/messages:send",
+                            "httpMethod": "POST",
+                            "id": "fcm.projects.messages.send",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. It contains the Firebase project id (i.e. the unique identifier for your Firebase project), in the format of `projects/{project_id}`. For legacy support, the numeric project number with no padding is also supported in the format of `projects/{project_number}`.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+parent}/messages:send",
+                            "request": {
+                                "$ref": "SendMessageRequest"
+                            },
+                            "response": {
+                                "$ref": "Message"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        }
+                    }
+                }
+            }
+        }
+    },
+    "revision": "20210125",
+    "rootUrl": "https://fcm.googleapis.com/",
+    "schemas": {
+        "AndroidConfig": {
+            "description": "Android specific options for messages sent through [FCM connection server](https://goo.gl/4GLdUl).",
+            "id": "AndroidConfig",
+            "properties": {
+                "collapseKey": {
+                    "description": "An identifier of a group of messages that can be collapsed, so that only the last message gets sent when delivery can be resumed. A maximum of 4 different collapse keys is allowed at any given time.",
+                    "type": "string"
+                },
+                "data": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Arbitrary key/value payload. If present, it will override google.firebase.fcm.v1.Message.data.",
+                    "type": "object"
+                },
+                "directBootOk": {
+                    "description": "If set to true, messages will be allowed to be delivered to the app while the device is in direct boot mode. See [Support Direct Boot mode](https://developer.android.com/training/articles/direct-boot).",
+                    "type": "boolean"
+                },
+                "fcmOptions": {
+                    "$ref": "AndroidFcmOptions",
+                    "description": "Options for features provided by the FCM SDK for Android."
+                },
+                "notification": {
+                    "$ref": "AndroidNotification",
+                    "description": "Notification to send to android devices."
+                },
+                "priority": {
+                    "description": "Message priority. Can take \"normal\" and \"high\" values. For more information, see [Setting the priority of a message](https://goo.gl/GjONJv).",
+                    "enum": [
+                        "NORMAL",
+                        "HIGH"
+                    ],
+                    "enumDescriptions": [
+                        "Default priority for data messages. Normal priority messages won't open network connections on a sleeping device, and their delivery may be delayed to conserve the battery. For less time-sensitive messages, such as notifications of new email or other data to sync, choose normal delivery priority.",
+                        "Default priority for notification messages. FCM attempts to deliver high priority messages immediately, allowing the FCM service to wake a sleeping device when possible and open a network connection to your app server. Apps with instant messaging, chat, or voice call alerts, for example, generally need to open a network connection and make sure FCM delivers the message to the device without delay. Set high priority if the message is time-critical and requires the user's immediate interaction, but beware that setting your messages to high priority contributes more to battery drain compared with normal priority messages."
+                    ],
+                    "type": "string"
+                },
+                "restrictedPackageName": {
+                    "description": "Package name of the application where the registration token must match in order to receive the message.",
+                    "type": "string"
+                },
+                "ttl": {
+                    "description": "How long (in seconds) the message should be kept in FCM storage if the device is offline. The maximum time to live supported is 4 weeks, and the default value is 4 weeks if not set. Set it to 0 if want to send the message immediately. In JSON format, the Duration type is encoded as a string rather than an object, where the string ends in the suffix \"s\" (indicating seconds) and is preceded by the number of seconds, with nanoseconds expressed as fractional seconds. For example, 3 seconds with 0 nanoseconds should be encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should be expressed in JSON format as \"3.000000001s\". The ttl will be rounded down to the nearest second.",
+                    "format": "google-duration",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AndroidFcmOptions": {
+            "description": "Options for features provided by the FCM SDK for Android.",
+            "id": "AndroidFcmOptions",
+            "properties": {
+                "analyticsLabel": {
+                    "description": "Label associated with the message's analytics data.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AndroidNotification": {
+            "description": "Notification to send to android devices.",
+            "id": "AndroidNotification",
+            "properties": {
+                "body": {
+                    "description": "The notification's body text. If present, it will override google.firebase.fcm.v1.Notification.body.",
+                    "type": "string"
+                },
+                "bodyLocArgs": {
+                    "description": "Variable string values to be used in place of the format specifiers in body_loc_key to use to localize the body text to the user's current localization. See [Formatting and Styling](https://goo.gl/MalYE3) for more information.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "bodyLocKey": {
+                    "description": "The key to the body string in the app's string resources to use to localize the body text to the user's current localization. See [String Resources](https://goo.gl/NdFZGI) for more information.",
+                    "type": "string"
+                },
+                "channelId": {
+                    "description": "The [notification's channel id](https://developer.android.com/guide/topics/ui/notifiers/notifications#ManageChannels) (new in Android O). The app must create a channel with this channel ID before any notification with this channel ID is received. If you don't send this channel ID in the request, or if the channel ID provided has not yet been created by the app, FCM uses the channel ID specified in the app manifest.",
+                    "type": "string"
+                },
+                "clickAction": {
+                    "description": "The action associated with a user click on the notification. If specified, an activity with a matching intent filter is launched when a user clicks on the notification.",
+                    "type": "string"
+                },
+                "color": {
+                    "description": "The notification's icon color, expressed in #rrggbb format.",
+                    "type": "string"
+                },
+                "defaultLightSettings": {
+                    "description": "If set to true, use the Android framework's default LED light settings for the notification. Default values are specified in [config.xml](https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml). If `default_light_settings` is set to true and `light_settings` is also set, the user-specified `light_settings` is used instead of the default value.",
+                    "type": "boolean"
+                },
+                "defaultSound": {
+                    "description": "If set to true, use the Android framework's default sound for the notification. Default values are specified in [config.xml](https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml).",
+                    "type": "boolean"
+                },
+                "defaultVibrateTimings": {
+                    "description": "If set to true, use the Android framework's default vibrate pattern for the notification. Default values are specified in [config.xml](https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml). If `default_vibrate_timings` is set to true and `vibrate_timings` is also set, the default value is used instead of the user-specified `vibrate_timings`.",
+                    "type": "boolean"
+                },
+                "eventTime": {
+                    "description": "Set the time that the event in the notification occurred. Notifications in the panel are sorted by this time. A point in time is represented using [protobuf.Timestamp](https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/Timestamp).",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "icon": {
+                    "description": "The notification's icon. Sets the notification icon to myicon for drawable resource myicon. If you don't send this key in the request, FCM displays the launcher icon specified in your app manifest.",
+                    "type": "string"
+                },
+                "image": {
+                    "description": "Contains the URL of an image that is going to be displayed in a notification. If present, it will override google.firebase.fcm.v1.Notification.image.",
+                    "type": "string"
+                },
+                "lightSettings": {
+                    "$ref": "LightSettings",
+                    "description": "Settings to control the notification's LED blinking rate and color if LED is available on the device. The total blinking time is controlled by the OS."
+                },
+                "localOnly": {
+                    "description": "Set whether or not this notification is relevant only to the current device. Some notifications can be bridged to other devices for remote display, such as a Wear OS watch. This hint can be set to recommend this notification not be bridged. See [Wear OS guides](https://developer.android.com/training/wearables/notifications/bridger#existing-method-of-preventing-bridging)",
+                    "type": "boolean"
+                },
+                "notificationCount": {
+                    "description": "Sets the number of items this notification represents. May be displayed as a badge count for launchers that support badging.See [Notification Badge](https://developer.android.com/training/notify-user/badges). For example, this might be useful if you're using just one notification to represent multiple new messages but you want the count here to represent the number of total new messages. If zero or unspecified, systems that support badging use the default, which is to increment a number displayed on the long-press menu each time a new notification arrives.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "notificationPriority": {
+                    "description": "Set the relative priority for this notification. Priority is an indication of how much of the user's attention should be consumed by this notification. Low-priority notifications may be hidden from the user in certain situations, while the user might be interrupted for a higher-priority notification. The effect of setting the same priorities may differ slightly on different platforms. Note this priority differs from `AndroidMessagePriority`. This priority is processed by the client after the message has been delivered, whereas [AndroidMessagePriority](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#androidmessagepriority) is an FCM concept that controls when the message is delivered.",
+                    "enum": [
+                        "PRIORITY_UNSPECIFIED",
+                        "PRIORITY_MIN",
+                        "PRIORITY_LOW",
+                        "PRIORITY_DEFAULT",
+                        "PRIORITY_HIGH",
+                        "PRIORITY_MAX"
+                    ],
+                    "enumDescriptions": [
+                        "If priority is unspecified, notification priority is set to `PRIORITY_DEFAULT`.",
+                        "Lowest notification priority. Notifications with this `PRIORITY_MIN` might not be shown to the user except under special circumstances, such as detailed notification logs.",
+                        "Lower notification priority. The UI may choose to show the notifications smaller, or at a different position in the list, compared with notifications with `PRIORITY_DEFAULT`.",
+                        "Default notification priority. If the application does not prioritize its own notifications, use this value for all notifications.",
+                        "Higher notification priority. Use this for more important notifications or alerts. The UI may choose to show these notifications larger, or at a different position in the notification lists, compared with notifications with `PRIORITY_DEFAULT`.",
+                        "Highest notification priority. Use this for the application's most important items that require the user's prompt attention or input."
+                    ],
+                    "type": "string"
+                },
+                "sound": {
+                    "description": "The sound to play when the device receives the notification. Supports \"default\" or the filename of a sound resource bundled in the app. Sound files must reside in /res/raw/.",
+                    "type": "string"
+                },
+                "sticky": {
+                    "description": "When set to false or unset, the notification is automatically dismissed when the user clicks it in the panel. When set to true, the notification persists even when the user clicks it.",
+                    "type": "boolean"
+                },
+                "tag": {
+                    "description": "Identifier used to replace existing notifications in the notification drawer. If not specified, each request creates a new notification. If specified and a notification with the same tag is already being shown, the new notification replaces the existing one in the notification drawer.",
+                    "type": "string"
+                },
+                "ticker": {
+                    "description": "Sets the \"ticker\" text, which is sent to accessibility services. Prior to API level 21 (`Lollipop`), sets the text that is displayed in the status bar when the notification first arrives.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "The notification's title. If present, it will override google.firebase.fcm.v1.Notification.title.",
+                    "type": "string"
+                },
+                "titleLocArgs": {
+                    "description": "Variable string values to be used in place of the format specifiers in title_loc_key to use to localize the title text to the user's current localization. See [Formatting and Styling](https://goo.gl/MalYE3) for more information.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "titleLocKey": {
+                    "description": "The key to the title string in the app's string resources to use to localize the title text to the user's current localization. See [String Resources](https://goo.gl/NdFZGI) for more information.",
+                    "type": "string"
+                },
+                "vibrateTimings": {
+                    "description": "Set the vibration pattern to use. Pass in an array of [protobuf.Duration](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration) to turn on or off the vibrator. The first value indicates the `Duration` to wait before turning the vibrator on. The next value indicates the `Duration` to keep the vibrator on. Subsequent values alternate between `Duration` to turn the vibrator off and to turn the vibrator on. If `vibrate_timings` is set and `default_vibrate_timings` is set to `true`, the default value is used instead of the user-specified `vibrate_timings`.",
+                    "items": {
+                        "format": "google-duration",
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "visibility": {
+                    "description": "Set the [Notification.visibility](https://developer.android.com/reference/android/app/Notification.html#visibility) of the notification.",
+                    "enum": [
+                        "VISIBILITY_UNSPECIFIED",
+                        "PRIVATE",
+                        "PUBLIC",
+                        "SECRET"
+                    ],
+                    "enumDescriptions": [
+                        "If unspecified, default to `Visibility.PRIVATE`.",
+                        "Show this notification on all lockscreens, but conceal sensitive or private information on secure lockscreens.",
+                        "Show this notification in its entirety on all lockscreens.",
+                        "Do not reveal any part of this notification on a secure lockscreen."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ApnsConfig": {
+            "description": "[Apple Push Notification Service](https://goo.gl/MXRTPa) specific options.",
+            "id": "ApnsConfig",
+            "properties": {
+                "fcmOptions": {
+                    "$ref": "ApnsFcmOptions",
+                    "description": "Options for features provided by the FCM SDK for iOS."
+                },
+                "headers": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "HTTP request headers defined in Apple Push Notification Service. Refer to [APNs request headers](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns) for supported headers, e.g. \"apns-priority\": \"10\".",
+                    "type": "object"
+                },
+                "payload": {
+                    "additionalProperties": {
+                        "description": "Properties of the object.",
+                        "type": "any"
+                    },
+                    "description": "APNs payload as a JSON object, including both `aps` dictionary and custom payload. See [Payload Key Reference](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/generating_a_remote_notification). If present, it overrides google.firebase.fcm.v1.Notification.title and google.firebase.fcm.v1.Notification.body.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "ApnsFcmOptions": {
+            "description": "Options for features provided by the FCM SDK for iOS.",
+            "id": "ApnsFcmOptions",
+            "properties": {
+                "analyticsLabel": {
+                    "description": "Label associated with the message's analytics data.",
+                    "type": "string"
+                },
+                "image": {
+                    "description": "Contains the URL of an image that is going to be displayed in a notification. If present, it will override google.firebase.fcm.v1.Notification.image.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Color": {
+            "description": "Represents a color in the RGBA color space. This representation is designed for simplicity of conversion to/from color representations in various languages over compactness; for example, the fields of this representation can be trivially provided to the constructor of \"java.awt.Color\" in Java; it can also be trivially provided to UIColor's \"+colorWithRed:green:blue:alpha\" method in iOS; and, with just a little work, it can be easily formatted into a CSS \"rgba()\" string in JavaScript, as well. Note: this proto does not carry information about the absolute color space that should be used to interpret the RGB value (e.g. sRGB, Adobe RGB, DCI-P3, BT.2020, etc.). By default, applications SHOULD assume the sRGB color space. Note: when color equality needs to be decided, implementations, unless documented otherwise, will treat two colors to be equal if all their red, green, blue and alpha values each differ by at most 1e-5. Example (Java): import com.google.type.Color; // ... public static java.awt.Color fromProto(Color protocolor) { float alpha = protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue(), alpha); } public static Color toProto(java.awt.Color color) { float red = (float) color.getRed(); float green = (float) color.getGreen(); float blue = (float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) { result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / denominator) .build()); } return resultBuilder.build(); } // ... Example (iOS / Obj-C): // ... static UIColor* fromProto(Color* protocolor) { float red = [protocolor red]; float green = [protocolor green]; float blue = [protocolor blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if (alpha_wrapper != nil) { alpha = [alpha_wrapper value]; } return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; } static Color* toProto(UIColor* color) { CGFloat red, green, blue, alpha; if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) { return nil; } Color* result = [[Color alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue:blue]; if (alpha <= 0.9999) { [result setAlpha:floatWrapperWithValue(alpha)]; } [result autorelease]; return result; } // ... Example (JavaScript): // ... var protoToCssColor = function(rgb_color) { var redFrac = rgb_color.red || 0.0; var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) { return rgbToCssColor_(red, green, blue); } var alphaFrac = rgb_color.alpha.value || 0.0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ',', alphaFrac, ')'].join(''); }; var rgbToCssColor_ = function(red, green, blue) { var rgbNumber = new Number((red << 16) | (green << 8) | blue); var hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; var resultBuilder = ['#']; for (var i = 0; i < missingZeros; i++) { resultBuilder.push('0'); } resultBuilder.push(hexString); return resultBuilder.join(''); }; // ...",
+            "id": "Color",
+            "properties": {
+                "alpha": {
+                    "description": "The fraction of this color that should be applied to the pixel. That is, the final pixel color is defined by the equation: pixel color = alpha * (this color) + (1.0 - alpha) * (background color) This means that a value of 1.0 corresponds to a solid color, whereas a value of 0.0 corresponds to a completely transparent color. This uses a wrapper message rather than a simple float scalar so that it is possible to distinguish between a default value and the value being unset. If omitted, this color object is to be rendered as a solid color (as if the alpha value had been explicitly given with a value of 1.0).",
+                    "format": "float",
+                    "type": "number"
+                },
+                "blue": {
+                    "description": "The amount of blue in the color as a value in the interval [0, 1].",
+                    "format": "float",
+                    "type": "number"
+                },
+                "green": {
+                    "description": "The amount of green in the color as a value in the interval [0, 1].",
+                    "format": "float",
+                    "type": "number"
+                },
+                "red": {
+                    "description": "The amount of red in the color as a value in the interval [0, 1].",
+                    "format": "float",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "FcmOptions": {
+            "description": "Platform independent options for features provided by the FCM SDKs.",
+            "id": "FcmOptions",
+            "properties": {
+                "analyticsLabel": {
+                    "description": "Label associated with the message's analytics data.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LightSettings": {
+            "description": "Settings to control notification LED.",
+            "id": "LightSettings",
+            "properties": {
+                "color": {
+                    "$ref": "Color",
+                    "description": "Required. Set `color` of the LED with [google.type.Color](https://github.com/googleapis/googleapis/blob/master/google/type/color.proto)."
+                },
+                "lightOffDuration": {
+                    "description": "Required. Along with `light_on_duration `, define the blink rate of LED flashes. Resolution defined by [proto.Duration](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration)",
+                    "format": "google-duration",
+                    "type": "string"
+                },
+                "lightOnDuration": {
+                    "description": "Required. Along with `light_off_duration`, define the blink rate of LED flashes. Resolution defined by [proto.Duration](https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration)",
+                    "format": "google-duration",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Message": {
+            "description": "Message to send by Firebase Cloud Messaging Service.",
+            "id": "Message",
+            "properties": {
+                "android": {
+                    "$ref": "AndroidConfig",
+                    "description": "Input only. Android specific options for messages sent through [FCM connection server](https://goo.gl/4GLdUl)."
+                },
+                "apns": {
+                    "$ref": "ApnsConfig",
+                    "description": "Input only. [Apple Push Notification Service](https://goo.gl/MXRTPa) specific options."
+                },
+                "condition": {
+                    "description": "Condition to send a message to, e.g. \"'foo' in topics && 'bar' in topics\".",
+                    "type": "string"
+                },
+                "data": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Input only. Arbitrary key/value payload. The key should not be a reserved word (\"from\", \"message_type\", or any word starting with \"google\" or \"gcm\").",
+                    "type": "object"
+                },
+                "fcmOptions": {
+                    "$ref": "FcmOptions",
+                    "description": "Input only. Template for FCM SDK feature options to use across all platforms."
+                },
+                "name": {
+                    "description": "Output Only. The identifier of the message sent, in the format of `projects/*/messages/{message_id}`.",
+                    "type": "string"
+                },
+                "notification": {
+                    "$ref": "Notification",
+                    "description": "Input only. Basic notification template to use across all platforms."
+                },
+                "token": {
+                    "description": "Registration token to send a message to.",
+                    "type": "string"
+                },
+                "topic": {
+                    "description": "Topic name to send a message to, e.g. \"weather\". Note: \"/topics/\" prefix should not be provided.",
+                    "type": "string"
+                },
+                "webpush": {
+                    "$ref": "WebpushConfig",
+                    "description": "Input only. [Webpush protocol](https://tools.ietf.org/html/rfc8030) options."
+                }
+            },
+            "type": "object"
+        },
+        "Notification": {
+            "description": "Basic notification template to use across all platforms.",
+            "id": "Notification",
+            "properties": {
+                "body": {
+                    "description": "The notification's body text.",
+                    "type": "string"
+                },
+                "image": {
+                    "description": "Contains the URL of an image that is going to be downloaded on the device and displayed in a notification. JPEG, PNG, BMP have full support across platforms. Animated GIF and video only work on iOS. WebP and HEIF have varying levels of support across platforms and platform versions. Android has 1MB image size limit. Quota usage and implications/costs for hosting image on Firebase Storage: https://firebase.google.com/pricing",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "The notification's title.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SendMessageRequest": {
+            "description": "Request to send a message to specified target.",
+            "id": "SendMessageRequest",
+            "properties": {
+                "message": {
+                    "$ref": "Message",
+                    "description": "Required. Message to send."
+                },
+                "validateOnly": {
+                    "description": "Flag for testing the request without actually delivering the message.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "WebpushConfig": {
+            "description": "[Webpush protocol](https://tools.ietf.org/html/rfc8030) options.",
+            "id": "WebpushConfig",
+            "properties": {
+                "data": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Arbitrary key/value payload. If present, it will override google.firebase.fcm.v1.Message.data.",
+                    "type": "object"
+                },
+                "fcmOptions": {
+                    "$ref": "WebpushFcmOptions",
+                    "description": "Options for features provided by the FCM SDK for Web."
+                },
+                "headers": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "HTTP headers defined in webpush protocol. Refer to [Webpush protocol](https://tools.ietf.org/html/rfc8030#section-5) for supported headers, e.g. \"TTL\": \"15\".",
+                    "type": "object"
+                },
+                "notification": {
+                    "additionalProperties": {
+                        "description": "Properties of the object.",
+                        "type": "any"
+                    },
+                    "description": "Web Notification options as a JSON object. Supports Notification instance properties as defined in [Web Notification API](https://developer.mozilla.org/en-US/docs/Web/API/Notification). If present, \"title\" and \"body\" fields override [google.firebase.fcm.v1.Notification.title] and [google.firebase.fcm.v1.Notification.body].",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "WebpushFcmOptions": {
+            "description": "Options for features provided by the FCM SDK for Web.",
+            "id": "WebpushFcmOptions",
+            "properties": {
+                "analyticsLabel": {
+                    "description": "Label associated with the message's analytics data.",
+                    "type": "string"
+                },
+                "link": {
+                    "description": "The link to open when the user clicks on the notification. For all URL values, HTTPS is required.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        }
+    },
+    "servicePath": "",
+    "title": "Firebase Cloud Messaging API",
+    "version": "v1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/firebasehosting.v1beta1.json b/googleapiclient/discovery_cache/documents/firebasehosting.v1beta1.json
index d463e71..2309cf4 100644
--- a/googleapiclient/discovery_cache/documents/firebasehosting.v1beta1.json
+++ b/googleapiclient/discovery_cache/documents/firebasehosting.v1beta1.json
@@ -1,2618 +1,2617 @@
 {
-  "kind": "discovery#restDescription",
-  "version_module": true,
-  "title": "Firebase Hosting API",
-  "name": "firebasehosting",
-  "canonicalName": "Firebase Hosting",
-  "batchPath": "batch",
-  "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
-  },
-  "protocol": "rest",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        },
-        "https://www.googleapis.com/auth/firebase.readonly": {
-          "description": "View all your Firebase data and settings"
-        },
-        "https://www.googleapis.com/auth/firebase": {
-          "description": "View and administer all your Firebase data and settings"
-        },
-        "https://www.googleapis.com/auth/cloud-platform.read-only": {
-          "description": "View your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "fullyEncodeReservedExpansion": true,
-  "schemas": {
-    "PathFilter": {
-      "description": "A representation of filter path.",
-      "id": "PathFilter",
-      "properties": {
-        "regexes": {
-          "description": "An array of regexes to filter by.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "type": "object"
-    },
-    "Empty": {
-      "properties": {},
-      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
-      "type": "object",
-      "id": "Empty"
-    },
-    "Operation": {
-      "properties": {
-        "error": {
-          "description": "The error result of the operation in case of failure or cancellation.",
-          "$ref": "Status"
-        },
-        "done": {
-          "type": "boolean",
-          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available."
-        },
-        "metadata": {
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
-          "type": "object"
-        },
-        "name": {
-          "type": "string",
-          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`."
-        },
-        "response": {
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
-          "type": "object"
-        }
-      },
-      "id": "Operation",
-      "description": "This resource represents a long-running operation that is the result of a network API call.",
-      "type": "object"
-    },
-    "CloudRunRewrite": {
-      "type": "object",
-      "description": "A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error).",
-      "properties": {
-        "region": {
-          "description": "Optional. User-provided region where the Cloud Run service is hosted. Defaults to `us-central1` if not supplied.",
-          "type": "string"
-        },
-        "serviceId": {
-          "type": "string",
-          "description": "Required. User-defined ID of the Cloud Run service."
-        }
-      },
-      "id": "CloudRunRewrite"
-    },
-    "Rewrite": {
-      "properties": {
-        "glob": {
-          "description": "The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.",
-          "type": "string"
-        },
-        "dynamicLinks": {
-          "description": "The request will be forwarded to Firebase Dynamic Links.",
-          "type": "boolean"
-        },
-        "regex": {
-          "type": "string",
-          "description": "The user-supplied RE2 regular expression to match against the request URL path."
-        },
-        "function": {
-          "type": "string",
-          "description": "The function to proxy requests to. Must match the exported function name exactly."
-        },
-        "path": {
-          "description": "The URL path to rewrite the request to.",
-          "type": "string"
-        },
-        "run": {
-          "description": "The request will be forwarded to Cloud Run.",
-          "$ref": "CloudRunRewrite"
-        }
-      },
-      "id": "Rewrite",
-      "type": "object",
-      "description": "A [`rewrite`](/docs/hosting/full-config#rewrites) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL."
-    },
-    "ListDomainsResponse": {
-      "properties": {
-        "nextPageToken": {
-          "description": "The pagination token, if more results exist.",
-          "type": "string"
-        },
-        "domains": {
-          "type": "array",
-          "items": {
-            "$ref": "Domain"
-          },
-          "description": "The list of domains, if any exist."
-        }
-      },
-      "description": "The response to listing Domains.",
-      "id": "ListDomainsResponse",
-      "type": "object"
-    },
-    "CertHttpChallenge": {
-      "type": "object",
-      "description": "Represents an HTTP certificate challenge.",
-      "id": "CertHttpChallenge",
-      "properties": {
-        "token": {
-          "type": "string",
-          "description": "The token to serve at the specified URL path to satisfy the certificate challenge."
-        },
-        "path": {
-          "type": "string",
-          "description": "The URL path on which to serve the specified token to satisfy the certificate challenge."
-        }
-      }
-    },
-    "CloneVersionRequest": {
-      "type": "object",
-      "id": "CloneVersionRequest",
-      "description": "The request sent to CloneVersion.",
-      "properties": {
-        "finalize": {
-          "type": "boolean",
-          "description": "If true, immediately finalize the version after cloning is complete."
-        },
-        "sourceVersion": {
-          "description": "Required. The name of the version to be cloned, in the format: `sites/{site}/versions/{version}`",
-          "type": "string"
-        },
-        "include": {
-          "description": "If provided, only paths that match one or more regexes in this list will be included in the new version.",
-          "$ref": "PathFilter"
-        },
-        "exclude": {
-          "description": "If provided, only paths that do not match any of the regexes in this list will be included in the new version.",
-          "$ref": "PathFilter"
-        }
-      }
-    },
-    "ActingUser": {
-      "type": "object",
-      "id": "ActingUser",
-      "properties": {
-        "imageUrl": {
-          "description": "A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.",
-          "type": "string"
-        },
-        "email": {
-          "description": "The email address of the user when the user performed the action.",
-          "type": "string"
-        }
-      },
-      "description": "Contains metadata about the user who performed an action, such as creating a release or finalizing a version."
-    },
-    "ListReleasesResponse": {
-      "type": "object",
-      "id": "ListReleasesResponse",
-      "properties": {
-        "nextPageToken": {
-          "description": "If there are additional releases remaining beyond the ones in this response, then supply this token in the next [`list`](../sites.versions.files/list) call to continue with the next set of releases.",
-          "type": "string"
-        },
-        "releases": {
-          "type": "array",
-          "items": {
-            "$ref": "Release"
-          },
-          "description": "The list of hashes of files that still need to be uploaded, if any exist."
-        }
-      }
-    },
-    "ListVersionsResponse": {
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "The pagination token, if more results exist"
-        },
-        "versions": {
-          "items": {
-            "$ref": "Version"
-          },
-          "description": "The list of versions, if any exist.",
-          "type": "array"
-        }
-      },
-      "id": "ListVersionsResponse"
-    },
-    "DomainRedirect": {
-      "type": "object",
-      "description": "Defines the behavior of a domain-level redirect. Domain redirects preserve the path of the redirect but replace the requested domain with the one specified in the redirect configuration.",
-      "properties": {
-        "domainName": {
-          "type": "string",
-          "description": "Required. The domain name to redirect to."
-        },
-        "type": {
-          "enum": [
-            "REDIRECT_TYPE_UNSPECIFIED",
-            "MOVED_PERMANENTLY"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "The default redirect type; should not be intentionlly used.",
-            "The redirect will respond with an HTTP status code of `301 Moved Permanently`."
-          ],
-          "description": "Required. The redirect status code."
-        }
-      },
-      "id": "DomainRedirect"
-    },
-    "ListVersionFilesResponse": {
-      "id": "ListVersionFilesResponse",
-      "type": "object",
-      "properties": {
-        "files": {
-          "items": {
-            "$ref": "VersionFile"
-          },
-          "type": "array",
-          "description": "The list path/hashes in the specified version."
-        },
-        "nextPageToken": {
-          "description": "The pagination token, if more results exist.",
-          "type": "string"
-        }
-      }
-    },
-    "I18nConfig": {
-      "type": "object",
-      "description": "If provided, i18n rewrites are enabled.",
-      "id": "I18nConfig",
-      "properties": {
-        "root": {
-          "type": "string",
-          "description": "Required. The user-supplied path where country and language specific content will be looked for within the public directory."
-        }
-      }
-    },
-    "Channel": {
-      "id": "Channel",
-      "properties": {
-        "retainedReleaseCount": {
-          "format": "int32",
-          "description": "The number of previous releases to retain on the channel for rollback or other purposes. Must be a number between 1-100. Defaults to 10 for new channels.",
-          "type": "integer"
-        },
-        "name": {
-          "description": "The fully-qualified identifier of the Channel.",
-          "type": "string"
-        },
-        "ttl": {
-          "description": "Input only. A time-to-live for this channel. Sets `expire_time` to the provided duration past the time of the request.",
-          "type": "string",
-          "format": "google-duration"
-        },
-        "createTime": {
-          "description": "Output only. The time at which the channel was created.",
-          "format": "google-datetime",
-          "type": "string",
-          "readOnly": true
-        },
-        "release": {
-          "description": "Output only. The current release for the channel, if any.",
-          "$ref": "Release",
-          "readOnly": true
-        },
-        "labels": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Text labels used for extra metadata and/or filtering."
-        },
-        "url": {
-          "readOnly": true,
-          "description": "Output only. The URL at which the channel can be viewed. For the `live` channel, the content of the current release may also be visible at other URLs.",
-          "type": "string"
-        },
-        "expireTime": {
-          "type": "string",
-          "description": "The time at which the channel will be automatically deleted. If null, the channel will not be automatically deleted. This field is present in output whether set directly or via the `ttl` field.",
-          "format": "google-datetime"
-        },
-        "updateTime": {
-          "description": "Output only. The time at which the channel was last updated.",
-          "type": "string",
-          "format": "google-datetime",
-          "readOnly": true
-        }
-      },
-      "description": "A `Channel` represents a stream of releases for a site. All sites have a default `live` channel that serves content to the live Firebase-provided domains and any connected custom domains.",
-      "type": "object"
-    },
-    "Release": {
-      "type": "object",
-      "description": "A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time.",
-      "properties": {
-        "message": {
-          "description": "The deploy description when the release was created. The value can be up to 512 characters.",
-          "type": "string"
-        },
-        "releaseTime": {
-          "type": "string",
-          "description": "Output only. The time at which the version is set to be public.",
-          "format": "google-datetime"
-        },
-        "version": {
-          "$ref": "Version",
-          "description": "Output only. The configuration and content that was released."
-        },
-        "name": {
-          "type": "string",
-          "description": "Output only. The unique identifier for the release, in the format: sites/ site-name/releases/releaseID This name is provided in the response body when you call the [`CreateRelease`](sites.releases/create) endpoint."
-        },
-        "releaseUser": {
-          "description": "Output only. Identifies the user who created the release.",
-          "$ref": "ActingUser"
-        },
-        "type": {
-          "type": "string",
-          "description": "Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.",
-          "enum": [
-            "TYPE_UNSPECIFIED",
-            "DEPLOY",
-            "ROLLBACK",
-            "SITE_DISABLE"
-          ],
-          "enumDescriptions": [
-            "An unspecified type. Indicates that a version was released. This is the default value when no other `type` is explicitly specified.",
-            "A version was uploaded to Firebase Hosting and released.",
-            "The release points back to a previously deployed version.",
-            "The release prevents the site from serving content. Firebase Hosting acts as if the site never existed."
-          ]
-        }
-      },
-      "id": "Release"
-    },
-    "ListChannelsResponse": {
-      "description": "The response returned by ListChannels.",
-      "id": "ListChannelsResponse",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "If there are additional releases remaining beyond the ones in this response, then supply this token in the next [`list`](../sites.channels/list) call to continue with the next set of releases."
-        },
-        "channels": {
-          "description": "The list of channels.",
-          "items": {
-            "$ref": "Channel"
-          },
-          "type": "array"
-        }
-      }
-    },
-    "Redirect": {
-      "description": "A [`redirect`](/docs/hosting/full-config#redirects) object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.",
-      "properties": {
-        "regex": {
-          "type": "string",
-          "description": "The user-supplied RE2 regular expression to match against the request URL path."
-        },
-        "glob": {
-          "description": "The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.",
-          "type": "string"
-        },
-        "location": {
-          "type": "string",
-          "description": "Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: \"glob\": \"/:capture*\", \"statusCode\": 301, \"location\": \"https://example.com/foo/:capture\""
-        },
-        "statusCode": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Required. The status HTTP code to return in the response. It must be a valid 3xx status code."
-        }
-      },
-      "id": "Redirect",
-      "type": "object"
-    },
-    "DomainProvisioning": {
-      "description": "The current certificate provisioning status information for a domain.",
-      "properties": {
-        "certStatus": {
-          "description": "The certificate provisioning status; updated when Firebase Hosting provisions an SSL certificate for the domain.",
-          "type": "string",
-          "enum": [
-            "CERT_STATUS_UNSPECIFIED",
-            "CERT_PENDING",
-            "CERT_MISSING",
-            "CERT_PROCESSING",
-            "CERT_PROPAGATING",
-            "CERT_ACTIVE",
-            "CERT_ERROR"
-          ],
-          "enumDescriptions": [
-            "Unspecified certificate provisioning status.",
-            "Waiting for certificate challenge to be created.",
-            "Waiting for certificate challenge to be met.",
-            "Certificate challenge met; attempting to acquire/propagate certificate.",
-            "Certificate obtained; propagating to the CDN.",
-            "Certificate provisioned and deployed across the CDN.",
-            "Certificate provisioning failed in a non-recoverable manner."
-          ]
-        },
-        "dnsFetchTime": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "The time at which the last DNS fetch occurred."
-        },
-        "certChallengeHttp": {
-          "description": "The HTTP challenge for generating a certificate.",
-          "$ref": "CertHttpChallenge"
-        },
-        "certChallengeDns": {
-          "$ref": "CertDnsChallenge",
-          "description": "The DNS challenge for generating a certificate."
-        },
-        "dnsStatus": {
-          "enum": [
-            "DNS_STATUS_UNSPECIFIED",
-            "DNS_PENDING",
-            "DNS_MISSING",
-            "DNS_PARTIAL_MATCH",
-            "DNS_MATCH",
-            "DNS_EXTRANEOUS_MATCH"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "Unspecified DNS status.",
-            "No DNS records have been specified for this domain yet.",
-            "None of the required DNS records have been detected on the domain.",
-            "Some of the required DNS records were detected, but not all of them. No extra (non-required) DNS records were detected.",
-            "All required DNS records were detected. No extra (non-required) DNS records were detected.",
-            "The domain has at least one of the required DNS records, and it has at least one extra (non-required) DNS record."
-          ],
-          "description": "The DNS record match status as of the last DNS fetch."
-        },
-        "discoveredIps": {
-          "description": "The IPs found at the last DNS fetch.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "certChallengeDiscoveredTxt": {
-          "description": "The TXT records (for the certificate challenge) that were found at the last DNS fetch.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "expectedIps": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "The list of IPs to which the domain is expected to resolve."
-        }
-      },
-      "id": "DomainProvisioning",
-      "type": "object"
-    },
-    "SiteConfig": {
-      "id": "SiteConfig",
-      "type": "object",
-      "properties": {
-        "cloudLoggingEnabled": {
-          "type": "boolean",
-          "description": "Whether or not web requests made by site visitors are logged via Cloud Logging."
-        },
-        "maxVersions": {
-          "format": "int64",
-          "type": "string",
-          "description": "The number of FINALIZED versions that will be held for a site before automatic deletion. When a new version is deployed, content for versions in storage in excess of this number will be deleted, and will no longer be billed for storage usage. Oldest versions will be deleted first; sites are created with an unlimited number of max_versions by default."
-        }
-      },
-      "description": "A `SiteConfig` contains metadata associated with a specific site that controls Firebase Hosting serving behavior"
-    },
-    "PreviewConfig": {
-      "id": "PreviewConfig",
-      "description": "Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels.",
-      "properties": {
-        "active": {
-          "description": "If true, preview URLs are enabled for this version.",
-          "type": "boolean"
-        },
-        "expireTime": {
-          "format": "google-datetime",
-          "type": "string",
-          "description": "Indicates the expiration time for previewing this version; preview URL requests received after this time will 404."
-        }
-      },
-      "type": "object"
-    },
-    "PopulateVersionFilesResponse": {
-      "id": "PopulateVersionFilesResponse",
-      "properties": {
-        "uploadUrl": {
-          "description": "The URL to which the files should be uploaded, in the format: \"https://upload-firebasehosting.googleapis.com/upload/sites/site-name /versions/versionID/files\". Perform a multipart `POST` of the Gzipped file contents to the URL using a forward slash and the hash of the file appended to the end.",
-          "type": "string"
-        },
-        "uploadRequiredHashes": {
-          "description": "The content hashes of the specified files that need to be uploaded to the specified endpoint.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "type": "object"
-    },
-    "ServingConfig": {
-      "id": "ServingConfig",
-      "properties": {
-        "headers": {
-          "description": "An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.",
-          "items": {
-            "$ref": "Header"
-          },
-          "type": "array"
-        },
-        "i18n": {
-          "$ref": "I18nConfig",
-          "description": "Optional. Defines i18n rewrite behavior."
-        },
-        "rewrites": {
-          "description": "An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.",
-          "items": {
-            "$ref": "Rewrite"
-          },
-          "type": "array"
-        },
-        "trailingSlashBehavior": {
-          "enum": [
-            "TRAILING_SLASH_BEHAVIOR_UNSPECIFIED",
-            "ADD",
-            "REMOVE"
-          ],
-          "type": "string",
-          "description": "Defines how to handle a trailing slash in the URL path.",
-          "enumDescriptions": [
-            "No behavior is specified. Files are served at their exact location only, and trailing slashes are only added to directory indexes.",
-            "Trailing slashes are _added_ to directory indexes as well as to any URL path not ending in a file extension.",
-            "Trailing slashes are _removed_ from directory indexes as well as from any URL path not ending in a file extension."
-          ]
-        },
-        "redirects": {
-          "type": "array",
-          "items": {
-            "$ref": "Redirect"
-          },
-          "description": "An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path."
-        },
-        "cleanUrls": {
-          "type": "boolean",
-          "description": "Defines whether to drop the file extension from uploaded files."
-        },
-        "appAssociation": {
-          "enum": [
-            "AUTO",
-            "NONE"
-          ],
-          "description": "How to handle well known App Association files.",
-          "type": "string",
-          "enumDescriptions": [
-            "The app association files will be automatically created from the apps that exist in the Firebase project.",
-            "No special handling of the app association files will occur, these paths will result in a 404 unless caught with a Rewrite."
-          ]
-        }
-      },
-      "description": "The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](/docs/hosting/full-config#hosting_priority_order).",
-      "type": "object"
-    },
-    "VersionFile": {
-      "id": "VersionFile",
-      "type": "object",
-      "properties": {
-        "status": {
-          "type": "string",
-          "description": "Output only. The current status of a particular file in the specified version. The value will be either `pending upload` or `uploaded`.",
-          "enum": [
-            "STATUS_UNSPECIFIED",
-            "EXPECTED",
-            "ACTIVE"
-          ],
-          "enumDescriptions": [
-            "The default status; should not be intentionally used.",
-            "The file has been included in the version and is expected to be uploaded in the near future.",
-            "The file has already been uploaded to Firebase Hosting."
-          ]
-        },
-        "path": {
-          "description": "The URI at which the file's content should display.",
-          "type": "string"
-        },
-        "hash": {
-          "type": "string",
-          "description": "The SHA256 content hash of the file."
-        }
-      },
-      "description": "A static content file that is part of a version."
-    },
-    "Version": {
-      "description": "A `Version` is the collection of configuration and [static files](sites.versions.files) that determine how a site is displayed.",
-      "properties": {
-        "labels": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "The labels used for extra metadata and/or filtering."
-        },
-        "deleteTime": {
-          "type": "string",
-          "description": "Output only. The time at which the version was `DELETED`.",
-          "format": "google-datetime"
-        },
-        "finalizeTime": {
-          "type": "string",
-          "description": "Output only. The time at which the version was `FINALIZED`.",
-          "format": "google-datetime"
-        },
-        "createUser": {
-          "$ref": "ActingUser",
-          "description": "Output only. Identifies the user who created the version."
-        },
-        "finalizeUser": {
-          "description": "Output only. Identifies the user who `FINALIZED` the version.",
-          "$ref": "ActingUser"
-        },
-        "config": {
-          "$ref": "ServingConfig",
-          "description": "The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file."
-        },
-        "createTime": {
-          "description": "Output only. The time at which the version was created.",
-          "type": "string",
-          "format": "google-datetime"
-        },
-        "fileCount": {
-          "type": "string",
-          "format": "int64",
-          "description": "Output only. The total number of files associated with the version. This value is calculated after a version is `FINALIZED`."
-        },
-        "deleteUser": {
-          "description": "Output only. Identifies the user who `DELETED` the version.",
-          "$ref": "ActingUser"
-        },
-        "versionBytes": {
-          "type": "string",
-          "description": "Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.",
-          "format": "int64"
-        },
-        "status": {
-          "description": "The deploy status of a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling the [`DeleteVersion`](sites.versions/delete) endpoint.",
-          "enumDescriptions": [
-            "The default status; should not be intentionally used.",
-            "The version has been created, and content is currently being added to the version.",
-            "All content has been added to the version, and the version can no longer be changed.",
-            "The version has been deleted.",
-            "The version was not updated to `FINALIZED` within 12 hours and was automatically deleted.",
-            "The version is outside the site-configured limit for the number of retained versions, so the version's content is scheduled for deletion.",
-            "The version is being cloned from another version. All content is still being copied over."
-          ],
-          "type": "string",
-          "enum": [
-            "VERSION_STATUS_UNSPECIFIED",
-            "CREATED",
-            "FINALIZED",
-            "DELETED",
-            "ABANDONED",
-            "EXPIRED",
-            "CLONING"
-          ]
-        },
-        "preview": {
-          "$ref": "PreviewConfig",
-          "description": "Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version."
-        },
-        "name": {
-          "type": "string",
-          "description": "The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint."
-        }
-      },
-      "type": "object",
-      "id": "Version"
-    },
-    "PopulateVersionFilesRequest": {
-      "description": "The request to populate a Version's Files.",
-      "id": "PopulateVersionFilesRequest",
-      "properties": {
-        "files": {
-          "description": "A set of file paths to the hashes corresponding to assets that should be added to the version. Note that a file path to an empty hash will remove the path from the version. Calculate a hash by Gzipping the file then taking the SHA256 hash of the newly compressed file.",
-          "additionalProperties": {
-            "type": "string"
-          },
-          "type": "object"
-        }
-      },
-      "type": "object"
-    },
-    "Domain": {
-      "id": "Domain",
-      "properties": {
-        "domainRedirect": {
-          "description": "If set, the domain should redirect with the provided parameters.",
-          "$ref": "DomainRedirect"
-        },
-        "status": {
-          "enum": [
-            "DOMAIN_STATUS_UNSPECIFIED",
-            "DOMAIN_CHANGE_PENDING",
-            "DOMAIN_ACTIVE",
-            "DOMAIN_VERIFICATION_REQUIRED",
-            "DOMAIN_VERIFICATION_LOST"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "Unspecified domain association status.",
-            "An external operation is in progress on the domain association and no further operations can be performed until it is complete. Formerly used for metabase updates. Not currently used",
-            "The domain association is active and no additional action is required.",
-            "The domain was previously verified in the legacy system. User must reverify the domain through the ownership service.",
-            "The domain verification has been lost and the domain is in the grace period before being removed from the Firebase Hosting site."
-          ],
-          "description": "Output only. Additional status of the domain association."
-        },
-        "site": {
-          "type": "string",
-          "description": "Required. The site name of the association."
-        },
-        "domainName": {
-          "description": "Required. The domain name of the association.",
-          "type": "string"
-        },
-        "updateTime": {
-          "type": "string",
-          "description": "Output only. The time at which the domain was last updated.",
-          "format": "google-datetime"
-        },
-        "provisioning": {
-          "$ref": "DomainProvisioning",
-          "description": "Output only. Information about the provisioning of certificates and the health of the DNS resolution for the domain."
-        }
-      },
-      "type": "object",
-      "description": "The intended behavior and status information of a domain."
-    },
-    "CertDnsChallenge": {
-      "type": "object",
-      "id": "CertDnsChallenge",
-      "properties": {
-        "token": {
-          "type": "string",
-          "description": "The value that must be present as a TXT record on the domain name to satisfy the challenge."
-        },
-        "domainName": {
-          "description": "The domain name upon which the DNS challenge must be satisfied.",
-          "type": "string"
-        }
-      },
-      "description": "Represents a DNS certificate challenge."
-    },
-    "Header": {
-      "type": "object",
-      "properties": {
-        "glob": {
-          "type": "string",
-          "description": "The user-supplied [glob](/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path."
-        },
-        "headers": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Required. The additional headers to add to the response."
-        },
-        "regex": {
-          "type": "string",
-          "description": "The user-supplied RE2 regular expression to match against the request URL path."
-        }
-      },
-      "description": "A [`header`](/docs/hosting/full-config#headers) is an object that specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.",
-      "id": "Header"
-    },
-    "Status": {
-      "id": "Status",
-      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
-      "properties": {
-        "code": {
-          "type": "integer",
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "format": "int32"
-        },
-        "details": {
-          "type": "array",
-          "items": {
-            "type": "object",
-            "additionalProperties": {
-              "type": "any",
-              "description": "Properties of the object. Contains field @type with type URL."
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
+                },
+                "https://www.googleapis.com/auth/cloud-platform.read-only": {
+                    "description": "View your data across Google Cloud Platform services"
+                },
+                "https://www.googleapis.com/auth/firebase": {
+                    "description": "View and administer all your Firebase data and settings"
+                },
+                "https://www.googleapis.com/auth/firebase.readonly": {
+                    "description": "View all your Firebase data and settings"
+                }
             }
-          },
-          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use."
-        },
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
-          "type": "string"
         }
-      },
-      "type": "object"
-    }
-  },
-  "description": "The Firebase Hosting REST API enables programmatic and customizable deployments to your Firebase-hosted sites. Use this REST API to deploy new or updated hosting configurations and content files.",
-  "ownerDomain": "google.com",
-  "version": "v1beta1",
-  "documentationLink": "https://firebase.google.com/docs/hosting/",
-  "servicePath": "",
-  "parameters": {
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "location": "query",
-      "type": "string"
     },
-    "alt": {
-      "location": "query",
-      "default": "json",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "type": "string",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "description": "Data format for response."
+    "basePath": "",
+    "baseUrl": "https://firebasehosting.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Firebase Hosting",
+    "description": "The Firebase Hosting REST API enables programmatic and customizable deployments to your Firebase-hosted sites. Use this REST API to deploy new or updated hosting configurations and content files.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://firebase.google.com/docs/hosting/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
     },
-    "key": {
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "type": "string",
-      "location": "query"
+    "id": "firebasehosting:v1beta1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://firebasehosting.mtls.googleapis.com/",
+    "name": "firebasehosting",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        }
     },
-    "$.xgafv": {
-      "enum": [
-        "1",
-        "2"
-      ],
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "description": "V1 error format.",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "type": "string",
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "location": "query",
-      "type": "string"
-    },
-    "quotaUser": {
-      "type": "string",
-      "location": "query",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters."
-    },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "type": "string"
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "type": "boolean",
-      "default": "true",
-      "location": "query",
-      "description": "Returns response with indentations and line breaks."
-    },
-    "access_token": {
-      "location": "query",
-      "type": "string",
-      "description": "OAuth access token."
-    }
-  },
-  "baseUrl": "https://firebasehosting.googleapis.com/",
-  "discoveryVersion": "v1",
-  "rootUrl": "https://firebasehosting.googleapis.com/",
-  "resources": {
-    "sites": {
-      "resources": {
-        "channels": {
-          "methods": {
-            "list": {
-              "parameters": {
-                "pageSize": {
-                  "type": "integer",
-                  "location": "query",
-                  "description": "The maximum number of versions to return. The service may return fewer than this value. If unspecified, at most 25 channels will be returned. The maximum value is 100; valuupdateses above 100 will be coerced to 100",
-                  "format": "int32"
-                },
-                "parent": {
-                  "type": "string",
-                  "required": true,
-                  "location": "path",
-                  "description": "Required. The site from which to list channels.",
-                  "pattern": "^sites/[^/]+$"
-                },
-                "pageToken": {
-                  "location": "query",
-                  "description": "The next_page_token from a previous request, if provided.",
-                  "type": "string"
-                }
-              },
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "parent"
-              ],
-              "flatPath": "v1beta1/sites/{sitesId}/channels",
-              "id": "firebasehosting.sites.channels.list",
-              "description": "Lists the channels for the specified site. All sites have a default \"live\" channel.",
-              "path": "v1beta1/{+parent}/channels",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/firebase",
-                "https://www.googleapis.com/auth/firebase.readonly"
-              ],
-              "response": {
-                "$ref": "ListChannelsResponse"
-              }
-            },
-            "delete": {
-              "description": "Deletes a channel of a site. The `live` channel cannot be deleted.",
-              "httpMethod": "DELETE",
-              "id": "firebasehosting.sites.channels.delete",
-              "parameterOrder": [
-                "name"
-              ],
-              "path": "v1beta1/{+name}",
-              "flatPath": "v1beta1/sites/{sitesId}/channels/{channelsId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/firebase"
-              ],
-              "parameters": {
-                "name": {
-                  "location": "path",
-                  "type": "string",
-                  "pattern": "^sites/[^/]+/channels/[^/]+$",
-                  "description": "Required. The fully-qualified identifier for the site.",
-                  "required": true
-                }
-              },
-              "response": {
-                "$ref": "Empty"
-              }
-            },
-            "get": {
-              "response": {
-                "$ref": "Channel"
-              },
-              "parameters": {
-                "name": {
-                  "description": "Required. The fully-qualified identifier for the channel.",
-                  "type": "string",
-                  "pattern": "^sites/[^/]+/channels/[^/]+$",
-                  "required": true,
-                  "location": "path"
-                }
-              },
-              "httpMethod": "GET",
-              "path": "v1beta1/{+name}",
-              "id": "firebasehosting.sites.channels.get",
-              "description": "Retrieves information for the specified channel of a site.",
-              "flatPath": "v1beta1/sites/{sitesId}/channels/{channelsId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/firebase",
-                "https://www.googleapis.com/auth/firebase.readonly"
-              ],
-              "parameterOrder": [
-                "name"
-              ]
-            },
-            "patch": {
-              "parameterOrder": [
-                "name"
-              ],
-              "path": "v1beta1/{+name}",
-              "description": "Updates information for the specified channel of a site. This method will implicitly create a channel if it doesn't exist.",
-              "request": {
-                "$ref": "Channel"
-              },
-              "parameters": {
-                "updateMask": {
-                  "location": "query",
-                  "format": "google-fieldmask",
-                  "type": "string",
-                  "description": "A comma-separated list of fields to be updated in this request."
-                },
-                "name": {
-                  "description": "The fully-qualified identifier of the Channel.",
-                  "type": "string",
-                  "location": "path",
-                  "pattern": "^sites/[^/]+/channels/[^/]+$",
-                  "required": true
-                }
-              },
-              "response": {
-                "$ref": "Channel"
-              },
-              "flatPath": "v1beta1/sites/{sitesId}/channels/{channelsId}",
-              "httpMethod": "PATCH",
-              "id": "firebasehosting.sites.channels.patch",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/firebase"
-              ]
-            },
-            "create": {
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "parent"
-              ],
-              "id": "firebasehosting.sites.channels.create",
-              "request": {
-                "$ref": "Channel"
-              },
-              "path": "v1beta1/{+parent}/channels",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/firebase"
-              ],
-              "response": {
-                "$ref": "Channel"
-              },
-              "description": "Creates a new channel in the specified site.",
-              "parameters": {
-                "channelId": {
-                  "type": "string",
-                  "description": "Required. Immutable. A unique id within the site to identify the channel.",
-                  "location": "query"
-                },
-                "parent": {
-                  "pattern": "^sites/[^/]+$",
-                  "description": "Required. The site in which this channel should be created.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                }
-              },
-              "flatPath": "v1beta1/sites/{sitesId}/channels"
-            }
-          },
-          "resources": {
-            "releases": {
-              "methods": {
-                "list": {
-                  "path": "v1beta1/{+parent}/releases",
-                  "description": "Lists the releases that have been created on the specified site.",
-                  "flatPath": "v1beta1/sites/{sitesId}/channels/{channelsId}/releases",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "parameters": {
-                    "parent": {
-                      "description": "Required. The parent for which to list files, in the format: sites/site-name",
-                      "type": "string",
-                      "pattern": "^sites/[^/]+/channels/[^/]+$",
-                      "required": true,
-                      "location": "path"
-                    },
-                    "pageSize": {
-                      "location": "query",
-                      "description": "The page size to return. Defaults to 100.",
-                      "format": "int32",
-                      "type": "integer"
-                    },
-                    "pageToken": {
-                      "location": "query",
-                      "description": "The next_page_token from a previous request, if provided.",
-                      "type": "string"
+    "protocol": "rest",
+    "resources": {
+        "projects": {
+            "resources": {
+                "operations": {
+                    "methods": {
+                        "get": {
+                            "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
+                            "flatPath": "v1beta1/projects/{projectsId}/operations/{operationsId}",
+                            "httpMethod": "GET",
+                            "id": "firebasehosting.projects.operations.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "The name of the operation resource.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/operations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "response": {
+                                "$ref": "Operation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/firebase",
+                                "https://www.googleapis.com/auth/firebase.readonly"
+                            ]
+                        }
                     }
-                  },
-                  "id": "firebasehosting.sites.channels.releases.list",
-                  "response": {
-                    "$ref": "ListReleasesResponse"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only",
-                    "https://www.googleapis.com/auth/firebase",
-                    "https://www.googleapis.com/auth/firebase.readonly"
-                  ],
-                  "httpMethod": "GET"
                 },
-                "create": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/firebase"
-                  ],
-                  "path": "v1beta1/{+parent}/releases",
-                  "description": "Creates a new release which makes the content of the specified version actively display on the appropriate URL(s).",
-                  "request": {
-                    "$ref": "Release"
-                  },
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "id": "firebasehosting.sites.channels.releases.create",
-                  "httpMethod": "POST",
-                  "response": {
-                    "$ref": "Release"
-                  },
-                  "parameters": {
-                    "parent": {
-                      "pattern": "^sites/[^/]+/channels/[^/]+$",
-                      "type": "string",
-                      "description": "Required. The site that the release belongs to, in the format: sites/ site-name",
-                      "location": "path",
-                      "required": true
+                "sites": {
+                    "methods": {
+                        "getConfig": {
+                            "description": "Gets the Hosting metadata for a specific site.",
+                            "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/config",
+                            "httpMethod": "GET",
+                            "id": "firebasehosting.projects.sites.getConfig",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The site for which to get the SiteConfig, in the format: sites/ site-name/config",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/sites/[^/]+/config$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "response": {
+                                "$ref": "SiteConfig"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/firebase",
+                                "https://www.googleapis.com/auth/firebase.readonly"
+                            ]
+                        },
+                        "updateConfig": {
+                            "description": "Sets the Hosting metadata for a specific site.",
+                            "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/config",
+                            "httpMethod": "PATCH",
+                            "id": "firebasehosting.projects.sites.updateConfig",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The site for which to update the SiteConfig, in the format: sites/ site-name/config",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/sites/[^/]+/config$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "updateMask": {
+                                    "description": "A set of field names from your [site configuration](../sites.SiteConfig) that you want to update. A field will be overwritten if, and only if, it's in the mask. If a mask is not provided then a default mask of only [`max_versions`](../sites.SiteConfig.max_versions) will be used.",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "request": {
+                                "$ref": "SiteConfig"
+                            },
+                            "response": {
+                                "$ref": "SiteConfig"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/firebase"
+                            ]
+                        }
                     },
-                    "versionName": {
-                      "location": "query",
-                      "description": "The unique identifier for a version, in the format: /sites/site-name /versions/versionID The site-name in this version identifier must match the site-name in the `parent` parameter. This query parameter must be empty if the `type` field in the request body is `SITE_DISABLE`.",
-                      "type": "string"
+                    "resources": {
+                        "channels": {
+                            "methods": {
+                                "create": {
+                                    "description": "Creates a new channel in the specified site.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/channels",
+                                    "httpMethod": "POST",
+                                    "id": "firebasehosting.projects.sites.channels.create",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "channelId": {
+                                            "description": "Required. Immutable. A unique id within the site to identify the channel.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The site in which this channel should be created.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/sites/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/channels",
+                                    "request": {
+                                        "$ref": "Channel"
+                                    },
+                                    "response": {
+                                        "$ref": "Channel"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/firebase"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a channel of a site. The `live` channel cannot be deleted.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/channels/{channelsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "firebasehosting.projects.sites.channels.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The fully-qualified identifier for the site.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/sites/[^/]+/channels/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/firebase"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Retrieves information for the specified channel of a site.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/channels/{channelsId}",
+                                    "httpMethod": "GET",
+                                    "id": "firebasehosting.projects.sites.channels.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The fully-qualified identifier for the channel.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/sites/[^/]+/channels/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "response": {
+                                        "$ref": "Channel"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                        "https://www.googleapis.com/auth/firebase",
+                                        "https://www.googleapis.com/auth/firebase.readonly"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists the channels for the specified site. All sites have a default \"live\" channel.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/channels",
+                                    "httpMethod": "GET",
+                                    "id": "firebasehosting.projects.sites.channels.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "pageSize": {
+                                            "description": "The maximum number of versions to return. The service may return fewer than this value. If unspecified, at most 25 channels will be returned. The maximum value is 100; valuupdateses above 100 will be coerced to 100",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "The next_page_token from a previous request, if provided.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The site from which to list channels.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/sites/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/channels",
+                                    "response": {
+                                        "$ref": "ListChannelsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                        "https://www.googleapis.com/auth/firebase",
+                                        "https://www.googleapis.com/auth/firebase.readonly"
+                                    ]
+                                },
+                                "patch": {
+                                    "description": "Updates information for the specified channel of a site. This method will implicitly create a channel if it doesn't exist.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/channels/{channelsId}",
+                                    "httpMethod": "PATCH",
+                                    "id": "firebasehosting.projects.sites.channels.patch",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The fully-qualified identifier of the Channel.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/sites/[^/]+/channels/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "updateMask": {
+                                            "description": "A comma-separated list of fields to be updated in this request.",
+                                            "format": "google-fieldmask",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "request": {
+                                        "$ref": "Channel"
+                                    },
+                                    "response": {
+                                        "$ref": "Channel"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/firebase"
+                                    ]
+                                }
+                            },
+                            "resources": {
+                                "releases": {
+                                    "methods": {
+                                        "create": {
+                                            "description": "Creates a new release, which makes the content of the specified version actively display on the appropriate URL(s).",
+                                            "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/channels/{channelsId}/releases",
+                                            "httpMethod": "POST",
+                                            "id": "firebasehosting.projects.sites.channels.releases.create",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "parent": {
+                                                    "description": "Required. The site to which the release belongs, in the format: sites/ SITE_NAME",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/sites/[^/]+/channels/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "versionName": {
+                                                    "description": " The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID The SITE_NAME in this version identifier must match the SITE_NAME in the `parent` parameter. This query parameter must be empty if the `type` field in the request body is `SITE_DISABLE`.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+parent}/releases",
+                                            "request": {
+                                                "$ref": "Release"
+                                            },
+                                            "response": {
+                                                "$ref": "Release"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/firebase"
+                                            ]
+                                        },
+                                        "list": {
+                                            "description": "Lists the releases that have been created on the specified site.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/channels/{channelsId}/releases",
+                                            "httpMethod": "GET",
+                                            "id": "firebasehosting.projects.sites.channels.releases.list",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "pageSize": {
+                                                    "description": "The maximum number of releases to return. The service may return a lower number if fewer releases exist than this maximum number. If unspecified, defaults to 100.",
+                                                    "format": "int32",
+                                                    "location": "query",
+                                                    "type": "integer"
+                                                },
+                                                "pageToken": {
+                                                    "description": "A token from a previous call to `ListReleases` that tells the server where to resume listing.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "parent": {
+                                                    "description": "Required. The site for which to list releases, in the format: sites/ SITE_NAME",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/sites/[^/]+/channels/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+parent}/releases",
+                                            "response": {
+                                                "$ref": "ListReleasesResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                                "https://www.googleapis.com/auth/firebase",
+                                                "https://www.googleapis.com/auth/firebase.readonly"
+                                            ]
+                                        }
+                                    }
+                                }
+                            }
+                        },
+                        "domains": {
+                            "methods": {
+                                "create": {
+                                    "description": "Creates a domain mapping on the specified site.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/domains",
+                                    "httpMethod": "POST",
+                                    "id": "firebasehosting.projects.sites.domains.create",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "parent": {
+                                            "description": "Required. The parent to create the domain association for, in the format: sites/site-name",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/sites/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/domains",
+                                    "request": {
+                                        "$ref": "Domain"
+                                    },
+                                    "response": {
+                                        "$ref": "Domain"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/firebase"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes the existing domain mapping on the specified site.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/domains/{domainsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "firebasehosting.projects.sites.domains.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The name of the domain association to delete.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/sites/[^/]+/domains/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/firebase"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets a domain mapping on the specified site.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/domains/{domainsId}",
+                                    "httpMethod": "GET",
+                                    "id": "firebasehosting.projects.sites.domains.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The name of the domain configuration to get.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/sites/[^/]+/domains/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "response": {
+                                        "$ref": "Domain"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                        "https://www.googleapis.com/auth/firebase",
+                                        "https://www.googleapis.com/auth/firebase.readonly"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists the domains for the specified site.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/domains",
+                                    "httpMethod": "GET",
+                                    "id": "firebasehosting.projects.sites.domains.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "pageSize": {
+                                            "description": "The page size to return. Defaults to 50.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "The next_page_token from a previous request, if provided.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The parent for which to list domains, in the format: sites/ site-name",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/sites/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/domains",
+                                    "response": {
+                                        "$ref": "ListDomainsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                        "https://www.googleapis.com/auth/firebase",
+                                        "https://www.googleapis.com/auth/firebase.readonly"
+                                    ]
+                                },
+                                "update": {
+                                    "description": "Updates the specified domain mapping, creating the mapping as if it does not exist.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/domains/{domainsId}",
+                                    "httpMethod": "PUT",
+                                    "id": "firebasehosting.projects.sites.domains.update",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The name of the domain association to update or create, if an association doesn't already exist.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/sites/[^/]+/domains/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "request": {
+                                        "$ref": "Domain"
+                                    },
+                                    "response": {
+                                        "$ref": "Domain"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/firebase"
+                                    ]
+                                }
+                            }
+                        },
+                        "releases": {
+                            "methods": {
+                                "create": {
+                                    "description": "Creates a new release, which makes the content of the specified version actively display on the appropriate URL(s).",
+                                    "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/releases",
+                                    "httpMethod": "POST",
+                                    "id": "firebasehosting.projects.sites.releases.create",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "parent": {
+                                            "description": "Required. The site to which the release belongs, in the format: sites/ SITE_NAME",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/sites/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "versionName": {
+                                            "description": " The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID The SITE_NAME in this version identifier must match the SITE_NAME in the `parent` parameter. This query parameter must be empty if the `type` field in the request body is `SITE_DISABLE`.",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/releases",
+                                    "request": {
+                                        "$ref": "Release"
+                                    },
+                                    "response": {
+                                        "$ref": "Release"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/firebase"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists the releases that have been created on the specified site.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/releases",
+                                    "httpMethod": "GET",
+                                    "id": "firebasehosting.projects.sites.releases.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "pageSize": {
+                                            "description": "The maximum number of releases to return. The service may return a lower number if fewer releases exist than this maximum number. If unspecified, defaults to 100.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "A token from a previous call to `ListReleases` that tells the server where to resume listing.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The site for which to list releases, in the format: sites/ SITE_NAME",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/sites/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/releases",
+                                    "response": {
+                                        "$ref": "ListReleasesResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                        "https://www.googleapis.com/auth/firebase",
+                                        "https://www.googleapis.com/auth/firebase.readonly"
+                                    ]
+                                }
+                            }
+                        },
+                        "versions": {
+                            "methods": {
+                                "clone": {
+                                    "description": "Creates a new version on the target site using the content of the specified version.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/versions:clone",
+                                    "httpMethod": "POST",
+                                    "id": "firebasehosting.projects.sites.versions.clone",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "parent": {
+                                            "description": "Required. The target site where the cloned version will reside, in the format: `sites/{site}`",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/sites/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/versions:clone",
+                                    "request": {
+                                        "$ref": "CloneVersionRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/firebase"
+                                    ]
+                                },
+                                "create": {
+                                    "description": "Creates a new version for the specified site.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/versions",
+                                    "httpMethod": "POST",
+                                    "id": "firebasehosting.projects.sites.versions.create",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "parent": {
+                                            "description": "Required. The site in which to create the version, in the format: sites/ SITE_NAME",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/sites/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "sizeBytes": {
+                                            "description": "The self-reported size of the version. This value is used for a pre-emptive quota check for legacy version uploads.",
+                                            "format": "int64",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "versionId": {
+                                            "description": "A unique id for the new version. This is was only specified for legacy version creations, and should be blank.",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/versions",
+                                    "request": {
+                                        "$ref": "Version"
+                                    },
+                                    "response": {
+                                        "$ref": "Version"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/firebase"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes the specified version.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/versions/{versionsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "firebasehosting.projects.sites.versions.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The name of the version to be deleted, in the format: sites/ SITE_NAME/versions/VERSION_ID",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/sites/[^/]+/versions/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/firebase"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists the versions that have been created on the specified site. Will include filtering in the future.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/versions",
+                                    "httpMethod": "GET",
+                                    "id": "firebasehosting.projects.sites.versions.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "filter": {
+                                            "description": "The filter string used to return a subset of versions in the response. Currently supported fields for filtering are: name, status, and create_time. Filter processing will be implemented in accordance with go/filtering.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "The maximum number of versions to return. The service may return fewer than this value. If unspecified, at most 25 versions will be returned. The maximum value is 100; values above 100 will be coerced to 100",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "The next_page_token from a previous request, if provided.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The parent for which to list files, in the format: sites/site-name",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/sites/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/versions",
+                                    "response": {
+                                        "$ref": "ListVersionsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                        "https://www.googleapis.com/auth/firebase",
+                                        "https://www.googleapis.com/auth/firebase.readonly"
+                                    ]
+                                },
+                                "patch": {
+                                    "description": "Updates the specified metadata for the specified version. This method will fail with `FAILED_PRECONDITION` in the event of an invalid state transition. The only valid transition for a version is currently from a `CREATED` status to a `FINALIZED` status. Use [`DeleteVersion`](delete) to set the status of a version to `DELETED`.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/versions/{versionsId}",
+                                    "httpMethod": "PATCH",
+                                    "id": "firebasehosting.projects.sites.versions.patch",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/sites/[^/]+/versions/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "updateMask": {
+                                            "description": "A set of field names from your [version](../sites.versions) that you want to update. A field will be overwritten if, and only if, it's in the mask. If a mask is not provided then a default mask of only [`status`](../sites.versions#Version.FIELDS.status) will be used.",
+                                            "format": "google-fieldmask",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "request": {
+                                        "$ref": "Version"
+                                    },
+                                    "response": {
+                                        "$ref": "Version"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/firebase"
+                                    ]
+                                },
+                                "populateFiles": {
+                                    "description": " Adds content files to the specified version. Each file must be under 2 GB.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/versions/{versionsId}:populateFiles",
+                                    "httpMethod": "POST",
+                                    "id": "firebasehosting.projects.sites.versions.populateFiles",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "parent": {
+                                            "description": "Required. The version to which to add files, in the format: sites/SITE_NAME /versions/VERSION_ID",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/sites/[^/]+/versions/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}:populateFiles",
+                                    "request": {
+                                        "$ref": "PopulateVersionFilesRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "PopulateVersionFilesResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/firebase"
+                                    ]
+                                }
+                            },
+                            "resources": {
+                                "files": {
+                                    "methods": {
+                                        "list": {
+                                            "description": "Lists the remaining files to be uploaded for the specified version.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/versions/{versionsId}/files",
+                                            "httpMethod": "GET",
+                                            "id": "firebasehosting.projects.sites.versions.files.list",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "pageSize": {
+                                                    "description": "The maximum number of version files to return. The service may return a lower number if fewer version files exist than this maximum number. If unspecified, defaults to 1000.",
+                                                    "format": "int32",
+                                                    "location": "query",
+                                                    "type": "integer"
+                                                },
+                                                "pageToken": {
+                                                    "description": "A token from a previous call to `ListVersionFiles` that tells the server where to resume listing.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "parent": {
+                                                    "description": "Required. The version for which to list files, in the format: sites/ SITE_NAME/versions/VERSION_ID",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/sites/[^/]+/versions/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "status": {
+                                                    "description": " The type of files that should be listed for the specified version.",
+                                                    "enum": [
+                                                        "STATUS_UNSPECIFIED",
+                                                        "EXPECTED",
+                                                        "ACTIVE"
+                                                    ],
+                                                    "enumDescriptions": [
+                                                        "The default status; should not be intentionally used.",
+                                                        "The file has been included in the version and is expected to be uploaded in the near future.",
+                                                        "The file has already been uploaded to Firebase Hosting."
+                                                    ],
+                                                    "location": "query",
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+parent}/files",
+                                            "response": {
+                                                "$ref": "ListVersionFilesResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                                "https://www.googleapis.com/auth/firebase",
+                                                "https://www.googleapis.com/auth/firebase.readonly"
+                                            ]
+                                        }
+                                    }
+                                }
+                            }
+                        }
                     }
-                  },
-                  "flatPath": "v1beta1/sites/{sitesId}/channels/{channelsId}/releases"
                 }
-              }
             }
-          }
         },
-        "versions": {
-          "resources": {
-            "files": {
-              "methods": {
-                "list": {
-                  "response": {
-                    "$ref": "ListVersionFilesResponse"
-                  },
-                  "parameters": {
-                    "status": {
-                      "description": "The type of files in the version that should be listed.",
-                      "enumDescriptions": [
+        "sites": {
+            "methods": {
+                "getConfig": {
+                    "description": "Gets the Hosting metadata for a specific site.",
+                    "flatPath": "v1beta1/sites/{sitesId}/config",
+                    "httpMethod": "GET",
+                    "id": "firebasehosting.sites.getConfig",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "Required. The site for which to get the SiteConfig, in the format: sites/ site-name/config",
+                            "location": "path",
+                            "pattern": "^sites/[^/]+/config$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1beta1/{+name}",
+                    "response": {
+                        "$ref": "SiteConfig"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                        "https://www.googleapis.com/auth/firebase",
+                        "https://www.googleapis.com/auth/firebase.readonly"
+                    ]
+                },
+                "updateConfig": {
+                    "description": "Sets the Hosting metadata for a specific site.",
+                    "flatPath": "v1beta1/sites/{sitesId}/config",
+                    "httpMethod": "PATCH",
+                    "id": "firebasehosting.sites.updateConfig",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "Required. The site for which to update the SiteConfig, in the format: sites/ site-name/config",
+                            "location": "path",
+                            "pattern": "^sites/[^/]+/config$",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "updateMask": {
+                            "description": "A set of field names from your [site configuration](../sites.SiteConfig) that you want to update. A field will be overwritten if, and only if, it's in the mask. If a mask is not provided then a default mask of only [`max_versions`](../sites.SiteConfig.max_versions) will be used.",
+                            "format": "google-fieldmask",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1beta1/{+name}",
+                    "request": {
+                        "$ref": "SiteConfig"
+                    },
+                    "response": {
+                        "$ref": "SiteConfig"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/firebase"
+                    ]
+                }
+            },
+            "resources": {
+                "channels": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a new channel in the specified site.",
+                            "flatPath": "v1beta1/sites/{sitesId}/channels",
+                            "httpMethod": "POST",
+                            "id": "firebasehosting.sites.channels.create",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "channelId": {
+                                    "description": "Required. Immutable. A unique id within the site to identify the channel.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The site in which this channel should be created.",
+                                    "location": "path",
+                                    "pattern": "^sites/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+parent}/channels",
+                            "request": {
+                                "$ref": "Channel"
+                            },
+                            "response": {
+                                "$ref": "Channel"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/firebase"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes a channel of a site. The `live` channel cannot be deleted.",
+                            "flatPath": "v1beta1/sites/{sitesId}/channels/{channelsId}",
+                            "httpMethod": "DELETE",
+                            "id": "firebasehosting.sites.channels.delete",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The fully-qualified identifier for the site.",
+                                    "location": "path",
+                                    "pattern": "^sites/[^/]+/channels/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/firebase"
+                            ]
+                        },
+                        "get": {
+                            "description": "Retrieves information for the specified channel of a site.",
+                            "flatPath": "v1beta1/sites/{sitesId}/channels/{channelsId}",
+                            "httpMethod": "GET",
+                            "id": "firebasehosting.sites.channels.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The fully-qualified identifier for the channel.",
+                                    "location": "path",
+                                    "pattern": "^sites/[^/]+/channels/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "response": {
+                                "$ref": "Channel"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/firebase",
+                                "https://www.googleapis.com/auth/firebase.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists the channels for the specified site. All sites have a default \"live\" channel.",
+                            "flatPath": "v1beta1/sites/{sitesId}/channels",
+                            "httpMethod": "GET",
+                            "id": "firebasehosting.sites.channels.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "The maximum number of versions to return. The service may return fewer than this value. If unspecified, at most 25 channels will be returned. The maximum value is 100; valuupdateses above 100 will be coerced to 100",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The next_page_token from a previous request, if provided.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The site from which to list channels.",
+                                    "location": "path",
+                                    "pattern": "^sites/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+parent}/channels",
+                            "response": {
+                                "$ref": "ListChannelsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/firebase",
+                                "https://www.googleapis.com/auth/firebase.readonly"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates information for the specified channel of a site. This method will implicitly create a channel if it doesn't exist.",
+                            "flatPath": "v1beta1/sites/{sitesId}/channels/{channelsId}",
+                            "httpMethod": "PATCH",
+                            "id": "firebasehosting.sites.channels.patch",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "The fully-qualified identifier of the Channel.",
+                                    "location": "path",
+                                    "pattern": "^sites/[^/]+/channels/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "updateMask": {
+                                    "description": "A comma-separated list of fields to be updated in this request.",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "request": {
+                                "$ref": "Channel"
+                            },
+                            "response": {
+                                "$ref": "Channel"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/firebase"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "releases": {
+                            "methods": {
+                                "create": {
+                                    "description": "Creates a new release, which makes the content of the specified version actively display on the appropriate URL(s).",
+                                    "flatPath": "v1beta1/sites/{sitesId}/channels/{channelsId}/releases",
+                                    "httpMethod": "POST",
+                                    "id": "firebasehosting.sites.channels.releases.create",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "parent": {
+                                            "description": "Required. The site to which the release belongs, in the format: sites/ SITE_NAME",
+                                            "location": "path",
+                                            "pattern": "^sites/[^/]+/channels/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "versionName": {
+                                            "description": " The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID The SITE_NAME in this version identifier must match the SITE_NAME in the `parent` parameter. This query parameter must be empty if the `type` field in the request body is `SITE_DISABLE`.",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/releases",
+                                    "request": {
+                                        "$ref": "Release"
+                                    },
+                                    "response": {
+                                        "$ref": "Release"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/firebase"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists the releases that have been created on the specified site.",
+                                    "flatPath": "v1beta1/sites/{sitesId}/channels/{channelsId}/releases",
+                                    "httpMethod": "GET",
+                                    "id": "firebasehosting.sites.channels.releases.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "pageSize": {
+                                            "description": "The maximum number of releases to return. The service may return a lower number if fewer releases exist than this maximum number. If unspecified, defaults to 100.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "A token from a previous call to `ListReleases` that tells the server where to resume listing.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The site for which to list releases, in the format: sites/ SITE_NAME",
+                                            "location": "path",
+                                            "pattern": "^sites/[^/]+/channels/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/releases",
+                                    "response": {
+                                        "$ref": "ListReleasesResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                        "https://www.googleapis.com/auth/firebase",
+                                        "https://www.googleapis.com/auth/firebase.readonly"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                },
+                "domains": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a domain mapping on the specified site.",
+                            "flatPath": "v1beta1/sites/{sitesId}/domains",
+                            "httpMethod": "POST",
+                            "id": "firebasehosting.sites.domains.create",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. The parent to create the domain association for, in the format: sites/site-name",
+                                    "location": "path",
+                                    "pattern": "^sites/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+parent}/domains",
+                            "request": {
+                                "$ref": "Domain"
+                            },
+                            "response": {
+                                "$ref": "Domain"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/firebase"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes the existing domain mapping on the specified site.",
+                            "flatPath": "v1beta1/sites/{sitesId}/domains/{domainsId}",
+                            "httpMethod": "DELETE",
+                            "id": "firebasehosting.sites.domains.delete",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The name of the domain association to delete.",
+                                    "location": "path",
+                                    "pattern": "^sites/[^/]+/domains/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/firebase"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets a domain mapping on the specified site.",
+                            "flatPath": "v1beta1/sites/{sitesId}/domains/{domainsId}",
+                            "httpMethod": "GET",
+                            "id": "firebasehosting.sites.domains.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The name of the domain configuration to get.",
+                                    "location": "path",
+                                    "pattern": "^sites/[^/]+/domains/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "response": {
+                                "$ref": "Domain"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/firebase",
+                                "https://www.googleapis.com/auth/firebase.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists the domains for the specified site.",
+                            "flatPath": "v1beta1/sites/{sitesId}/domains",
+                            "httpMethod": "GET",
+                            "id": "firebasehosting.sites.domains.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "The page size to return. Defaults to 50.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The next_page_token from a previous request, if provided.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The parent for which to list domains, in the format: sites/ site-name",
+                                    "location": "path",
+                                    "pattern": "^sites/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+parent}/domains",
+                            "response": {
+                                "$ref": "ListDomainsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/firebase",
+                                "https://www.googleapis.com/auth/firebase.readonly"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates the specified domain mapping, creating the mapping as if it does not exist.",
+                            "flatPath": "v1beta1/sites/{sitesId}/domains/{domainsId}",
+                            "httpMethod": "PUT",
+                            "id": "firebasehosting.sites.domains.update",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The name of the domain association to update or create, if an association doesn't already exist.",
+                                    "location": "path",
+                                    "pattern": "^sites/[^/]+/domains/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "request": {
+                                "$ref": "Domain"
+                            },
+                            "response": {
+                                "$ref": "Domain"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/firebase"
+                            ]
+                        }
+                    }
+                },
+                "releases": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a new release, which makes the content of the specified version actively display on the appropriate URL(s).",
+                            "flatPath": "v1beta1/sites/{sitesId}/releases",
+                            "httpMethod": "POST",
+                            "id": "firebasehosting.sites.releases.create",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. The site to which the release belongs, in the format: sites/ SITE_NAME",
+                                    "location": "path",
+                                    "pattern": "^sites/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "versionName": {
+                                    "description": " The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID The SITE_NAME in this version identifier must match the SITE_NAME in the `parent` parameter. This query parameter must be empty if the `type` field in the request body is `SITE_DISABLE`.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+parent}/releases",
+                            "request": {
+                                "$ref": "Release"
+                            },
+                            "response": {
+                                "$ref": "Release"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/firebase"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists the releases that have been created on the specified site.",
+                            "flatPath": "v1beta1/sites/{sitesId}/releases",
+                            "httpMethod": "GET",
+                            "id": "firebasehosting.sites.releases.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "The maximum number of releases to return. The service may return a lower number if fewer releases exist than this maximum number. If unspecified, defaults to 100.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "A token from a previous call to `ListReleases` that tells the server where to resume listing.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The site for which to list releases, in the format: sites/ SITE_NAME",
+                                    "location": "path",
+                                    "pattern": "^sites/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+parent}/releases",
+                            "response": {
+                                "$ref": "ListReleasesResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/firebase",
+                                "https://www.googleapis.com/auth/firebase.readonly"
+                            ]
+                        }
+                    }
+                },
+                "versions": {
+                    "methods": {
+                        "clone": {
+                            "description": "Creates a new version on the target site using the content of the specified version.",
+                            "flatPath": "v1beta1/sites/{sitesId}/versions:clone",
+                            "httpMethod": "POST",
+                            "id": "firebasehosting.sites.versions.clone",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. The target site where the cloned version will reside, in the format: `sites/{site}`",
+                                    "location": "path",
+                                    "pattern": "^sites/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+parent}/versions:clone",
+                            "request": {
+                                "$ref": "CloneVersionRequest"
+                            },
+                            "response": {
+                                "$ref": "Operation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/firebase"
+                            ]
+                        },
+                        "create": {
+                            "description": "Creates a new version for the specified site.",
+                            "flatPath": "v1beta1/sites/{sitesId}/versions",
+                            "httpMethod": "POST",
+                            "id": "firebasehosting.sites.versions.create",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. The site in which to create the version, in the format: sites/ SITE_NAME",
+                                    "location": "path",
+                                    "pattern": "^sites/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "sizeBytes": {
+                                    "description": "The self-reported size of the version. This value is used for a pre-emptive quota check for legacy version uploads.",
+                                    "format": "int64",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "versionId": {
+                                    "description": "A unique id for the new version. This is was only specified for legacy version creations, and should be blank.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+parent}/versions",
+                            "request": {
+                                "$ref": "Version"
+                            },
+                            "response": {
+                                "$ref": "Version"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/firebase"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes the specified version.",
+                            "flatPath": "v1beta1/sites/{sitesId}/versions/{versionsId}",
+                            "httpMethod": "DELETE",
+                            "id": "firebasehosting.sites.versions.delete",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The name of the version to be deleted, in the format: sites/ SITE_NAME/versions/VERSION_ID",
+                                    "location": "path",
+                                    "pattern": "^sites/[^/]+/versions/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/firebase"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists the versions that have been created on the specified site. Will include filtering in the future.",
+                            "flatPath": "v1beta1/sites/{sitesId}/versions",
+                            "httpMethod": "GET",
+                            "id": "firebasehosting.sites.versions.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "The filter string used to return a subset of versions in the response. Currently supported fields for filtering are: name, status, and create_time. Filter processing will be implemented in accordance with go/filtering.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "The maximum number of versions to return. The service may return fewer than this value. If unspecified, at most 25 versions will be returned. The maximum value is 100; values above 100 will be coerced to 100",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The next_page_token from a previous request, if provided.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The parent for which to list files, in the format: sites/site-name",
+                                    "location": "path",
+                                    "pattern": "^sites/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+parent}/versions",
+                            "response": {
+                                "$ref": "ListVersionsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/firebase",
+                                "https://www.googleapis.com/auth/firebase.readonly"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates the specified metadata for the specified version. This method will fail with `FAILED_PRECONDITION` in the event of an invalid state transition. The only valid transition for a version is currently from a `CREATED` status to a `FINALIZED` status. Use [`DeleteVersion`](delete) to set the status of a version to `DELETED`.",
+                            "flatPath": "v1beta1/sites/{sitesId}/versions/{versionsId}",
+                            "httpMethod": "PATCH",
+                            "id": "firebasehosting.sites.versions.patch",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).",
+                                    "location": "path",
+                                    "pattern": "^sites/[^/]+/versions/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "updateMask": {
+                                    "description": "A set of field names from your [version](../sites.versions) that you want to update. A field will be overwritten if, and only if, it's in the mask. If a mask is not provided then a default mask of only [`status`](../sites.versions#Version.FIELDS.status) will be used.",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "request": {
+                                "$ref": "Version"
+                            },
+                            "response": {
+                                "$ref": "Version"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/firebase"
+                            ]
+                        },
+                        "populateFiles": {
+                            "description": " Adds content files to the specified version. Each file must be under 2 GB.",
+                            "flatPath": "v1beta1/sites/{sitesId}/versions/{versionsId}:populateFiles",
+                            "httpMethod": "POST",
+                            "id": "firebasehosting.sites.versions.populateFiles",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. The version to which to add files, in the format: sites/SITE_NAME /versions/VERSION_ID",
+                                    "location": "path",
+                                    "pattern": "^sites/[^/]+/versions/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+parent}:populateFiles",
+                            "request": {
+                                "$ref": "PopulateVersionFilesRequest"
+                            },
+                            "response": {
+                                "$ref": "PopulateVersionFilesResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/firebase"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "files": {
+                            "methods": {
+                                "list": {
+                                    "description": "Lists the remaining files to be uploaded for the specified version.",
+                                    "flatPath": "v1beta1/sites/{sitesId}/versions/{versionsId}/files",
+                                    "httpMethod": "GET",
+                                    "id": "firebasehosting.sites.versions.files.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "pageSize": {
+                                            "description": "The maximum number of version files to return. The service may return a lower number if fewer version files exist than this maximum number. If unspecified, defaults to 1000.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "A token from a previous call to `ListVersionFiles` that tells the server where to resume listing.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The version for which to list files, in the format: sites/ SITE_NAME/versions/VERSION_ID",
+                                            "location": "path",
+                                            "pattern": "^sites/[^/]+/versions/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "status": {
+                                            "description": " The type of files that should be listed for the specified version.",
+                                            "enum": [
+                                                "STATUS_UNSPECIFIED",
+                                                "EXPECTED",
+                                                "ACTIVE"
+                                            ],
+                                            "enumDescriptions": [
+                                                "The default status; should not be intentionally used.",
+                                                "The file has been included in the version and is expected to be uploaded in the near future.",
+                                                "The file has already been uploaded to Firebase Hosting."
+                                            ],
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/files",
+                                    "response": {
+                                        "$ref": "ListVersionFilesResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                        "https://www.googleapis.com/auth/firebase",
+                                        "https://www.googleapis.com/auth/firebase.readonly"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    },
+    "revision": "20210208",
+    "rootUrl": "https://firebasehosting.googleapis.com/",
+    "schemas": {
+        "ActingUser": {
+            "description": "Contains metadata about the user who performed an action, such as creating a release or finalizing a version.",
+            "id": "ActingUser",
+            "properties": {
+                "email": {
+                    "description": "The email address of the user when the user performed the action.",
+                    "type": "string"
+                },
+                "imageUrl": {
+                    "description": "A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CertDnsChallenge": {
+            "description": "Represents a DNS certificate challenge.",
+            "id": "CertDnsChallenge",
+            "properties": {
+                "domainName": {
+                    "description": "The domain name upon which the DNS challenge must be satisfied.",
+                    "type": "string"
+                },
+                "token": {
+                    "description": "The value that must be present as a TXT record on the domain name to satisfy the challenge.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CertHttpChallenge": {
+            "description": "Represents an HTTP certificate challenge.",
+            "id": "CertHttpChallenge",
+            "properties": {
+                "path": {
+                    "description": "The URL path on which to serve the specified token to satisfy the certificate challenge.",
+                    "type": "string"
+                },
+                "token": {
+                    "description": "The token to serve at the specified URL path to satisfy the certificate challenge.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Channel": {
+            "description": "A `Channel` represents a stream of releases for a site. All sites have a default `live` channel that serves content to the live Firebase-provided domains and any connected custom domains.",
+            "id": "Channel",
+            "properties": {
+                "createTime": {
+                    "description": "Output only. The time at which the channel was created.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "expireTime": {
+                    "description": "The time at which the channel will be automatically deleted. If null, the channel will not be automatically deleted. This field is present in output whether set directly or via the `ttl` field.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Text labels used for extra metadata and/or filtering.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "The fully-qualified identifier of the Channel.",
+                    "type": "string"
+                },
+                "release": {
+                    "$ref": "Release",
+                    "description": "Output only. The current release for the channel, if any.",
+                    "readOnly": true
+                },
+                "retainedReleaseCount": {
+                    "description": "The number of previous releases to retain on the channel for rollback or other purposes. Must be a number between 1-100. Defaults to 10 for new channels.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "ttl": {
+                    "description": "Input only. A time-to-live for this channel. Sets `expire_time` to the provided duration past the time of the request.",
+                    "format": "google-duration",
+                    "type": "string"
+                },
+                "updateTime": {
+                    "description": "Output only. The time at which the channel was last updated.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "url": {
+                    "description": "Output only. The URL at which the channel can be viewed. For the `live` channel, the content of the current release may also be visible at other URLs.",
+                    "readOnly": true,
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CloneVersionRequest": {
+            "description": "The request sent to CloneVersion.",
+            "id": "CloneVersionRequest",
+            "properties": {
+                "exclude": {
+                    "$ref": "PathFilter",
+                    "description": "If provided, only paths that do not match any of the regexes in this list will be included in the new version."
+                },
+                "finalize": {
+                    "description": "If true, immediately finalize the version after cloning is complete.",
+                    "type": "boolean"
+                },
+                "include": {
+                    "$ref": "PathFilter",
+                    "description": "If provided, only paths that match one or more regexes in this list will be included in the new version."
+                },
+                "sourceVersion": {
+                    "description": "Required. The name of the version to be cloned, in the format: `sites/{site}/versions/{version}`",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CloudRunRewrite": {
+            "description": "A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error).",
+            "id": "CloudRunRewrite",
+            "properties": {
+                "region": {
+                    "description": "Optional. User-provided region where the Cloud Run service is hosted. Defaults to `us-central1` if not supplied.",
+                    "type": "string"
+                },
+                "serviceId": {
+                    "description": "Required. User-defined ID of the Cloud Run service.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Domain": {
+            "description": "The intended behavior and status information of a domain.",
+            "id": "Domain",
+            "properties": {
+                "domainName": {
+                    "description": "Required. The domain name of the association.",
+                    "type": "string"
+                },
+                "domainRedirect": {
+                    "$ref": "DomainRedirect",
+                    "description": "If set, the domain should redirect with the provided parameters."
+                },
+                "provisioning": {
+                    "$ref": "DomainProvisioning",
+                    "description": "Output only. Information about the provisioning of certificates and the health of the DNS resolution for the domain."
+                },
+                "site": {
+                    "description": "Required. The site name of the association.",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "Output only. Additional status of the domain association.",
+                    "enum": [
+                        "DOMAIN_STATUS_UNSPECIFIED",
+                        "DOMAIN_CHANGE_PENDING",
+                        "DOMAIN_ACTIVE",
+                        "DOMAIN_VERIFICATION_REQUIRED",
+                        "DOMAIN_VERIFICATION_LOST"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified domain association status.",
+                        "An external operation is in progress on the domain association and no further operations can be performed until it is complete. Formerly used for metabase updates. Not currently used",
+                        "The domain association is active and no additional action is required.",
+                        "The domain was previously verified in the legacy system. User must reverify the domain through the ownership service.",
+                        "The domain verification has been lost and the domain is in the grace period before being removed from the Firebase Hosting site."
+                    ],
+                    "type": "string"
+                },
+                "updateTime": {
+                    "description": "Output only. The time at which the domain was last updated.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DomainProvisioning": {
+            "description": "The current certificate provisioning status information for a domain.",
+            "id": "DomainProvisioning",
+            "properties": {
+                "certChallengeDiscoveredTxt": {
+                    "description": "The TXT records (for the certificate challenge) that were found at the last DNS fetch.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "certChallengeDns": {
+                    "$ref": "CertDnsChallenge",
+                    "description": "The DNS challenge for generating a certificate."
+                },
+                "certChallengeHttp": {
+                    "$ref": "CertHttpChallenge",
+                    "description": "The HTTP challenge for generating a certificate."
+                },
+                "certStatus": {
+                    "description": "The certificate provisioning status; updated when Firebase Hosting provisions an SSL certificate for the domain.",
+                    "enum": [
+                        "CERT_STATUS_UNSPECIFIED",
+                        "CERT_PENDING",
+                        "CERT_MISSING",
+                        "CERT_PROCESSING",
+                        "CERT_PROPAGATING",
+                        "CERT_ACTIVE",
+                        "CERT_ERROR"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified certificate provisioning status.",
+                        "Waiting for certificate challenge to be created.",
+                        "Waiting for certificate challenge to be met.",
+                        "Certificate challenge met; attempting to acquire/propagate certificate.",
+                        "Certificate obtained; propagating to the CDN.",
+                        "Certificate provisioned and deployed across the CDN.",
+                        "Certificate provisioning failed in a non-recoverable manner."
+                    ],
+                    "type": "string"
+                },
+                "discoveredIps": {
+                    "description": "The IPs found at the last DNS fetch.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "dnsFetchTime": {
+                    "description": "The time at which the last DNS fetch occurred.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "dnsStatus": {
+                    "description": "The DNS record match status as of the last DNS fetch.",
+                    "enum": [
+                        "DNS_STATUS_UNSPECIFIED",
+                        "DNS_PENDING",
+                        "DNS_MISSING",
+                        "DNS_PARTIAL_MATCH",
+                        "DNS_MATCH",
+                        "DNS_EXTRANEOUS_MATCH"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified DNS status.",
+                        "No DNS records have been specified for this domain yet.",
+                        "None of the required DNS records have been detected on the domain.",
+                        "Some of the required DNS records were detected, but not all of them. No extra (non-required) DNS records were detected.",
+                        "All required DNS records were detected. No extra (non-required) DNS records were detected.",
+                        "The domain has at least one of the required DNS records, and it has at least one extra (non-required) DNS record."
+                    ],
+                    "type": "string"
+                },
+                "expectedIps": {
+                    "description": "The list of IPs to which the domain is expected to resolve.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "DomainRedirect": {
+            "description": "Defines the behavior of a domain-level redirect. Domain redirects preserve the path of the redirect but replace the requested domain with the one specified in the redirect configuration.",
+            "id": "DomainRedirect",
+            "properties": {
+                "domainName": {
+                    "description": "Required. The domain name to redirect to.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Required. The redirect status code.",
+                    "enum": [
+                        "REDIRECT_TYPE_UNSPECIFIED",
+                        "MOVED_PERMANENTLY"
+                    ],
+                    "enumDescriptions": [
+                        "The default redirect type; should not be intentionlly used.",
+                        "The redirect will respond with an HTTP status code of `301 Moved Permanently`."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Empty": {
+            "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
+            "id": "Empty",
+            "properties": {},
+            "type": "object"
+        },
+        "Header": {
+            "description": "A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.",
+            "id": "Header",
+            "properties": {
+                "glob": {
+                    "description": "The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.",
+                    "type": "string"
+                },
+                "headers": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Required. The additional headers to add to the response.",
+                    "type": "object"
+                },
+                "regex": {
+                    "description": "The user-supplied RE2 regular expression to match against the request URL path.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "I18nConfig": {
+            "description": "If provided, i18n rewrites are enabled.",
+            "id": "I18nConfig",
+            "properties": {
+                "root": {
+                    "description": "Required. The user-supplied path where country and language specific content will be looked for within the public directory.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListChannelsResponse": {
+            "description": "The response returned by ListChannels.",
+            "id": "ListChannelsResponse",
+            "properties": {
+                "channels": {
+                    "description": "The list of channels.",
+                    "items": {
+                        "$ref": "Channel"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "If there are additional releases remaining beyond the ones in this response, then supply this token in the next [`list`](../sites.channels/list) call to continue with the next set of releases.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListDomainsResponse": {
+            "description": "The response to listing Domains.",
+            "id": "ListDomainsResponse",
+            "properties": {
+                "domains": {
+                    "description": "The list of domains, if any exist.",
+                    "items": {
+                        "$ref": "Domain"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "The pagination token, if more results exist.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListReleasesResponse": {
+            "id": "ListReleasesResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The pagination token, if more results exist beyond the ones in this response. Include this token in your next call to `ListReleases`. Page tokens are short-lived and should not be stored.",
+                    "type": "string"
+                },
+                "releases": {
+                    "description": "The list of hashes of files that still need to be uploaded, if any exist.",
+                    "items": {
+                        "$ref": "Release"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListVersionFilesResponse": {
+            "id": "ListVersionFilesResponse",
+            "properties": {
+                "files": {
+                    "description": " The list of paths to the hashes of the files in the specified version.",
+                    "items": {
+                        "$ref": "VersionFile"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "The pagination token, if more results exist beyond the ones in this response. Include this token in your next call to `ListVersionFiles`. Page tokens are short-lived and should not be stored.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListVersionsResponse": {
+            "id": "ListVersionsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The pagination token, if more results exist",
+                    "type": "string"
+                },
+                "versions": {
+                    "description": "The list of versions, if any exist.",
+                    "items": {
+                        "$ref": "Version"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Operation": {
+            "description": "This resource represents a long-running operation that is the result of a network API call.",
+            "id": "Operation",
+            "properties": {
+                "done": {
+                    "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
+                    "type": "boolean"
+                },
+                "error": {
+                    "$ref": "Status",
+                    "description": "The error result of the operation in case of failure or cancellation."
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
+                    "type": "string"
+                },
+                "response": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "PathFilter": {
+            "description": "A representation of filter path.",
+            "id": "PathFilter",
+            "properties": {
+                "regexes": {
+                    "description": "An array of regexes to filter by.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PopulateVersionFilesRequest": {
+            "id": "PopulateVersionFilesRequest",
+            "properties": {
+                "files": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "A set of file paths to the hashes corresponding to assets that should be added to the version. A file path to an empty hash will remove the path from the version. Calculate a hash by Gzipping the file then taking the SHA256 hash of the newly compressed file.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "PopulateVersionFilesResponse": {
+            "id": "PopulateVersionFilesResponse",
+            "properties": {
+                "uploadRequiredHashes": {
+                    "description": "The content hashes of the specified files that need to be uploaded to the specified URL.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "uploadUrl": {
+                    "description": "The URL to which the files should be uploaded, in the format: \"https://upload-firebasehosting.googleapis.com/upload/sites/SITE_NAME /versions/VERSION_ID/files\" Perform a multipart `POST` of the Gzipped file contents to the URL using a forward slash and the hash of the file appended to the end.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PreviewConfig": {
+            "description": "Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels.",
+            "id": "PreviewConfig",
+            "properties": {
+                "active": {
+                    "description": "If true, preview URLs are enabled for this version.",
+                    "type": "boolean"
+                },
+                "expireTime": {
+                    "description": "Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Redirect": {
+            "description": "A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.",
+            "id": "Redirect",
+            "properties": {
+                "glob": {
+                    "description": "The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.",
+                    "type": "string"
+                },
+                "location": {
+                    "description": "Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: \"glob\": \"/:capture*\", \"statusCode\": 301, \"location\": \"https://example.com/foo/:capture\"",
+                    "type": "string"
+                },
+                "regex": {
+                    "description": "The user-supplied RE2 regular expression to match against the request URL path.",
+                    "type": "string"
+                },
+                "statusCode": {
+                    "description": "Required. The status HTTP code to return in the response. It must be a valid 3xx status code.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "Release": {
+            "description": "A `Release` is a particular [collection of configurations and files](sites.versions) that is set to be public at a particular time.",
+            "id": "Release",
+            "properties": {
+                "message": {
+                    "description": "The deploy description when the release was created. The value can be up to 512 characters.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Output only. The unique identifier for the release, in the format: sites/ SITE_NAME/releases/RELEASE_ID This name is provided in the response body when you call [`CreateRelease`](sites.releases/create).",
+                    "type": "string"
+                },
+                "releaseTime": {
+                    "description": "Output only. The time at which the version is set to be public.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "releaseUser": {
+                    "$ref": "ActingUser",
+                    "description": "Output only. Identifies the user who created the release."
+                },
+                "type": {
+                    "description": "Explains the reason for the release. Specify a value for this field only when creating a `SITE_DISABLE` type release.",
+                    "enum": [
+                        "TYPE_UNSPECIFIED",
+                        "DEPLOY",
+                        "ROLLBACK",
+                        "SITE_DISABLE"
+                    ],
+                    "enumDescriptions": [
+                        "An unspecified type. Indicates that a version was released. This is the default value when no other `type` is explicitly specified.",
+                        "A version was uploaded to Firebase Hosting and released.",
+                        "The release points back to a previously deployed version.",
+                        "The release prevents the site from serving content. Firebase Hosting acts as if the site never existed."
+                    ],
+                    "type": "string"
+                },
+                "version": {
+                    "$ref": "Version",
+                    "description": "Output only. The configuration and content that was released."
+                }
+            },
+            "type": "object"
+        },
+        "Rewrite": {
+            "description": "A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.",
+            "id": "Rewrite",
+            "properties": {
+                "dynamicLinks": {
+                    "description": "The request will be forwarded to Firebase Dynamic Links.",
+                    "type": "boolean"
+                },
+                "function": {
+                    "description": "The function to proxy requests to. Must match the exported function name exactly.",
+                    "type": "string"
+                },
+                "glob": {
+                    "description": "The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.",
+                    "type": "string"
+                },
+                "path": {
+                    "description": "The URL path to rewrite the request to.",
+                    "type": "string"
+                },
+                "regex": {
+                    "description": "The user-supplied RE2 regular expression to match against the request URL path.",
+                    "type": "string"
+                },
+                "run": {
+                    "$ref": "CloudRunRewrite",
+                    "description": "The request will be forwarded to Cloud Run."
+                }
+            },
+            "type": "object"
+        },
+        "ServingConfig": {
+            "description": "The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order).",
+            "id": "ServingConfig",
+            "properties": {
+                "appAssociation": {
+                    "description": "How to handle well known App Association files.",
+                    "enum": [
+                        "AUTO",
+                        "NONE"
+                    ],
+                    "enumDescriptions": [
+                        "The app association files will be automatically created from the apps that exist in the Firebase project.",
+                        "No special handling of the app association files will occur, these paths will result in a 404 unless caught with a Rewrite."
+                    ],
+                    "type": "string"
+                },
+                "cleanUrls": {
+                    "description": "Defines whether to drop the file extension from uploaded files.",
+                    "type": "boolean"
+                },
+                "headers": {
+                    "description": "An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.",
+                    "items": {
+                        "$ref": "Header"
+                    },
+                    "type": "array"
+                },
+                "i18n": {
+                    "$ref": "I18nConfig",
+                    "description": "Optional. Defines i18n rewrite behavior."
+                },
+                "redirects": {
+                    "description": "An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.",
+                    "items": {
+                        "$ref": "Redirect"
+                    },
+                    "type": "array"
+                },
+                "rewrites": {
+                    "description": "An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.",
+                    "items": {
+                        "$ref": "Rewrite"
+                    },
+                    "type": "array"
+                },
+                "trailingSlashBehavior": {
+                    "description": "Defines how to handle a trailing slash in the URL path.",
+                    "enum": [
+                        "TRAILING_SLASH_BEHAVIOR_UNSPECIFIED",
+                        "ADD",
+                        "REMOVE"
+                    ],
+                    "enumDescriptions": [
+                        "No behavior is specified. Files are served at their exact location only, and trailing slashes are only added to directory indexes.",
+                        "Trailing slashes are _added_ to directory indexes as well as to any URL path not ending in a file extension.",
+                        "Trailing slashes are _removed_ from directory indexes as well as from any URL path not ending in a file extension."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SiteConfig": {
+            "description": "A `SiteConfig` contains metadata associated with a specific site that controls Firebase Hosting serving behavior",
+            "id": "SiteConfig",
+            "properties": {
+                "cloudLoggingEnabled": {
+                    "description": "Whether or not web requests made by site visitors are logged via Cloud Logging.",
+                    "type": "boolean"
+                },
+                "maxVersions": {
+                    "description": "The number of FINALIZED versions that will be held for a site before automatic deletion. When a new version is deployed, content for versions in storage in excess of this number will be deleted, and will no longer be billed for storage usage. Oldest versions will be deleted first; sites are created with an unlimited number of max_versions by default.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Status": {
+            "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
+            "id": "Status",
+            "properties": {
+                "code": {
+                    "description": "The status code, which should be an enum value of google.rpc.Code.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Version": {
+            "description": "A `Version` is a configuration and a collection of static files which determine how a site is displayed.",
+            "id": "Version",
+            "properties": {
+                "config": {
+                    "$ref": "ServingConfig",
+                    "description": "The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file."
+                },
+                "createTime": {
+                    "description": "Output only. The time at which the version was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "createUser": {
+                    "$ref": "ActingUser",
+                    "description": "Output only. Identifies the user who created the version."
+                },
+                "deleteTime": {
+                    "description": "Output only. The time at which the version was `DELETED`.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "deleteUser": {
+                    "$ref": "ActingUser",
+                    "description": "Output only. Identifies the user who `DELETED` the version."
+                },
+                "fileCount": {
+                    "description": "Output only. The total number of files associated with the version. This value is calculated after a version is `FINALIZED`.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "finalizeTime": {
+                    "description": "Output only. The time at which the version was `FINALIZED`.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "finalizeUser": {
+                    "$ref": "ActingUser",
+                    "description": "Output only. Identifies the user who `FINALIZED` the version."
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "The labels used for extra metadata and/or filtering.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "The unique identifier for a version, in the format: sites/SITE_NAME /versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).",
+                    "type": "string"
+                },
+                "preview": {
+                    "$ref": "PreviewConfig",
+                    "description": "Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version."
+                },
+                "status": {
+                    "description": "The deploy status of a version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).",
+                    "enum": [
+                        "VERSION_STATUS_UNSPECIFIED",
+                        "CREATED",
+                        "FINALIZED",
+                        "DELETED",
+                        "ABANDONED",
+                        "EXPIRED",
+                        "CLONING"
+                    ],
+                    "enumDescriptions": [
                         "The default status; should not be intentionally used.",
-                        "The file has been included in the version and is expected to be uploaded in the near future.",
-                        "The file has already been uploaded to Firebase Hosting."
-                      ],
-                      "location": "query",
-                      "enum": [
+                        "The version has been created, and content is currently being added to the version.",
+                        "All content has been added to the version, and the version can no longer be changed.",
+                        "The version has been deleted.",
+                        "The version was not updated to `FINALIZED` within 12 hours and was automatically deleted.",
+                        "The version is outside the site-configured limit for the number of retained versions, so the version's content is scheduled for deletion.",
+                        "The version is being cloned from another version. All content is still being copied over."
+                    ],
+                    "type": "string"
+                },
+                "versionBytes": {
+                    "description": "Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "VersionFile": {
+            "description": "A static content file that is part of a version.",
+            "id": "VersionFile",
+            "properties": {
+                "hash": {
+                    "description": "The SHA256 content hash of the file.",
+                    "type": "string"
+                },
+                "path": {
+                    "description": "The URI at which the file's content should display.",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "Output only. The current status of a particular file in the specified version. The value will be either `pending upload` or `uploaded`.",
+                    "enum": [
                         "STATUS_UNSPECIFIED",
                         "EXPECTED",
                         "ACTIVE"
-                      ],
-                      "type": "string"
-                    },
-                    "pageSize": {
-                      "type": "integer",
-                      "format": "int32",
-                      "description": "The page size to return. Defaults to 1000.",
-                      "location": "query"
-                    },
-                    "pageToken": {
-                      "location": "query",
-                      "description": "The next_page_token from a previous request, if provided. This will be the encoded version of a firebase.hosting.proto.metadata.ListFilesPageToken.",
-                      "type": "string"
-                    },
-                    "parent": {
-                      "required": true,
-                      "description": "Required. The parent to list files for, in the format: sites/site-name /versions/versionID",
-                      "pattern": "^sites/[^/]+/versions/[^/]+$",
-                      "location": "path",
-                      "type": "string"
-                    }
-                  },
-                  "description": "Lists the remaining files to be uploaded for the specified version.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only",
-                    "https://www.googleapis.com/auth/firebase",
-                    "https://www.googleapis.com/auth/firebase.readonly"
-                  ],
-                  "httpMethod": "GET",
-                  "flatPath": "v1beta1/sites/{sitesId}/versions/{versionsId}/files",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "path": "v1beta1/{+parent}/files",
-                  "id": "firebasehosting.sites.versions.files.list"
+                    ],
+                    "enumDescriptions": [
+                        "The default status; should not be intentionally used.",
+                        "The file has been included in the version and is expected to be uploaded in the near future.",
+                        "The file has already been uploaded to Firebase Hosting."
+                    ],
+                    "type": "string"
                 }
-              }
-            }
-          },
-          "methods": {
-            "list": {
-              "flatPath": "v1beta1/sites/{sitesId}/versions",
-              "id": "firebasehosting.sites.versions.list",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "parent"
-              ],
-              "description": "Lists the versions that have been created on the specified site. Will include filtering in the future.",
-              "parameters": {
-                "pageToken": {
-                  "type": "string",
-                  "description": "The next_page_token from a previous request, if provided.",
-                  "location": "query"
-                },
-                "filter": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "The filter string used to return a subset of versions in the response. Currently supported fields for filtering are: name, status, and create_time. Filter processing will be implemented in accordance with go/filtering."
-                },
-                "parent": {
-                  "type": "string",
-                  "location": "path",
-                  "pattern": "^sites/[^/]+$",
-                  "description": "Required. The parent for which to list files, in the format: sites/site-name",
-                  "required": true
-                },
-                "pageSize": {
-                  "type": "integer",
-                  "location": "query",
-                  "format": "int32",
-                  "description": "The maximum number of versions to return. The service may return fewer than this value. If unspecified, at most 25 versions will be returned. The maximum value is 100; values above 100 will be coerced to 100"
-                }
-              },
-              "response": {
-                "$ref": "ListVersionsResponse"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/firebase",
-                "https://www.googleapis.com/auth/firebase.readonly"
-              ],
-              "path": "v1beta1/{+parent}/versions"
             },
-            "populateFiles": {
-              "parameterOrder": [
-                "parent"
-              ],
-              "httpMethod": "POST",
-              "description": "Adds content files to a version. Each file must be under 2 GB.",
-              "parameters": {
-                "parent": {
-                  "location": "path",
-                  "required": true,
-                  "description": "Required. The version to add files to, in the format: sites/site-name /versions/versionID",
-                  "pattern": "^sites/[^/]+/versions/[^/]+$",
-                  "type": "string"
-                }
-              },
-              "path": "v1beta1/{+parent}:populateFiles",
-              "response": {
-                "$ref": "PopulateVersionFilesResponse"
-              },
-              "flatPath": "v1beta1/sites/{sitesId}/versions/{versionsId}:populateFiles",
-              "id": "firebasehosting.sites.versions.populateFiles",
-              "request": {
-                "$ref": "PopulateVersionFilesRequest"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/firebase"
-              ]
-            },
-            "patch": {
-              "response": {
-                "$ref": "Version"
-              },
-              "id": "firebasehosting.sites.versions.patch",
-              "description": "Updates the specified metadata for a version. Note that this method will fail with `FAILED_PRECONDITION` in the event of an invalid state transition. The only valid transition for a version is currently from a `CREATED` status to a `FINALIZED` status. Use [`DeleteVersion`](../sites.versions/delete) to set the status of a version to `DELETED`.",
-              "httpMethod": "PATCH",
-              "request": {
-                "$ref": "Version"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/firebase"
-              ],
-              "flatPath": "v1beta1/sites/{sitesId}/versions/{versionsId}",
-              "parameterOrder": [
-                "name"
-              ],
-              "parameters": {
-                "updateMask": {
-                  "type": "string",
-                  "location": "query",
-                  "format": "google-fieldmask",
-                  "description": "A set of field names from your [version](../sites.versions) that you want to update. A field will be overwritten if, and only if, it's in the mask. If a mask is not provided then a default mask of only [`status`](../sites.versions#Version.FIELDS.status) will be used."
-                },
-                "name": {
-                  "location": "path",
-                  "type": "string",
-                  "pattern": "^sites/[^/]+/versions/[^/]+$",
-                  "description": "The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.",
-                  "required": true
-                }
-              },
-              "path": "v1beta1/{+name}"
-            },
-            "delete": {
-              "httpMethod": "DELETE",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/firebase"
-              ],
-              "parameterOrder": [
-                "name"
-              ],
-              "parameters": {
-                "name": {
-                  "pattern": "^sites/[^/]+/versions/[^/]+$",
-                  "description": "Required. The name of the version to be deleted, in the format: sites/ site-name/versions/versionID",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                }
-              },
-              "flatPath": "v1beta1/sites/{sitesId}/versions/{versionsId}",
-              "path": "v1beta1/{+name}",
-              "response": {
-                "$ref": "Empty"
-              },
-              "id": "firebasehosting.sites.versions.delete",
-              "description": "Deletes the specified version."
-            },
-            "clone": {
-              "response": {
-                "$ref": "Operation"
-              },
-              "parameterOrder": [
-                "parent"
-              ],
-              "flatPath": "v1beta1/sites/{sitesId}/versions:clone",
-              "description": "Creates a new version on the target site using the content of the specified version.",
-              "parameters": {
-                "parent": {
-                  "location": "path",
-                  "description": "Required. The target site where the cloned version will reside, in the format: `sites/{site}`",
-                  "required": true,
-                  "pattern": "^sites/[^/]+$",
-                  "type": "string"
-                }
-              },
-              "request": {
-                "$ref": "CloneVersionRequest"
-              },
-              "path": "v1beta1/{+parent}/versions:clone",
-              "id": "firebasehosting.sites.versions.clone",
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/firebase"
-              ]
-            },
-            "create": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/firebase"
-              ],
-              "request": {
-                "$ref": "Version"
-              },
-              "parameters": {
-                "versionId": {
-                  "type": "string",
-                  "description": "A unique id for the new version. This is was only specified for legacy version creations, and should be blank.",
-                  "location": "query"
-                },
-                "sizeBytes": {
-                  "type": "string",
-                  "description": "The self-reported size of the version. This value is used for a pre-emptive quota check for legacy version uploads.",
-                  "format": "int64",
-                  "location": "query"
-                },
-                "parent": {
-                  "required": true,
-                  "description": "Required. The parent to create the version for, in the format: sites/ site-name",
-                  "pattern": "^sites/[^/]+$",
-                  "location": "path",
-                  "type": "string"
-                }
-              },
-              "httpMethod": "POST",
-              "flatPath": "v1beta1/sites/{sitesId}/versions",
-              "description": "Creates a new version for a site.",
-              "path": "v1beta1/{+parent}/versions",
-              "id": "firebasehosting.sites.versions.create",
-              "parameterOrder": [
-                "parent"
-              ],
-              "response": {
-                "$ref": "Version"
-              }
-            }
-          }
-        },
-        "releases": {
-          "methods": {
-            "create": {
-              "flatPath": "v1beta1/sites/{sitesId}/releases",
-              "description": "Creates a new release which makes the content of the specified version actively display on the appropriate URL(s).",
-              "id": "firebasehosting.sites.releases.create",
-              "request": {
-                "$ref": "Release"
-              },
-              "response": {
-                "$ref": "Release"
-              },
-              "parameterOrder": [
-                "parent"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/firebase"
-              ],
-              "httpMethod": "POST",
-              "parameters": {
-                "versionName": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "The unique identifier for a version, in the format: /sites/site-name /versions/versionID The site-name in this version identifier must match the site-name in the `parent` parameter. This query parameter must be empty if the `type` field in the request body is `SITE_DISABLE`."
-                },
-                "parent": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "description": "Required. The site that the release belongs to, in the format: sites/ site-name",
-                  "pattern": "^sites/[^/]+$"
-                }
-              },
-              "path": "v1beta1/{+parent}/releases"
-            },
-            "list": {
-              "description": "Lists the releases that have been created on the specified site.",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/firebase",
-                "https://www.googleapis.com/auth/firebase.readonly"
-              ],
-              "flatPath": "v1beta1/sites/{sitesId}/releases",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "parent"
-              ],
-              "parameters": {
-                "pageSize": {
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query",
-                  "description": "The page size to return. Defaults to 100."
-                },
-                "parent": {
-                  "description": "Required. The parent for which to list files, in the format: sites/site-name",
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^sites/[^/]+$"
-                },
-                "pageToken": {
-                  "type": "string",
-                  "description": "The next_page_token from a previous request, if provided.",
-                  "location": "query"
-                }
-              },
-              "path": "v1beta1/{+parent}/releases",
-              "id": "firebasehosting.sites.releases.list",
-              "response": {
-                "$ref": "ListReleasesResponse"
-              }
-            }
-          }
-        },
-        "domains": {
-          "methods": {
-            "update": {
-              "flatPath": "v1beta1/sites/{sitesId}/domains/{domainsId}",
-              "request": {
-                "$ref": "Domain"
-              },
-              "id": "firebasehosting.sites.domains.update",
-              "description": "Updates the specified domain mapping, creating the mapping as if it does not exist.",
-              "response": {
-                "$ref": "Domain"
-              },
-              "httpMethod": "PUT",
-              "parameterOrder": [
-                "name"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/firebase"
-              ],
-              "path": "v1beta1/{+name}",
-              "parameters": {
-                "name": {
-                  "pattern": "^sites/[^/]+/domains/[^/]+$",
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "description": "Required. The name of the domain association to update or create, if an association doesn't already exist."
-                }
-              }
-            },
-            "get": {
-              "response": {
-                "$ref": "Domain"
-              },
-              "flatPath": "v1beta1/sites/{sitesId}/domains/{domainsId}",
-              "path": "v1beta1/{+name}",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "name"
-              ],
-              "id": "firebasehosting.sites.domains.get",
-              "parameters": {
-                "name": {
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "description": "Required. The name of the domain configuration to get.",
-                  "pattern": "^sites/[^/]+/domains/[^/]+$"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/firebase",
-                "https://www.googleapis.com/auth/firebase.readonly"
-              ],
-              "description": "Gets a domain mapping on the specified site."
-            },
-            "list": {
-              "response": {
-                "$ref": "ListDomainsResponse"
-              },
-              "description": "Lists the domains for the specified site.",
-              "parameters": {
-                "pageSize": {
-                  "description": "The page size to return. Defaults to 50.",
-                  "type": "integer",
-                  "format": "int32",
-                  "location": "query"
-                },
-                "parent": {
-                  "description": "Required. The parent for which to list domains, in the format: sites/ site-name",
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^sites/[^/]+$"
-                },
-                "pageToken": {
-                  "description": "The next_page_token from a previous request, if provided.",
-                  "location": "query",
-                  "type": "string"
-                }
-              },
-              "id": "firebasehosting.sites.domains.list",
-              "path": "v1beta1/{+parent}/domains",
-              "httpMethod": "GET",
-              "flatPath": "v1beta1/sites/{sitesId}/domains",
-              "parameterOrder": [
-                "parent"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/firebase",
-                "https://www.googleapis.com/auth/firebase.readonly"
-              ]
-            },
-            "create": {
-              "description": "Creates a domain mapping on the specified site.",
-              "httpMethod": "POST",
-              "path": "v1beta1/{+parent}/domains",
-              "parameterOrder": [
-                "parent"
-              ],
-              "parameters": {
-                "parent": {
-                  "type": "string",
-                  "required": true,
-                  "location": "path",
-                  "description": "Required. The parent to create the domain association for, in the format: sites/site-name",
-                  "pattern": "^sites/[^/]+$"
-                }
-              },
-              "flatPath": "v1beta1/sites/{sitesId}/domains",
-              "response": {
-                "$ref": "Domain"
-              },
-              "id": "firebasehosting.sites.domains.create",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/firebase"
-              ],
-              "request": {
-                "$ref": "Domain"
-              }
-            },
-            "delete": {
-              "id": "firebasehosting.sites.domains.delete",
-              "description": "Deletes the existing domain mapping on the specified site.",
-              "flatPath": "v1beta1/sites/{sitesId}/domains/{domainsId}",
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "Empty"
-              },
-              "httpMethod": "DELETE",
-              "path": "v1beta1/{+name}",
-              "parameters": {
-                "name": {
-                  "pattern": "^sites/[^/]+/domains/[^/]+$",
-                  "description": "Required. The name of the domain association to delete.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/firebase"
-              ]
-            }
-          }
+            "type": "object"
         }
-      },
-      "methods": {
-        "updateConfig": {
-          "description": "Sets the Hosting metadata for a specific site.",
-          "flatPath": "v1beta1/sites/{sitesId}/config",
-          "parameterOrder": [
-            "name"
-          ],
-          "httpMethod": "PATCH",
-          "parameters": {
-            "updateMask": {
-              "format": "google-fieldmask",
-              "description": "A set of field names from your [site configuration](../sites.SiteConfig) that you want to update. A field will be overwritten if, and only if, it's in the mask. If a mask is not provided then a default mask of only [`max_versions`](../sites.SiteConfig.max_versions) will be used.",
-              "location": "query",
-              "type": "string"
-            },
-            "name": {
-              "required": true,
-              "pattern": "^sites/[^/]+/config$",
-              "location": "path",
-              "description": "Required. The site for which to update the SiteConfig, in the format: sites/ site-name/config",
-              "type": "string"
-            }
-          },
-          "id": "firebasehosting.sites.updateConfig",
-          "request": {
-            "$ref": "SiteConfig"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/firebase"
-          ],
-          "response": {
-            "$ref": "SiteConfig"
-          },
-          "path": "v1beta1/{+name}"
-        },
-        "getConfig": {
-          "response": {
-            "$ref": "SiteConfig"
-          },
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "name"
-          ],
-          "flatPath": "v1beta1/sites/{sitesId}/config",
-          "parameters": {
-            "name": {
-              "description": "Required. The site for which to get the SiteConfig, in the format: sites/ site-name/config",
-              "required": true,
-              "pattern": "^sites/[^/]+/config$",
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "description": "Gets the Hosting metadata for a specific site.",
-          "path": "v1beta1/{+name}",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only",
-            "https://www.googleapis.com/auth/firebase",
-            "https://www.googleapis.com/auth/firebase.readonly"
-          ],
-          "id": "firebasehosting.sites.getConfig"
-        }
-      }
     },
-    "projects": {
-      "resources": {
-        "operations": {
-          "methods": {
-            "get": {
-              "response": {
-                "$ref": "Operation"
-              },
-              "id": "firebasehosting.projects.operations.get",
-              "path": "v1beta1/{+name}",
-              "parameterOrder": [
-                "name"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/firebase",
-                "https://www.googleapis.com/auth/firebase.readonly"
-              ],
-              "flatPath": "v1beta1/projects/{projectsId}/operations/{operationsId}",
-              "httpMethod": "GET",
-              "parameters": {
-                "name": {
-                  "pattern": "^projects/[^/]+/operations/[^/]+$",
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "The name of the operation resource."
-                }
-              },
-              "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service."
-            }
-          }
-        },
-        "sites": {
-          "methods": {
-            "getConfig": {
-              "parameters": {
-                "name": {
-                  "type": "string",
-                  "required": true,
-                  "pattern": "^projects/[^/]+/sites/[^/]+/config$",
-                  "description": "Required. The site for which to get the SiteConfig, in the format: sites/ site-name/config",
-                  "location": "path"
-                }
-              },
-              "response": {
-                "$ref": "SiteConfig"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/firebase",
-                "https://www.googleapis.com/auth/firebase.readonly"
-              ],
-              "parameterOrder": [
-                "name"
-              ],
-              "id": "firebasehosting.projects.sites.getConfig",
-              "path": "v1beta1/{+name}",
-              "description": "Gets the Hosting metadata for a specific site.",
-              "httpMethod": "GET",
-              "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/config"
-            },
-            "updateConfig": {
-              "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/config",
-              "id": "firebasehosting.projects.sites.updateConfig",
-              "path": "v1beta1/{+name}",
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "PATCH",
-              "response": {
-                "$ref": "SiteConfig"
-              },
-              "request": {
-                "$ref": "SiteConfig"
-              },
-              "description": "Sets the Hosting metadata for a specific site.",
-              "parameters": {
-                "name": {
-                  "required": true,
-                  "description": "Required. The site for which to update the SiteConfig, in the format: sites/ site-name/config",
-                  "type": "string",
-                  "location": "path",
-                  "pattern": "^projects/[^/]+/sites/[^/]+/config$"
-                },
-                "updateMask": {
-                  "description": "A set of field names from your [site configuration](../sites.SiteConfig) that you want to update. A field will be overwritten if, and only if, it's in the mask. If a mask is not provided then a default mask of only [`max_versions`](../sites.SiteConfig.max_versions) will be used.",
-                  "location": "query",
-                  "format": "google-fieldmask",
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/firebase"
-              ]
-            }
-          },
-          "resources": {
-            "domains": {
-              "methods": {
-                "create": {
-                  "description": "Creates a domain mapping on the specified site.",
-                  "httpMethod": "POST",
-                  "request": {
-                    "$ref": "Domain"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/firebase"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/domains",
-                  "path": "v1beta1/{+parent}/domains",
-                  "response": {
-                    "$ref": "Domain"
-                  },
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "parameters": {
-                    "parent": {
-                      "pattern": "^projects/[^/]+/sites/[^/]+$",
-                      "location": "path",
-                      "description": "Required. The parent to create the domain association for, in the format: sites/site-name",
-                      "type": "string",
-                      "required": true
-                    }
-                  },
-                  "id": "firebasehosting.projects.sites.domains.create"
-                },
-                "list": {
-                  "id": "firebasehosting.projects.sites.domains.list",
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "ListDomainsResponse"
-                  },
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "parameters": {
-                    "pageToken": {
-                      "description": "The next_page_token from a previous request, if provided.",
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "parent": {
-                      "pattern": "^projects/[^/]+/sites/[^/]+$",
-                      "description": "Required. The parent for which to list domains, in the format: sites/ site-name",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "pageSize": {
-                      "format": "int32",
-                      "type": "integer",
-                      "description": "The page size to return. Defaults to 50.",
-                      "location": "query"
-                    }
-                  },
-                  "description": "Lists the domains for the specified site.",
-                  "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/domains",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only",
-                    "https://www.googleapis.com/auth/firebase",
-                    "https://www.googleapis.com/auth/firebase.readonly"
-                  ],
-                  "path": "v1beta1/{+parent}/domains"
-                },
-                "update": {
-                  "httpMethod": "PUT",
-                  "description": "Updates the specified domain mapping, creating the mapping as if it does not exist.",
-                  "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/domains/{domainsId}",
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "location": "path",
-                      "required": true,
-                      "description": "Required. The name of the domain association to update or create, if an association doesn't already exist.",
-                      "pattern": "^projects/[^/]+/sites/[^/]+/domains/[^/]+$"
-                    }
-                  },
-                  "path": "v1beta1/{+name}",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/firebase"
-                  ],
-                  "id": "firebasehosting.projects.sites.domains.update",
-                  "request": {
-                    "$ref": "Domain"
-                  },
-                  "response": {
-                    "$ref": "Domain"
-                  }
-                },
-                "get": {
-                  "id": "firebasehosting.projects.sites.domains.get",
-                  "description": "Gets a domain mapping on the specified site.",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/domains/{domainsId}",
-                  "parameters": {
-                    "name": {
-                      "pattern": "^projects/[^/]+/sites/[^/]+/domains/[^/]+$",
-                      "required": true,
-                      "description": "Required. The name of the domain configuration to get.",
-                      "location": "path",
-                      "type": "string"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only",
-                    "https://www.googleapis.com/auth/firebase",
-                    "https://www.googleapis.com/auth/firebase.readonly"
-                  ],
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "Domain"
-                  },
-                  "path": "v1beta1/{+name}"
-                },
-                "delete": {
-                  "path": "v1beta1/{+name}",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "DELETE",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/firebase"
-                  ],
-                  "id": "firebasehosting.projects.sites.domains.delete",
-                  "description": "Deletes the existing domain mapping on the specified site.",
-                  "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/domains/{domainsId}",
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/sites/[^/]+/domains/[^/]+$",
-                      "required": true,
-                      "description": "Required. The name of the domain association to delete."
-                    }
-                  }
-                }
-              }
-            },
-            "channels": {
-              "methods": {
-                "get": {
-                  "id": "firebasehosting.projects.sites.channels.get",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only",
-                    "https://www.googleapis.com/auth/firebase",
-                    "https://www.googleapis.com/auth/firebase.readonly"
-                  ],
-                  "path": "v1beta1/{+name}",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "location": "path",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/sites/[^/]+/channels/[^/]+$",
-                      "type": "string",
-                      "description": "Required. The fully-qualified identifier for the channel."
-                    }
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/channels/{channelsId}",
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "Channel"
-                  },
-                  "description": "Retrieves information for the specified channel of a site."
-                },
-                "create": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/firebase"
-                  ],
-                  "response": {
-                    "$ref": "Channel"
-                  },
-                  "id": "firebasehosting.projects.sites.channels.create",
-                  "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/channels",
-                  "parameters": {
-                    "channelId": {
-                      "location": "query",
-                      "description": "Required. Immutable. A unique id within the site to identify the channel.",
-                      "type": "string"
-                    },
-                    "parent": {
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/sites/[^/]+$",
-                      "location": "path",
-                      "description": "Required. The site in which this channel should be created."
-                    }
-                  },
-                  "path": "v1beta1/{+parent}/channels",
-                  "request": {
-                    "$ref": "Channel"
-                  },
-                  "description": "Creates a new channel in the specified site.",
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "parent"
-                  ]
-                },
-                "list": {
-                  "description": "Lists the channels for the specified site. All sites have a default \"live\" channel.",
-                  "httpMethod": "GET",
-                  "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/channels",
-                  "response": {
-                    "$ref": "ListChannelsResponse"
-                  },
-                  "id": "firebasehosting.projects.sites.channels.list",
-                  "parameters": {
-                    "pageSize": {
-                      "location": "query",
-                      "type": "integer",
-                      "format": "int32",
-                      "description": "The maximum number of versions to return. The service may return fewer than this value. If unspecified, at most 25 channels will be returned. The maximum value is 100; valuupdateses above 100 will be coerced to 100"
-                    },
-                    "pageToken": {
-                      "type": "string",
-                      "description": "The next_page_token from a previous request, if provided.",
-                      "location": "query"
-                    },
-                    "parent": {
-                      "required": true,
-                      "description": "Required. The site from which to list channels.",
-                      "type": "string",
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/sites/[^/]+$"
-                    }
-                  },
-                  "path": "v1beta1/{+parent}/channels",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only",
-                    "https://www.googleapis.com/auth/firebase",
-                    "https://www.googleapis.com/auth/firebase.readonly"
-                  ]
-                },
-                "patch": {
-                  "path": "v1beta1/{+name}",
-                  "id": "firebasehosting.projects.sites.channels.patch",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/firebase"
-                  ],
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "PATCH",
-                  "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/channels/{channelsId}",
-                  "request": {
-                    "$ref": "Channel"
-                  },
-                  "response": {
-                    "$ref": "Channel"
-                  },
-                  "parameters": {
-                    "updateMask": {
-                      "description": "A comma-separated list of fields to be updated in this request.",
-                      "type": "string",
-                      "format": "google-fieldmask",
-                      "location": "query"
-                    },
-                    "name": {
-                      "pattern": "^projects/[^/]+/sites/[^/]+/channels/[^/]+$",
-                      "description": "The fully-qualified identifier of the Channel.",
-                      "location": "path",
-                      "type": "string",
-                      "required": true
-                    }
-                  },
-                  "description": "Updates information for the specified channel of a site. This method will implicitly create a channel if it doesn't exist."
-                },
-                "delete": {
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "id": "firebasehosting.projects.sites.channels.delete",
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/sites/[^/]+/channels/[^/]+$",
-                      "location": "path",
-                      "description": "Required. The fully-qualified identifier for the site."
-                    }
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "description": "Deletes a channel of a site. The `live` channel cannot be deleted.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/firebase"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/channels/{channelsId}",
-                  "path": "v1beta1/{+name}",
-                  "httpMethod": "DELETE"
-                }
-              },
-              "resources": {
-                "releases": {
-                  "methods": {
-                    "create": {
-                      "parameters": {
-                        "versionName": {
-                          "location": "query",
-                          "type": "string",
-                          "description": "The unique identifier for a version, in the format: /sites/site-name /versions/versionID The site-name in this version identifier must match the site-name in the `parent` parameter. This query parameter must be empty if the `type` field in the request body is `SITE_DISABLE`."
-                        },
-                        "parent": {
-                          "location": "path",
-                          "pattern": "^projects/[^/]+/sites/[^/]+/channels/[^/]+$",
-                          "required": true,
-                          "type": "string",
-                          "description": "Required. The site that the release belongs to, in the format: sites/ site-name"
-                        }
-                      },
-                      "id": "firebasehosting.projects.sites.channels.releases.create",
-                      "path": "v1beta1/{+parent}/releases",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/firebase"
-                      ],
-                      "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/channels/{channelsId}/releases",
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "httpMethod": "POST",
-                      "description": "Creates a new release which makes the content of the specified version actively display on the appropriate URL(s).",
-                      "request": {
-                        "$ref": "Release"
-                      },
-                      "response": {
-                        "$ref": "Release"
-                      }
-                    },
-                    "list": {
-                      "description": "Lists the releases that have been created on the specified site.",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloud-platform.read-only",
-                        "https://www.googleapis.com/auth/firebase",
-                        "https://www.googleapis.com/auth/firebase.readonly"
-                      ],
-                      "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/channels/{channelsId}/releases",
-                      "path": "v1beta1/{+parent}/releases",
-                      "httpMethod": "GET",
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "id": "firebasehosting.projects.sites.channels.releases.list",
-                      "response": {
-                        "$ref": "ListReleasesResponse"
-                      },
-                      "parameters": {
-                        "pageSize": {
-                          "description": "The page size to return. Defaults to 100.",
-                          "format": "int32",
-                          "type": "integer",
-                          "location": "query"
-                        },
-                        "parent": {
-                          "type": "string",
-                          "required": true,
-                          "description": "Required. The parent for which to list files, in the format: sites/site-name",
-                          "location": "path",
-                          "pattern": "^projects/[^/]+/sites/[^/]+/channels/[^/]+$"
-                        },
-                        "pageToken": {
-                          "location": "query",
-                          "description": "The next_page_token from a previous request, if provided.",
-                          "type": "string"
-                        }
-                      }
-                    }
-                  }
-                }
-              }
-            },
-            "releases": {
-              "methods": {
-                "list": {
-                  "parameters": {
-                    "pageSize": {
-                      "description": "The page size to return. Defaults to 100.",
-                      "location": "query",
-                      "type": "integer",
-                      "format": "int32"
-                    },
-                    "pageToken": {
-                      "location": "query",
-                      "type": "string",
-                      "description": "The next_page_token from a previous request, if provided."
-                    },
-                    "parent": {
-                      "required": true,
-                      "pattern": "^projects/[^/]+/sites/[^/]+$",
-                      "description": "Required. The parent for which to list files, in the format: sites/site-name",
-                      "type": "string",
-                      "location": "path"
-                    }
-                  },
-                  "httpMethod": "GET",
-                  "id": "firebasehosting.projects.sites.releases.list",
-                  "path": "v1beta1/{+parent}/releases",
-                  "description": "Lists the releases that have been created on the specified site.",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/releases",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only",
-                    "https://www.googleapis.com/auth/firebase",
-                    "https://www.googleapis.com/auth/firebase.readonly"
-                  ],
-                  "response": {
-                    "$ref": "ListReleasesResponse"
-                  }
-                },
-                "create": {
-                  "httpMethod": "POST",
-                  "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/releases",
-                  "request": {
-                    "$ref": "Release"
-                  },
-                  "id": "firebasehosting.projects.sites.releases.create",
-                  "path": "v1beta1/{+parent}/releases",
-                  "response": {
-                    "$ref": "Release"
-                  },
-                  "description": "Creates a new release which makes the content of the specified version actively display on the appropriate URL(s).",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/firebase"
-                  ],
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "parameters": {
-                    "parent": {
-                      "pattern": "^projects/[^/]+/sites/[^/]+$",
-                      "description": "Required. The site that the release belongs to, in the format: sites/ site-name",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "versionName": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "The unique identifier for a version, in the format: /sites/site-name /versions/versionID The site-name in this version identifier must match the site-name in the `parent` parameter. This query parameter must be empty if the `type` field in the request body is `SITE_DISABLE`."
-                    }
-                  }
-                }
-              }
-            },
-            "versions": {
-              "methods": {
-                "delete": {
-                  "id": "firebasehosting.projects.sites.versions.delete",
-                  "description": "Deletes the specified version.",
-                  "parameters": {
-                    "name": {
-                      "description": "Required. The name of the version to be deleted, in the format: sites/ site-name/versions/versionID",
-                      "type": "string",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/sites/[^/]+/versions/[^/]+$",
-                      "location": "path"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/firebase"
-                  ],
-                  "path": "v1beta1/{+name}",
-                  "httpMethod": "DELETE",
-                  "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/versions/{versionsId}",
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ]
-                },
-                "create": {
-                  "id": "firebasehosting.projects.sites.versions.create",
-                  "response": {
-                    "$ref": "Version"
-                  },
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/versions",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/firebase"
-                  ],
-                  "request": {
-                    "$ref": "Version"
-                  },
-                  "path": "v1beta1/{+parent}/versions",
-                  "description": "Creates a new version for a site.",
-                  "parameters": {
-                    "versionId": {
-                      "type": "string",
-                      "description": "A unique id for the new version. This is was only specified for legacy version creations, and should be blank.",
-                      "location": "query"
-                    },
-                    "sizeBytes": {
-                      "format": "int64",
-                      "description": "The self-reported size of the version. This value is used for a pre-emptive quota check for legacy version uploads.",
-                      "location": "query",
-                      "type": "string"
-                    },
-                    "parent": {
-                      "description": "Required. The parent to create the version for, in the format: sites/ site-name",
-                      "location": "path",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/sites/[^/]+$"
-                    }
-                  }
-                },
-                "patch": {
-                  "parameters": {
-                    "updateMask": {
-                      "type": "string",
-                      "description": "A set of field names from your [version](../sites.versions) that you want to update. A field will be overwritten if, and only if, it's in the mask. If a mask is not provided then a default mask of only [`status`](../sites.versions#Version.FIELDS.status) will be used.",
-                      "location": "query",
-                      "format": "google-fieldmask"
-                    },
-                    "name": {
-                      "description": "The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.",
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/sites/[^/]+/versions/[^/]+$",
-                      "required": true,
-                      "type": "string"
-                    }
-                  },
-                  "response": {
-                    "$ref": "Version"
-                  },
-                  "request": {
-                    "$ref": "Version"
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/versions/{versionsId}",
-                  "path": "v1beta1/{+name}",
-                  "id": "firebasehosting.projects.sites.versions.patch",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/firebase"
-                  ],
-                  "httpMethod": "PATCH",
-                  "description": "Updates the specified metadata for a version. Note that this method will fail with `FAILED_PRECONDITION` in the event of an invalid state transition. The only valid transition for a version is currently from a `CREATED` status to a `FINALIZED` status. Use [`DeleteVersion`](../sites.versions/delete) to set the status of a version to `DELETED`."
-                },
-                "clone": {
-                  "httpMethod": "POST",
-                  "id": "firebasehosting.projects.sites.versions.clone",
-                  "path": "v1beta1/{+parent}/versions:clone",
-                  "parameters": {
-                    "parent": {
-                      "required": true,
-                      "location": "path",
-                      "description": "Required. The target site where the cloned version will reside, in the format: `sites/{site}`",
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/sites/[^/]+$"
-                    }
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/versions:clone",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/firebase"
-                  ],
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "description": "Creates a new version on the target site using the content of the specified version.",
-                  "request": {
-                    "$ref": "CloneVersionRequest"
-                  }
-                },
-                "populateFiles": {
-                  "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/versions/{versionsId}:populateFiles",
-                  "description": "Adds content files to a version. Each file must be under 2 GB.",
-                  "httpMethod": "POST",
-                  "path": "v1beta1/{+parent}:populateFiles",
-                  "response": {
-                    "$ref": "PopulateVersionFilesResponse"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/firebase"
-                  ],
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "id": "firebasehosting.projects.sites.versions.populateFiles",
-                  "request": {
-                    "$ref": "PopulateVersionFilesRequest"
-                  },
-                  "parameters": {
-                    "parent": {
-                      "pattern": "^projects/[^/]+/sites/[^/]+/versions/[^/]+$",
-                      "location": "path",
-                      "description": "Required. The version to add files to, in the format: sites/site-name /versions/versionID",
-                      "required": true,
-                      "type": "string"
-                    }
-                  }
-                },
-                "list": {
-                  "id": "firebasehosting.projects.sites.versions.list",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only",
-                    "https://www.googleapis.com/auth/firebase",
-                    "https://www.googleapis.com/auth/firebase.readonly"
-                  ],
-                  "path": "v1beta1/{+parent}/versions",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "ListVersionsResponse"
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/versions",
-                  "description": "Lists the versions that have been created on the specified site. Will include filtering in the future.",
-                  "parameters": {
-                    "pageToken": {
-                      "type": "string",
-                      "description": "The next_page_token from a previous request, if provided.",
-                      "location": "query"
-                    },
-                    "filter": {
-                      "type": "string",
-                      "description": "The filter string used to return a subset of versions in the response. Currently supported fields for filtering are: name, status, and create_time. Filter processing will be implemented in accordance with go/filtering.",
-                      "location": "query"
-                    },
-                    "parent": {
-                      "type": "string",
-                      "description": "Required. The parent for which to list files, in the format: sites/site-name",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/sites/[^/]+$",
-                      "location": "path"
-                    },
-                    "pageSize": {
-                      "type": "integer",
-                      "format": "int32",
-                      "description": "The maximum number of versions to return. The service may return fewer than this value. If unspecified, at most 25 versions will be returned. The maximum value is 100; values above 100 will be coerced to 100",
-                      "location": "query"
-                    }
-                  }
-                }
-              },
-              "resources": {
-                "files": {
-                  "methods": {
-                    "list": {
-                      "description": "Lists the remaining files to be uploaded for the specified version.",
-                      "path": "v1beta1/{+parent}/files",
-                      "response": {
-                        "$ref": "ListVersionFilesResponse"
-                      },
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloud-platform.read-only",
-                        "https://www.googleapis.com/auth/firebase",
-                        "https://www.googleapis.com/auth/firebase.readonly"
-                      ],
-                      "flatPath": "v1beta1/projects/{projectsId}/sites/{sitesId}/versions/{versionsId}/files",
-                      "id": "firebasehosting.projects.sites.versions.files.list",
-                      "parameters": {
-                        "pageSize": {
-                          "location": "query",
-                          "format": "int32",
-                          "type": "integer",
-                          "description": "The page size to return. Defaults to 1000."
-                        },
-                        "pageToken": {
-                          "description": "The next_page_token from a previous request, if provided. This will be the encoded version of a firebase.hosting.proto.metadata.ListFilesPageToken.",
-                          "type": "string",
-                          "location": "query"
-                        },
-                        "parent": {
-                          "location": "path",
-                          "description": "Required. The parent to list files for, in the format: sites/site-name /versions/versionID",
-                          "required": true,
-                          "type": "string",
-                          "pattern": "^projects/[^/]+/sites/[^/]+/versions/[^/]+$"
-                        },
-                        "status": {
-                          "description": "The type of files in the version that should be listed.",
-                          "location": "query",
-                          "type": "string",
-                          "enum": [
-                            "STATUS_UNSPECIFIED",
-                            "EXPECTED",
-                            "ACTIVE"
-                          ],
-                          "enumDescriptions": [
-                            "The default status; should not be intentionally used.",
-                            "The file has been included in the version and is expected to be uploaded in the near future.",
-                            "The file has already been uploaded to Firebase Hosting."
-                          ]
-                        }
-                      },
-                      "httpMethod": "GET"
-                    }
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  },
-  "basePath": "",
-  "ownerName": "Google",
-  "revision": "20201024",
-  "id": "firebasehosting:v1beta1",
-  "mtlsRootUrl": "https://firebasehosting.mtls.googleapis.com/"
-}
+    "servicePath": "",
+    "title": "Firebase Hosting API",
+    "version": "v1beta1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/fitness.v1.json b/googleapiclient/discovery_cache/documents/fitness.v1.json
index 64847fc..b178c5d 100644
--- a/googleapiclient/discovery_cache/documents/fitness.v1.json
+++ b/googleapiclient/discovery_cache/documents/fitness.v1.json
@@ -1,1706 +1,1706 @@
 {
-  "description": "The Fitness API for managing users' fitness tracking data.",
-  "title": "Fitness API",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/fitness.reproductive_health.write": {
-          "description": "See and add info about your reproductive health in Google Fit. I consent to Google sharing my reproductive health information with this app."
-        },
-        "https://www.googleapis.com/auth/fitness.oxygen_saturation.read": {
-          "description": "See info about your oxygen saturation in Google Fit. I consent to Google sharing my oxygen saturation information with this app."
-        },
-        "https://www.googleapis.com/auth/fitness.body_temperature.read": {
-          "description": "See info about your body temperature in Google Fit. I consent to Google sharing my body temperature information with this app."
-        },
-        "https://www.googleapis.com/auth/fitness.activity.write": {
-          "description": "See and add to your Google Fit physical activity data"
-        },
-        "https://www.googleapis.com/auth/fitness.blood_pressure.write": {
-          "description": "See and add info about your blood pressure in Google Fit. I consent to Google sharing my blood pressure information with this app."
-        },
-        "https://www.googleapis.com/auth/fitness.location.write": {
-          "description": "See and add to your Google Fit location data"
-        },
-        "https://www.googleapis.com/auth/fitness.oxygen_saturation.write": {
-          "description": "See and add info about your oxygen saturation in Google Fit. I consent to Google sharing my oxygen saturation information with this app."
-        },
-        "https://www.googleapis.com/auth/fitness.reproductive_health.read": {
-          "description": "See info about your reproductive health in Google Fit. I consent to Google sharing my reproductive health information with this app."
-        },
-        "https://www.googleapis.com/auth/fitness.blood_glucose.read": {
-          "description": "See info about your blood glucose in Google Fit. I consent to Google sharing my blood glucose information with this app."
-        },
-        "https://www.googleapis.com/auth/fitness.sleep.write": {
-          "description": "See and add to your sleep data in Google Fit. I consent to Google sharing my sleep information with this app."
-        },
-        "https://www.googleapis.com/auth/fitness.location.read": {
-          "description": "See your Google Fit speed and distance data"
-        },
-        "https://www.googleapis.com/auth/fitness.sleep.read": {
-          "description": "See your sleep data in Google Fit. I consent to Google sharing my sleep information with this app."
-        },
-        "https://www.googleapis.com/auth/fitness.heart_rate.read": {
-          "description": "See your heart rate data in Google Fit. I consent to Google sharing my heart rate information with this app."
-        },
-        "https://www.googleapis.com/auth/fitness.nutrition.read": {
-          "description": "See info about your nutrition in Google Fit"
-        },
-        "https://www.googleapis.com/auth/fitness.body.write": {
-          "description": "See and add info about your body measurements and heart rate to Google Fit"
-        },
-        "https://www.googleapis.com/auth/fitness.nutrition.write": {
-          "description": "See and add to info about your nutrition in Google Fit"
-        },
-        "https://www.googleapis.com/auth/fitness.blood_pressure.read": {
-          "description": "See info about your blood pressure in Google Fit. I consent to Google sharing my blood pressure information with this app."
-        },
-        "https://www.googleapis.com/auth/fitness.heart_rate.write": {
-          "description": "See and add to your heart rate data in Google Fit. I consent to Google sharing my heart rate information with this app."
-        },
-        "https://www.googleapis.com/auth/fitness.body_temperature.write": {
-          "description": "See and add to info about your body temperature in Google Fit. I consent to Google sharing my body temperature information with this app."
-        },
-        "https://www.googleapis.com/auth/fitness.body.read": {
-          "description": "See info about your body measurements and heart rate in Google Fit"
-        },
-        "https://www.googleapis.com/auth/fitness.activity.read": {
-          "description": "Use Google Fit to see and store your physical activity data"
-        },
-        "https://www.googleapis.com/auth/fitness.blood_glucose.write": {
-          "description": "See and add info about your blood glucose to Google Fit. I consent to Google sharing my blood glucose information with this app."
-        }
-      }
-    }
-  },
-  "version": "v1",
-  "schemas": {
-    "BucketByTimePeriod": {
-      "properties": {
-        "type": {
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "enum": [
-            "day",
-            "week",
-            "month"
-          ]
-        },
-        "timeZoneId": {
-          "type": "string",
-          "description": "org.joda.timezone.DateTimeZone"
-        },
-        "value": {
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "BucketByTimePeriod",
-      "type": "object"
-    },
-    "Device": {
-      "properties": {
-        "model": {
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.create",
-              "fitness.users.dataSources.update"
-            ]
-          },
-          "description": "End-user visible model name for the device.",
-          "type": "string"
-        },
-        "version": {
-          "description": "Version string for the device hardware/software.",
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.create",
-              "fitness.users.dataSources.update"
-            ]
-          },
-          "type": "string"
-        },
-        "type": {
-          "description": "A constant representing the type of the device.",
-          "enum": [
-            "unknown",
-            "phone",
-            "tablet",
-            "watch",
-            "chestStrap",
-            "scale",
-            "headMounted",
-            "smartDisplay"
-          ],
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.create",
-              "fitness.users.dataSources.update"
-            ]
-          },
-          "enumDescriptions": [
-            "Device type is not known.",
-            "An Android phone.",
-            "An Android tablet.",
-            "A watch or other wrist-mounted band.",
-            "A chest strap.",
-            "A scale.",
-            "Glass or other head-mounted device.",
-            "A smart display e.g. Nest device."
-          ],
-          "type": "string"
-        },
-        "uid": {
-          "description": "The serial number or other unique ID for the hardware. This field is obfuscated when read by any REST or Android client that did not create the data source. Only the data source creator will see the uid field in clear and normal form. The obfuscation preserves equality; that is, given two IDs, if id1 == id2, obfuscated(id1) == obfuscated(id2).",
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.create",
-              "fitness.users.dataSources.update"
-            ]
-          },
-          "type": "string"
-        },
-        "manufacturer": {
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.create",
-              "fitness.users.dataSources.update"
-            ]
-          },
-          "description": "Manufacturer of the product/hardware.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "Device",
-      "description": "Representation of an integrated device (such as a phone or a wearable) that can hold sensors. Each sensor is exposed as a data source. The main purpose of the device information contained in this class is to identify the hardware of a particular data source. This can be useful in different ways, including: - Distinguishing two similar sensors on different devices (the step counter on two nexus 5 phones, for instance) - Display the source of data to the user (by using the device make / model) - Treat data differently depending on sensor type (accelerometers on a watch may give different patterns than those on a phone) - Build different analysis models for each device/version. "
-    },
-    "DataTypeField": {
-      "type": "object",
-      "id": "DataTypeField",
-      "properties": {
-        "optional": {
-          "type": "boolean"
-        },
-        "format": {
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.create",
-              "fitness.users.dataSources.update"
-            ]
-          },
-          "enum": [
-            "integer",
-            "floatPoint",
-            "string",
-            "map",
-            "integerList",
-            "floatList",
-            "blob"
-          ],
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "type": "string",
-          "description": "The different supported formats for each field in a data type."
-        },
-        "name": {
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.create",
-              "fitness.users.dataSources.update"
-            ]
-          },
-          "type": "string",
-          "description": "Defines the name and format of data. Unlike data type names, field names are not namespaced, and only need to be unique within the data type."
-        }
-      },
-      "description": "In case of multi-dimensional data (such as an accelerometer with x, y, and z axes) each field represents one dimension. Each data type field has a unique name which identifies it. The field also defines the format of the data (int, float, etc.). This message is only instantiated in code and not used for wire comms or stored in any way."
-    },
-    "BucketByTime": {
-      "type": "object",
-      "properties": {
-        "durationMillis": {
-          "format": "int64",
-          "description": "Specifies that result buckets aggregate data by exactly durationMillis time frames. Time frames that contain no data will be included in the response with an empty dataset.",
-          "type": "string"
-        },
-        "period": {
-          "$ref": "BucketByTimePeriod"
-        }
-      },
-      "id": "BucketByTime"
-    },
-    "AggregateBucket": {
-      "properties": {
-        "endTimeMillis": {
-          "description": "The end time for the aggregated data, in milliseconds since epoch, inclusive.",
-          "format": "int64",
-          "type": "string"
-        },
-        "startTimeMillis": {
-          "format": "int64",
-          "type": "string",
-          "description": "The start time for the aggregated data, in milliseconds since epoch, inclusive."
-        },
-        "activity": {
-          "type": "integer",
-          "description": "Available for Bucket.Type.ACTIVITY_TYPE, Bucket.Type.ACTIVITY_SEGMENT",
-          "format": "int32"
-        },
-        "dataset": {
-          "items": {
-            "$ref": "Dataset"
-          },
-          "description": "There will be one dataset per AggregateBy in the request.",
-          "type": "array"
-        },
-        "session": {
-          "$ref": "Session",
-          "description": "Available for Bucket.Type.SESSION"
-        },
-        "type": {
-          "enum": [
-            "unknown",
-            "time",
-            "session",
-            "activityType",
-            "activitySegment"
-          ],
-          "description": "The type of a bucket signifies how the data aggregation is performed in the bucket.",
-          "enumDescriptions": [
-            "",
-            "Denotes that bucketing by time is requested. When this is specified, the timeBucketDurationMillis field is used to determine how many buckets will be returned.",
-            "Denotes that bucketing by session is requested. When this is specified, only data that occurs within sessions that begin and end within the dataset time frame, is included in the results.",
-            "Denotes that bucketing by activity type is requested. When this is specified, there will be one bucket for each unique activity type that a user participated in, during the dataset time frame of interest.",
-            "Denotes that bucketing by individual activity segment is requested. This will aggregate data by the time boundaries specified by each activity segment occurring within the dataset time frame of interest."
-          ],
-          "type": "string"
-        }
-      },
-      "id": "AggregateBucket",
-      "type": "object"
-    },
-    "BucketBySession": {
-      "id": "BucketBySession",
-      "type": "object",
-      "properties": {
-        "minDurationMillis": {
-          "description": "Specifies that only sessions of duration longer than minDurationMillis are considered and used as a container for aggregated data.",
-          "format": "int64",
-          "type": "string"
-        }
-      }
-    },
-    "MapValue": {
-      "type": "object",
-      "id": "MapValue",
-      "description": "Holder object for the value of an entry in a map field of a data point. A map value supports a subset of the formats that the regular Value supports.",
-      "properties": {
-        "fpVal": {
-          "type": "number",
-          "format": "double",
-          "description": "Floating point value."
-        }
-      }
-    },
-    "Session": {
-      "properties": {
-        "modifiedTimeMillis": {
-          "format": "int64",
-          "type": "string",
-          "description": "A timestamp that indicates when the session was last modified."
-        },
-        "activityType": {
-          "type": "integer",
-          "description": "The type of activity this session represents.",
-          "format": "int32",
-          "annotations": {
-            "required": [
-              "fitness.users.sessions.update"
-            ]
-          }
-        },
-        "activeTimeMillis": {
-          "type": "string",
-          "format": "int64",
-          "description": "Session active time. While start_time_millis and end_time_millis define the full session time, the active time can be shorter and specified by active_time_millis. If the inactive time during the session is known, it should also be inserted via a com.google.activity.segment data point with a STILL activity value"
-        },
-        "startTimeMillis": {
-          "format": "int64",
-          "annotations": {
-            "required": [
-              "fitness.users.sessions.update"
-            ]
-          },
-          "type": "string",
-          "description": "A start time, in milliseconds since epoch, inclusive."
-        },
-        "id": {
-          "annotations": {
-            "required": [
-              "fitness.users.sessions.update"
-            ]
-          },
-          "description": "A client-generated identifier that is unique across all sessions owned by this particular user.",
-          "type": "string"
-        },
-        "description": {
-          "description": "A description for this session.",
-          "type": "string"
-        },
-        "application": {
-          "description": "The application that created the session.",
-          "$ref": "Application",
-          "annotations": {
-            "required": [
-              "fitness.users.sessions.update"
-            ]
-          }
-        },
-        "name": {
-          "description": "A human readable name of the session.",
-          "annotations": {
-            "required": [
-              "fitness.users.sessions.update"
-            ]
-          },
-          "type": "string"
-        },
-        "endTimeMillis": {
-          "format": "int64",
-          "description": "An end time, in milliseconds since epoch, inclusive.",
-          "type": "string",
-          "annotations": {
-            "required": [
-              "fitness.users.sessions.update"
-            ]
-          }
-        }
-      },
-      "type": "object",
-      "description": "Sessions contain metadata, such as a user-friendly name and time interval information.",
-      "id": "Session"
-    },
-    "Value": {
-      "description": "Holder object for the value of a single field in a data point. A field value has a particular format and is only ever set to one of an integer or a floating point value.",
-      "type": "object",
-      "id": "Value",
-      "properties": {
-        "fpVal": {
-          "format": "double",
-          "description": "Floating point value. When this is set, other values must not be set.",
-          "type": "number"
-        },
-        "mapVal": {
-          "type": "array",
-          "description": "Map value. The valid key space and units for the corresponding value of each entry should be documented as part of the data type definition. Keys should be kept small whenever possible. Data streams with large keys and high data frequency may be down sampled.",
-          "items": {
-            "$ref": "ValueMapValEntry"
-          }
-        },
-        "stringVal": {
-          "type": "string",
-          "description": "String value. When this is set, other values must not be set. Strings should be kept small whenever possible. Data streams with large string values and high data frequency may be down sampled."
-        },
-        "intVal": {
-          "description": "Integer value. When this is set, other values must not be set.",
-          "format": "int32",
-          "type": "integer"
-        }
-      }
-    },
-    "AggregateBy": {
-      "properties": {
-        "dataTypeName": {
-          "description": "The data type to aggregate. All data sources providing this data type will contribute data to the aggregation. The response will contain a single dataset for this data type name. The dataset will have a data source ID of derived::com.google.android.gms:aggregated. If the user has no data for this data type, an empty data set will be returned. Note: Data can be aggregated by either the dataTypeName or the dataSourceId, not both.",
-          "type": "string"
-        },
-        "dataSourceId": {
-          "description": "A data source ID to aggregate. Only data from the specified data source ID will be included in the aggregation. If specified, this data source must exist; the OAuth scopes in the supplied credentials must grant read access to this data type. The dataset in the response will have the same data source ID. Note: Data can be aggregated by either the dataTypeName or the dataSourceId, not both.",
-          "type": "string"
-        }
-      },
-      "description": "The specification of which data to aggregate.",
-      "id": "AggregateBy",
-      "type": "object"
-    },
-    "DataPoint": {
-      "type": "object",
-      "description": "Represents a single data point, generated by a particular data source. A data point holds a value for each field, an end timestamp and an optional start time. The exact semantics of each of these attributes are specified in the documentation for the particular data type. A data point can represent an instantaneous measurement, reading or input observation, as well as averages or aggregates over a time interval. Check the data type documentation to determine which is the case for a particular data type. Data points always contain one value for each field of the data type.",
-      "properties": {
-        "dataTypeName": {
-          "type": "string",
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.datasets.patch"
-            ]
-          },
-          "description": "The data type defining the format of the values in this data point."
-        },
-        "originDataSourceId": {
-          "type": "string",
-          "description": "If the data point is contained in a dataset for a derived data source, this field will be populated with the data source stream ID that created the data point originally. WARNING: do not rely on this field for anything other than debugging. The value of this field, if it is set at all, is an implementation detail and is not guaranteed to remain consistent."
-        },
-        "modifiedTimeMillis": {
-          "type": "string",
-          "description": "Indicates the last time this data point was modified. Useful only in contexts where we are listing the data changes, rather than representing the current state of the data.",
-          "format": "int64"
-        },
-        "computationTimeMillis": {
-          "format": "int64",
-          "description": "DO NOT USE THIS FIELD. It is ignored, and not stored.",
-          "type": "string"
-        },
-        "value": {
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.datasets.patch"
-            ]
-          },
-          "items": {
-            "$ref": "Value"
-          },
-          "type": "array",
-          "description": "Values of each data type field for the data point. It is expected that each value corresponding to a data type field will occur in the same order that the field is listed with in the data type specified in a data source. Only one of integer and floating point fields will be populated, depending on the format enum value within data source's type field."
-        },
-        "endTimeNanos": {
-          "type": "string",
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.datasets.patch"
-            ]
-          },
-          "description": "The end time of the interval represented by this data point, in nanoseconds since epoch.",
-          "format": "int64"
-        },
-        "rawTimestampNanos": {
-          "type": "string",
-          "description": "The raw timestamp from the original SensorEvent.",
-          "format": "int64"
-        },
-        "startTimeNanos": {
-          "description": "The start time of the interval represented by this data point, in nanoseconds since epoch.",
-          "type": "string",
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.datasets.patch"
-            ]
-          },
-          "format": "int64"
-        }
-      },
-      "id": "DataPoint"
-    },
-    "ListDataPointChangesResponse": {
-      "properties": {
-        "nextPageToken": {
-          "description": "The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results.",
-          "type": "string"
-        },
-        "dataSourceId": {
-          "description": "The data stream ID of the data source with data point changes.",
-          "type": "string"
-        },
-        "deletedDataPoint": {
-          "type": "array",
-          "description": "Deleted data points for the user. Note, for modifications this should be parsed before handling insertions.",
-          "items": {
-            "$ref": "DataPoint"
-          }
-        },
-        "insertedDataPoint": {
-          "items": {
-            "$ref": "DataPoint"
-          },
-          "description": "Inserted data points for the user.",
-          "type": "array"
-        }
-      },
-      "id": "ListDataPointChangesResponse",
-      "type": "object"
-    },
-    "ValueMapValEntry": {
-      "properties": {
-        "key": {
-          "type": "string"
-        },
-        "value": {
-          "$ref": "MapValue"
-        }
-      },
-      "type": "object",
-      "id": "ValueMapValEntry"
-    },
-    "BucketByActivity": {
-      "id": "BucketByActivity",
-      "type": "object",
-      "properties": {
-        "minDurationMillis": {
-          "description": "Specifies that only activity segments of duration longer than minDurationMillis are considered and used as a container for aggregated data.",
-          "format": "int64",
-          "type": "string"
-        },
-        "activityDataSourceId": {
-          "type": "string",
-          "description": "The default activity stream will be used if a specific activityDataSourceId is not specified."
-        }
-      }
-    },
-    "DataType": {
-      "id": "DataType",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Each data type has a unique, namespaced, name. All data types in the com.google namespace are shared as part of the platform.",
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.create",
-              "fitness.users.dataSources.update"
-            ]
-          }
-        },
-        "field": {
-          "description": "A field represents one dimension of a data type.",
-          "type": "array",
-          "items": {
-            "$ref": "DataTypeField"
-          },
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.create",
-              "fitness.users.dataSources.update"
-            ]
-          }
-        }
-      },
-      "type": "object"
-    },
-    "Dataset": {
-      "properties": {
-        "minStartTimeNs": {
-          "description": "The smallest start time of all data points in this possibly partial representation of the dataset. Time is in nanoseconds from epoch. This should also match the first part of the dataset identifier.",
-          "format": "int64",
-          "type": "string",
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.datasets.patch"
-            ]
-          }
-        },
-        "nextPageToken": {
-          "description": "This token will be set when a dataset is received in response to a GET request and the dataset is too large to be included in a single response. Provide this value in a subsequent GET request to return the next page of data points within this dataset.",
-          "type": "string"
-        },
-        "maxEndTimeNs": {
-          "type": "string",
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.datasets.patch"
-            ]
-          },
-          "description": "The largest end time of all data points in this possibly partial representation of the dataset. Time is in nanoseconds from epoch. This should also match the second part of the dataset identifier.",
-          "format": "int64"
-        },
-        "point": {
-          "type": "array",
-          "items": {
-            "$ref": "DataPoint"
-          },
-          "description": "A partial list of data points contained in the dataset, ordered by endTimeNanos. This list is considered complete when retrieving a small dataset and partial when patching a dataset or retrieving a dataset that is too large to include in a single response.",
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.datasets.patch"
-            ]
-          }
-        },
-        "dataSourceId": {
-          "type": "string",
-          "description": "The data stream ID of the data source that created the points in this dataset.",
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.datasets.patch"
-            ]
-          }
-        }
-      },
-      "id": "Dataset",
-      "type": "object",
-      "description": "A dataset represents a projection container for data points. They do not carry any info of their own. Datasets represent a set of data points from a particular data source. A data point can be found in more than one dataset."
-    },
-    "Application": {
-      "type": "object",
-      "properties": {
-        "detailsUrl": {
-          "description": "An optional URI that can be used to link back to the application.",
-          "type": "string"
-        },
-        "version": {
-          "description": "Version of the application. You should update this field whenever the application changes in a way that affects the computation of the data.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "The name of this application. This is required for REST clients, but we do not enforce uniqueness of this name. It is provided as a matter of convenience for other developers who would like to identify which REST created an Application or Data Source.",
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.create",
-              "fitness.users.dataSources.update",
-              "fitness.users.sessions.update"
-            ]
-          }
-        },
-        "packageName": {
-          "type": "string",
-          "description": "Package name for this application. This is used as a unique identifier when created by Android applications, but cannot be specified by REST clients. REST clients will have their developer project number reflected into the Data Source data stream IDs, instead of the packageName."
-        }
-      },
-      "id": "Application"
-    },
-    "DataSource": {
-      "id": "DataSource",
-      "type": "object",
-      "properties": {
-        "application": {
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.create",
-              "fitness.users.dataSources.update"
-            ]
-          },
-          "description": "Information about an application which feeds sensor data into the platform.",
-          "$ref": "Application"
-        },
-        "name": {
-          "description": "An end-user visible name for this data source.",
-          "type": "string"
-        },
-        "dataType": {
-          "description": "The data type defines the schema for a stream of data being collected by, inserted into, or queried from the Fitness API.",
-          "$ref": "DataType",
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.create",
-              "fitness.users.dataSources.update"
-            ]
-          }
-        },
-        "type": {
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.create",
-              "fitness.users.dataSources.update"
-            ]
-          },
-          "enumDescriptions": [
-            "",
-            ""
-          ],
-          "type": "string",
-          "enum": [
-            "raw",
-            "derived"
-          ],
-          "description": "A constant describing the type of this data source. Indicates whether this data source produces raw or derived data."
-        },
-        "device": {
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.create",
-              "fitness.users.dataSources.update"
-            ]
-          },
-          "description": "Representation of an integrated device (such as a phone or a wearable) that can hold sensors.",
-          "$ref": "Device"
-        },
-        "dataQualityStandard": {
-          "description": "DO NOT POPULATE THIS FIELD. It is never populated in responses from the platform, and is ignored in queries. It will be removed in a future version entirely.",
-          "items": {
-            "type": "string",
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ],
-            "enum": [
-              "dataQualityUnknown",
-              "dataQualityBloodPressureEsh2002",
-              "dataQualityBloodPressureEsh2010",
-              "dataQualityBloodPressureAami",
-              "dataQualityBloodPressureBhsAA",
-              "dataQualityBloodPressureBhsAB",
-              "dataQualityBloodPressureBhsBA",
-              "dataQualityBloodPressureBhsBB",
-              "dataQualityBloodGlucoseIso151972003",
-              "dataQualityBloodGlucoseIso151972013"
-            ]
-          },
-          "type": "array"
-        },
-        "dataStreamId": {
-          "type": "string",
-          "annotations": {
-            "required": [
-              "fitness.users.dataSources.update"
-            ]
-          },
-          "description": "A unique identifier for the data stream produced by this data source. The identifier includes: - The physical device's manufacturer, model, and serial number (UID). - The application's package name or name. Package name is used when the data source was created by an Android application. The developer project number is used when the data source was created by a REST client. - The data source's type. - The data source's stream name. Note that not all attributes of the data source are used as part of the stream identifier. In particular, the version of the hardware/the application isn't used. This allows us to preserve the same stream through version updates. This also means that two DataSource objects may represent the same data stream even if they're not equal. The exact format of the data stream ID created by an Android application is: type:dataType.name:application.packageName:device.manufacturer:device.model:device.uid:dataStreamName The exact format of the data stream ID created by a REST client is: type:dataType.name:developer project number:device.manufacturer:device.model:device.uid:dataStreamName When any of the optional fields that make up the data stream ID are absent, they will be omitted from the data stream ID. The minimum viable data stream ID would be: type:dataType.name:developer project number Finally, the developer project number and device UID are obfuscated when read by any REST or Android client that did not create the data source. Only the data source creator will see the developer project number in clear and normal form. This means a client will see a different set of data_stream_ids than another client with different credentials."
-        },
-        "dataStreamName": {
-          "type": "string",
-          "description": "The stream name uniquely identifies this particular data source among other data sources of the same type from the same underlying producer. Setting the stream name is optional, but should be done whenever an application exposes two streams for the same data type, or when a device has two equivalent sensors."
-        }
-      },
-      "description": "Definition of a unique source of sensor data. Data sources can expose raw data coming from hardware sensors on local or companion devices. They can also expose derived data, created by transforming or merging other data sources. Multiple data sources can exist for the same data type. Every data point inserted into or read from this service has an associated data source. The data source contains enough information to uniquely identify its data, including the hardware device and the application that collected and/or transformed the data. It also holds useful metadata, such as the hardware and application versions, and the device type. Each data source produces a unique stream of data, with a unique identifier. Not all changes to data source affect the stream identifier, so that data collected by updated versions of the same application/device can still be considered to belong to the same data stream."
-    },
-    "ListSessionsResponse": {
-      "properties": {
-        "session": {
-          "description": "Sessions with an end time that is between startTime and endTime of the request.",
-          "type": "array",
-          "items": {
-            "$ref": "Session"
-          }
-        },
-        "deletedSession": {
-          "items": {
-            "$ref": "Session"
-          },
-          "type": "array",
-          "description": "If includeDeleted is set to true in the request, and startTime and endTime are omitted, this will include sessions which were deleted since the last sync."
-        },
-        "hasMoreData": {
-          "type": "boolean",
-          "description": "Flag to indicate server has more data to transfer. DO NOT USE THIS FIELD. It is never populated in responses from the server."
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "The sync token which is used to sync further changes. This will only be provided if both startTime and endTime are omitted from the request."
-        }
-      },
-      "type": "object",
-      "id": "ListSessionsResponse"
-    },
-    "ListDataSourcesResponse": {
-      "properties": {
-        "dataSource": {
-          "description": "A previously created data source.",
-          "type": "array",
-          "items": {
-            "$ref": "DataSource"
-          }
-        }
-      },
-      "type": "object",
-      "id": "ListDataSourcesResponse"
-    },
-    "AggregateResponse": {
-      "type": "object",
-      "properties": {
-        "bucket": {
-          "items": {
-            "$ref": "AggregateBucket"
-          },
-          "type": "array",
-          "description": "A list of buckets containing the aggregated data."
-        }
-      },
-      "id": "AggregateResponse"
-    },
-    "AggregateRequest": {
-      "properties": {
-        "bucketByTime": {
-          "$ref": "BucketByTime",
-          "description": "Specifies that data be aggregated by a single time interval. Mutually exclusive of other bucketing specifications."
-        },
-        "endTimeMillis": {
-          "type": "string",
-          "format": "int64",
-          "annotations": {
-            "required": [
-              "fitness.users.dataset.aggregate"
-            ]
-          },
-          "description": "The end of a window of time. Data that intersects with this time window will be aggregated. The time is in milliseconds since epoch, inclusive."
-        },
-        "filteredDataQualityStandard": {
-          "items": {
-            "enumDescriptions": [
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              "",
-              ""
-            ],
-            "enum": [
-              "dataQualityUnknown",
-              "dataQualityBloodPressureEsh2002",
-              "dataQualityBloodPressureEsh2010",
-              "dataQualityBloodPressureAami",
-              "dataQualityBloodPressureBhsAA",
-              "dataQualityBloodPressureBhsAB",
-              "dataQualityBloodPressureBhsBA",
-              "dataQualityBloodPressureBhsBB",
-              "dataQualityBloodGlucoseIso151972003",
-              "dataQualityBloodGlucoseIso151972013"
-            ],
-            "type": "string"
-          },
-          "description": "DO NOT POPULATE THIS FIELD. It is ignored.",
-          "type": "array"
-        },
-        "bucketBySession": {
-          "$ref": "BucketBySession",
-          "description": "Specifies that data be aggregated by user sessions. Data that does not fall within the time range of a session will not be included in the response. Mutually exclusive of other bucketing specifications."
-        },
-        "bucketByActivitySegment": {
-          "$ref": "BucketByActivity",
-          "description": "Specifies that data be aggregated each activity segment recorded for a user. Similar to bucketByActivitySegment, but bucketing is done for each activity segment rather than all segments of the same type. Mutually exclusive of other bucketing specifications."
-        },
-        "aggregateBy": {
-          "description": "The specification of data to be aggregated. At least one aggregateBy spec must be provided. All data that is specified will be aggregated using the same bucketing criteria. There will be one dataset in the response for every aggregateBy spec.",
-          "type": "array",
-          "annotations": {
-            "required": [
-              "fitness.users.dataset.aggregate"
-            ]
-          },
-          "items": {
-            "$ref": "AggregateBy"
-          }
-        },
-        "startTimeMillis": {
-          "format": "int64",
-          "annotations": {
-            "required": [
-              "fitness.users.dataset.aggregate"
-            ]
-          },
-          "type": "string",
-          "description": "The start of a window of time. Data that intersects with this time window will be aggregated. The time is in milliseconds since epoch, inclusive."
-        },
-        "bucketByActivityType": {
-          "description": "Specifies that data be aggregated by the type of activity being performed when the data was recorded. All data that was recorded during a certain activity type (.for the given time range) will be aggregated into the same bucket. Data that was recorded while the user was not active will not be included in the response. Mutually exclusive of other bucketing specifications.",
-          "$ref": "BucketByActivity"
-        }
-      },
-      "description": "Next id: 10",
-      "type": "object",
-      "id": "AggregateRequest"
-    }
-  },
-  "id": "fitness:v1",
-  "batchPath": "batch",
-  "baseUrl": "https://fitness.googleapis.com/fitness/v1/users/",
-  "servicePath": "fitness/v1/users/",
-  "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
-  },
-  "rootUrl": "https://fitness.googleapis.com/",
-  "protocol": "rest",
-  "ownerDomain": "google.com",
-  "discoveryVersion": "v1",
-  "revision": "20201012",
-  "name": "fitness",
-  "ownerName": "Google",
-  "basePath": "/fitness/v1/users/",
-  "resources": {
-    "users": {
-      "resources": {
-        "dataset": {
-          "methods": {
-            "aggregate": {
-              "scopes": [
-                "https://www.googleapis.com/auth/fitness.activity.read",
-                "https://www.googleapis.com/auth/fitness.activity.write",
-                "https://www.googleapis.com/auth/fitness.blood_glucose.read",
-                "https://www.googleapis.com/auth/fitness.blood_glucose.write",
-                "https://www.googleapis.com/auth/fitness.blood_pressure.read",
-                "https://www.googleapis.com/auth/fitness.blood_pressure.write",
-                "https://www.googleapis.com/auth/fitness.body.read",
-                "https://www.googleapis.com/auth/fitness.body.write",
-                "https://www.googleapis.com/auth/fitness.body_temperature.read",
-                "https://www.googleapis.com/auth/fitness.body_temperature.write",
-                "https://www.googleapis.com/auth/fitness.heart_rate.read",
-                "https://www.googleapis.com/auth/fitness.heart_rate.write",
-                "https://www.googleapis.com/auth/fitness.location.read",
-                "https://www.googleapis.com/auth/fitness.location.write",
-                "https://www.googleapis.com/auth/fitness.nutrition.read",
-                "https://www.googleapis.com/auth/fitness.nutrition.write",
-                "https://www.googleapis.com/auth/fitness.oxygen_saturation.read",
-                "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
-                "https://www.googleapis.com/auth/fitness.reproductive_health.read",
-                "https://www.googleapis.com/auth/fitness.reproductive_health.write",
-                "https://www.googleapis.com/auth/fitness.sleep.read",
-                "https://www.googleapis.com/auth/fitness.sleep.write"
-              ],
-              "request": {
-                "$ref": "AggregateRequest"
-              },
-              "flatPath": "{userId}/dataset:aggregate",
-              "parameterOrder": [
-                "userId"
-              ],
-              "description": "Aggregates data of a certain type or stream into buckets divided by a given type of boundary. Multiple data sets of multiple types and from multiple sources can be aggregated into exactly one bucket type per request.",
-              "id": "fitness.users.dataset.aggregate",
-              "response": {
-                "$ref": "AggregateResponse"
-              },
-              "parameters": {
-                "userId": {
-                  "location": "path",
-                  "description": "Aggregate data for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
-                  "required": true,
-                  "type": "string"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/fitness.activity.read": {
+                    "description": "Use Google Fit to see and store your physical activity data"
+                },
+                "https://www.googleapis.com/auth/fitness.activity.write": {
+                    "description": "See and add to your Google Fit physical activity data"
+                },
+                "https://www.googleapis.com/auth/fitness.blood_glucose.read": {
+                    "description": "See info about your blood glucose in Google Fit. I consent to Google sharing my blood glucose information with this app."
+                },
+                "https://www.googleapis.com/auth/fitness.blood_glucose.write": {
+                    "description": "See and add info about your blood glucose to Google Fit. I consent to Google sharing my blood glucose information with this app."
+                },
+                "https://www.googleapis.com/auth/fitness.blood_pressure.read": {
+                    "description": "See info about your blood pressure in Google Fit. I consent to Google sharing my blood pressure information with this app."
+                },
+                "https://www.googleapis.com/auth/fitness.blood_pressure.write": {
+                    "description": "See and add info about your blood pressure in Google Fit. I consent to Google sharing my blood pressure information with this app."
+                },
+                "https://www.googleapis.com/auth/fitness.body.read": {
+                    "description": "See info about your body measurements and heart rate in Google Fit"
+                },
+                "https://www.googleapis.com/auth/fitness.body.write": {
+                    "description": "See and add info about your body measurements and heart rate to Google Fit"
+                },
+                "https://www.googleapis.com/auth/fitness.body_temperature.read": {
+                    "description": "See info about your body temperature in Google Fit. I consent to Google sharing my body temperature information with this app."
+                },
+                "https://www.googleapis.com/auth/fitness.body_temperature.write": {
+                    "description": "See and add to info about your body temperature in Google Fit. I consent to Google sharing my body temperature information with this app."
+                },
+                "https://www.googleapis.com/auth/fitness.heart_rate.read": {
+                    "description": "See your heart rate data in Google Fit. I consent to Google sharing my heart rate information with this app."
+                },
+                "https://www.googleapis.com/auth/fitness.heart_rate.write": {
+                    "description": "See and add to your heart rate data in Google Fit. I consent to Google sharing my heart rate information with this app."
+                },
+                "https://www.googleapis.com/auth/fitness.location.read": {
+                    "description": "See your Google Fit speed and distance data"
+                },
+                "https://www.googleapis.com/auth/fitness.location.write": {
+                    "description": "See and add to your Google Fit location data"
+                },
+                "https://www.googleapis.com/auth/fitness.nutrition.read": {
+                    "description": "See info about your nutrition in Google Fit"
+                },
+                "https://www.googleapis.com/auth/fitness.nutrition.write": {
+                    "description": "See and add to info about your nutrition in Google Fit"
+                },
+                "https://www.googleapis.com/auth/fitness.oxygen_saturation.read": {
+                    "description": "See info about your oxygen saturation in Google Fit. I consent to Google sharing my oxygen saturation information with this app."
+                },
+                "https://www.googleapis.com/auth/fitness.oxygen_saturation.write": {
+                    "description": "See and add info about your oxygen saturation in Google Fit. I consent to Google sharing my oxygen saturation information with this app."
+                },
+                "https://www.googleapis.com/auth/fitness.reproductive_health.read": {
+                    "description": "See info about your reproductive health in Google Fit. I consent to Google sharing my reproductive health information with this app."
+                },
+                "https://www.googleapis.com/auth/fitness.reproductive_health.write": {
+                    "description": "See and add info about your reproductive health in Google Fit. I consent to Google sharing my reproductive health information with this app."
+                },
+                "https://www.googleapis.com/auth/fitness.sleep.read": {
+                    "description": "See your sleep data in Google Fit. I consent to Google sharing my sleep information with this app."
+                },
+                "https://www.googleapis.com/auth/fitness.sleep.write": {
+                    "description": "See and add to your sleep data in Google Fit. I consent to Google sharing my sleep information with this app."
                 }
-              },
-              "httpMethod": "POST",
-              "path": "{userId}/dataset:aggregate"
             }
-          }
+        }
+    },
+    "basePath": "/fitness/v1/users/",
+    "baseUrl": "https://fitness.googleapis.com/fitness/v1/users/",
+    "batchPath": "batch",
+    "description": "The Fitness API for managing users' fitness tracking data.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://developers.google.com/fit/rest/v1/get-started",
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "fitness:v1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://fitness.mtls.googleapis.com/",
+    "name": "fitness",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "dataSources": {
-          "methods": {
-            "list": {
-              "httpMethod": "GET",
-              "path": "{userId}/dataSources",
-              "id": "fitness.users.dataSources.list",
-              "flatPath": "{userId}/dataSources",
-              "parameterOrder": [
-                "userId"
-              ],
-              "description": "Lists all data sources that are visible to the developer, using the OAuth scopes provided. The list is not exhaustive; the user may have private data sources that are only visible to other developers, or calls using other scopes.",
-              "parameters": {
-                "userId": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "List data sources for the person identified. Use me to indicate the authenticated user. Only me is supported at this time."
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        }
+    },
+    "protocol": "rest",
+    "resources": {
+        "users": {
+            "resources": {
+                "dataSources": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a new data source that is unique across all data sources belonging to this user. A data source is a unique source of sensor data. Data sources can expose raw data coming from hardware sensors on local or companion devices. They can also expose derived data, created by transforming or merging other data sources. Multiple data sources can exist for the same data type. Every data point in every dataset inserted into or read from the Fitness API has an associated data source. Each data source produces a unique stream of dataset updates, with a unique data source identifier. Not all changes to data source affect the data stream ID, so that data collected by updated versions of the same application/device can still be considered to belong to the same data source. Data sources are identified using a string generated by the server, based on the contents of the source being created. The dataStreamId field should not be set when invoking this method. It will be automatically generated by the server with the correct format. If a dataStreamId is set, it must match the format that the server would generate. This format is a combination of some fields from the data source, and has a specific order. If it doesn't match, the request will fail with an error. Specifying a DataType which is not a known type (beginning with \"com.google.\") will create a DataSource with a *custom data type*. Custom data types are only readable by the application that created them. Custom data types are *deprecated*; use standard data types instead. In addition to the data source fields included in the data source ID, the developer project number that is authenticated when creating the data source is included. This developer project number is obfuscated when read by any other developer reading public data types.",
+                            "flatPath": "{userId}/dataSources",
+                            "httpMethod": "POST",
+                            "id": "fitness.users.dataSources.create",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "userId": {
+                                    "description": "Create the data source for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "{userId}/dataSources",
+                            "request": {
+                                "$ref": "DataSource"
+                            },
+                            "response": {
+                                "$ref": "DataSource"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/fitness.activity.write",
+                                "https://www.googleapis.com/auth/fitness.blood_glucose.write",
+                                "https://www.googleapis.com/auth/fitness.blood_pressure.write",
+                                "https://www.googleapis.com/auth/fitness.body.write",
+                                "https://www.googleapis.com/auth/fitness.body_temperature.write",
+                                "https://www.googleapis.com/auth/fitness.heart_rate.write",
+                                "https://www.googleapis.com/auth/fitness.location.write",
+                                "https://www.googleapis.com/auth/fitness.nutrition.write",
+                                "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
+                                "https://www.googleapis.com/auth/fitness.reproductive_health.write",
+                                "https://www.googleapis.com/auth/fitness.sleep.write"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes the specified data source. The request will fail if the data source contains any data points.",
+                            "flatPath": "{userId}/dataSources/{dataSourceId}",
+                            "httpMethod": "DELETE",
+                            "id": "fitness.users.dataSources.delete",
+                            "parameterOrder": [
+                                "userId",
+                                "dataSourceId"
+                            ],
+                            "parameters": {
+                                "dataSourceId": {
+                                    "description": "The data stream ID of the data source to delete.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "description": "Retrieve a data source for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "{userId}/dataSources/{dataSourceId}",
+                            "response": {
+                                "$ref": "DataSource"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/fitness.activity.write",
+                                "https://www.googleapis.com/auth/fitness.blood_glucose.write",
+                                "https://www.googleapis.com/auth/fitness.blood_pressure.write",
+                                "https://www.googleapis.com/auth/fitness.body.write",
+                                "https://www.googleapis.com/auth/fitness.body_temperature.write",
+                                "https://www.googleapis.com/auth/fitness.heart_rate.write",
+                                "https://www.googleapis.com/auth/fitness.location.write",
+                                "https://www.googleapis.com/auth/fitness.nutrition.write",
+                                "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
+                                "https://www.googleapis.com/auth/fitness.reproductive_health.write",
+                                "https://www.googleapis.com/auth/fitness.sleep.write"
+                            ]
+                        },
+                        "get": {
+                            "description": "Returns the specified data source.",
+                            "flatPath": "{userId}/dataSources/{dataSourceId}",
+                            "httpMethod": "GET",
+                            "id": "fitness.users.dataSources.get",
+                            "parameterOrder": [
+                                "userId",
+                                "dataSourceId"
+                            ],
+                            "parameters": {
+                                "dataSourceId": {
+                                    "description": "The data stream ID of the data source to retrieve.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "description": "Retrieve a data source for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "{userId}/dataSources/{dataSourceId}",
+                            "response": {
+                                "$ref": "DataSource"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/fitness.activity.read",
+                                "https://www.googleapis.com/auth/fitness.activity.write",
+                                "https://www.googleapis.com/auth/fitness.blood_glucose.read",
+                                "https://www.googleapis.com/auth/fitness.blood_glucose.write",
+                                "https://www.googleapis.com/auth/fitness.blood_pressure.read",
+                                "https://www.googleapis.com/auth/fitness.blood_pressure.write",
+                                "https://www.googleapis.com/auth/fitness.body.read",
+                                "https://www.googleapis.com/auth/fitness.body.write",
+                                "https://www.googleapis.com/auth/fitness.body_temperature.read",
+                                "https://www.googleapis.com/auth/fitness.body_temperature.write",
+                                "https://www.googleapis.com/auth/fitness.heart_rate.read",
+                                "https://www.googleapis.com/auth/fitness.heart_rate.write",
+                                "https://www.googleapis.com/auth/fitness.location.read",
+                                "https://www.googleapis.com/auth/fitness.location.write",
+                                "https://www.googleapis.com/auth/fitness.nutrition.read",
+                                "https://www.googleapis.com/auth/fitness.nutrition.write",
+                                "https://www.googleapis.com/auth/fitness.oxygen_saturation.read",
+                                "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
+                                "https://www.googleapis.com/auth/fitness.reproductive_health.read",
+                                "https://www.googleapis.com/auth/fitness.reproductive_health.write",
+                                "https://www.googleapis.com/auth/fitness.sleep.read",
+                                "https://www.googleapis.com/auth/fitness.sleep.write"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists all data sources that are visible to the developer, using the OAuth scopes provided. The list is not exhaustive; the user may have private data sources that are only visible to other developers, or calls using other scopes.",
+                            "flatPath": "{userId}/dataSources",
+                            "httpMethod": "GET",
+                            "id": "fitness.users.dataSources.list",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "dataTypeName": {
+                                    "description": "The names of data types to include in the list. If not specified, all data sources will be returned.",
+                                    "location": "query",
+                                    "repeated": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "description": "List data sources for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "{userId}/dataSources",
+                            "response": {
+                                "$ref": "ListDataSourcesResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/fitness.activity.read",
+                                "https://www.googleapis.com/auth/fitness.activity.write",
+                                "https://www.googleapis.com/auth/fitness.blood_glucose.read",
+                                "https://www.googleapis.com/auth/fitness.blood_glucose.write",
+                                "https://www.googleapis.com/auth/fitness.blood_pressure.read",
+                                "https://www.googleapis.com/auth/fitness.blood_pressure.write",
+                                "https://www.googleapis.com/auth/fitness.body.read",
+                                "https://www.googleapis.com/auth/fitness.body.write",
+                                "https://www.googleapis.com/auth/fitness.body_temperature.read",
+                                "https://www.googleapis.com/auth/fitness.body_temperature.write",
+                                "https://www.googleapis.com/auth/fitness.heart_rate.read",
+                                "https://www.googleapis.com/auth/fitness.heart_rate.write",
+                                "https://www.googleapis.com/auth/fitness.location.read",
+                                "https://www.googleapis.com/auth/fitness.location.write",
+                                "https://www.googleapis.com/auth/fitness.nutrition.read",
+                                "https://www.googleapis.com/auth/fitness.nutrition.write",
+                                "https://www.googleapis.com/auth/fitness.oxygen_saturation.read",
+                                "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
+                                "https://www.googleapis.com/auth/fitness.reproductive_health.read",
+                                "https://www.googleapis.com/auth/fitness.reproductive_health.write",
+                                "https://www.googleapis.com/auth/fitness.sleep.read",
+                                "https://www.googleapis.com/auth/fitness.sleep.write"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates the specified data source. The dataStreamId, dataType, type, dataStreamName, and device properties with the exception of version, cannot be modified. Data sources are identified by their dataStreamId.",
+                            "flatPath": "{userId}/dataSources/{dataSourceId}",
+                            "httpMethod": "PUT",
+                            "id": "fitness.users.dataSources.update",
+                            "parameterOrder": [
+                                "userId",
+                                "dataSourceId"
+                            ],
+                            "parameters": {
+                                "dataSourceId": {
+                                    "description": "The data stream ID of the data source to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "description": "Update the data source for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "{userId}/dataSources/{dataSourceId}",
+                            "request": {
+                                "$ref": "DataSource"
+                            },
+                            "response": {
+                                "$ref": "DataSource"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/fitness.activity.write",
+                                "https://www.googleapis.com/auth/fitness.blood_glucose.write",
+                                "https://www.googleapis.com/auth/fitness.blood_pressure.write",
+                                "https://www.googleapis.com/auth/fitness.body.write",
+                                "https://www.googleapis.com/auth/fitness.body_temperature.write",
+                                "https://www.googleapis.com/auth/fitness.heart_rate.write",
+                                "https://www.googleapis.com/auth/fitness.location.write",
+                                "https://www.googleapis.com/auth/fitness.nutrition.write",
+                                "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
+                                "https://www.googleapis.com/auth/fitness.reproductive_health.write",
+                                "https://www.googleapis.com/auth/fitness.sleep.write"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "dataPointChanges": {
+                            "methods": {
+                                "list": {
+                                    "description": "Queries for user's data point changes for a particular data source.",
+                                    "flatPath": "{userId}/dataSources/{dataSourceId}/dataPointChanges",
+                                    "httpMethod": "GET",
+                                    "id": "fitness.users.dataSources.dataPointChanges.list",
+                                    "parameterOrder": [
+                                        "userId",
+                                        "dataSourceId"
+                                    ],
+                                    "parameters": {
+                                        "dataSourceId": {
+                                            "description": "The data stream ID of the data source that created the dataset.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "limit": {
+                                            "description": "If specified, no more than this many data point changes will be included in the response.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "userId": {
+                                            "description": "List data points for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "{userId}/dataSources/{dataSourceId}/dataPointChanges",
+                                    "response": {
+                                        "$ref": "ListDataPointChangesResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/fitness.activity.read",
+                                        "https://www.googleapis.com/auth/fitness.activity.write",
+                                        "https://www.googleapis.com/auth/fitness.blood_glucose.read",
+                                        "https://www.googleapis.com/auth/fitness.blood_glucose.write",
+                                        "https://www.googleapis.com/auth/fitness.blood_pressure.read",
+                                        "https://www.googleapis.com/auth/fitness.blood_pressure.write",
+                                        "https://www.googleapis.com/auth/fitness.body.read",
+                                        "https://www.googleapis.com/auth/fitness.body.write",
+                                        "https://www.googleapis.com/auth/fitness.body_temperature.read",
+                                        "https://www.googleapis.com/auth/fitness.body_temperature.write",
+                                        "https://www.googleapis.com/auth/fitness.heart_rate.read",
+                                        "https://www.googleapis.com/auth/fitness.heart_rate.write",
+                                        "https://www.googleapis.com/auth/fitness.location.read",
+                                        "https://www.googleapis.com/auth/fitness.location.write",
+                                        "https://www.googleapis.com/auth/fitness.nutrition.read",
+                                        "https://www.googleapis.com/auth/fitness.nutrition.write",
+                                        "https://www.googleapis.com/auth/fitness.oxygen_saturation.read",
+                                        "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
+                                        "https://www.googleapis.com/auth/fitness.reproductive_health.read",
+                                        "https://www.googleapis.com/auth/fitness.reproductive_health.write",
+                                        "https://www.googleapis.com/auth/fitness.sleep.read",
+                                        "https://www.googleapis.com/auth/fitness.sleep.write"
+                                    ]
+                                }
+                            }
+                        },
+                        "datasets": {
+                            "methods": {
+                                "delete": {
+                                    "description": "Performs an inclusive delete of all data points whose start and end times have any overlap with the time range specified by the dataset ID. For most data types, the entire data point will be deleted. For data types where the time span represents a consistent value (such as com.google.activity.segment), and a data point straddles either end point of the dataset, only the overlapping portion of the data point will be deleted.",
+                                    "flatPath": "{userId}/dataSources/{dataSourceId}/datasets/{datasetId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "fitness.users.dataSources.datasets.delete",
+                                    "parameterOrder": [
+                                        "userId",
+                                        "dataSourceId",
+                                        "datasetId"
+                                    ],
+                                    "parameters": {
+                                        "currentTimeMillis": {
+                                            "description": "The client's current time in milliseconds since epoch.",
+                                            "format": "int64",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "dataSourceId": {
+                                            "description": "The data stream ID of the data source that created the dataset.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "datasetId": {
+                                            "description": "Dataset identifier that is a composite of the minimum data point start time and maximum data point end time represented as nanoseconds from the epoch. The ID is formatted like: \"startTime-endTime\" where startTime and endTime are 64 bit integers.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "modifiedTimeMillis": {
+                                            "description": "When the operation was performed on the client.",
+                                            "format": "int64",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "userId": {
+                                            "description": "Delete a dataset for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "{userId}/dataSources/{dataSourceId}/datasets/{datasetId}",
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/fitness.activity.write",
+                                        "https://www.googleapis.com/auth/fitness.blood_glucose.write",
+                                        "https://www.googleapis.com/auth/fitness.blood_pressure.write",
+                                        "https://www.googleapis.com/auth/fitness.body.write",
+                                        "https://www.googleapis.com/auth/fitness.body_temperature.write",
+                                        "https://www.googleapis.com/auth/fitness.heart_rate.write",
+                                        "https://www.googleapis.com/auth/fitness.location.write",
+                                        "https://www.googleapis.com/auth/fitness.nutrition.write",
+                                        "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
+                                        "https://www.googleapis.com/auth/fitness.reproductive_health.write",
+                                        "https://www.googleapis.com/auth/fitness.sleep.write"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Returns a dataset containing all data points whose start and end times overlap with the specified range of the dataset minimum start time and maximum end time. Specifically, any data point whose start time is less than or equal to the dataset end time and whose end time is greater than or equal to the dataset start time.",
+                                    "flatPath": "{userId}/dataSources/{dataSourceId}/datasets/{datasetId}",
+                                    "httpMethod": "GET",
+                                    "id": "fitness.users.dataSources.datasets.get",
+                                    "parameterOrder": [
+                                        "userId",
+                                        "dataSourceId",
+                                        "datasetId"
+                                    ],
+                                    "parameters": {
+                                        "dataSourceId": {
+                                            "description": "The data stream ID of the data source that created the dataset.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "datasetId": {
+                                            "description": "Dataset identifier that is a composite of the minimum data point start time and maximum data point end time represented as nanoseconds from the epoch. The ID is formatted like: \"startTime-endTime\" where startTime and endTime are 64 bit integers.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "limit": {
+                                            "description": "If specified, no more than this many data points will be included in the dataset. If there are more data points in the dataset, nextPageToken will be set in the dataset response. The limit is applied from the end of the time range. That is, if pageToken is absent, the limit most recent data points will be returned.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "The continuation token, which is used to page through large datasets. To get the next page of a dataset, set this parameter to the value of nextPageToken from the previous response. Each subsequent call will yield a partial dataset with data point end timestamps that are strictly smaller than those in the previous partial response.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "userId": {
+                                            "description": "Retrieve a dataset for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "{userId}/dataSources/{dataSourceId}/datasets/{datasetId}",
+                                    "response": {
+                                        "$ref": "Dataset"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/fitness.activity.read",
+                                        "https://www.googleapis.com/auth/fitness.activity.write",
+                                        "https://www.googleapis.com/auth/fitness.blood_glucose.read",
+                                        "https://www.googleapis.com/auth/fitness.blood_glucose.write",
+                                        "https://www.googleapis.com/auth/fitness.blood_pressure.read",
+                                        "https://www.googleapis.com/auth/fitness.blood_pressure.write",
+                                        "https://www.googleapis.com/auth/fitness.body.read",
+                                        "https://www.googleapis.com/auth/fitness.body.write",
+                                        "https://www.googleapis.com/auth/fitness.body_temperature.read",
+                                        "https://www.googleapis.com/auth/fitness.body_temperature.write",
+                                        "https://www.googleapis.com/auth/fitness.heart_rate.read",
+                                        "https://www.googleapis.com/auth/fitness.heart_rate.write",
+                                        "https://www.googleapis.com/auth/fitness.location.read",
+                                        "https://www.googleapis.com/auth/fitness.location.write",
+                                        "https://www.googleapis.com/auth/fitness.nutrition.read",
+                                        "https://www.googleapis.com/auth/fitness.nutrition.write",
+                                        "https://www.googleapis.com/auth/fitness.oxygen_saturation.read",
+                                        "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
+                                        "https://www.googleapis.com/auth/fitness.reproductive_health.read",
+                                        "https://www.googleapis.com/auth/fitness.reproductive_health.write",
+                                        "https://www.googleapis.com/auth/fitness.sleep.read",
+                                        "https://www.googleapis.com/auth/fitness.sleep.write"
+                                    ]
+                                },
+                                "patch": {
+                                    "description": "Adds data points to a dataset. The dataset need not be previously created. All points within the given dataset will be returned with subsquent calls to retrieve this dataset. Data points can belong to more than one dataset. This method does not use patch semantics: the data points provided are merely inserted, with no existing data replaced.",
+                                    "flatPath": "{userId}/dataSources/{dataSourceId}/datasets/{datasetId}",
+                                    "httpMethod": "PATCH",
+                                    "id": "fitness.users.dataSources.datasets.patch",
+                                    "parameterOrder": [
+                                        "userId",
+                                        "dataSourceId",
+                                        "datasetId"
+                                    ],
+                                    "parameters": {
+                                        "currentTimeMillis": {
+                                            "description": "The client's current time in milliseconds since epoch. Note that the minStartTimeNs and maxEndTimeNs properties in the request body are in nanoseconds instead of milliseconds.",
+                                            "format": "int64",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "dataSourceId": {
+                                            "description": "The data stream ID of the data source that created the dataset.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "datasetId": {
+                                            "description": "This field is not used, and can be safely omitted.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "userId": {
+                                            "description": "Patch a dataset for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "{userId}/dataSources/{dataSourceId}/datasets/{datasetId}",
+                                    "request": {
+                                        "$ref": "Dataset"
+                                    },
+                                    "response": {
+                                        "$ref": "Dataset"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/fitness.activity.write",
+                                        "https://www.googleapis.com/auth/fitness.blood_glucose.write",
+                                        "https://www.googleapis.com/auth/fitness.blood_pressure.write",
+                                        "https://www.googleapis.com/auth/fitness.body.write",
+                                        "https://www.googleapis.com/auth/fitness.body_temperature.write",
+                                        "https://www.googleapis.com/auth/fitness.heart_rate.write",
+                                        "https://www.googleapis.com/auth/fitness.location.write",
+                                        "https://www.googleapis.com/auth/fitness.nutrition.write",
+                                        "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
+                                        "https://www.googleapis.com/auth/fitness.reproductive_health.write",
+                                        "https://www.googleapis.com/auth/fitness.sleep.write"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                },
+                "dataset": {
+                    "methods": {
+                        "aggregate": {
+                            "description": "Aggregates data of a certain type or stream into buckets divided by a given type of boundary. Multiple data sets of multiple types and from multiple sources can be aggregated into exactly one bucket type per request.",
+                            "flatPath": "{userId}/dataset:aggregate",
+                            "httpMethod": "POST",
+                            "id": "fitness.users.dataset.aggregate",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "userId": {
+                                    "description": "Aggregate data for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "{userId}/dataset:aggregate",
+                            "request": {
+                                "$ref": "AggregateRequest"
+                            },
+                            "response": {
+                                "$ref": "AggregateResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/fitness.activity.read",
+                                "https://www.googleapis.com/auth/fitness.activity.write",
+                                "https://www.googleapis.com/auth/fitness.blood_glucose.read",
+                                "https://www.googleapis.com/auth/fitness.blood_glucose.write",
+                                "https://www.googleapis.com/auth/fitness.blood_pressure.read",
+                                "https://www.googleapis.com/auth/fitness.blood_pressure.write",
+                                "https://www.googleapis.com/auth/fitness.body.read",
+                                "https://www.googleapis.com/auth/fitness.body.write",
+                                "https://www.googleapis.com/auth/fitness.body_temperature.read",
+                                "https://www.googleapis.com/auth/fitness.body_temperature.write",
+                                "https://www.googleapis.com/auth/fitness.heart_rate.read",
+                                "https://www.googleapis.com/auth/fitness.heart_rate.write",
+                                "https://www.googleapis.com/auth/fitness.location.read",
+                                "https://www.googleapis.com/auth/fitness.location.write",
+                                "https://www.googleapis.com/auth/fitness.nutrition.read",
+                                "https://www.googleapis.com/auth/fitness.nutrition.write",
+                                "https://www.googleapis.com/auth/fitness.oxygen_saturation.read",
+                                "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
+                                "https://www.googleapis.com/auth/fitness.reproductive_health.read",
+                                "https://www.googleapis.com/auth/fitness.reproductive_health.write",
+                                "https://www.googleapis.com/auth/fitness.sleep.read",
+                                "https://www.googleapis.com/auth/fitness.sleep.write"
+                            ]
+                        }
+                    }
+                },
+                "sessions": {
+                    "methods": {
+                        "delete": {
+                            "description": "Deletes a session specified by the given session ID.",
+                            "flatPath": "{userId}/sessions/{sessionId}",
+                            "httpMethod": "DELETE",
+                            "id": "fitness.users.sessions.delete",
+                            "parameterOrder": [
+                                "userId",
+                                "sessionId"
+                            ],
+                            "parameters": {
+                                "currentTimeMillis": {
+                                    "description": "The client's current time in milliseconds since epoch.",
+                                    "format": "int64",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "sessionId": {
+                                    "description": "The ID of the session to be deleted.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "description": "Delete a session for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "{userId}/sessions/{sessionId}",
+                            "scopes": [
+                                "https://www.googleapis.com/auth/fitness.activity.write",
+                                "https://www.googleapis.com/auth/fitness.sleep.write"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists sessions previously created.",
+                            "flatPath": "{userId}/sessions",
+                            "httpMethod": "GET",
+                            "id": "fitness.users.sessions.list",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "activityType": {
+                                    "description": "If non-empty, only sessions with these activity types should be returned.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "repeated": true,
+                                    "type": "integer"
+                                },
+                                "endTime": {
+                                    "description": "An RFC3339 timestamp. Only sessions ending between the start and end times will be included in the response. If this time is omitted but startTime is specified, all sessions from startTime to the end of time will be returned.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "includeDeleted": {
+                                    "description": "If true, and if both startTime and endTime are omitted, session deletions will be returned.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "pageToken": {
+                                    "description": "The continuation token, which is used for incremental syncing. To get the next batch of changes, set this parameter to the value of nextPageToken from the previous response. The page token is ignored if either start or end time is specified. If none of start time, end time, and the page token is specified, sessions modified in the last 30 days are returned.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "startTime": {
+                                    "description": "An RFC3339 timestamp. Only sessions ending between the start and end times will be included in the response. If this time is omitted but endTime is specified, all sessions from the start of time up to endTime will be returned.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "description": "List sessions for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "{userId}/sessions",
+                            "response": {
+                                "$ref": "ListSessionsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/fitness.activity.read",
+                                "https://www.googleapis.com/auth/fitness.activity.write",
+                                "https://www.googleapis.com/auth/fitness.blood_glucose.read",
+                                "https://www.googleapis.com/auth/fitness.blood_glucose.write",
+                                "https://www.googleapis.com/auth/fitness.blood_pressure.read",
+                                "https://www.googleapis.com/auth/fitness.blood_pressure.write",
+                                "https://www.googleapis.com/auth/fitness.body.read",
+                                "https://www.googleapis.com/auth/fitness.body.write",
+                                "https://www.googleapis.com/auth/fitness.body_temperature.read",
+                                "https://www.googleapis.com/auth/fitness.body_temperature.write",
+                                "https://www.googleapis.com/auth/fitness.heart_rate.read",
+                                "https://www.googleapis.com/auth/fitness.heart_rate.write",
+                                "https://www.googleapis.com/auth/fitness.location.read",
+                                "https://www.googleapis.com/auth/fitness.location.write",
+                                "https://www.googleapis.com/auth/fitness.nutrition.read",
+                                "https://www.googleapis.com/auth/fitness.nutrition.write",
+                                "https://www.googleapis.com/auth/fitness.oxygen_saturation.read",
+                                "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
+                                "https://www.googleapis.com/auth/fitness.reproductive_health.read",
+                                "https://www.googleapis.com/auth/fitness.reproductive_health.write",
+                                "https://www.googleapis.com/auth/fitness.sleep.read",
+                                "https://www.googleapis.com/auth/fitness.sleep.write"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates or insert a given session.",
+                            "flatPath": "{userId}/sessions/{sessionId}",
+                            "httpMethod": "PUT",
+                            "id": "fitness.users.sessions.update",
+                            "parameterOrder": [
+                                "userId",
+                                "sessionId"
+                            ],
+                            "parameters": {
+                                "currentTimeMillis": {
+                                    "description": "The client's current time in milliseconds since epoch.",
+                                    "format": "int64",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "sessionId": {
+                                    "description": "The ID of the session to be created.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "description": "Create sessions for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "{userId}/sessions/{sessionId}",
+                            "request": {
+                                "$ref": "Session"
+                            },
+                            "response": {
+                                "$ref": "Session"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/fitness.activity.write",
+                                "https://www.googleapis.com/auth/fitness.sleep.write"
+                            ]
+                        }
+                    }
+                }
+            }
+        }
+    },
+    "revision": "20210115",
+    "rootUrl": "https://fitness.googleapis.com/",
+    "schemas": {
+        "AggregateBucket": {
+            "id": "AggregateBucket",
+            "properties": {
+                "activity": {
+                    "description": "Available for Bucket.Type.ACTIVITY_TYPE, Bucket.Type.ACTIVITY_SEGMENT",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "dataset": {
+                    "description": "There will be one dataset per AggregateBy in the request.",
+                    "items": {
+                        "$ref": "Dataset"
+                    },
+                    "type": "array"
+                },
+                "endTimeMillis": {
+                    "description": "The end time for the aggregated data, in milliseconds since epoch, inclusive.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "session": {
+                    "$ref": "Session",
+                    "description": "Available for Bucket.Type.SESSION"
+                },
+                "startTimeMillis": {
+                    "description": "The start time for the aggregated data, in milliseconds since epoch, inclusive.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "The type of a bucket signifies how the data aggregation is performed in the bucket.",
+                    "enum": [
+                        "unknown",
+                        "time",
+                        "session",
+                        "activityType",
+                        "activitySegment"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "Denotes that bucketing by time is requested. When this is specified, the timeBucketDurationMillis field is used to determine how many buckets will be returned.",
+                        "Denotes that bucketing by session is requested. When this is specified, only data that occurs within sessions that begin and end within the dataset time frame, is included in the results.",
+                        "Denotes that bucketing by activity type is requested. When this is specified, there will be one bucket for each unique activity type that a user participated in, during the dataset time frame of interest.",
+                        "Denotes that bucketing by individual activity segment is requested. This will aggregate data by the time boundaries specified by each activity segment occurring within the dataset time frame of interest."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AggregateBy": {
+            "description": "The specification of which data to aggregate.",
+            "id": "AggregateBy",
+            "properties": {
+                "dataSourceId": {
+                    "description": "A data source ID to aggregate. Only data from the specified data source ID will be included in the aggregation. If specified, this data source must exist; the OAuth scopes in the supplied credentials must grant read access to this data type. The dataset in the response will have the same data source ID. Note: Data can be aggregated by either the dataTypeName or the dataSourceId, not both.",
+                    "type": "string"
                 },
                 "dataTypeName": {
-                  "repeated": true,
-                  "description": "The names of data types to include in the list. If not specified, all data sources will be returned.",
-                  "type": "string",
-                  "location": "query"
+                    "description": "The data type to aggregate. All data sources providing this data type will contribute data to the aggregation. The response will contain a single dataset for this data type name. The dataset will have a data source ID of derived::com.google.android.gms:aggregated. If the user has no data for this data type, an empty data set will be returned. Note: Data can be aggregated by either the dataTypeName or the dataSourceId, not both.",
+                    "type": "string"
                 }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/fitness.activity.read",
-                "https://www.googleapis.com/auth/fitness.activity.write",
-                "https://www.googleapis.com/auth/fitness.blood_glucose.read",
-                "https://www.googleapis.com/auth/fitness.blood_glucose.write",
-                "https://www.googleapis.com/auth/fitness.blood_pressure.read",
-                "https://www.googleapis.com/auth/fitness.blood_pressure.write",
-                "https://www.googleapis.com/auth/fitness.body.read",
-                "https://www.googleapis.com/auth/fitness.body.write",
-                "https://www.googleapis.com/auth/fitness.body_temperature.read",
-                "https://www.googleapis.com/auth/fitness.body_temperature.write",
-                "https://www.googleapis.com/auth/fitness.heart_rate.read",
-                "https://www.googleapis.com/auth/fitness.heart_rate.write",
-                "https://www.googleapis.com/auth/fitness.location.read",
-                "https://www.googleapis.com/auth/fitness.location.write",
-                "https://www.googleapis.com/auth/fitness.nutrition.read",
-                "https://www.googleapis.com/auth/fitness.nutrition.write",
-                "https://www.googleapis.com/auth/fitness.oxygen_saturation.read",
-                "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
-                "https://www.googleapis.com/auth/fitness.reproductive_health.read",
-                "https://www.googleapis.com/auth/fitness.reproductive_health.write",
-                "https://www.googleapis.com/auth/fitness.sleep.read",
-                "https://www.googleapis.com/auth/fitness.sleep.write"
-              ],
-              "response": {
-                "$ref": "ListDataSourcesResponse"
-              }
             },
-            "get": {
-              "parameters": {
-                "dataSourceId": {
-                  "description": "The data stream ID of the data source to retrieve.",
-                  "location": "path",
-                  "required": true,
-                  "type": "string"
-                },
-                "userId": {
-                  "description": "Retrieve a data source for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "flatPath": "{userId}/dataSources/{dataSourceId}",
-              "response": {
-                "$ref": "DataSource"
-              },
-              "description": "Returns the specified data source.",
-              "id": "fitness.users.dataSources.get",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "userId",
-                "dataSourceId"
-              ],
-              "path": "{userId}/dataSources/{dataSourceId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/fitness.activity.read",
-                "https://www.googleapis.com/auth/fitness.activity.write",
-                "https://www.googleapis.com/auth/fitness.blood_glucose.read",
-                "https://www.googleapis.com/auth/fitness.blood_glucose.write",
-                "https://www.googleapis.com/auth/fitness.blood_pressure.read",
-                "https://www.googleapis.com/auth/fitness.blood_pressure.write",
-                "https://www.googleapis.com/auth/fitness.body.read",
-                "https://www.googleapis.com/auth/fitness.body.write",
-                "https://www.googleapis.com/auth/fitness.body_temperature.read",
-                "https://www.googleapis.com/auth/fitness.body_temperature.write",
-                "https://www.googleapis.com/auth/fitness.heart_rate.read",
-                "https://www.googleapis.com/auth/fitness.heart_rate.write",
-                "https://www.googleapis.com/auth/fitness.location.read",
-                "https://www.googleapis.com/auth/fitness.location.write",
-                "https://www.googleapis.com/auth/fitness.nutrition.read",
-                "https://www.googleapis.com/auth/fitness.nutrition.write",
-                "https://www.googleapis.com/auth/fitness.oxygen_saturation.read",
-                "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
-                "https://www.googleapis.com/auth/fitness.reproductive_health.read",
-                "https://www.googleapis.com/auth/fitness.reproductive_health.write",
-                "https://www.googleapis.com/auth/fitness.sleep.read",
-                "https://www.googleapis.com/auth/fitness.sleep.write"
-              ]
-            },
-            "update": {
-              "path": "{userId}/dataSources/{dataSourceId}",
-              "description": "Updates the specified data source. The dataStreamId, dataType, type, dataStreamName, and device properties with the exception of version, cannot be modified. Data sources are identified by their dataStreamId.",
-              "response": {
-                "$ref": "DataSource"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/fitness.activity.write",
-                "https://www.googleapis.com/auth/fitness.blood_glucose.write",
-                "https://www.googleapis.com/auth/fitness.blood_pressure.write",
-                "https://www.googleapis.com/auth/fitness.body.write",
-                "https://www.googleapis.com/auth/fitness.body_temperature.write",
-                "https://www.googleapis.com/auth/fitness.heart_rate.write",
-                "https://www.googleapis.com/auth/fitness.location.write",
-                "https://www.googleapis.com/auth/fitness.nutrition.write",
-                "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
-                "https://www.googleapis.com/auth/fitness.reproductive_health.write",
-                "https://www.googleapis.com/auth/fitness.sleep.write"
-              ],
-              "parameterOrder": [
-                "userId",
-                "dataSourceId"
-              ],
-              "flatPath": "{userId}/dataSources/{dataSourceId}",
-              "id": "fitness.users.dataSources.update",
-              "httpMethod": "PUT",
-              "request": {
-                "$ref": "DataSource"
-              },
-              "parameters": {
-                "dataSourceId": {
-                  "type": "string",
-                  "description": "The data stream ID of the data source to update.",
-                  "required": true,
-                  "location": "path"
-                },
-                "userId": {
-                  "required": true,
-                  "type": "string",
-                  "description": "Update the data source for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
-                  "location": "path"
-                }
-              }
-            },
-            "create": {
-              "parameterOrder": [
-                "userId"
-              ],
-              "description": "Creates a new data source that is unique across all data sources belonging to this user. A data source is a unique source of sensor data. Data sources can expose raw data coming from hardware sensors on local or companion devices. They can also expose derived data, created by transforming or merging other data sources. Multiple data sources can exist for the same data type. Every data point in every dataset inserted into or read from the Fitness API has an associated data source. Each data source produces a unique stream of dataset updates, with a unique data source identifier. Not all changes to data source affect the data stream ID, so that data collected by updated versions of the same application/device can still be considered to belong to the same data source. Data sources are identified using a string generated by the server, based on the contents of the source being created. The dataStreamId field should not be set when invoking this method. It will be automatically generated by the server with the correct format. If a dataStreamId is set, it must match the format that the server would generate. This format is a combination of some fields from the data source, and has a specific order. If it doesn't match, the request will fail with an error. Specifying a DataType which is not a known type (beginning with \"com.google.\") will create a DataSource with a *custom data type*. Custom data types are only readable by the application that created them. Custom data types are *deprecated*; use standard data types instead. In addition to the data source fields included in the data source ID, the developer project number that is authenticated when creating the data source is included. This developer project number is obfuscated when read by any other developer reading public data types.",
-              "request": {
-                "$ref": "DataSource"
-              },
-              "response": {
-                "$ref": "DataSource"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/fitness.activity.write",
-                "https://www.googleapis.com/auth/fitness.blood_glucose.write",
-                "https://www.googleapis.com/auth/fitness.blood_pressure.write",
-                "https://www.googleapis.com/auth/fitness.body.write",
-                "https://www.googleapis.com/auth/fitness.body_temperature.write",
-                "https://www.googleapis.com/auth/fitness.heart_rate.write",
-                "https://www.googleapis.com/auth/fitness.location.write",
-                "https://www.googleapis.com/auth/fitness.nutrition.write",
-                "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
-                "https://www.googleapis.com/auth/fitness.reproductive_health.write",
-                "https://www.googleapis.com/auth/fitness.sleep.write"
-              ],
-              "parameters": {
-                "userId": {
-                  "location": "path",
-                  "required": true,
-                  "description": "Create the data source for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
-                  "type": "string"
-                }
-              },
-              "path": "{userId}/dataSources",
-              "flatPath": "{userId}/dataSources",
-              "id": "fitness.users.dataSources.create",
-              "httpMethod": "POST"
-            },
-            "delete": {
-              "parameterOrder": [
-                "userId",
-                "dataSourceId"
-              ],
-              "id": "fitness.users.dataSources.delete",
-              "httpMethod": "DELETE",
-              "path": "{userId}/dataSources/{dataSourceId}",
-              "response": {
-                "$ref": "DataSource"
-              },
-              "parameters": {
-                "dataSourceId": {
-                  "description": "The data stream ID of the data source to delete.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "userId": {
-                  "type": "string",
-                  "description": "Retrieve a data source for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
-                  "location": "path",
-                  "required": true
-                }
-              },
-              "flatPath": "{userId}/dataSources/{dataSourceId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/fitness.activity.write",
-                "https://www.googleapis.com/auth/fitness.blood_glucose.write",
-                "https://www.googleapis.com/auth/fitness.blood_pressure.write",
-                "https://www.googleapis.com/auth/fitness.body.write",
-                "https://www.googleapis.com/auth/fitness.body_temperature.write",
-                "https://www.googleapis.com/auth/fitness.heart_rate.write",
-                "https://www.googleapis.com/auth/fitness.location.write",
-                "https://www.googleapis.com/auth/fitness.nutrition.write",
-                "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
-                "https://www.googleapis.com/auth/fitness.reproductive_health.write",
-                "https://www.googleapis.com/auth/fitness.sleep.write"
-              ],
-              "description": "Deletes the specified data source. The request will fail if the data source contains any data points."
-            }
-          },
-          "resources": {
-            "dataPointChanges": {
-              "methods": {
-                "list": {
-                  "flatPath": "{userId}/dataSources/{dataSourceId}/dataPointChanges",
-                  "description": "Queries for user's data point changes for a particular data source.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/fitness.activity.read",
-                    "https://www.googleapis.com/auth/fitness.activity.write",
-                    "https://www.googleapis.com/auth/fitness.blood_glucose.read",
-                    "https://www.googleapis.com/auth/fitness.blood_glucose.write",
-                    "https://www.googleapis.com/auth/fitness.blood_pressure.read",
-                    "https://www.googleapis.com/auth/fitness.blood_pressure.write",
-                    "https://www.googleapis.com/auth/fitness.body.read",
-                    "https://www.googleapis.com/auth/fitness.body.write",
-                    "https://www.googleapis.com/auth/fitness.body_temperature.read",
-                    "https://www.googleapis.com/auth/fitness.body_temperature.write",
-                    "https://www.googleapis.com/auth/fitness.heart_rate.read",
-                    "https://www.googleapis.com/auth/fitness.heart_rate.write",
-                    "https://www.googleapis.com/auth/fitness.location.read",
-                    "https://www.googleapis.com/auth/fitness.location.write",
-                    "https://www.googleapis.com/auth/fitness.nutrition.read",
-                    "https://www.googleapis.com/auth/fitness.nutrition.write",
-                    "https://www.googleapis.com/auth/fitness.oxygen_saturation.read",
-                    "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
-                    "https://www.googleapis.com/auth/fitness.reproductive_health.read",
-                    "https://www.googleapis.com/auth/fitness.reproductive_health.write",
-                    "https://www.googleapis.com/auth/fitness.sleep.read",
-                    "https://www.googleapis.com/auth/fitness.sleep.write"
-                  ],
-                  "httpMethod": "GET",
-                  "id": "fitness.users.dataSources.dataPointChanges.list",
-                  "path": "{userId}/dataSources/{dataSourceId}/dataPointChanges",
-                  "parameters": {
-                    "limit": {
-                      "type": "integer",
-                      "format": "int32",
-                      "description": "If specified, no more than this many data point changes will be included in the response.",
-                      "location": "query"
-                    },
-                    "dataSourceId": {
-                      "type": "string",
-                      "location": "path",
-                      "description": "The data stream ID of the data source that created the dataset.",
-                      "required": true
-                    },
-                    "pageToken": {
-                      "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.",
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "userId": {
-                      "description": "List data points for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
-                      "type": "string",
-                      "location": "path",
-                      "required": true
-                    }
-                  },
-                  "parameterOrder": [
-                    "userId",
-                    "dataSourceId"
-                  ],
-                  "response": {
-                    "$ref": "ListDataPointChangesResponse"
-                  }
-                }
-              }
-            },
-            "datasets": {
-              "methods": {
-                "get": {
-                  "description": "Returns a dataset containing all data points whose start and end times overlap with the specified range of the dataset minimum start time and maximum end time. Specifically, any data point whose start time is less than or equal to the dataset end time and whose end time is greater than or equal to the dataset start time.",
-                  "path": "{userId}/dataSources/{dataSourceId}/datasets/{datasetId}",
-                  "parameters": {
-                    "pageToken": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "The continuation token, which is used to page through large datasets. To get the next page of a dataset, set this parameter to the value of nextPageToken from the previous response. Each subsequent call will yield a partial dataset with data point end timestamps that are strictly smaller than those in the previous partial response."
-                    },
-                    "userId": {
-                      "location": "path",
-                      "description": "Retrieve a dataset for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "dataSourceId": {
-                      "required": true,
-                      "location": "path",
-                      "description": "The data stream ID of the data source that created the dataset.",
-                      "type": "string"
-                    },
-                    "limit": {
-                      "description": "If specified, no more than this many data points will be included in the dataset. If there are more data points in the dataset, nextPageToken will be set in the dataset response. The limit is applied from the end of the time range. That is, if pageToken is absent, the limit most recent data points will be returned.",
-                      "location": "query",
-                      "format": "int32",
-                      "type": "integer"
-                    },
-                    "datasetId": {
-                      "location": "path",
-                      "type": "string",
-                      "description": "Dataset identifier that is a composite of the minimum data point start time and maximum data point end time represented as nanoseconds from the epoch. The ID is formatted like: \"startTime-endTime\" where startTime and endTime are 64 bit integers.",
-                      "required": true
-                    }
-                  },
-                  "response": {
-                    "$ref": "Dataset"
-                  },
-                  "id": "fitness.users.dataSources.datasets.get",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/fitness.activity.read",
-                    "https://www.googleapis.com/auth/fitness.activity.write",
-                    "https://www.googleapis.com/auth/fitness.blood_glucose.read",
-                    "https://www.googleapis.com/auth/fitness.blood_glucose.write",
-                    "https://www.googleapis.com/auth/fitness.blood_pressure.read",
-                    "https://www.googleapis.com/auth/fitness.blood_pressure.write",
-                    "https://www.googleapis.com/auth/fitness.body.read",
-                    "https://www.googleapis.com/auth/fitness.body.write",
-                    "https://www.googleapis.com/auth/fitness.body_temperature.read",
-                    "https://www.googleapis.com/auth/fitness.body_temperature.write",
-                    "https://www.googleapis.com/auth/fitness.heart_rate.read",
-                    "https://www.googleapis.com/auth/fitness.heart_rate.write",
-                    "https://www.googleapis.com/auth/fitness.location.read",
-                    "https://www.googleapis.com/auth/fitness.location.write",
-                    "https://www.googleapis.com/auth/fitness.nutrition.read",
-                    "https://www.googleapis.com/auth/fitness.nutrition.write",
-                    "https://www.googleapis.com/auth/fitness.oxygen_saturation.read",
-                    "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
-                    "https://www.googleapis.com/auth/fitness.reproductive_health.read",
-                    "https://www.googleapis.com/auth/fitness.reproductive_health.write",
-                    "https://www.googleapis.com/auth/fitness.sleep.read",
-                    "https://www.googleapis.com/auth/fitness.sleep.write"
-                  ],
-                  "httpMethod": "GET",
-                  "parameterOrder": [
-                    "userId",
-                    "dataSourceId",
-                    "datasetId"
-                  ],
-                  "flatPath": "{userId}/dataSources/{dataSourceId}/datasets/{datasetId}"
-                },
-                "patch": {
-                  "path": "{userId}/dataSources/{dataSourceId}/datasets/{datasetId}",
-                  "request": {
-                    "$ref": "Dataset"
-                  },
-                  "parameters": {
-                    "userId": {
-                      "location": "path",
-                      "description": "Patch a dataset for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "currentTimeMillis": {
-                      "format": "int64",
-                      "type": "string",
-                      "location": "query",
-                      "description": "The client's current time in milliseconds since epoch. Note that the minStartTimeNs and maxEndTimeNs properties in the request body are in nanoseconds instead of milliseconds."
-                    },
-                    "datasetId": {
-                      "type": "string",
-                      "location": "path",
-                      "description": "Dataset identifier that is a composite of the minimum data point start time and maximum data point end time represented as nanoseconds from the epoch. The ID is formatted like: \"startTime-endTime\" where startTime and endTime are 64 bit integers.",
-                      "required": true
-                    },
-                    "dataSourceId": {
-                      "description": "The data stream ID of the data source that created the dataset.",
-                      "location": "path",
-                      "type": "string",
-                      "required": true
-                    }
-                  },
-                  "description": "Adds data points to a dataset. The dataset need not be previously created. All points within the given dataset will be returned with subsquent calls to retrieve this dataset. Data points can belong to more than one dataset. This method does not use patch semantics.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/fitness.activity.write",
-                    "https://www.googleapis.com/auth/fitness.blood_glucose.write",
-                    "https://www.googleapis.com/auth/fitness.blood_pressure.write",
-                    "https://www.googleapis.com/auth/fitness.body.write",
-                    "https://www.googleapis.com/auth/fitness.body_temperature.write",
-                    "https://www.googleapis.com/auth/fitness.heart_rate.write",
-                    "https://www.googleapis.com/auth/fitness.location.write",
-                    "https://www.googleapis.com/auth/fitness.nutrition.write",
-                    "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
-                    "https://www.googleapis.com/auth/fitness.reproductive_health.write",
-                    "https://www.googleapis.com/auth/fitness.sleep.write"
-                  ],
-                  "id": "fitness.users.dataSources.datasets.patch",
-                  "parameterOrder": [
-                    "userId",
-                    "dataSourceId",
-                    "datasetId"
-                  ],
-                  "flatPath": "{userId}/dataSources/{dataSourceId}/datasets/{datasetId}",
-                  "httpMethod": "PATCH",
-                  "response": {
-                    "$ref": "Dataset"
-                  }
-                },
-                "delete": {
-                  "httpMethod": "DELETE",
-                  "parameters": {
-                    "currentTimeMillis": {
-                      "format": "int64",
-                      "location": "query",
-                      "description": "The client's current time in milliseconds since epoch.",
-                      "type": "string"
-                    },
-                    "datasetId": {
-                      "location": "path",
-                      "description": "Dataset identifier that is a composite of the minimum data point start time and maximum data point end time represented as nanoseconds from the epoch. The ID is formatted like: \"startTime-endTime\" where startTime and endTime are 64 bit integers.",
-                      "type": "string",
-                      "required": true
-                    },
-                    "modifiedTimeMillis": {
-                      "location": "query",
-                      "type": "string",
-                      "format": "int64",
-                      "description": "When the operation was performed on the client."
-                    },
-                    "userId": {
-                      "type": "string",
-                      "description": "Delete a dataset for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
-                      "required": true,
-                      "location": "path"
-                    },
-                    "dataSourceId": {
-                      "required": true,
-                      "type": "string",
-                      "description": "The data stream ID of the data source that created the dataset.",
-                      "location": "path"
-                    }
-                  },
-                  "parameterOrder": [
-                    "userId",
-                    "dataSourceId",
-                    "datasetId"
-                  ],
-                  "description": "Performs an inclusive delete of all data points whose start and end times have any overlap with the time range specified by the dataset ID. For most data types, the entire data point will be deleted. For data types where the time span represents a consistent value (such as com.google.activity.segment), and a data point straddles either end point of the dataset, only the overlapping portion of the data point will be deleted.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/fitness.activity.write",
-                    "https://www.googleapis.com/auth/fitness.blood_glucose.write",
-                    "https://www.googleapis.com/auth/fitness.blood_pressure.write",
-                    "https://www.googleapis.com/auth/fitness.body.write",
-                    "https://www.googleapis.com/auth/fitness.body_temperature.write",
-                    "https://www.googleapis.com/auth/fitness.heart_rate.write",
-                    "https://www.googleapis.com/auth/fitness.location.write",
-                    "https://www.googleapis.com/auth/fitness.nutrition.write",
-                    "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
-                    "https://www.googleapis.com/auth/fitness.reproductive_health.write",
-                    "https://www.googleapis.com/auth/fitness.sleep.write"
-                  ],
-                  "path": "{userId}/dataSources/{dataSourceId}/datasets/{datasetId}",
-                  "id": "fitness.users.dataSources.datasets.delete",
-                  "flatPath": "{userId}/dataSources/{dataSourceId}/datasets/{datasetId}"
-                }
-              }
-            }
-          }
+            "type": "object"
         },
-        "sessions": {
-          "methods": {
-            "update": {
-              "parameterOrder": [
-                "userId",
-                "sessionId"
-              ],
-              "parameters": {
-                "userId": {
-                  "type": "string",
-                  "required": true,
-                  "location": "path",
-                  "description": "Create sessions for the person identified. Use me to indicate the authenticated user. Only me is supported at this time."
+        "AggregateRequest": {
+            "description": "Next id: 10",
+            "id": "AggregateRequest",
+            "properties": {
+                "aggregateBy": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataset.aggregate"
+                        ]
+                    },
+                    "description": "The specification of data to be aggregated. At least one aggregateBy spec must be provided. All data that is specified will be aggregated using the same bucketing criteria. There will be one dataset in the response for every aggregateBy spec.",
+                    "items": {
+                        "$ref": "AggregateBy"
+                    },
+                    "type": "array"
                 },
-                "currentTimeMillis": {
-                  "type": "string",
-                  "description": "The client's current time in milliseconds since epoch.",
-                  "location": "query",
-                  "format": "int64"
+                "bucketByActivitySegment": {
+                    "$ref": "BucketByActivity",
+                    "description": "Specifies that data be aggregated each activity segment recorded for a user. Similar to bucketByActivitySegment, but bucketing is done for each activity segment rather than all segments of the same type. Mutually exclusive of other bucketing specifications."
                 },
-                "sessionId": {
-                  "required": true,
-                  "type": "string",
-                  "description": "The ID of the session to be created.",
-                  "location": "path"
+                "bucketByActivityType": {
+                    "$ref": "BucketByActivity",
+                    "description": "Specifies that data be aggregated by the type of activity being performed when the data was recorded. All data that was recorded during a certain activity type (.for the given time range) will be aggregated into the same bucket. Data that was recorded while the user was not active will not be included in the response. Mutually exclusive of other bucketing specifications."
+                },
+                "bucketBySession": {
+                    "$ref": "BucketBySession",
+                    "description": "Specifies that data be aggregated by user sessions. Data that does not fall within the time range of a session will not be included in the response. Mutually exclusive of other bucketing specifications."
+                },
+                "bucketByTime": {
+                    "$ref": "BucketByTime",
+                    "description": "Specifies that data be aggregated by a single time interval. Mutually exclusive of other bucketing specifications."
+                },
+                "endTimeMillis": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataset.aggregate"
+                        ]
+                    },
+                    "description": "The end of a window of time. Data that intersects with this time window will be aggregated. The time is in milliseconds since epoch, inclusive.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "filteredDataQualityStandard": {
+                    "description": "DO NOT POPULATE THIS FIELD. It is ignored.",
+                    "items": {
+                        "enum": [
+                            "dataQualityUnknown",
+                            "dataQualityBloodPressureEsh2002",
+                            "dataQualityBloodPressureEsh2010",
+                            "dataQualityBloodPressureAami",
+                            "dataQualityBloodPressureBhsAA",
+                            "dataQualityBloodPressureBhsAB",
+                            "dataQualityBloodPressureBhsBA",
+                            "dataQualityBloodPressureBhsBB",
+                            "dataQualityBloodGlucoseIso151972003",
+                            "dataQualityBloodGlucoseIso151972013"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "startTimeMillis": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataset.aggregate"
+                        ]
+                    },
+                    "description": "The start of a window of time. Data that intersects with this time window will be aggregated. The time is in milliseconds since epoch, inclusive.",
+                    "format": "int64",
+                    "type": "string"
                 }
-              },
-              "request": {
-                "$ref": "Session"
-              },
-              "response": {
-                "$ref": "Session"
-              },
-              "id": "fitness.users.sessions.update",
-              "httpMethod": "PUT",
-              "path": "{userId}/sessions/{sessionId}",
-              "flatPath": "{userId}/sessions/{sessionId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/fitness.activity.write",
-                "https://www.googleapis.com/auth/fitness.sleep.write"
-              ],
-              "description": "Updates or insert a given session."
             },
-            "list": {
-              "parameters": {
-                "endTime": {
-                  "location": "query",
-                  "description": "An RFC3339 timestamp. Only sessions ending between the start and end times will be included in the response. If this time is omitted but startTime is specified, all sessions from startTime to the end of time will be returned.",
-                  "type": "string"
+            "type": "object"
+        },
+        "AggregateResponse": {
+            "id": "AggregateResponse",
+            "properties": {
+                "bucket": {
+                    "description": "A list of buckets containing the aggregated data.",
+                    "items": {
+                        "$ref": "AggregateBucket"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Application": {
+            "id": "Application",
+            "properties": {
+                "detailsUrl": {
+                    "description": "An optional URI that can be used to link back to the application.",
+                    "type": "string"
                 },
-                "userId": {
-                  "location": "path",
-                  "required": true,
-                  "description": "List sessions for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
-                  "type": "string"
+                "name": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.create",
+                            "fitness.users.dataSources.update",
+                            "fitness.users.sessions.update"
+                        ]
+                    },
+                    "description": "The name of this application. This is required for REST clients, but we do not enforce uniqueness of this name. It is provided as a matter of convenience for other developers who would like to identify which REST created an Application or Data Source.",
+                    "type": "string"
                 },
-                "pageToken": {
-                  "type": "string",
-                  "description": "The continuation token, which is used for incremental syncing. To get the next batch of changes, set this parameter to the value of nextPageToken from the previous response. The page token is ignored if either start or end time is specified. If none of start time, end time, and the page token is specified, sessions modified in the last 30 days are returned.",
-                  "location": "query"
+                "packageName": {
+                    "description": "Package name for this application. This is used as a unique identifier when created by Android applications, but cannot be specified by REST clients. REST clients will have their developer project number reflected into the Data Source data stream IDs, instead of the packageName.",
+                    "type": "string"
                 },
-                "startTime": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "An RFC3339 timestamp. Only sessions ending between the start and end times will be included in the response. If this time is omitted but endTime is specified, all sessions from the start of time up to endTime will be returned."
+                "version": {
+                    "description": "Version of the application. You should update this field whenever the application changes in a way that affects the computation of the data.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "BucketByActivity": {
+            "id": "BucketByActivity",
+            "properties": {
+                "activityDataSourceId": {
+                    "description": "The default activity stream will be used if a specific activityDataSourceId is not specified.",
+                    "type": "string"
+                },
+                "minDurationMillis": {
+                    "description": "Specifies that only activity segments of duration longer than minDurationMillis are considered and used as a container for aggregated data.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "BucketBySession": {
+            "id": "BucketBySession",
+            "properties": {
+                "minDurationMillis": {
+                    "description": "Specifies that only sessions of duration longer than minDurationMillis are considered and used as a container for aggregated data.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "BucketByTime": {
+            "id": "BucketByTime",
+            "properties": {
+                "durationMillis": {
+                    "description": "Specifies that result buckets aggregate data by exactly durationMillis time frames. Time frames that contain no data will be included in the response with an empty dataset.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "period": {
+                    "$ref": "BucketByTimePeriod"
+                }
+            },
+            "type": "object"
+        },
+        "BucketByTimePeriod": {
+            "id": "BucketByTimePeriod",
+            "properties": {
+                "timeZoneId": {
+                    "description": "org.joda.timezone.DateTimeZone",
+                    "type": "string"
+                },
+                "type": {
+                    "enum": [
+                        "day",
+                        "week",
+                        "month"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "value": {
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "DataPoint": {
+            "description": "Represents a single data point, generated by a particular data source. A data point holds a value for each field, an end timestamp and an optional start time. The exact semantics of each of these attributes are specified in the documentation for the particular data type. A data point can represent an instantaneous measurement, reading or input observation, as well as averages or aggregates over a time interval. Check the data type documentation to determine which is the case for a particular data type. Data points always contain one value for each field of the data type.",
+            "id": "DataPoint",
+            "properties": {
+                "computationTimeMillis": {
+                    "description": "DO NOT USE THIS FIELD. It is ignored, and not stored.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "dataTypeName": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.datasets.patch"
+                        ]
+                    },
+                    "description": "The data type defining the format of the values in this data point.",
+                    "type": "string"
+                },
+                "endTimeNanos": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.datasets.patch"
+                        ]
+                    },
+                    "description": "The end time of the interval represented by this data point, in nanoseconds since epoch.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "modifiedTimeMillis": {
+                    "description": "Indicates the last time this data point was modified. Useful only in contexts where we are listing the data changes, rather than representing the current state of the data.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "originDataSourceId": {
+                    "description": "If the data point is contained in a dataset for a derived data source, this field will be populated with the data source stream ID that created the data point originally. WARNING: do not rely on this field for anything other than debugging. The value of this field, if it is set at all, is an implementation detail and is not guaranteed to remain consistent.",
+                    "type": "string"
+                },
+                "rawTimestampNanos": {
+                    "description": "The raw timestamp from the original SensorEvent.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "startTimeNanos": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.datasets.patch"
+                        ]
+                    },
+                    "description": "The start time of the interval represented by this data point, in nanoseconds since epoch.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "value": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.datasets.patch"
+                        ]
+                    },
+                    "description": "Values of each data type field for the data point. It is expected that each value corresponding to a data type field will occur in the same order that the field is listed with in the data type specified in a data source. Only one of integer and floating point fields will be populated, depending on the format enum value within data source's type field.",
+                    "items": {
+                        "$ref": "Value"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "DataSource": {
+            "description": "Definition of a unique source of sensor data. Data sources can expose raw data coming from hardware sensors on local or companion devices. They can also expose derived data, created by transforming or merging other data sources. Multiple data sources can exist for the same data type. Every data point inserted into or read from this service has an associated data source. The data source contains enough information to uniquely identify its data, including the hardware device and the application that collected and/or transformed the data. It also holds useful metadata, such as the hardware and application versions, and the device type. Each data source produces a unique stream of data, with a unique identifier. Not all changes to data source affect the stream identifier, so that data collected by updated versions of the same application/device can still be considered to belong to the same data stream.",
+            "id": "DataSource",
+            "properties": {
+                "application": {
+                    "$ref": "Application",
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.create",
+                            "fitness.users.dataSources.update"
+                        ]
+                    },
+                    "description": "Information about an application which feeds sensor data into the platform."
+                },
+                "dataQualityStandard": {
+                    "description": "DO NOT POPULATE THIS FIELD. It is never populated in responses from the platform, and is ignored in queries. It will be removed in a future version entirely.",
+                    "items": {
+                        "enum": [
+                            "dataQualityUnknown",
+                            "dataQualityBloodPressureEsh2002",
+                            "dataQualityBloodPressureEsh2010",
+                            "dataQualityBloodPressureAami",
+                            "dataQualityBloodPressureBhsAA",
+                            "dataQualityBloodPressureBhsAB",
+                            "dataQualityBloodPressureBhsBA",
+                            "dataQualityBloodPressureBhsBB",
+                            "dataQualityBloodGlucoseIso151972003",
+                            "dataQualityBloodGlucoseIso151972013"
+                        ],
+                        "enumDescriptions": [
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            "",
+                            ""
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "dataStreamId": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.update"
+                        ]
+                    },
+                    "description": "A unique identifier for the data stream produced by this data source. The identifier includes: - The physical device's manufacturer, model, and serial number (UID). - The application's package name or name. Package name is used when the data source was created by an Android application. The developer project number is used when the data source was created by a REST client. - The data source's type. - The data source's stream name. Note that not all attributes of the data source are used as part of the stream identifier. In particular, the version of the hardware/the application isn't used. This allows us to preserve the same stream through version updates. This also means that two DataSource objects may represent the same data stream even if they're not equal. The exact format of the data stream ID created by an Android application is: type:dataType.name:application.packageName:device.manufacturer:device.model:device.uid:dataStreamName The exact format of the data stream ID created by a REST client is: type:dataType.name:developer project number:device.manufacturer:device.model:device.uid:dataStreamName When any of the optional fields that make up the data stream ID are absent, they will be omitted from the data stream ID. The minimum viable data stream ID would be: type:dataType.name:developer project number Finally, the developer project number and device UID are obfuscated when read by any REST or Android client that did not create the data source. Only the data source creator will see the developer project number in clear and normal form. This means a client will see a different set of data_stream_ids than another client with different credentials.",
+                    "type": "string"
+                },
+                "dataStreamName": {
+                    "description": "The stream name uniquely identifies this particular data source among other data sources of the same type from the same underlying producer. Setting the stream name is optional, but should be done whenever an application exposes two streams for the same data type, or when a device has two equivalent sensors.",
+                    "type": "string"
+                },
+                "dataType": {
+                    "$ref": "DataType",
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.create",
+                            "fitness.users.dataSources.update"
+                        ]
+                    },
+                    "description": "The data type defines the schema for a stream of data being collected by, inserted into, or queried from the Fitness API."
+                },
+                "device": {
+                    "$ref": "Device",
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.create",
+                            "fitness.users.dataSources.update"
+                        ]
+                    },
+                    "description": "Representation of an integrated device (such as a phone or a wearable) that can hold sensors."
+                },
+                "name": {
+                    "description": "An end-user visible name for this data source.",
+                    "type": "string"
+                },
+                "type": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.create",
+                            "fitness.users.dataSources.update"
+                        ]
+                    },
+                    "description": "A constant describing the type of this data source. Indicates whether this data source produces raw or derived data.",
+                    "enum": [
+                        "raw",
+                        "derived"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DataType": {
+            "id": "DataType",
+            "properties": {
+                "field": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.create",
+                            "fitness.users.dataSources.update"
+                        ]
+                    },
+                    "description": "A field represents one dimension of a data type.",
+                    "items": {
+                        "$ref": "DataTypeField"
+                    },
+                    "type": "array"
+                },
+                "name": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.create",
+                            "fitness.users.dataSources.update"
+                        ]
+                    },
+                    "description": "Each data type has a unique, namespaced, name. All data types in the com.google namespace are shared as part of the platform.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DataTypeField": {
+            "description": "In case of multi-dimensional data (such as an accelerometer with x, y, and z axes) each field represents one dimension. Each data type field has a unique name which identifies it. The field also defines the format of the data (int, float, etc.). This message is only instantiated in code and not used for wire comms or stored in any way.",
+            "id": "DataTypeField",
+            "properties": {
+                "format": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.create",
+                            "fitness.users.dataSources.update"
+                        ]
+                    },
+                    "description": "The different supported formats for each field in a data type.",
+                    "enum": [
+                        "integer",
+                        "floatPoint",
+                        "string",
+                        "map",
+                        "integerList",
+                        "floatList",
+                        "blob"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "name": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.create",
+                            "fitness.users.dataSources.update"
+                        ]
+                    },
+                    "description": "Defines the name and format of data. Unlike data type names, field names are not namespaced, and only need to be unique within the data type.",
+                    "type": "string"
+                },
+                "optional": {
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "Dataset": {
+            "description": "A dataset represents a projection container for data points. They do not carry any info of their own. Datasets represent a set of data points from a particular data source. A data point can be found in more than one dataset.",
+            "id": "Dataset",
+            "properties": {
+                "dataSourceId": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.datasets.patch"
+                        ]
+                    },
+                    "description": "The data stream ID of the data source that created the points in this dataset.",
+                    "type": "string"
+                },
+                "maxEndTimeNs": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.datasets.patch"
+                        ]
+                    },
+                    "description": "The largest end time of all data points in this possibly partial representation of the dataset. Time is in nanoseconds from epoch. This should also match the second part of the dataset identifier.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "minStartTimeNs": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.datasets.patch"
+                        ]
+                    },
+                    "description": "The smallest start time of all data points in this possibly partial representation of the dataset. Time is in nanoseconds from epoch. This should also match the first part of the dataset identifier.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "This token will be set when a dataset is received in response to a GET request and the dataset is too large to be included in a single response. Provide this value in a subsequent GET request to return the next page of data points within this dataset.",
+                    "type": "string"
+                },
+                "point": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.datasets.patch"
+                        ]
+                    },
+                    "description": "A partial list of data points contained in the dataset, ordered by endTimeNanos. This list is considered complete when retrieving a small dataset and partial when patching a dataset or retrieving a dataset that is too large to include in a single response.",
+                    "items": {
+                        "$ref": "DataPoint"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Device": {
+            "description": "Representation of an integrated device (such as a phone or a wearable) that can hold sensors. Each sensor is exposed as a data source. The main purpose of the device information contained in this class is to identify the hardware of a particular data source. This can be useful in different ways, including: - Distinguishing two similar sensors on different devices (the step counter on two nexus 5 phones, for instance) - Display the source of data to the user (by using the device make / model) - Treat data differently depending on sensor type (accelerometers on a watch may give different patterns than those on a phone) - Build different analysis models for each device/version. ",
+            "id": "Device",
+            "properties": {
+                "manufacturer": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.create",
+                            "fitness.users.dataSources.update"
+                        ]
+                    },
+                    "description": "Manufacturer of the product/hardware.",
+                    "type": "string"
+                },
+                "model": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.create",
+                            "fitness.users.dataSources.update"
+                        ]
+                    },
+                    "description": "End-user visible model name for the device.",
+                    "type": "string"
+                },
+                "type": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.create",
+                            "fitness.users.dataSources.update"
+                        ]
+                    },
+                    "description": "A constant representing the type of the device.",
+                    "enum": [
+                        "unknown",
+                        "phone",
+                        "tablet",
+                        "watch",
+                        "chestStrap",
+                        "scale",
+                        "headMounted",
+                        "smartDisplay"
+                    ],
+                    "enumDescriptions": [
+                        "Device type is not known.",
+                        "An Android phone.",
+                        "An Android tablet.",
+                        "A watch or other wrist-mounted band.",
+                        "A chest strap.",
+                        "A scale.",
+                        "Glass or other head-mounted device.",
+                        "A smart display e.g. Nest device."
+                    ],
+                    "type": "string"
+                },
+                "uid": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.create",
+                            "fitness.users.dataSources.update"
+                        ]
+                    },
+                    "description": "The serial number or other unique ID for the hardware. This field is obfuscated when read by any REST or Android client that did not create the data source. Only the data source creator will see the uid field in clear and normal form. The obfuscation preserves equality; that is, given two IDs, if id1 == id2, obfuscated(id1) == obfuscated(id2).",
+                    "type": "string"
+                },
+                "version": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.dataSources.create",
+                            "fitness.users.dataSources.update"
+                        ]
+                    },
+                    "description": "Version string for the device hardware/software.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListDataPointChangesResponse": {
+            "id": "ListDataPointChangesResponse",
+            "properties": {
+                "dataSourceId": {
+                    "description": "The data stream ID of the data source with data point changes.",
+                    "type": "string"
+                },
+                "deletedDataPoint": {
+                    "description": "Deleted data points for the user. Note, for modifications this should be parsed before handling insertions.",
+                    "items": {
+                        "$ref": "DataPoint"
+                    },
+                    "type": "array"
+                },
+                "insertedDataPoint": {
+                    "description": "Inserted data points for the user.",
+                    "items": {
+                        "$ref": "DataPoint"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListDataSourcesResponse": {
+            "id": "ListDataSourcesResponse",
+            "properties": {
+                "dataSource": {
+                    "description": "A previously created data source.",
+                    "items": {
+                        "$ref": "DataSource"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListSessionsResponse": {
+            "id": "ListSessionsResponse",
+            "properties": {
+                "deletedSession": {
+                    "description": "If includeDeleted is set to true in the request, and startTime and endTime are omitted, this will include sessions which were deleted since the last sync.",
+                    "items": {
+                        "$ref": "Session"
+                    },
+                    "type": "array"
+                },
+                "hasMoreData": {
+                    "description": "Flag to indicate server has more data to transfer. DO NOT USE THIS FIELD. It is never populated in responses from the server.",
+                    "type": "boolean"
+                },
+                "nextPageToken": {
+                    "description": "The sync token which is used to sync further changes. This will only be provided if both startTime and endTime are omitted from the request.",
+                    "type": "string"
+                },
+                "session": {
+                    "description": "Sessions with an end time that is between startTime and endTime of the request.",
+                    "items": {
+                        "$ref": "Session"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "MapValue": {
+            "description": "Holder object for the value of an entry in a map field of a data point. A map value supports a subset of the formats that the regular Value supports.",
+            "id": "MapValue",
+            "properties": {
+                "fpVal": {
+                    "description": "Floating point value.",
+                    "format": "double",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "Session": {
+            "description": "Sessions contain metadata, such as a user-friendly name and time interval information.",
+            "id": "Session",
+            "properties": {
+                "activeTimeMillis": {
+                    "description": "Session active time. While start_time_millis and end_time_millis define the full session time, the active time can be shorter and specified by active_time_millis. If the inactive time during the session is known, it should also be inserted via a com.google.activity.segment data point with a STILL activity value",
+                    "format": "int64",
+                    "type": "string"
                 },
                 "activityType": {
-                  "location": "query",
-                  "repeated": true,
-                  "type": "integer",
-                  "description": "If non-empty, only sessions with these activity types should be returned.",
-                  "format": "int32"
+                    "annotations": {
+                        "required": [
+                            "fitness.users.sessions.update"
+                        ]
+                    },
+                    "description": "The type of activity this session represents.",
+                    "format": "int32",
+                    "type": "integer"
                 },
-                "includeDeleted": {
-                  "location": "query",
-                  "description": "If true, and if both startTime and endTime are omitted, session deletions will be returned.",
-                  "type": "boolean"
+                "application": {
+                    "$ref": "Application",
+                    "annotations": {
+                        "required": [
+                            "fitness.users.sessions.update"
+                        ]
+                    },
+                    "description": "The application that created the session."
+                },
+                "description": {
+                    "description": "A description for this session.",
+                    "type": "string"
+                },
+                "endTimeMillis": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.sessions.update"
+                        ]
+                    },
+                    "description": "An end time, in milliseconds since epoch, inclusive.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "id": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.sessions.update"
+                        ]
+                    },
+                    "description": "A client-generated identifier that is unique across all sessions owned by this particular user.",
+                    "type": "string"
+                },
+                "modifiedTimeMillis": {
+                    "description": "A timestamp that indicates when the session was last modified.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "name": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.sessions.update"
+                        ]
+                    },
+                    "description": "A human readable name of the session.",
+                    "type": "string"
+                },
+                "startTimeMillis": {
+                    "annotations": {
+                        "required": [
+                            "fitness.users.sessions.update"
+                        ]
+                    },
+                    "description": "A start time, in milliseconds since epoch, inclusive.",
+                    "format": "int64",
+                    "type": "string"
                 }
-              },
-              "id": "fitness.users.sessions.list",
-              "httpMethod": "GET",
-              "description": "Lists sessions previously created.",
-              "response": {
-                "$ref": "ListSessionsResponse"
-              },
-              "parameterOrder": [
-                "userId"
-              ],
-              "flatPath": "{userId}/sessions",
-              "path": "{userId}/sessions",
-              "scopes": [
-                "https://www.googleapis.com/auth/fitness.activity.read",
-                "https://www.googleapis.com/auth/fitness.activity.write",
-                "https://www.googleapis.com/auth/fitness.blood_glucose.read",
-                "https://www.googleapis.com/auth/fitness.blood_glucose.write",
-                "https://www.googleapis.com/auth/fitness.blood_pressure.read",
-                "https://www.googleapis.com/auth/fitness.blood_pressure.write",
-                "https://www.googleapis.com/auth/fitness.body.read",
-                "https://www.googleapis.com/auth/fitness.body.write",
-                "https://www.googleapis.com/auth/fitness.body_temperature.read",
-                "https://www.googleapis.com/auth/fitness.body_temperature.write",
-                "https://www.googleapis.com/auth/fitness.heart_rate.read",
-                "https://www.googleapis.com/auth/fitness.heart_rate.write",
-                "https://www.googleapis.com/auth/fitness.location.read",
-                "https://www.googleapis.com/auth/fitness.location.write",
-                "https://www.googleapis.com/auth/fitness.nutrition.read",
-                "https://www.googleapis.com/auth/fitness.nutrition.write",
-                "https://www.googleapis.com/auth/fitness.oxygen_saturation.read",
-                "https://www.googleapis.com/auth/fitness.oxygen_saturation.write",
-                "https://www.googleapis.com/auth/fitness.reproductive_health.read",
-                "https://www.googleapis.com/auth/fitness.reproductive_health.write",
-                "https://www.googleapis.com/auth/fitness.sleep.read",
-                "https://www.googleapis.com/auth/fitness.sleep.write"
-              ]
             },
-            "delete": {
-              "id": "fitness.users.sessions.delete",
-              "httpMethod": "DELETE",
-              "scopes": [
-                "https://www.googleapis.com/auth/fitness.activity.write",
-                "https://www.googleapis.com/auth/fitness.sleep.write"
-              ],
-              "description": "Deletes a session specified by the given session ID.",
-              "path": "{userId}/sessions/{sessionId}",
-              "parameterOrder": [
-                "userId",
-                "sessionId"
-              ],
-              "flatPath": "{userId}/sessions/{sessionId}",
-              "parameters": {
-                "userId": {
-                  "required": true,
-                  "location": "path",
-                  "description": "Delete a session for the person identified. Use me to indicate the authenticated user. Only me is supported at this time.",
-                  "type": "string"
+            "type": "object"
+        },
+        "Value": {
+            "description": "Holder object for the value of a single field in a data point. A field value has a particular format and is only ever set to one of an integer or a floating point value.",
+            "id": "Value",
+            "properties": {
+                "fpVal": {
+                    "description": "Floating point value. When this is set, other values must not be set.",
+                    "format": "double",
+                    "type": "number"
                 },
-                "sessionId": {
-                  "location": "path",
-                  "type": "string",
-                  "description": "The ID of the session to be deleted.",
-                  "required": true
+                "intVal": {
+                    "description": "Integer value. When this is set, other values must not be set.",
+                    "format": "int32",
+                    "type": "integer"
                 },
-                "currentTimeMillis": {
-                  "format": "int64",
-                  "location": "query",
-                  "description": "The client's current time in milliseconds since epoch.",
-                  "type": "string"
+                "mapVal": {
+                    "description": "Map value. The valid key space and units for the corresponding value of each entry should be documented as part of the data type definition. Keys should be kept small whenever possible. Data streams with large keys and high data frequency may be down sampled.",
+                    "items": {
+                        "$ref": "ValueMapValEntry"
+                    },
+                    "type": "array"
+                },
+                "stringVal": {
+                    "description": "String value. When this is set, other values must not be set. Strings should be kept small whenever possible. Data streams with large string values and high data frequency may be down sampled.",
+                    "type": "string"
                 }
-              }
-            }
-          }
+            },
+            "type": "object"
+        },
+        "ValueMapValEntry": {
+            "id": "ValueMapValEntry",
+            "properties": {
+                "key": {
+                    "type": "string"
+                },
+                "value": {
+                    "$ref": "MapValue"
+                }
+            },
+            "type": "object"
         }
-      }
-    }
-  },
-  "documentationLink": "https://developers.google.com/fit/rest/v1/get-started",
-  "parameters": {
-    "uploadType": {
-      "type": "string",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "location": "query"
     },
-    "$.xgafv": {
-      "enum": [
-        "1",
-        "2"
-      ],
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "description": "V1 error format.",
-      "location": "query",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "default": "true",
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean"
-    },
-    "oauth_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user."
-    },
-    "access_token": {
-      "type": "string",
-      "description": "OAuth access token.",
-      "location": "query"
-    },
-    "quotaUser": {
-      "type": "string",
-      "location": "query",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters."
-    },
-    "callback": {
-      "type": "string",
-      "description": "JSONP",
-      "location": "query"
-    },
-    "key": {
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "type": "string",
-      "location": "query"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "location": "query",
-      "type": "string"
-    },
-    "alt": {
-      "location": "query",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "default": "json",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "description": "Data format for response.",
-      "type": "string"
-    },
-    "upload_protocol": {
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "location": "query"
-    }
-  },
-  "kind": "discovery#restDescription",
-  "mtlsRootUrl": "https://fitness.mtls.googleapis.com/"
-}
+    "servicePath": "fitness/v1/users/",
+    "title": "Fitness API",
+    "version": "v1"
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/gmail.v1.json b/googleapiclient/discovery_cache/documents/gmail.v1.json
index c1a50b7..396a4aa 100644
--- a/googleapiclient/discovery_cache/documents/gmail.v1.json
+++ b/googleapiclient/discovery_cache/documents/gmail.v1.json
@@ -1,3847 +1,3847 @@
 {
-  "rootUrl": "https://gmail.googleapis.com/",
-  "basePath": "",
-  "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
-  },
-  "servicePath": "",
-  "ownerDomain": "google.com",
-  "canonicalName": "Gmail",
-  "mtlsRootUrl": "https://gmail.mtls.googleapis.com/",
-  "name": "gmail",
-  "schemas": {
-    "ModifyMessageRequest": {
-      "type": "object",
-      "properties": {
-        "addLabelIds": {
-          "items": {
-            "type": "string"
-          },
-          "description": "A list of IDs of labels to add to this message.",
-          "type": "array"
-        },
-        "removeLabelIds": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "A list IDs of labels to remove from this message."
-        }
-      },
-      "id": "ModifyMessageRequest"
-    },
-    "ListHistoryResponse": {
-      "id": "ListHistoryResponse",
-      "properties": {
-        "nextPageToken": {
-          "description": "Page token to retrieve the next page of results in the list.",
-          "type": "string"
-        },
-        "history": {
-          "description": "List of history records. Any `messages` contained in the response will typically only have `id` and `threadId` fields populated.",
-          "type": "array",
-          "items": {
-            "$ref": "History"
-          }
-        },
-        "historyId": {
-          "format": "uint64",
-          "type": "string",
-          "description": "The ID of the mailbox's current history record."
-        }
-      },
-      "type": "object"
-    },
-    "FilterAction": {
-      "properties": {
-        "addLabelIds": {
-          "type": "array",
-          "description": "List of labels to add to the message.",
-          "items": {
-            "type": "string"
-          }
-        },
-        "forward": {
-          "type": "string",
-          "description": "Email address that the message should be forwarded to."
-        },
-        "removeLabelIds": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "List of labels to remove from the message."
-        }
-      },
-      "id": "FilterAction",
-      "description": "A set of actions to perform on a message.",
-      "type": "object"
-    },
-    "FilterCriteria": {
-      "properties": {
-        "negatedQuery": {
-          "description": "Only return messages not matching the specified query. Supports the same query format as the Gmail search box. For example, `\"from:someuser@example.com rfc822msgid: is:unread\"`.",
-          "type": "string"
-        },
-        "sizeComparison": {
-          "description": "How the message size in bytes should be in relation to the size field.",
-          "type": "string",
-          "enum": [
-            "unspecified",
-            "smaller",
-            "larger"
-          ],
-          "enumDescriptions": [
-            "",
-            "Find messages smaller than the given size.",
-            "Find messages larger than the given size."
-          ]
-        },
-        "excludeChats": {
-          "type": "boolean",
-          "description": "Whether the response should exclude chats."
-        },
-        "size": {
-          "description": "The size of the entire RFC822 message in bytes, including all headers and attachments.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "subject": {
-          "type": "string",
-          "description": "Case-insensitive phrase found in the message's subject. Trailing and leading whitespace are be trimmed and adjacent spaces are collapsed."
-        },
-        "to": {
-          "description": "The recipient's display name or email address. Includes recipients in the \"to\", \"cc\", and \"bcc\" header fields. You can use simply the local part of the email address. For example, \"example\" and \"example@\" both match \"example@gmail.com\". This field is case-insensitive.",
-          "type": "string"
-        },
-        "hasAttachment": {
-          "type": "boolean",
-          "description": "Whether the message has any attachment."
-        },
-        "from": {
-          "type": "string",
-          "description": "The sender's display name or email address."
-        },
-        "query": {
-          "type": "string",
-          "description": "Only return messages matching the specified query. Supports the same query format as the Gmail search box. For example, `\"from:someuser@example.com rfc822msgid: is:unread\"`."
-        }
-      },
-      "id": "FilterCriteria",
-      "description": "Message matching criteria.",
-      "type": "object"
-    },
-    "Delegate": {
-      "type": "object",
-      "description": "Settings for a delegate. Delegates can read, send, and delete messages, as well as view and add contacts, for the delegator's account. See \"Set up mail delegation\" for more information about delegates.",
-      "id": "Delegate",
-      "properties": {
-        "delegateEmail": {
-          "description": "The email address of the delegate.",
-          "type": "string"
-        },
-        "verificationStatus": {
-          "enum": [
-            "verificationStatusUnspecified",
-            "accepted",
-            "pending",
-            "rejected",
-            "expired"
-          ],
-          "description": "Indicates whether this address has been verified and can act as a delegate for the account. Read-only.",
-          "enumDescriptions": [
-            "Unspecified verification status.",
-            "The address can act a delegate for the account.",
-            "A verification request was mailed to the address, and the owner has not yet accepted it.",
-            "A verification request was mailed to the address, and the owner rejected it.",
-            "A verification request was mailed to the address, and it expired without verification."
-          ],
-          "type": "string"
-        }
-      }
-    },
-    "ListDelegatesResponse": {
-      "description": "Response for the ListDelegates method.",
-      "type": "object",
-      "properties": {
-        "delegates": {
-          "description": "List of the user's delegates (with any verification status). If an account doesn't have delegates, this field doesn't appear.",
-          "type": "array",
-          "items": {
-            "$ref": "Delegate"
-          }
-        }
-      },
-      "id": "ListDelegatesResponse"
-    },
-    "LabelColor": {
-      "type": "object",
-      "id": "LabelColor",
-      "properties": {
-        "textColor": {
-          "type": "string",
-          "description": "The text color of the label, represented as hex string. This field is required in order to set the color of a label. Only the following predefined set of color values are allowed: \\#000000, #434343, #666666, #999999, #cccccc, #efefef, #f3f3f3, #ffffff, \\#fb4c2f, #ffad47, #fad165, #16a766, #43d692, #4a86e8, #a479e2, #f691b3, \\#f6c5be, #ffe6c7, #fef1d1, #b9e4d0, #c6f3de, #c9daf8, #e4d7f5, #fcdee8, \\#efa093, #ffd6a2, #fce8b3, #89d3b2, #a0eac9, #a4c2f4, #d0bcf1, #fbc8d9, \\#e66550, #ffbc6b, #fcda83, #44b984, #68dfa9, #6d9eeb, #b694e8, #f7a7c0, \\#cc3a21, #eaa041, #f2c960, #149e60, #3dc789, #3c78d8, #8e63ce, #e07798, \\#ac2b16, #cf8933, #d5ae49, #0b804b, #2a9c68, #285bac, #653e9b, #b65775, \\#822111, #a46a21, #aa8831, #076239, #1a764d, #1c4587, #41236d, #83334c \\#464646, #e7e7e7, #0d3472, #b6cff5, #0d3b44, #98d7e4, #3d188e, #e3d7ff, \\#711a36, #fbd3e0, #8a1c0a, #f2b2a8, #7a2e0b, #ffc8af, #7a4706, #ffdeb5, \\#594c05, #fbe983, #684e07, #fdedc1, #0b4f30, #b3efd3, #04502e, #a2dcc1, \\#c2c2c2, #4986e7, #2da2bb, #b99aff, #994a64, #f691b2, #ff7537, #ffad46, \\#662e37, #ebdbde, #cca6ac, #094228, #42d692, #16a765"
-        },
-        "backgroundColor": {
-          "description": "The background color represented as hex string #RRGGBB (ex #000000). This field is required in order to set the color of a label. Only the following predefined set of color values are allowed: \\#000000, #434343, #666666, #999999, #cccccc, #efefef, #f3f3f3, #ffffff, \\#fb4c2f, #ffad47, #fad165, #16a766, #43d692, #4a86e8, #a479e2, #f691b3, \\#f6c5be, #ffe6c7, #fef1d1, #b9e4d0, #c6f3de, #c9daf8, #e4d7f5, #fcdee8, \\#efa093, #ffd6a2, #fce8b3, #89d3b2, #a0eac9, #a4c2f4, #d0bcf1, #fbc8d9, \\#e66550, #ffbc6b, #fcda83, #44b984, #68dfa9, #6d9eeb, #b694e8, #f7a7c0, \\#cc3a21, #eaa041, #f2c960, #149e60, #3dc789, #3c78d8, #8e63ce, #e07798, \\#ac2b16, #cf8933, #d5ae49, #0b804b, #2a9c68, #285bac, #653e9b, #b65775, \\#822111, #a46a21, #aa8831, #076239, #1a764d, #1c4587, #41236d, #83334c \\#464646, #e7e7e7, #0d3472, #b6cff5, #0d3b44, #98d7e4, #3d188e, #e3d7ff, \\#711a36, #fbd3e0, #8a1c0a, #f2b2a8, #7a2e0b, #ffc8af, #7a4706, #ffdeb5, \\#594c05, #fbe983, #684e07, #fdedc1, #0b4f30, #b3efd3, #04502e, #a2dcc1, \\#c2c2c2, #4986e7, #2da2bb, #b99aff, #994a64, #f691b2, #ff7537, #ffad46, \\#662e37, #ebdbde, #cca6ac, #094228, #42d692, #16a765",
-          "type": "string"
-        }
-      }
-    },
-    "BatchModifyMessagesRequest": {
-      "id": "BatchModifyMessagesRequest",
-      "properties": {
-        "ids": {
-          "description": "The IDs of the messages to modify. There is a limit of 1000 ids per request.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "removeLabelIds": {
-          "type": "array",
-          "description": "A list of label IDs to remove from messages.",
-          "items": {
-            "type": "string"
-          }
-        },
-        "addLabelIds": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "A list of label IDs to add to messages."
-        }
-      },
-      "type": "object"
-    },
-    "Profile": {
-      "id": "Profile",
-      "type": "object",
-      "properties": {
-        "messagesTotal": {
-          "description": "The total number of messages in the mailbox.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "emailAddress": {
-          "description": "The user's email address.",
-          "type": "string"
-        },
-        "historyId": {
-          "format": "uint64",
-          "type": "string",
-          "description": "The ID of the mailbox's current history record."
-        },
-        "threadsTotal": {
-          "description": "The total number of threads in the mailbox.",
-          "type": "integer",
-          "format": "int32"
-        }
-      },
-      "description": "Profile for a Gmail user."
-    },
-    "ListLabelsResponse": {
-      "properties": {
-        "labels": {
-          "items": {
-            "$ref": "Label"
-          },
-          "type": "array",
-          "description": "List of labels. Note that each label resource only contains an `id`, `name`, `messageListVisibility`, `labelListVisibility`, and `type`. The labels.get method can fetch additional label details."
-        }
-      },
-      "type": "object",
-      "id": "ListLabelsResponse"
-    },
-    "ListFiltersResponse": {
-      "type": "object",
-      "id": "ListFiltersResponse",
-      "properties": {
-        "filter": {
-          "items": {
-            "$ref": "Filter"
-          },
-          "type": "array",
-          "description": "List of a user's filters."
-        }
-      },
-      "description": "Response for the ListFilters method."
-    },
-    "HistoryLabelAdded": {
-      "type": "object",
-      "properties": {
-        "labelIds": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "Label IDs added to the message."
-        },
-        "message": {
-          "$ref": "Message"
-        }
-      },
-      "id": "HistoryLabelAdded"
-    },
-    "BatchDeleteMessagesRequest": {
-      "type": "object",
-      "properties": {
-        "ids": {
-          "description": "The IDs of the messages to delete.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "BatchDeleteMessagesRequest"
-    },
-    "SendAs": {
-      "properties": {
-        "smtpMsa": {
-          "$ref": "SmtpMsa",
-          "description": "An optional SMTP service that will be used as an outbound relay for mail sent using this alias. If this is empty, outbound mail will be sent directly from Gmail's servers to the destination SMTP service. This setting only applies to custom \"from\" aliases."
-        },
-        "treatAsAlias": {
-          "type": "boolean",
-          "description": "Whether Gmail should treat this address as an alias for the user's primary email address. This setting only applies to custom \"from\" aliases."
-        },
-        "verificationStatus": {
-          "description": "Indicates whether this address has been verified for use as a send-as alias. Read-only. This setting only applies to custom \"from\" aliases.",
-          "enum": [
-            "verificationStatusUnspecified",
-            "accepted",
-            "pending"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "Unspecified verification status.",
-            "The address is ready to use as a send-as alias.",
-            "The address is awaiting verification by the owner."
-          ]
-        },
-        "isPrimary": {
-          "type": "boolean",
-          "description": "Whether this address is the primary address used to login to the account. Every Gmail account has exactly one primary address, and it cannot be deleted from the collection of send-as aliases. This field is read-only."
-        },
-        "isDefault": {
-          "type": "boolean",
-          "description": "Whether this address is selected as the default \"From:\" address in situations such as composing a new message or sending a vacation auto-reply. Every Gmail account has exactly one default send-as address, so the only legal value that clients may write to this field is `true`. Changing this from `false` to `true` for an address will result in this field becoming `false` for the other previous default address."
-        },
-        "replyToAddress": {
-          "type": "string",
-          "description": "An optional email address that is included in a \"Reply-To:\" header for mail sent using this alias. If this is empty, Gmail will not generate a \"Reply-To:\" header."
-        },
-        "displayName": {
-          "type": "string",
-          "description": "A name that appears in the \"From:\" header for mail sent using this alias. For custom \"from\" addresses, when this is empty, Gmail will populate the \"From:\" header with the name that is used for the primary address associated with the account. If the admin has disabled the ability for users to update their name format, requests to update this field for the primary login will silently fail."
-        },
-        "sendAsEmail": {
-          "type": "string",
-          "description": "The email address that appears in the \"From:\" header for mail sent using this alias. This is read-only for all operations except create."
-        },
-        "signature": {
-          "type": "string",
-          "description": "An optional HTML signature that is included in messages composed with this alias in the Gmail web UI."
-        }
-      },
-      "type": "object",
-      "id": "SendAs",
-      "description": "Settings associated with a send-as alias, which can be either the primary login address associated with the account or a custom \"from\" address. Send-as aliases correspond to the \"Send Mail As\" feature in the web interface."
-    },
-    "AutoForwarding": {
-      "properties": {
-        "emailAddress": {
-          "description": "Email address to which all incoming messages are forwarded. This email address must be a verified member of the forwarding addresses.",
-          "type": "string"
-        },
-        "enabled": {
-          "description": "Whether all incoming mail is automatically forwarded to another address.",
-          "type": "boolean"
-        },
-        "disposition": {
-          "type": "string",
-          "description": "The state that a message should be left in after it has been forwarded.",
-          "enum": [
-            "dispositionUnspecified",
-            "leaveInInbox",
-            "archive",
-            "trash",
-            "markRead"
-          ],
-          "enumDescriptions": [
-            "Unspecified disposition.",
-            "Leave the message in the `INBOX`.",
-            "Archive the message.",
-            "Move the message to the `TRASH`.",
-            "Leave the message in the `INBOX` and mark it as read."
-          ]
-        }
-      },
-      "description": "Auto-forwarding settings for an account.",
-      "id": "AutoForwarding",
-      "type": "object"
-    },
-    "ModifyThreadRequest": {
-      "id": "ModifyThreadRequest",
-      "properties": {
-        "addLabelIds": {
-          "description": "A list of IDs of labels to add to this thread.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "removeLabelIds": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "A list of IDs of labels to remove from this thread."
-        }
-      },
-      "type": "object"
-    },
-    "ListThreadsResponse": {
-      "properties": {
-        "nextPageToken": {
-          "description": "Page token to retrieve the next page of results in the list.",
-          "type": "string"
-        },
-        "resultSizeEstimate": {
-          "description": "Estimated total number of results.",
-          "type": "integer",
-          "format": "uint32"
-        },
-        "threads": {
-          "items": {
-            "$ref": "Thread"
-          },
-          "type": "array",
-          "description": "List of threads. Note that each thread resource does not contain a list of `messages`. The list of `messages` for a given thread can be fetched using the threads.get method."
-        }
-      },
-      "type": "object",
-      "id": "ListThreadsResponse"
-    },
-    "HistoryMessageDeleted": {
-      "type": "object",
-      "properties": {
-        "message": {
-          "$ref": "Message"
-        }
-      },
-      "id": "HistoryMessageDeleted"
-    },
-    "HistoryMessageAdded": {
-      "id": "HistoryMessageAdded",
-      "type": "object",
-      "properties": {
-        "message": {
-          "$ref": "Message"
-        }
-      }
-    },
-    "ListSendAsResponse": {
-      "properties": {
-        "sendAs": {
-          "type": "array",
-          "description": "List of send-as aliases.",
-          "items": {
-            "$ref": "SendAs"
-          }
-        }
-      },
-      "type": "object",
-      "id": "ListSendAsResponse",
-      "description": "Response for the ListSendAs method."
-    },
-    "MessagePartBody": {
-      "id": "MessagePartBody",
-      "description": "The body of a single MIME message part.",
-      "type": "object",
-      "properties": {
-        "size": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Number of bytes for the message part data (encoding notwithstanding)."
-        },
-        "data": {
-          "type": "string",
-          "format": "byte",
-          "description": "The body data of a MIME message part as a base64url encoded string. May be empty for MIME container types that have no message body or when the body data is sent as a separate attachment. An attachment ID is present if the body data is contained in a separate attachment."
-        },
-        "attachmentId": {
-          "type": "string",
-          "description": "When present, contains the ID of an external attachment that can be retrieved in a separate `messages.attachments.get` request. When not present, the entire content of the message part body is contained in the data field."
-        }
-      }
-    },
-    "ListMessagesResponse": {
-      "type": "object",
-      "properties": {
-        "messages": {
-          "description": "List of messages. Note that each message resource contains only an `id` and a `threadId`. Additional message details can be fetched using the messages.get method.",
-          "type": "array",
-          "items": {
-            "$ref": "Message"
-          }
-        },
-        "resultSizeEstimate": {
-          "description": "Estimated total number of results.",
-          "format": "uint32",
-          "type": "integer"
-        },
-        "nextPageToken": {
-          "description": "Token to retrieve the next page of results in the list.",
-          "type": "string"
-        }
-      },
-      "id": "ListMessagesResponse"
-    },
-    "PopSettings": {
-      "type": "object",
-      "description": "POP settings for an account.",
-      "properties": {
-        "accessWindow": {
-          "description": "The range of messages which are accessible via POP.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unspecified range.",
-            "Indicates that no messages are accessible via POP.",
-            "Indicates that unfetched messages received after some past point in time are accessible via POP.",
-            "Indicates that all unfetched messages are accessible via POP."
-          ],
-          "enum": [
-            "accessWindowUnspecified",
-            "disabled",
-            "fromNowOn",
-            "allMail"
-          ]
-        },
-        "disposition": {
-          "enum": [
-            "dispositionUnspecified",
-            "leaveInInbox",
-            "archive",
-            "trash",
-            "markRead"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "Unspecified disposition.",
-            "Leave the message in the `INBOX`.",
-            "Archive the message.",
-            "Move the message to the `TRASH`.",
-            "Leave the message in the `INBOX` and mark it as read."
-          ],
-          "description": "The action that will be executed on a message after it has been fetched via POP."
-        }
-      },
-      "id": "PopSettings"
-    },
-    "ListForwardingAddressesResponse": {
-      "properties": {
-        "forwardingAddresses": {
-          "items": {
-            "$ref": "ForwardingAddress"
-          },
-          "type": "array",
-          "description": "List of addresses that may be used for forwarding."
-        }
-      },
-      "description": "Response for the ListForwardingAddresses method.",
-      "type": "object",
-      "id": "ListForwardingAddressesResponse"
-    },
-    "VacationSettings": {
-      "type": "object",
-      "description": "Vacation auto-reply settings for an account. These settings correspond to the \"Vacation responder\" feature in the web interface.",
-      "properties": {
-        "responseBodyHtml": {
-          "description": "Response body in HTML format. Gmail will sanitize the HTML before storing it. If both `response_body_plain_text` and `response_body_html` are specified, `response_body_html` will be used.",
-          "type": "string"
-        },
-        "enableAutoReply": {
-          "type": "boolean",
-          "description": "Flag that controls whether Gmail automatically replies to messages."
-        },
-        "startTime": {
-          "type": "string",
-          "format": "int64",
-          "description": "An optional start time for sending auto-replies (epoch ms). When this is specified, Gmail will automatically reply only to messages that it receives after the start time. If both `startTime` and `endTime` are specified, `startTime` must precede `endTime`."
-        },
-        "endTime": {
-          "description": "An optional end time for sending auto-replies (epoch ms). When this is specified, Gmail will automatically reply only to messages that it receives before the end time. If both `startTime` and `endTime` are specified, `startTime` must precede `endTime`.",
-          "type": "string",
-          "format": "int64"
-        },
-        "restrictToDomain": {
-          "description": "Flag that determines whether responses are sent to recipients who are outside of the user's domain. This feature is only available for G Suite users.",
-          "type": "boolean"
-        },
-        "responseBodyPlainText": {
-          "type": "string",
-          "description": "Response body in plain text format. If both `response_body_plain_text` and `response_body_html` are specified, `response_body_html` will be used."
-        },
-        "restrictToContacts": {
-          "description": "Flag that determines whether responses are sent to recipients who are not in the user's list of contacts.",
-          "type": "boolean"
-        },
-        "responseSubject": {
-          "description": "Optional text to prepend to the subject line in vacation responses. In order to enable auto-replies, either the response subject or the response body must be nonempty.",
-          "type": "string"
-        }
-      },
-      "id": "VacationSettings"
-    },
-    "SmimeInfo": {
-      "properties": {
-        "pem": {
-          "description": "PEM formatted X509 concatenated certificate string (standard base64 encoding). Format used for returning key, which includes public key as well as certificate chain (not private key).",
-          "type": "string"
-        },
-        "issuerCn": {
-          "type": "string",
-          "description": "The S/MIME certificate issuer's common name."
-        },
-        "isDefault": {
-          "description": "Whether this SmimeInfo is the default one for this user's send-as address.",
-          "type": "boolean"
-        },
-        "id": {
-          "type": "string",
-          "description": "The immutable ID for the SmimeInfo."
-        },
-        "pkcs12": {
-          "format": "byte",
-          "description": "PKCS#12 format containing a single private/public key pair and certificate chain. This format is only accepted from client for creating a new SmimeInfo and is never returned, because the private key is not intended to be exported. PKCS#12 may be encrypted, in which case encryptedKeyPassword should be set appropriately.",
-          "type": "string"
-        },
-        "expiration": {
-          "description": "When the certificate expires (in milliseconds since epoch).",
-          "type": "string",
-          "format": "int64"
-        },
-        "encryptedKeyPassword": {
-          "type": "string",
-          "description": "Encrypted key password, when key is encrypted."
-        }
-      },
-      "type": "object",
-      "id": "SmimeInfo",
-      "description": "An S/MIME email config."
-    },
-    "ImapSettings": {
-      "properties": {
-        "expungeBehavior": {
-          "description": "The action that will be executed on a message when it is marked as deleted and expunged from the last visible IMAP folder.",
-          "enum": [
-            "expungeBehaviorUnspecified",
-            "archive",
-            "trash",
-            "deleteForever"
-          ],
-          "enumDescriptions": [
-            "Unspecified behavior.",
-            "Archive messages marked as deleted.",
-            "Move messages marked as deleted to the trash.",
-            "Immediately and permanently delete messages marked as deleted. The expunged messages cannot be recovered."
-          ],
-          "type": "string"
-        },
-        "maxFolderSize": {
-          "type": "integer",
-          "format": "int32",
-          "description": "An optional limit on the number of messages that an IMAP folder may contain. Legal values are 0, 1000, 2000, 5000 or 10000. A value of zero is interpreted to mean that there is no limit."
-        },
-        "enabled": {
-          "description": "Whether IMAP is enabled for the account.",
-          "type": "boolean"
-        },
-        "autoExpunge": {
-          "description": "If this value is true, Gmail will immediately expunge a message when it is marked as deleted in IMAP. Otherwise, Gmail will wait for an update from the client before expunging messages marked as deleted.",
-          "type": "boolean"
-        }
-      },
-      "id": "ImapSettings",
-      "type": "object",
-      "description": "IMAP settings for an account."
-    },
-    "Message": {
-      "properties": {
-        "labelIds": {
-          "items": {
-            "type": "string"
-          },
-          "description": "List of IDs of labels applied to this message.",
-          "type": "array"
-        },
-        "payload": {
-          "$ref": "MessagePart",
-          "description": "The parsed email structure in the message parts."
-        },
-        "threadId": {
-          "type": "string",
-          "description": "The ID of the thread the message belongs to. To add a message or draft to a thread, the following criteria must be met: 1. The requested `threadId` must be specified on the `Message` or `Draft.Message` you supply with your request. 2. The `References` and `In-Reply-To` headers must be set in compliance with the [RFC 2822](https://tools.ietf.org/html/rfc2822) standard. 3. The `Subject` headers must match. "
-        },
-        "internalDate": {
-          "format": "int64",
-          "type": "string",
-          "description": "The internal message creation timestamp (epoch ms), which determines ordering in the inbox. For normal SMTP-received email, this represents the time the message was originally accepted by Google, which is more reliable than the `Date` header. However, for API-migrated mail, it can be configured by client to be based on the `Date` header."
-        },
-        "id": {
-          "type": "string",
-          "description": "The immutable ID of the message."
-        },
-        "raw": {
-          "type": "string",
-          "annotations": {
-            "required": [
-              "gmail.users.drafts.create",
-              "gmail.users.drafts.update",
-              "gmail.users.messages.insert",
-              "gmail.users.messages.send"
-            ]
-          },
-          "format": "byte",
-          "description": "The entire email message in an RFC 2822 formatted and base64url encoded string. Returned in `messages.get` and `drafts.get` responses when the `format=RAW` parameter is supplied."
-        },
-        "sizeEstimate": {
-          "description": "Estimated size in bytes of the message.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "snippet": {
-          "description": "A short part of the message text.",
-          "type": "string"
-        },
-        "historyId": {
-          "description": "The ID of the last history record that modified this message.",
-          "type": "string",
-          "format": "uint64"
-        }
-      },
-      "type": "object",
-      "id": "Message",
-      "description": "An email message."
-    },
-    "History": {
-      "id": "History",
-      "description": "A record of a change to the user's mailbox. Each history change may affect multiple messages in multiple ways.",
-      "properties": {
-        "labelsRemoved": {
-          "items": {
-            "$ref": "HistoryLabelRemoved"
-          },
-          "type": "array",
-          "description": "Labels removed from messages in this history record."
-        },
-        "messages": {
-          "description": "List of messages changed in this history record. The fields for specific change types, such as `messagesAdded` may duplicate messages in this field. We recommend using the specific change-type fields instead of this.",
-          "items": {
-            "$ref": "Message"
-          },
-          "type": "array"
-        },
-        "messagesAdded": {
-          "type": "array",
-          "description": "Messages added to the mailbox in this history record.",
-          "items": {
-            "$ref": "HistoryMessageAdded"
-          }
-        },
-        "messagesDeleted": {
-          "items": {
-            "$ref": "HistoryMessageDeleted"
-          },
-          "description": "Messages deleted (not Trashed) from the mailbox in this history record.",
-          "type": "array"
-        },
-        "id": {
-          "type": "string",
-          "description": "The mailbox sequence ID.",
-          "format": "uint64"
-        },
-        "labelsAdded": {
-          "description": "Labels added to messages in this history record.",
-          "type": "array",
-          "items": {
-            "$ref": "HistoryLabelAdded"
-          }
-        }
-      },
-      "type": "object"
-    },
-    "SmtpMsa": {
-      "type": "object",
-      "id": "SmtpMsa",
-      "properties": {
-        "username": {
-          "description": "The username that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.",
-          "type": "string"
-        },
-        "host": {
-          "type": "string",
-          "description": "The hostname of the SMTP service. Required."
-        },
-        "port": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The port of the SMTP service. Required."
-        },
-        "securityMode": {
-          "type": "string",
-          "enum": [
-            "securityModeUnspecified",
-            "none",
-            "ssl",
-            "starttls"
-          ],
-          "enumDescriptions": [
-            "Unspecified security mode.",
-            "Communication with the remote SMTP service is unsecured. Requires port 25.",
-            "Communication with the remote SMTP service is secured using SSL.",
-            "Communication with the remote SMTP service is secured using STARTTLS."
-          ],
-          "description": "The protocol that will be used to secure communication with the SMTP service. Required."
-        },
-        "password": {
-          "type": "string",
-          "description": "The password that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses."
-        }
-      },
-      "description": "Configuration for communication with an SMTP service."
-    },
-    "ListSmimeInfoResponse": {
-      "properties": {
-        "smimeInfo": {
-          "type": "array",
-          "items": {
-            "$ref": "SmimeInfo"
-          },
-          "description": "List of SmimeInfo."
-        }
-      },
-      "id": "ListSmimeInfoResponse",
-      "type": "object"
-    },
-    "HistoryLabelRemoved": {
-      "properties": {
-        "message": {
-          "$ref": "Message"
-        },
-        "labelIds": {
-          "description": "Label IDs removed from the message.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "id": "HistoryLabelRemoved"
-    },
-    "ListDraftsResponse": {
-      "type": "object",
-      "id": "ListDraftsResponse",
-      "properties": {
-        "resultSizeEstimate": {
-          "format": "uint32",
-          "description": "Estimated total number of results.",
-          "type": "integer"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Token to retrieve the next page of results in the list."
-        },
-        "drafts": {
-          "items": {
-            "$ref": "Draft"
-          },
-          "description": "List of drafts. Note that the `Message` property in each `Draft` resource only contains an `id` and a `threadId`. The messages.get method can fetch additional message details.",
-          "type": "array"
-        }
-      }
-    },
-    "MessagePart": {
-      "properties": {
-        "mimeType": {
-          "description": "The MIME type of the message part.",
-          "type": "string"
-        },
-        "body": {
-          "description": "The message part body for this part, which may be empty for container MIME message parts.",
-          "$ref": "MessagePartBody"
-        },
-        "headers": {
-          "type": "array",
-          "items": {
-            "$ref": "MessagePartHeader"
-          },
-          "description": "List of headers on this message part. For the top-level message part, representing the entire message payload, it will contain the standard RFC 2822 email headers such as `To`, `From`, and `Subject`."
-        },
-        "filename": {
-          "description": "The filename of the attachment. Only present if this message part represents an attachment.",
-          "type": "string"
-        },
-        "partId": {
-          "description": "The immutable ID of the message part.",
-          "type": "string"
-        },
-        "parts": {
-          "type": "array",
-          "items": {
-            "$ref": "MessagePart"
-          },
-          "description": "The child MIME message parts of this part. This only applies to container MIME message parts, for example `multipart/*`. For non- container MIME message part types, such as `text/plain`, this field is empty. For more information, see RFC 1521."
-        }
-      },
-      "description": "A single MIME message part.",
-      "type": "object",
-      "id": "MessagePart"
-    },
-    "Draft": {
-      "description": "A draft email in the user's mailbox.",
-      "type": "object",
-      "id": "Draft",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "The immutable ID of the draft.",
-          "annotations": {
-            "required": [
-              "gmail.users.drafts.send"
-            ]
-          }
-        },
-        "message": {
-          "description": "The message content of the draft.",
-          "$ref": "Message"
-        }
-      }
-    },
-    "WatchResponse": {
-      "description": "Push notification watch response.",
-      "id": "WatchResponse",
-      "type": "object",
-      "properties": {
-        "historyId": {
-          "description": "The ID of the mailbox's current history record.",
-          "format": "uint64",
-          "type": "string"
-        },
-        "expiration": {
-          "description": "When Gmail will stop sending notifications for mailbox updates (epoch millis). Call `watch` again before this time to renew the watch.",
-          "type": "string",
-          "format": "int64"
-        }
-      }
-    },
-    "Filter": {
-      "id": "Filter",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "The server assigned ID of the filter."
-        },
-        "criteria": {
-          "$ref": "FilterCriteria",
-          "description": "Matching criteria for the filter."
-        },
-        "action": {
-          "description": "Action that the filter performs.",
-          "$ref": "FilterAction"
-        }
-      },
-      "type": "object",
-      "description": "Resource definition for Gmail filters. Filters apply to specific messages instead of an entire email thread."
-    },
-    "ForwardingAddress": {
-      "properties": {
-        "verificationStatus": {
-          "description": "Indicates whether this address has been verified and is usable for forwarding. Read-only.",
-          "type": "string",
-          "enum": [
-            "verificationStatusUnspecified",
-            "accepted",
-            "pending"
-          ],
-          "enumDescriptions": [
-            "Unspecified verification status.",
-            "The address is ready to use for forwarding.",
-            "The address is awaiting verification by the owner."
-          ]
-        },
-        "forwardingEmail": {
-          "type": "string",
-          "description": "An email address to which messages can be forwarded."
-        }
-      },
-      "description": "Settings for a forwarding address.",
-      "type": "object",
-      "id": "ForwardingAddress"
-    },
-    "Thread": {
-      "id": "Thread",
-      "properties": {
-        "messages": {
-          "items": {
-            "$ref": "Message"
-          },
-          "description": "The list of messages in the thread.",
-          "type": "array"
-        },
-        "historyId": {
-          "type": "string",
-          "format": "uint64",
-          "description": "The ID of the last history record that modified this thread."
-        },
-        "snippet": {
-          "type": "string",
-          "description": "A short part of the message text."
-        },
-        "id": {
-          "type": "string",
-          "description": "The unique ID of the thread."
-        }
-      },
-      "type": "object",
-      "description": "A collection of messages representing a conversation."
-    },
-    "WatchRequest": {
-      "properties": {
-        "topicName": {
-          "description": "A fully qualified Google Cloud Pub/Sub API topic name to publish the events to. This topic name **must** already exist in Cloud Pub/Sub and you **must** have already granted gmail \"publish\" permission on it. For example, \"projects/my-project-identifier/topics/my-topic-name\" (using the Cloud Pub/Sub \"v1\" topic naming format). Note that the \"my-project-identifier\" portion must exactly match your Google developer project id (the one executing this watch request).",
-          "type": "string"
-        },
-        "labelFilterAction": {
-          "description": "Filtering behavior of labelIds list specified.",
-          "type": "string",
-          "enumDescriptions": [
-            "Only get push notifications for message changes relating to labelIds specified.",
-            "Get push notifications for all message changes except those relating to labelIds specified."
-          ],
-          "enum": [
-            "include",
-            "exclude"
-          ]
-        },
-        "labelIds": {
-          "items": {
-            "type": "string"
-          },
-          "description": "List of label_ids to restrict notifications about. By default, if unspecified, all changes are pushed out. If specified then dictates which labels are required for a push notification to be generated.",
-          "type": "array"
-        }
-      },
-      "id": "WatchRequest",
-      "description": "Set up or update a new push notification watch on this user's mailbox.",
-      "type": "object"
-    },
-    "MessagePartHeader": {
-      "type": "object",
-      "id": "MessagePartHeader",
-      "properties": {
-        "value": {
-          "type": "string",
-          "description": "The value of the header after the `:` separator. For example, `someuser@example.com`."
-        },
-        "name": {
-          "description": "The name of the header before the `:` separator. For example, `To`.",
-          "type": "string"
-        }
-      }
-    },
-    "LanguageSettings": {
-      "type": "object",
-      "properties": {
-        "displayLanguage": {
-          "description": "The language to display Gmail in, formatted as an RFC 3066 Language Tag (for example `en-GB`, `fr` or `ja` for British English, French, or Japanese respectively). The set of languages supported by Gmail evolves over time, so please refer to the \"Language\" dropdown in the Gmail settings for all available options, as described in the language settings help article. A table of sample values is also provided in the Managing Language Settings guide Not all Gmail clients can display the same set of languages. In the case that a user's display language is not available for use on a particular client, said client automatically chooses to display in the closest supported variant (or a reasonable default).",
-          "type": "string"
-        }
-      },
-      "description": "Language settings for an account. These settings correspond to the \"Language settings\" feature in the web interface.",
-      "id": "LanguageSettings"
-    },
-    "Label": {
-      "type": "object",
-      "description": "Labels are used to categorize messages and threads within the user's mailbox.",
-      "id": "Label",
-      "properties": {
-        "id": {
-          "annotations": {
-            "required": [
-              "gmail.users.labels.update"
-            ]
-          },
-          "description": "The immutable ID of the label.",
-          "type": "string"
-        },
-        "color": {
-          "$ref": "LabelColor",
-          "description": "The color to assign to the label. Color is only available for labels that have their `type` set to `user`."
-        },
-        "messageListVisibility": {
-          "annotations": {
-            "required": [
-              "gmail.users.labels.create",
-              "gmail.users.labels.update"
-            ]
-          },
-          "type": "string",
-          "enum": [
-            "show",
-            "hide"
-          ],
-          "enumDescriptions": [
-            "Show the label in the message list.",
-            "Do not show the label in the message list."
-          ],
-          "description": "The visibility of messages with this label in the message list in the Gmail web interface."
-        },
-        "threadsTotal": {
-          "description": "The total number of threads with the label.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "name": {
-          "type": "string",
-          "annotations": {
-            "required": [
-              "gmail.users.labels.create",
-              "gmail.users.labels.update"
-            ]
-          },
-          "description": "The display name of the label."
-        },
-        "messagesTotal": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The total number of messages with the label."
-        },
-        "type": {
-          "enumDescriptions": [
-            "Labels created by Gmail.",
-            "Custom labels created by the user or application."
-          ],
-          "description": "The owner type for the label. User labels are created by the user and can be modified and deleted by the user and can be applied to any message or thread. System labels are internally created and cannot be added, modified, or deleted. System labels may be able to be applied to or removed from messages and threads under some circumstances but this is not guaranteed. For example, users can apply and remove the `INBOX` and `UNREAD` labels from messages and threads, but cannot apply or remove the `DRAFTS` or `SENT` labels from messages or threads.",
-          "type": "string",
-          "enum": [
-            "system",
-            "user"
-          ]
-        },
-        "labelListVisibility": {
-          "description": "The visibility of the label in the label list in the Gmail web interface.",
-          "annotations": {
-            "required": [
-              "gmail.users.labels.create",
-              "gmail.users.labels.update"
-            ]
-          },
-          "enumDescriptions": [
-            "Show the label in the label list.",
-            "Show the label if there are any unread messages with that label.",
-            "Do not show the label in the label list."
-          ],
-          "type": "string",
-          "enum": [
-            "labelShow",
-            "labelShowIfUnread",
-            "labelHide"
-          ]
-        },
-        "messagesUnread": {
-          "description": "The number of unread messages with the label.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "threadsUnread": {
-          "description": "The number of unread threads with the label.",
-          "type": "integer",
-          "format": "int32"
-        }
-      }
-    }
-  },
-  "id": "gmail:v1",
-  "discoveryVersion": "v1",
-  "documentationLink": "https://developers.google.com/gmail/api/",
-  "baseUrl": "https://gmail.googleapis.com/",
-  "revision": "20200919",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/gmail.addons.current.action.compose": {
-          "description": "Manage drafts and send emails when you interact with the add-on"
-        },
-        "https://www.googleapis.com/auth/gmail.insert": {
-          "description": "Insert mail into your mailbox"
-        },
-        "https://www.googleapis.com/auth/gmail.addons.current.message.readonly": {
-          "description": "View your email messages when the add-on is running"
-        },
-        "https://www.googleapis.com/auth/gmail.addons.current.message.metadata": {
-          "description": "View your email message metadata when the add-on is running"
-        },
-        "https://mail.google.com/": {
-          "description": "Read, compose, send, and permanently delete all your email from Gmail"
-        },
-        "https://www.googleapis.com/auth/gmail.send": {
-          "description": "Send email on your behalf"
-        },
-        "https://www.googleapis.com/auth/gmail.compose": {
-          "description": "Manage drafts and send emails"
-        },
-        "https://www.googleapis.com/auth/gmail.settings.basic": {
-          "description": "Manage your basic mail settings"
-        },
-        "https://www.googleapis.com/auth/gmail.metadata": {
-          "description": "View your email message metadata such as labels and headers, but not the email body"
-        },
-        "https://www.googleapis.com/auth/gmail.readonly": {
-          "description": "View your email messages and settings"
-        },
-        "https://www.googleapis.com/auth/gmail.labels": {
-          "description": "Manage mailbox labels"
-        },
-        "https://www.googleapis.com/auth/gmail.addons.current.message.action": {
-          "description": "View your email messages when you interact with the add-on"
-        },
-        "https://www.googleapis.com/auth/gmail.modify": {
-          "description": "View and modify but not delete your email"
-        },
-        "https://www.googleapis.com/auth/gmail.settings.sharing": {
-          "description": "Manage your sensitive mail settings, including who can manage your mail"
-        }
-      }
-    }
-  },
-  "resources": {
-    "users": {
-      "methods": {
-        "stop": {
-          "flatPath": "gmail/v1/users/{userId}/stop",
-          "id": "gmail.users.stop",
-          "description": "Stop receiving push notifications for the given user mailbox.",
-          "scopes": [
-            "https://mail.google.com/",
-            "https://www.googleapis.com/auth/gmail.metadata",
-            "https://www.googleapis.com/auth/gmail.modify",
-            "https://www.googleapis.com/auth/gmail.readonly"
-          ],
-          "parameters": {
-            "userId": {
-              "default": "me",
-              "type": "string",
-              "required": true,
-              "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-              "location": "path"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://mail.google.com/": {
+                    "description": "Read, compose, send, and permanently delete all your email from Gmail"
+                },
+                "https://www.googleapis.com/auth/gmail.addons.current.action.compose": {
+                    "description": "Manage drafts and send emails when you interact with the add-on"
+                },
+                "https://www.googleapis.com/auth/gmail.addons.current.message.action": {
+                    "description": "View your email messages when you interact with the add-on"
+                },
+                "https://www.googleapis.com/auth/gmail.addons.current.message.metadata": {
+                    "description": "View your email message metadata when the add-on is running"
+                },
+                "https://www.googleapis.com/auth/gmail.addons.current.message.readonly": {
+                    "description": "View your email messages when the add-on is running"
+                },
+                "https://www.googleapis.com/auth/gmail.compose": {
+                    "description": "Manage drafts and send emails"
+                },
+                "https://www.googleapis.com/auth/gmail.insert": {
+                    "description": "Add emails into your Gmail mailbox"
+                },
+                "https://www.googleapis.com/auth/gmail.labels": {
+                    "description": "See and edit your email labels"
+                },
+                "https://www.googleapis.com/auth/gmail.metadata": {
+                    "description": "View your email message metadata such as labels and headers, but not the email body"
+                },
+                "https://www.googleapis.com/auth/gmail.modify": {
+                    "description": "View and modify but not delete your email"
+                },
+                "https://www.googleapis.com/auth/gmail.readonly": {
+                    "description": "View your email messages and settings"
+                },
+                "https://www.googleapis.com/auth/gmail.send": {
+                    "description": "Send email on your behalf"
+                },
+                "https://www.googleapis.com/auth/gmail.settings.basic": {
+                    "description": "See, edit, create, or change your email settings and filters in Gmail"
+                },
+                "https://www.googleapis.com/auth/gmail.settings.sharing": {
+                    "description": "Manage your sensitive mail settings, including who can manage your mail"
+                }
             }
-          },
-          "httpMethod": "POST",
-          "path": "gmail/v1/users/{userId}/stop",
-          "parameterOrder": [
-            "userId"
-          ]
-        },
-        "watch": {
-          "description": "Set up or update a push notification watch on the given user mailbox.",
-          "httpMethod": "POST",
-          "scopes": [
-            "https://mail.google.com/",
-            "https://www.googleapis.com/auth/gmail.metadata",
-            "https://www.googleapis.com/auth/gmail.modify",
-            "https://www.googleapis.com/auth/gmail.readonly"
-          ],
-          "id": "gmail.users.watch",
-          "parameters": {
-            "userId": {
-              "location": "path",
-              "default": "me",
-              "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-              "type": "string",
-              "required": true
-            }
-          },
-          "request": {
-            "$ref": "WatchRequest"
-          },
-          "flatPath": "gmail/v1/users/{userId}/watch",
-          "parameterOrder": [
-            "userId"
-          ],
-          "path": "gmail/v1/users/{userId}/watch",
-          "response": {
-            "$ref": "WatchResponse"
-          }
-        },
-        "getProfile": {
-          "parameters": {
-            "userId": {
-              "default": "me",
-              "type": "string",
-              "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-              "location": "path",
-              "required": true
-            }
-          },
-          "scopes": [
-            "https://mail.google.com/",
-            "https://www.googleapis.com/auth/gmail.compose",
-            "https://www.googleapis.com/auth/gmail.metadata",
-            "https://www.googleapis.com/auth/gmail.modify",
-            "https://www.googleapis.com/auth/gmail.readonly"
-          ],
-          "path": "gmail/v1/users/{userId}/profile",
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "Profile"
-          },
-          "id": "gmail.users.getProfile",
-          "flatPath": "gmail/v1/users/{userId}/profile",
-          "parameterOrder": [
-            "userId"
-          ],
-          "description": "Gets the current user's Gmail profile."
         }
-      },
-      "resources": {
-        "labels": {
-          "methods": {
-            "patch": {
-              "parameterOrder": [
-                "userId",
-                "id"
-              ],
-              "path": "gmail/v1/users/{userId}/labels/{id}",
-              "request": {
-                "$ref": "Label"
-              },
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.labels",
-                "https://www.googleapis.com/auth/gmail.modify"
-              ],
-              "flatPath": "gmail/v1/users/{userId}/labels/{id}",
-              "httpMethod": "PATCH",
-              "description": "Patch the specified label.",
-              "parameters": {
-                "userId": {
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "location": "path",
-                  "required": true,
-                  "default": "me",
-                  "type": "string"
+    },
+    "basePath": "",
+    "baseUrl": "https://gmail.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Gmail",
+    "description": "The Gmail API lets you view and manage Gmail mailbox data like threads, messages, and labels.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://developers.google.com/gmail/api/",
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "gmail:v1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://gmail.mtls.googleapis.com/",
+    "name": "gmail",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        }
+    },
+    "protocol": "rest",
+    "resources": {
+        "users": {
+            "methods": {
+                "getProfile": {
+                    "description": "Gets the current user's Gmail profile.",
+                    "flatPath": "gmail/v1/users/{userId}/profile",
+                    "httpMethod": "GET",
+                    "id": "gmail.users.getProfile",
+                    "parameterOrder": [
+                        "userId"
+                    ],
+                    "parameters": {
+                        "userId": {
+                            "default": "me",
+                            "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "gmail/v1/users/{userId}/profile",
+                    "response": {
+                        "$ref": "Profile"
+                    },
+                    "scopes": [
+                        "https://mail.google.com/",
+                        "https://www.googleapis.com/auth/gmail.compose",
+                        "https://www.googleapis.com/auth/gmail.metadata",
+                        "https://www.googleapis.com/auth/gmail.modify",
+                        "https://www.googleapis.com/auth/gmail.readonly"
+                    ]
+                },
+                "stop": {
+                    "description": "Stop receiving push notifications for the given user mailbox.",
+                    "flatPath": "gmail/v1/users/{userId}/stop",
+                    "httpMethod": "POST",
+                    "id": "gmail.users.stop",
+                    "parameterOrder": [
+                        "userId"
+                    ],
+                    "parameters": {
+                        "userId": {
+                            "default": "me",
+                            "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "gmail/v1/users/{userId}/stop",
+                    "scopes": [
+                        "https://mail.google.com/",
+                        "https://www.googleapis.com/auth/gmail.metadata",
+                        "https://www.googleapis.com/auth/gmail.modify",
+                        "https://www.googleapis.com/auth/gmail.readonly"
+                    ]
+                },
+                "watch": {
+                    "description": "Set up or update a push notification watch on the given user mailbox.",
+                    "flatPath": "gmail/v1/users/{userId}/watch",
+                    "httpMethod": "POST",
+                    "id": "gmail.users.watch",
+                    "parameterOrder": [
+                        "userId"
+                    ],
+                    "parameters": {
+                        "userId": {
+                            "default": "me",
+                            "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "gmail/v1/users/{userId}/watch",
+                    "request": {
+                        "$ref": "WatchRequest"
+                    },
+                    "response": {
+                        "$ref": "WatchResponse"
+                    },
+                    "scopes": [
+                        "https://mail.google.com/",
+                        "https://www.googleapis.com/auth/gmail.metadata",
+                        "https://www.googleapis.com/auth/gmail.modify",
+                        "https://www.googleapis.com/auth/gmail.readonly"
+                    ]
+                }
+            },
+            "resources": {
+                "drafts": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a new draft with the `DRAFT` label.",
+                            "flatPath": "gmail/v1/users/{userId}/drafts",
+                            "httpMethod": "POST",
+                            "id": "gmail.users.drafts.create",
+                            "mediaUpload": {
+                                "accept": [
+                                    "message/*"
+                                ],
+                                "maxSize": "36700160",
+                                "protocols": {
+                                    "resumable": {
+                                        "multipart": true,
+                                        "path": "/resumable/upload/gmail/v1/users/{userId}/drafts"
+                                    },
+                                    "simple": {
+                                        "multipart": true,
+                                        "path": "/upload/gmail/v1/users/{userId}/drafts"
+                                    }
+                                }
+                            },
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/drafts",
+                            "request": {
+                                "$ref": "Draft"
+                            },
+                            "response": {
+                                "$ref": "Draft"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.addons.current.action.compose",
+                                "https://www.googleapis.com/auth/gmail.compose",
+                                "https://www.googleapis.com/auth/gmail.modify"
+                            ],
+                            "supportsMediaUpload": true
+                        },
+                        "delete": {
+                            "description": "Immediately and permanently deletes the specified draft. Does not simply trash it.",
+                            "flatPath": "gmail/v1/users/{userId}/drafts/{id}",
+                            "httpMethod": "DELETE",
+                            "id": "gmail.users.drafts.delete",
+                            "parameterOrder": [
+                                "userId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "id": {
+                                    "description": "The ID of the draft to delete.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/drafts/{id}",
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.addons.current.action.compose",
+                                "https://www.googleapis.com/auth/gmail.compose",
+                                "https://www.googleapis.com/auth/gmail.modify"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets the specified draft.",
+                            "flatPath": "gmail/v1/users/{userId}/drafts/{id}",
+                            "httpMethod": "GET",
+                            "id": "gmail.users.drafts.get",
+                            "parameterOrder": [
+                                "userId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "format": {
+                                    "default": "full",
+                                    "description": "The format to return the draft in.",
+                                    "enum": [
+                                        "minimal",
+                                        "full",
+                                        "raw",
+                                        "metadata"
+                                    ],
+                                    "enumDescriptions": [
+                                        "Returns only email message ID and labels; does not return the email headers, body, or payload.",
+                                        "Returns the full email message data with body content parsed in the `payload` field; the `raw` field is not used. Format cannot be used when accessing the api using the gmail.metadata scope.",
+                                        "Returns the full email message data with body content in the `raw` field as a base64url encoded string; the `payload` field is not used. Format cannot be used when accessing the api using the gmail.metadata scope.",
+                                        "Returns only email message ID, labels, and email headers."
+                                    ],
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "id": {
+                                    "description": "The ID of the draft to retrieve.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/drafts/{id}",
+                            "response": {
+                                "$ref": "Draft"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.compose",
+                                "https://www.googleapis.com/auth/gmail.modify",
+                                "https://www.googleapis.com/auth/gmail.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists the drafts in the user's mailbox.",
+                            "flatPath": "gmail/v1/users/{userId}/drafts",
+                            "httpMethod": "GET",
+                            "id": "gmail.users.drafts.list",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "includeSpamTrash": {
+                                    "default": "false",
+                                    "description": "Include drafts from `SPAM` and `TRASH` in the results.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "maxResults": {
+                                    "default": "100",
+                                    "description": "Maximum number of drafts to return.",
+                                    "format": "uint32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Page token to retrieve a specific page of results in the list.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "q": {
+                                    "description": "Only return draft messages matching the specified query. Supports the same query format as the Gmail search box. For example, `\"from:someuser@example.com rfc822msgid: is:unread\"`.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/drafts",
+                            "response": {
+                                "$ref": "ListDraftsResponse"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.compose",
+                                "https://www.googleapis.com/auth/gmail.modify",
+                                "https://www.googleapis.com/auth/gmail.readonly"
+                            ]
+                        },
+                        "send": {
+                            "description": "Sends the specified, existing draft to the recipients in the `To`, `Cc`, and `Bcc` headers.",
+                            "flatPath": "gmail/v1/users/{userId}/drafts/send",
+                            "httpMethod": "POST",
+                            "id": "gmail.users.drafts.send",
+                            "mediaUpload": {
+                                "accept": [
+                                    "message/*"
+                                ],
+                                "maxSize": "36700160",
+                                "protocols": {
+                                    "resumable": {
+                                        "multipart": true,
+                                        "path": "/resumable/upload/gmail/v1/users/{userId}/drafts/send"
+                                    },
+                                    "simple": {
+                                        "multipart": true,
+                                        "path": "/upload/gmail/v1/users/{userId}/drafts/send"
+                                    }
+                                }
+                            },
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/drafts/send",
+                            "request": {
+                                "$ref": "Draft"
+                            },
+                            "response": {
+                                "$ref": "Message"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.addons.current.action.compose",
+                                "https://www.googleapis.com/auth/gmail.compose",
+                                "https://www.googleapis.com/auth/gmail.modify"
+                            ],
+                            "supportsMediaUpload": true
+                        },
+                        "update": {
+                            "description": "Replaces a draft's content.",
+                            "flatPath": "gmail/v1/users/{userId}/drafts/{id}",
+                            "httpMethod": "PUT",
+                            "id": "gmail.users.drafts.update",
+                            "mediaUpload": {
+                                "accept": [
+                                    "message/*"
+                                ],
+                                "maxSize": "36700160",
+                                "protocols": {
+                                    "resumable": {
+                                        "multipart": true,
+                                        "path": "/resumable/upload/gmail/v1/users/{userId}/drafts/{id}"
+                                    },
+                                    "simple": {
+                                        "multipart": true,
+                                        "path": "/upload/gmail/v1/users/{userId}/drafts/{id}"
+                                    }
+                                }
+                            },
+                            "parameterOrder": [
+                                "userId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "id": {
+                                    "description": "The ID of the draft to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/drafts/{id}",
+                            "request": {
+                                "$ref": "Draft"
+                            },
+                            "response": {
+                                "$ref": "Draft"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.addons.current.action.compose",
+                                "https://www.googleapis.com/auth/gmail.compose",
+                                "https://www.googleapis.com/auth/gmail.modify"
+                            ],
+                            "supportsMediaUpload": true
+                        }
+                    }
+                },
+                "history": {
+                    "methods": {
+                        "list": {
+                            "description": "Lists the history of all changes to the given mailbox. History results are returned in chronological order (increasing `historyId`).",
+                            "flatPath": "gmail/v1/users/{userId}/history",
+                            "httpMethod": "GET",
+                            "id": "gmail.users.history.list",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "historyTypes": {
+                                    "description": "History types to be returned by the function",
+                                    "enum": [
+                                        "messageAdded",
+                                        "messageDeleted",
+                                        "labelAdded",
+                                        "labelRemoved"
+                                    ],
+                                    "enumDescriptions": [
+                                        "",
+                                        "",
+                                        "",
+                                        ""
+                                    ],
+                                    "location": "query",
+                                    "repeated": true,
+                                    "type": "string"
+                                },
+                                "labelId": {
+                                    "description": "Only return messages with a label matching the ID.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "maxResults": {
+                                    "default": "100",
+                                    "description": "The maximum number of history records to return.",
+                                    "format": "uint32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Page token to retrieve a specific page of results in the list.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "startHistoryId": {
+                                    "description": "Required. Returns history records after the specified `startHistoryId`. The supplied `startHistoryId` should be obtained from the `historyId` of a message, thread, or previous `list` response. History IDs increase chronologically but are not contiguous with random gaps in between valid IDs. Supplying an invalid or out of date `startHistoryId` typically returns an `HTTP 404` error code. A `historyId` is typically valid for at least a week, but in some rare circumstances may be valid for only a few hours. If you receive an `HTTP 404` error response, your application should perform a full sync. If you receive no `nextPageToken` in the response, there are no updates to retrieve and you can store the returned `historyId` for a future request.",
+                                    "format": "uint64",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/history",
+                            "response": {
+                                "$ref": "ListHistoryResponse"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.metadata",
+                                "https://www.googleapis.com/auth/gmail.modify",
+                                "https://www.googleapis.com/auth/gmail.readonly"
+                            ]
+                        }
+                    }
+                },
+                "labels": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a new label.",
+                            "flatPath": "gmail/v1/users/{userId}/labels",
+                            "httpMethod": "POST",
+                            "id": "gmail.users.labels.create",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/labels",
+                            "request": {
+                                "$ref": "Label"
+                            },
+                            "response": {
+                                "$ref": "Label"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.labels",
+                                "https://www.googleapis.com/auth/gmail.modify"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Immediately and permanently deletes the specified label and removes it from any messages and threads that it is applied to.",
+                            "flatPath": "gmail/v1/users/{userId}/labels/{id}",
+                            "httpMethod": "DELETE",
+                            "id": "gmail.users.labels.delete",
+                            "parameterOrder": [
+                                "userId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "id": {
+                                    "description": "The ID of the label to delete.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/labels/{id}",
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.labels",
+                                "https://www.googleapis.com/auth/gmail.modify"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets the specified label.",
+                            "flatPath": "gmail/v1/users/{userId}/labels/{id}",
+                            "httpMethod": "GET",
+                            "id": "gmail.users.labels.get",
+                            "parameterOrder": [
+                                "userId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "id": {
+                                    "description": "The ID of the label to retrieve.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/labels/{id}",
+                            "response": {
+                                "$ref": "Label"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.labels",
+                                "https://www.googleapis.com/auth/gmail.metadata",
+                                "https://www.googleapis.com/auth/gmail.modify",
+                                "https://www.googleapis.com/auth/gmail.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists all labels in the user's mailbox.",
+                            "flatPath": "gmail/v1/users/{userId}/labels",
+                            "httpMethod": "GET",
+                            "id": "gmail.users.labels.list",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/labels",
+                            "response": {
+                                "$ref": "ListLabelsResponse"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.labels",
+                                "https://www.googleapis.com/auth/gmail.metadata",
+                                "https://www.googleapis.com/auth/gmail.modify",
+                                "https://www.googleapis.com/auth/gmail.readonly"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Patch the specified label.",
+                            "flatPath": "gmail/v1/users/{userId}/labels/{id}",
+                            "httpMethod": "PATCH",
+                            "id": "gmail.users.labels.patch",
+                            "parameterOrder": [
+                                "userId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "id": {
+                                    "description": "The ID of the label to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/labels/{id}",
+                            "request": {
+                                "$ref": "Label"
+                            },
+                            "response": {
+                                "$ref": "Label"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.labels",
+                                "https://www.googleapis.com/auth/gmail.modify"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates the specified label.",
+                            "flatPath": "gmail/v1/users/{userId}/labels/{id}",
+                            "httpMethod": "PUT",
+                            "id": "gmail.users.labels.update",
+                            "parameterOrder": [
+                                "userId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "id": {
+                                    "description": "The ID of the label to update.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/labels/{id}",
+                            "request": {
+                                "$ref": "Label"
+                            },
+                            "response": {
+                                "$ref": "Label"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.labels",
+                                "https://www.googleapis.com/auth/gmail.modify"
+                            ]
+                        }
+                    }
+                },
+                "messages": {
+                    "methods": {
+                        "batchDelete": {
+                            "description": "Deletes many messages by message ID. Provides no guarantees that messages were not already deleted or even existed at all.",
+                            "flatPath": "gmail/v1/users/{userId}/messages/batchDelete",
+                            "httpMethod": "POST",
+                            "id": "gmail.users.messages.batchDelete",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/messages/batchDelete",
+                            "request": {
+                                "$ref": "BatchDeleteMessagesRequest"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/"
+                            ]
+                        },
+                        "batchModify": {
+                            "description": "Modifies the labels on the specified messages.",
+                            "flatPath": "gmail/v1/users/{userId}/messages/batchModify",
+                            "httpMethod": "POST",
+                            "id": "gmail.users.messages.batchModify",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/messages/batchModify",
+                            "request": {
+                                "$ref": "BatchModifyMessagesRequest"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.modify"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Immediately and permanently deletes the specified message. This operation cannot be undone. Prefer `messages.trash` instead.",
+                            "flatPath": "gmail/v1/users/{userId}/messages/{id}",
+                            "httpMethod": "DELETE",
+                            "id": "gmail.users.messages.delete",
+                            "parameterOrder": [
+                                "userId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "id": {
+                                    "description": "The ID of the message to delete.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/messages/{id}",
+                            "scopes": [
+                                "https://mail.google.com/"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets the specified message.",
+                            "flatPath": "gmail/v1/users/{userId}/messages/{id}",
+                            "httpMethod": "GET",
+                            "id": "gmail.users.messages.get",
+                            "parameterOrder": [
+                                "userId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "format": {
+                                    "default": "full",
+                                    "description": "The format to return the message in.",
+                                    "enum": [
+                                        "minimal",
+                                        "full",
+                                        "raw",
+                                        "metadata"
+                                    ],
+                                    "enumDescriptions": [
+                                        "Returns only email message ID and labels; does not return the email headers, body, or payload.",
+                                        "Returns the full email message data with body content parsed in the `payload` field; the `raw` field is not used. Format cannot be used when accessing the api using the gmail.metadata scope.",
+                                        "Returns the full email message data with body content in the `raw` field as a base64url encoded string; the `payload` field is not used. Format cannot be used when accessing the api using the gmail.metadata scope.",
+                                        "Returns only email message ID, labels, and email headers."
+                                    ],
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "id": {
+                                    "description": "The ID of the message to retrieve. This ID is usually retrieved using `messages.list`. The ID is also contained in the result when a message is inserted (`messages.insert`) or imported (`messages.import`).",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "metadataHeaders": {
+                                    "description": "When given and format is `METADATA`, only include headers specified.",
+                                    "location": "query",
+                                    "repeated": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/messages/{id}",
+                            "response": {
+                                "$ref": "Message"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.addons.current.message.action",
+                                "https://www.googleapis.com/auth/gmail.addons.current.message.metadata",
+                                "https://www.googleapis.com/auth/gmail.addons.current.message.readonly",
+                                "https://www.googleapis.com/auth/gmail.metadata",
+                                "https://www.googleapis.com/auth/gmail.modify",
+                                "https://www.googleapis.com/auth/gmail.readonly"
+                            ]
+                        },
+                        "import": {
+                            "description": "Imports a message into only this user's mailbox, with standard email delivery scanning and classification similar to receiving via SMTP. Does not send a message. Note: This function doesn't trigger forwarding rules or filters set up by the user.",
+                            "flatPath": "gmail/v1/users/{userId}/messages/import",
+                            "httpMethod": "POST",
+                            "id": "gmail.users.messages.import",
+                            "mediaUpload": {
+                                "accept": [
+                                    "message/*"
+                                ],
+                                "maxSize": "52428800",
+                                "protocols": {
+                                    "resumable": {
+                                        "multipart": true,
+                                        "path": "/resumable/upload/gmail/v1/users/{userId}/messages/import"
+                                    },
+                                    "simple": {
+                                        "multipart": true,
+                                        "path": "/upload/gmail/v1/users/{userId}/messages/import"
+                                    }
+                                }
+                            },
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "deleted": {
+                                    "default": "false",
+                                    "description": "Mark the email as permanently deleted (not TRASH) and only visible in Google Vault to a Vault administrator. Only used for G Suite accounts.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "internalDateSource": {
+                                    "default": "dateHeader",
+                                    "description": "Source for Gmail's internal date of the message.",
+                                    "enum": [
+                                        "receivedTime",
+                                        "dateHeader"
+                                    ],
+                                    "enumDescriptions": [
+                                        "Internal message date set to current time when received by Gmail.",
+                                        "Internal message time based on 'Date' header in email, when valid."
+                                    ],
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "neverMarkSpam": {
+                                    "default": "false",
+                                    "description": "Ignore the Gmail spam classifier decision and never mark this email as SPAM in the mailbox.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "processForCalendar": {
+                                    "default": "false",
+                                    "description": "Process calendar invites in the email and add any extracted meetings to the Google Calendar for this user.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/messages/import",
+                            "request": {
+                                "$ref": "Message"
+                            },
+                            "response": {
+                                "$ref": "Message"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.insert",
+                                "https://www.googleapis.com/auth/gmail.modify"
+                            ],
+                            "supportsMediaUpload": true
+                        },
+                        "insert": {
+                            "description": "Directly inserts a message into only this user's mailbox similar to `IMAP APPEND`, bypassing most scanning and classification. Does not send a message.",
+                            "flatPath": "gmail/v1/users/{userId}/messages",
+                            "httpMethod": "POST",
+                            "id": "gmail.users.messages.insert",
+                            "mediaUpload": {
+                                "accept": [
+                                    "message/*"
+                                ],
+                                "maxSize": "52428800",
+                                "protocols": {
+                                    "resumable": {
+                                        "multipart": true,
+                                        "path": "/resumable/upload/gmail/v1/users/{userId}/messages"
+                                    },
+                                    "simple": {
+                                        "multipart": true,
+                                        "path": "/upload/gmail/v1/users/{userId}/messages"
+                                    }
+                                }
+                            },
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "deleted": {
+                                    "default": "false",
+                                    "description": "Mark the email as permanently deleted (not TRASH) and only visible in Google Vault to a Vault administrator. Only used for G Suite accounts.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "internalDateSource": {
+                                    "default": "receivedTime",
+                                    "description": "Source for Gmail's internal date of the message.",
+                                    "enum": [
+                                        "receivedTime",
+                                        "dateHeader"
+                                    ],
+                                    "enumDescriptions": [
+                                        "Internal message date set to current time when received by Gmail.",
+                                        "Internal message time based on 'Date' header in email, when valid."
+                                    ],
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/messages",
+                            "request": {
+                                "$ref": "Message"
+                            },
+                            "response": {
+                                "$ref": "Message"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.insert",
+                                "https://www.googleapis.com/auth/gmail.modify"
+                            ],
+                            "supportsMediaUpload": true
+                        },
+                        "list": {
+                            "description": "Lists the messages in the user's mailbox.",
+                            "flatPath": "gmail/v1/users/{userId}/messages",
+                            "httpMethod": "GET",
+                            "id": "gmail.users.messages.list",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "includeSpamTrash": {
+                                    "default": "false",
+                                    "description": "Include messages from `SPAM` and `TRASH` in the results.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "labelIds": {
+                                    "description": "Only return messages with labels that match all of the specified label IDs.",
+                                    "location": "query",
+                                    "repeated": true,
+                                    "type": "string"
+                                },
+                                "maxResults": {
+                                    "default": "100",
+                                    "description": "Maximum number of messages to return.",
+                                    "format": "uint32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Page token to retrieve a specific page of results in the list.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "q": {
+                                    "description": "Only return messages matching the specified query. Supports the same query format as the Gmail search box. For example, `\"from:someuser@example.com rfc822msgid: is:unread\"`. Parameter cannot be used when accessing the api using the gmail.metadata scope.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/messages",
+                            "response": {
+                                "$ref": "ListMessagesResponse"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.metadata",
+                                "https://www.googleapis.com/auth/gmail.modify",
+                                "https://www.googleapis.com/auth/gmail.readonly"
+                            ]
+                        },
+                        "modify": {
+                            "description": "Modifies the labels on the specified message.",
+                            "flatPath": "gmail/v1/users/{userId}/messages/{id}/modify",
+                            "httpMethod": "POST",
+                            "id": "gmail.users.messages.modify",
+                            "parameterOrder": [
+                                "userId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "id": {
+                                    "description": "The ID of the message to modify.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/messages/{id}/modify",
+                            "request": {
+                                "$ref": "ModifyMessageRequest"
+                            },
+                            "response": {
+                                "$ref": "Message"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.modify"
+                            ]
+                        },
+                        "send": {
+                            "description": "Sends the specified message to the recipients in the `To`, `Cc`, and `Bcc` headers.",
+                            "flatPath": "gmail/v1/users/{userId}/messages/send",
+                            "httpMethod": "POST",
+                            "id": "gmail.users.messages.send",
+                            "mediaUpload": {
+                                "accept": [
+                                    "message/*"
+                                ],
+                                "maxSize": "36700160",
+                                "protocols": {
+                                    "resumable": {
+                                        "multipart": true,
+                                        "path": "/resumable/upload/gmail/v1/users/{userId}/messages/send"
+                                    },
+                                    "simple": {
+                                        "multipart": true,
+                                        "path": "/upload/gmail/v1/users/{userId}/messages/send"
+                                    }
+                                }
+                            },
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/messages/send",
+                            "request": {
+                                "$ref": "Message"
+                            },
+                            "response": {
+                                "$ref": "Message"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.addons.current.action.compose",
+                                "https://www.googleapis.com/auth/gmail.compose",
+                                "https://www.googleapis.com/auth/gmail.modify",
+                                "https://www.googleapis.com/auth/gmail.send"
+                            ],
+                            "supportsMediaUpload": true
+                        },
+                        "trash": {
+                            "description": "Moves the specified message to the trash.",
+                            "flatPath": "gmail/v1/users/{userId}/messages/{id}/trash",
+                            "httpMethod": "POST",
+                            "id": "gmail.users.messages.trash",
+                            "parameterOrder": [
+                                "userId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "id": {
+                                    "description": "The ID of the message to Trash.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/messages/{id}/trash",
+                            "response": {
+                                "$ref": "Message"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.modify"
+                            ]
+                        },
+                        "untrash": {
+                            "description": "Removes the specified message from the trash.",
+                            "flatPath": "gmail/v1/users/{userId}/messages/{id}/untrash",
+                            "httpMethod": "POST",
+                            "id": "gmail.users.messages.untrash",
+                            "parameterOrder": [
+                                "userId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "id": {
+                                    "description": "The ID of the message to remove from Trash.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/messages/{id}/untrash",
+                            "response": {
+                                "$ref": "Message"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.modify"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "attachments": {
+                            "methods": {
+                                "get": {
+                                    "description": "Gets the specified message attachment.",
+                                    "flatPath": "gmail/v1/users/{userId}/messages/{messageId}/attachments/{id}",
+                                    "httpMethod": "GET",
+                                    "id": "gmail.users.messages.attachments.get",
+                                    "parameterOrder": [
+                                        "userId",
+                                        "messageId",
+                                        "id"
+                                    ],
+                                    "parameters": {
+                                        "id": {
+                                            "description": "The ID of the attachment.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "messageId": {
+                                            "description": "The ID of the message containing the attachment.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "userId": {
+                                            "default": "me",
+                                            "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "gmail/v1/users/{userId}/messages/{messageId}/attachments/{id}",
+                                    "response": {
+                                        "$ref": "MessagePartBody"
+                                    },
+                                    "scopes": [
+                                        "https://mail.google.com/",
+                                        "https://www.googleapis.com/auth/gmail.addons.current.message.action",
+                                        "https://www.googleapis.com/auth/gmail.addons.current.message.readonly",
+                                        "https://www.googleapis.com/auth/gmail.modify",
+                                        "https://www.googleapis.com/auth/gmail.readonly"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                },
+                "settings": {
+                    "methods": {
+                        "getAutoForwarding": {
+                            "description": "Gets the auto-forwarding setting for the specified account.",
+                            "flatPath": "gmail/v1/users/{userId}/settings/autoForwarding",
+                            "httpMethod": "GET",
+                            "id": "gmail.users.settings.getAutoForwarding",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "userId": {
+                                    "default": "me",
+                                    "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/settings/autoForwarding",
+                            "response": {
+                                "$ref": "AutoForwarding"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.modify",
+                                "https://www.googleapis.com/auth/gmail.readonly",
+                                "https://www.googleapis.com/auth/gmail.settings.basic"
+                            ]
+                        },
+                        "getImap": {
+                            "description": "Gets IMAP settings.",
+                            "flatPath": "gmail/v1/users/{userId}/settings/imap",
+                            "httpMethod": "GET",
+                            "id": "gmail.users.settings.getImap",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "userId": {
+                                    "default": "me",
+                                    "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/settings/imap",
+                            "response": {
+                                "$ref": "ImapSettings"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.modify",
+                                "https://www.googleapis.com/auth/gmail.readonly",
+                                "https://www.googleapis.com/auth/gmail.settings.basic"
+                            ]
+                        },
+                        "getLanguage": {
+                            "description": "Gets language settings.",
+                            "flatPath": "gmail/v1/users/{userId}/settings/language",
+                            "httpMethod": "GET",
+                            "id": "gmail.users.settings.getLanguage",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "userId": {
+                                    "default": "me",
+                                    "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/settings/language",
+                            "response": {
+                                "$ref": "LanguageSettings"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.modify",
+                                "https://www.googleapis.com/auth/gmail.readonly",
+                                "https://www.googleapis.com/auth/gmail.settings.basic"
+                            ]
+                        },
+                        "getPop": {
+                            "description": "Gets POP settings.",
+                            "flatPath": "gmail/v1/users/{userId}/settings/pop",
+                            "httpMethod": "GET",
+                            "id": "gmail.users.settings.getPop",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "userId": {
+                                    "default": "me",
+                                    "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/settings/pop",
+                            "response": {
+                                "$ref": "PopSettings"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.modify",
+                                "https://www.googleapis.com/auth/gmail.readonly",
+                                "https://www.googleapis.com/auth/gmail.settings.basic"
+                            ]
+                        },
+                        "getVacation": {
+                            "description": "Gets vacation responder settings.",
+                            "flatPath": "gmail/v1/users/{userId}/settings/vacation",
+                            "httpMethod": "GET",
+                            "id": "gmail.users.settings.getVacation",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "userId": {
+                                    "default": "me",
+                                    "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/settings/vacation",
+                            "response": {
+                                "$ref": "VacationSettings"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.modify",
+                                "https://www.googleapis.com/auth/gmail.readonly",
+                                "https://www.googleapis.com/auth/gmail.settings.basic"
+                            ]
+                        },
+                        "updateAutoForwarding": {
+                            "description": "Updates the auto-forwarding setting for the specified account. A verified forwarding address must be specified when auto-forwarding is enabled. This method is only available to service account clients that have been delegated domain-wide authority.",
+                            "flatPath": "gmail/v1/users/{userId}/settings/autoForwarding",
+                            "httpMethod": "PUT",
+                            "id": "gmail.users.settings.updateAutoForwarding",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "userId": {
+                                    "default": "me",
+                                    "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/settings/autoForwarding",
+                            "request": {
+                                "$ref": "AutoForwarding"
+                            },
+                            "response": {
+                                "$ref": "AutoForwarding"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/gmail.settings.sharing"
+                            ]
+                        },
+                        "updateImap": {
+                            "description": "Updates IMAP settings.",
+                            "flatPath": "gmail/v1/users/{userId}/settings/imap",
+                            "httpMethod": "PUT",
+                            "id": "gmail.users.settings.updateImap",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "userId": {
+                                    "default": "me",
+                                    "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/settings/imap",
+                            "request": {
+                                "$ref": "ImapSettings"
+                            },
+                            "response": {
+                                "$ref": "ImapSettings"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/gmail.settings.basic"
+                            ]
+                        },
+                        "updateLanguage": {
+                            "description": "Updates language settings. If successful, the return object contains the `displayLanguage` that was saved for the user, which may differ from the value passed into the request. This is because the requested `displayLanguage` may not be directly supported by Gmail but have a close variant that is, and so the variant may be chosen and saved instead.",
+                            "flatPath": "gmail/v1/users/{userId}/settings/language",
+                            "httpMethod": "PUT",
+                            "id": "gmail.users.settings.updateLanguage",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "userId": {
+                                    "default": "me",
+                                    "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/settings/language",
+                            "request": {
+                                "$ref": "LanguageSettings"
+                            },
+                            "response": {
+                                "$ref": "LanguageSettings"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/gmail.settings.basic"
+                            ]
+                        },
+                        "updatePop": {
+                            "description": "Updates POP settings.",
+                            "flatPath": "gmail/v1/users/{userId}/settings/pop",
+                            "httpMethod": "PUT",
+                            "id": "gmail.users.settings.updatePop",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "userId": {
+                                    "default": "me",
+                                    "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/settings/pop",
+                            "request": {
+                                "$ref": "PopSettings"
+                            },
+                            "response": {
+                                "$ref": "PopSettings"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/gmail.settings.basic"
+                            ]
+                        },
+                        "updateVacation": {
+                            "description": "Updates vacation responder settings.",
+                            "flatPath": "gmail/v1/users/{userId}/settings/vacation",
+                            "httpMethod": "PUT",
+                            "id": "gmail.users.settings.updateVacation",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "userId": {
+                                    "default": "me",
+                                    "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/settings/vacation",
+                            "request": {
+                                "$ref": "VacationSettings"
+                            },
+                            "response": {
+                                "$ref": "VacationSettings"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/gmail.settings.basic"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "delegates": {
+                            "methods": {
+                                "create": {
+                                    "description": "Adds a delegate with its verification status set directly to `accepted`, without sending any verification email. The delegate user must be a member of the same G Suite organization as the delegator user. Gmail imposes limitations on the number of delegates and delegators each user in a G Suite organization can have. These limits depend on your organization, but in general each user can have up to 25 delegates and up to 10 delegators. Note that a delegate user must be referred to by their primary email address, and not an email alias. Also note that when a new delegate is created, there may be up to a one minute delay before the new delegate is available for use. This method is only available to service account clients that have been delegated domain-wide authority.",
+                                    "flatPath": "gmail/v1/users/{userId}/settings/delegates",
+                                    "httpMethod": "POST",
+                                    "id": "gmail.users.settings.delegates.create",
+                                    "parameterOrder": [
+                                        "userId"
+                                    ],
+                                    "parameters": {
+                                        "userId": {
+                                            "default": "me",
+                                            "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "gmail/v1/users/{userId}/settings/delegates",
+                                    "request": {
+                                        "$ref": "Delegate"
+                                    },
+                                    "response": {
+                                        "$ref": "Delegate"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/gmail.settings.sharing"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Removes the specified delegate (which can be of any verification status), and revokes any verification that may have been required for using it. Note that a delegate user must be referred to by their primary email address, and not an email alias. This method is only available to service account clients that have been delegated domain-wide authority.",
+                                    "flatPath": "gmail/v1/users/{userId}/settings/delegates/{delegateEmail}",
+                                    "httpMethod": "DELETE",
+                                    "id": "gmail.users.settings.delegates.delete",
+                                    "parameterOrder": [
+                                        "userId",
+                                        "delegateEmail"
+                                    ],
+                                    "parameters": {
+                                        "delegateEmail": {
+                                            "description": "The email address of the user to be removed as a delegate.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "userId": {
+                                            "default": "me",
+                                            "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "gmail/v1/users/{userId}/settings/delegates/{delegateEmail}",
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/gmail.settings.sharing"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets the specified delegate. Note that a delegate user must be referred to by their primary email address, and not an email alias. This method is only available to service account clients that have been delegated domain-wide authority.",
+                                    "flatPath": "gmail/v1/users/{userId}/settings/delegates/{delegateEmail}",
+                                    "httpMethod": "GET",
+                                    "id": "gmail.users.settings.delegates.get",
+                                    "parameterOrder": [
+                                        "userId",
+                                        "delegateEmail"
+                                    ],
+                                    "parameters": {
+                                        "delegateEmail": {
+                                            "description": "The email address of the user whose delegate relationship is to be retrieved.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "userId": {
+                                            "default": "me",
+                                            "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "gmail/v1/users/{userId}/settings/delegates/{delegateEmail}",
+                                    "response": {
+                                        "$ref": "Delegate"
+                                    },
+                                    "scopes": [
+                                        "https://mail.google.com/",
+                                        "https://www.googleapis.com/auth/gmail.modify",
+                                        "https://www.googleapis.com/auth/gmail.readonly",
+                                        "https://www.googleapis.com/auth/gmail.settings.basic"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists the delegates for the specified account. This method is only available to service account clients that have been delegated domain-wide authority.",
+                                    "flatPath": "gmail/v1/users/{userId}/settings/delegates",
+                                    "httpMethod": "GET",
+                                    "id": "gmail.users.settings.delegates.list",
+                                    "parameterOrder": [
+                                        "userId"
+                                    ],
+                                    "parameters": {
+                                        "userId": {
+                                            "default": "me",
+                                            "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "gmail/v1/users/{userId}/settings/delegates",
+                                    "response": {
+                                        "$ref": "ListDelegatesResponse"
+                                    },
+                                    "scopes": [
+                                        "https://mail.google.com/",
+                                        "https://www.googleapis.com/auth/gmail.modify",
+                                        "https://www.googleapis.com/auth/gmail.readonly",
+                                        "https://www.googleapis.com/auth/gmail.settings.basic"
+                                    ]
+                                }
+                            }
+                        },
+                        "filters": {
+                            "methods": {
+                                "create": {
+                                    "description": "Creates a filter. Note: you can only create a maximum of 1,000 filters.",
+                                    "flatPath": "gmail/v1/users/{userId}/settings/filters",
+                                    "httpMethod": "POST",
+                                    "id": "gmail.users.settings.filters.create",
+                                    "parameterOrder": [
+                                        "userId"
+                                    ],
+                                    "parameters": {
+                                        "userId": {
+                                            "default": "me",
+                                            "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "gmail/v1/users/{userId}/settings/filters",
+                                    "request": {
+                                        "$ref": "Filter"
+                                    },
+                                    "response": {
+                                        "$ref": "Filter"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/gmail.settings.basic"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a filter.",
+                                    "flatPath": "gmail/v1/users/{userId}/settings/filters/{id}",
+                                    "httpMethod": "DELETE",
+                                    "id": "gmail.users.settings.filters.delete",
+                                    "parameterOrder": [
+                                        "userId",
+                                        "id"
+                                    ],
+                                    "parameters": {
+                                        "id": {
+                                            "description": "The ID of the filter to be deleted.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "userId": {
+                                            "default": "me",
+                                            "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "gmail/v1/users/{userId}/settings/filters/{id}",
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/gmail.settings.basic"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets a filter.",
+                                    "flatPath": "gmail/v1/users/{userId}/settings/filters/{id}",
+                                    "httpMethod": "GET",
+                                    "id": "gmail.users.settings.filters.get",
+                                    "parameterOrder": [
+                                        "userId",
+                                        "id"
+                                    ],
+                                    "parameters": {
+                                        "id": {
+                                            "description": "The ID of the filter to be fetched.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "userId": {
+                                            "default": "me",
+                                            "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "gmail/v1/users/{userId}/settings/filters/{id}",
+                                    "response": {
+                                        "$ref": "Filter"
+                                    },
+                                    "scopes": [
+                                        "https://mail.google.com/",
+                                        "https://www.googleapis.com/auth/gmail.modify",
+                                        "https://www.googleapis.com/auth/gmail.readonly",
+                                        "https://www.googleapis.com/auth/gmail.settings.basic"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists the message filters of a Gmail user.",
+                                    "flatPath": "gmail/v1/users/{userId}/settings/filters",
+                                    "httpMethod": "GET",
+                                    "id": "gmail.users.settings.filters.list",
+                                    "parameterOrder": [
+                                        "userId"
+                                    ],
+                                    "parameters": {
+                                        "userId": {
+                                            "default": "me",
+                                            "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "gmail/v1/users/{userId}/settings/filters",
+                                    "response": {
+                                        "$ref": "ListFiltersResponse"
+                                    },
+                                    "scopes": [
+                                        "https://mail.google.com/",
+                                        "https://www.googleapis.com/auth/gmail.modify",
+                                        "https://www.googleapis.com/auth/gmail.readonly",
+                                        "https://www.googleapis.com/auth/gmail.settings.basic"
+                                    ]
+                                }
+                            }
+                        },
+                        "forwardingAddresses": {
+                            "methods": {
+                                "create": {
+                                    "description": "Creates a forwarding address. If ownership verification is required, a message will be sent to the recipient and the resource's verification status will be set to `pending`; otherwise, the resource will be created with verification status set to `accepted`. This method is only available to service account clients that have been delegated domain-wide authority.",
+                                    "flatPath": "gmail/v1/users/{userId}/settings/forwardingAddresses",
+                                    "httpMethod": "POST",
+                                    "id": "gmail.users.settings.forwardingAddresses.create",
+                                    "parameterOrder": [
+                                        "userId"
+                                    ],
+                                    "parameters": {
+                                        "userId": {
+                                            "default": "me",
+                                            "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "gmail/v1/users/{userId}/settings/forwardingAddresses",
+                                    "request": {
+                                        "$ref": "ForwardingAddress"
+                                    },
+                                    "response": {
+                                        "$ref": "ForwardingAddress"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/gmail.settings.sharing"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes the specified forwarding address and revokes any verification that may have been required. This method is only available to service account clients that have been delegated domain-wide authority.",
+                                    "flatPath": "gmail/v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}",
+                                    "httpMethod": "DELETE",
+                                    "id": "gmail.users.settings.forwardingAddresses.delete",
+                                    "parameterOrder": [
+                                        "userId",
+                                        "forwardingEmail"
+                                    ],
+                                    "parameters": {
+                                        "forwardingEmail": {
+                                            "description": "The forwarding address to be deleted.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "userId": {
+                                            "default": "me",
+                                            "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "gmail/v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}",
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/gmail.settings.sharing"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets the specified forwarding address.",
+                                    "flatPath": "gmail/v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}",
+                                    "httpMethod": "GET",
+                                    "id": "gmail.users.settings.forwardingAddresses.get",
+                                    "parameterOrder": [
+                                        "userId",
+                                        "forwardingEmail"
+                                    ],
+                                    "parameters": {
+                                        "forwardingEmail": {
+                                            "description": "The forwarding address to be retrieved.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "userId": {
+                                            "default": "me",
+                                            "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "gmail/v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}",
+                                    "response": {
+                                        "$ref": "ForwardingAddress"
+                                    },
+                                    "scopes": [
+                                        "https://mail.google.com/",
+                                        "https://www.googleapis.com/auth/gmail.modify",
+                                        "https://www.googleapis.com/auth/gmail.readonly",
+                                        "https://www.googleapis.com/auth/gmail.settings.basic"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists the forwarding addresses for the specified account.",
+                                    "flatPath": "gmail/v1/users/{userId}/settings/forwardingAddresses",
+                                    "httpMethod": "GET",
+                                    "id": "gmail.users.settings.forwardingAddresses.list",
+                                    "parameterOrder": [
+                                        "userId"
+                                    ],
+                                    "parameters": {
+                                        "userId": {
+                                            "default": "me",
+                                            "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "gmail/v1/users/{userId}/settings/forwardingAddresses",
+                                    "response": {
+                                        "$ref": "ListForwardingAddressesResponse"
+                                    },
+                                    "scopes": [
+                                        "https://mail.google.com/",
+                                        "https://www.googleapis.com/auth/gmail.modify",
+                                        "https://www.googleapis.com/auth/gmail.readonly",
+                                        "https://www.googleapis.com/auth/gmail.settings.basic"
+                                    ]
+                                }
+                            }
+                        },
+                        "sendAs": {
+                            "methods": {
+                                "create": {
+                                    "description": "Creates a custom \"from\" send-as alias. If an SMTP MSA is specified, Gmail will attempt to connect to the SMTP service to validate the configuration before creating the alias. If ownership verification is required for the alias, a message will be sent to the email address and the resource's verification status will be set to `pending`; otherwise, the resource will be created with verification status set to `accepted`. If a signature is provided, Gmail will sanitize the HTML before saving it with the alias. This method is only available to service account clients that have been delegated domain-wide authority.",
+                                    "flatPath": "gmail/v1/users/{userId}/settings/sendAs",
+                                    "httpMethod": "POST",
+                                    "id": "gmail.users.settings.sendAs.create",
+                                    "parameterOrder": [
+                                        "userId"
+                                    ],
+                                    "parameters": {
+                                        "userId": {
+                                            "default": "me",
+                                            "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "gmail/v1/users/{userId}/settings/sendAs",
+                                    "request": {
+                                        "$ref": "SendAs"
+                                    },
+                                    "response": {
+                                        "$ref": "SendAs"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/gmail.settings.sharing"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes the specified send-as alias. Revokes any verification that may have been required for using it. This method is only available to service account clients that have been delegated domain-wide authority.",
+                                    "flatPath": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}",
+                                    "httpMethod": "DELETE",
+                                    "id": "gmail.users.settings.sendAs.delete",
+                                    "parameterOrder": [
+                                        "userId",
+                                        "sendAsEmail"
+                                    ],
+                                    "parameters": {
+                                        "sendAsEmail": {
+                                            "description": "The send-as alias to be deleted.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "userId": {
+                                            "default": "me",
+                                            "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}",
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/gmail.settings.sharing"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets the specified send-as alias. Fails with an HTTP 404 error if the specified address is not a member of the collection.",
+                                    "flatPath": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}",
+                                    "httpMethod": "GET",
+                                    "id": "gmail.users.settings.sendAs.get",
+                                    "parameterOrder": [
+                                        "userId",
+                                        "sendAsEmail"
+                                    ],
+                                    "parameters": {
+                                        "sendAsEmail": {
+                                            "description": "The send-as alias to be retrieved.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "userId": {
+                                            "default": "me",
+                                            "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}",
+                                    "response": {
+                                        "$ref": "SendAs"
+                                    },
+                                    "scopes": [
+                                        "https://mail.google.com/",
+                                        "https://www.googleapis.com/auth/gmail.modify",
+                                        "https://www.googleapis.com/auth/gmail.readonly",
+                                        "https://www.googleapis.com/auth/gmail.settings.basic"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists the send-as aliases for the specified account. The result includes the primary send-as address associated with the account as well as any custom \"from\" aliases.",
+                                    "flatPath": "gmail/v1/users/{userId}/settings/sendAs",
+                                    "httpMethod": "GET",
+                                    "id": "gmail.users.settings.sendAs.list",
+                                    "parameterOrder": [
+                                        "userId"
+                                    ],
+                                    "parameters": {
+                                        "userId": {
+                                            "default": "me",
+                                            "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "gmail/v1/users/{userId}/settings/sendAs",
+                                    "response": {
+                                        "$ref": "ListSendAsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://mail.google.com/",
+                                        "https://www.googleapis.com/auth/gmail.modify",
+                                        "https://www.googleapis.com/auth/gmail.readonly",
+                                        "https://www.googleapis.com/auth/gmail.settings.basic"
+                                    ]
+                                },
+                                "patch": {
+                                    "description": "Patch the specified send-as alias.",
+                                    "flatPath": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}",
+                                    "httpMethod": "PATCH",
+                                    "id": "gmail.users.settings.sendAs.patch",
+                                    "parameterOrder": [
+                                        "userId",
+                                        "sendAsEmail"
+                                    ],
+                                    "parameters": {
+                                        "sendAsEmail": {
+                                            "description": "The send-as alias to be updated.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "userId": {
+                                            "default": "me",
+                                            "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}",
+                                    "request": {
+                                        "$ref": "SendAs"
+                                    },
+                                    "response": {
+                                        "$ref": "SendAs"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/gmail.settings.basic",
+                                        "https://www.googleapis.com/auth/gmail.settings.sharing"
+                                    ]
+                                },
+                                "update": {
+                                    "description": "Updates a send-as alias. If a signature is provided, Gmail will sanitize the HTML before saving it with the alias. Addresses other than the primary address for the account can only be updated by service account clients that have been delegated domain-wide authority.",
+                                    "flatPath": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}",
+                                    "httpMethod": "PUT",
+                                    "id": "gmail.users.settings.sendAs.update",
+                                    "parameterOrder": [
+                                        "userId",
+                                        "sendAsEmail"
+                                    ],
+                                    "parameters": {
+                                        "sendAsEmail": {
+                                            "description": "The send-as alias to be updated.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "userId": {
+                                            "default": "me",
+                                            "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}",
+                                    "request": {
+                                        "$ref": "SendAs"
+                                    },
+                                    "response": {
+                                        "$ref": "SendAs"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/gmail.settings.basic",
+                                        "https://www.googleapis.com/auth/gmail.settings.sharing"
+                                    ]
+                                },
+                                "verify": {
+                                    "description": "Sends a verification email to the specified send-as alias address. The verification status must be `pending`. This method is only available to service account clients that have been delegated domain-wide authority.",
+                                    "flatPath": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/verify",
+                                    "httpMethod": "POST",
+                                    "id": "gmail.users.settings.sendAs.verify",
+                                    "parameterOrder": [
+                                        "userId",
+                                        "sendAsEmail"
+                                    ],
+                                    "parameters": {
+                                        "sendAsEmail": {
+                                            "description": "The send-as alias to be verified.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "userId": {
+                                            "default": "me",
+                                            "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/verify",
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/gmail.settings.sharing"
+                                    ]
+                                }
+                            },
+                            "resources": {
+                                "smimeInfo": {
+                                    "methods": {
+                                        "delete": {
+                                            "description": "Deletes the specified S/MIME config for the specified send-as alias.",
+                                            "flatPath": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}",
+                                            "httpMethod": "DELETE",
+                                            "id": "gmail.users.settings.sendAs.smimeInfo.delete",
+                                            "parameterOrder": [
+                                                "userId",
+                                                "sendAsEmail",
+                                                "id"
+                                            ],
+                                            "parameters": {
+                                                "id": {
+                                                    "description": "The immutable ID for the SmimeInfo.",
+                                                    "location": "path",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "sendAsEmail": {
+                                                    "description": "The email address that appears in the \"From:\" header for mail sent using this alias.",
+                                                    "location": "path",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "userId": {
+                                                    "default": "me",
+                                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                                    "location": "path",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}",
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/gmail.settings.basic",
+                                                "https://www.googleapis.com/auth/gmail.settings.sharing"
+                                            ]
+                                        },
+                                        "get": {
+                                            "description": "Gets the specified S/MIME config for the specified send-as alias.",
+                                            "flatPath": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}",
+                                            "httpMethod": "GET",
+                                            "id": "gmail.users.settings.sendAs.smimeInfo.get",
+                                            "parameterOrder": [
+                                                "userId",
+                                                "sendAsEmail",
+                                                "id"
+                                            ],
+                                            "parameters": {
+                                                "id": {
+                                                    "description": "The immutable ID for the SmimeInfo.",
+                                                    "location": "path",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "sendAsEmail": {
+                                                    "description": "The email address that appears in the \"From:\" header for mail sent using this alias.",
+                                                    "location": "path",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "userId": {
+                                                    "default": "me",
+                                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                                    "location": "path",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}",
+                                            "response": {
+                                                "$ref": "SmimeInfo"
+                                            },
+                                            "scopes": [
+                                                "https://mail.google.com/",
+                                                "https://www.googleapis.com/auth/gmail.modify",
+                                                "https://www.googleapis.com/auth/gmail.readonly",
+                                                "https://www.googleapis.com/auth/gmail.settings.basic",
+                                                "https://www.googleapis.com/auth/gmail.settings.sharing"
+                                            ]
+                                        },
+                                        "insert": {
+                                            "description": "Insert (upload) the given S/MIME config for the specified send-as alias. Note that pkcs12 format is required for the key.",
+                                            "flatPath": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo",
+                                            "httpMethod": "POST",
+                                            "id": "gmail.users.settings.sendAs.smimeInfo.insert",
+                                            "parameterOrder": [
+                                                "userId",
+                                                "sendAsEmail"
+                                            ],
+                                            "parameters": {
+                                                "sendAsEmail": {
+                                                    "description": "The email address that appears in the \"From:\" header for mail sent using this alias.",
+                                                    "location": "path",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "userId": {
+                                                    "default": "me",
+                                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                                    "location": "path",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo",
+                                            "request": {
+                                                "$ref": "SmimeInfo"
+                                            },
+                                            "response": {
+                                                "$ref": "SmimeInfo"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/gmail.settings.basic",
+                                                "https://www.googleapis.com/auth/gmail.settings.sharing"
+                                            ]
+                                        },
+                                        "list": {
+                                            "description": "Lists S/MIME configs for the specified send-as alias.",
+                                            "flatPath": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo",
+                                            "httpMethod": "GET",
+                                            "id": "gmail.users.settings.sendAs.smimeInfo.list",
+                                            "parameterOrder": [
+                                                "userId",
+                                                "sendAsEmail"
+                                            ],
+                                            "parameters": {
+                                                "sendAsEmail": {
+                                                    "description": "The email address that appears in the \"From:\" header for mail sent using this alias.",
+                                                    "location": "path",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "userId": {
+                                                    "default": "me",
+                                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                                    "location": "path",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo",
+                                            "response": {
+                                                "$ref": "ListSmimeInfoResponse"
+                                            },
+                                            "scopes": [
+                                                "https://mail.google.com/",
+                                                "https://www.googleapis.com/auth/gmail.modify",
+                                                "https://www.googleapis.com/auth/gmail.readonly",
+                                                "https://www.googleapis.com/auth/gmail.settings.basic",
+                                                "https://www.googleapis.com/auth/gmail.settings.sharing"
+                                            ]
+                                        },
+                                        "setDefault": {
+                                            "description": "Sets the default S/MIME config for the specified send-as alias.",
+                                            "flatPath": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}/setDefault",
+                                            "httpMethod": "POST",
+                                            "id": "gmail.users.settings.sendAs.smimeInfo.setDefault",
+                                            "parameterOrder": [
+                                                "userId",
+                                                "sendAsEmail",
+                                                "id"
+                                            ],
+                                            "parameters": {
+                                                "id": {
+                                                    "description": "The immutable ID for the SmimeInfo.",
+                                                    "location": "path",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "sendAsEmail": {
+                                                    "description": "The email address that appears in the \"From:\" header for mail sent using this alias.",
+                                                    "location": "path",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "userId": {
+                                                    "default": "me",
+                                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                                    "location": "path",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}/setDefault",
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/gmail.settings.basic",
+                                                "https://www.googleapis.com/auth/gmail.settings.sharing"
+                                            ]
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                },
+                "threads": {
+                    "methods": {
+                        "delete": {
+                            "description": "Immediately and permanently deletes the specified thread. This operation cannot be undone. Prefer `threads.trash` instead.",
+                            "flatPath": "gmail/v1/users/{userId}/threads/{id}",
+                            "httpMethod": "DELETE",
+                            "id": "gmail.users.threads.delete",
+                            "parameterOrder": [
+                                "userId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "id": {
+                                    "description": "ID of the Thread to delete.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/threads/{id}",
+                            "scopes": [
+                                "https://mail.google.com/"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets the specified thread.",
+                            "flatPath": "gmail/v1/users/{userId}/threads/{id}",
+                            "httpMethod": "GET",
+                            "id": "gmail.users.threads.get",
+                            "parameterOrder": [
+                                "userId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "format": {
+                                    "default": "full",
+                                    "description": "The format to return the messages in.",
+                                    "enum": [
+                                        "full",
+                                        "metadata",
+                                        "minimal"
+                                    ],
+                                    "enumDescriptions": [
+                                        "Returns the full email message data with body content parsed in the `payload` field; the `raw` field is not used. Format cannot be used when accessing the api using the gmail.metadata scope.",
+                                        "Returns only email message IDs, labels, and email headers.",
+                                        "Returns only email message IDs and labels; does not return the email headers, body, or payload."
+                                    ],
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "id": {
+                                    "description": "The ID of the thread to retrieve.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "metadataHeaders": {
+                                    "description": "When given and format is METADATA, only include headers specified.",
+                                    "location": "query",
+                                    "repeated": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/threads/{id}",
+                            "response": {
+                                "$ref": "Thread"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.addons.current.message.action",
+                                "https://www.googleapis.com/auth/gmail.addons.current.message.metadata",
+                                "https://www.googleapis.com/auth/gmail.addons.current.message.readonly",
+                                "https://www.googleapis.com/auth/gmail.metadata",
+                                "https://www.googleapis.com/auth/gmail.modify",
+                                "https://www.googleapis.com/auth/gmail.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists the threads in the user's mailbox.",
+                            "flatPath": "gmail/v1/users/{userId}/threads",
+                            "httpMethod": "GET",
+                            "id": "gmail.users.threads.list",
+                            "parameterOrder": [
+                                "userId"
+                            ],
+                            "parameters": {
+                                "includeSpamTrash": {
+                                    "default": "false",
+                                    "description": "Include threads from `SPAM` and `TRASH` in the results.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "labelIds": {
+                                    "description": "Only return threads with labels that match all of the specified label IDs.",
+                                    "location": "query",
+                                    "repeated": true,
+                                    "type": "string"
+                                },
+                                "maxResults": {
+                                    "default": "100",
+                                    "description": "Maximum number of threads to return.",
+                                    "format": "uint32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Page token to retrieve a specific page of results in the list.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "q": {
+                                    "description": "Only return threads matching the specified query. Supports the same query format as the Gmail search box. For example, `\"from:someuser@example.com rfc822msgid: is:unread\"`. Parameter cannot be used when accessing the api using the gmail.metadata scope.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/threads",
+                            "response": {
+                                "$ref": "ListThreadsResponse"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.metadata",
+                                "https://www.googleapis.com/auth/gmail.modify",
+                                "https://www.googleapis.com/auth/gmail.readonly"
+                            ]
+                        },
+                        "modify": {
+                            "description": "Modifies the labels applied to the thread. This applies to all messages in the thread.",
+                            "flatPath": "gmail/v1/users/{userId}/threads/{id}/modify",
+                            "httpMethod": "POST",
+                            "id": "gmail.users.threads.modify",
+                            "parameterOrder": [
+                                "userId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "id": {
+                                    "description": "The ID of the thread to modify.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/threads/{id}/modify",
+                            "request": {
+                                "$ref": "ModifyThreadRequest"
+                            },
+                            "response": {
+                                "$ref": "Thread"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.modify"
+                            ]
+                        },
+                        "trash": {
+                            "description": "Moves the specified thread to the trash.",
+                            "flatPath": "gmail/v1/users/{userId}/threads/{id}/trash",
+                            "httpMethod": "POST",
+                            "id": "gmail.users.threads.trash",
+                            "parameterOrder": [
+                                "userId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "id": {
+                                    "description": "The ID of the thread to Trash.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/threads/{id}/trash",
+                            "response": {
+                                "$ref": "Thread"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.modify"
+                            ]
+                        },
+                        "untrash": {
+                            "description": "Removes the specified thread from the trash.",
+                            "flatPath": "gmail/v1/users/{userId}/threads/{id}/untrash",
+                            "httpMethod": "POST",
+                            "id": "gmail.users.threads.untrash",
+                            "parameterOrder": [
+                                "userId",
+                                "id"
+                            ],
+                            "parameters": {
+                                "id": {
+                                    "description": "The ID of the thread to remove from Trash.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "userId": {
+                                    "default": "me",
+                                    "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "gmail/v1/users/{userId}/threads/{id}/untrash",
+                            "response": {
+                                "$ref": "Thread"
+                            },
+                            "scopes": [
+                                "https://mail.google.com/",
+                                "https://www.googleapis.com/auth/gmail.modify"
+                            ]
+                        }
+                    }
+                }
+            }
+        }
+    },
+    "revision": "20210301",
+    "rootUrl": "https://gmail.googleapis.com/",
+    "schemas": {
+        "AutoForwarding": {
+            "description": "Auto-forwarding settings for an account.",
+            "id": "AutoForwarding",
+            "properties": {
+                "disposition": {
+                    "description": "The state that a message should be left in after it has been forwarded.",
+                    "enum": [
+                        "dispositionUnspecified",
+                        "leaveInInbox",
+                        "archive",
+                        "trash",
+                        "markRead"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified disposition.",
+                        "Leave the message in the `INBOX`.",
+                        "Archive the message.",
+                        "Move the message to the `TRASH`.",
+                        "Leave the message in the `INBOX` and mark it as read."
+                    ],
+                    "type": "string"
+                },
+                "emailAddress": {
+                    "description": "Email address to which all incoming messages are forwarded. This email address must be a verified member of the forwarding addresses.",
+                    "type": "string"
+                },
+                "enabled": {
+                    "description": "Whether all incoming mail is automatically forwarded to another address.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "BatchDeleteMessagesRequest": {
+            "id": "BatchDeleteMessagesRequest",
+            "properties": {
+                "ids": {
+                    "description": "The IDs of the messages to delete.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "BatchModifyMessagesRequest": {
+            "id": "BatchModifyMessagesRequest",
+            "properties": {
+                "addLabelIds": {
+                    "description": "A list of label IDs to add to messages.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "ids": {
+                    "description": "The IDs of the messages to modify. There is a limit of 1000 ids per request.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "removeLabelIds": {
+                    "description": "A list of label IDs to remove from messages.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Delegate": {
+            "description": "Settings for a delegate. Delegates can read, send, and delete messages, as well as view and add contacts, for the delegator's account. See \"Set up mail delegation\" for more information about delegates.",
+            "id": "Delegate",
+            "properties": {
+                "delegateEmail": {
+                    "description": "The email address of the delegate.",
+                    "type": "string"
+                },
+                "verificationStatus": {
+                    "description": "Indicates whether this address has been verified and can act as a delegate for the account. Read-only.",
+                    "enum": [
+                        "verificationStatusUnspecified",
+                        "accepted",
+                        "pending",
+                        "rejected",
+                        "expired"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified verification status.",
+                        "The address can act a delegate for the account.",
+                        "A verification request was mailed to the address, and the owner has not yet accepted it.",
+                        "A verification request was mailed to the address, and the owner rejected it.",
+                        "A verification request was mailed to the address, and it expired without verification."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Draft": {
+            "description": "A draft email in the user's mailbox.",
+            "id": "Draft",
+            "properties": {
+                "id": {
+                    "annotations": {
+                        "required": [
+                            "gmail.users.drafts.send"
+                        ]
+                    },
+                    "description": "The immutable ID of the draft.",
+                    "type": "string"
+                },
+                "message": {
+                    "$ref": "Message",
+                    "description": "The message content of the draft."
+                }
+            },
+            "type": "object"
+        },
+        "Filter": {
+            "description": "Resource definition for Gmail filters. Filters apply to specific messages instead of an entire email thread.",
+            "id": "Filter",
+            "properties": {
+                "action": {
+                    "$ref": "FilterAction",
+                    "description": "Action that the filter performs."
+                },
+                "criteria": {
+                    "$ref": "FilterCriteria",
+                    "description": "Matching criteria for the filter."
                 },
                 "id": {
-                  "required": true,
-                  "description": "The ID of the label to update.",
-                  "type": "string",
-                  "location": "path"
+                    "description": "The server assigned ID of the filter.",
+                    "type": "string"
                 }
-              },
-              "response": {
-                "$ref": "Label"
-              },
-              "id": "gmail.users.labels.patch"
             },
-            "delete": {
-              "httpMethod": "DELETE",
-              "path": "gmail/v1/users/{userId}/labels/{id}",
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.labels",
-                "https://www.googleapis.com/auth/gmail.modify"
-              ],
-              "id": "gmail.users.labels.delete",
-              "description": "Immediately and permanently deletes the specified label and removes it from any messages and threads that it is applied to.",
-              "flatPath": "gmail/v1/users/{userId}/labels/{id}",
-              "parameterOrder": [
-                "userId",
-                "id"
-              ],
-              "parameters": {
-                "userId": {
-                  "type": "string",
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "location": "path",
-                  "default": "me",
-                  "required": true
-                },
-                "id": {
-                  "type": "string",
-                  "location": "path",
-                  "description": "The ID of the label to delete.",
-                  "required": true
-                }
-              }
-            },
-            "create": {
-              "request": {
-                "$ref": "Label"
-              },
-              "response": {
-                "$ref": "Label"
-              },
-              "path": "gmail/v1/users/{userId}/labels",
-              "parameters": {
-                "userId": {
-                  "location": "path",
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "required": true,
-                  "type": "string",
-                  "default": "me"
-                }
-              },
-              "parameterOrder": [
-                "userId"
-              ],
-              "httpMethod": "POST",
-              "description": "Creates a new label.",
-              "id": "gmail.users.labels.create",
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.labels",
-                "https://www.googleapis.com/auth/gmail.modify"
-              ],
-              "flatPath": "gmail/v1/users/{userId}/labels"
-            },
-            "get": {
-              "path": "gmail/v1/users/{userId}/labels/{id}",
-              "flatPath": "gmail/v1/users/{userId}/labels/{id}",
-              "parameters": {
-                "userId": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "default": "me"
-                },
-                "id": {
-                  "type": "string",
-                  "location": "path",
-                  "description": "The ID of the label to retrieve.",
-                  "required": true
-                }
-              },
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "userId",
-                "id"
-              ],
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.labels",
-                "https://www.googleapis.com/auth/gmail.metadata",
-                "https://www.googleapis.com/auth/gmail.modify",
-                "https://www.googleapis.com/auth/gmail.readonly"
-              ],
-              "description": "Gets the specified label.",
-              "id": "gmail.users.labels.get",
-              "response": {
-                "$ref": "Label"
-              }
-            },
-            "list": {
-              "parameters": {
-                "userId": {
-                  "default": "me",
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user."
-                }
-              },
-              "flatPath": "gmail/v1/users/{userId}/labels",
-              "path": "gmail/v1/users/{userId}/labels",
-              "description": "Lists all labels in the user's mailbox.",
-              "id": "gmail.users.labels.list",
-              "parameterOrder": [
-                "userId"
-              ],
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.labels",
-                "https://www.googleapis.com/auth/gmail.metadata",
-                "https://www.googleapis.com/auth/gmail.modify",
-                "https://www.googleapis.com/auth/gmail.readonly"
-              ],
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "ListLabelsResponse"
-              }
-            },
-            "update": {
-              "request": {
-                "$ref": "Label"
-              },
-              "response": {
-                "$ref": "Label"
-              },
-              "id": "gmail.users.labels.update",
-              "httpMethod": "PUT",
-              "flatPath": "gmail/v1/users/{userId}/labels/{id}",
-              "description": "Updates the specified label.",
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.labels",
-                "https://www.googleapis.com/auth/gmail.modify"
-              ],
-              "path": "gmail/v1/users/{userId}/labels/{id}",
-              "parameters": {
-                "id": {
-                  "description": "The ID of the label to update.",
-                  "location": "path",
-                  "type": "string",
-                  "required": true
-                },
-                "userId": {
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "location": "path",
-                  "default": "me",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "parameterOrder": [
-                "userId",
-                "id"
-              ]
-            }
-          }
+            "type": "object"
         },
-        "history": {
-          "methods": {
-            "list": {
-              "httpMethod": "GET",
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.metadata",
-                "https://www.googleapis.com/auth/gmail.modify",
-                "https://www.googleapis.com/auth/gmail.readonly"
-              ],
-              "id": "gmail.users.history.list",
-              "path": "gmail/v1/users/{userId}/history",
-              "parameterOrder": [
-                "userId"
-              ],
-              "flatPath": "gmail/v1/users/{userId}/history",
-              "parameters": {
-                "startHistoryId": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "Required. Returns history records after the specified `startHistoryId`. The supplied `startHistoryId` should be obtained from the `historyId` of a message, thread, or previous `list` response. History IDs increase chronologically but are not contiguous with random gaps in between valid IDs. Supplying an invalid or out of date `startHistoryId` typically returns an `HTTP 404` error code. A `historyId` is typically valid for at least a week, but in some rare circumstances may be valid for only a few hours. If you receive an `HTTP 404` error response, your application should perform a full sync. If you receive no `nextPageToken` in the response, there are no updates to retrieve and you can store the returned `historyId` for a future request.",
-                  "format": "uint64"
+        "FilterAction": {
+            "description": "A set of actions to perform on a message.",
+            "id": "FilterAction",
+            "properties": {
+                "addLabelIds": {
+                    "description": "List of labels to add to the message.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
                 },
-                "historyTypes": {
-                  "enum": [
-                    "messageAdded",
-                    "messageDeleted",
-                    "labelAdded",
-                    "labelRemoved"
-                  ],
-                  "enumDescriptions": [
-                    "",
-                    "",
-                    "",
-                    ""
-                  ],
-                  "repeated": true,
-                  "description": "History types to be returned by the function",
-                  "location": "query",
-                  "type": "string"
+                "forward": {
+                    "description": "Email address that the message should be forwarded to.",
+                    "type": "string"
                 },
-                "pageToken": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "Page token to retrieve a specific page of results in the list."
-                },
-                "userId": {
-                  "default": "me",
-                  "required": true,
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "type": "string",
-                  "location": "path"
-                },
-                "maxResults": {
-                  "description": "The maximum number of history records to return.",
-                  "default": "100",
-                  "location": "query",
-                  "format": "uint32",
-                  "type": "integer"
-                },
-                "labelId": {
-                  "description": "Only return messages with a label matching the ID.",
-                  "type": "string",
-                  "location": "query"
+                "removeLabelIds": {
+                    "description": "List of labels to remove from the message.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
                 }
-              },
-              "description": "Lists the history of all changes to the given mailbox. History results are returned in chronological order (increasing `historyId`).",
-              "response": {
-                "$ref": "ListHistoryResponse"
-              }
-            }
-          }
+            },
+            "type": "object"
         },
-        "settings": {
-          "methods": {
-            "updateLanguage": {
-              "response": {
-                "$ref": "LanguageSettings"
-              },
-              "parameterOrder": [
-                "userId"
-              ],
-              "httpMethod": "PUT",
-              "path": "gmail/v1/users/{userId}/settings/language",
-              "description": "Updates language settings. If successful, the return object contains the `displayLanguage` that was saved for the user, which may differ from the value passed into the request. This is because the requested `displayLanguage` may not be directly supported by Gmail but have a close variant that is, and so the variant may be chosen and saved instead.",
-              "flatPath": "gmail/v1/users/{userId}/settings/language",
-              "scopes": [
-                "https://www.googleapis.com/auth/gmail.settings.basic"
-              ],
-              "id": "gmail.users.settings.updateLanguage",
-              "request": {
-                "$ref": "LanguageSettings"
-              },
-              "parameters": {
-                "userId": {
-                  "default": "me",
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user."
+        "FilterCriteria": {
+            "description": "Message matching criteria.",
+            "id": "FilterCriteria",
+            "properties": {
+                "excludeChats": {
+                    "description": "Whether the response should exclude chats.",
+                    "type": "boolean"
+                },
+                "from": {
+                    "description": "The sender's display name or email address.",
+                    "type": "string"
+                },
+                "hasAttachment": {
+                    "description": "Whether the message has any attachment.",
+                    "type": "boolean"
+                },
+                "negatedQuery": {
+                    "description": "Only return messages not matching the specified query. Supports the same query format as the Gmail search box. For example, `\"from:someuser@example.com rfc822msgid: is:unread\"`.",
+                    "type": "string"
+                },
+                "query": {
+                    "description": "Only return messages matching the specified query. Supports the same query format as the Gmail search box. For example, `\"from:someuser@example.com rfc822msgid: is:unread\"`.",
+                    "type": "string"
+                },
+                "size": {
+                    "description": "The size of the entire RFC822 message in bytes, including all headers and attachments.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "sizeComparison": {
+                    "description": "How the message size in bytes should be in relation to the size field.",
+                    "enum": [
+                        "unspecified",
+                        "smaller",
+                        "larger"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "Find messages smaller than the given size.",
+                        "Find messages larger than the given size."
+                    ],
+                    "type": "string"
+                },
+                "subject": {
+                    "description": "Case-insensitive phrase found in the message's subject. Trailing and leading whitespace are be trimmed and adjacent spaces are collapsed.",
+                    "type": "string"
+                },
+                "to": {
+                    "description": "The recipient's display name or email address. Includes recipients in the \"to\", \"cc\", and \"bcc\" header fields. You can use simply the local part of the email address. For example, \"example\" and \"example@\" both match \"example@gmail.com\". This field is case-insensitive.",
+                    "type": "string"
                 }
-              }
             },
-            "updateAutoForwarding": {
-              "scopes": [
-                "https://www.googleapis.com/auth/gmail.settings.sharing"
-              ],
-              "parameters": {
-                "userId": {
-                  "default": "me",
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user."
+            "type": "object"
+        },
+        "ForwardingAddress": {
+            "description": "Settings for a forwarding address.",
+            "id": "ForwardingAddress",
+            "properties": {
+                "forwardingEmail": {
+                    "description": "An email address to which messages can be forwarded.",
+                    "type": "string"
+                },
+                "verificationStatus": {
+                    "description": "Indicates whether this address has been verified and is usable for forwarding. Read-only.",
+                    "enum": [
+                        "verificationStatusUnspecified",
+                        "accepted",
+                        "pending"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified verification status.",
+                        "The address is ready to use for forwarding.",
+                        "The address is awaiting verification by the owner."
+                    ],
+                    "type": "string"
                 }
-              },
-              "request": {
-                "$ref": "AutoForwarding"
-              },
-              "flatPath": "gmail/v1/users/{userId}/settings/autoForwarding",
-              "id": "gmail.users.settings.updateAutoForwarding",
-              "httpMethod": "PUT",
-              "parameterOrder": [
-                "userId"
-              ],
-              "response": {
-                "$ref": "AutoForwarding"
-              },
-              "path": "gmail/v1/users/{userId}/settings/autoForwarding",
-              "description": "Updates the auto-forwarding setting for the specified account. A verified forwarding address must be specified when auto-forwarding is enabled. This method is only available to service account clients that have been delegated domain-wide authority."
             },
-            "updatePop": {
-              "path": "gmail/v1/users/{userId}/settings/pop",
-              "flatPath": "gmail/v1/users/{userId}/settings/pop",
-              "parameters": {
-                "userId": {
-                  "default": "me",
-                  "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "response": {
-                "$ref": "PopSettings"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/gmail.settings.basic"
-              ],
-              "request": {
-                "$ref": "PopSettings"
-              },
-              "description": "Updates POP settings.",
-              "httpMethod": "PUT",
-              "parameterOrder": [
-                "userId"
-              ],
-              "id": "gmail.users.settings.updatePop"
-            },
-            "getVacation": {
-              "httpMethod": "GET",
-              "flatPath": "gmail/v1/users/{userId}/settings/vacation",
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.modify",
-                "https://www.googleapis.com/auth/gmail.readonly",
-                "https://www.googleapis.com/auth/gmail.settings.basic"
-              ],
-              "path": "gmail/v1/users/{userId}/settings/vacation",
-              "id": "gmail.users.settings.getVacation",
-              "description": "Gets vacation responder settings.",
-              "parameters": {
-                "userId": {
-                  "required": true,
-                  "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                  "location": "path",
-                  "default": "me",
-                  "type": "string"
-                }
-              },
-              "parameterOrder": [
-                "userId"
-              ],
-              "response": {
-                "$ref": "VacationSettings"
-              }
-            },
-            "getPop": {
-              "parameterOrder": [
-                "userId"
-              ],
-              "description": "Gets POP settings.",
-              "httpMethod": "GET",
-              "id": "gmail.users.settings.getPop",
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.modify",
-                "https://www.googleapis.com/auth/gmail.readonly",
-                "https://www.googleapis.com/auth/gmail.settings.basic"
-              ],
-              "flatPath": "gmail/v1/users/{userId}/settings/pop",
-              "path": "gmail/v1/users/{userId}/settings/pop",
-              "parameters": {
-                "userId": {
-                  "default": "me",
-                  "location": "path",
-                  "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "response": {
-                "$ref": "PopSettings"
-              }
-            },
-            "updateVacation": {
-              "scopes": [
-                "https://www.googleapis.com/auth/gmail.settings.basic"
-              ],
-              "flatPath": "gmail/v1/users/{userId}/settings/vacation",
-              "parameterOrder": [
-                "userId"
-              ],
-              "path": "gmail/v1/users/{userId}/settings/vacation",
-              "id": "gmail.users.settings.updateVacation",
-              "response": {
-                "$ref": "VacationSettings"
-              },
-              "httpMethod": "PUT",
-              "parameters": {
-                "userId": {
-                  "default": "me",
-                  "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                }
-              },
-              "description": "Updates vacation responder settings.",
-              "request": {
-                "$ref": "VacationSettings"
-              }
-            },
-            "getLanguage": {
-              "flatPath": "gmail/v1/users/{userId}/settings/language",
-              "httpMethod": "GET",
-              "id": "gmail.users.settings.getLanguage",
-              "parameters": {
-                "userId": {
-                  "location": "path",
-                  "default": "me",
-                  "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                  "type": "string",
-                  "required": true
-                }
-              },
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.modify",
-                "https://www.googleapis.com/auth/gmail.readonly",
-                "https://www.googleapis.com/auth/gmail.settings.basic"
-              ],
-              "response": {
-                "$ref": "LanguageSettings"
-              },
-              "parameterOrder": [
-                "userId"
-              ],
-              "path": "gmail/v1/users/{userId}/settings/language",
-              "description": "Gets language settings."
-            },
-            "getAutoForwarding": {
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "userId"
-              ],
-              "id": "gmail.users.settings.getAutoForwarding",
-              "description": "Gets the auto-forwarding setting for the specified account.",
-              "path": "gmail/v1/users/{userId}/settings/autoForwarding",
-              "parameters": {
-                "userId": {
-                  "default": "me",
-                  "location": "path",
-                  "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                  "type": "string",
-                  "required": true
-                }
-              },
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.modify",
-                "https://www.googleapis.com/auth/gmail.readonly",
-                "https://www.googleapis.com/auth/gmail.settings.basic"
-              ],
-              "response": {
-                "$ref": "AutoForwarding"
-              },
-              "flatPath": "gmail/v1/users/{userId}/settings/autoForwarding"
-            },
-            "getImap": {
-              "id": "gmail.users.settings.getImap",
-              "httpMethod": "GET",
-              "description": "Gets IMAP settings.",
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.modify",
-                "https://www.googleapis.com/auth/gmail.readonly",
-                "https://www.googleapis.com/auth/gmail.settings.basic"
-              ],
-              "parameters": {
-                "userId": {
-                  "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                  "required": true,
-                  "default": "me",
-                  "location": "path",
-                  "type": "string"
-                }
-              },
-              "path": "gmail/v1/users/{userId}/settings/imap",
-              "response": {
-                "$ref": "ImapSettings"
-              },
-              "flatPath": "gmail/v1/users/{userId}/settings/imap",
-              "parameterOrder": [
-                "userId"
-              ]
-            },
-            "updateImap": {
-              "description": "Updates IMAP settings.",
-              "request": {
-                "$ref": "ImapSettings"
-              },
-              "httpMethod": "PUT",
-              "parameterOrder": [
-                "userId"
-              ],
-              "parameters": {
-                "userId": {
-                  "required": true,
-                  "location": "path",
-                  "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                  "default": "me",
-                  "type": "string"
-                }
-              },
-              "flatPath": "gmail/v1/users/{userId}/settings/imap",
-              "scopes": [
-                "https://www.googleapis.com/auth/gmail.settings.basic"
-              ],
-              "path": "gmail/v1/users/{userId}/settings/imap",
-              "response": {
-                "$ref": "ImapSettings"
-              },
-              "id": "gmail.users.settings.updateImap"
-            }
-          },
-          "resources": {
-            "forwardingAddresses": {
-              "methods": {
-                "get": {
-                  "path": "gmail/v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}",
-                  "httpMethod": "GET",
-                  "id": "gmail.users.settings.forwardingAddresses.get",
-                  "description": "Gets the specified forwarding address.",
-                  "flatPath": "gmail/v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}",
-                  "scopes": [
-                    "https://mail.google.com/",
-                    "https://www.googleapis.com/auth/gmail.modify",
-                    "https://www.googleapis.com/auth/gmail.readonly",
-                    "https://www.googleapis.com/auth/gmail.settings.basic"
-                  ],
-                  "response": {
-                    "$ref": "ForwardingAddress"
-                  },
-                  "parameterOrder": [
-                    "userId",
-                    "forwardingEmail"
-                  ],
-                  "parameters": {
-                    "forwardingEmail": {
-                      "type": "string",
-                      "description": "The forwarding address to be retrieved.",
-                      "required": true,
-                      "location": "path"
+            "type": "object"
+        },
+        "History": {
+            "description": "A record of a change to the user's mailbox. Each history change may affect multiple messages in multiple ways.",
+            "id": "History",
+            "properties": {
+                "id": {
+                    "description": "The mailbox sequence ID.",
+                    "format": "uint64",
+                    "type": "string"
+                },
+                "labelsAdded": {
+                    "description": "Labels added to messages in this history record.",
+                    "items": {
+                        "$ref": "HistoryLabelAdded"
                     },
-                    "userId": {
-                      "location": "path",
-                      "type": "string",
-                      "default": "me",
-                      "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                      "required": true
-                    }
-                  }
+                    "type": "array"
                 },
-                "list": {
-                  "path": "gmail/v1/users/{userId}/settings/forwardingAddresses",
-                  "httpMethod": "GET",
-                  "description": "Lists the forwarding addresses for the specified account.",
-                  "scopes": [
-                    "https://mail.google.com/",
-                    "https://www.googleapis.com/auth/gmail.modify",
-                    "https://www.googleapis.com/auth/gmail.readonly",
-                    "https://www.googleapis.com/auth/gmail.settings.basic"
-                  ],
-                  "flatPath": "gmail/v1/users/{userId}/settings/forwardingAddresses",
-                  "parameters": {
-                    "userId": {
-                      "required": true,
-                      "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                      "location": "path",
-                      "type": "string",
-                      "default": "me"
-                    }
-                  },
-                  "response": {
-                    "$ref": "ListForwardingAddressesResponse"
-                  },
-                  "id": "gmail.users.settings.forwardingAddresses.list",
-                  "parameterOrder": [
-                    "userId"
-                  ]
-                },
-                "delete": {
-                  "description": "Deletes the specified forwarding address and revokes any verification that may have been required. This method is only available to service account clients that have been delegated domain-wide authority.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/gmail.settings.sharing"
-                  ],
-                  "httpMethod": "DELETE",
-                  "parameters": {
-                    "forwardingEmail": {
-                      "description": "The forwarding address to be deleted.",
-                      "required": true,
-                      "location": "path",
-                      "type": "string"
+                "labelsRemoved": {
+                    "description": "Labels removed from messages in this history record.",
+                    "items": {
+                        "$ref": "HistoryLabelRemoved"
                     },
-                    "userId": {
-                      "default": "me",
-                      "type": "string",
-                      "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                      "required": true,
-                      "location": "path"
-                    }
-                  },
-                  "path": "gmail/v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}",
-                  "id": "gmail.users.settings.forwardingAddresses.delete",
-                  "flatPath": "gmail/v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}",
-                  "parameterOrder": [
-                    "userId",
-                    "forwardingEmail"
-                  ]
+                    "type": "array"
                 },
-                "create": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/gmail.settings.sharing"
-                  ],
-                  "httpMethod": "POST",
-                  "description": "Creates a forwarding address. If ownership verification is required, a message will be sent to the recipient and the resource's verification status will be set to `pending`; otherwise, the resource will be created with verification status set to `accepted`. This method is only available to service account clients that have been delegated domain-wide authority.",
-                  "parameters": {
-                    "userId": {
-                      "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                      "required": true,
-                      "default": "me",
-                      "location": "path",
-                      "type": "string"
-                    }
-                  },
-                  "id": "gmail.users.settings.forwardingAddresses.create",
-                  "path": "gmail/v1/users/{userId}/settings/forwardingAddresses",
-                  "parameterOrder": [
-                    "userId"
-                  ],
-                  "response": {
-                    "$ref": "ForwardingAddress"
-                  },
-                  "flatPath": "gmail/v1/users/{userId}/settings/forwardingAddresses",
-                  "request": {
-                    "$ref": "ForwardingAddress"
-                  }
+                "messages": {
+                    "description": "List of messages changed in this history record. The fields for specific change types, such as `messagesAdded` may duplicate messages in this field. We recommend using the specific change-type fields instead of this.",
+                    "items": {
+                        "$ref": "Message"
+                    },
+                    "type": "array"
+                },
+                "messagesAdded": {
+                    "description": "Messages added to the mailbox in this history record.",
+                    "items": {
+                        "$ref": "HistoryMessageAdded"
+                    },
+                    "type": "array"
+                },
+                "messagesDeleted": {
+                    "description": "Messages deleted (not Trashed) from the mailbox in this history record.",
+                    "items": {
+                        "$ref": "HistoryMessageDeleted"
+                    },
+                    "type": "array"
                 }
-              }
             },
-            "filters": {
-              "methods": {
-                "get": {
-                  "httpMethod": "GET",
-                  "path": "gmail/v1/users/{userId}/settings/filters/{id}",
-                  "description": "Gets a filter.",
-                  "flatPath": "gmail/v1/users/{userId}/settings/filters/{id}",
-                  "id": "gmail.users.settings.filters.get",
-                  "parameters": {
-                    "id": {
-                      "type": "string",
-                      "required": true,
-                      "description": "The ID of the filter to be fetched.",
-                      "location": "path"
+            "type": "object"
+        },
+        "HistoryLabelAdded": {
+            "id": "HistoryLabelAdded",
+            "properties": {
+                "labelIds": {
+                    "description": "Label IDs added to the message.",
+                    "items": {
+                        "type": "string"
                     },
-                    "userId": {
-                      "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                      "type": "string",
-                      "location": "path",
-                      "default": "me",
-                      "required": true
-                    }
-                  },
-                  "scopes": [
-                    "https://mail.google.com/",
-                    "https://www.googleapis.com/auth/gmail.modify",
-                    "https://www.googleapis.com/auth/gmail.readonly",
-                    "https://www.googleapis.com/auth/gmail.settings.basic"
-                  ],
-                  "parameterOrder": [
-                    "userId",
-                    "id"
-                  ],
-                  "response": {
-                    "$ref": "Filter"
-                  }
+                    "type": "array"
                 },
-                "delete": {
-                  "flatPath": "gmail/v1/users/{userId}/settings/filters/{id}",
-                  "path": "gmail/v1/users/{userId}/settings/filters/{id}",
-                  "parameters": {
-                    "userId": {
-                      "type": "string",
-                      "default": "me",
-                      "required": true,
-                      "location": "path",
-                      "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user."
-                    },
-                    "id": {
-                      "type": "string",
-                      "location": "path",
-                      "description": "The ID of the filter to be deleted.",
-                      "required": true
-                    }
-                  },
-                  "parameterOrder": [
-                    "userId",
-                    "id"
-                  ],
-                  "httpMethod": "DELETE",
-                  "description": "Deletes a filter.",
-                  "id": "gmail.users.settings.filters.delete",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/gmail.settings.basic"
-                  ]
-                },
-                "create": {
-                  "parameterOrder": [
-                    "userId"
-                  ],
-                  "response": {
-                    "$ref": "Filter"
-                  },
-                  "parameters": {
-                    "userId": {
-                      "default": "me",
-                      "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                      "type": "string",
-                      "location": "path",
-                      "required": true
-                    }
-                  },
-                  "httpMethod": "POST",
-                  "path": "gmail/v1/users/{userId}/settings/filters",
-                  "request": {
-                    "$ref": "Filter"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/gmail.settings.basic"
-                  ],
-                  "id": "gmail.users.settings.filters.create",
-                  "description": "Creates a filter. Note: you can only create a maximum of 1,000 filters.",
-                  "flatPath": "gmail/v1/users/{userId}/settings/filters"
-                },
-                "list": {
-                  "scopes": [
-                    "https://mail.google.com/",
-                    "https://www.googleapis.com/auth/gmail.modify",
-                    "https://www.googleapis.com/auth/gmail.readonly",
-                    "https://www.googleapis.com/auth/gmail.settings.basic"
-                  ],
-                  "flatPath": "gmail/v1/users/{userId}/settings/filters",
-                  "description": "Lists the message filters of a Gmail user.",
-                  "httpMethod": "GET",
-                  "path": "gmail/v1/users/{userId}/settings/filters",
-                  "response": {
-                    "$ref": "ListFiltersResponse"
-                  },
-                  "id": "gmail.users.settings.filters.list",
-                  "parameters": {
-                    "userId": {
-                      "location": "path",
-                      "required": true,
-                      "default": "me",
-                      "type": "string",
-                      "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user."
-                    }
-                  },
-                  "parameterOrder": [
-                    "userId"
-                  ]
+                "message": {
+                    "$ref": "Message"
                 }
-              }
             },
-            "sendAs": {
-              "methods": {
-                "update": {
-                  "description": "Updates a send-as alias. If a signature is provided, Gmail will sanitize the HTML before saving it with the alias. Addresses other than the primary address for the account can only be updated by service account clients that have been delegated domain-wide authority.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/gmail.settings.basic",
-                    "https://www.googleapis.com/auth/gmail.settings.sharing"
-                  ],
-                  "request": {
-                    "$ref": "SendAs"
-                  },
-                  "parameterOrder": [
-                    "userId",
-                    "sendAsEmail"
-                  ],
-                  "flatPath": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}",
-                  "response": {
-                    "$ref": "SendAs"
-                  },
-                  "httpMethod": "PUT",
-                  "parameters": {
-                    "sendAsEmail": {
-                      "description": "The send-as alias to be updated.",
-                      "location": "path",
-                      "required": true,
-                      "type": "string"
+            "type": "object"
+        },
+        "HistoryLabelRemoved": {
+            "id": "HistoryLabelRemoved",
+            "properties": {
+                "labelIds": {
+                    "description": "Label IDs removed from the message.",
+                    "items": {
+                        "type": "string"
                     },
-                    "userId": {
-                      "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                      "location": "path",
-                      "required": true,
-                      "default": "me",
-                      "type": "string"
-                    }
-                  },
-                  "id": "gmail.users.settings.sendAs.update",
-                  "path": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}"
+                    "type": "array"
                 },
-                "get": {
-                  "path": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}",
-                  "response": {
-                    "$ref": "SendAs"
-                  },
-                  "description": "Gets the specified send-as alias. Fails with an HTTP 404 error if the specified address is not a member of the collection.",
-                  "scopes": [
-                    "https://mail.google.com/",
-                    "https://www.googleapis.com/auth/gmail.modify",
-                    "https://www.googleapis.com/auth/gmail.readonly",
-                    "https://www.googleapis.com/auth/gmail.settings.basic"
-                  ],
-                  "parameters": {
-                    "userId": {
-                      "default": "me",
-                      "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "sendAsEmail": {
-                      "type": "string",
-                      "description": "The send-as alias to be retrieved.",
-                      "required": true,
-                      "location": "path"
-                    }
-                  },
-                  "parameterOrder": [
-                    "userId",
-                    "sendAsEmail"
-                  ],
-                  "httpMethod": "GET",
-                  "id": "gmail.users.settings.sendAs.get",
-                  "flatPath": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}"
-                },
-                "list": {
-                  "description": "Lists the send-as aliases for the specified account. The result includes the primary send-as address associated with the account as well as any custom \"from\" aliases.",
-                  "flatPath": "gmail/v1/users/{userId}/settings/sendAs",
-                  "httpMethod": "GET",
-                  "parameters": {
-                    "userId": {
-                      "required": true,
-                      "type": "string",
-                      "default": "me",
-                      "location": "path",
-                      "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user."
-                    }
-                  },
-                  "path": "gmail/v1/users/{userId}/settings/sendAs",
-                  "id": "gmail.users.settings.sendAs.list",
-                  "parameterOrder": [
-                    "userId"
-                  ],
-                  "scopes": [
-                    "https://mail.google.com/",
-                    "https://www.googleapis.com/auth/gmail.modify",
-                    "https://www.googleapis.com/auth/gmail.readonly",
-                    "https://www.googleapis.com/auth/gmail.settings.basic"
-                  ],
-                  "response": {
-                    "$ref": "ListSendAsResponse"
-                  }
-                },
-                "create": {
-                  "flatPath": "gmail/v1/users/{userId}/settings/sendAs",
-                  "parameterOrder": [
-                    "userId"
-                  ],
-                  "id": "gmail.users.settings.sendAs.create",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/gmail.settings.sharing"
-                  ],
-                  "parameters": {
-                    "userId": {
-                      "type": "string",
-                      "required": true,
-                      "default": "me",
-                      "location": "path",
-                      "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user."
-                    }
-                  },
-                  "httpMethod": "POST",
-                  "response": {
-                    "$ref": "SendAs"
-                  },
-                  "description": "Creates a custom \"from\" send-as alias. If an SMTP MSA is specified, Gmail will attempt to connect to the SMTP service to validate the configuration before creating the alias. If ownership verification is required for the alias, a message will be sent to the email address and the resource's verification status will be set to `pending`; otherwise, the resource will be created with verification status set to `accepted`. If a signature is provided, Gmail will sanitize the HTML before saving it with the alias. This method is only available to service account clients that have been delegated domain-wide authority.",
-                  "path": "gmail/v1/users/{userId}/settings/sendAs",
-                  "request": {
-                    "$ref": "SendAs"
-                  }
-                },
-                "patch": {
-                  "response": {
-                    "$ref": "SendAs"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/gmail.settings.basic",
-                    "https://www.googleapis.com/auth/gmail.settings.sharing"
-                  ],
-                  "parameterOrder": [
-                    "userId",
-                    "sendAsEmail"
-                  ],
-                  "parameters": {
-                    "sendAsEmail": {
-                      "type": "string",
-                      "required": true,
-                      "location": "path",
-                      "description": "The send-as alias to be updated."
-                    },
-                    "userId": {
-                      "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                      "type": "string",
-                      "required": true,
-                      "default": "me",
-                      "location": "path"
-                    }
-                  },
-                  "id": "gmail.users.settings.sendAs.patch",
-                  "path": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}",
-                  "request": {
-                    "$ref": "SendAs"
-                  },
-                  "description": "Patch the specified send-as alias.",
-                  "flatPath": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}",
-                  "httpMethod": "PATCH"
-                },
-                "verify": {
-                  "parameterOrder": [
-                    "userId",
-                    "sendAsEmail"
-                  ],
-                  "httpMethod": "POST",
-                  "id": "gmail.users.settings.sendAs.verify",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/gmail.settings.sharing"
-                  ],
-                  "path": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/verify",
-                  "parameters": {
-                    "sendAsEmail": {
-                      "type": "string",
-                      "location": "path",
-                      "description": "The send-as alias to be verified.",
-                      "required": true
-                    },
-                    "userId": {
-                      "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                      "required": true,
-                      "location": "path",
-                      "type": "string",
-                      "default": "me"
-                    }
-                  },
-                  "description": "Sends a verification email to the specified send-as alias address. The verification status must be `pending`. This method is only available to service account clients that have been delegated domain-wide authority.",
-                  "flatPath": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/verify"
-                },
-                "delete": {
-                  "parameters": {
-                    "userId": {
-                      "location": "path",
-                      "required": true,
-                      "type": "string",
-                      "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                      "default": "me"
-                    },
-                    "sendAsEmail": {
-                      "required": true,
-                      "location": "path",
-                      "type": "string",
-                      "description": "The send-as alias to be deleted."
-                    }
-                  },
-                  "parameterOrder": [
-                    "userId",
-                    "sendAsEmail"
-                  ],
-                  "flatPath": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/gmail.settings.sharing"
-                  ],
-                  "path": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}",
-                  "httpMethod": "DELETE",
-                  "id": "gmail.users.settings.sendAs.delete",
-                  "description": "Deletes the specified send-as alias. Revokes any verification that may have been required for using it. This method is only available to service account clients that have been delegated domain-wide authority."
+                "message": {
+                    "$ref": "Message"
                 }
-              },
-              "resources": {
+            },
+            "type": "object"
+        },
+        "HistoryMessageAdded": {
+            "id": "HistoryMessageAdded",
+            "properties": {
+                "message": {
+                    "$ref": "Message"
+                }
+            },
+            "type": "object"
+        },
+        "HistoryMessageDeleted": {
+            "id": "HistoryMessageDeleted",
+            "properties": {
+                "message": {
+                    "$ref": "Message"
+                }
+            },
+            "type": "object"
+        },
+        "ImapSettings": {
+            "description": "IMAP settings for an account.",
+            "id": "ImapSettings",
+            "properties": {
+                "autoExpunge": {
+                    "description": "If this value is true, Gmail will immediately expunge a message when it is marked as deleted in IMAP. Otherwise, Gmail will wait for an update from the client before expunging messages marked as deleted.",
+                    "type": "boolean"
+                },
+                "enabled": {
+                    "description": "Whether IMAP is enabled for the account.",
+                    "type": "boolean"
+                },
+                "expungeBehavior": {
+                    "description": "The action that will be executed on a message when it is marked as deleted and expunged from the last visible IMAP folder.",
+                    "enum": [
+                        "expungeBehaviorUnspecified",
+                        "archive",
+                        "trash",
+                        "deleteForever"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified behavior.",
+                        "Archive messages marked as deleted.",
+                        "Move messages marked as deleted to the trash.",
+                        "Immediately and permanently delete messages marked as deleted. The expunged messages cannot be recovered."
+                    ],
+                    "type": "string"
+                },
+                "maxFolderSize": {
+                    "description": "An optional limit on the number of messages that an IMAP folder may contain. Legal values are 0, 1000, 2000, 5000 or 10000. A value of zero is interpreted to mean that there is no limit.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "Label": {
+            "description": "Labels are used to categorize messages and threads within the user's mailbox.",
+            "id": "Label",
+            "properties": {
+                "color": {
+                    "$ref": "LabelColor",
+                    "description": "The color to assign to the label. Color is only available for labels that have their `type` set to `user`."
+                },
+                "id": {
+                    "annotations": {
+                        "required": [
+                            "gmail.users.labels.update"
+                        ]
+                    },
+                    "description": "The immutable ID of the label.",
+                    "type": "string"
+                },
+                "labelListVisibility": {
+                    "annotations": {
+                        "required": [
+                            "gmail.users.labels.create",
+                            "gmail.users.labels.update"
+                        ]
+                    },
+                    "description": "The visibility of the label in the label list in the Gmail web interface.",
+                    "enum": [
+                        "labelShow",
+                        "labelShowIfUnread",
+                        "labelHide"
+                    ],
+                    "enumDescriptions": [
+                        "Show the label in the label list.",
+                        "Show the label if there are any unread messages with that label.",
+                        "Do not show the label in the label list."
+                    ],
+                    "type": "string"
+                },
+                "messageListVisibility": {
+                    "annotations": {
+                        "required": [
+                            "gmail.users.labels.create",
+                            "gmail.users.labels.update"
+                        ]
+                    },
+                    "description": "The visibility of messages with this label in the message list in the Gmail web interface.",
+                    "enum": [
+                        "show",
+                        "hide"
+                    ],
+                    "enumDescriptions": [
+                        "Show the label in the message list.",
+                        "Do not show the label in the message list."
+                    ],
+                    "type": "string"
+                },
+                "messagesTotal": {
+                    "description": "The total number of messages with the label.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "messagesUnread": {
+                    "description": "The number of unread messages with the label.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "name": {
+                    "annotations": {
+                        "required": [
+                            "gmail.users.labels.create",
+                            "gmail.users.labels.update"
+                        ]
+                    },
+                    "description": "The display name of the label.",
+                    "type": "string"
+                },
+                "threadsTotal": {
+                    "description": "The total number of threads with the label.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "threadsUnread": {
+                    "description": "The number of unread threads with the label.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "type": {
+                    "description": "The owner type for the label. User labels are created by the user and can be modified and deleted by the user and can be applied to any message or thread. System labels are internally created and cannot be added, modified, or deleted. System labels may be able to be applied to or removed from messages and threads under some circumstances but this is not guaranteed. For example, users can apply and remove the `INBOX` and `UNREAD` labels from messages and threads, but cannot apply or remove the `DRAFTS` or `SENT` labels from messages or threads.",
+                    "enum": [
+                        "system",
+                        "user"
+                    ],
+                    "enumDescriptions": [
+                        "Labels created by Gmail.",
+                        "Custom labels created by the user or application."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LabelColor": {
+            "id": "LabelColor",
+            "properties": {
+                "backgroundColor": {
+                    "description": "The background color represented as hex string #RRGGBB (ex #000000). This field is required in order to set the color of a label. Only the following predefined set of color values are allowed: \\#000000, #434343, #666666, #999999, #cccccc, #efefef, #f3f3f3, #ffffff, \\#fb4c2f, #ffad47, #fad165, #16a766, #43d692, #4a86e8, #a479e2, #f691b3, \\#f6c5be, #ffe6c7, #fef1d1, #b9e4d0, #c6f3de, #c9daf8, #e4d7f5, #fcdee8, \\#efa093, #ffd6a2, #fce8b3, #89d3b2, #a0eac9, #a4c2f4, #d0bcf1, #fbc8d9, \\#e66550, #ffbc6b, #fcda83, #44b984, #68dfa9, #6d9eeb, #b694e8, #f7a7c0, \\#cc3a21, #eaa041, #f2c960, #149e60, #3dc789, #3c78d8, #8e63ce, #e07798, \\#ac2b16, #cf8933, #d5ae49, #0b804b, #2a9c68, #285bac, #653e9b, #b65775, \\#822111, #a46a21, #aa8831, #076239, #1a764d, #1c4587, #41236d, #83334c \\#464646, #e7e7e7, #0d3472, #b6cff5, #0d3b44, #98d7e4, #3d188e, #e3d7ff, \\#711a36, #fbd3e0, #8a1c0a, #f2b2a8, #7a2e0b, #ffc8af, #7a4706, #ffdeb5, \\#594c05, #fbe983, #684e07, #fdedc1, #0b4f30, #b3efd3, #04502e, #a2dcc1, \\#c2c2c2, #4986e7, #2da2bb, #b99aff, #994a64, #f691b2, #ff7537, #ffad46, \\#662e37, #ebdbde, #cca6ac, #094228, #42d692, #16a765",
+                    "type": "string"
+                },
+                "textColor": {
+                    "description": "The text color of the label, represented as hex string. This field is required in order to set the color of a label. Only the following predefined set of color values are allowed: \\#000000, #434343, #666666, #999999, #cccccc, #efefef, #f3f3f3, #ffffff, \\#fb4c2f, #ffad47, #fad165, #16a766, #43d692, #4a86e8, #a479e2, #f691b3, \\#f6c5be, #ffe6c7, #fef1d1, #b9e4d0, #c6f3de, #c9daf8, #e4d7f5, #fcdee8, \\#efa093, #ffd6a2, #fce8b3, #89d3b2, #a0eac9, #a4c2f4, #d0bcf1, #fbc8d9, \\#e66550, #ffbc6b, #fcda83, #44b984, #68dfa9, #6d9eeb, #b694e8, #f7a7c0, \\#cc3a21, #eaa041, #f2c960, #149e60, #3dc789, #3c78d8, #8e63ce, #e07798, \\#ac2b16, #cf8933, #d5ae49, #0b804b, #2a9c68, #285bac, #653e9b, #b65775, \\#822111, #a46a21, #aa8831, #076239, #1a764d, #1c4587, #41236d, #83334c \\#464646, #e7e7e7, #0d3472, #b6cff5, #0d3b44, #98d7e4, #3d188e, #e3d7ff, \\#711a36, #fbd3e0, #8a1c0a, #f2b2a8, #7a2e0b, #ffc8af, #7a4706, #ffdeb5, \\#594c05, #fbe983, #684e07, #fdedc1, #0b4f30, #b3efd3, #04502e, #a2dcc1, \\#c2c2c2, #4986e7, #2da2bb, #b99aff, #994a64, #f691b2, #ff7537, #ffad46, \\#662e37, #ebdbde, #cca6ac, #094228, #42d692, #16a765",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LanguageSettings": {
+            "description": "Language settings for an account. These settings correspond to the \"Language settings\" feature in the web interface.",
+            "id": "LanguageSettings",
+            "properties": {
+                "displayLanguage": {
+                    "description": "The language to display Gmail in, formatted as an RFC 3066 Language Tag (for example `en-GB`, `fr` or `ja` for British English, French, or Japanese respectively). The set of languages supported by Gmail evolves over time, so please refer to the \"Language\" dropdown in the Gmail settings for all available options, as described in the language settings help article. A table of sample values is also provided in the Managing Language Settings guide Not all Gmail clients can display the same set of languages. In the case that a user's display language is not available for use on a particular client, said client automatically chooses to display in the closest supported variant (or a reasonable default).",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListDelegatesResponse": {
+            "description": "Response for the ListDelegates method.",
+            "id": "ListDelegatesResponse",
+            "properties": {
+                "delegates": {
+                    "description": "List of the user's delegates (with any verification status). If an account doesn't have delegates, this field doesn't appear.",
+                    "items": {
+                        "$ref": "Delegate"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListDraftsResponse": {
+            "id": "ListDraftsResponse",
+            "properties": {
+                "drafts": {
+                    "description": "List of drafts. Note that the `Message` property in each `Draft` resource only contains an `id` and a `threadId`. The messages.get method can fetch additional message details.",
+                    "items": {
+                        "$ref": "Draft"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Token to retrieve the next page of results in the list.",
+                    "type": "string"
+                },
+                "resultSizeEstimate": {
+                    "description": "Estimated total number of results.",
+                    "format": "uint32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "ListFiltersResponse": {
+            "description": "Response for the ListFilters method.",
+            "id": "ListFiltersResponse",
+            "properties": {
+                "filter": {
+                    "description": "List of a user's filters.",
+                    "items": {
+                        "$ref": "Filter"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListForwardingAddressesResponse": {
+            "description": "Response for the ListForwardingAddresses method.",
+            "id": "ListForwardingAddressesResponse",
+            "properties": {
+                "forwardingAddresses": {
+                    "description": "List of addresses that may be used for forwarding.",
+                    "items": {
+                        "$ref": "ForwardingAddress"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListHistoryResponse": {
+            "id": "ListHistoryResponse",
+            "properties": {
+                "history": {
+                    "description": "List of history records. Any `messages` contained in the response will typically only have `id` and `threadId` fields populated.",
+                    "items": {
+                        "$ref": "History"
+                    },
+                    "type": "array"
+                },
+                "historyId": {
+                    "description": "The ID of the mailbox's current history record.",
+                    "format": "uint64",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Page token to retrieve the next page of results in the list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListLabelsResponse": {
+            "id": "ListLabelsResponse",
+            "properties": {
+                "labels": {
+                    "description": "List of labels. Note that each label resource only contains an `id`, `name`, `messageListVisibility`, `labelListVisibility`, and `type`. The labels.get method can fetch additional label details.",
+                    "items": {
+                        "$ref": "Label"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListMessagesResponse": {
+            "id": "ListMessagesResponse",
+            "properties": {
+                "messages": {
+                    "description": "List of messages. Note that each message resource contains only an `id` and a `threadId`. Additional message details can be fetched using the messages.get method.",
+                    "items": {
+                        "$ref": "Message"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Token to retrieve the next page of results in the list.",
+                    "type": "string"
+                },
+                "resultSizeEstimate": {
+                    "description": "Estimated total number of results.",
+                    "format": "uint32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "ListSendAsResponse": {
+            "description": "Response for the ListSendAs method.",
+            "id": "ListSendAsResponse",
+            "properties": {
+                "sendAs": {
+                    "description": "List of send-as aliases.",
+                    "items": {
+                        "$ref": "SendAs"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListSmimeInfoResponse": {
+            "id": "ListSmimeInfoResponse",
+            "properties": {
                 "smimeInfo": {
-                  "methods": {
-                    "get": {
-                      "parameters": {
-                        "userId": {
-                          "default": "me",
-                          "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                          "location": "path",
-                          "required": true,
-                          "type": "string"
-                        },
-                        "id": {
-                          "location": "path",
-                          "type": "string",
-                          "description": "The immutable ID for the SmimeInfo.",
-                          "required": true
-                        },
-                        "sendAsEmail": {
-                          "required": true,
-                          "location": "path",
-                          "type": "string",
-                          "description": "The email address that appears in the \"From:\" header for mail sent using this alias."
-                        }
-                      },
-                      "path": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}",
-                      "scopes": [
-                        "https://mail.google.com/",
-                        "https://www.googleapis.com/auth/gmail.modify",
-                        "https://www.googleapis.com/auth/gmail.readonly",
-                        "https://www.googleapis.com/auth/gmail.settings.basic",
-                        "https://www.googleapis.com/auth/gmail.settings.sharing"
-                      ],
-                      "parameterOrder": [
-                        "userId",
-                        "sendAsEmail",
-                        "id"
-                      ],
-                      "response": {
+                    "description": "List of SmimeInfo.",
+                    "items": {
                         "$ref": "SmimeInfo"
-                      },
-                      "flatPath": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}",
-                      "description": "Gets the specified S/MIME config for the specified send-as alias.",
-                      "httpMethod": "GET",
-                      "id": "gmail.users.settings.sendAs.smimeInfo.get"
                     },
-                    "delete": {
-                      "parameterOrder": [
-                        "userId",
-                        "sendAsEmail",
-                        "id"
-                      ],
-                      "description": "Deletes the specified S/MIME config for the specified send-as alias.",
-                      "flatPath": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}",
-                      "parameters": {
-                        "userId": {
-                          "required": true,
-                          "location": "path",
-                          "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                          "type": "string",
-                          "default": "me"
-                        },
-                        "sendAsEmail": {
-                          "type": "string",
-                          "required": true,
-                          "location": "path",
-                          "description": "The email address that appears in the \"From:\" header for mail sent using this alias."
-                        },
-                        "id": {
-                          "type": "string",
-                          "description": "The immutable ID for the SmimeInfo.",
-                          "location": "path",
-                          "required": true
-                        }
-                      },
-                      "scopes": [
-                        "https://www.googleapis.com/auth/gmail.settings.basic",
-                        "https://www.googleapis.com/auth/gmail.settings.sharing"
-                      ],
-                      "path": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}",
-                      "httpMethod": "DELETE",
-                      "id": "gmail.users.settings.sendAs.smimeInfo.delete"
-                    },
-                    "setDefault": {
-                      "flatPath": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}/setDefault",
-                      "parameterOrder": [
-                        "userId",
-                        "sendAsEmail",
-                        "id"
-                      ],
-                      "path": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}/setDefault",
-                      "id": "gmail.users.settings.sendAs.smimeInfo.setDefault",
-                      "description": "Sets the default S/MIME config for the specified send-as alias.",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/gmail.settings.basic",
-                        "https://www.googleapis.com/auth/gmail.settings.sharing"
-                      ],
-                      "parameters": {
-                        "sendAsEmail": {
-                          "type": "string",
-                          "description": "The email address that appears in the \"From:\" header for mail sent using this alias.",
-                          "location": "path",
-                          "required": true
-                        },
-                        "id": {
-                          "description": "The immutable ID for the SmimeInfo.",
-                          "required": true,
-                          "location": "path",
-                          "type": "string"
-                        },
-                        "userId": {
-                          "location": "path",
-                          "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                          "default": "me",
-                          "type": "string",
-                          "required": true
-                        }
-                      },
-                      "httpMethod": "POST"
-                    },
-                    "list": {
-                      "response": {
-                        "$ref": "ListSmimeInfoResponse"
-                      },
-                      "parameters": {
-                        "userId": {
-                          "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                          "required": true,
-                          "location": "path",
-                          "default": "me",
-                          "type": "string"
-                        },
-                        "sendAsEmail": {
-                          "required": true,
-                          "description": "The email address that appears in the \"From:\" header for mail sent using this alias.",
-                          "location": "path",
-                          "type": "string"
-                        }
-                      },
-                      "httpMethod": "GET",
-                      "path": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo",
-                      "scopes": [
-                        "https://mail.google.com/",
-                        "https://www.googleapis.com/auth/gmail.modify",
-                        "https://www.googleapis.com/auth/gmail.readonly",
-                        "https://www.googleapis.com/auth/gmail.settings.basic",
-                        "https://www.googleapis.com/auth/gmail.settings.sharing"
-                      ],
-                      "description": "Lists S/MIME configs for the specified send-as alias.",
-                      "flatPath": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo",
-                      "parameterOrder": [
-                        "userId",
-                        "sendAsEmail"
-                      ],
-                      "id": "gmail.users.settings.sendAs.smimeInfo.list"
-                    },
-                    "insert": {
-                      "parameters": {
-                        "userId": {
-                          "type": "string",
-                          "location": "path",
-                          "default": "me",
-                          "required": true,
-                          "description": "The user's email address. The special value `me` can be used to indicate the authenticated user."
-                        },
-                        "sendAsEmail": {
-                          "type": "string",
-                          "location": "path",
-                          "description": "The email address that appears in the \"From:\" header for mail sent using this alias.",
-                          "required": true
-                        }
-                      },
-                      "scopes": [
-                        "https://www.googleapis.com/auth/gmail.settings.basic",
-                        "https://www.googleapis.com/auth/gmail.settings.sharing"
-                      ],
-                      "httpMethod": "POST",
-                      "flatPath": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo",
-                      "id": "gmail.users.settings.sendAs.smimeInfo.insert",
-                      "response": {
-                        "$ref": "SmimeInfo"
-                      },
-                      "parameterOrder": [
-                        "userId",
-                        "sendAsEmail"
-                      ],
-                      "description": "Insert (upload) the given S/MIME config for the specified send-as alias. Note that pkcs12 format is required for the key.",
-                      "request": {
-                        "$ref": "SmimeInfo"
-                      },
-                      "path": "gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo"
-                    }
-                  }
+                    "type": "array"
                 }
-              }
             },
-            "delegates": {
-              "methods": {
-                "create": {
-                  "httpMethod": "POST",
-                  "request": {
-                    "$ref": "Delegate"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/gmail.settings.sharing"
-                  ],
-                  "response": {
-                    "$ref": "Delegate"
-                  },
-                  "parameters": {
-                    "userId": {
-                      "type": "string",
-                      "default": "me",
-                      "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                      "location": "path",
-                      "required": true
-                    }
-                  },
-                  "description": "Adds a delegate with its verification status set directly to `accepted`, without sending any verification email. The delegate user must be a member of the same G Suite organization as the delegator user. Gmail imposes limitations on the number of delegates and delegators each user in a G Suite organization can have. These limits depend on your organization, but in general each user can have up to 25 delegates and up to 10 delegators. Note that a delegate user must be referred to by their primary email address, and not an email alias. Also note that when a new delegate is created, there may be up to a one minute delay before the new delegate is available for use. This method is only available to service account clients that have been delegated domain-wide authority.",
-                  "parameterOrder": [
-                    "userId"
-                  ],
-                  "id": "gmail.users.settings.delegates.create",
-                  "path": "gmail/v1/users/{userId}/settings/delegates",
-                  "flatPath": "gmail/v1/users/{userId}/settings/delegates"
-                },
-                "get": {
-                  "parameters": {
-                    "userId": {
-                      "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                      "location": "path",
-                      "required": true,
-                      "default": "me",
-                      "type": "string"
-                    },
-                    "delegateEmail": {
-                      "location": "path",
-                      "required": true,
-                      "description": "The email address of the user whose delegate relationship is to be retrieved.",
-                      "type": "string"
-                    }
-                  },
-                  "path": "gmail/v1/users/{userId}/settings/delegates/{delegateEmail}",
-                  "flatPath": "gmail/v1/users/{userId}/settings/delegates/{delegateEmail}",
-                  "scopes": [
-                    "https://mail.google.com/",
-                    "https://www.googleapis.com/auth/gmail.modify",
-                    "https://www.googleapis.com/auth/gmail.readonly",
-                    "https://www.googleapis.com/auth/gmail.settings.basic"
-                  ],
-                  "description": "Gets the specified delegate. Note that a delegate user must be referred to by their primary email address, and not an email alias. This method is only available to service account clients that have been delegated domain-wide authority.",
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "Delegate"
-                  },
-                  "id": "gmail.users.settings.delegates.get",
-                  "parameterOrder": [
-                    "userId",
-                    "delegateEmail"
-                  ]
-                },
-                "list": {
-                  "flatPath": "gmail/v1/users/{userId}/settings/delegates",
-                  "scopes": [
-                    "https://mail.google.com/",
-                    "https://www.googleapis.com/auth/gmail.modify",
-                    "https://www.googleapis.com/auth/gmail.readonly",
-                    "https://www.googleapis.com/auth/gmail.settings.basic"
-                  ],
-                  "response": {
-                    "$ref": "ListDelegatesResponse"
-                  },
-                  "description": "Lists the delegates for the specified account. This method is only available to service account clients that have been delegated domain-wide authority.",
-                  "id": "gmail.users.settings.delegates.list",
-                  "parameterOrder": [
-                    "userId"
-                  ],
-                  "httpMethod": "GET",
-                  "parameters": {
-                    "userId": {
-                      "type": "string",
-                      "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                      "default": "me",
-                      "required": true,
-                      "location": "path"
-                    }
-                  },
-                  "path": "gmail/v1/users/{userId}/settings/delegates"
-                },
-                "delete": {
-                  "description": "Removes the specified delegate (which can be of any verification status), and revokes any verification that may have been required for using it. Note that a delegate user must be referred to by their primary email address, and not an email alias. This method is only available to service account clients that have been delegated domain-wide authority.",
-                  "path": "gmail/v1/users/{userId}/settings/delegates/{delegateEmail}",
-                  "id": "gmail.users.settings.delegates.delete",
-                  "httpMethod": "DELETE",
-                  "flatPath": "gmail/v1/users/{userId}/settings/delegates/{delegateEmail}",
-                  "parameters": {
-                    "delegateEmail": {
-                      "description": "The email address of the user to be removed as a delegate.",
-                      "type": "string",
-                      "required": true,
-                      "location": "path"
-                    },
-                    "userId": {
-                      "default": "me",
-                      "required": true,
-                      "description": "User's email address. The special value \"me\" can be used to indicate the authenticated user.",
-                      "location": "path",
-                      "type": "string"
-                    }
-                  },
-                  "parameterOrder": [
-                    "userId",
-                    "delegateEmail"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/gmail.settings.sharing"
-                  ]
-                }
-              }
-            }
-          }
+            "type": "object"
         },
-        "threads": {
-          "methods": {
-            "untrash": {
-              "response": {
-                "$ref": "Thread"
-              },
-              "httpMethod": "POST",
-              "id": "gmail.users.threads.untrash",
-              "path": "gmail/v1/users/{userId}/threads/{id}/untrash",
-              "flatPath": "gmail/v1/users/{userId}/threads/{id}/untrash",
-              "parameterOrder": [
-                "userId",
-                "id"
-              ],
-              "description": "Removes the specified thread from the trash.",
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.modify"
-              ],
-              "parameters": {
-                "id": {
-                  "type": "string",
-                  "description": "The ID of the thread to remove from Trash.",
-                  "location": "path",
-                  "required": true
+        "ListThreadsResponse": {
+            "id": "ListThreadsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "Page token to retrieve the next page of results in the list.",
+                    "type": "string"
                 },
-                "userId": {
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "type": "string",
-                  "required": true,
-                  "location": "path",
-                  "default": "me"
-                }
-              }
-            },
-            "delete": {
-              "path": "gmail/v1/users/{userId}/threads/{id}",
-              "id": "gmail.users.threads.delete",
-              "parameters": {
-                "id": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "description": "ID of the Thread to delete."
+                "resultSizeEstimate": {
+                    "description": "Estimated total number of results.",
+                    "format": "uint32",
+                    "type": "integer"
                 },
-                "userId": {
-                  "location": "path",
-                  "required": true,
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "type": "string",
-                  "default": "me"
+                "threads": {
+                    "description": "List of threads. Note that each thread resource does not contain a list of `messages`. The list of `messages` for a given thread can be fetched using the threads.get method.",
+                    "items": {
+                        "$ref": "Thread"
+                    },
+                    "type": "array"
                 }
-              },
-              "parameterOrder": [
-                "userId",
-                "id"
-              ],
-              "flatPath": "gmail/v1/users/{userId}/threads/{id}",
-              "scopes": [
-                "https://mail.google.com/"
-              ],
-              "description": "Immediately and permanently deletes the specified thread. This operation cannot be undone. Prefer `threads.trash` instead.",
-              "httpMethod": "DELETE"
             },
-            "modify": {
-              "description": "Modifies the labels applied to the thread. This applies to all messages in the thread.",
-              "request": {
-                "$ref": "ModifyThreadRequest"
-              },
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.modify"
-              ],
-              "parameterOrder": [
-                "userId",
-                "id"
-              ],
-              "path": "gmail/v1/users/{userId}/threads/{id}/modify",
-              "id": "gmail.users.threads.modify",
-              "parameters": {
-                "userId": {
-                  "type": "string",
-                  "required": true,
-                  "default": "me",
-                  "location": "path",
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user."
+            "type": "object"
+        },
+        "Message": {
+            "description": "An email message.",
+            "id": "Message",
+            "properties": {
+                "historyId": {
+                    "description": "The ID of the last history record that modified this message.",
+                    "format": "uint64",
+                    "type": "string"
                 },
                 "id": {
-                  "type": "string",
-                  "required": true,
-                  "description": "The ID of the thread to modify.",
-                  "location": "path"
-                }
-              },
-              "flatPath": "gmail/v1/users/{userId}/threads/{id}/modify",
-              "response": {
-                "$ref": "Thread"
-              },
-              "httpMethod": "POST"
-            },
-            "list": {
-              "id": "gmail.users.threads.list",
-              "path": "gmail/v1/users/{userId}/threads",
-              "httpMethod": "GET",
-              "description": "Lists the threads in the user's mailbox.",
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.metadata",
-                "https://www.googleapis.com/auth/gmail.modify",
-                "https://www.googleapis.com/auth/gmail.readonly"
-              ],
-              "flatPath": "gmail/v1/users/{userId}/threads",
-              "response": {
-                "$ref": "ListThreadsResponse"
-              },
-              "parameters": {
-                "maxResults": {
-                  "default": "100",
-                  "format": "uint32",
-                  "location": "query",
-                  "type": "integer",
-                  "description": "Maximum number of threads to return."
+                    "description": "The immutable ID of the message.",
+                    "type": "string"
                 },
-                "includeSpamTrash": {
-                  "type": "boolean",
-                  "description": "Include threads from `SPAM` and `TRASH` in the results.",
-                  "default": "false",
-                  "location": "query"
-                },
-                "userId": {
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "default": "me",
-                  "location": "path",
-                  "type": "string",
-                  "required": true
-                },
-                "pageToken": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "Page token to retrieve a specific page of results in the list."
-                },
-                "q": {
-                  "location": "query",
-                  "description": "Only return threads matching the specified query. Supports the same query format as the Gmail search box. For example, `\"from:someuser@example.com rfc822msgid: is:unread\"`. Parameter cannot be used when accessing the api using the gmail.metadata scope.",
-                  "type": "string"
+                "internalDate": {
+                    "description": "The internal message creation timestamp (epoch ms), which determines ordering in the inbox. For normal SMTP-received email, this represents the time the message was originally accepted by Google, which is more reliable than the `Date` header. However, for API-migrated mail, it can be configured by client to be based on the `Date` header.",
+                    "format": "int64",
+                    "type": "string"
                 },
                 "labelIds": {
-                  "location": "query",
-                  "description": "Only return threads with labels that match all of the specified label IDs.",
-                  "repeated": true,
-                  "type": "string"
+                    "description": "List of IDs of labels applied to this message.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "payload": {
+                    "$ref": "MessagePart",
+                    "description": "The parsed email structure in the message parts."
+                },
+                "raw": {
+                    "annotations": {
+                        "required": [
+                            "gmail.users.drafts.create",
+                            "gmail.users.drafts.update",
+                            "gmail.users.messages.insert",
+                            "gmail.users.messages.send"
+                        ]
+                    },
+                    "description": "The entire email message in an RFC 2822 formatted and base64url encoded string. Returned in `messages.get` and `drafts.get` responses when the `format=RAW` parameter is supplied.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "sizeEstimate": {
+                    "description": "Estimated size in bytes of the message.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "snippet": {
+                    "description": "A short part of the message text.",
+                    "type": "string"
+                },
+                "threadId": {
+                    "description": "The ID of the thread the message belongs to. To add a message or draft to a thread, the following criteria must be met: 1. The requested `threadId` must be specified on the `Message` or `Draft.Message` you supply with your request. 2. The `References` and `In-Reply-To` headers must be set in compliance with the [RFC 2822](https://tools.ietf.org/html/rfc2822) standard. 3. The `Subject` headers must match. ",
+                    "type": "string"
                 }
-              },
-              "parameterOrder": [
-                "userId"
-              ]
             },
-            "get": {
-              "id": "gmail.users.threads.get",
-              "parameterOrder": [
-                "userId",
-                "id"
-              ],
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.addons.current.message.action",
-                "https://www.googleapis.com/auth/gmail.addons.current.message.metadata",
-                "https://www.googleapis.com/auth/gmail.addons.current.message.readonly",
-                "https://www.googleapis.com/auth/gmail.metadata",
-                "https://www.googleapis.com/auth/gmail.modify",
-                "https://www.googleapis.com/auth/gmail.readonly"
-              ],
-              "parameters": {
-                "userId": {
-                  "location": "path",
-                  "type": "string",
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "required": true,
-                  "default": "me"
-                },
-                "format": {
-                  "enumDescriptions": [
-                    "Returns the full email message data with body content parsed in the `payload` field; the `raw` field is not used. Format cannot be used when accessing the api using the gmail.metadata scope.",
-                    "Returns only email message IDs, labels, and email headers.",
-                    "Returns only email message IDs and labels; does not return the email headers, body, or payload."
-                  ],
-                  "description": "The format to return the messages in.",
-                  "default": "full",
-                  "type": "string",
-                  "enum": [
-                    "full",
-                    "metadata",
-                    "minimal"
-                  ],
-                  "location": "query"
-                },
-                "metadataHeaders": {
-                  "location": "query",
-                  "repeated": true,
-                  "description": "When given and format is METADATA, only include headers specified.",
-                  "type": "string"
-                },
-                "id": {
-                  "description": "The ID of the thread to retrieve.",
-                  "required": true,
-                  "location": "path",
-                  "type": "string"
-                }
-              },
-              "path": "gmail/v1/users/{userId}/threads/{id}",
-              "httpMethod": "GET",
-              "description": "Gets the specified thread.",
-              "response": {
-                "$ref": "Thread"
-              },
-              "flatPath": "gmail/v1/users/{userId}/threads/{id}"
-            },
-            "trash": {
-              "parameters": {
-                "id": {
-                  "description": "The ID of the thread to Trash.",
-                  "location": "path",
-                  "type": "string",
-                  "required": true
-                },
-                "userId": {
-                  "location": "path",
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "type": "string",
-                  "default": "me",
-                  "required": true
-                }
-              },
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.modify"
-              ],
-              "httpMethod": "POST",
-              "path": "gmail/v1/users/{userId}/threads/{id}/trash",
-              "flatPath": "gmail/v1/users/{userId}/threads/{id}/trash",
-              "response": {
-                "$ref": "Thread"
-              },
-              "parameterOrder": [
-                "userId",
-                "id"
-              ],
-              "id": "gmail.users.threads.trash",
-              "description": "Moves the specified thread to the trash."
-            }
-          }
+            "type": "object"
         },
-        "messages": {
-          "methods": {
-            "delete": {
-              "id": "gmail.users.messages.delete",
-              "parameterOrder": [
-                "userId",
-                "id"
-              ],
-              "description": "Immediately and permanently deletes the specified message. This operation cannot be undone. Prefer `messages.trash` instead.",
-              "httpMethod": "DELETE",
-              "flatPath": "gmail/v1/users/{userId}/messages/{id}",
-              "scopes": [
-                "https://mail.google.com/"
-              ],
-              "parameters": {
-                "id": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "The ID of the message to delete."
+        "MessagePart": {
+            "description": "A single MIME message part.",
+            "id": "MessagePart",
+            "properties": {
+                "body": {
+                    "$ref": "MessagePartBody",
+                    "description": "The message part body for this part, which may be empty for container MIME message parts."
                 },
-                "userId": {
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "default": "me"
-                }
-              },
-              "path": "gmail/v1/users/{userId}/messages/{id}"
-            },
-            "batchModify": {
-              "id": "gmail.users.messages.batchModify",
-              "request": {
-                "$ref": "BatchModifyMessagesRequest"
-              },
-              "parameterOrder": [
-                "userId"
-              ],
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.modify"
-              ],
-              "path": "gmail/v1/users/{userId}/messages/batchModify",
-              "httpMethod": "POST",
-              "description": "Modifies the labels on the specified messages.",
-              "parameters": {
-                "userId": {
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "default": "me"
-                }
-              },
-              "flatPath": "gmail/v1/users/{userId}/messages/batchModify"
-            },
-            "get": {
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.addons.current.message.action",
-                "https://www.googleapis.com/auth/gmail.addons.current.message.metadata",
-                "https://www.googleapis.com/auth/gmail.addons.current.message.readonly",
-                "https://www.googleapis.com/auth/gmail.metadata",
-                "https://www.googleapis.com/auth/gmail.modify",
-                "https://www.googleapis.com/auth/gmail.readonly"
-              ],
-              "parameterOrder": [
-                "userId",
-                "id"
-              ],
-              "description": "Gets the specified message.",
-              "httpMethod": "GET",
-              "parameters": {
-                "userId": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "default": "me",
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user."
+                "filename": {
+                    "description": "The filename of the attachment. Only present if this message part represents an attachment.",
+                    "type": "string"
                 },
-                "metadataHeaders": {
-                  "repeated": true,
-                  "type": "string",
-                  "description": "When given and format is `METADATA`, only include headers specified.",
-                  "location": "query"
+                "headers": {
+                    "description": "List of headers on this message part. For the top-level message part, representing the entire message payload, it will contain the standard RFC 2822 email headers such as `To`, `From`, and `Subject`.",
+                    "items": {
+                        "$ref": "MessagePartHeader"
+                    },
+                    "type": "array"
+                },
+                "mimeType": {
+                    "description": "The MIME type of the message part.",
+                    "type": "string"
+                },
+                "partId": {
+                    "description": "The immutable ID of the message part.",
+                    "type": "string"
+                },
+                "parts": {
+                    "description": "The child MIME message parts of this part. This only applies to container MIME message parts, for example `multipart/*`. For non- container MIME message part types, such as `text/plain`, this field is empty. For more information, see RFC 1521.",
+                    "items": {
+                        "$ref": "MessagePart"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "MessagePartBody": {
+            "description": "The body of a single MIME message part.",
+            "id": "MessagePartBody",
+            "properties": {
+                "attachmentId": {
+                    "description": "When present, contains the ID of an external attachment that can be retrieved in a separate `messages.attachments.get` request. When not present, the entire content of the message part body is contained in the data field.",
+                    "type": "string"
+                },
+                "data": {
+                    "description": "The body data of a MIME message part as a base64url encoded string. May be empty for MIME container types that have no message body or when the body data is sent as a separate attachment. An attachment ID is present if the body data is contained in a separate attachment.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "size": {
+                    "description": "Number of bytes for the message part data (encoding notwithstanding).",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "MessagePartHeader": {
+            "id": "MessagePartHeader",
+            "properties": {
+                "name": {
+                    "description": "The name of the header before the `:` separator. For example, `To`.",
+                    "type": "string"
+                },
+                "value": {
+                    "description": "The value of the header after the `:` separator. For example, `someuser@example.com`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ModifyMessageRequest": {
+            "id": "ModifyMessageRequest",
+            "properties": {
+                "addLabelIds": {
+                    "description": "A list of IDs of labels to add to this message.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "removeLabelIds": {
+                    "description": "A list IDs of labels to remove from this message.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ModifyThreadRequest": {
+            "id": "ModifyThreadRequest",
+            "properties": {
+                "addLabelIds": {
+                    "description": "A list of IDs of labels to add to this thread.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "removeLabelIds": {
+                    "description": "A list of IDs of labels to remove from this thread.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "PopSettings": {
+            "description": "POP settings for an account.",
+            "id": "PopSettings",
+            "properties": {
+                "accessWindow": {
+                    "description": "The range of messages which are accessible via POP.",
+                    "enum": [
+                        "accessWindowUnspecified",
+                        "disabled",
+                        "fromNowOn",
+                        "allMail"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified range.",
+                        "Indicates that no messages are accessible via POP.",
+                        "Indicates that unfetched messages received after some past point in time are accessible via POP.",
+                        "Indicates that all unfetched messages are accessible via POP."
+                    ],
+                    "type": "string"
+                },
+                "disposition": {
+                    "description": "The action that will be executed on a message after it has been fetched via POP.",
+                    "enum": [
+                        "dispositionUnspecified",
+                        "leaveInInbox",
+                        "archive",
+                        "trash",
+                        "markRead"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified disposition.",
+                        "Leave the message in the `INBOX`.",
+                        "Archive the message.",
+                        "Move the message to the `TRASH`.",
+                        "Leave the message in the `INBOX` and mark it as read."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Profile": {
+            "description": "Profile for a Gmail user.",
+            "id": "Profile",
+            "properties": {
+                "emailAddress": {
+                    "description": "The user's email address.",
+                    "type": "string"
+                },
+                "historyId": {
+                    "description": "The ID of the mailbox's current history record.",
+                    "format": "uint64",
+                    "type": "string"
+                },
+                "messagesTotal": {
+                    "description": "The total number of messages in the mailbox.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "threadsTotal": {
+                    "description": "The total number of threads in the mailbox.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "SendAs": {
+            "description": "Settings associated with a send-as alias, which can be either the primary login address associated with the account or a custom \"from\" address. Send-as aliases correspond to the \"Send Mail As\" feature in the web interface.",
+            "id": "SendAs",
+            "properties": {
+                "displayName": {
+                    "description": "A name that appears in the \"From:\" header for mail sent using this alias. For custom \"from\" addresses, when this is empty, Gmail will populate the \"From:\" header with the name that is used for the primary address associated with the account. If the admin has disabled the ability for users to update their name format, requests to update this field for the primary login will silently fail.",
+                    "type": "string"
+                },
+                "isDefault": {
+                    "description": "Whether this address is selected as the default \"From:\" address in situations such as composing a new message or sending a vacation auto-reply. Every Gmail account has exactly one default send-as address, so the only legal value that clients may write to this field is `true`. Changing this from `false` to `true` for an address will result in this field becoming `false` for the other previous default address.",
+                    "type": "boolean"
+                },
+                "isPrimary": {
+                    "description": "Whether this address is the primary address used to login to the account. Every Gmail account has exactly one primary address, and it cannot be deleted from the collection of send-as aliases. This field is read-only.",
+                    "type": "boolean"
+                },
+                "replyToAddress": {
+                    "description": "An optional email address that is included in a \"Reply-To:\" header for mail sent using this alias. If this is empty, Gmail will not generate a \"Reply-To:\" header.",
+                    "type": "string"
+                },
+                "sendAsEmail": {
+                    "description": "The email address that appears in the \"From:\" header for mail sent using this alias. This is read-only for all operations except create.",
+                    "type": "string"
+                },
+                "signature": {
+                    "description": "An optional HTML signature that is included in messages composed with this alias in the Gmail web UI. This signature is added to new emails only.",
+                    "type": "string"
+                },
+                "smtpMsa": {
+                    "$ref": "SmtpMsa",
+                    "description": "An optional SMTP service that will be used as an outbound relay for mail sent using this alias. If this is empty, outbound mail will be sent directly from Gmail's servers to the destination SMTP service. This setting only applies to custom \"from\" aliases."
+                },
+                "treatAsAlias": {
+                    "description": "Whether Gmail should treat this address as an alias for the user's primary email address. This setting only applies to custom \"from\" aliases.",
+                    "type": "boolean"
+                },
+                "verificationStatus": {
+                    "description": "Indicates whether this address has been verified for use as a send-as alias. Read-only. This setting only applies to custom \"from\" aliases.",
+                    "enum": [
+                        "verificationStatusUnspecified",
+                        "accepted",
+                        "pending"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified verification status.",
+                        "The address is ready to use as a send-as alias.",
+                        "The address is awaiting verification by the owner."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SmimeInfo": {
+            "description": "An S/MIME email config.",
+            "id": "SmimeInfo",
+            "properties": {
+                "encryptedKeyPassword": {
+                    "description": "Encrypted key password, when key is encrypted.",
+                    "type": "string"
+                },
+                "expiration": {
+                    "description": "When the certificate expires (in milliseconds since epoch).",
+                    "format": "int64",
+                    "type": "string"
                 },
                 "id": {
-                  "description": "The ID of the message to retrieve.",
-                  "type": "string",
-                  "required": true,
-                  "location": "path"
+                    "description": "The immutable ID for the SmimeInfo.",
+                    "type": "string"
                 },
-                "format": {
-                  "enum": [
-                    "minimal",
-                    "full",
-                    "raw",
-                    "metadata"
-                  ],
-                  "type": "string",
-                  "enumDescriptions": [
-                    "Returns only email message ID and labels; does not return the email headers, body, or payload.",
-                    "Returns the full email message data with body content parsed in the `payload` field; the `raw` field is not used. Format cannot be used when accessing the api using the gmail.metadata scope.",
-                    "Returns the full email message data with body content in the `raw` field as a base64url encoded string; the `payload` field is not used. Format cannot be used when accessing the api using the gmail.metadata scope.",
-                    "Returns only email message ID, labels, and email headers."
-                  ],
-                  "description": "The format to return the message in.",
-                  "default": "full",
-                  "location": "query"
+                "isDefault": {
+                    "description": "Whether this SmimeInfo is the default one for this user's send-as address.",
+                    "type": "boolean"
+                },
+                "issuerCn": {
+                    "description": "The S/MIME certificate issuer's common name.",
+                    "type": "string"
+                },
+                "pem": {
+                    "description": "PEM formatted X509 concatenated certificate string (standard base64 encoding). Format used for returning key, which includes public key as well as certificate chain (not private key).",
+                    "type": "string"
+                },
+                "pkcs12": {
+                    "description": "PKCS#12 format containing a single private/public key pair and certificate chain. This format is only accepted from client for creating a new SmimeInfo and is never returned, because the private key is not intended to be exported. PKCS#12 may be encrypted, in which case encryptedKeyPassword should be set appropriately.",
+                    "format": "byte",
+                    "type": "string"
                 }
-              },
-              "flatPath": "gmail/v1/users/{userId}/messages/{id}",
-              "path": "gmail/v1/users/{userId}/messages/{id}",
-              "id": "gmail.users.messages.get",
-              "response": {
-                "$ref": "Message"
-              }
             },
-            "untrash": {
-              "parameterOrder": [
-                "userId",
-                "id"
-              ],
-              "path": "gmail/v1/users/{userId}/messages/{id}/untrash",
-              "id": "gmail.users.messages.untrash",
-              "description": "Removes the specified message from the trash.",
-              "httpMethod": "POST",
-              "response": {
-                "$ref": "Message"
-              },
-              "parameters": {
+            "type": "object"
+        },
+        "SmtpMsa": {
+            "description": "Configuration for communication with an SMTP service.",
+            "id": "SmtpMsa",
+            "properties": {
+                "host": {
+                    "description": "The hostname of the SMTP service. Required.",
+                    "type": "string"
+                },
+                "password": {
+                    "description": "The password that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.",
+                    "type": "string"
+                },
+                "port": {
+                    "description": "The port of the SMTP service. Required.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "securityMode": {
+                    "description": "The protocol that will be used to secure communication with the SMTP service. Required.",
+                    "enum": [
+                        "securityModeUnspecified",
+                        "none",
+                        "ssl",
+                        "starttls"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified security mode.",
+                        "Communication with the remote SMTP service is unsecured. Requires port 25.",
+                        "Communication with the remote SMTP service is secured using SSL.",
+                        "Communication with the remote SMTP service is secured using STARTTLS."
+                    ],
+                    "type": "string"
+                },
+                "username": {
+                    "description": "The username that will be used for authentication with the SMTP service. This is a write-only field that can be specified in requests to create or update SendAs settings; it is never populated in responses.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Thread": {
+            "description": "A collection of messages representing a conversation.",
+            "id": "Thread",
+            "properties": {
+                "historyId": {
+                    "description": "The ID of the last history record that modified this thread.",
+                    "format": "uint64",
+                    "type": "string"
+                },
                 "id": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "The ID of the message to remove from Trash."
+                    "description": "The unique ID of the thread.",
+                    "type": "string"
                 },
-                "userId": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "default": "me"
+                "messages": {
+                    "description": "The list of messages in the thread.",
+                    "items": {
+                        "$ref": "Message"
+                    },
+                    "type": "array"
+                },
+                "snippet": {
+                    "description": "A short part of the message text.",
+                    "type": "string"
                 }
-              },
-              "flatPath": "gmail/v1/users/{userId}/messages/{id}/untrash",
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.modify"
-              ]
             },
-            "import": {
-              "parameterOrder": [
-                "userId"
-              ],
-              "path": "gmail/v1/users/{userId}/messages/import",
-              "id": "gmail.users.messages.import",
-              "httpMethod": "POST",
-              "response": {
-                "$ref": "Message"
-              },
-              "description": "Imports a message into only this user's mailbox, with standard email delivery scanning and classification similar to receiving via SMTP. Does not send a message. Note: This function doesn't trigger forwarding rules or filters set up by the user.",
-              "mediaUpload": {
-                "maxSize": "52428800",
-                "protocols": {
-                  "resumable": {
-                    "multipart": true,
-                    "path": "/resumable/upload/gmail/v1/users/{userId}/messages/import"
-                  },
-                  "simple": {
-                    "multipart": true,
-                    "path": "/upload/gmail/v1/users/{userId}/messages/import"
-                  }
+            "type": "object"
+        },
+        "VacationSettings": {
+            "description": "Vacation auto-reply settings for an account. These settings correspond to the \"Vacation responder\" feature in the web interface.",
+            "id": "VacationSettings",
+            "properties": {
+                "enableAutoReply": {
+                    "description": "Flag that controls whether Gmail automatically replies to messages.",
+                    "type": "boolean"
                 },
-                "accept": [
-                  "message/*"
-                ]
-              },
-              "supportsMediaUpload": true,
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.insert",
-                "https://www.googleapis.com/auth/gmail.modify"
-              ],
-              "parameters": {
-                "processForCalendar": {
-                  "default": "false",
-                  "description": "Process calendar invites in the email and add any extracted meetings to the Google Calendar for this user.",
-                  "type": "boolean",
-                  "location": "query"
+                "endTime": {
+                    "description": "An optional end time for sending auto-replies (epoch ms). When this is specified, Gmail will automatically reply only to messages that it receives before the end time. If both `startTime` and `endTime` are specified, `startTime` must precede `endTime`.",
+                    "format": "int64",
+                    "type": "string"
                 },
-                "internalDateSource": {
-                  "location": "query",
-                  "enumDescriptions": [
-                    "Internal message date set to current time when received by Gmail.",
-                    "Internal message time based on 'Date' header in email, when valid."
-                  ],
-                  "default": "dateHeader",
-                  "description": "Source for Gmail's internal date of the message.",
-                  "enum": [
-                    "receivedTime",
-                    "dateHeader"
-                  ],
-                  "type": "string"
+                "responseBodyHtml": {
+                    "description": "Response body in HTML format. Gmail will sanitize the HTML before storing it. If both `response_body_plain_text` and `response_body_html` are specified, `response_body_html` will be used.",
+                    "type": "string"
                 },
-                "userId": {
-                  "location": "path",
-                  "default": "me",
-                  "required": true,
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "type": "string"
+                "responseBodyPlainText": {
+                    "description": "Response body in plain text format. If both `response_body_plain_text` and `response_body_html` are specified, `response_body_html` will be used.",
+                    "type": "string"
                 },
-                "deleted": {
-                  "location": "query",
-                  "default": "false",
-                  "type": "boolean",
-                  "description": "Mark the email as permanently deleted (not TRASH) and only visible in Google Vault to a Vault administrator. Only used for G Suite accounts."
+                "responseSubject": {
+                    "description": "Optional text to prepend to the subject line in vacation responses. In order to enable auto-replies, either the response subject or the response body must be nonempty.",
+                    "type": "string"
                 },
-                "neverMarkSpam": {
-                  "location": "query",
-                  "description": "Ignore the Gmail spam classifier decision and never mark this email as SPAM in the mailbox.",
-                  "default": "false",
-                  "type": "boolean"
+                "restrictToContacts": {
+                    "description": "Flag that determines whether responses are sent to recipients who are not in the user's list of contacts.",
+                    "type": "boolean"
+                },
+                "restrictToDomain": {
+                    "description": "Flag that determines whether responses are sent to recipients who are outside of the user's domain. This feature is only available for G Suite users.",
+                    "type": "boolean"
+                },
+                "startTime": {
+                    "description": "An optional start time for sending auto-replies (epoch ms). When this is specified, Gmail will automatically reply only to messages that it receives after the start time. If both `startTime` and `endTime` are specified, `startTime` must precede `endTime`.",
+                    "format": "int64",
+                    "type": "string"
                 }
-              },
-              "flatPath": "gmail/v1/users/{userId}/messages/import",
-              "request": {
-                "$ref": "Message"
-              }
             },
-            "trash": {
-              "response": {
-                "$ref": "Message"
-              },
-              "httpMethod": "POST",
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.modify"
-              ],
-              "parameterOrder": [
-                "userId",
-                "id"
-              ],
-              "parameters": {
-                "id": {
-                  "required": true,
-                  "location": "path",
-                  "description": "The ID of the message to Trash.",
-                  "type": "string"
-                },
-                "userId": {
-                  "type": "string",
-                  "location": "path",
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "default": "me",
-                  "required": true
-                }
-              },
-              "id": "gmail.users.messages.trash",
-              "description": "Moves the specified message to the trash.",
-              "path": "gmail/v1/users/{userId}/messages/{id}/trash",
-              "flatPath": "gmail/v1/users/{userId}/messages/{id}/trash"
-            },
-            "send": {
-              "mediaUpload": {
-                "protocols": {
-                  "resumable": {
-                    "multipart": true,
-                    "path": "/resumable/upload/gmail/v1/users/{userId}/messages/send"
-                  },
-                  "simple": {
-                    "path": "/upload/gmail/v1/users/{userId}/messages/send",
-                    "multipart": true
-                  }
-                },
-                "maxSize": "36700160",
-                "accept": [
-                  "message/*"
-                ]
-              },
-              "response": {
-                "$ref": "Message"
-              },
-              "flatPath": "gmail/v1/users/{userId}/messages/send",
-              "description": "Sends the specified message to the recipients in the `To`, `Cc`, and `Bcc` headers.",
-              "path": "gmail/v1/users/{userId}/messages/send",
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.addons.current.action.compose",
-                "https://www.googleapis.com/auth/gmail.compose",
-                "https://www.googleapis.com/auth/gmail.modify",
-                "https://www.googleapis.com/auth/gmail.send"
-              ],
-              "id": "gmail.users.messages.send",
-              "request": {
-                "$ref": "Message"
-              },
-              "httpMethod": "POST",
-              "supportsMediaUpload": true,
-              "parameterOrder": [
-                "userId"
-              ],
-              "parameters": {
-                "userId": {
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "default": "me"
-                }
-              }
-            },
-            "list": {
-              "path": "gmail/v1/users/{userId}/messages",
-              "httpMethod": "GET",
-              "parameters": {
-                "maxResults": {
-                  "format": "uint32",
-                  "location": "query",
-                  "default": "100",
-                  "type": "integer",
-                  "description": "Maximum number of messages to return."
-                },
-                "q": {
-                  "type": "string",
-                  "description": "Only return messages matching the specified query. Supports the same query format as the Gmail search box. For example, `\"from:someuser@example.com rfc822msgid: is:unread\"`. Parameter cannot be used when accessing the api using the gmail.metadata scope.",
-                  "location": "query"
-                },
-                "userId": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "default": "me",
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user."
+            "type": "object"
+        },
+        "WatchRequest": {
+            "description": "Set up or update a new push notification watch on this user's mailbox.",
+            "id": "WatchRequest",
+            "properties": {
+                "labelFilterAction": {
+                    "description": "Filtering behavior of labelIds list specified.",
+                    "enum": [
+                        "include",
+                        "exclude"
+                    ],
+                    "enumDescriptions": [
+                        "Only get push notifications for message changes relating to labelIds specified.",
+                        "Get push notifications for all message changes except those relating to labelIds specified."
+                    ],
+                    "type": "string"
                 },
                 "labelIds": {
-                  "repeated": true,
-                  "type": "string",
-                  "location": "query",
-                  "description": "Only return messages with labels that match all of the specified label IDs."
-                },
-                "pageToken": {
-                  "description": "Page token to retrieve a specific page of results in the list.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "includeSpamTrash": {
-                  "default": "false",
-                  "location": "query",
-                  "description": "Include messages from `SPAM` and `TRASH` in the results.",
-                  "type": "boolean"
-                }
-              },
-              "flatPath": "gmail/v1/users/{userId}/messages",
-              "id": "gmail.users.messages.list",
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.metadata",
-                "https://www.googleapis.com/auth/gmail.modify",
-                "https://www.googleapis.com/auth/gmail.readonly"
-              ],
-              "parameterOrder": [
-                "userId"
-              ],
-              "response": {
-                "$ref": "ListMessagesResponse"
-              },
-              "description": "Lists the messages in the user's mailbox."
-            },
-            "modify": {
-              "httpMethod": "POST",
-              "id": "gmail.users.messages.modify",
-              "request": {
-                "$ref": "ModifyMessageRequest"
-              },
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.modify"
-              ],
-              "path": "gmail/v1/users/{userId}/messages/{id}/modify",
-              "response": {
-                "$ref": "Message"
-              },
-              "parameterOrder": [
-                "userId",
-                "id"
-              ],
-              "description": "Modifies the labels on the specified message.",
-              "flatPath": "gmail/v1/users/{userId}/messages/{id}/modify",
-              "parameters": {
-                "userId": {
-                  "location": "path",
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "default": "me",
-                  "type": "string",
-                  "required": true
-                },
-                "id": {
-                  "required": true,
-                  "type": "string",
-                  "description": "The ID of the message to modify.",
-                  "location": "path"
-                }
-              }
-            },
-            "batchDelete": {
-              "parameterOrder": [
-                "userId"
-              ],
-              "path": "gmail/v1/users/{userId}/messages/batchDelete",
-              "request": {
-                "$ref": "BatchDeleteMessagesRequest"
-              },
-              "parameters": {
-                "userId": {
-                  "default": "me",
-                  "location": "path",
-                  "required": true,
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://mail.google.com/"
-              ],
-              "httpMethod": "POST",
-              "flatPath": "gmail/v1/users/{userId}/messages/batchDelete",
-              "id": "gmail.users.messages.batchDelete",
-              "description": "Deletes many messages by message ID. Provides no guarantees that messages were not already deleted or even existed at all."
-            },
-            "insert": {
-              "parameterOrder": [
-                "userId"
-              ],
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.insert",
-                "https://www.googleapis.com/auth/gmail.modify"
-              ],
-              "request": {
-                "$ref": "Message"
-              },
-              "supportsMediaUpload": true,
-              "response": {
-                "$ref": "Message"
-              },
-              "mediaUpload": {
-                "protocols": {
-                  "simple": {
-                    "path": "/upload/gmail/v1/users/{userId}/messages",
-                    "multipart": true
-                  },
-                  "resumable": {
-                    "path": "/resumable/upload/gmail/v1/users/{userId}/messages",
-                    "multipart": true
-                  }
-                },
-                "accept": [
-                  "message/*"
-                ],
-                "maxSize": "52428800"
-              },
-              "description": "Directly inserts a message into only this user's mailbox similar to `IMAP APPEND`, bypassing most scanning and classification. Does not send a message.",
-              "parameters": {
-                "internalDateSource": {
-                  "type": "string",
-                  "description": "Source for Gmail's internal date of the message.",
-                  "enumDescriptions": [
-                    "Internal message date set to current time when received by Gmail.",
-                    "Internal message time based on 'Date' header in email, when valid."
-                  ],
-                  "default": "receivedTime",
-                  "location": "query",
-                  "enum": [
-                    "receivedTime",
-                    "dateHeader"
-                  ]
-                },
-                "userId": {
-                  "required": true,
-                  "default": "me",
-                  "type": "string",
-                  "location": "path",
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user."
-                },
-                "deleted": {
-                  "description": "Mark the email as permanently deleted (not TRASH) and only visible in Google Vault to a Vault administrator. Only used for G Suite accounts.",
-                  "default": "false",
-                  "location": "query",
-                  "type": "boolean"
-                }
-              },
-              "id": "gmail.users.messages.insert",
-              "flatPath": "gmail/v1/users/{userId}/messages",
-              "httpMethod": "POST",
-              "path": "gmail/v1/users/{userId}/messages"
-            }
-          },
-          "resources": {
-            "attachments": {
-              "methods": {
-                "get": {
-                  "path": "gmail/v1/users/{userId}/messages/{messageId}/attachments/{id}",
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "MessagePartBody"
-                  },
-                  "parameterOrder": [
-                    "userId",
-                    "messageId",
-                    "id"
-                  ],
-                  "flatPath": "gmail/v1/users/{userId}/messages/{messageId}/attachments/{id}",
-                  "id": "gmail.users.messages.attachments.get",
-                  "parameters": {
-                    "id": {
-                      "location": "path",
-                      "description": "The ID of the attachment.",
-                      "type": "string",
-                      "required": true
+                    "description": "List of label_ids to restrict notifications about. By default, if unspecified, all changes are pushed out. If specified then dictates which labels are required for a push notification to be generated.",
+                    "items": {
+                        "type": "string"
                     },
-                    "userId": {
-                      "default": "me",
-                      "type": "string",
-                      "required": true,
-                      "location": "path",
-                      "description": "The user's email address. The special value `me` can be used to indicate the authenticated user."
-                    },
-                    "messageId": {
-                      "required": true,
-                      "type": "string",
-                      "description": "The ID of the message containing the attachment.",
-                      "location": "path"
-                    }
-                  },
-                  "description": "Gets the specified message attachment.",
-                  "scopes": [
-                    "https://mail.google.com/",
-                    "https://www.googleapis.com/auth/gmail.addons.current.message.action",
-                    "https://www.googleapis.com/auth/gmail.addons.current.message.readonly",
-                    "https://www.googleapis.com/auth/gmail.modify",
-                    "https://www.googleapis.com/auth/gmail.readonly"
-                  ]
+                    "type": "array"
+                },
+                "topicName": {
+                    "description": "A fully qualified Google Cloud Pub/Sub API topic name to publish the events to. This topic name **must** already exist in Cloud Pub/Sub and you **must** have already granted gmail \"publish\" permission on it. For example, \"projects/my-project-identifier/topics/my-topic-name\" (using the Cloud Pub/Sub \"v1\" topic naming format). Note that the \"my-project-identifier\" portion must exactly match your Google developer project id (the one executing this watch request).",
+                    "type": "string"
                 }
-              }
-            }
-          }
+            },
+            "type": "object"
         },
-        "drafts": {
-          "methods": {
-            "list": {
-              "description": "Lists the drafts in the user's mailbox.",
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.compose",
-                "https://www.googleapis.com/auth/gmail.modify",
-                "https://www.googleapis.com/auth/gmail.readonly"
-              ],
-              "flatPath": "gmail/v1/users/{userId}/drafts",
-              "path": "gmail/v1/users/{userId}/drafts",
-              "id": "gmail.users.drafts.list",
-              "parameterOrder": [
-                "userId"
-              ],
-              "response": {
-                "$ref": "ListDraftsResponse"
-              },
-              "httpMethod": "GET",
-              "parameters": {
-                "includeSpamTrash": {
-                  "type": "boolean",
-                  "location": "query",
-                  "default": "false",
-                  "description": "Include drafts from `SPAM` and `TRASH` in the results."
+        "WatchResponse": {
+            "description": "Push notification watch response.",
+            "id": "WatchResponse",
+            "properties": {
+                "expiration": {
+                    "description": "When Gmail will stop sending notifications for mailbox updates (epoch millis). Call `watch` again before this time to renew the watch.",
+                    "format": "int64",
+                    "type": "string"
                 },
-                "userId": {
-                  "location": "path",
-                  "type": "string",
-                  "default": "me",
-                  "required": true,
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user."
-                },
-                "q": {
-                  "description": "Only return draft messages matching the specified query. Supports the same query format as the Gmail search box. For example, `\"from:someuser@example.com rfc822msgid: is:unread\"`.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "pageToken": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "Page token to retrieve a specific page of results in the list."
-                },
-                "maxResults": {
-                  "format": "uint32",
-                  "description": "Maximum number of drafts to return.",
-                  "type": "integer",
-                  "default": "100",
-                  "location": "query"
+                "historyId": {
+                    "description": "The ID of the mailbox's current history record.",
+                    "format": "uint64",
+                    "type": "string"
                 }
-              }
             },
-            "update": {
-              "description": "Replaces a draft's content.",
-              "supportsMediaUpload": true,
-              "request": {
-                "$ref": "Draft"
-              },
-              "parameters": {
-                "userId": {
-                  "required": true,
-                  "location": "path",
-                  "default": "me",
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "type": "string"
-                },
-                "id": {
-                  "location": "path",
-                  "required": true,
-                  "description": "The ID of the draft to update.",
-                  "type": "string"
-                }
-              },
-              "httpMethod": "PUT",
-              "id": "gmail.users.drafts.update",
-              "flatPath": "gmail/v1/users/{userId}/drafts/{id}",
-              "response": {
-                "$ref": "Draft"
-              },
-              "path": "gmail/v1/users/{userId}/drafts/{id}",
-              "parameterOrder": [
-                "userId",
-                "id"
-              ],
-              "mediaUpload": {
-                "maxSize": "36700160",
-                "protocols": {
-                  "simple": {
-                    "multipart": true,
-                    "path": "/upload/gmail/v1/users/{userId}/drafts/{id}"
-                  },
-                  "resumable": {
-                    "path": "/resumable/upload/gmail/v1/users/{userId}/drafts/{id}",
-                    "multipart": true
-                  }
-                },
-                "accept": [
-                  "message/*"
-                ]
-              },
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.addons.current.action.compose",
-                "https://www.googleapis.com/auth/gmail.compose",
-                "https://www.googleapis.com/auth/gmail.modify"
-              ]
-            },
-            "send": {
-              "description": "Sends the specified, existing draft to the recipients in the `To`, `Cc`, and `Bcc` headers.",
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.addons.current.action.compose",
-                "https://www.googleapis.com/auth/gmail.compose",
-                "https://www.googleapis.com/auth/gmail.modify"
-              ],
-              "request": {
-                "$ref": "Draft"
-              },
-              "mediaUpload": {
-                "accept": [
-                  "message/*"
-                ],
-                "maxSize": "36700160",
-                "protocols": {
-                  "simple": {
-                    "multipart": true,
-                    "path": "/upload/gmail/v1/users/{userId}/drafts/send"
-                  },
-                  "resumable": {
-                    "multipart": true,
-                    "path": "/resumable/upload/gmail/v1/users/{userId}/drafts/send"
-                  }
-                }
-              },
-              "response": {
-                "$ref": "Message"
-              },
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "userId"
-              ],
-              "parameters": {
-                "userId": {
-                  "location": "path",
-                  "type": "string",
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "required": true,
-                  "default": "me"
-                }
-              },
-              "id": "gmail.users.drafts.send",
-              "flatPath": "gmail/v1/users/{userId}/drafts/send",
-              "path": "gmail/v1/users/{userId}/drafts/send",
-              "supportsMediaUpload": true
-            },
-            "create": {
-              "flatPath": "gmail/v1/users/{userId}/drafts",
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.addons.current.action.compose",
-                "https://www.googleapis.com/auth/gmail.compose",
-                "https://www.googleapis.com/auth/gmail.modify"
-              ],
-              "response": {
-                "$ref": "Draft"
-              },
-              "id": "gmail.users.drafts.create",
-              "request": {
-                "$ref": "Draft"
-              },
-              "description": "Creates a new draft with the `DRAFT` label.",
-              "parameterOrder": [
-                "userId"
-              ],
-              "supportsMediaUpload": true,
-              "mediaUpload": {
-                "accept": [
-                  "message/*"
-                ],
-                "maxSize": "36700160",
-                "protocols": {
-                  "simple": {
-                    "path": "/upload/gmail/v1/users/{userId}/drafts",
-                    "multipart": true
-                  },
-                  "resumable": {
-                    "path": "/resumable/upload/gmail/v1/users/{userId}/drafts",
-                    "multipart": true
-                  }
-                }
-              },
-              "httpMethod": "POST",
-              "path": "gmail/v1/users/{userId}/drafts",
-              "parameters": {
-                "userId": {
-                  "type": "string",
-                  "location": "path",
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "required": true,
-                  "default": "me"
-                }
-              }
-            },
-            "get": {
-              "parameters": {
-                "userId": {
-                  "location": "path",
-                  "default": "me",
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user.",
-                  "required": true,
-                  "type": "string"
-                },
-                "format": {
-                  "type": "string",
-                  "location": "query",
-                  "default": "full",
-                  "enum": [
-                    "minimal",
-                    "full",
-                    "raw",
-                    "metadata"
-                  ],
-                  "description": "The format to return the draft in.",
-                  "enumDescriptions": [
-                    "Returns only email message ID and labels; does not return the email headers, body, or payload.",
-                    "Returns the full email message data with body content parsed in the `payload` field; the `raw` field is not used. Format cannot be used when accessing the api using the gmail.metadata scope.",
-                    "Returns the full email message data with body content in the `raw` field as a base64url encoded string; the `payload` field is not used. Format cannot be used when accessing the api using the gmail.metadata scope.",
-                    "Returns only email message ID, labels, and email headers."
-                  ]
-                },
-                "id": {
-                  "required": true,
-                  "location": "path",
-                  "description": "The ID of the draft to retrieve.",
-                  "type": "string"
-                }
-              },
-              "parameterOrder": [
-                "userId",
-                "id"
-              ],
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.compose",
-                "https://www.googleapis.com/auth/gmail.modify",
-                "https://www.googleapis.com/auth/gmail.readonly"
-              ],
-              "description": "Gets the specified draft.",
-              "path": "gmail/v1/users/{userId}/drafts/{id}",
-              "id": "gmail.users.drafts.get",
-              "flatPath": "gmail/v1/users/{userId}/drafts/{id}",
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "Draft"
-              }
-            },
-            "delete": {
-              "parameterOrder": [
-                "userId",
-                "id"
-              ],
-              "parameters": {
-                "id": {
-                  "description": "The ID of the draft to delete.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                },
-                "userId": {
-                  "type": "string",
-                  "default": "me",
-                  "required": true,
-                  "location": "path",
-                  "description": "The user's email address. The special value `me` can be used to indicate the authenticated user."
-                }
-              },
-              "httpMethod": "DELETE",
-              "path": "gmail/v1/users/{userId}/drafts/{id}",
-              "flatPath": "gmail/v1/users/{userId}/drafts/{id}",
-              "description": "Immediately and permanently deletes the specified draft. Does not simply trash it.",
-              "scopes": [
-                "https://mail.google.com/",
-                "https://www.googleapis.com/auth/gmail.addons.current.action.compose",
-                "https://www.googleapis.com/auth/gmail.compose",
-                "https://www.googleapis.com/auth/gmail.modify"
-              ],
-              "id": "gmail.users.drafts.delete"
-            }
-          }
+            "type": "object"
         }
-      }
-    }
-  },
-  "batchPath": "batch",
-  "ownerName": "Google",
-  "parameters": {
-    "access_token": {
-      "location": "query",
-      "description": "OAuth access token.",
-      "type": "string"
     },
-    "alt": {
-      "type": "string",
-      "location": "query",
-      "default": "json",
-      "description": "Data format for response.",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ]
-    },
-    "key": {
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "location": "query",
-      "type": "string"
-    },
-    "fields": {
-      "location": "query",
-      "type": "string",
-      "description": "Selector specifying which fields to include in a partial response."
-    },
-    "upload_protocol": {
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "type": "string",
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format."
-    },
-    "prettyPrint": {
-      "default": "true",
-      "location": "query",
-      "type": "boolean",
-      "description": "Returns response with indentations and line breaks."
-    },
-    "quotaUser": {
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "location": "query",
-      "type": "string"
-    },
-    "oauth_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user."
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "callback": {
-      "type": "string",
-      "location": "query",
-      "description": "JSONP"
-    }
-  },
-  "title": "Gmail API",
-  "version": "v1",
-  "protocol": "rest",
-  "kind": "discovery#restDescription",
-  "description": "The Gmail API lets you view and manage Gmail mailbox data like threads, messages, and labels."
-}
+    "servicePath": "",
+    "title": "Gmail API",
+    "version": "v1"
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/groupssettings.v1.json b/googleapiclient/discovery_cache/documents/groupssettings.v1.json
index 6866ae5..30b0078 100644
--- a/googleapiclient/discovery_cache/documents/groupssettings.v1.json
+++ b/googleapiclient/discovery_cache/documents/groupssettings.v1.json
@@ -1,415 +1,415 @@
 {
-  "discoveryVersion": "v1",
-  "basePath": "/groups/v1/groups/",
-  "id": "groupssettings:v1",
-  "documentationLink": "https://developers.google.com/google-apps/groups-settings/get_started",
-  "parameters": {
-    "prettyPrint": {
-      "type": "boolean",
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "default": "true"
-    },
-    "fields": {
-      "type": "string",
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response."
-    },
-    "alt": {
-      "location": "query",
-      "type": "string",
-      "description": "Data format for the response.",
-      "default": "atom",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/atom+xml",
-        "Responses with Content-Type of application/json"
-      ],
-      "enum": [
-        "atom",
-        "json"
-      ]
-    },
-    "key": {
-      "location": "query",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "type": "string"
-    },
-    "userIp": {
-      "location": "query",
-      "description": "Deprecated. Please use quotaUser instead.",
-      "type": "string"
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "quotaUser": {
-      "description": "An opaque string that represents a user for quota purposes. Must not exceed 40 characters.",
-      "location": "query",
-      "type": "string"
-    }
-  },
-  "version": "v1",
-  "baseUrl": "https://www.googleapis.com/groups/v1/groups/",
-  "ownerDomain": "google.com",
-  "servicePath": "groups/v1/groups/",
-  "rootUrl": "https://www.googleapis.com/",
-  "protocol": "rest",
-  "schemas": {
-    "Groups": {
-      "id": "Groups",
-      "properties": {
-        "whoCanMarkFavoriteReplyOnAnyTopic": {
-          "type": "string",
-          "description": "Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark any other user's post as a favorite reply. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE"
-        },
-        "isArchived": {
-          "description": "Allows the Group contents to be archived. Possible values are:  \n- true: Archive messages sent to the group. \n- false: Do not keep an archive of messages sent to this group. If false, previously archived messages remain in the archive.",
-          "type": "string"
-        },
-        "allowWebPosting": {
-          "type": "string",
-          "description": "Allows posting from web. Possible values are:  \n- true: Allows any member to post to the group forum. \n- false: Members only use Gmail to communicate with the group."
-        },
-        "whoCanPostAnnouncements": {
-          "type": "string",
-          "description": "Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can post announcements, a special topic type. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE"
-        },
-        "replyTo": {
-          "description": "Specifies who receives the default reply. Possible values are:  \n- REPLY_TO_CUSTOM: For replies to messages, use the group's custom email address.\nWhen the group's ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property holds the custom email address used when replying to a message. If the group's ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property must have a value. Otherwise an error is returned.\n \n- REPLY_TO_SENDER: The reply sent to author of message. \n- REPLY_TO_LIST: This reply message is sent to the group. \n- REPLY_TO_OWNER: The reply is sent to the owner(s) of the group. This does not include the group's managers. \n- REPLY_TO_IGNORE: Group users individually decide where the message reply is sent. \n- REPLY_TO_MANAGERS: This reply message is sent to the group's managers, which includes all managers and the group owner.",
-          "type": "string"
-        },
-        "whoCanLockTopics": {
-          "description": "Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can prevent users from posting replies to topics. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE",
-          "type": "string"
-        },
-        "messageDisplayFont": {
-          "description": "Deprecated. The default message display font always has a value of \"DEFAULT_FONT\".",
-          "type": "string"
-        },
-        "whoCanJoin": {
-          "type": "string",
-          "description": "Permission to join group. Possible values are:  \n- ANYONE_CAN_JOIN: Anyone in the account domain can join. This includes accounts with multiple domains. \n- ALL_IN_DOMAIN_CAN_JOIN: Any Internet user who is outside your domain can access your Google Groups service and view the list of groups in your Groups directory. Warning: Group owners can add external addresses, outside of the domain to their groups. They can also allow people outside your domain to join their groups. If you later disable this option, any external addresses already added to users' groups remain in those groups. \n- INVITED_CAN_JOIN: Candidates for membership can be invited to join.  \n- CAN_REQUEST_TO_JOIN: Non members can request an invitation to join."
-        },
-        "whoCanLeaveGroup": {
-          "description": "Permission to leave the group. Possible values are:  \n- ALL_MANAGERS_CAN_LEAVE \n- ALL_MEMBERS_CAN_LEAVE \n- NONE_CAN_LEAVE",
-          "type": "string"
-        },
-        "maxMessageBytes": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Deprecated. The maximum size of a message is 25Mb."
-        },
-        "whoCanModifyTagsAndCategories": {
-          "type": "string",
-          "description": "Deprecated. This is merged into the new whoCanAssistContent setting. Permission to change tags and categories. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE"
-        },
-        "whoCanModifyMembers": {
-          "type": "string",
-          "description": "Deprecated. This is merged into the new whoCanModerateMembers setting. Specifies who can change group members' roles. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE"
-        },
-        "messageModerationLevel": {
-          "description": "Moderation level of incoming messages. Possible values are:  \n- MODERATE_ALL_MESSAGES: All messages are sent to the group owner's email address for approval. If approved, the message is sent to the group. \n- MODERATE_NON_MEMBERS: All messages from non group members are sent to the group owner's email address for approval. If approved, the message is sent to the group. \n- MODERATE_NEW_MEMBERS: All messages from new members are sent to the group owner's email address for approval. If approved, the message is sent to the group. \n- MODERATE_NONE: No moderator approval is required. Messages are delivered directly to the group. Note: When the whoCanPostMessage is set to ANYONE_CAN_POST, we recommend the messageModerationLevel be set to MODERATE_NON_MEMBERS to protect the group from possible spam.\nWhen memberCanPostAsTheGroup is true, any message moderation settings on individual users or new members will not apply to posts made on behalf of the group.",
-          "type": "string"
-        },
-        "whoCanViewMembership": {
-          "description": "Permissions to view membership. Possible values are:  \n- ALL_IN_DOMAIN_CAN_VIEW: Anyone in the account can view the group members list.\nIf a group already has external members, those members can still send email to this group.\n \n- ALL_MEMBERS_CAN_VIEW: The group members can view the group members list. \n- ALL_MANAGERS_CAN_VIEW: The group managers can view group members list.",
-          "type": "string"
-        },
-        "whoCanBanUsers": {
-          "type": "string",
-          "description": "Specifies who can deny membership to users. This permission will be deprecated once it is merged into the new whoCanModerateMembers setting. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE"
-        },
-        "customFooterText": {
-          "description": "Set the content of custom footer text. The maximum number of characters is 1,000.",
-          "type": "string"
-        },
-        "enableCollaborativeInbox": {
-          "description": "Specifies whether a collaborative inbox will remain turned on for the group. Possible values are:  \n- true \n- false",
-          "type": "string"
-        },
-        "whoCanUnassignTopic": {
-          "type": "string",
-          "description": "Deprecated. This is merged into the new whoCanAssistContent setting. Permission to unassign any topic in a forum. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE"
-        },
-        "email": {
-          "type": "string",
-          "description": "The group's email address. This property can be updated using the Directory API. Note: Only a group owner can change a group's email address. A group manager can't do this.\nWhen you change your group's address using the Directory API or the control panel, you are changing the address your subscribers use to send email and the web address people use to access your group. People can't reach your group by visiting the old address."
-        },
-        "whoCanModerateContent": {
-          "description": "Specifies who can moderate content. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE",
-          "type": "string"
-        },
-        "whoCanTakeTopics": {
-          "description": "Deprecated. This is merged into the new whoCanAssistContent setting. Permission to take topics in a forum. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE",
-          "type": "string"
-        },
-        "whoCanDeleteTopics": {
-          "description": "Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can delete topics. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE",
-          "type": "string"
-        },
-        "primaryLanguage": {
-          "type": "string",
-          "description": "The primary language for group. For a group's primary language use the language tags from the G Suite languages found at G Suite Email Settings API Email Language Tags."
-        },
-        "showInGroupDirectory": {
-          "description": "Deprecated. This is merged into the new whoCanDiscoverGroup setting. Allows the group to be visible in the Groups Directory. Possible values are:  \n- true: All groups in the account are listed in the Groups directory. \n- false: All groups in the account are not listed in the directory.",
-          "type": "string"
-        },
-        "description": {
-          "type": "string",
-          "description": "Description of the group. This property value may be an empty string if no group description has been entered. If entered, the maximum group description is no more than 300 characters."
-        },
-        "whoCanMakeTopicsSticky": {
-          "type": "string",
-          "description": "Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can make topics appear at the top of the topic list. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE"
-        },
-        "spamModerationLevel": {
-          "description": "Specifies moderation levels for messages detected as spam. Possible values are:  \n- ALLOW: Post the message to the group. \n- MODERATE: Send the message to the moderation queue. This is the default. \n- SILENTLY_MODERATE: Send the message to the moderation queue, but do not send notification to moderators. \n- REJECT: Immediately reject the message.",
-          "type": "string"
-        },
-        "sendMessageDenyNotification": {
-          "description": "Allows a member to be notified if the member's message to the group is denied by the group owner. Possible values are:  \n- true: When a message is rejected, send the deny message notification to the message author.\nThe defaultMessageDenyNotificationText property is dependent on the sendMessageDenyNotification property being true.\n \n- false: When a message is rejected, no notification is sent.",
-          "type": "string"
-        },
-        "whoCanHideAbuse": {
-          "type": "string",
-          "description": "Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can hide posts by reporting them as abuse. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE"
-        },
-        "customRolesEnabledForSettingsToBeMerged": {
-          "description": "Specifies whether the group has a custom role that's included in one of the settings being merged. This field is read-only and update/patch requests to it are ignored. Possible values are:  \n- true \n- false",
-          "type": "string"
-        },
-        "whoCanDeleteAnyPost": {
-          "description": "Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can delete replies to topics. (Authors can always delete their own posts). Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE",
-          "type": "string"
-        },
-        "whoCanMarkNoResponseNeeded": {
-          "type": "string",
-          "description": "Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a topic as not needing a response. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE"
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of the group, which has a maximum size of 75 characters."
-        },
-        "whoCanAssistContent": {
-          "description": "Specifies who can moderate metadata. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE",
-          "type": "string"
-        },
-        "whoCanApproveMessages": {
-          "description": "Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can approve pending messages in the moderation queue. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE",
-          "type": "string"
-        },
-        "whoCanAddReferences": {
-          "description": "Deprecated. This functionality is no longer supported in the Google Groups UI. The value is always \"NONE\".",
-          "type": "string"
-        },
-        "whoCanMarkDuplicate": {
-          "description": "Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a topic as a duplicate of another topic. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE",
-          "type": "string"
-        },
-        "favoriteRepliesOnTop": {
-          "description": "Indicates if favorite replies should be displayed above other replies.  \n- true: Favorite replies will be displayed above other replies. \n- false: Favorite replies will not be displayed above other replies.",
-          "type": "string"
-        },
-        "whoCanMarkFavoriteReplyOnOwnTopic": {
-          "description": "Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a post for a topic they started as a favorite reply. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE",
-          "type": "string"
-        },
-        "whoCanAdd": {
-          "description": "Deprecated. This is merged into the new whoCanModerateMembers setting. Permissions to add members. Possible values are:  \n- ALL_MEMBERS_CAN_ADD: Managers and members can directly add new members. \n- ALL_MANAGERS_CAN_ADD: Only managers can directly add new members. this includes the group's owner. \n- ALL_OWNERS_CAN_ADD: Only owners can directly add new members. \n- NONE_CAN_ADD: No one can directly add new members.",
-          "type": "string"
-        },
-        "whoCanEnterFreeFormTags": {
-          "description": "Deprecated. This is merged into the new whoCanAssistContent setting. Permission to enter free form tags for topics in a forum. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE",
-          "type": "string"
-        },
-        "whoCanAssignTopics": {
-          "description": "Deprecated. This is merged into the new whoCanAssistContent setting. Permission to assign topics in a forum to another user. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE",
-          "type": "string"
-        },
-        "archiveOnly": {
-          "type": "string",
-          "description": "Allows the group to be archived only. Possible values are:  \n- true: Group is archived and the group is inactive. New messages to this group are rejected. The older archived messages are browseable and searchable.  \n- If true, the whoCanPostMessage property is set to NONE_CAN_POST.  \n- If reverted from true to false, whoCanPostMessages is set to ALL_MANAGERS_CAN_POST.  \n- false: The group is active and can receive messages.  \n- When false, updating whoCanPostMessage to NONE_CAN_POST, results in an error."
-        },
-        "whoCanMoveTopicsIn": {
-          "type": "string",
-          "description": "Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can move topics into the group or forum. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE"
-        },
-        "whoCanMoveTopicsOut": {
-          "type": "string",
-          "description": "Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can move topics out of the group or forum. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE"
-        },
-        "customReplyTo": {
-          "type": "string",
-          "description": "An email address used when replying to a message if the replyTo property is set to REPLY_TO_CUSTOM. This address is defined by an account administrator.  \n- When the group's ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property holds a custom email address used when replying to a message. \n- If the group's ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property must have a text value or an error is returned."
-        },
-        "kind": {
-          "description": "The type of the resource. It is always groupsSettings#groups.",
-          "default": "groupsSettings#groups",
-          "type": "string"
-        },
-        "whoCanApproveMembers": {
-          "description": "Specifies who can approve members who ask to join groups. This permission will be deprecated once it is merged into the new whoCanModerateMembers setting. Possible values are:  \n- ALL_MEMBERS_CAN_APPROVE \n- ALL_MANAGERS_CAN_APPROVE \n- ALL_OWNERS_CAN_APPROVE \n- NONE_CAN_APPROVE",
-          "type": "string"
-        },
-        "whoCanDiscoverGroup": {
-          "description": "Specifies the set of users for whom this group is discoverable. Possible values are:  \n- ANYONE_CAN_DISCOVER \n- ALL_IN_DOMAIN_CAN_DISCOVER \n- ALL_MEMBERS_CAN_DISCOVER",
-          "type": "string"
-        },
-        "whoCanViewGroup": {
-          "type": "string",
-          "description": "Permissions to view group messages. Possible values are:  \n- ANYONE_CAN_VIEW: Any Internet user can view the group's messages.  \n- ALL_IN_DOMAIN_CAN_VIEW: Anyone in your account can view this group's messages. \n- ALL_MEMBERS_CAN_VIEW: All group members can view the group's messages. \n- ALL_MANAGERS_CAN_VIEW: Any group manager can view this group's messages."
-        },
-        "allowExternalMembers": {
-          "type": "string",
-          "description": "Identifies whether members external to your organization can join the group. Possible values are:  \n- true: G Suite users external to your organization can become members of this group. \n- false: Users not belonging to the organization are not allowed to become members of this group."
-        },
-        "allowGoogleCommunication": {
-          "type": "string",
-          "description": "Deprecated. Allows Google to contact administrator of the group.  \n- true: Allow Google to contact managers of this group. Occasionally Google may send updates on the latest features, ask for input on new features, or ask for permission to highlight your group. \n- false: Google can not contact managers of this group."
-        },
-        "whoCanUnmarkFavoriteReplyOnAnyTopic": {
-          "type": "string",
-          "description": "Deprecated. This is merged into the new whoCanAssistContent setting. Permission to unmark any post from a favorite reply. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE"
-        },
-        "whoCanPostMessage": {
-          "type": "string",
-          "description": "Permissions to post messages. Possible values are:  \n- NONE_CAN_POST: The group is disabled and archived. No one can post a message to this group.  \n- When archiveOnly is false, updating whoCanPostMessage to NONE_CAN_POST, results in an error. \n- If archiveOnly is reverted from true to false, whoCanPostMessages is set to ALL_MANAGERS_CAN_POST.  \n- ALL_MANAGERS_CAN_POST: Managers, including group owners, can post messages. \n- ALL_MEMBERS_CAN_POST: Any group member can post a message. \n- ALL_OWNERS_CAN_POST: Only group owners can post a message. \n- ALL_IN_DOMAIN_CAN_POST: Anyone in the account can post a message.  \n- ANYONE_CAN_POST: Any Internet user who outside your account can access your Google Groups service and post a message. Note: When whoCanPostMessage is set to ANYONE_CAN_POST, we recommend the messageModerationLevel be set to MODERATE_NON_MEMBERS to protect the group from possible spam."
-        },
-        "includeCustomFooter": {
-          "description": "Whether to include custom footer. Possible values are:  \n- true \n- false",
-          "type": "string"
-        },
-        "whoCanModerateMembers": {
-          "description": "Specifies who can manage members. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE",
-          "type": "string"
-        },
-        "whoCanInvite": {
-          "type": "string",
-          "description": "Deprecated. This is merged into the new whoCanModerateMembers setting. Permissions to invite new members. Possible values are:  \n- ALL_MEMBERS_CAN_INVITE: Managers and members can invite a new member candidate. \n- ALL_MANAGERS_CAN_INVITE: Only managers can invite a new member. This includes the group's owner. \n- ALL_OWNERS_CAN_INVITE: Only owners can invite a new member. \n- NONE_CAN_INVITE: No one can invite a new member candidate."
-        },
-        "membersCanPostAsTheGroup": {
-          "description": "Enables members to post messages as the group. Possible values are:  \n- true: Group member can post messages using the group's email address instead of their own email address. Message appear to originate from the group itself. Note: When true, any message moderation settings on individual users or new members do not apply to posts made on behalf of the group. \n- false: Members can not post in behalf of the group's email address.",
-          "type": "string"
-        },
-        "defaultMessageDenyNotificationText": {
-          "type": "string",
-          "description": "When a message is rejected, this is text for the rejection notification sent to the message's author. By default, this property is empty and has no value in the API's response body. The maximum notification text size is 10,000 characters. Note: Requires sendMessageDenyNotification property to be true."
-        },
-        "includeInGlobalAddressList": {
-          "type": "string",
-          "description": "Enables the group to be included in the Global Address List. For more information, see the help center. Possible values are:  \n- true: Group is included in the Global Address List. \n- false: Group is not included in the Global Address List."
-        },
-        "whoCanContactOwner": {
-          "description": "Permission to contact owner of the group via web UI. Possible values are:  \n- ALL_IN_DOMAIN_CAN_CONTACT \n- ALL_MANAGERS_CAN_CONTACT \n- ALL_MEMBERS_CAN_CONTACT \n- ANYONE_CAN_CONTACT",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "JSON template for Group resource"
-    }
-  },
-  "name": "groupssettings",
-  "description": "Manages permission levels and related settings of a group.",
-  "kind": "discovery#restDescription",
-  "resources": {
-    "groups": {
-      "methods": {
-        "get": {
-          "path": "{groupUniqueId}",
-          "parameterOrder": [
-            "groupUniqueId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/apps.groups.settings"
-          ],
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "Groups"
-          },
-          "description": "Gets one resource by id.",
-          "parameters": {
-            "groupUniqueId": {
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "The group's email address."
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/apps.groups.settings": {
+                    "description": "View and manage the settings of a G Suite group"
+                }
             }
-          },
-          "id": "groupsSettings.groups.get"
-        },
-        "update": {
-          "response": {
-            "$ref": "Groups"
-          },
-          "description": "Updates an existing resource.",
-          "parameters": {
-            "groupUniqueId": {
-              "description": "The group's email address.",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "request": {
-            "$ref": "Groups"
-          },
-          "parameterOrder": [
-            "groupUniqueId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/apps.groups.settings"
-          ],
-          "id": "groupsSettings.groups.update",
-          "httpMethod": "PUT",
-          "path": "{groupUniqueId}"
-        },
-        "patch": {
-          "parameters": {
-            "groupUniqueId": {
-              "description": "The group's email address.",
-              "location": "path",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "description": "Updates an existing resource. This method supports patch semantics.",
-          "parameterOrder": [
-            "groupUniqueId"
-          ],
-          "httpMethod": "PATCH",
-          "request": {
-            "$ref": "Groups"
-          },
-          "id": "groupsSettings.groups.patch",
-          "response": {
-            "$ref": "Groups"
-          },
-          "path": "{groupUniqueId}",
-          "scopes": [
-            "https://www.googleapis.com/auth/apps.groups.settings"
-          ]
         }
-      }
-    }
-  },
-  "title": "Groups Settings API",
-  "batchPath": "batch/groupssettings/v1",
-  "revision": "20200617",
-  "ownerName": "Google",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/apps.groups.settings": {
-          "description": "View and manage the settings of a G Suite group"
+    },
+    "basePath": "/groups/v1/groups/",
+    "baseUrl": "https://www.googleapis.com/groups/v1/groups/",
+    "batchPath": "batch/groupssettings/v1",
+    "description": "Manages permission levels and related settings of a group.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://developers.google.com/google-apps/groups-settings/get_started",
+    "icons": {
+        "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
+        "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
+    },
+    "id": "groupssettings:v1",
+    "kind": "discovery#restDescription",
+    "name": "groupssettings",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "alt": {
+            "default": "atom",
+            "description": "Data format for the response.",
+            "enum": [
+                "atom",
+                "json"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/atom+xml",
+                "Responses with Content-Type of application/json"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "An opaque string that represents a user for quota purposes. Must not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "userIp": {
+            "description": "Deprecated. Please use quotaUser instead.",
+            "location": "query",
+            "type": "string"
         }
-      }
-    }
-  },
-  "icons": {
-    "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
-    "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
-  }
-}
+    },
+    "protocol": "rest",
+    "resources": {
+        "groups": {
+            "methods": {
+                "get": {
+                    "description": "Gets one resource by id.",
+                    "httpMethod": "GET",
+                    "id": "groupsSettings.groups.get",
+                    "parameterOrder": [
+                        "groupUniqueId"
+                    ],
+                    "parameters": {
+                        "groupUniqueId": {
+                            "description": "The group's email address.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "{groupUniqueId}",
+                    "response": {
+                        "$ref": "Groups"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/apps.groups.settings"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates an existing resource. This method supports patch semantics.",
+                    "httpMethod": "PATCH",
+                    "id": "groupsSettings.groups.patch",
+                    "parameterOrder": [
+                        "groupUniqueId"
+                    ],
+                    "parameters": {
+                        "groupUniqueId": {
+                            "description": "The group's email address.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "{groupUniqueId}",
+                    "request": {
+                        "$ref": "Groups"
+                    },
+                    "response": {
+                        "$ref": "Groups"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/apps.groups.settings"
+                    ]
+                },
+                "update": {
+                    "description": "Updates an existing resource.",
+                    "httpMethod": "PUT",
+                    "id": "groupsSettings.groups.update",
+                    "parameterOrder": [
+                        "groupUniqueId"
+                    ],
+                    "parameters": {
+                        "groupUniqueId": {
+                            "description": "The group's email address.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "{groupUniqueId}",
+                    "request": {
+                        "$ref": "Groups"
+                    },
+                    "response": {
+                        "$ref": "Groups"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/apps.groups.settings"
+                    ]
+                }
+            }
+        }
+    },
+    "revision": "20201231",
+    "rootUrl": "https://www.googleapis.com/",
+    "schemas": {
+        "Groups": {
+            "description": "JSON template for Group resource",
+            "id": "Groups",
+            "properties": {
+                "allowExternalMembers": {
+                    "description": "Identifies whether members external to your organization can join the group. Possible values are:  \n- true: G Suite users external to your organization can become members of this group. \n- false: Users not belonging to the organization are not allowed to become members of this group.",
+                    "type": "string"
+                },
+                "allowGoogleCommunication": {
+                    "description": "Deprecated. Allows Google to contact administrator of the group.  \n- true: Allow Google to contact managers of this group. Occasionally Google may send updates on the latest features, ask for input on new features, or ask for permission to highlight your group. \n- false: Google can not contact managers of this group.",
+                    "type": "string"
+                },
+                "allowWebPosting": {
+                    "description": "Allows posting from web. Possible values are:  \n- true: Allows any member to post to the group forum. \n- false: Members only use Gmail to communicate with the group.",
+                    "type": "string"
+                },
+                "archiveOnly": {
+                    "description": "Allows the group to be archived only. Possible values are:  \n- true: Group is archived and the group is inactive. New messages to this group are rejected. The older archived messages are browseable and searchable.  \n- If true, the whoCanPostMessage property is set to NONE_CAN_POST.  \n- If reverted from true to false, whoCanPostMessages is set to ALL_MANAGERS_CAN_POST.  \n- false: The group is active and can receive messages.  \n- When false, updating whoCanPostMessage to NONE_CAN_POST, results in an error.",
+                    "type": "string"
+                },
+                "customFooterText": {
+                    "description": "Set the content of custom footer text. The maximum number of characters is 1,000.",
+                    "type": "string"
+                },
+                "customReplyTo": {
+                    "description": "An email address used when replying to a message if the replyTo property is set to REPLY_TO_CUSTOM. This address is defined by an account administrator.  \n- When the group's ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property holds a custom email address used when replying to a message. \n- If the group's ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property must have a text value or an error is returned.",
+                    "type": "string"
+                },
+                "customRolesEnabledForSettingsToBeMerged": {
+                    "description": "Specifies whether the group has a custom role that's included in one of the settings being merged. This field is read-only and update/patch requests to it are ignored. Possible values are:  \n- true \n- false",
+                    "type": "string"
+                },
+                "defaultMessageDenyNotificationText": {
+                    "description": "When a message is rejected, this is text for the rejection notification sent to the message's author. By default, this property is empty and has no value in the API's response body. The maximum notification text size is 10,000 characters. Note: Requires sendMessageDenyNotification property to be true.",
+                    "type": "string"
+                },
+                "description": {
+                    "description": "Description of the group. This property value may be an empty string if no group description has been entered. If entered, the maximum group description is no more than 300 characters.",
+                    "type": "string"
+                },
+                "email": {
+                    "description": "The group's email address. This property can be updated using the Directory API. Note: Only a group owner can change a group's email address. A group manager can't do this.\nWhen you change your group's address using the Directory API or the control panel, you are changing the address your subscribers use to send email and the web address people use to access your group. People can't reach your group by visiting the old address.",
+                    "type": "string"
+                },
+                "enableCollaborativeInbox": {
+                    "description": "Specifies whether a collaborative inbox will remain turned on for the group. Possible values are:  \n- true \n- false",
+                    "type": "string"
+                },
+                "favoriteRepliesOnTop": {
+                    "description": "Indicates if favorite replies should be displayed above other replies.  \n- true: Favorite replies will be displayed above other replies. \n- false: Favorite replies will not be displayed above other replies.",
+                    "type": "string"
+                },
+                "includeCustomFooter": {
+                    "description": "Whether to include custom footer. Possible values are:  \n- true \n- false",
+                    "type": "string"
+                },
+                "includeInGlobalAddressList": {
+                    "description": "Enables the group to be included in the Global Address List. For more information, see the help center. Possible values are:  \n- true: Group is included in the Global Address List. \n- false: Group is not included in the Global Address List.",
+                    "type": "string"
+                },
+                "isArchived": {
+                    "description": "Allows the Group contents to be archived. Possible values are:  \n- true: Archive messages sent to the group. \n- false: Do not keep an archive of messages sent to this group. If false, previously archived messages remain in the archive.",
+                    "type": "string"
+                },
+                "kind": {
+                    "default": "groupsSettings#groups",
+                    "description": "The type of the resource. It is always groupsSettings#groups.",
+                    "type": "string"
+                },
+                "maxMessageBytes": {
+                    "description": "Deprecated. The maximum size of a message is 25Mb.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "membersCanPostAsTheGroup": {
+                    "description": "Enables members to post messages as the group. Possible values are:  \n- true: Group member can post messages using the group's email address instead of their own email address. Message appear to originate from the group itself. Note: When true, any message moderation settings on individual users or new members do not apply to posts made on behalf of the group. \n- false: Members can not post in behalf of the group's email address.",
+                    "type": "string"
+                },
+                "messageDisplayFont": {
+                    "description": "Deprecated. The default message display font always has a value of \"DEFAULT_FONT\".",
+                    "type": "string"
+                },
+                "messageModerationLevel": {
+                    "description": "Moderation level of incoming messages. Possible values are:  \n- MODERATE_ALL_MESSAGES: All messages are sent to the group owner's email address for approval. If approved, the message is sent to the group. \n- MODERATE_NON_MEMBERS: All messages from non group members are sent to the group owner's email address for approval. If approved, the message is sent to the group. \n- MODERATE_NEW_MEMBERS: All messages from new members are sent to the group owner's email address for approval. If approved, the message is sent to the group. \n- MODERATE_NONE: No moderator approval is required. Messages are delivered directly to the group. Note: When the whoCanPostMessage is set to ANYONE_CAN_POST, we recommend the messageModerationLevel be set to MODERATE_NON_MEMBERS to protect the group from possible spam.\nWhen memberCanPostAsTheGroup is true, any message moderation settings on individual users or new members will not apply to posts made on behalf of the group.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of the group, which has a maximum size of 75 characters.",
+                    "type": "string"
+                },
+                "primaryLanguage": {
+                    "description": "The primary language for group. For a group's primary language use the language tags from the G Suite languages found at G Suite Email Settings API Email Language Tags.",
+                    "type": "string"
+                },
+                "replyTo": {
+                    "description": "Specifies who receives the default reply. Possible values are:  \n- REPLY_TO_CUSTOM: For replies to messages, use the group's custom email address.\nWhen the group's ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property holds the custom email address used when replying to a message. If the group's ReplyTo property is set to REPLY_TO_CUSTOM, the customReplyTo property must have a value. Otherwise an error is returned.\n \n- REPLY_TO_SENDER: The reply sent to author of message. \n- REPLY_TO_LIST: This reply message is sent to the group. \n- REPLY_TO_OWNER: The reply is sent to the owner(s) of the group. This does not include the group's managers. \n- REPLY_TO_IGNORE: Group users individually decide where the message reply is sent. \n- REPLY_TO_MANAGERS: This reply message is sent to the group's managers, which includes all managers and the group owner.",
+                    "type": "string"
+                },
+                "sendMessageDenyNotification": {
+                    "description": "Allows a member to be notified if the member's message to the group is denied by the group owner. Possible values are:  \n- true: When a message is rejected, send the deny message notification to the message author.\nThe defaultMessageDenyNotificationText property is dependent on the sendMessageDenyNotification property being true.\n \n- false: When a message is rejected, no notification is sent.",
+                    "type": "string"
+                },
+                "showInGroupDirectory": {
+                    "description": "Deprecated. This is merged into the new whoCanDiscoverGroup setting. Allows the group to be visible in the Groups Directory. Possible values are:  \n- true: All groups in the account are listed in the Groups directory. \n- false: All groups in the account are not listed in the directory.",
+                    "type": "string"
+                },
+                "spamModerationLevel": {
+                    "description": "Specifies moderation levels for messages detected as spam. Possible values are:  \n- ALLOW: Post the message to the group. \n- MODERATE: Send the message to the moderation queue. This is the default. \n- SILENTLY_MODERATE: Send the message to the moderation queue, but do not send notification to moderators. \n- REJECT: Immediately reject the message.",
+                    "type": "string"
+                },
+                "whoCanAdd": {
+                    "description": "Deprecated. This is merged into the new whoCanModerateMembers setting. Permissions to add members. Possible values are:  \n- ALL_MEMBERS_CAN_ADD: Managers and members can directly add new members. \n- ALL_MANAGERS_CAN_ADD: Only managers can directly add new members. this includes the group's owner. \n- ALL_OWNERS_CAN_ADD: Only owners can directly add new members. \n- NONE_CAN_ADD: No one can directly add new members.",
+                    "type": "string"
+                },
+                "whoCanAddReferences": {
+                    "description": "Deprecated. This functionality is no longer supported in the Google Groups UI. The value is always \"NONE\".",
+                    "type": "string"
+                },
+                "whoCanApproveMembers": {
+                    "description": "Specifies who can approve members who ask to join groups. This permission will be deprecated once it is merged into the new whoCanModerateMembers setting. Possible values are:  \n- ALL_MEMBERS_CAN_APPROVE \n- ALL_MANAGERS_CAN_APPROVE \n- ALL_OWNERS_CAN_APPROVE \n- NONE_CAN_APPROVE",
+                    "type": "string"
+                },
+                "whoCanApproveMessages": {
+                    "description": "Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can approve pending messages in the moderation queue. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanAssignTopics": {
+                    "description": "Deprecated. This is merged into the new whoCanAssistContent setting. Permission to assign topics in a forum to another user. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanAssistContent": {
+                    "description": "Specifies who can moderate metadata. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanBanUsers": {
+                    "description": "Specifies who can deny membership to users. This permission will be deprecated once it is merged into the new whoCanModerateMembers setting. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanContactOwner": {
+                    "description": "Permission to contact owner of the group via web UI. Possible values are:  \n- ALL_IN_DOMAIN_CAN_CONTACT \n- ALL_MANAGERS_CAN_CONTACT \n- ALL_MEMBERS_CAN_CONTACT \n- ANYONE_CAN_CONTACT \n- ALL_OWNERS_CAN_CONTACT",
+                    "type": "string"
+                },
+                "whoCanDeleteAnyPost": {
+                    "description": "Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can delete replies to topics. (Authors can always delete their own posts). Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanDeleteTopics": {
+                    "description": "Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can delete topics. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanDiscoverGroup": {
+                    "description": "Specifies the set of users for whom this group is discoverable. Possible values are:  \n- ANYONE_CAN_DISCOVER \n- ALL_IN_DOMAIN_CAN_DISCOVER \n- ALL_MEMBERS_CAN_DISCOVER",
+                    "type": "string"
+                },
+                "whoCanEnterFreeFormTags": {
+                    "description": "Deprecated. This is merged into the new whoCanAssistContent setting. Permission to enter free form tags for topics in a forum. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanHideAbuse": {
+                    "description": "Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can hide posts by reporting them as abuse. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanInvite": {
+                    "description": "Deprecated. This is merged into the new whoCanModerateMembers setting. Permissions to invite new members. Possible values are:  \n- ALL_MEMBERS_CAN_INVITE: Managers and members can invite a new member candidate. \n- ALL_MANAGERS_CAN_INVITE: Only managers can invite a new member. This includes the group's owner. \n- ALL_OWNERS_CAN_INVITE: Only owners can invite a new member. \n- NONE_CAN_INVITE: No one can invite a new member candidate.",
+                    "type": "string"
+                },
+                "whoCanJoin": {
+                    "description": "Permission to join group. Possible values are:  \n- ANYONE_CAN_JOIN: Anyone in the account domain can join. This includes accounts with multiple domains. \n- ALL_IN_DOMAIN_CAN_JOIN: Any Internet user who is outside your domain can access your Google Groups service and view the list of groups in your Groups directory. Warning: Group owners can add external addresses, outside of the domain to their groups. They can also allow people outside your domain to join their groups. If you later disable this option, any external addresses already added to users' groups remain in those groups. \n- INVITED_CAN_JOIN: Candidates for membership can be invited to join.  \n- CAN_REQUEST_TO_JOIN: Non members can request an invitation to join.",
+                    "type": "string"
+                },
+                "whoCanLeaveGroup": {
+                    "description": "Permission to leave the group. Possible values are:  \n- ALL_MANAGERS_CAN_LEAVE \n- ALL_MEMBERS_CAN_LEAVE \n- NONE_CAN_LEAVE",
+                    "type": "string"
+                },
+                "whoCanLockTopics": {
+                    "description": "Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can prevent users from posting replies to topics. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanMakeTopicsSticky": {
+                    "description": "Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can make topics appear at the top of the topic list. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanMarkDuplicate": {
+                    "description": "Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a topic as a duplicate of another topic. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanMarkFavoriteReplyOnAnyTopic": {
+                    "description": "Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark any other user's post as a favorite reply. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanMarkFavoriteReplyOnOwnTopic": {
+                    "description": "Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a post for a topic they started as a favorite reply. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanMarkNoResponseNeeded": {
+                    "description": "Deprecated. This is merged into the new whoCanAssistContent setting. Permission to mark a topic as not needing a response. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanModerateContent": {
+                    "description": "Specifies who can moderate content. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanModerateMembers": {
+                    "description": "Specifies who can manage members. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanModifyMembers": {
+                    "description": "Deprecated. This is merged into the new whoCanModerateMembers setting. Specifies who can change group members' roles. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanModifyTagsAndCategories": {
+                    "description": "Deprecated. This is merged into the new whoCanAssistContent setting. Permission to change tags and categories. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanMoveTopicsIn": {
+                    "description": "Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can move topics into the group or forum. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanMoveTopicsOut": {
+                    "description": "Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can move topics out of the group or forum. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanPostAnnouncements": {
+                    "description": "Deprecated. This is merged into the new whoCanModerateContent setting. Specifies who can post announcements, a special topic type. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanPostMessage": {
+                    "description": "Permissions to post messages. Possible values are:  \n- NONE_CAN_POST: The group is disabled and archived. No one can post a message to this group.  \n- When archiveOnly is false, updating whoCanPostMessage to NONE_CAN_POST, results in an error. \n- If archiveOnly is reverted from true to false, whoCanPostMessages is set to ALL_MANAGERS_CAN_POST.  \n- ALL_MANAGERS_CAN_POST: Managers, including group owners, can post messages. \n- ALL_MEMBERS_CAN_POST: Any group member can post a message. \n- ALL_OWNERS_CAN_POST: Only group owners can post a message. \n- ALL_IN_DOMAIN_CAN_POST: Anyone in the account can post a message.  \n- ANYONE_CAN_POST: Any Internet user who outside your account can access your Google Groups service and post a message. Note: When whoCanPostMessage is set to ANYONE_CAN_POST, we recommend the messageModerationLevel be set to MODERATE_NON_MEMBERS to protect the group from possible spam.",
+                    "type": "string"
+                },
+                "whoCanTakeTopics": {
+                    "description": "Deprecated. This is merged into the new whoCanAssistContent setting. Permission to take topics in a forum. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanUnassignTopic": {
+                    "description": "Deprecated. This is merged into the new whoCanAssistContent setting. Permission to unassign any topic in a forum. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanUnmarkFavoriteReplyOnAnyTopic": {
+                    "description": "Deprecated. This is merged into the new whoCanAssistContent setting. Permission to unmark any post from a favorite reply. Possible values are:  \n- ALL_MEMBERS \n- OWNERS_AND_MANAGERS \n- MANAGERS_ONLY \n- OWNERS_ONLY \n- NONE",
+                    "type": "string"
+                },
+                "whoCanViewGroup": {
+                    "description": "Permissions to view group messages. Possible values are:  \n- ANYONE_CAN_VIEW: Any Internet user can view the group's messages.  \n- ALL_IN_DOMAIN_CAN_VIEW: Anyone in your account can view this group's messages. \n- ALL_MEMBERS_CAN_VIEW: All group members can view the group's messages. \n- ALL_MANAGERS_CAN_VIEW: Any group manager can view this group's messages.",
+                    "type": "string"
+                },
+                "whoCanViewMembership": {
+                    "description": "Permissions to view membership. Possible values are:  \n- ALL_IN_DOMAIN_CAN_VIEW: Anyone in the account can view the group members list.\nIf a group already has external members, those members can still send email to this group.\n \n- ALL_MEMBERS_CAN_VIEW: The group members can view the group members list. \n- ALL_MANAGERS_CAN_VIEW: The group managers can view group members list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        }
+    },
+    "servicePath": "groups/v1/groups/",
+    "title": "Groups Settings API",
+    "version": "v1"
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/homegraph.v1.json b/googleapiclient/discovery_cache/documents/homegraph.v1.json
index 86bdbae..2eee11b 100644
--- a/googleapiclient/discovery_cache/documents/homegraph.v1.json
+++ b/googleapiclient/discovery_cache/documents/homegraph.v1.json
@@ -177,6 +177,24 @@
                         "https://www.googleapis.com/auth/homegraph"
                     ]
                 },
+                "requestLink": {
+                    "description": "Sends an account linking suggestion to users associated with any potential Cast devices detected by third-party devices. This request must be authorized using service account credentials from your Actions console project.",
+                    "flatPath": "v1/devices:requestLink",
+                    "httpMethod": "POST",
+                    "id": "homegraph.devices.requestLink",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v1/devices:requestLink",
+                    "request": {
+                        "$ref": "RequestLinkRequest"
+                    },
+                    "response": {
+                        "$ref": "Empty"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/homegraph"
+                    ]
+                },
                 "requestSync": {
                     "description": "Requests Google to send an `action.devices.SYNC` [intent](https://developers.google.com/assistant/smarthome/reference/intent/sync) to your smart home Action to update device metadata for the given user. The third-party user's identity is passed via the `agent_user_id` (see RequestSyncDevicesRequest). This request must be authorized using service account credentials from your Actions console project.",
                     "flatPath": "v1/devices:requestSync",
@@ -216,7 +234,7 @@
             }
         }
     },
-    "revision": "20210122",
+    "revision": "20210226",
     "rootUrl": "https://homegraph.googleapis.com/",
     "schemas": {
         "AgentDeviceId": {
@@ -527,6 +545,40 @@
             },
             "type": "object"
         },
+        "RequestLinkRequest": {
+            "description": "Request type for the [`RequestLink`](#google.home.graph.v1.HomeGraphApiService.RequestLink) call.",
+            "id": "RequestLinkRequest",
+            "properties": {
+                "payload": {
+                    "$ref": "RequestLinkRequestPayload",
+                    "description": "Required. ID(s) and detection time of potential Cast devices."
+                },
+                "requestId": {
+                    "description": "Required. Request ID used for debugging.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RequestLinkRequestPayload": {
+            "description": "Payload containing potential devices detected and when they were detected.",
+            "id": "RequestLinkRequestPayload",
+            "properties": {
+                "detectionTime": {
+                    "description": "Required. Time at which devices represented in `potential_cast_device_ids` were detected.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "potentialCastDeviceIds": {
+                    "description": "Required. List of device IDs detected that may potentially be for Cast devices.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
         "RequestSyncDevicesRequest": {
             "description": "Request type for the [`RequestSyncDevices`](#google.home.graph.v1.HomeGraphApiService.RequestSyncDevices) call.",
             "id": "RequestSyncDevicesRequest",
diff --git a/googleapiclient/discovery_cache/documents/logging.v2.json b/googleapiclient/discovery_cache/documents/logging.v2.json
index dcf51a8..441dd9d 100644
--- a/googleapiclient/discovery_cache/documents/logging.v2.json
+++ b/googleapiclient/discovery_cache/documents/logging.v2.json
@@ -1,6405 +1,6405 @@
 {
-  "baseUrl": "https://logging.googleapis.com/",
-  "mtlsRootUrl": "https://logging.mtls.googleapis.com/",
-  "documentationLink": "https://cloud.google.com/logging/docs/",
-  "batchPath": "batch",
-  "resources": {
-    "locations": {
-      "resources": {
-        "buckets": {
-          "methods": {
-            "get": {
-              "id": "logging.locations.buckets.get",
-              "parameterOrder": [
-                "name"
-              ],
-              "description": "Gets a bucket.",
-              "path": "v2/{+name}",
-              "response": {
-                "$ref": "LogBucket"
-              },
-              "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets/{bucketsId}",
-              "parameters": {
-                "name": {
-                  "type": "string",
-                  "description": "Required. The resource name of the bucket: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
-                  "location": "path",
-                  "pattern": "^[^/]+/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                  "required": true
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "httpMethod": "GET"
-            },
-            "create": {
-              "parameterOrder": [
-                "parent"
-              ],
-              "parameters": {
-                "parent": {
-                  "location": "path",
-                  "required": true,
-                  "pattern": "^[^/]+/[^/]+/locations/[^/]+$",
-                  "description": "Required. The resource in which to create the bucket: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]\" Example: \"projects/my-logging-project/locations/global\"",
-                  "type": "string"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
                 },
-                "bucketId": {
-                  "location": "query",
-                  "description": "Required. A client-assigned identifier such as \"my-bucket\". Identifiers are limited to 100 characters and can include only letters, digits, underscores, hyphens, and periods.",
-                  "type": "string"
-                }
-              },
-              "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "path": "v2/{+parent}/buckets",
-              "id": "logging.locations.buckets.create",
-              "request": {
-                "$ref": "LogBucket"
-              },
-              "description": "Creates a bucket that can be used to store log entries. Once a bucket has been created, the region cannot be changed.",
-              "httpMethod": "POST",
-              "response": {
-                "$ref": "LogBucket"
-              }
-            },
-            "undelete": {
-              "id": "logging.locations.buckets.undelete",
-              "description": "Undeletes a bucket. A bucket that has been deleted may be undeleted within the grace period of 7 days.",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "request": {
-                "$ref": "UndeleteBucketRequest"
-              },
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "name"
-              ],
-              "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets/{bucketsId}:undelete",
-              "response": {
-                "$ref": "Empty"
-              },
-              "path": "v2/{+name}:undelete",
-              "parameters": {
-                "name": {
-                  "type": "string",
-                  "location": "path",
-                  "description": "Required. The full resource name of the bucket to undelete. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
-                  "required": true,
-                  "pattern": "^[^/]+/[^/]+/locations/[^/]+/buckets/[^/]+$"
-                }
-              }
-            },
-            "delete": {
-              "id": "logging.locations.buckets.delete",
-              "httpMethod": "DELETE",
-              "description": "Deletes a bucket. Moves the bucket to the DELETE_REQUESTED state. After 7 days, the bucket will be purged and all logs in the bucket will be permanently deleted.",
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "parameters": {
-                "name": {
-                  "location": "path",
-                  "type": "string",
-                  "pattern": "^[^/]+/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                  "description": "Required. The full resource name of the bucket to delete. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
-                  "required": true
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets/{bucketsId}",
-              "path": "v2/{+name}"
-            },
-            "list": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "description": "Lists buckets.",
-              "path": "v2/{+parent}/buckets",
-              "response": {
-                "$ref": "ListBucketsResponse"
-              },
-              "httpMethod": "GET",
-              "id": "logging.locations.buckets.list",
-              "parameters": {
-                "pageToken": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call."
+                "https://www.googleapis.com/auth/cloud-platform.read-only": {
+                    "description": "View your data across Google Cloud Platform services"
                 },
-                "pageSize": {
-                  "format": "int32",
-                  "type": "integer",
-                  "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
-                  "location": "query"
+                "https://www.googleapis.com/auth/logging.admin": {
+                    "description": "Administrate log data for your projects"
                 },
-                "parent": {
-                  "location": "path",
-                  "description": "Required. The parent resource whose buckets are to be listed: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]\" Note: The locations portion of the resource must be specified, but supplying the character - in place of LOCATION_ID will return all buckets.",
-                  "pattern": "^[^/]+/[^/]+/locations/[^/]+$",
-                  "type": "string",
-                  "required": true
-                }
-              },
-              "parameterOrder": [
-                "parent"
-              ],
-              "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets"
-            },
-            "patch": {
-              "parameterOrder": [
-                "name"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "path": "v2/{+name}",
-              "parameters": {
-                "name": {
-                  "required": true,
-                  "location": "path",
-                  "pattern": "^[^/]+/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                  "type": "string",
-                  "description": "Required. The full resource name of the bucket to update. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\". Also requires permission \"resourcemanager.projects.updateLiens\" to set the locked property"
+                "https://www.googleapis.com/auth/logging.read": {
+                    "description": "View log data for your projects"
                 },
-                "updateMask": {
-                  "location": "query",
-                  "type": "string",
-                  "format": "google-fieldmask",
-                  "description": "Required. Field mask that specifies the fields in bucket that need an update. A bucket field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=retention_days."
+                "https://www.googleapis.com/auth/logging.write": {
+                    "description": "Submit log data for your projects"
                 }
-              },
-              "id": "logging.locations.buckets.patch",
-              "httpMethod": "PATCH",
-              "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets/{bucketsId}",
-              "response": {
-                "$ref": "LogBucket"
-              },
-              "request": {
-                "$ref": "LogBucket"
-              },
-              "description": "Updates a bucket. This method replaces the following fields in the existing bucket with values from the new bucket: retention_periodIf the retention period is decreased and the bucket is locked, FAILED_PRECONDITION will be returned.If the bucket has a LifecycleState of DELETE_REQUESTED, FAILED_PRECONDITION will be returned.A buckets region may not be modified after it is created."
             }
-          },
-          "resources": {
-            "views": {
-              "methods": {
-                "list": {
-                  "parameters": {
-                    "pageSize": {
-                      "type": "integer",
-                      "location": "query",
-                      "format": "int32",
-                      "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available."
-                    },
-                    "parent": {
-                      "description": "Required. The bucket whose views are to be listed: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" ",
-                      "pattern": "^[^/]+/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                      "type": "string",
-                      "required": true,
-                      "location": "path"
-                    },
-                    "pageToken": {
-                      "type": "string",
-                      "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-                      "location": "query"
-                    }
-                  },
-                  "description": "Lists views on a bucket.",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only",
-                    "https://www.googleapis.com/auth/logging.admin",
-                    "https://www.googleapis.com/auth/logging.read"
-                  ],
-                  "id": "logging.locations.buckets.views.list",
-                  "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets/{bucketsId}/views",
-                  "response": {
-                    "$ref": "ListViewsResponse"
-                  },
-                  "path": "v2/{+parent}/views",
-                  "httpMethod": "GET"
-                },
-                "patch": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/logging.admin"
-                  ],
-                  "description": "Updates a view. This method replaces the following fields in the existing view with values from the new view: filter.",
-                  "response": {
-                    "$ref": "LogView"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
-                  "path": "v2/{+name}",
-                  "httpMethod": "PATCH",
-                  "request": {
-                    "$ref": "LogView"
-                  },
-                  "parameters": {
-                    "name": {
-                      "description": "Required. The full resource name of the view to update \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
-                      "type": "string",
-                      "pattern": "^[^/]+/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
-                      "location": "path",
-                      "required": true
-                    },
-                    "updateMask": {
-                      "format": "google-fieldmask",
-                      "description": "Optional. Field mask that specifies the fields in view that need an update. A field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
-                      "type": "string",
-                      "location": "query"
-                    }
-                  },
-                  "id": "logging.locations.buckets.views.patch"
-                },
-                "create": {
-                  "parameters": {
-                    "parent": {
-                      "location": "path",
-                      "pattern": "^[^/]+/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                      "required": true,
-                      "type": "string",
-                      "description": "Required. The bucket in which to create the view \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-logging-project/locations/my-location/buckets/my-bucket\""
-                    },
-                    "viewId": {
-                      "type": "string",
-                      "description": "Required. The id to use for this view.",
-                      "location": "query"
-                    }
-                  },
-                  "httpMethod": "POST",
-                  "path": "v2/{+parent}/views",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "request": {
-                    "$ref": "LogView"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/logging.admin"
-                  ],
-                  "response": {
-                    "$ref": "LogView"
-                  },
-                  "id": "logging.locations.buckets.views.create",
-                  "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets/{bucketsId}/views",
-                  "description": "Creates a view over logs in a bucket. A bucket may contain a maximum of 50 views."
-                },
-                "delete": {
-                  "httpMethod": "DELETE",
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "description": "Deletes a view from a bucket.",
-                  "path": "v2/{+name}",
-                  "id": "logging.locations.buckets.views.delete",
-                  "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "description": "Required. The full resource name of the view to delete: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
-                      "type": "string",
-                      "pattern": "^[^/]+/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
-                      "location": "path",
-                      "required": true
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/logging.admin"
-                  ]
-                },
-                "get": {
-                  "response": {
-                    "$ref": "LogView"
-                  },
-                  "id": "logging.locations.buckets.views.get",
-                  "description": "Gets a view.",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "path": "v2/{+name}",
-                  "parameters": {
-                    "name": {
-                      "location": "path",
-                      "pattern": "^[^/]+/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
-                      "type": "string",
-                      "required": true,
-                      "description": "Required. The resource name of the policy: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\"."
-                    }
-                  },
-                  "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
-                  "httpMethod": "GET",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only",
-                    "https://www.googleapis.com/auth/logging.admin",
-                    "https://www.googleapis.com/auth/logging.read"
-                  ]
-                }
-              }
-            }
-          }
         }
-      },
-      "methods": {
-        "get": {
-          "parameterOrder": [
-            "name"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only",
-            "https://www.googleapis.com/auth/logging.admin",
-            "https://www.googleapis.com/auth/logging.read"
-          ],
-          "path": "v2/{+name}",
-          "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}",
-          "httpMethod": "GET",
-          "description": "Gets information about a location.",
-          "response": {
-            "$ref": "Location"
-          },
-          "parameters": {
-            "name": {
-              "location": "path",
-              "pattern": "^[^/]+/[^/]+/locations/[^/]+$",
-              "required": true,
-              "description": "Resource name for the location.",
-              "type": "string"
-            }
-          },
-          "id": "logging.locations.get"
-        },
-        "list": {
-          "path": "v2/{+name}/locations",
-          "description": "Lists information about the supported locations for this service.",
-          "flatPath": "v2/{v2Id}/{v2Id1}/locations",
-          "parameterOrder": [
-            "name"
-          ],
-          "response": {
-            "$ref": "ListLocationsResponse"
-          },
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only",
-            "https://www.googleapis.com/auth/logging.admin",
-            "https://www.googleapis.com/auth/logging.read"
-          ],
-          "parameters": {
-            "filter": {
-              "description": "The standard list filter.",
-              "location": "query",
-              "type": "string"
-            },
-            "pageSize": {
-              "description": "The standard list page size.",
-              "type": "integer",
-              "location": "query",
-              "format": "int32"
-            },
-            "pageToken": {
-              "description": "The standard list page token.",
-              "location": "query",
-              "type": "string"
-            },
-            "name": {
-              "pattern": "^[^/]+/[^/]+$",
-              "description": "The resource that owns the locations collection, if applicable.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "id": "logging.locations.list"
-        }
-      }
     },
-    "entries": {
-      "methods": {
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only",
-            "https://www.googleapis.com/auth/logging.admin",
-            "https://www.googleapis.com/auth/logging.read"
-          ],
-          "description": "Lists log entries. Use this method to retrieve log entries that originated from a project/folder/organization/billing account. For ways to export log entries, see Exporting Logs (https://cloud.google.com/logging/docs/export).",
-          "path": "v2/entries:list",
-          "httpMethod": "POST",
-          "id": "logging.entries.list",
-          "response": {
-            "$ref": "ListLogEntriesResponse"
-          },
-          "parameterOrder": [],
-          "request": {
-            "$ref": "ListLogEntriesRequest"
-          },
-          "parameters": {},
-          "flatPath": "v2/entries:list"
-        },
-        "write": {
-          "response": {
-            "$ref": "WriteLogEntriesResponse"
-          },
-          "path": "v2/entries:write",
-          "request": {
-            "$ref": "WriteLogEntriesRequest"
-          },
-          "flatPath": "v2/entries:write",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/logging.admin",
-            "https://www.googleapis.com/auth/logging.write"
-          ],
-          "description": "Writes log entries to Logging. This API method is the only way to send log entries to Logging. This method is used, directly or indirectly, by the Logging agent (fluentd) and all logging libraries configured to use Logging. A single request may contain log entries for a maximum of 1000 different resources (projects, organizations, billing accounts or folders)",
-          "parameters": {},
-          "parameterOrder": [],
-          "id": "logging.entries.write",
-          "httpMethod": "POST"
-        },
-        "tail": {
-          "request": {
-            "$ref": "TailLogEntriesRequest"
-          },
-          "flatPath": "v2/entries:tail",
-          "httpMethod": "POST",
-          "response": {
-            "$ref": "TailLogEntriesResponse"
-          },
-          "parameterOrder": [],
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only",
-            "https://www.googleapis.com/auth/logging.admin",
-            "https://www.googleapis.com/auth/logging.read"
-          ],
-          "parameters": {},
-          "id": "logging.entries.tail",
-          "path": "v2/entries:tail",
-          "description": "Streaming read of log entries as they are ingested. Until the stream is terminated, it will continue reading logs."
-        }
-      }
+    "basePath": "",
+    "baseUrl": "https://logging.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Logging",
+    "description": "Writes log entries and manages your Cloud Logging configuration. The table entries below are presented in alphabetical order, not in order of common use. For explanations of the concepts found in the table entries, read the documentation at https://cloud.google.com/logging/docs.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/logging/docs/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
     },
-    "projects": {
-      "resources": {
-        "logs": {
-          "methods": {
-            "delete": {
-              "description": "Deletes all the log entries in a log. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.",
-              "id": "logging.projects.logs.delete",
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameters": {
-                "logName": {
-                  "description": "Required. The resource name of the log to delete: \"projects/[PROJECT_ID]/logs/[LOG_ID]\" \"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\" \"folders/[FOLDER_ID]/logs/[LOG_ID]\" [LOG_ID] must be URL-encoded. For example, \"projects/my-project-id/logs/syslog\", \"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity\". For more information about log names, see LogEntry.",
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/logs/[^/]+$"
-                }
-              },
-              "httpMethod": "DELETE",
-              "parameterOrder": [
-                "logName"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "path": "v2/{+logName}",
-              "flatPath": "v2/projects/{projectsId}/logs/{logsId}"
-            },
-            "list": {
-              "parameters": {
-                "parent": {
-                  "location": "path",
-                  "pattern": "^projects/[^/]+$",
-                  "type": "string",
-                  "required": true,
-                  "description": "Required. The resource name that owns the logs: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" "
-                },
-                "pageSize": {
-                  "format": "int32",
-                  "type": "integer",
-                  "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
-                  "location": "query"
-                },
-                "pageToken": {
-                  "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "resourceNames": {
-                  "type": "string",
-                  "repeated": true,
-                  "location": "query",
-                  "description": "Optional. The resource name that owns the logs: projects/PROJECT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID organization/ORGANIZATION_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID billingAccounts/BILLING_ACCOUNT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID folders/FOLDER_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_IDTo support legacy queries, it could also be: \"projects/PROJECT_ID\" \"organizations/ORGANIZATION_ID\" \"billingAccounts/BILLING_ACCOUNT_ID\" \"folders/FOLDER_ID\""
-                }
-              },
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "parent"
-              ],
-              "response": {
-                "$ref": "ListLogsResponse"
-              },
-              "id": "logging.projects.logs.list",
-              "flatPath": "v2/projects/{projectsId}/logs",
-              "path": "v2/{+parent}/logs",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed."
-            }
-          }
-        },
-        "locations": {
-          "methods": {
-            "list": {
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "ListLocationsResponse"
-              },
-              "path": "v2/{+name}/locations",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "id": "logging.projects.locations.list",
-              "description": "Lists information about the supported locations for this service.",
-              "flatPath": "v2/projects/{projectsId}/locations",
-              "parameters": {
-                "filter": {
-                  "location": "query",
-                  "description": "The standard list filter.",
-                  "type": "string"
-                },
-                "name": {
-                  "pattern": "^projects/[^/]+$",
-                  "description": "The resource that owns the locations collection, if applicable.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "pageSize": {
-                  "description": "The standard list page size.",
-                  "type": "integer",
-                  "location": "query",
-                  "format": "int32"
-                },
-                "pageToken": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "The standard list page token."
-                }
-              }
-            },
-            "get": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "path": "v2/{+name}",
-              "response": {
-                "$ref": "Location"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "id": "logging.projects.locations.get",
-              "flatPath": "v2/projects/{projectsId}/locations/{locationsId}",
-              "parameters": {
-                "name": {
-                  "pattern": "^projects/[^/]+/locations/[^/]+$",
-                  "description": "Resource name for the location.",
-                  "type": "string",
-                  "required": true,
-                  "location": "path"
-                }
-              },
-              "description": "Gets information about a location.",
-              "httpMethod": "GET"
-            }
-          },
-          "resources": {
-            "buckets": {
-              "resources": {
-                "views": {
-                  "methods": {
-                    "patch": {
-                      "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
-                      "response": {
-                        "$ref": "LogView"
-                      },
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/logging.admin"
-                      ],
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "parameters": {
-                        "updateMask": {
-                          "type": "string",
-                          "location": "query",
-                          "description": "Optional. Field mask that specifies the fields in view that need an update. A field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
-                          "format": "google-fieldmask"
-                        },
-                        "name": {
-                          "type": "string",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
-                          "required": true,
-                          "location": "path",
-                          "description": "Required. The full resource name of the view to update \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\"."
-                        }
-                      },
-                      "request": {
-                        "$ref": "LogView"
-                      },
-                      "description": "Updates a view. This method replaces the following fields in the existing view with values from the new view: filter.",
-                      "id": "logging.projects.locations.buckets.views.patch",
-                      "path": "v2/{+name}",
-                      "httpMethod": "PATCH"
-                    },
-                    "delete": {
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "description": "Deletes a view from a bucket.",
-                      "path": "v2/{+name}",
-                      "response": {
-                        "$ref": "Empty"
-                      },
-                      "id": "logging.projects.locations.buckets.views.delete",
-                      "parameters": {
-                        "name": {
-                          "pattern": "^projects/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
-                          "type": "string",
-                          "description": "Required. The full resource name of the view to delete: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
-                          "required": true,
-                          "location": "path"
-                        }
-                      },
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/logging.admin"
-                      ],
-                      "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
-                      "httpMethod": "DELETE"
-                    },
-                    "get": {
-                      "httpMethod": "GET",
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "description": "Gets a view.",
-                      "parameters": {
-                        "name": {
-                          "description": "Required. The resource name of the policy: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
-                          "location": "path",
-                          "required": true,
-                          "type": "string",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$"
-                        }
-                      },
-                      "response": {
-                        "$ref": "LogView"
-                      },
-                      "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloud-platform.read-only",
-                        "https://www.googleapis.com/auth/logging.admin",
-                        "https://www.googleapis.com/auth/logging.read"
-                      ],
-                      "path": "v2/{+name}",
-                      "id": "logging.projects.locations.buckets.views.get"
-                    },
-                    "create": {
-                      "parameters": {
-                        "viewId": {
-                          "type": "string",
-                          "description": "Required. The id to use for this view.",
-                          "location": "query"
-                        },
-                        "parent": {
-                          "type": "string",
-                          "required": true,
-                          "location": "path",
-                          "description": "Required. The bucket in which to create the view \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-logging-project/locations/my-location/buckets/my-bucket\"",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/buckets/[^/]+$"
-                        }
-                      },
-                      "httpMethod": "POST",
-                      "path": "v2/{+parent}/views",
-                      "description": "Creates a view over logs in a bucket. A bucket may contain a maximum of 50 views.",
-                      "response": {
-                        "$ref": "LogView"
-                      },
-                      "request": {
-                        "$ref": "LogView"
-                      },
-                      "id": "logging.projects.locations.buckets.views.create",
-                      "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets/{bucketsId}/views",
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/logging.admin"
-                      ]
-                    },
-                    "list": {
-                      "description": "Lists views on a bucket.",
-                      "parameters": {
-                        "pageToken": {
-                          "location": "query",
-                          "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-                          "type": "string"
-                        },
-                        "parent": {
-                          "pattern": "^projects/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                          "description": "Required. The bucket whose views are to be listed: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" ",
-                          "location": "path",
-                          "required": true,
-                          "type": "string"
-                        },
-                        "pageSize": {
-                          "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
-                          "format": "int32",
-                          "location": "query",
-                          "type": "integer"
-                        }
-                      },
-                      "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets/{bucketsId}/views",
-                      "httpMethod": "GET",
-                      "path": "v2/{+parent}/views",
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "response": {
-                        "$ref": "ListViewsResponse"
-                      },
-                      "id": "logging.projects.locations.buckets.views.list",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloud-platform.read-only",
-                        "https://www.googleapis.com/auth/logging.admin",
-                        "https://www.googleapis.com/auth/logging.read"
-                      ]
-                    }
-                  }
-                }
-              },
-              "methods": {
-                "create": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/logging.admin"
-                  ],
-                  "parameters": {
-                    "bucketId": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "Required. A client-assigned identifier such as \"my-bucket\". Identifiers are limited to 100 characters and can include only letters, digits, underscores, hyphens, and periods."
-                    },
-                    "parent": {
-                      "location": "path",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "type": "string",
-                      "description": "Required. The resource in which to create the bucket: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]\" Example: \"projects/my-logging-project/locations/global\""
-                    }
-                  },
-                  "path": "v2/{+parent}/buckets",
-                  "httpMethod": "POST",
-                  "description": "Creates a bucket that can be used to store log entries. Once a bucket has been created, the region cannot be changed.",
-                  "response": {
-                    "$ref": "LogBucket"
-                  },
-                  "request": {
-                    "$ref": "LogBucket"
-                  },
-                  "id": "logging.projects.locations.buckets.create",
-                  "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets",
-                  "parameterOrder": [
-                    "parent"
-                  ]
-                },
-                "list": {
-                  "id": "logging.projects.locations.buckets.list",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only",
-                    "https://www.googleapis.com/auth/logging.admin",
-                    "https://www.googleapis.com/auth/logging.read"
-                  ],
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "response": {
-                    "$ref": "ListBucketsResponse"
-                  },
-                  "path": "v2/{+parent}/buckets",
-                  "parameters": {
-                    "pageToken": {
-                      "location": "query",
-                      "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-                      "type": "string"
-                    },
-                    "pageSize": {
-                      "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
-                      "type": "integer",
-                      "location": "query",
-                      "format": "int32"
-                    },
-                    "parent": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "type": "string",
-                      "description": "Required. The parent resource whose buckets are to be listed: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]\" Note: The locations portion of the resource must be specified, but supplying the character - in place of LOCATION_ID will return all buckets.",
-                      "location": "path",
-                      "required": true
-                    }
-                  },
-                  "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets",
-                  "description": "Lists buckets.",
-                  "httpMethod": "GET"
-                },
-                "patch": {
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "description": "Updates a bucket. This method replaces the following fields in the existing bucket with values from the new bucket: retention_periodIf the retention period is decreased and the bucket is locked, FAILED_PRECONDITION will be returned.If the bucket has a LifecycleState of DELETE_REQUESTED, FAILED_PRECONDITION will be returned.A buckets region may not be modified after it is created.",
-                  "response": {
-                    "$ref": "LogBucket"
-                  },
-                  "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets/{bucketsId}",
-                  "path": "v2/{+name}",
-                  "httpMethod": "PATCH",
-                  "id": "logging.projects.locations.buckets.patch",
-                  "request": {
-                    "$ref": "LogBucket"
-                  },
-                  "parameters": {
-                    "updateMask": {
-                      "type": "string",
-                      "location": "query",
-                      "format": "google-fieldmask",
-                      "description": "Required. Field mask that specifies the fields in bucket that need an update. A bucket field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=retention_days."
-                    },
-                    "name": {
-                      "required": true,
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                      "type": "string",
-                      "description": "Required. The full resource name of the bucket to update. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\". Also requires permission \"resourcemanager.projects.updateLiens\" to set the locked property"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/logging.admin"
-                  ]
-                },
-                "undelete": {
-                  "request": {
-                    "$ref": "UndeleteBucketRequest"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/logging.admin"
-                  ],
-                  "path": "v2/{+name}:undelete",
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "httpMethod": "POST",
-                  "id": "logging.projects.locations.buckets.undelete",
-                  "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets/{bucketsId}:undelete",
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                      "location": "path",
-                      "description": "Required. The full resource name of the bucket to undelete. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\"."
-                    }
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "description": "Undeletes a bucket. A bucket that has been deleted may be undeleted within the grace period of 7 days."
-                },
-                "delete": {
-                  "id": "logging.projects.locations.buckets.delete",
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "description": "Required. The full resource name of the bucket to delete. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
-                      "location": "path",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+/buckets/[^/]+$"
-                    }
-                  },
-                  "description": "Deletes a bucket. Moves the bucket to the DELETE_REQUESTED state. After 7 days, the bucket will be purged and all logs in the bucket will be permanently deleted.",
-                  "httpMethod": "DELETE",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/logging.admin"
-                  ],
-                  "path": "v2/{+name}",
-                  "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets/{bucketsId}",
-                  "response": {
-                    "$ref": "Empty"
-                  }
-                },
-                "get": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only",
-                    "https://www.googleapis.com/auth/logging.admin",
-                    "https://www.googleapis.com/auth/logging.read"
-                  ],
-                  "description": "Gets a bucket.",
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "location": "path",
-                      "required": true,
-                      "description": "Required. The resource name of the bucket: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/buckets/[^/]+$"
-                    }
-                  },
-                  "response": {
-                    "$ref": "LogBucket"
-                  },
-                  "path": "v2/{+name}",
-                  "id": "logging.projects.locations.buckets.get",
-                  "httpMethod": "GET",
-                  "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets/{bucketsId}",
-                  "parameterOrder": [
-                    "name"
-                  ]
-                }
-              }
-            }
-          }
-        },
-        "metrics": {
-          "methods": {
-            "delete": {
-              "flatPath": "v2/projects/{projectsId}/metrics/{metricsId}",
-              "path": "v2/{+metricName}",
-              "response": {
-                "$ref": "Empty"
-              },
-              "id": "logging.projects.metrics.delete",
-              "httpMethod": "DELETE",
-              "parameterOrder": [
-                "metricName"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.write"
-              ],
-              "parameters": {
-                "metricName": {
-                  "pattern": "^projects/[^/]+/metrics/[^/]+$",
-                  "type": "string",
-                  "description": "Required. The resource name of the metric to delete: \"projects/[PROJECT_ID]/metrics/[METRIC_ID]\" ",
-                  "required": true,
-                  "location": "path"
-                }
-              },
-              "description": "Deletes a logs-based metric."
-            },
-            "get": {
-              "flatPath": "v2/projects/{projectsId}/metrics/{metricsId}",
-              "httpMethod": "GET",
-              "id": "logging.projects.metrics.get",
-              "parameterOrder": [
-                "metricName"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "parameters": {
-                "metricName": {
-                  "pattern": "^projects/[^/]+/metrics/[^/]+$",
-                  "description": "Required. The resource name of the desired metric: \"projects/[PROJECT_ID]/metrics/[METRIC_ID]\" ",
-                  "required": true,
-                  "location": "path",
-                  "type": "string"
-                }
-              },
-              "path": "v2/{+metricName}",
-              "description": "Gets a logs-based metric.",
-              "response": {
-                "$ref": "LogMetric"
-              }
-            },
-            "update": {
-              "httpMethod": "PUT",
-              "parameterOrder": [
-                "metricName"
-              ],
-              "id": "logging.projects.metrics.update",
-              "flatPath": "v2/projects/{projectsId}/metrics/{metricsId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.write"
-              ],
-              "description": "Creates or updates a logs-based metric.",
-              "parameters": {
-                "metricName": {
-                  "required": true,
-                  "pattern": "^projects/[^/]+/metrics/[^/]+$",
-                  "type": "string",
-                  "location": "path",
-                  "description": "Required. The resource name of the metric to update: \"projects/[PROJECT_ID]/metrics/[METRIC_ID]\" The updated metric must be provided in the request and it's name field must be the same as [METRIC_ID] If the metric does not exist in [PROJECT_ID], then a new metric is created."
-                }
-              },
-              "path": "v2/{+metricName}",
-              "request": {
-                "$ref": "LogMetric"
-              },
-              "response": {
-                "$ref": "LogMetric"
-              }
-            },
-            "list": {
-              "description": "Lists logs-based metrics.",
-              "path": "v2/{+parent}/metrics",
-              "id": "logging.projects.metrics.list",
-              "parameterOrder": [
-                "parent"
-              ],
-              "parameters": {
-                "parent": {
-                  "description": "Required. The name of the project containing the metrics: \"projects/[PROJECT_ID]\" ",
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "pattern": "^projects/[^/]+$"
-                },
-                "pageToken": {
-                  "type": "string",
-                  "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-                  "location": "query"
-                },
-                "pageSize": {
-                  "type": "integer",
-                  "location": "query",
-                  "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
-                  "format": "int32"
-                }
-              },
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "ListLogMetricsResponse"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "flatPath": "v2/projects/{projectsId}/metrics"
-            },
-            "create": {
-              "response": {
-                "$ref": "LogMetric"
-              },
-              "path": "v2/{+parent}/metrics",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.write"
-              ],
-              "description": "Creates a logs-based metric.",
-              "request": {
-                "$ref": "LogMetric"
-              },
-              "flatPath": "v2/projects/{projectsId}/metrics",
-              "parameterOrder": [
-                "parent"
-              ],
-              "id": "logging.projects.metrics.create",
-              "httpMethod": "POST",
-              "parameters": {
-                "parent": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "Required. The resource name of the project in which to create the metric: \"projects/[PROJECT_ID]\" The new metric must be provided in the request.",
-                  "pattern": "^projects/[^/]+$"
-                }
-              }
-            }
-          }
-        },
-        "exclusions": {
-          "methods": {
-            "get": {
-              "description": "Gets the description of an exclusion.",
-              "parameters": {
-                "name": {
-                  "location": "path",
-                  "required": true,
-                  "pattern": "^projects/[^/]+/exclusions/[^/]+$",
-                  "type": "string",
-                  "description": "Required. The resource name of an existing exclusion: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\"."
-                }
-              },
-              "response": {
-                "$ref": "LogExclusion"
-              },
-              "id": "logging.projects.exclusions.get",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "flatPath": "v2/projects/{projectsId}/exclusions/{exclusionsId}",
-              "path": "v2/{+name}",
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET"
-            },
-            "list": {
-              "parameterOrder": [
-                "parent"
-              ],
-              "response": {
-                "$ref": "ListExclusionsResponse"
-              },
-              "parameters": {
-                "pageToken": {
-                  "type": "string",
-                  "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-                  "location": "query"
-                },
-                "parent": {
-                  "description": "Required. The parent resource whose exclusions are to be listed. \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$"
-                },
-                "pageSize": {
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query",
-                  "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available."
-                }
-              },
-              "id": "logging.projects.exclusions.list",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "httpMethod": "GET",
-              "description": "Lists all the exclusions in a parent resource.",
-              "path": "v2/{+parent}/exclusions",
-              "flatPath": "v2/projects/{projectsId}/exclusions"
-            },
-            "patch": {
-              "parameters": {
-                "updateMask": {
-                  "description": "Required. A non-empty list of fields to change in the existing exclusion. New values for the fields are taken from the corresponding fields in the LogExclusion included in this request. Fields not mentioned in update_mask are not changed and are ignored in the request.For example, to change the filter and description of an exclusion, specify an update_mask of \"filter,description\".",
-                  "type": "string",
-                  "format": "google-fieldmask",
-                  "location": "query"
-                },
-                "name": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "description": "Required. The resource name of the exclusion to update: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
-                  "pattern": "^projects/[^/]+/exclusions/[^/]+$"
-                }
-              },
-              "httpMethod": "PATCH",
-              "request": {
-                "$ref": "LogExclusion"
-              },
-              "response": {
-                "$ref": "LogExclusion"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "description": "Changes one or more properties of an existing exclusion.",
-              "parameterOrder": [
-                "name"
-              ],
-              "path": "v2/{+name}",
-              "flatPath": "v2/projects/{projectsId}/exclusions/{exclusionsId}",
-              "id": "logging.projects.exclusions.patch"
-            },
-            "create": {
-              "parameters": {
-                "parent": {
-                  "description": "Required. The parent resource in which to create the exclusion: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" Examples: \"projects/my-logging-project\", \"organizations/123456789\".",
-                  "required": true,
-                  "pattern": "^projects/[^/]+$",
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "httpMethod": "POST",
-              "path": "v2/{+parent}/exclusions",
-              "request": {
-                "$ref": "LogExclusion"
-              },
-              "flatPath": "v2/projects/{projectsId}/exclusions",
-              "description": "Creates a new exclusion in a specified parent resource. Only log entries belonging to that resource can be excluded. You can have up to 10 exclusions in a resource.",
-              "id": "logging.projects.exclusions.create",
-              "response": {
-                "$ref": "LogExclusion"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "parameterOrder": [
-                "parent"
-              ]
-            },
-            "delete": {
-              "flatPath": "v2/projects/{projectsId}/exclusions/{exclusionsId}",
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "Empty"
-              },
-              "httpMethod": "DELETE",
-              "id": "logging.projects.exclusions.delete",
-              "description": "Deletes an exclusion.",
-              "path": "v2/{+name}",
-              "parameters": {
-                "name": {
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/exclusions/[^/]+$",
-                  "location": "path",
-                  "required": true,
-                  "description": "Required. The resource name of an existing exclusion to delete: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\"."
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ]
-            }
-          }
-        },
-        "sinks": {
-          "methods": {
-            "delete": {
-              "description": "Deletes a sink. If the sink has a unique writer_identity, then that service account is also deleted.",
-              "path": "v2/{+sinkName}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "httpMethod": "DELETE",
-              "id": "logging.projects.sinks.delete",
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "parameters": {
-                "sinkName": {
-                  "type": "string",
-                  "description": "Required. The full resource name of the sink to delete, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "required": true,
-                  "pattern": "^projects/[^/]+/sinks/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v2/projects/{projectsId}/sinks/{sinksId}"
-            },
-            "list": {
-              "path": "v2/{+parent}/sinks",
-              "description": "Lists sinks.",
-              "response": {
-                "$ref": "ListSinksResponse"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "parameterOrder": [
-                "parent"
-              ],
-              "flatPath": "v2/projects/{projectsId}/sinks",
-              "id": "logging.projects.sinks.list",
-              "httpMethod": "GET",
-              "parameters": {
-                "pageToken": {
-                  "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
-                  "format": "int32",
-                  "location": "query",
-                  "type": "integer"
-                },
-                "parent": {
-                  "location": "path",
-                  "pattern": "^projects/[^/]+$",
-                  "type": "string",
-                  "required": true,
-                  "description": "Required. The parent resource whose sinks are to be listed: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" "
-                }
-              }
-            },
-            "update": {
-              "id": "logging.projects.sinks.update",
-              "parameters": {
-                "updateMask": {
-                  "type": "string",
-                  "description": "Optional. Field mask that specifies the fields in sink that need an update. A sink field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.An empty updateMask is temporarily treated as using the following mask for backwards compatibility purposes: destination,filter,includeChildren At some point in the future, behavior will be removed and specifying an empty updateMask will be an error.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
-                  "location": "query",
-                  "format": "google-fieldmask"
-                },
-                "sinkName": {
-                  "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "location": "path",
-                  "pattern": "^projects/[^/]+/sinks/[^/]+$",
-                  "type": "string",
-                  "required": true
-                },
-                "uniqueWriterIdentity": {
-                  "description": "Optional. See sinks.create for a description of this field. When updating a sink, the effect of this field on the value of writer_identity in the updated sink depends on both the old and new values of this field: If the old and new values of this field are both false or both true, then there is no change to the sink's writer_identity. If the old value is false and the new value is true, then writer_identity is changed to a unique service account. It is an error if the old value is true and the new value is set to false or defaulted to false.",
-                  "type": "boolean",
-                  "location": "query"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "request": {
-                "$ref": "LogSink"
-              },
-              "path": "v2/{+sinkName}",
-              "httpMethod": "PUT",
-              "description": "Updates a sink. This method replaces the following fields in the existing sink with values from the new sink: destination, and filter.The updated sink might also have a new writer_identity; see the unique_writer_identity field.",
-              "response": {
-                "$ref": "LogSink"
-              },
-              "flatPath": "v2/projects/{projectsId}/sinks/{sinksId}"
-            },
-            "get": {
-              "description": "Gets a sink.",
-              "id": "logging.projects.sinks.get",
-              "response": {
-                "$ref": "LogSink"
-              },
-              "parameters": {
-                "sinkName": {
-                  "location": "path",
-                  "required": true,
-                  "pattern": "^projects/[^/]+/sinks/[^/]+$",
-                  "type": "string",
-                  "description": "Required. The resource name of the sink: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\"."
-                }
-              },
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "flatPath": "v2/projects/{projectsId}/sinks/{sinksId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "path": "v2/{+sinkName}"
-            },
-            "create": {
-              "parameterOrder": [
-                "parent"
-              ],
-              "request": {
-                "$ref": "LogSink"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "response": {
-                "$ref": "LogSink"
-              },
-              "flatPath": "v2/projects/{projectsId}/sinks",
-              "description": "Creates a sink that exports specified log entries to a destination. The export of newly-ingested log entries begins immediately, unless the sink's writer_identity is not permitted to write to the destination. A sink can export log entries only from the resource owning the sink.",
-              "parameters": {
-                "uniqueWriterIdentity": {
-                  "location": "query",
-                  "type": "boolean",
-                  "description": "Optional. Determines the kind of IAM identity returned as writer_identity in the new sink. If this value is omitted or set to false, and if the sink's parent is a project, then the value returned as writer_identity is the same group or service account used by Logging before the addition of writer identities to this API. The sink's destination must be in the same project as the sink itself.If this field is set to true, or if the sink is owned by a non-project resource such as an organization, then the value of writer_identity will be a unique service account used only for exports from the new sink. For more information, see writer_identity in LogSink."
-                },
-                "parent": {
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "description": "Required. The resource in which to create the sink: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" Examples: \"projects/my-logging-project\", \"organizations/123456789\".",
-                  "location": "path",
-                  "required": true
-                }
-              },
-              "httpMethod": "POST",
-              "path": "v2/{+parent}/sinks",
-              "id": "logging.projects.sinks.create"
-            },
-            "patch": {
-              "path": "v2/{+sinkName}",
-              "httpMethod": "PATCH",
-              "flatPath": "v2/projects/{projectsId}/sinks/{sinksId}",
-              "description": "Updates a sink. This method replaces the following fields in the existing sink with values from the new sink: destination, and filter.The updated sink might also have a new writer_identity; see the unique_writer_identity field.",
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "response": {
-                "$ref": "LogSink"
-              },
-              "parameters": {
-                "uniqueWriterIdentity": {
-                  "type": "boolean",
-                  "location": "query",
-                  "description": "Optional. See sinks.create for a description of this field. When updating a sink, the effect of this field on the value of writer_identity in the updated sink depends on both the old and new values of this field: If the old and new values of this field are both false or both true, then there is no change to the sink's writer_identity. If the old value is false and the new value is true, then writer_identity is changed to a unique service account. It is an error if the old value is true and the new value is set to false or defaulted to false."
-                },
-                "updateMask": {
-                  "description": "Optional. Field mask that specifies the fields in sink that need an update. A sink field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.An empty updateMask is temporarily treated as using the following mask for backwards compatibility purposes: destination,filter,includeChildren At some point in the future, behavior will be removed and specifying an empty updateMask will be an error.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
-                  "type": "string",
-                  "location": "query",
-                  "format": "google-fieldmask"
-                },
-                "sinkName": {
-                  "type": "string",
-                  "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "location": "path",
-                  "pattern": "^projects/[^/]+/sinks/[^/]+$",
-                  "required": true
-                }
-              },
-              "id": "logging.projects.sinks.patch",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "request": {
-                "$ref": "LogSink"
-              }
-            }
-          }
-        }
-      }
-    },
-    "exclusions": {
-      "methods": {
-        "patch": {
-          "parameterOrder": [
-            "name"
-          ],
-          "path": "v2/{+name}",
-          "flatPath": "v2/{v2Id}/{v2Id1}/exclusions/{exclusionsId}",
-          "httpMethod": "PATCH",
-          "parameters": {
-            "name": {
-              "type": "string",
-              "required": true,
-              "description": "Required. The resource name of the exclusion to update: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
-              "pattern": "^[^/]+/[^/]+/exclusions/[^/]+$",
-              "location": "path"
-            },
-            "updateMask": {
-              "type": "string",
-              "format": "google-fieldmask",
-              "location": "query",
-              "description": "Required. A non-empty list of fields to change in the existing exclusion. New values for the fields are taken from the corresponding fields in the LogExclusion included in this request. Fields not mentioned in update_mask are not changed and are ignored in the request.For example, to change the filter and description of an exclusion, specify an update_mask of \"filter,description\"."
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/logging.admin"
-          ],
-          "description": "Changes one or more properties of an existing exclusion.",
-          "response": {
-            "$ref": "LogExclusion"
-          },
-          "request": {
-            "$ref": "LogExclusion"
-          },
-          "id": "logging.exclusions.patch"
-        },
-        "get": {
-          "response": {
-            "$ref": "LogExclusion"
-          },
-          "description": "Gets the description of an exclusion.",
-          "path": "v2/{+name}",
-          "id": "logging.exclusions.get",
-          "parameterOrder": [
-            "name"
-          ],
-          "flatPath": "v2/{v2Id}/{v2Id1}/exclusions/{exclusionsId}",
-          "httpMethod": "GET",
-          "parameters": {
-            "name": {
-              "description": "Required. The resource name of an existing exclusion: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
-              "pattern": "^[^/]+/[^/]+/exclusions/[^/]+$",
-              "location": "path",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only",
-            "https://www.googleapis.com/auth/logging.admin",
-            "https://www.googleapis.com/auth/logging.read"
-          ]
-        },
-        "create": {
-          "description": "Creates a new exclusion in a specified parent resource. Only log entries belonging to that resource can be excluded. You can have up to 10 exclusions in a resource.",
-          "id": "logging.exclusions.create",
-          "httpMethod": "POST",
-          "parameters": {
-            "parent": {
-              "type": "string",
-              "pattern": "^[^/]+/[^/]+$",
-              "required": true,
-              "location": "path",
-              "description": "Required. The parent resource in which to create the exclusion: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" Examples: \"projects/my-logging-project\", \"organizations/123456789\"."
-            }
-          },
-          "response": {
-            "$ref": "LogExclusion"
-          },
-          "request": {
-            "$ref": "LogExclusion"
-          },
-          "path": "v2/{+parent}/exclusions",
-          "parameterOrder": [
-            "parent"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/logging.admin"
-          ],
-          "flatPath": "v2/{v2Id}/{v2Id1}/exclusions"
-        },
-        "list": {
-          "description": "Lists all the exclusions in a parent resource.",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only",
-            "https://www.googleapis.com/auth/logging.admin",
-            "https://www.googleapis.com/auth/logging.read"
-          ],
-          "flatPath": "v2/{v2Id}/{v2Id1}/exclusions",
-          "id": "logging.exclusions.list",
-          "parameterOrder": [
-            "parent"
-          ],
-          "path": "v2/{+parent}/exclusions",
-          "response": {
-            "$ref": "ListExclusionsResponse"
-          },
-          "parameters": {
-            "pageToken": {
-              "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-              "location": "query",
-              "type": "string"
-            },
-            "pageSize": {
-              "format": "int32",
-              "type": "integer",
-              "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
-              "location": "query"
-            },
-            "parent": {
-              "description": "Required. The parent resource whose exclusions are to be listed. \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
-              "type": "string",
-              "location": "path",
-              "pattern": "^[^/]+/[^/]+$",
-              "required": true
-            }
-          },
-          "httpMethod": "GET"
-        },
-        "delete": {
-          "path": "v2/{+name}",
-          "flatPath": "v2/{v2Id}/{v2Id1}/exclusions/{exclusionsId}",
-          "parameters": {
-            "name": {
-              "pattern": "^[^/]+/[^/]+/exclusions/[^/]+$",
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "Required. The resource name of an existing exclusion to delete: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\"."
-            }
-          },
-          "description": "Deletes an exclusion.",
-          "id": "logging.exclusions.delete",
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/logging.admin"
-          ],
-          "httpMethod": "DELETE"
-        }
-      }
-    },
-    "organizations": {
-      "resources": {
-        "locations": {
-          "methods": {
-            "get": {
-              "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}",
-              "response": {
-                "$ref": "Location"
-              },
-              "id": "logging.organizations.locations.get",
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "parameterOrder": [
-                "name"
-              ],
-              "parameters": {
-                "name": {
-                  "pattern": "^organizations/[^/]+/locations/[^/]+$",
-                  "required": true,
-                  "type": "string",
-                  "description": "Resource name for the location.",
-                  "location": "path"
-                }
-              },
-              "path": "v2/{+name}",
-              "description": "Gets information about a location."
-            },
-            "list": {
-              "id": "logging.organizations.locations.list",
-              "flatPath": "v2/organizations/{organizationsId}/locations",
-              "response": {
-                "$ref": "ListLocationsResponse"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "description": "Lists information about the supported locations for this service.",
-              "parameters": {
-                "filter": {
-                  "description": "The standard list filter.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "pageToken": {
-                  "type": "string",
-                  "description": "The standard list page token.",
-                  "location": "query"
-                },
-                "name": {
-                  "location": "path",
-                  "type": "string",
-                  "pattern": "^organizations/[^/]+$",
-                  "description": "The resource that owns the locations collection, if applicable.",
-                  "required": true
-                },
-                "pageSize": {
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query",
-                  "description": "The standard list page size."
-                }
-              },
-              "httpMethod": "GET",
-              "path": "v2/{+name}/locations",
-              "parameterOrder": [
-                "name"
-              ]
-            }
-          },
-          "resources": {
-            "buckets": {
-              "methods": {
-                "patch": {
-                  "response": {
-                    "$ref": "LogBucket"
-                  },
-                  "description": "Updates a bucket. This method replaces the following fields in the existing bucket with values from the new bucket: retention_periodIf the retention period is decreased and the bucket is locked, FAILED_PRECONDITION will be returned.If the bucket has a LifecycleState of DELETE_REQUESTED, FAILED_PRECONDITION will be returned.A buckets region may not be modified after it is created.",
-                  "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets/{bucketsId}",
-                  "id": "logging.organizations.locations.buckets.patch",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/logging.admin"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "location": "path",
-                      "description": "Required. The full resource name of the bucket to update. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\". Also requires permission \"resourcemanager.projects.updateLiens\" to set the locked property",
-                      "pattern": "^organizations/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                      "type": "string",
-                      "required": true
-                    },
-                    "updateMask": {
-                      "location": "query",
-                      "description": "Required. Field mask that specifies the fields in bucket that need an update. A bucket field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=retention_days.",
-                      "format": "google-fieldmask",
-                      "type": "string"
-                    }
-                  },
-                  "request": {
-                    "$ref": "LogBucket"
-                  },
-                  "httpMethod": "PATCH",
-                  "path": "v2/{+name}",
-                  "parameterOrder": [
-                    "name"
-                  ]
-                },
-                "undelete": {
-                  "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets/{bucketsId}:undelete",
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "path": "v2/{+name}:undelete",
-                  "description": "Undeletes a bucket. A bucket that has been deleted may be undeleted within the grace period of 7 days.",
-                  "request": {
-                    "$ref": "UndeleteBucketRequest"
-                  },
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "location": "path",
-                      "description": "Required. The full resource name of the bucket to undelete. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^organizations/[^/]+/locations/[^/]+/buckets/[^/]+$"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/logging.admin"
-                  ],
-                  "id": "logging.organizations.locations.buckets.undelete"
-                },
-                "delete": {
-                  "httpMethod": "DELETE",
-                  "parameters": {
-                    "name": {
-                      "pattern": "^organizations/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                      "required": true,
-                      "location": "path",
-                      "type": "string",
-                      "description": "Required. The full resource name of the bucket to delete. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\"."
-                    }
-                  },
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "description": "Deletes a bucket. Moves the bucket to the DELETE_REQUESTED state. After 7 days, the bucket will be purged and all logs in the bucket will be permanently deleted.",
-                  "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets/{bucketsId}",
-                  "id": "logging.organizations.locations.buckets.delete",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/logging.admin"
-                  ],
-                  "path": "v2/{+name}",
-                  "parameterOrder": [
-                    "name"
-                  ]
-                },
-                "get": {
-                  "parameters": {
-                    "name": {
-                      "description": "Required. The resource name of the bucket: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
-                      "type": "string",
-                      "location": "path",
-                      "required": true,
-                      "pattern": "^organizations/[^/]+/locations/[^/]+/buckets/[^/]+$"
-                    }
-                  },
-                  "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets/{bucketsId}",
-                  "response": {
-                    "$ref": "LogBucket"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "id": "logging.organizations.locations.buckets.get",
-                  "description": "Gets a bucket.",
-                  "path": "v2/{+name}",
-                  "httpMethod": "GET",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only",
-                    "https://www.googleapis.com/auth/logging.admin",
-                    "https://www.googleapis.com/auth/logging.read"
-                  ]
-                },
-                "create": {
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/logging.admin"
-                  ],
-                  "response": {
-                    "$ref": "LogBucket"
-                  },
-                  "httpMethod": "POST",
-                  "request": {
-                    "$ref": "LogBucket"
-                  },
-                  "id": "logging.organizations.locations.buckets.create",
-                  "parameters": {
-                    "bucketId": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "Required. A client-assigned identifier such as \"my-bucket\". Identifiers are limited to 100 characters and can include only letters, digits, underscores, hyphens, and periods."
-                    },
-                    "parent": {
-                      "location": "path",
-                      "type": "string",
-                      "pattern": "^organizations/[^/]+/locations/[^/]+$",
-                      "description": "Required. The resource in which to create the bucket: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]\" Example: \"projects/my-logging-project/locations/global\"",
-                      "required": true
-                    }
-                  },
-                  "description": "Creates a bucket that can be used to store log entries. Once a bucket has been created, the region cannot be changed.",
-                  "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets",
-                  "path": "v2/{+parent}/buckets"
-                },
-                "list": {
-                  "description": "Lists buckets.",
-                  "path": "v2/{+parent}/buckets",
-                  "id": "logging.organizations.locations.buckets.list",
-                  "response": {
-                    "$ref": "ListBucketsResponse"
-                  },
-                  "parameters": {
-                    "pageToken": {
-                      "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "parent": {
-                      "pattern": "^organizations/[^/]+/locations/[^/]+$",
-                      "location": "path",
-                      "type": "string",
-                      "required": true,
-                      "description": "Required. The parent resource whose buckets are to be listed: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]\" Note: The locations portion of the resource must be specified, but supplying the character - in place of LOCATION_ID will return all buckets."
-                    },
-                    "pageSize": {
-                      "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
-                      "location": "query",
-                      "format": "int32",
-                      "type": "integer"
-                    }
-                  },
-                  "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "httpMethod": "GET",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only",
-                    "https://www.googleapis.com/auth/logging.admin",
-                    "https://www.googleapis.com/auth/logging.read"
-                  ]
-                }
-              },
-              "resources": {
-                "views": {
-                  "methods": {
-                    "get": {
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloud-platform.read-only",
-                        "https://www.googleapis.com/auth/logging.admin",
-                        "https://www.googleapis.com/auth/logging.read"
-                      ],
-                      "response": {
-                        "$ref": "LogView"
-                      },
-                      "description": "Gets a view.",
-                      "id": "logging.organizations.locations.buckets.views.get",
-                      "path": "v2/{+name}",
-                      "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
-                      "httpMethod": "GET",
-                      "parameters": {
-                        "name": {
-                          "pattern": "^organizations/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
-                          "type": "string",
-                          "required": true,
-                          "description": "Required. The resource name of the policy: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
-                          "location": "path"
-                        }
-                      }
-                    },
-                    "delete": {
-                      "id": "logging.organizations.locations.buckets.views.delete",
-                      "response": {
-                        "$ref": "Empty"
-                      },
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "description": "Deletes a view from a bucket.",
-                      "parameters": {
-                        "name": {
-                          "description": "Required. The full resource name of the view to delete: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
-                          "required": true,
-                          "location": "path",
-                          "type": "string",
-                          "pattern": "^organizations/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$"
-                        }
-                      },
-                      "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
-                      "path": "v2/{+name}",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/logging.admin"
-                      ],
-                      "httpMethod": "DELETE"
-                    },
-                    "patch": {
-                      "httpMethod": "PATCH",
-                      "id": "logging.organizations.locations.buckets.views.patch",
-                      "path": "v2/{+name}",
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "parameters": {
-                        "updateMask": {
-                          "description": "Optional. Field mask that specifies the fields in view that need an update. A field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
-                          "type": "string",
-                          "format": "google-fieldmask",
-                          "location": "query"
-                        },
-                        "name": {
-                          "required": true,
-                          "pattern": "^organizations/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
-                          "description": "Required. The full resource name of the view to update \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
-                          "type": "string",
-                          "location": "path"
-                        }
-                      },
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/logging.admin"
-                      ],
-                      "description": "Updates a view. This method replaces the following fields in the existing view with values from the new view: filter.",
-                      "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
-                      "response": {
-                        "$ref": "LogView"
-                      },
-                      "request": {
-                        "$ref": "LogView"
-                      }
-                    },
-                    "create": {
-                      "description": "Creates a view over logs in a bucket. A bucket may contain a maximum of 50 views.",
-                      "id": "logging.organizations.locations.buckets.views.create",
-                      "request": {
-                        "$ref": "LogView"
-                      },
-                      "path": "v2/{+parent}/views",
-                      "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets/{bucketsId}/views",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/logging.admin"
-                      ],
-                      "response": {
-                        "$ref": "LogView"
-                      },
-                      "httpMethod": "POST",
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "parameters": {
-                        "parent": {
-                          "pattern": "^organizations/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                          "location": "path",
-                          "required": true,
-                          "type": "string",
-                          "description": "Required. The bucket in which to create the view \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-logging-project/locations/my-location/buckets/my-bucket\""
-                        },
-                        "viewId": {
-                          "location": "query",
-                          "description": "Required. The id to use for this view.",
-                          "type": "string"
-                        }
-                      }
-                    },
-                    "list": {
-                      "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets/{bucketsId}/views",
-                      "parameters": {
-                        "pageToken": {
-                          "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-                          "location": "query",
-                          "type": "string"
-                        },
-                        "parent": {
-                          "location": "path",
-                          "required": true,
-                          "type": "string",
-                          "pattern": "^organizations/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                          "description": "Required. The bucket whose views are to be listed: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" "
-                        },
-                        "pageSize": {
-                          "type": "integer",
-                          "format": "int32",
-                          "location": "query",
-                          "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available."
-                        }
-                      },
-                      "id": "logging.organizations.locations.buckets.views.list",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloud-platform.read-only",
-                        "https://www.googleapis.com/auth/logging.admin",
-                        "https://www.googleapis.com/auth/logging.read"
-                      ],
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "response": {
-                        "$ref": "ListViewsResponse"
-                      },
-                      "description": "Lists views on a bucket.",
-                      "path": "v2/{+parent}/views",
-                      "httpMethod": "GET"
-                    }
-                  }
-                }
-              }
-            }
-          }
-        },
-        "sinks": {
-          "methods": {
-            "patch": {
-              "request": {
-                "$ref": "LogSink"
-              },
-              "flatPath": "v2/organizations/{organizationsId}/sinks/{sinksId}",
-              "parameters": {
-                "sinkName": {
-                  "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "pattern": "^organizations/[^/]+/sinks/[^/]+$",
-                  "required": true,
-                  "location": "path",
-                  "type": "string"
-                },
-                "updateMask": {
-                  "format": "google-fieldmask",
-                  "location": "query",
-                  "description": "Optional. Field mask that specifies the fields in sink that need an update. A sink field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.An empty updateMask is temporarily treated as using the following mask for backwards compatibility purposes: destination,filter,includeChildren At some point in the future, behavior will be removed and specifying an empty updateMask will be an error.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
-                  "type": "string"
-                },
-                "uniqueWriterIdentity": {
-                  "type": "boolean",
-                  "location": "query",
-                  "description": "Optional. See sinks.create for a description of this field. When updating a sink, the effect of this field on the value of writer_identity in the updated sink depends on both the old and new values of this field: If the old and new values of this field are both false or both true, then there is no change to the sink's writer_identity. If the old value is false and the new value is true, then writer_identity is changed to a unique service account. It is an error if the old value is true and the new value is set to false or defaulted to false."
-                }
-              },
-              "response": {
-                "$ref": "LogSink"
-              },
-              "httpMethod": "PATCH",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "description": "Updates a sink. This method replaces the following fields in the existing sink with values from the new sink: destination, and filter.The updated sink might also have a new writer_identity; see the unique_writer_identity field.",
-              "id": "logging.organizations.sinks.patch",
-              "path": "v2/{+sinkName}"
-            },
-            "get": {
-              "path": "v2/{+sinkName}",
-              "description": "Gets a sink.",
-              "flatPath": "v2/organizations/{organizationsId}/sinks/{sinksId}",
-              "id": "logging.organizations.sinks.get",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "parameters": {
-                "sinkName": {
-                  "description": "Required. The resource name of the sink: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "required": true,
-                  "location": "path",
-                  "pattern": "^organizations/[^/]+/sinks/[^/]+$",
-                  "type": "string"
-                }
-              },
-              "response": {
-                "$ref": "LogSink"
-              },
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "sinkName"
-              ]
-            },
-            "update": {
-              "id": "logging.organizations.sinks.update",
-              "flatPath": "v2/organizations/{organizationsId}/sinks/{sinksId}",
-              "response": {
-                "$ref": "LogSink"
-              },
-              "request": {
-                "$ref": "LogSink"
-              },
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "path": "v2/{+sinkName}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "description": "Updates a sink. This method replaces the following fields in the existing sink with values from the new sink: destination, and filter.The updated sink might also have a new writer_identity; see the unique_writer_identity field.",
-              "parameters": {
-                "uniqueWriterIdentity": {
-                  "type": "boolean",
-                  "description": "Optional. See sinks.create for a description of this field. When updating a sink, the effect of this field on the value of writer_identity in the updated sink depends on both the old and new values of this field: If the old and new values of this field are both false or both true, then there is no change to the sink's writer_identity. If the old value is false and the new value is true, then writer_identity is changed to a unique service account. It is an error if the old value is true and the new value is set to false or defaulted to false.",
-                  "location": "query"
-                },
-                "sinkName": {
-                  "location": "path",
-                  "pattern": "^organizations/[^/]+/sinks/[^/]+$",
-                  "type": "string",
-                  "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "required": true
-                },
-                "updateMask": {
-                  "format": "google-fieldmask",
-                  "description": "Optional. Field mask that specifies the fields in sink that need an update. A sink field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.An empty updateMask is temporarily treated as using the following mask for backwards compatibility purposes: destination,filter,includeChildren At some point in the future, behavior will be removed and specifying an empty updateMask will be an error.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
-                  "type": "string",
-                  "location": "query"
-                }
-              },
-              "httpMethod": "PUT"
-            },
-            "list": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "httpMethod": "GET",
-              "description": "Lists sinks.",
-              "flatPath": "v2/organizations/{organizationsId}/sinks",
-              "parameterOrder": [
-                "parent"
-              ],
-              "id": "logging.organizations.sinks.list",
-              "path": "v2/{+parent}/sinks",
-              "parameters": {
-                "parent": {
-                  "type": "string",
-                  "description": "Required. The parent resource whose sinks are to be listed: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
-                  "pattern": "^organizations/[^/]+$",
-                  "location": "path",
-                  "required": true
-                },
-                "pageToken": {
-                  "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "pageSize": {
-                  "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
-                  "format": "int32",
-                  "location": "query",
-                  "type": "integer"
-                }
-              },
-              "response": {
-                "$ref": "ListSinksResponse"
-              }
-            },
-            "delete": {
-              "id": "logging.organizations.sinks.delete",
-              "path": "v2/{+sinkName}",
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameters": {
-                "sinkName": {
-                  "required": true,
-                  "pattern": "^organizations/[^/]+/sinks/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The full resource name of the sink to delete, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "flatPath": "v2/organizations/{organizationsId}/sinks/{sinksId}",
-              "description": "Deletes a sink. If the sink has a unique writer_identity, then that service account is also deleted.",
-              "httpMethod": "DELETE",
-              "parameterOrder": [
-                "sinkName"
-              ]
-            },
-            "create": {
-              "description": "Creates a sink that exports specified log entries to a destination. The export of newly-ingested log entries begins immediately, unless the sink's writer_identity is not permitted to write to the destination. A sink can export log entries only from the resource owning the sink.",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "path": "v2/{+parent}/sinks",
-              "id": "logging.organizations.sinks.create",
-              "httpMethod": "POST",
-              "flatPath": "v2/organizations/{organizationsId}/sinks",
-              "request": {
-                "$ref": "LogSink"
-              },
-              "response": {
-                "$ref": "LogSink"
-              },
-              "parameters": {
-                "uniqueWriterIdentity": {
-                  "location": "query",
-                  "type": "boolean",
-                  "description": "Optional. Determines the kind of IAM identity returned as writer_identity in the new sink. If this value is omitted or set to false, and if the sink's parent is a project, then the value returned as writer_identity is the same group or service account used by Logging before the addition of writer identities to this API. The sink's destination must be in the same project as the sink itself.If this field is set to true, or if the sink is owned by a non-project resource such as an organization, then the value of writer_identity will be a unique service account used only for exports from the new sink. For more information, see writer_identity in LogSink."
-                },
-                "parent": {
-                  "required": true,
-                  "description": "Required. The resource in which to create the sink: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" Examples: \"projects/my-logging-project\", \"organizations/123456789\".",
-                  "pattern": "^organizations/[^/]+$",
-                  "location": "path",
-                  "type": "string"
-                }
-              },
-              "parameterOrder": [
-                "parent"
-              ]
-            }
-          }
-        },
-        "exclusions": {
-          "methods": {
-            "list": {
-              "response": {
-                "$ref": "ListExclusionsResponse"
-              },
-              "parameters": {
-                "pageToken": {
-                  "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "pageSize": {
-                  "location": "query",
-                  "type": "integer",
-                  "format": "int32",
-                  "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available."
-                },
-                "parent": {
-                  "description": "Required. The parent resource whose exclusions are to be listed. \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
-                  "required": true,
-                  "location": "path",
-                  "pattern": "^organizations/[^/]+$",
-                  "type": "string"
-                }
-              },
-              "description": "Lists all the exclusions in a parent resource.",
-              "id": "logging.organizations.exclusions.list",
-              "path": "v2/{+parent}/exclusions",
-              "flatPath": "v2/organizations/{organizationsId}/exclusions",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "parent"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ]
-            },
-            "get": {
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "LogExclusion"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "parameters": {
-                "name": {
-                  "type": "string",
-                  "description": "Required. The resource name of an existing exclusion: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
-                  "location": "path",
-                  "pattern": "^organizations/[^/]+/exclusions/[^/]+$",
-                  "required": true
-                }
-              },
-              "id": "logging.organizations.exclusions.get",
-              "description": "Gets the description of an exclusion.",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "path": "v2/{+name}",
-              "flatPath": "v2/organizations/{organizationsId}/exclusions/{exclusionsId}"
-            },
-            "create": {
-              "response": {
-                "$ref": "LogExclusion"
-              },
-              "request": {
-                "$ref": "LogExclusion"
-              },
-              "httpMethod": "POST",
-              "parameters": {
-                "parent": {
-                  "pattern": "^organizations/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The parent resource in which to create the exclusion: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" Examples: \"projects/my-logging-project\", \"organizations/123456789\".",
-                  "type": "string",
-                  "required": true
-                }
-              },
-              "id": "logging.organizations.exclusions.create",
-              "description": "Creates a new exclusion in a specified parent resource. Only log entries belonging to that resource can be excluded. You can have up to 10 exclusions in a resource.",
-              "parameterOrder": [
-                "parent"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "flatPath": "v2/organizations/{organizationsId}/exclusions",
-              "path": "v2/{+parent}/exclusions"
-            },
-            "patch": {
-              "parameters": {
-                "updateMask": {
-                  "location": "query",
-                  "type": "string",
-                  "format": "google-fieldmask",
-                  "description": "Required. A non-empty list of fields to change in the existing exclusion. New values for the fields are taken from the corresponding fields in the LogExclusion included in this request. Fields not mentioned in update_mask are not changed and are ignored in the request.For example, to change the filter and description of an exclusion, specify an update_mask of \"filter,description\"."
-                },
-                "name": {
-                  "required": true,
-                  "pattern": "^organizations/[^/]+/exclusions/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The resource name of the exclusion to update: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
-                  "type": "string"
-                }
-              },
-              "flatPath": "v2/organizations/{organizationsId}/exclusions/{exclusionsId}",
-              "path": "v2/{+name}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "request": {
-                "$ref": "LogExclusion"
-              },
-              "httpMethod": "PATCH",
-              "description": "Changes one or more properties of an existing exclusion.",
-              "id": "logging.organizations.exclusions.patch",
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "LogExclusion"
-              }
-            },
-            "delete": {
-              "parameters": {
-                "name": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^organizations/[^/]+/exclusions/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The resource name of an existing exclusion to delete: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\"."
-                }
-              },
-              "path": "v2/{+name}",
-              "flatPath": "v2/organizations/{organizationsId}/exclusions/{exclusionsId}",
-              "id": "logging.organizations.exclusions.delete",
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "DELETE",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "response": {
-                "$ref": "Empty"
-              },
-              "description": "Deletes an exclusion."
-            }
-          }
-        },
-        "logs": {
-          "methods": {
-            "list": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "path": "v2/{+parent}/logs",
-              "id": "logging.organizations.logs.list",
-              "httpMethod": "GET",
-              "flatPath": "v2/organizations/{organizationsId}/logs",
-              "parameterOrder": [
-                "parent"
-              ],
-              "response": {
-                "$ref": "ListLogsResponse"
-              },
-              "parameters": {
-                "resourceNames": {
-                  "description": "Optional. The resource name that owns the logs: projects/PROJECT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID organization/ORGANIZATION_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID billingAccounts/BILLING_ACCOUNT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID folders/FOLDER_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_IDTo support legacy queries, it could also be: \"projects/PROJECT_ID\" \"organizations/ORGANIZATION_ID\" \"billingAccounts/BILLING_ACCOUNT_ID\" \"folders/FOLDER_ID\"",
-                  "location": "query",
-                  "type": "string",
-                  "repeated": true
-                },
-                "pageToken": {
-                  "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "format": "int32",
-                  "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
-                  "type": "integer",
-                  "location": "query"
-                },
-                "parent": {
-                  "location": "path",
-                  "required": true,
-                  "description": "Required. The resource name that owns the logs: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
-                  "type": "string",
-                  "pattern": "^organizations/[^/]+$"
-                }
-              },
-              "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed."
-            },
-            "delete": {
-              "description": "Deletes all the log entries in a log. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.",
-              "httpMethod": "DELETE",
-              "parameters": {
-                "logName": {
-                  "location": "path",
-                  "description": "Required. The resource name of the log to delete: \"projects/[PROJECT_ID]/logs/[LOG_ID]\" \"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\" \"folders/[FOLDER_ID]/logs/[LOG_ID]\" [LOG_ID] must be URL-encoded. For example, \"projects/my-project-id/logs/syslog\", \"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity\". For more information about log names, see LogEntry.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^organizations/[^/]+/logs/[^/]+$"
-                }
-              },
-              "flatPath": "v2/organizations/{organizationsId}/logs/{logsId}",
-              "path": "v2/{+logName}",
-              "parameterOrder": [
-                "logName"
-              ],
-              "response": {
-                "$ref": "Empty"
-              },
-              "id": "logging.organizations.logs.delete",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ]
-            }
-          }
-        }
-      },
-      "methods": {
-        "updateCmekSettings": {
-          "parameterOrder": [
-            "name"
-          ],
-          "description": "Updates the Logs Router CMEK settings for the given resource.Note: CMEK for the Logs Router can currently only be configured for GCP organizations. Once configured, it applies to all projects and folders in the GCP organization.UpdateCmekSettings will fail if 1) kms_key_name is invalid, or 2) the associated service account does not have the required roles/cloudkms.cryptoKeyEncrypterDecrypter role assigned for the key, or 3) access to the key is disabled.See Enabling CMEK for Logs Router (https://cloud.google.com/logging/docs/routing/managed-encryption) for more information.",
-          "request": {
-            "$ref": "CmekSettings"
-          },
-          "httpMethod": "PATCH",
-          "flatPath": "v2/organizations/{organizationsId}/cmekSettings",
-          "parameters": {
-            "name": {
-              "pattern": "^organizations/[^/]+$",
-              "required": true,
-              "location": "path",
-              "description": "Required. The resource name for the CMEK settings to update. \"projects/[PROJECT_ID]/cmekSettings\" \"organizations/[ORGANIZATION_ID]/cmekSettings\" \"billingAccounts/[BILLING_ACCOUNT_ID]/cmekSettings\" \"folders/[FOLDER_ID]/cmekSettings\" Example: \"organizations/12345/cmekSettings\".Note: CMEK for the Logs Router can currently only be configured for GCP organizations. Once configured, it applies to all projects and folders in the GCP organization.",
-              "type": "string"
-            },
-            "updateMask": {
-              "description": "Optional. Field mask identifying which fields from cmek_settings should be updated. A field will be overwritten if and only if it is in the update mask. Output only fields cannot be updated.See FieldMask for more information.Example: \"updateMask=kmsKeyName\"",
-              "location": "query",
-              "type": "string",
-              "format": "google-fieldmask"
-            }
-          },
-          "id": "logging.organizations.updateCmekSettings",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/logging.admin"
-          ],
-          "response": {
-            "$ref": "CmekSettings"
-          },
-          "path": "v2/{+name}/cmekSettings"
-        },
-        "getCmekSettings": {
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only",
-            "https://www.googleapis.com/auth/logging.admin",
-            "https://www.googleapis.com/auth/logging.read"
-          ],
-          "flatPath": "v2/organizations/{organizationsId}/cmekSettings",
-          "id": "logging.organizations.getCmekSettings",
-          "description": "Gets the Logs Router CMEK settings for the given resource.Note: CMEK for the Logs Router can currently only be configured for GCP organizations. Once configured, it applies to all projects and folders in the GCP organization.See Enabling CMEK for Logs Router (https://cloud.google.com/logging/docs/routing/managed-encryption) for more information.",
-          "response": {
-            "$ref": "CmekSettings"
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "path": "v2/{+name}/cmekSettings",
-          "parameters": {
-            "name": {
-              "type": "string",
-              "pattern": "^organizations/[^/]+$",
-              "required": true,
-              "description": "Required. The resource for which to retrieve CMEK settings. \"projects/[PROJECT_ID]/cmekSettings\" \"organizations/[ORGANIZATION_ID]/cmekSettings\" \"billingAccounts/[BILLING_ACCOUNT_ID]/cmekSettings\" \"folders/[FOLDER_ID]/cmekSettings\" Example: \"organizations/12345/cmekSettings\".Note: CMEK for the Logs Router can currently only be configured for GCP organizations. Once configured, it applies to all projects and folders in the GCP organization.",
-              "location": "path"
-            }
-          },
-          "httpMethod": "GET"
-        }
-      }
-    },
-    "sinks": {
-      "methods": {
-        "create": {
-          "parameterOrder": [
-            "parent"
-          ],
-          "id": "logging.sinks.create",
-          "request": {
-            "$ref": "LogSink"
-          },
-          "parameters": {
-            "parent": {
-              "required": true,
-              "pattern": "^[^/]+/[^/]+$",
-              "description": "Required. The resource in which to create the sink: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" Examples: \"projects/my-logging-project\", \"organizations/123456789\".",
-              "location": "path",
-              "type": "string"
-            },
-            "uniqueWriterIdentity": {
-              "location": "query",
-              "description": "Optional. Determines the kind of IAM identity returned as writer_identity in the new sink. If this value is omitted or set to false, and if the sink's parent is a project, then the value returned as writer_identity is the same group or service account used by Logging before the addition of writer identities to this API. The sink's destination must be in the same project as the sink itself.If this field is set to true, or if the sink is owned by a non-project resource such as an organization, then the value of writer_identity will be a unique service account used only for exports from the new sink. For more information, see writer_identity in LogSink.",
-              "type": "boolean"
-            }
-          },
-          "flatPath": "v2/{v2Id}/{v2Id1}/sinks",
-          "description": "Creates a sink that exports specified log entries to a destination. The export of newly-ingested log entries begins immediately, unless the sink's writer_identity is not permitted to write to the destination. A sink can export log entries only from the resource owning the sink.",
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/logging.admin"
-          ],
-          "path": "v2/{+parent}/sinks",
-          "response": {
-            "$ref": "LogSink"
-          }
-        },
-        "list": {
-          "flatPath": "v2/{v2Id}/{v2Id1}/sinks",
-          "id": "logging.sinks.list",
-          "response": {
-            "$ref": "ListSinksResponse"
-          },
-          "parameterOrder": [
-            "parent"
-          ],
-          "httpMethod": "GET",
-          "path": "v2/{+parent}/sinks",
-          "parameters": {
-            "pageToken": {
-              "location": "query",
-              "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-              "type": "string"
-            },
-            "pageSize": {
-              "location": "query",
-              "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
-              "format": "int32",
-              "type": "integer"
-            },
-            "parent": {
-              "description": "Required. The parent resource whose sinks are to be listed: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
-              "type": "string",
-              "pattern": "^[^/]+/[^/]+$",
-              "location": "path",
-              "required": true
-            }
-          },
-          "description": "Lists sinks.",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only",
-            "https://www.googleapis.com/auth/logging.admin",
-            "https://www.googleapis.com/auth/logging.read"
-          ]
-        },
-        "update": {
-          "httpMethod": "PUT",
-          "response": {
-            "$ref": "LogSink"
-          },
-          "description": "Updates a sink. This method replaces the following fields in the existing sink with values from the new sink: destination, and filter.The updated sink might also have a new writer_identity; see the unique_writer_identity field.",
-          "request": {
-            "$ref": "LogSink"
-          },
-          "parameters": {
-            "updateMask": {
-              "location": "query",
-              "format": "google-fieldmask",
-              "description": "Optional. Field mask that specifies the fields in sink that need an update. A sink field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.An empty updateMask is temporarily treated as using the following mask for backwards compatibility purposes: destination,filter,includeChildren At some point in the future, behavior will be removed and specifying an empty updateMask will be an error.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
-              "type": "string"
-            },
-            "sinkName": {
-              "type": "string",
-              "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
-              "pattern": "^[^/]+/[^/]+/sinks/[^/]+$",
-              "required": true,
-              "location": "path"
-            },
-            "uniqueWriterIdentity": {
-              "type": "boolean",
-              "description": "Optional. See sinks.create for a description of this field. When updating a sink, the effect of this field on the value of writer_identity in the updated sink depends on both the old and new values of this field: If the old and new values of this field are both false or both true, then there is no change to the sink's writer_identity. If the old value is false and the new value is true, then writer_identity is changed to a unique service account. It is an error if the old value is true and the new value is set to false or defaulted to false.",
-              "location": "query"
-            }
-          },
-          "parameterOrder": [
-            "sinkName"
-          ],
-          "path": "v2/{+sinkName}",
-          "id": "logging.sinks.update",
-          "flatPath": "v2/{v2Id}/{v2Id1}/sinks/{sinksId}",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/logging.admin"
-          ]
-        },
-        "get": {
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only",
-            "https://www.googleapis.com/auth/logging.admin",
-            "https://www.googleapis.com/auth/logging.read"
-          ],
-          "parameters": {
-            "sinkName": {
-              "description": "Required. The resource name of the sink: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
-              "required": true,
-              "type": "string",
-              "pattern": "^[^/]+/[^/]+/sinks/[^/]+$",
-              "location": "path"
-            }
-          },
-          "flatPath": "v2/{v2Id}/{v2Id1}/sinks/{sinksId}",
-          "path": "v2/{+sinkName}",
-          "httpMethod": "GET",
-          "description": "Gets a sink.",
-          "parameterOrder": [
-            "sinkName"
-          ],
-          "response": {
-            "$ref": "LogSink"
-          },
-          "id": "logging.sinks.get"
-        },
-        "delete": {
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/logging.admin"
-          ],
-          "httpMethod": "DELETE",
-          "id": "logging.sinks.delete",
-          "path": "v2/{+sinkName}",
-          "response": {
-            "$ref": "Empty"
-          },
-          "flatPath": "v2/{v2Id}/{v2Id1}/sinks/{sinksId}",
-          "parameterOrder": [
-            "sinkName"
-          ],
-          "parameters": {
-            "sinkName": {
-              "type": "string",
-              "location": "path",
-              "pattern": "^[^/]+/[^/]+/sinks/[^/]+$",
-              "required": true,
-              "description": "Required. The full resource name of the sink to delete, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\"."
-            }
-          },
-          "description": "Deletes a sink. If the sink has a unique writer_identity, then that service account is also deleted."
-        }
-      }
-    },
-    "monitoredResourceDescriptors": {
-      "methods": {
-        "list": {
-          "parameterOrder": [],
-          "id": "logging.monitoredResourceDescriptors.list",
-          "parameters": {
-            "pageSize": {
-              "format": "int32",
-              "location": "query",
-              "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
-              "type": "integer"
-            },
-            "pageToken": {
-              "location": "query",
-              "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only",
-            "https://www.googleapis.com/auth/logging.admin",
-            "https://www.googleapis.com/auth/logging.read"
-          ],
-          "response": {
-            "$ref": "ListMonitoredResourceDescriptorsResponse"
-          },
-          "flatPath": "v2/monitoredResourceDescriptors",
-          "path": "v2/monitoredResourceDescriptors",
-          "httpMethod": "GET",
-          "description": "Lists the descriptors for monitored resource types used by Logging."
-        }
-      }
-    },
-    "billingAccounts": {
-      "resources": {
-        "exclusions": {
-          "methods": {
-            "get": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "description": "Gets the description of an exclusion.",
-              "parameters": {
-                "name": {
-                  "pattern": "^billingAccounts/[^/]+/exclusions/[^/]+$",
-                  "type": "string",
-                  "description": "Required. The resource name of an existing exclusion: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
-                  "required": true,
-                  "location": "path"
-                }
-              },
-              "flatPath": "v2/billingAccounts/{billingAccountsId}/exclusions/{exclusionsId}",
-              "path": "v2/{+name}",
-              "response": {
-                "$ref": "LogExclusion"
-              },
-              "id": "logging.billingAccounts.exclusions.get",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "name"
-              ]
-            },
-            "delete": {
-              "path": "v2/{+name}",
-              "flatPath": "v2/billingAccounts/{billingAccountsId}/exclusions/{exclusionsId}",
-              "description": "Deletes an exclusion.",
-              "parameters": {
-                "name": {
-                  "type": "string",
-                  "location": "path",
-                  "pattern": "^billingAccounts/[^/]+/exclusions/[^/]+$",
-                  "description": "Required. The resource name of an existing exclusion to delete: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
-                  "required": true
-                }
-              },
-              "id": "logging.billingAccounts.exclusions.delete",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "response": {
-                "$ref": "Empty"
-              },
-              "httpMethod": "DELETE",
-              "parameterOrder": [
-                "name"
-              ]
-            },
-            "patch": {
-              "parameters": {
-                "name": {
-                  "type": "string",
-                  "required": true,
-                  "description": "Required. The resource name of the exclusion to update: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
-                  "pattern": "^billingAccounts/[^/]+/exclusions/[^/]+$",
-                  "location": "path"
-                },
-                "updateMask": {
-                  "description": "Required. A non-empty list of fields to change in the existing exclusion. New values for the fields are taken from the corresponding fields in the LogExclusion included in this request. Fields not mentioned in update_mask are not changed and are ignored in the request.For example, to change the filter and description of an exclusion, specify an update_mask of \"filter,description\".",
-                  "type": "string",
-                  "location": "query",
-                  "format": "google-fieldmask"
-                }
-              },
-              "response": {
-                "$ref": "LogExclusion"
-              },
-              "httpMethod": "PATCH",
-              "request": {
-                "$ref": "LogExclusion"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "description": "Changes one or more properties of an existing exclusion.",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "id": "logging.billingAccounts.exclusions.patch",
-              "path": "v2/{+name}",
-              "flatPath": "v2/billingAccounts/{billingAccountsId}/exclusions/{exclusionsId}"
-            },
-            "create": {
-              "request": {
-                "$ref": "LogExclusion"
-              },
-              "httpMethod": "POST",
-              "response": {
-                "$ref": "LogExclusion"
-              },
-              "id": "logging.billingAccounts.exclusions.create",
-              "parameterOrder": [
-                "parent"
-              ],
-              "flatPath": "v2/billingAccounts/{billingAccountsId}/exclusions",
-              "parameters": {
-                "parent": {
-                  "required": true,
-                  "description": "Required. The parent resource in which to create the exclusion: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" Examples: \"projects/my-logging-project\", \"organizations/123456789\".",
-                  "location": "path",
-                  "pattern": "^billingAccounts/[^/]+$",
-                  "type": "string"
-                }
-              },
-              "description": "Creates a new exclusion in a specified parent resource. Only log entries belonging to that resource can be excluded. You can have up to 10 exclusions in a resource.",
-              "path": "v2/{+parent}/exclusions",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ]
-            },
-            "list": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "description": "Lists all the exclusions in a parent resource.",
-              "parameterOrder": [
-                "parent"
-              ],
-              "path": "v2/{+parent}/exclusions",
-              "parameters": {
-                "pageToken": {
-                  "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "format": "int32",
-                  "location": "query",
-                  "type": "integer",
-                  "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available."
-                },
-                "parent": {
-                  "required": true,
-                  "pattern": "^billingAccounts/[^/]+$",
-                  "description": "Required. The parent resource whose exclusions are to be listed. \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "httpMethod": "GET",
-              "flatPath": "v2/billingAccounts/{billingAccountsId}/exclusions",
-              "response": {
-                "$ref": "ListExclusionsResponse"
-              },
-              "id": "logging.billingAccounts.exclusions.list"
-            }
-          }
-        },
-        "locations": {
-          "resources": {
-            "buckets": {
-              "resources": {
-                "views": {
-                  "methods": {
-                    "delete": {
-                      "response": {
-                        "$ref": "Empty"
-                      },
-                      "parameters": {
-                        "name": {
-                          "description": "Required. The full resource name of the view to delete: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
-                          "type": "string",
-                          "required": true,
-                          "location": "path",
-                          "pattern": "^billingAccounts/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$"
-                        }
-                      },
-                      "flatPath": "v2/billingAccounts/{billingAccountsId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
-                      "path": "v2/{+name}",
-                      "httpMethod": "DELETE",
-                      "description": "Deletes a view from a bucket.",
-                      "id": "logging.billingAccounts.locations.buckets.views.delete",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/logging.admin"
-                      ],
-                      "parameterOrder": [
-                        "name"
-                      ]
-                    },
-                    "create": {
-                      "path": "v2/{+parent}/views",
-                      "response": {
-                        "$ref": "LogView"
-                      },
-                      "request": {
-                        "$ref": "LogView"
-                      },
-                      "description": "Creates a view over logs in a bucket. A bucket may contain a maximum of 50 views.",
-                      "flatPath": "v2/billingAccounts/{billingAccountsId}/locations/{locationsId}/buckets/{bucketsId}/views",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/logging.admin"
-                      ],
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "id": "logging.billingAccounts.locations.buckets.views.create",
-                      "httpMethod": "POST",
-                      "parameters": {
-                        "parent": {
-                          "description": "Required. The bucket in which to create the view \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-logging-project/locations/my-location/buckets/my-bucket\"",
-                          "pattern": "^billingAccounts/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                          "required": true,
-                          "type": "string",
-                          "location": "path"
-                        },
-                        "viewId": {
-                          "description": "Required. The id to use for this view.",
-                          "location": "query",
-                          "type": "string"
-                        }
-                      }
-                    },
-                    "list": {
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "flatPath": "v2/billingAccounts/{billingAccountsId}/locations/{locationsId}/buckets/{bucketsId}/views",
-                      "path": "v2/{+parent}/views",
-                      "httpMethod": "GET",
-                      "id": "logging.billingAccounts.locations.buckets.views.list",
-                      "parameters": {
-                        "pageToken": {
-                          "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-                          "location": "query",
-                          "type": "string"
-                        },
-                        "parent": {
-                          "required": true,
-                          "type": "string",
-                          "description": "Required. The bucket whose views are to be listed: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" ",
-                          "location": "path",
-                          "pattern": "^billingAccounts/[^/]+/locations/[^/]+/buckets/[^/]+$"
-                        },
-                        "pageSize": {
-                          "type": "integer",
-                          "location": "query",
-                          "format": "int32",
-                          "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available."
-                        }
-                      },
-                      "response": {
-                        "$ref": "ListViewsResponse"
-                      },
-                      "description": "Lists views on a bucket.",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloud-platform.read-only",
-                        "https://www.googleapis.com/auth/logging.admin",
-                        "https://www.googleapis.com/auth/logging.read"
-                      ]
-                    },
-                    "patch": {
-                      "description": "Updates a view. This method replaces the following fields in the existing view with values from the new view: filter.",
-                      "httpMethod": "PATCH",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/logging.admin"
-                      ],
-                      "request": {
-                        "$ref": "LogView"
-                      },
-                      "response": {
-                        "$ref": "LogView"
-                      },
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "flatPath": "v2/billingAccounts/{billingAccountsId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
-                      "parameters": {
-                        "name": {
-                          "pattern": "^billingAccounts/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
-                          "description": "Required. The full resource name of the view to update \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
-                          "location": "path",
-                          "required": true,
-                          "type": "string"
-                        },
-                        "updateMask": {
-                          "location": "query",
-                          "description": "Optional. Field mask that specifies the fields in view that need an update. A field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
-                          "type": "string",
-                          "format": "google-fieldmask"
-                        }
-                      },
-                      "id": "logging.billingAccounts.locations.buckets.views.patch",
-                      "path": "v2/{+name}"
-                    }
-                  }
-                }
-              },
-              "methods": {
-                "create": {
-                  "id": "logging.billingAccounts.locations.buckets.create",
-                  "path": "v2/{+parent}/buckets",
-                  "description": "Creates a bucket that can be used to store log entries. Once a bucket has been created, the region cannot be changed.",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "parameters": {
-                    "bucketId": {
-                      "description": "Required. A client-assigned identifier such as \"my-bucket\". Identifiers are limited to 100 characters and can include only letters, digits, underscores, hyphens, and periods.",
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "parent": {
-                      "description": "Required. The resource in which to create the bucket: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]\" Example: \"projects/my-logging-project/locations/global\"",
-                      "location": "path",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^billingAccounts/[^/]+/locations/[^/]+$"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/logging.admin"
-                  ],
-                  "response": {
-                    "$ref": "LogBucket"
-                  },
-                  "flatPath": "v2/billingAccounts/{billingAccountsId}/locations/{locationsId}/buckets",
-                  "httpMethod": "POST",
-                  "request": {
-                    "$ref": "LogBucket"
-                  }
-                },
-                "undelete": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/logging.admin"
-                  ],
-                  "request": {
-                    "$ref": "UndeleteBucketRequest"
-                  },
-                  "flatPath": "v2/billingAccounts/{billingAccountsId}/locations/{locationsId}/buckets/{bucketsId}:undelete",
-                  "parameters": {
-                    "name": {
-                      "pattern": "^billingAccounts/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                      "description": "Required. The full resource name of the bucket to undelete. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
-                      "type": "string",
-                      "location": "path",
-                      "required": true
-                    }
-                  },
-                  "path": "v2/{+name}:undelete",
-                  "description": "Undeletes a bucket. A bucket that has been deleted may be undeleted within the grace period of 7 days.",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "POST",
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "id": "logging.billingAccounts.locations.buckets.undelete"
-                },
-                "delete": {
-                  "description": "Deletes a bucket. Moves the bucket to the DELETE_REQUESTED state. After 7 days, the bucket will be purged and all logs in the bucket will be permanently deleted.",
-                  "path": "v2/{+name}",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "id": "logging.billingAccounts.locations.buckets.delete",
-                  "parameters": {
-                    "name": {
-                      "location": "path",
-                      "pattern": "^billingAccounts/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                      "description": "Required. The full resource name of the bucket to delete. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
-                      "required": true,
-                      "type": "string"
-                    }
-                  },
-                  "httpMethod": "DELETE",
-                  "flatPath": "v2/billingAccounts/{billingAccountsId}/locations/{locationsId}/buckets/{bucketsId}",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/logging.admin"
-                  ]
-                },
-                "list": {
-                  "description": "Lists buckets.",
-                  "httpMethod": "GET",
-                  "id": "logging.billingAccounts.locations.buckets.list",
-                  "parameters": {
-                    "pageSize": {
-                      "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
-                      "format": "int32",
-                      "location": "query",
-                      "type": "integer"
-                    },
-                    "pageToken": {
-                      "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-                      "location": "query",
-                      "type": "string"
-                    },
-                    "parent": {
-                      "description": "Required. The parent resource whose buckets are to be listed: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]\" Note: The locations portion of the resource must be specified, but supplying the character - in place of LOCATION_ID will return all buckets.",
-                      "type": "string",
-                      "location": "path",
-                      "pattern": "^billingAccounts/[^/]+/locations/[^/]+$",
-                      "required": true
-                    }
-                  },
-                  "response": {
-                    "$ref": "ListBucketsResponse"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only",
-                    "https://www.googleapis.com/auth/logging.admin",
-                    "https://www.googleapis.com/auth/logging.read"
-                  ],
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "path": "v2/{+parent}/buckets",
-                  "flatPath": "v2/billingAccounts/{billingAccountsId}/locations/{locationsId}/buckets"
-                },
-                "patch": {
-                  "request": {
-                    "$ref": "LogBucket"
-                  },
-                  "flatPath": "v2/billingAccounts/{billingAccountsId}/locations/{locationsId}/buckets/{bucketsId}",
-                  "parameters": {
-                    "updateMask": {
-                      "location": "query",
-                      "format": "google-fieldmask",
-                      "type": "string",
-                      "description": "Required. Field mask that specifies the fields in bucket that need an update. A bucket field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=retention_days."
-                    },
-                    "name": {
-                      "required": true,
-                      "pattern": "^billingAccounts/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                      "type": "string",
-                      "location": "path",
-                      "description": "Required. The full resource name of the bucket to update. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\". Also requires permission \"resourcemanager.projects.updateLiens\" to set the locked property"
-                    }
-                  },
-                  "id": "logging.billingAccounts.locations.buckets.patch",
-                  "path": "v2/{+name}",
-                  "httpMethod": "PATCH",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "description": "Updates a bucket. This method replaces the following fields in the existing bucket with values from the new bucket: retention_periodIf the retention period is decreased and the bucket is locked, FAILED_PRECONDITION will be returned.If the bucket has a LifecycleState of DELETE_REQUESTED, FAILED_PRECONDITION will be returned.A buckets region may not be modified after it is created.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/logging.admin"
-                  ],
-                  "response": {
-                    "$ref": "LogBucket"
-                  }
-                }
-              }
-            }
-          },
-          "methods": {
-            "list": {
-              "description": "Lists information about the supported locations for this service.",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "name"
-              ],
-              "flatPath": "v2/billingAccounts/{billingAccountsId}/locations",
-              "id": "logging.billingAccounts.locations.list",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "response": {
-                "$ref": "ListLocationsResponse"
-              },
-              "parameters": {
-                "pageToken": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "The standard list page token."
-                },
-                "pageSize": {
-                  "description": "The standard list page size.",
-                  "type": "integer",
-                  "format": "int32",
-                  "location": "query"
-                },
-                "name": {
-                  "location": "path",
-                  "required": true,
-                  "description": "The resource that owns the locations collection, if applicable.",
-                  "type": "string",
-                  "pattern": "^billingAccounts/[^/]+$"
-                },
-                "filter": {
-                  "location": "query",
-                  "description": "The standard list filter.",
-                  "type": "string"
-                }
-              },
-              "path": "v2/{+name}/locations"
-            },
-            "get": {
-              "httpMethod": "GET",
-              "id": "logging.billingAccounts.locations.get",
-              "response": {
-                "$ref": "Location"
-              },
-              "path": "v2/{+name}",
-              "flatPath": "v2/billingAccounts/{billingAccountsId}/locations/{locationsId}",
-              "parameterOrder": [
-                "name"
-              ],
-              "parameters": {
-                "name": {
-                  "pattern": "^billingAccounts/[^/]+/locations/[^/]+$",
-                  "required": true,
-                  "description": "Resource name for the location.",
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "description": "Gets information about a location.",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ]
-            }
-          }
-        },
-        "buckets": {
-          "methods": {
-            "get": {
-              "path": "v2/{+name}",
-              "description": "Gets a bucket.",
-              "parameters": {
-                "name": {
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "description": "Required. The resource name of the bucket: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
-                  "pattern": "^billingAccounts/[^/]+/buckets/[^/]+$"
-                }
-              },
-              "response": {
-                "$ref": "LogBucket"
-              },
-              "flatPath": "v2/billingAccounts/{billingAccountsId}/buckets/{bucketsId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET",
-              "id": "logging.billingAccounts.buckets.get"
-            }
-          },
-          "resources": {
-            "views": {
-              "methods": {
-                "get": {
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "response": {
-                    "$ref": "LogView"
-                  },
-                  "parameters": {
-                    "name": {
-                      "description": "Required. The resource name of the policy: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
-                      "pattern": "^billingAccounts/[^/]+/buckets/[^/]+/views/[^/]+$",
-                      "type": "string",
-                      "required": true,
-                      "location": "path"
-                    }
-                  },
-                  "flatPath": "v2/billingAccounts/{billingAccountsId}/buckets/{bucketsId}/views/{viewsId}",
-                  "httpMethod": "GET",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only",
-                    "https://www.googleapis.com/auth/logging.admin",
-                    "https://www.googleapis.com/auth/logging.read"
-                  ],
-                  "path": "v2/{+name}",
-                  "description": "Gets a view.",
-                  "id": "logging.billingAccounts.buckets.views.get"
-                }
-              }
-            }
-          }
-        },
-        "logs": {
-          "methods": {
-            "delete": {
-              "flatPath": "v2/billingAccounts/{billingAccountsId}/logs/{logsId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "response": {
-                "$ref": "Empty"
-              },
-              "httpMethod": "DELETE",
-              "parameterOrder": [
-                "logName"
-              ],
-              "id": "logging.billingAccounts.logs.delete",
-              "description": "Deletes all the log entries in a log. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.",
-              "path": "v2/{+logName}",
-              "parameters": {
-                "logName": {
-                  "pattern": "^billingAccounts/[^/]+/logs/[^/]+$",
-                  "type": "string",
-                  "description": "Required. The resource name of the log to delete: \"projects/[PROJECT_ID]/logs/[LOG_ID]\" \"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\" \"folders/[FOLDER_ID]/logs/[LOG_ID]\" [LOG_ID] must be URL-encoded. For example, \"projects/my-project-id/logs/syslog\", \"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity\". For more information about log names, see LogEntry.",
-                  "required": true,
-                  "location": "path"
-                }
-              }
-            },
-            "list": {
-              "flatPath": "v2/billingAccounts/{billingAccountsId}/logs",
-              "parameterOrder": [
-                "parent"
-              ],
-              "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.",
-              "parameters": {
-                "parent": {
-                  "pattern": "^billingAccounts/[^/]+$",
-                  "type": "string",
-                  "description": "Required. The resource name that owns the logs: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
-                  "required": true,
-                  "location": "path"
-                },
-                "pageSize": {
-                  "location": "query",
-                  "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
-                  "format": "int32",
-                  "type": "integer"
-                },
-                "pageToken": {
-                  "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "resourceNames": {
-                  "repeated": true,
-                  "type": "string",
-                  "location": "query",
-                  "description": "Optional. The resource name that owns the logs: projects/PROJECT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID organization/ORGANIZATION_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID billingAccounts/BILLING_ACCOUNT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID folders/FOLDER_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_IDTo support legacy queries, it could also be: \"projects/PROJECT_ID\" \"organizations/ORGANIZATION_ID\" \"billingAccounts/BILLING_ACCOUNT_ID\" \"folders/FOLDER_ID\""
-                }
-              },
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "ListLogsResponse"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "path": "v2/{+parent}/logs",
-              "id": "logging.billingAccounts.logs.list"
-            }
-          }
-        },
-        "sinks": {
-          "methods": {
-            "delete": {
-              "id": "logging.billingAccounts.sinks.delete",
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "description": "Deletes a sink. If the sink has a unique writer_identity, then that service account is also deleted.",
-              "path": "v2/{+sinkName}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "parameters": {
-                "sinkName": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^billingAccounts/[^/]+/sinks/[^/]+$",
-                  "description": "Required. The full resource name of the sink to delete, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v2/billingAccounts/{billingAccountsId}/sinks/{sinksId}",
-              "httpMethod": "DELETE"
-            },
-            "create": {
-              "response": {
-                "$ref": "LogSink"
-              },
-              "path": "v2/{+parent}/sinks",
-              "flatPath": "v2/billingAccounts/{billingAccountsId}/sinks",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "parameters": {
-                "uniqueWriterIdentity": {
-                  "location": "query",
-                  "description": "Optional. Determines the kind of IAM identity returned as writer_identity in the new sink. If this value is omitted or set to false, and if the sink's parent is a project, then the value returned as writer_identity is the same group or service account used by Logging before the addition of writer identities to this API. The sink's destination must be in the same project as the sink itself.If this field is set to true, or if the sink is owned by a non-project resource such as an organization, then the value of writer_identity will be a unique service account used only for exports from the new sink. For more information, see writer_identity in LogSink.",
-                  "type": "boolean"
-                },
-                "parent": {
-                  "type": "string",
-                  "required": true,
-                  "location": "path",
-                  "pattern": "^billingAccounts/[^/]+$",
-                  "description": "Required. The resource in which to create the sink: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" Examples: \"projects/my-logging-project\", \"organizations/123456789\"."
-                }
-              },
-              "parameterOrder": [
-                "parent"
-              ],
-              "httpMethod": "POST",
-              "description": "Creates a sink that exports specified log entries to a destination. The export of newly-ingested log entries begins immediately, unless the sink's writer_identity is not permitted to write to the destination. A sink can export log entries only from the resource owning the sink.",
-              "request": {
-                "$ref": "LogSink"
-              },
-              "id": "logging.billingAccounts.sinks.create"
-            },
-            "update": {
-              "parameters": {
-                "updateMask": {
-                  "location": "query",
-                  "type": "string",
-                  "format": "google-fieldmask",
-                  "description": "Optional. Field mask that specifies the fields in sink that need an update. A sink field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.An empty updateMask is temporarily treated as using the following mask for backwards compatibility purposes: destination,filter,includeChildren At some point in the future, behavior will be removed and specifying an empty updateMask will be an error.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter."
-                },
-                "uniqueWriterIdentity": {
-                  "location": "query",
-                  "description": "Optional. See sinks.create for a description of this field. When updating a sink, the effect of this field on the value of writer_identity in the updated sink depends on both the old and new values of this field: If the old and new values of this field are both false or both true, then there is no change to the sink's writer_identity. If the old value is false and the new value is true, then writer_identity is changed to a unique service account. It is an error if the old value is true and the new value is set to false or defaulted to false.",
-                  "type": "boolean"
-                },
-                "sinkName": {
-                  "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "location": "path",
-                  "required": true,
-                  "pattern": "^billingAccounts/[^/]+/sinks/[^/]+$",
-                  "type": "string"
-                }
-              },
-              "path": "v2/{+sinkName}",
-              "response": {
-                "$ref": "LogSink"
-              },
-              "id": "logging.billingAccounts.sinks.update",
-              "httpMethod": "PUT",
-              "flatPath": "v2/billingAccounts/{billingAccountsId}/sinks/{sinksId}",
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "description": "Updates a sink. This method replaces the following fields in the existing sink with values from the new sink: destination, and filter.The updated sink might also have a new writer_identity; see the unique_writer_identity field.",
-              "request": {
-                "$ref": "LogSink"
-              }
-            },
-            "list": {
-              "flatPath": "v2/billingAccounts/{billingAccountsId}/sinks",
-              "path": "v2/{+parent}/sinks",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "parent"
-              ],
-              "parameters": {
-                "pageSize": {
-                  "location": "query",
-                  "type": "integer",
-                  "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
-                  "format": "int32"
-                },
-                "parent": {
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "pattern": "^billingAccounts/[^/]+$",
-                  "description": "Required. The parent resource whose sinks are to be listed: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" "
-                },
-                "pageToken": {
-                  "location": "query",
-                  "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-                  "type": "string"
-                }
-              },
-              "description": "Lists sinks.",
-              "id": "logging.billingAccounts.sinks.list",
-              "response": {
-                "$ref": "ListSinksResponse"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ]
-            },
-            "get": {
-              "path": "v2/{+sinkName}",
-              "flatPath": "v2/billingAccounts/{billingAccountsId}/sinks/{sinksId}",
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "response": {
-                "$ref": "LogSink"
-              },
-              "id": "logging.billingAccounts.sinks.get",
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "parameters": {
-                "sinkName": {
-                  "description": "Required. The resource name of the sink: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "pattern": "^billingAccounts/[^/]+/sinks/[^/]+$"
-                }
-              },
-              "description": "Gets a sink."
-            },
-            "patch": {
-              "id": "logging.billingAccounts.sinks.patch",
-              "request": {
-                "$ref": "LogSink"
-              },
-              "parameters": {
-                "sinkName": {
-                  "required": true,
-                  "pattern": "^billingAccounts/[^/]+/sinks/[^/]+$",
-                  "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "type": "string",
-                  "location": "path"
-                },
-                "uniqueWriterIdentity": {
-                  "location": "query",
-                  "type": "boolean",
-                  "description": "Optional. See sinks.create for a description of this field. When updating a sink, the effect of this field on the value of writer_identity in the updated sink depends on both the old and new values of this field: If the old and new values of this field are both false or both true, then there is no change to the sink's writer_identity. If the old value is false and the new value is true, then writer_identity is changed to a unique service account. It is an error if the old value is true and the new value is set to false or defaulted to false."
-                },
-                "updateMask": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "Optional. Field mask that specifies the fields in sink that need an update. A sink field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.An empty updateMask is temporarily treated as using the following mask for backwards compatibility purposes: destination,filter,includeChildren At some point in the future, behavior will be removed and specifying an empty updateMask will be an error.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
-                  "format": "google-fieldmask"
-                }
-              },
-              "flatPath": "v2/billingAccounts/{billingAccountsId}/sinks/{sinksId}",
-              "description": "Updates a sink. This method replaces the following fields in the existing sink with values from the new sink: destination, and filter.The updated sink might also have a new writer_identity; see the unique_writer_identity field.",
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "httpMethod": "PATCH",
-              "path": "v2/{+sinkName}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "response": {
-                "$ref": "LogSink"
-              }
-            }
-          }
-        }
-      }
-    },
-    "folders": {
-      "resources": {
-        "logs": {
-          "methods": {
-            "list": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "parameterOrder": [
-                "parent"
-              ],
-              "id": "logging.folders.logs.list",
-              "parameters": {
-                "pageToken": {
-                  "type": "string",
-                  "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-                  "location": "query"
-                },
-                "pageSize": {
-                  "location": "query",
-                  "format": "int32",
-                  "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
-                  "type": "integer"
-                },
-                "resourceNames": {
-                  "repeated": true,
-                  "type": "string",
-                  "location": "query",
-                  "description": "Optional. The resource name that owns the logs: projects/PROJECT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID organization/ORGANIZATION_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID billingAccounts/BILLING_ACCOUNT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID folders/FOLDER_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_IDTo support legacy queries, it could also be: \"projects/PROJECT_ID\" \"organizations/ORGANIZATION_ID\" \"billingAccounts/BILLING_ACCOUNT_ID\" \"folders/FOLDER_ID\""
-                },
-                "parent": {
-                  "description": "Required. The resource name that owns the logs: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
-                  "type": "string",
-                  "required": true,
-                  "pattern": "^folders/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "path": "v2/{+parent}/logs",
-              "flatPath": "v2/folders/{foldersId}/logs",
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "ListLogsResponse"
-              },
-              "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed."
-            },
-            "delete": {
-              "flatPath": "v2/folders/{foldersId}/logs/{logsId}",
-              "description": "Deletes all the log entries in a log. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.",
-              "path": "v2/{+logName}",
-              "parameters": {
-                "logName": {
-                  "pattern": "^folders/[^/]+/logs/[^/]+$",
-                  "location": "path",
-                  "type": "string",
-                  "description": "Required. The resource name of the log to delete: \"projects/[PROJECT_ID]/logs/[LOG_ID]\" \"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\" \"folders/[FOLDER_ID]/logs/[LOG_ID]\" [LOG_ID] must be URL-encoded. For example, \"projects/my-project-id/logs/syslog\", \"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity\". For more information about log names, see LogEntry.",
-                  "required": true
-                }
-              },
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "logName"
-              ],
-              "id": "logging.folders.logs.delete",
-              "httpMethod": "DELETE",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ]
-            }
-          }
-        },
-        "sinks": {
-          "methods": {
-            "get": {
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "httpMethod": "GET",
-              "id": "logging.folders.sinks.get",
-              "path": "v2/{+sinkName}",
-              "parameters": {
-                "sinkName": {
-                  "pattern": "^folders/[^/]+/sinks/[^/]+$",
-                  "location": "path",
-                  "required": true,
-                  "description": "Required. The resource name of the sink: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "type": "string"
-                }
-              },
-              "flatPath": "v2/folders/{foldersId}/sinks/{sinksId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "description": "Gets a sink.",
-              "response": {
-                "$ref": "LogSink"
-              }
-            },
-            "delete": {
-              "flatPath": "v2/folders/{foldersId}/sinks/{sinksId}",
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameters": {
-                "sinkName": {
-                  "pattern": "^folders/[^/]+/sinks/[^/]+$",
-                  "location": "path",
-                  "required": true,
-                  "description": "Required. The full resource name of the sink to delete, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "type": "string"
-                }
-              },
-              "path": "v2/{+sinkName}",
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "httpMethod": "DELETE",
-              "id": "logging.folders.sinks.delete",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "description": "Deletes a sink. If the sink has a unique writer_identity, then that service account is also deleted."
-            },
-            "create": {
-              "description": "Creates a sink that exports specified log entries to a destination. The export of newly-ingested log entries begins immediately, unless the sink's writer_identity is not permitted to write to the destination. A sink can export log entries only from the resource owning the sink.",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "request": {
-                "$ref": "LogSink"
-              },
-              "parameters": {
-                "uniqueWriterIdentity": {
-                  "description": "Optional. Determines the kind of IAM identity returned as writer_identity in the new sink. If this value is omitted or set to false, and if the sink's parent is a project, then the value returned as writer_identity is the same group or service account used by Logging before the addition of writer identities to this API. The sink's destination must be in the same project as the sink itself.If this field is set to true, or if the sink is owned by a non-project resource such as an organization, then the value of writer_identity will be a unique service account used only for exports from the new sink. For more information, see writer_identity in LogSink.",
-                  "type": "boolean",
-                  "location": "query"
-                },
-                "parent": {
-                  "type": "string",
-                  "required": true,
-                  "description": "Required. The resource in which to create the sink: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" Examples: \"projects/my-logging-project\", \"organizations/123456789\".",
-                  "pattern": "^folders/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "response": {
-                "$ref": "LogSink"
-              },
-              "flatPath": "v2/folders/{foldersId}/sinks",
-              "id": "logging.folders.sinks.create",
-              "parameterOrder": [
-                "parent"
-              ],
-              "path": "v2/{+parent}/sinks",
-              "httpMethod": "POST"
-            },
-            "patch": {
-              "description": "Updates a sink. This method replaces the following fields in the existing sink with values from the new sink: destination, and filter.The updated sink might also have a new writer_identity; see the unique_writer_identity field.",
-              "response": {
-                "$ref": "LogSink"
-              },
-              "request": {
-                "$ref": "LogSink"
-              },
-              "flatPath": "v2/folders/{foldersId}/sinks/{sinksId}",
-              "httpMethod": "PATCH",
-              "id": "logging.folders.sinks.patch",
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "parameters": {
-                "sinkName": {
-                  "location": "path",
-                  "required": true,
-                  "pattern": "^folders/[^/]+/sinks/[^/]+$",
-                  "type": "string",
-                  "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\"."
-                },
-                "uniqueWriterIdentity": {
-                  "type": "boolean",
-                  "location": "query",
-                  "description": "Optional. See sinks.create for a description of this field. When updating a sink, the effect of this field on the value of writer_identity in the updated sink depends on both the old and new values of this field: If the old and new values of this field are both false or both true, then there is no change to the sink's writer_identity. If the old value is false and the new value is true, then writer_identity is changed to a unique service account. It is an error if the old value is true and the new value is set to false or defaulted to false."
-                },
-                "updateMask": {
-                  "type": "string",
-                  "format": "google-fieldmask",
-                  "location": "query",
-                  "description": "Optional. Field mask that specifies the fields in sink that need an update. A sink field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.An empty updateMask is temporarily treated as using the following mask for backwards compatibility purposes: destination,filter,includeChildren At some point in the future, behavior will be removed and specifying an empty updateMask will be an error.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter."
-                }
-              },
-              "path": "v2/{+sinkName}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ]
-            },
-            "update": {
-              "request": {
-                "$ref": "LogSink"
-              },
-              "id": "logging.folders.sinks.update",
-              "parameters": {
-                "uniqueWriterIdentity": {
-                  "location": "query",
-                  "type": "boolean",
-                  "description": "Optional. See sinks.create for a description of this field. When updating a sink, the effect of this field on the value of writer_identity in the updated sink depends on both the old and new values of this field: If the old and new values of this field are both false or both true, then there is no change to the sink's writer_identity. If the old value is false and the new value is true, then writer_identity is changed to a unique service account. It is an error if the old value is true and the new value is set to false or defaulted to false."
-                },
-                "updateMask": {
-                  "description": "Optional. Field mask that specifies the fields in sink that need an update. A sink field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.An empty updateMask is temporarily treated as using the following mask for backwards compatibility purposes: destination,filter,includeChildren At some point in the future, behavior will be removed and specifying an empty updateMask will be an error.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
-                  "location": "query",
-                  "format": "google-fieldmask",
-                  "type": "string"
-                },
-                "sinkName": {
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "pattern": "^folders/[^/]+/sinks/[^/]+$",
-                  "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\"."
-                }
-              },
-              "response": {
-                "$ref": "LogSink"
-              },
-              "description": "Updates a sink. This method replaces the following fields in the existing sink with values from the new sink: destination, and filter.The updated sink might also have a new writer_identity; see the unique_writer_identity field.",
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "path": "v2/{+sinkName}",
-              "flatPath": "v2/folders/{foldersId}/sinks/{sinksId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "httpMethod": "PUT"
-            },
-            "list": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "path": "v2/{+parent}/sinks",
-              "parameters": {
-                "pageSize": {
-                  "format": "int32",
-                  "location": "query",
-                  "type": "integer",
-                  "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available."
-                },
-                "pageToken": {
-                  "location": "query",
-                  "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
-                  "type": "string"
-                },
-                "parent": {
-                  "location": "path",
-                  "type": "string",
-                  "description": "Required. The parent resource whose sinks are to be listed: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
-                  "pattern": "^folders/[^/]+$",
-                  "required": true
-                }
-              },
-              "response": {
-                "$ref": "ListSinksResponse"
-              },
-              "description": "Lists sinks.",
-              "parameterOrder": [
-                "parent"
-              ],
-              "flatPath": "v2/folders/{foldersId}/sinks",
-              "id": "logging.folders.sinks.list",
-              "httpMethod": "GET"
-            }
-          }
-        },
-        "exclusions": {
-          "methods": {
-            "list": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "parameterOrder": [
-                "parent"
-              ],
-              "path": "v2/{+parent}/exclusions",
-              "response": {
-                "$ref": "ListExclusionsResponse"
-              },
-              "parameters": {
-                "pageToken": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call."
-                },
-                "parent": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "description": "Required. The parent resource whose exclusions are to be listed. \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
-                  "pattern": "^folders/[^/]+$"
-                },
-                "pageSize": {
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query",
-                  "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available."
-                }
-              },
-              "id": "logging.folders.exclusions.list",
-              "flatPath": "v2/folders/{foldersId}/exclusions",
-              "httpMethod": "GET",
-              "description": "Lists all the exclusions in a parent resource."
-            },
-            "create": {
-              "request": {
-                "$ref": "LogExclusion"
-              },
-              "id": "logging.folders.exclusions.create",
-              "flatPath": "v2/folders/{foldersId}/exclusions",
-              "parameters": {
-                "parent": {
-                  "pattern": "^folders/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The parent resource in which to create the exclusion: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" Examples: \"projects/my-logging-project\", \"organizations/123456789\".",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "response": {
-                "$ref": "LogExclusion"
-              },
-              "path": "v2/{+parent}/exclusions",
-              "parameterOrder": [
-                "parent"
-              ],
-              "description": "Creates a new exclusion in a specified parent resource. Only log entries belonging to that resource can be excluded. You can have up to 10 exclusions in a resource.",
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ]
-            },
-            "get": {
-              "description": "Gets the description of an exclusion.",
-              "response": {
-                "$ref": "LogExclusion"
-              },
-              "parameters": {
-                "name": {
-                  "pattern": "^folders/[^/]+/exclusions/[^/]+$",
-                  "description": "Required. The resource name of an existing exclusion: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
-                  "required": true,
-                  "location": "path",
-                  "type": "string"
-                }
-              },
-              "id": "logging.folders.exclusions.get",
-              "parameterOrder": [
-                "name"
-              ],
-              "flatPath": "v2/folders/{foldersId}/exclusions/{exclusionsId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "httpMethod": "GET",
-              "path": "v2/{+name}"
-            },
-            "patch": {
-              "id": "logging.folders.exclusions.patch",
-              "httpMethod": "PATCH",
-              "description": "Changes one or more properties of an existing exclusion.",
-              "request": {
-                "$ref": "LogExclusion"
-              },
-              "response": {
-                "$ref": "LogExclusion"
-              },
-              "parameters": {
-                "name": {
-                  "description": "Required. The resource name of the exclusion to update: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
-                  "type": "string",
-                  "pattern": "^folders/[^/]+/exclusions/[^/]+$",
-                  "location": "path",
-                  "required": true
-                },
-                "updateMask": {
-                  "description": "Required. A non-empty list of fields to change in the existing exclusion. New values for the fields are taken from the corresponding fields in the LogExclusion included in this request. Fields not mentioned in update_mask are not changed and are ignored in the request.For example, to change the filter and description of an exclusion, specify an update_mask of \"filter,description\".",
-                  "type": "string",
-                  "location": "query",
-                  "format": "google-fieldmask"
-                }
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "flatPath": "v2/folders/{foldersId}/exclusions/{exclusionsId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "path": "v2/{+name}"
-            },
-            "delete": {
-              "path": "v2/{+name}",
-              "flatPath": "v2/folders/{foldersId}/exclusions/{exclusionsId}",
-              "parameterOrder": [
-                "name"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "httpMethod": "DELETE",
-              "parameters": {
-                "name": {
-                  "description": "Required. The resource name of an existing exclusion to delete: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
-                  "required": true,
-                  "pattern": "^folders/[^/]+/exclusions/[^/]+$",
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "id": "logging.folders.exclusions.delete",
-              "response": {
-                "$ref": "Empty"
-              },
-              "description": "Deletes an exclusion."
-            }
-          }
-        },
-        "locations": {
-          "methods": {
-            "list": {
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "response": {
-                "$ref": "ListLocationsResponse"
-              },
-              "path": "v2/{+name}/locations",
-              "id": "logging.folders.locations.list",
-              "description": "Lists information about the supported locations for this service.",
-              "parameters": {
-                "name": {
-                  "pattern": "^folders/[^/]+$",
-                  "description": "The resource that owns the locations collection, if applicable.",
-                  "type": "string",
-                  "required": true,
-                  "location": "path"
-                },
-                "pageSize": {
-                  "type": "integer",
-                  "description": "The standard list page size.",
-                  "format": "int32",
-                  "location": "query"
-                },
-                "filter": {
-                  "description": "The standard list filter.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "pageToken": {
-                  "description": "The standard list page token.",
-                  "location": "query",
-                  "type": "string"
-                }
-              },
-              "flatPath": "v2/folders/{foldersId}/locations"
-            },
-            "get": {
-              "parameterOrder": [
-                "name"
-              ],
-              "flatPath": "v2/folders/{foldersId}/locations/{locationsId}",
-              "httpMethod": "GET",
-              "parameters": {
-                "name": {
-                  "type": "string",
-                  "required": true,
-                  "description": "Resource name for the location.",
-                  "location": "path",
-                  "pattern": "^folders/[^/]+/locations/[^/]+$"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.read"
-              ],
-              "description": "Gets information about a location.",
-              "id": "logging.folders.locations.get",
-              "response": {
-                "$ref": "Location"
-              },
-              "path": "v2/{+name}"
-            }
-          },
-          "resources": {
-            "buckets": {
-              "resources": {
-                "views": {
-                  "methods": {
-                    "patch": {
-                      "response": {
-                        "$ref": "LogView"
-                      },
-                      "id": "logging.folders.locations.buckets.views.patch",
-                      "httpMethod": "PATCH",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/logging.admin"
-                      ],
-                      "request": {
-                        "$ref": "LogView"
-                      },
-                      "path": "v2/{+name}",
-                      "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "description": "Updates a view. This method replaces the following fields in the existing view with values from the new view: filter.",
-                      "parameters": {
-                        "updateMask": {
-                          "format": "google-fieldmask",
-                          "location": "query",
-                          "type": "string",
-                          "description": "Optional. Field mask that specifies the fields in view that need an update. A field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter."
-                        },
-                        "name": {
-                          "type": "string",
-                          "description": "Required. The full resource name of the view to update \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
-                          "required": true,
-                          "location": "path",
-                          "pattern": "^folders/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$"
-                        }
-                      }
-                    },
-                    "get": {
-                      "response": {
-                        "$ref": "LogView"
-                      },
-                      "httpMethod": "GET",
-                      "description": "Gets a view.",
-                      "id": "logging.folders.locations.buckets.views.get",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloud-platform.read-only",
-                        "https://www.googleapis.com/auth/logging.admin",
-                        "https://www.googleapis.com/auth/logging.read"
-                      ],
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
-                      "parameters": {
-                        "name": {
-                          "required": true,
-                          "pattern": "^folders/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
-                          "location": "path",
-                          "type": "string",
-                          "description": "Required. The resource name of the policy: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\"."
-                        }
-                      },
-                      "path": "v2/{+name}"
-                    },
-                    "list": {
-                      "response": {
-                        "$ref": "ListViewsResponse"
-                      },
-                      "parameters": {
-                        "pageSize": {
-                          "type": "integer",
-                          "location": "query",
-                          "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
-                          "format": "int32"
-                        },
-                        "pageToken": {
-                          "type": "string",
-                          "location": "query",
-                          "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call."
-                        },
-                        "parent": {
-                          "pattern": "^folders/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                          "type": "string",
-                          "location": "path",
-                          "description": "Required. The bucket whose views are to be listed: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" ",
-                          "required": true
-                        }
-                      },
-                      "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets/{bucketsId}/views",
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloud-platform.read-only",
-                        "https://www.googleapis.com/auth/logging.admin",
-                        "https://www.googleapis.com/auth/logging.read"
-                      ],
-                      "description": "Lists views on a bucket.",
-                      "id": "logging.folders.locations.buckets.views.list",
-                      "httpMethod": "GET",
-                      "path": "v2/{+parent}/views"
-                    },
-                    "create": {
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "description": "Creates a view over logs in a bucket. A bucket may contain a maximum of 50 views.",
-                      "request": {
-                        "$ref": "LogView"
-                      },
-                      "path": "v2/{+parent}/views",
-                      "id": "logging.folders.locations.buckets.views.create",
-                      "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets/{bucketsId}/views",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/logging.admin"
-                      ],
-                      "parameters": {
-                        "parent": {
-                          "required": true,
-                          "location": "path",
-                          "description": "Required. The bucket in which to create the view \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-logging-project/locations/my-location/buckets/my-bucket\"",
-                          "type": "string",
-                          "pattern": "^folders/[^/]+/locations/[^/]+/buckets/[^/]+$"
-                        },
-                        "viewId": {
-                          "type": "string",
-                          "location": "query",
-                          "description": "Required. The id to use for this view."
-                        }
-                      },
-                      "httpMethod": "POST",
-                      "response": {
-                        "$ref": "LogView"
-                      }
-                    },
-                    "delete": {
-                      "id": "logging.folders.locations.buckets.views.delete",
-                      "response": {
-                        "$ref": "Empty"
-                      },
-                      "parameters": {
-                        "name": {
-                          "type": "string",
-                          "required": true,
-                          "pattern": "^folders/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
-                          "location": "path",
-                          "description": "Required. The full resource name of the view to delete: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\"."
-                        }
-                      },
-                      "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
-                      "description": "Deletes a view from a bucket.",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/logging.admin"
-                      ],
-                      "httpMethod": "DELETE",
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "path": "v2/{+name}"
-                    }
-                  }
-                }
-              },
-              "methods": {
-                "get": {
-                  "id": "logging.folders.locations.buckets.get",
-                  "httpMethod": "GET",
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "pattern": "^folders/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                      "required": true,
-                      "location": "path",
-                      "description": "Required. The resource name of the bucket: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\"."
-                    }
-                  },
-                  "response": {
-                    "$ref": "LogBucket"
-                  },
-                  "path": "v2/{+name}",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only",
-                    "https://www.googleapis.com/auth/logging.admin",
-                    "https://www.googleapis.com/auth/logging.read"
-                  ],
-                  "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets/{bucketsId}",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "description": "Gets a bucket."
-                },
-                "patch": {
-                  "description": "Updates a bucket. This method replaces the following fields in the existing bucket with values from the new bucket: retention_periodIf the retention period is decreased and the bucket is locked, FAILED_PRECONDITION will be returned.If the bucket has a LifecycleState of DELETE_REQUESTED, FAILED_PRECONDITION will be returned.A buckets region may not be modified after it is created.",
-                  "request": {
-                    "$ref": "LogBucket"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/logging.admin"
-                  ],
-                  "response": {
-                    "$ref": "LogBucket"
-                  },
-                  "id": "logging.folders.locations.buckets.patch",
-                  "parameters": {
-                    "name": {
-                      "required": true,
-                      "location": "path",
-                      "description": "Required. The full resource name of the bucket to update. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\". Also requires permission \"resourcemanager.projects.updateLiens\" to set the locked property",
-                      "pattern": "^folders/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                      "type": "string"
-                    },
-                    "updateMask": {
-                      "location": "query",
-                      "format": "google-fieldmask",
-                      "description": "Required. Field mask that specifies the fields in bucket that need an update. A bucket field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=retention_days.",
-                      "type": "string"
-                    }
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "PATCH",
-                  "path": "v2/{+name}",
-                  "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets/{bucketsId}"
-                },
-                "delete": {
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets/{bucketsId}",
-                  "httpMethod": "DELETE",
-                  "description": "Deletes a bucket. Moves the bucket to the DELETE_REQUESTED state. After 7 days, the bucket will be purged and all logs in the bucket will be permanently deleted.",
-                  "id": "logging.folders.locations.buckets.delete",
-                  "parameters": {
-                    "name": {
-                      "description": "Required. The full resource name of the bucket to delete. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
-                      "pattern": "^folders/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                      "location": "path",
-                      "required": true,
-                      "type": "string"
-                    }
-                  },
-                  "path": "v2/{+name}",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/logging.admin"
-                  ],
-                  "response": {
-                    "$ref": "Empty"
-                  }
-                },
-                "list": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only",
-                    "https://www.googleapis.com/auth/logging.admin",
-                    "https://www.googleapis.com/auth/logging.read"
-                  ],
-                  "response": {
-                    "$ref": "ListBucketsResponse"
-                  },
-                  "id": "logging.folders.locations.buckets.list",
-                  "httpMethod": "GET",
-                  "description": "Lists buckets.",
-                  "parameters": {
-                    "pageSize": {
-                      "type": "integer",
-                      "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
-                      "location": "query",
-                      "format": "int32"
-                    },
-                    "pageToken": {
-                      "location": "query",
-                      "type": "string",
-                      "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call."
-                    },
-                    "parent": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "pattern": "^folders/[^/]+/locations/[^/]+$",
-                      "description": "Required. The parent resource whose buckets are to be listed: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]\" Note: The locations portion of the resource must be specified, but supplying the character - in place of LOCATION_ID will return all buckets."
-                    }
-                  },
-                  "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "path": "v2/{+parent}/buckets"
-                },
-                "undelete": {
-                  "request": {
-                    "$ref": "UndeleteBucketRequest"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/logging.admin"
-                  ],
-                  "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets/{bucketsId}:undelete",
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "pattern": "^folders/[^/]+/locations/[^/]+/buckets/[^/]+$",
-                      "description": "Required. The full resource name of the bucket to undelete. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
-                      "required": true,
-                      "location": "path"
-                    }
-                  },
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "path": "v2/{+name}:undelete",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "POST",
-                  "description": "Undeletes a bucket. A bucket that has been deleted may be undeleted within the grace period of 7 days.",
-                  "id": "logging.folders.locations.buckets.undelete"
-                },
-                "create": {
-                  "parameters": {
-                    "bucketId": {
-                      "location": "query",
-                      "type": "string",
-                      "description": "Required. A client-assigned identifier such as \"my-bucket\". Identifiers are limited to 100 characters and can include only letters, digits, underscores, hyphens, and periods."
-                    },
-                    "parent": {
-                      "pattern": "^folders/[^/]+/locations/[^/]+$",
-                      "required": true,
-                      "description": "Required. The resource in which to create the bucket: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]\" Example: \"projects/my-logging-project/locations/global\"",
-                      "location": "path",
-                      "type": "string"
-                    }
-                  },
-                  "id": "logging.folders.locations.buckets.create",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/logging.admin"
-                  ],
-                  "httpMethod": "POST",
-                  "path": "v2/{+parent}/buckets",
-                  "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets",
-                  "response": {
-                    "$ref": "LogBucket"
-                  },
-                  "request": {
-                    "$ref": "LogBucket"
-                  },
-                  "description": "Creates a bucket that can be used to store log entries. Once a bucket has been created, the region cannot be changed."
-                }
-              }
-            }
-          }
-        }
-      }
-    },
-    "logs": {
-      "methods": {
-        "delete": {
-          "description": "Deletes all the log entries in a log. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.",
-          "flatPath": "v2/{v2Id}/{v2Id1}/logs/{logsId}",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/logging.admin"
-          ],
-          "response": {
-            "$ref": "Empty"
-          },
-          "id": "logging.logs.delete",
-          "httpMethod": "DELETE",
-          "parameterOrder": [
-            "logName"
-          ],
-          "parameters": {
-            "logName": {
-              "required": true,
-              "type": "string",
-              "pattern": "^[^/]+/[^/]+/logs/[^/]+$",
-              "description": "Required. The resource name of the log to delete: \"projects/[PROJECT_ID]/logs/[LOG_ID]\" \"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\" \"folders/[FOLDER_ID]/logs/[LOG_ID]\" [LOG_ID] must be URL-encoded. For example, \"projects/my-project-id/logs/syslog\", \"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity\". For more information about log names, see LogEntry.",
-              "location": "path"
-            }
-          },
-          "path": "v2/{+logName}"
-        },
-        "list": {
-          "parameterOrder": [
-            "parent"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only",
-            "https://www.googleapis.com/auth/logging.admin",
-            "https://www.googleapis.com/auth/logging.read"
-          ],
-          "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.",
-          "flatPath": "v2/{v2Id}/{v2Id1}/logs",
-          "parameters": {
-            "parent": {
-              "required": true,
-              "description": "Required. The resource name that owns the logs: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
-              "pattern": "^[^/]+/[^/]+$",
-              "location": "path",
-              "type": "string"
-            },
-            "resourceNames": {
-              "type": "string",
-              "repeated": true,
-              "description": "Optional. The resource name that owns the logs: projects/PROJECT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID organization/ORGANIZATION_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID billingAccounts/BILLING_ACCOUNT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID folders/FOLDER_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_IDTo support legacy queries, it could also be: \"projects/PROJECT_ID\" \"organizations/ORGANIZATION_ID\" \"billingAccounts/BILLING_ACCOUNT_ID\" \"folders/FOLDER_ID\"",
-              "location": "query"
-            },
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call."
-            },
-            "pageSize": {
-              "location": "query",
-              "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
-              "type": "integer",
-              "format": "int32"
-            }
-          },
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "ListLogsResponse"
-          },
-          "id": "logging.logs.list",
-          "path": "v2/{+parent}/logs"
-        }
-      }
-    },
-    "v2": {
-      "methods": {
-        "getCmekSettings": {
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only",
-            "https://www.googleapis.com/auth/logging.admin",
-            "https://www.googleapis.com/auth/logging.read"
-          ],
-          "description": "Gets the Logs Router CMEK settings for the given resource.Note: CMEK for the Logs Router can currently only be configured for GCP organizations. Once configured, it applies to all projects and folders in the GCP organization.See Enabling CMEK for Logs Router (https://cloud.google.com/logging/docs/routing/managed-encryption) for more information.",
-          "response": {
-            "$ref": "CmekSettings"
-          },
-          "path": "v2/{+name}/cmekSettings",
-          "id": "logging.getCmekSettings",
-          "flatPath": "v2/{v2Id}/{v2Id1}/cmekSettings",
-          "parameterOrder": [
-            "name"
-          ],
-          "httpMethod": "GET",
-          "parameters": {
-            "name": {
-              "type": "string",
-              "pattern": "^[^/]+/[^/]+$",
-              "location": "path",
-              "description": "Required. The resource for which to retrieve CMEK settings. \"projects/[PROJECT_ID]/cmekSettings\" \"organizations/[ORGANIZATION_ID]/cmekSettings\" \"billingAccounts/[BILLING_ACCOUNT_ID]/cmekSettings\" \"folders/[FOLDER_ID]/cmekSettings\" Example: \"organizations/12345/cmekSettings\".Note: CMEK for the Logs Router can currently only be configured for GCP organizations. Once configured, it applies to all projects and folders in the GCP organization.",
-              "required": true
-            }
-          }
-        },
-        "updateCmekSettings": {
-          "request": {
-            "$ref": "CmekSettings"
-          },
-          "flatPath": "v2/{v2Id}/{v2Id1}/cmekSettings",
-          "path": "v2/{+name}/cmekSettings",
-          "response": {
-            "$ref": "CmekSettings"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/logging.admin"
-          ],
-          "parameters": {
-            "updateMask": {
-              "type": "string",
-              "description": "Optional. Field mask identifying which fields from cmek_settings should be updated. A field will be overwritten if and only if it is in the update mask. Output only fields cannot be updated.See FieldMask for more information.Example: \"updateMask=kmsKeyName\"",
-              "format": "google-fieldmask",
-              "location": "query"
-            },
-            "name": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "Required. The resource name for the CMEK settings to update. \"projects/[PROJECT_ID]/cmekSettings\" \"organizations/[ORGANIZATION_ID]/cmekSettings\" \"billingAccounts/[BILLING_ACCOUNT_ID]/cmekSettings\" \"folders/[FOLDER_ID]/cmekSettings\" Example: \"organizations/12345/cmekSettings\".Note: CMEK for the Logs Router can currently only be configured for GCP organizations. Once configured, it applies to all projects and folders in the GCP organization.",
-              "pattern": "^[^/]+/[^/]+$"
-            }
-          },
-          "description": "Updates the Logs Router CMEK settings for the given resource.Note: CMEK for the Logs Router can currently only be configured for GCP organizations. Once configured, it applies to all projects and folders in the GCP organization.UpdateCmekSettings will fail if 1) kms_key_name is invalid, or 2) the associated service account does not have the required roles/cloudkms.cryptoKeyEncrypterDecrypter role assigned for the key, or 3) access to the key is disabled.See Enabling CMEK for Logs Router (https://cloud.google.com/logging/docs/routing/managed-encryption) for more information.",
-          "id": "logging.updateCmekSettings",
-          "parameterOrder": [
-            "name"
-          ],
-          "httpMethod": "PATCH"
-        }
-      }
-    }
-  },
-  "servicePath": "",
-  "ownerName": "Google",
-  "revision": "20201114",
-  "canonicalName": "Logging",
-  "protocol": "rest",
-  "ownerDomain": "google.com",
-  "version_module": true,
-  "description": "Writes log entries and manages your Cloud Logging configuration. The table entries below are presented in alphabetical order, not in order of common use. For explanations of the concepts found in the table entries, read the documentation at https://cloud.google.com/logging/docs.",
-  "title": "Cloud Logging API",
-  "kind": "discovery#restDescription",
-  "parameters": {
-    "access_token": {
-      "description": "OAuth access token.",
-      "location": "query",
-      "type": "string"
-    },
-    "alt": {
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "default": "json",
-      "type": "string",
-      "description": "Data format for response.",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "location": "query"
-    },
-    "fields": {
-      "type": "string",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "location": "query"
-    },
-    "uploadType": {
-      "type": "string",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "location": "query"
-    },
-    "$.xgafv": {
-      "description": "V1 error format.",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "type": "string",
-      "location": "query"
-    },
-    "quotaUser": {
-      "type": "string",
-      "location": "query",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters."
-    },
-    "prettyPrint": {
-      "default": "true",
-      "description": "Returns response with indentations and line breaks.",
-      "location": "query",
-      "type": "boolean"
-    },
-    "oauth_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user."
-    },
-    "key": {
-      "type": "string",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "location": "query"
-    },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "type": "string"
-    }
-  },
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/logging.admin": {
-          "description": "Administrate log data for your projects"
-        },
-        "https://www.googleapis.com/auth/cloud-platform.read-only": {
-          "description": "View your data across Google Cloud Platform services"
-        },
-        "https://www.googleapis.com/auth/logging.read": {
-          "description": "View log data for your projects"
-        },
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        },
-        "https://www.googleapis.com/auth/logging.write": {
-          "description": "Submit log data for your projects"
-        }
-      }
-    }
-  },
-  "id": "logging:v2",
-  "discoveryVersion": "v1",
-  "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
-  },
-  "fullyEncodeReservedExpansion": true,
-  "version": "v2",
-  "rootUrl": "https://logging.googleapis.com/",
-  "schemas": {
-    "MetricDescriptor": {
-      "description": "Defines a metric type and its schema. Once a metric descriptor is created, deleting or altering it stops data collection and makes the metric type's existing data unusable.",
-      "type": "object",
-      "id": "MetricDescriptor",
-      "properties": {
-        "launchStage": {
-          "enum": [
-            "LAUNCH_STAGE_UNSPECIFIED",
-            "UNIMPLEMENTED",
-            "PRELAUNCH",
-            "EARLY_ACCESS",
-            "ALPHA",
-            "BETA",
-            "GA",
-            "DEPRECATED"
-          ],
-          "description": "Optional. The launch stage of the metric definition.",
-          "type": "string",
-          "enumDescriptions": [
-            "Do not use this default value.",
-            "The feature is not yet implemented. Users can not use it.",
-            "Prelaunch features are hidden from users and are only visible internally.",
-            "Early Access features are limited to a closed group of testers. To use these features, you must sign up in advance and sign a Trusted Tester agreement (which includes confidentiality provisions). These features may be unstable, changed in backward-incompatible ways, and are not guaranteed to be released.",
-            "Alpha is a limited availability test for releases before they are cleared for widespread use. By Alpha, all significant design issues are resolved and we are in the process of verifying functionality. Alpha customers need to apply for access, agree to applicable terms, and have their projects allowlisted. Alpha releases don’t have to be feature complete, no SLAs are provided, and there are no technical support obligations, but they will be far enough along that customers can actually use them in test environments or for limited-use tests -- just like they would in normal production cases.",
-            "Beta is the point at which we are ready to open a release for any customer to use. There are no SLA or technical support obligations in a Beta release. Products will be complete from a feature perspective, but may have some open outstanding issues. Beta releases are suitable for limited production use cases.",
-            "GA features are open to all developers and are considered stable and fully qualified for production use.",
-            "Deprecated features are scheduled to be shut down and removed. For more information, see the “Deprecation Policy” section of our Terms of Service (https://cloud.google.com/terms/) and the Google Cloud Platform Subject to the Deprecation Policy (https://cloud.google.com/terms/deprecation) documentation."
-          ]
-        },
-        "metadata": {
-          "description": "Optional. Metadata which can be used to guide usage of the metric.",
-          "$ref": "MetricDescriptorMetadata"
-        },
-        "unit": {
-          "type": "string",
-          "description": "The units in which the metric value is reported. It is only applicable if the value_type is INT64, DOUBLE, or DISTRIBUTION. The unit defines the representation of the stored metric values.Different systems may scale the values to be more easily displayed (so a value of 0.02KBy might be displayed as 20By, and a value of 3523KBy might be displayed as 3.5MBy). However, if the unit is KBy, then the value of the metric is always in thousands of bytes, no matter how it may be displayed..If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an INT64 CUMULATIVE metric whose unit is s{CPU} (or equivalently 1s{CPU} or just s). If the job uses 12,005 CPU-seconds, then the value is written as 12005.Alternatively, if you want a custom metric to record data in a more granular way, you can create a DOUBLE CUMULATIVE metric whose unit is ks{CPU}, and then write the value 12.005 (which is 12005/1000), or use Kis{CPU} and write 11.723 (which is 12005/1024).The supported units are a subset of The Unified Code for Units of Measure (http://unitsofmeasure.org/ucum.html) standard:Basic units (UNIT) bit bit By byte s second min minute h hour d day 1 dimensionlessPrefixes (PREFIX) k kilo (10^3) M mega (10^6) G giga (10^9) T tera (10^12) P peta (10^15) E exa (10^18) Z zetta (10^21) Y yotta (10^24) m milli (10^-3) u micro (10^-6) n nano (10^-9) p pico (10^-12) f femto (10^-15) a atto (10^-18) z zepto (10^-21) y yocto (10^-24) Ki kibi (2^10) Mi mebi (2^20) Gi gibi (2^30) Ti tebi (2^40) Pi pebi (2^50)GrammarThe grammar also includes these connectors: / division or ratio (as an infix operator). For examples, kBy/{email} or MiBy/10ms (although you should almost never have /s in a metric unit; rates should always be computed at query time from the underlying cumulative or delta value). . multiplication or composition (as an infix operator). For examples, GBy.d or k{watt}.h.The grammar for a unit is as follows: Expression = Component { \".\" Component } { \"/\" Component } ; Component = ( [ PREFIX ] UNIT | \"%\" ) [ Annotation ] | Annotation | \"1\" ; Annotation = \"{\" NAME \"}\" ; Notes: Annotation is just a comment if it follows a UNIT. If the annotation is used alone, then the unit is equivalent to 1. For examples, {request}/s == 1/s, By{transmitted}/s == By/s. NAME is a sequence of non-blank printable ASCII characters not containing { or }. 1 represents a unitary dimensionless unit (https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in 1/s. It is typically used when none of the basic units are appropriate. For example, \"new users per day\" can be represented as 1/d or {new-users}/d (and a metric value 5 would mean \"5 new users). Alternatively, \"thousands of page views per day\" would be represented as 1000/d or k1/d or k{page_views}/d (and a metric value of 5.3 would mean \"5300 page views per day\"). % represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value 3 means \"3 percent\"). 10^2.% indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value 0.03 means \"3 percent\")."
-        },
-        "displayName": {
-          "description": "A concise name for the metric, which can be displayed in user interfaces. Use sentence case without an ending period, for example \"Request count\". This field is optional but it is recommended to be set for any metrics associated with user-visible concepts, such as Quota.",
-          "type": "string"
-        },
-        "metricKind": {
-          "enumDescriptions": [
-            "Do not use this default value.",
-            "An instantaneous measurement of a value.",
-            "The change in a value during a time interval.",
-            "A value accumulated over a time interval. Cumulative measurements in a time series should have the same start time and increasing end times, until an event resets the cumulative value to zero and sets a new start time for the following points."
-          ],
-          "type": "string",
-          "description": "Whether the metric records instantaneous values, changes to a value, etc. Some combinations of metric_kind and value_type might not be supported.",
-          "enum": [
-            "METRIC_KIND_UNSPECIFIED",
-            "GAUGE",
-            "DELTA",
-            "CUMULATIVE"
-          ]
-        },
-        "type": {
-          "description": "The metric type, including its DNS name prefix. The type is not URL-encoded. All user-defined metric types have the DNS name custom.googleapis.com or external.googleapis.com. Metric types should use a natural hierarchical grouping. For example: \"custom.googleapis.com/invoice/paid/amount\" \"external.googleapis.com/prometheus/up\" \"appengine.googleapis.com/http/server/response_latencies\" ",
-          "type": "string"
-        },
-        "labels": {
-          "items": {
-            "$ref": "LabelDescriptor"
-          },
-          "description": "The set of labels that can be used to describe a specific instance of this metric type. For example, the appengine.googleapis.com/http/server/response_latencies metric type has a label for the HTTP response code, response_code, so you can look at latencies for successful responses or just for responses that failed.",
-          "type": "array"
-        },
-        "valueType": {
-          "description": "Whether the measurement is an integer, a floating-point number, etc. Some combinations of metric_kind and value_type might not be supported.",
-          "enum": [
-            "VALUE_TYPE_UNSPECIFIED",
-            "BOOL",
-            "INT64",
-            "DOUBLE",
-            "STRING",
-            "DISTRIBUTION",
-            "MONEY"
-          ],
-          "enumDescriptions": [
-            "Do not use this default value.",
-            "The value is a boolean. This value type can be used only if the metric kind is GAUGE.",
-            "The value is a signed 64-bit integer.",
-            "The value is a double precision floating point number.",
-            "The value is a text string. This value type can be used only if the metric kind is GAUGE.",
-            "The value is a Distribution.",
-            "The value is money."
-          ],
-          "type": "string"
-        },
-        "description": {
-          "type": "string",
-          "description": "A detailed description of the metric, which can be used in documentation."
-        },
-        "monitoredResourceTypes": {
-          "type": "array",
-          "items": {
+    "id": "logging:v2",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://logging.mtls.googleapis.com/",
+    "name": "logging",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
             "type": "string"
-          },
-          "description": "Read-only. If present, then a time series, which is identified partially by a metric type and a MonitoredResourceDescriptor, that is associated with this metric type can only be associated with one of the monitored resource types listed here."
         },
-        "name": {
-          "type": "string",
-          "description": "The resource name of the metric descriptor."
-        }
-      }
-    },
-    "ListLogMetricsResponse": {
-      "description": "Result returned from ListLogMetrics.",
-      "id": "ListLogMetricsResponse",
-      "properties": {
-        "metrics": {
-          "items": {
-            "$ref": "LogMetric"
-          },
-          "description": "A list of logs-based metrics.",
-          "type": "array"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "If there might be more results than appear in this response, then nextPageToken is included. To get the next set of results, call this method again using the value of nextPageToken as pageToken."
-        }
-      },
-      "type": "object"
-    },
-    "LogLine": {
-      "type": "object",
-      "description": "Application log line emitted while processing a request.",
-      "id": "LogLine",
-      "properties": {
-        "logMessage": {
-          "type": "string",
-          "description": "App-provided log message."
-        },
-        "sourceLocation": {
-          "$ref": "SourceLocation",
-          "description": "Where in the source code this log message was written."
-        },
-        "time": {
-          "type": "string",
-          "description": "Approximate time when this log entry was made.",
-          "format": "google-datetime"
-        },
-        "severity": {
-          "description": "Severity of this log entry.",
-          "enum": [
-            "DEFAULT",
-            "DEBUG",
-            "INFO",
-            "NOTICE",
-            "WARNING",
-            "ERROR",
-            "CRITICAL",
-            "ALERT",
-            "EMERGENCY"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "(0) The log entry has no assigned severity level.",
-            "(100) Debug or trace information.",
-            "(200) Routine information, such as ongoing status or performance.",
-            "(300) Normal but significant events, such as start up, shut down, or a configuration change.",
-            "(400) Warning events might cause problems.",
-            "(500) Error events are likely to cause problems.",
-            "(600) Critical events cause more severe problems or outages.",
-            "(700) A person must take an action immediately.",
-            "(800) One or more systems are unusable."
-          ]
-        }
-      }
-    },
-    "Linear": {
-      "description": "Specifies a linear sequence of buckets that all have the same width (except overflow and underflow). Each bucket represents a constant absolute uncertainty on the specific value in the bucket.There are num_finite_buckets + 2 (= N) buckets. Bucket i has the following boundaries:Upper bound (0 \u003c= i \u003c N-1): offset + (width * i). Lower bound (1 \u003c= i \u003c N): offset + (width * (i - 1)).",
-      "type": "object",
-      "properties": {
-        "offset": {
-          "format": "double",
-          "description": "Lower bound of the first bucket.",
-          "type": "number"
-        },
-        "width": {
-          "description": "Must be greater than 0.",
-          "format": "double",
-          "type": "number"
-        },
-        "numFiniteBuckets": {
-          "description": "Must be greater than 0.",
-          "type": "integer",
-          "format": "int32"
-        }
-      },
-      "id": "Linear"
-    },
-    "LogEntry": {
-      "description": "An individual entry in a log.",
-      "type": "object",
-      "id": "LogEntry",
-      "properties": {
-        "spanId": {
-          "type": "string",
-          "description": "Optional. The span ID within the trace associated with the log entry.For Trace spans, this is the same format that the Trace API v2 uses: a 16-character hexadecimal encoding of an 8-byte array, such as 000000000000004a."
-        },
-        "trace": {
-          "type": "string",
-          "description": "Optional. Resource name of the trace associated with the log entry, if any. If it contains a relative resource name, the name is assumed to be relative to //tracing.googleapis.com. Example: projects/my-projectid/traces/06796866738c859f2f19b7cfb3214824"
-        },
-        "insertId": {
-          "description": "Optional. A unique identifier for the log entry. If you provide a value, then Logging considers other log entries in the same project, with the same timestamp, and with the same insert_id to be duplicates which are removed in a single query result. However, there are no guarantees of de-duplication in the export of logs.If the insert_id is omitted when writing a log entry, the Logging API assigns its own unique identifier in this field.In queries, the insert_id is also used to order log entries that have the same log_name and timestamp values.",
-          "type": "string"
-        },
-        "httpRequest": {
-          "$ref": "HttpRequest",
-          "description": "Optional. Information about the HTTP request associated with this log entry, if applicable."
-        },
-        "sourceLocation": {
-          "$ref": "LogEntrySourceLocation",
-          "description": "Optional. Source code location information associated with the log entry, if any."
-        },
-        "protoPayload": {
-          "description": "The log entry payload, represented as a protocol buffer. Some Google Cloud Platform services use this field for their log entry payloads.The following protocol buffer types are supported; user-defined types are not supported:\"type.googleapis.com/google.cloud.audit.AuditLog\" \"type.googleapis.com/google.appengine.logging.v1.RequestLog\"",
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "type": "object"
-        },
-        "timestamp": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "Optional. The time the event described by the log entry occurred. This time is used to compute the log entry's age and to enforce the logs retention period. If this field is omitted in a new log entry, then Logging assigns it the current time. Timestamps have nanosecond accuracy, but trailing zeros in the fractional seconds might be omitted when the timestamp is displayed.Incoming log entries must have timestamps that don't exceed the logs retention period (https://cloud.google.com/logging/quotas#logs_retention_periods) in the past, and that don't exceed 24 hours in the future. Log entries outside those time boundaries aren't ingested by Logging."
-        },
-        "resource": {
-          "description": "Required. The monitored resource that produced this log entry.Example: a log entry that reports a database error would be associated with the monitored resource designating the particular database that reported the error.",
-          "$ref": "MonitoredResource"
-        },
-        "labels": {
-          "additionalProperties": {
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
             "type": "string"
-          },
-          "type": "object",
-          "description": "Optional. A set of user-defined (key, value) data that provides additional information about the log entry."
         },
-        "traceSampled": {
-          "type": "boolean",
-          "description": "Optional. The sampling decision of the trace associated with the log entry.True means that the trace resource name in the trace field was sampled for storage in a trace backend. False means that the trace was not sampled for storage when this log entry was written, or the sampling decision was unknown at the time. A non-sampled trace value is still useful as a request correlation identifier. The default is False."
-        },
-        "receiveTimestamp": {
-          "readOnly": true,
-          "description": "Output only. The time the log entry was received by Logging.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "textPayload": {
-          "type": "string",
-          "description": "The log entry payload, represented as a Unicode string (UTF-8)."
-        },
-        "metadata": {
-          "$ref": "MonitoredResourceMetadata",
-          "description": "Output only. Deprecated. Additional metadata about the monitored resource.Only k8s_container, k8s_pod, and k8s_node MonitoredResources have this field populated for GKE versions older than 1.12.6. For GKE versions 1.12.6 and above, the metadata field has been deprecated. The Kubernetes pod labels that used to be in metadata.userLabels will now be present in the labels field with a key prefix of k8s-pod/. The system labels that were present in the metadata.systemLabels field will no longer be available in the LogEntry.",
-          "readOnly": true
-        },
-        "logName": {
-          "type": "string",
-          "description": "Required. The resource name of the log to which this log entry belongs: \"projects/[PROJECT_ID]/logs/[LOG_ID]\" \"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\" \"folders/[FOLDER_ID]/logs/[LOG_ID]\" A project number may be used in place of PROJECT_ID. The project number is translated to its corresponding PROJECT_ID internally and the log_name field will contain PROJECT_ID in queries and exports.[LOG_ID] must be URL-encoded within log_name. Example: \"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity\". [LOG_ID] must be less than 512 characters long and can only include the following characters: upper and lower case alphanumeric characters, forward-slash, underscore, hyphen, and period.For backward compatibility, if log_name begins with a forward-slash, such as /projects/..., then the log entry is ingested as usual but the forward-slash is removed. Listing the log entry will not show the leading slash and filtering for a log name with a leading slash will never return any results."
-        },
-        "jsonPayload": {
-          "type": "object",
-          "description": "The log entry payload, represented as a structure that is expressed as a JSON object.",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object."
-          }
-        },
-        "operation": {
-          "$ref": "LogEntryOperation",
-          "description": "Optional. Information about an operation associated with the log entry, if applicable."
-        },
-        "severity": {
-          "enum": [
-            "DEFAULT",
-            "DEBUG",
-            "INFO",
-            "NOTICE",
-            "WARNING",
-            "ERROR",
-            "CRITICAL",
-            "ALERT",
-            "EMERGENCY"
-          ],
-          "description": "Optional. The severity of the log entry. The default value is LogSeverity.DEFAULT.",
-          "type": "string",
-          "enumDescriptions": [
-            "(0) The log entry has no assigned severity level.",
-            "(100) Debug or trace information.",
-            "(200) Routine information, such as ongoing status or performance.",
-            "(300) Normal but significant events, such as start up, shut down, or a configuration change.",
-            "(400) Warning events might cause problems.",
-            "(500) Error events are likely to cause problems.",
-            "(600) Critical events cause more severe problems or outages.",
-            "(700) A person must take an action immediately.",
-            "(800) One or more systems are unusable."
-          ]
-        }
-      }
-    },
-    "TailLogEntriesRequest": {
-      "id": "TailLogEntriesRequest",
-      "description": "The parameters to TailLogEntries.",
-      "properties": {
-        "resourceNames": {
-          "description": "Required. Name of a parent resource from which to retrieve log entries: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" May alternatively be one or more views: \"projects/PROJECT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID\" \"organization/ORGANIZATION_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID\" \"billingAccounts/BILLING_ACCOUNT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID\" \"folders/FOLDER_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID\"",
-          "items": {
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
             "type": "string"
-          },
-          "type": "array"
         },
-        "bufferWindow": {
-          "description": "Optional. The amount of time to buffer log entries at the server before being returned to prevent out of order results due to late arriving log entries. Valid values are between 0-60000 milliseconds. Defaults to 2000 milliseconds.",
-          "type": "string",
-          "format": "google-duration"
-        },
-        "filter": {
-          "description": "Optional. A filter that chooses which log entries to return. See Advanced Logs Filters (https://cloud.google.com/logging/docs/view/advanced_filters). Only log entries that match the filter are returned. An empty filter matches all log entries in the resources listed in resource_names. Referencing a parent resource that is not in resource_names will cause the filter to return no results. The maximum length of the filter is 20000 characters.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "LogSink": {
-      "type": "object",
-      "id": "LogSink",
-      "description": "Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, or a Cloud Pub/Sub topic. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.",
-      "properties": {
-        "exclusions": {
-          "description": "Optional. Log entries that match any of the exclusion filters will not be exported. If a log entry is matched by both filter and one of exclusion_filters it will not be exported.",
-          "items": {
-            "$ref": "LogExclusion"
-          },
-          "type": "array"
-        },
-        "bigqueryOptions": {
-          "$ref": "BigQueryOptions",
-          "description": "Optional. Options that affect sinks exporting data to BigQuery."
-        },
-        "destination": {
-          "type": "string",
-          "description": "Required. The export destination: \"storage.googleapis.com/[GCS_BUCKET]\" \"bigquery.googleapis.com/projects/[PROJECT_ID]/datasets/[DATASET]\" \"pubsub.googleapis.com/projects/[PROJECT_ID]/topics/[TOPIC_ID]\" The sink's writer_identity, set when the sink is created, must have permission to write to the destination or else the log entries are not exported. For more information, see Exporting Logs with Sinks (https://cloud.google.com/logging/docs/api/tasks/exporting-logs)."
-        },
-        "writerIdentity": {
-          "type": "string",
-          "description": "Output only. An IAM identity—a service account or group—under which Logging writes the exported log entries to the sink's destination. This field is set by sinks.create and sinks.update based on the value of unique_writer_identity in those methods.Until you grant this identity write-access to the destination, log entry exports from this sink will fail. For more information, see Granting Access for a Resource (https://cloud.google.com/iam/docs/granting-roles-to-service-accounts#granting_access_to_a_service_account_for_a_resource). Consult the destination service's documentation to determine the appropriate IAM roles to assign to the identity.",
-          "readOnly": true
-        },
-        "outputVersionFormat": {
-          "description": "Deprecated. This field is unused.",
-          "type": "string",
-          "enumDescriptions": [
-            "An unspecified format version that will default to V2.",
-            "LogEntry version 2 format.",
-            "LogEntry version 1 format."
-          ],
-          "enum": [
-            "VERSION_FORMAT_UNSPECIFIED",
-            "V2",
-            "V1"
-          ]
-        },
-        "description": {
-          "type": "string",
-          "description": "Optional. A description of this sink. The maximum length of the description is 8000 characters."
-        },
-        "updateTime": {
-          "readOnly": true,
-          "description": "Output only. The last update timestamp of the sink.This field may not be present for older sinks.",
-          "type": "string",
-          "format": "google-datetime"
-        },
-        "createTime": {
-          "description": "Output only. The creation timestamp of the sink.This field may not be present for older sinks.",
-          "type": "string",
-          "readOnly": true,
-          "format": "google-datetime"
-        },
-        "includeChildren": {
-          "type": "boolean",
-          "description": "Optional. This field applies only to sinks owned by organizations and folders. If the field is false, the default, only the logs owned by the sink's parent resource are available for export. If the field is true, then logs from all the projects, folders, and billing accounts contained in the sink's parent resource are also available for export. Whether a particular log entry from the children is exported depends on the sink's filter expression. For example, if this field is true, then the filter resource.type=gce_instance would export all Compute Engine VM instance log entries from all projects in the sink's parent. To only export entries from certain child projects, filter on the project part of the log name: logName:(\"projects/test-project1/\" OR \"projects/test-project2/\") AND resource.type=gce_instance "
-        },
-        "disabled": {
-          "description": "Optional. If set to True, then this sink is disabled and it does not export any log entries.",
-          "type": "boolean"
-        },
-        "filter": {
-          "description": "Optional. An advanced logs filter (https://cloud.google.com/logging/docs/view/advanced-queries). The only exported log entries are those that are in the resource owning the sink and that match the filter. For example: logName=\"projects/[PROJECT_ID]/logs/[LOG_ID]\" AND severity\u003e=ERROR ",
-          "type": "string"
-        },
-        "name": {
-          "description": "Required. The client-assigned sink identifier, unique within the project. Example: \"my-syslog-errors-to-pubsub\". Sink identifiers are limited to 100 characters and can include only the following characters: upper and lower-case alphanumeric characters, underscores, hyphens, and periods. First character has to be alphanumeric.",
-          "type": "string"
-        }
-      }
-    },
-    "CmekSettings": {
-      "type": "object",
-      "id": "CmekSettings",
-      "description": "Describes the customer-managed encryption key (CMEK) settings associated with a project, folder, organization, billing account, or flexible resource.Note: CMEK for the Logs Router can currently only be configured for GCP organizations. Once configured, it applies to all projects and folders in the GCP organization.See Enabling CMEK for Logs Router (https://cloud.google.com/logging/docs/routing/managed-encryption) for more information.",
-      "properties": {
-        "kmsKeyName": {
-          "description": "The resource name for the configured Cloud KMS key.KMS key name format: \"projects/PROJECT_ID/locations/LOCATION/keyRings/KEYRING/cryptoKeys/KEY\"For example: \"projects/my-project-id/locations/my-region/keyRings/key-ring-name/cryptoKeys/key-name\"To enable CMEK for the Logs Router, set this field to a valid kms_key_name for which the associated service account has the required roles/cloudkms.cryptoKeyEncrypterDecrypter role assigned for the key.The Cloud KMS key used by the Log Router can be updated by changing the kms_key_name to a new valid key name. Encryption operations that are in progress will be completed with the key that was in use when they started. Decryption operations will be completed using the key that was used at the time of encryption unless access to that key has been revoked.To disable CMEK for the Logs Router, set this field to an empty string.See Enabling CMEK for Logs Router (https://cloud.google.com/logging/docs/routing/managed-encryption) for more information.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Output only. The resource name of the CMEK settings.",
-          "type": "string",
-          "readOnly": true
-        },
-        "serviceAccountId": {
-          "readOnly": true,
-          "type": "string",
-          "description": "Output only. The service account that will be used by the Logs Router to access your Cloud KMS key.Before enabling CMEK for Logs Router, you must first assign the role roles/cloudkms.cryptoKeyEncrypterDecrypter to the service account that the Logs Router will use to access your Cloud KMS key. Use GetCmekSettings to obtain the service account ID.See Enabling CMEK for Logs Router (https://cloud.google.com/logging/docs/routing/managed-encryption) for more information."
-        }
-      }
-    },
-    "ListLogsResponse": {
-      "id": "ListLogsResponse",
-      "description": "Result returned from ListLogs.",
-      "properties": {
-        "logNames": {
-          "items": {
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
             "type": "string"
-          },
-          "description": "A list of log names. For example, \"projects/my-project/logs/syslog\" or \"organizations/123/logs/cloudresourcemanager.googleapis.com%2Factivity\".",
-          "type": "array"
         },
-        "nextPageToken": {
-          "description": "If there might be more results than those appearing in this response, then nextPageToken is included. To get the next set of results, call this method again using the value of nextPageToken as pageToken.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "SuppressionInfo": {
-      "description": "Information about entries that were omitted from the session.",
-      "type": "object",
-      "properties": {
-        "reason": {
-          "description": "The reason that entries were omitted from the session.",
-          "enum": [
-            "REASON_UNSPECIFIED",
-            "RATE_LIMIT",
-            "NOT_CONSUMED"
-          ],
-          "enumDescriptions": [
-            "Unexpected default.",
-            "Indicates suppression occurred due to relevant entries being received in excess of rate limits. For quotas and limits, see Logging API quotas and limits (https://cloud.google.com/logging/quotas#api-limits).",
-            "Indicates suppression occurred due to the client not consuming responses quickly enough."
-          ],
-          "type": "string"
-        },
-        "suppressedCount": {
-          "description": "A lower bound on the count of entries omitted due to reason.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "SuppressionInfo"
-    },
-    "Location": {
-      "description": "A resource that represents Google Cloud Platform location.",
-      "id": "Location",
-      "type": "object",
-      "properties": {
-        "metadata": {
-          "type": "object",
-          "description": "Service-specific metadata. For example the available capacity at the given location.",
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          }
-        },
-        "name": {
-          "type": "string",
-          "description": "Resource name for the location, which may vary between implementations. For example: \"projects/example-project/locations/us-east1\""
-        },
-        "labels": {
-          "type": "object",
-          "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"} ",
-          "additionalProperties": {
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
             "type": "string"
-          }
-        },
-        "displayName": {
-          "type": "string",
-          "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\"."
-        },
-        "locationId": {
-          "type": "string",
-          "description": "The canonical id for this location. For example: \"us-east1\"."
-        }
-      }
-    },
-    "RequestLog": {
-      "type": "object",
-      "properties": {
-        "pendingTime": {
-          "description": "Time this request spent in the pending request queue.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "traceSampled": {
-          "description": "If true, the value in the 'trace_id' field was sampled for storage in a trace backend.",
-          "type": "boolean"
-        },
-        "finished": {
-          "description": "Whether this request is finished or active.",
-          "type": "boolean"
-        },
-        "urlMapEntry": {
-          "description": "File or class that handled the request.",
-          "type": "string"
-        },
-        "line": {
-          "items": {
-            "$ref": "LogLine"
-          },
-          "description": "A list of log lines emitted by the application while serving this request.",
-          "type": "array"
-        },
-        "appEngineRelease": {
-          "type": "string",
-          "description": "App Engine release version."
-        },
-        "instanceIndex": {
-          "format": "int32",
-          "type": "integer",
-          "description": "If the instance processing this request belongs to a manually scaled module, then this is the 0-based index of the instance. Otherwise, this value is -1."
-        },
-        "ip": {
-          "description": "Origin IP address.",
-          "type": "string"
-        },
-        "sourceReference": {
-          "description": "Source code for the application that handled this request. There can be more than one source reference per deployed application if source code is distributed among multiple repositories.",
-          "type": "array",
-          "items": {
-            "$ref": "SourceReference"
-          }
-        },
-        "appId": {
-          "type": "string",
-          "description": "Application that handled this request."
-        },
-        "cost": {
-          "format": "double",
-          "description": "An indication of the relative cost of serving this request.",
-          "type": "number"
-        },
-        "taskName": {
-          "description": "Task name of the request, in the case of an offline request.",
-          "type": "string"
-        },
-        "moduleId": {
-          "type": "string",
-          "description": "Module of the application that handled this request."
-        },
-        "startTime": {
-          "description": "Time when the request started.",
-          "type": "string",
-          "format": "google-datetime"
-        },
-        "instanceId": {
-          "description": "An identifier for the instance that handled the request.",
-          "type": "string"
-        },
-        "status": {
-          "format": "int32",
-          "type": "integer",
-          "description": "HTTP response status code. Example: 200, 404."
-        },
-        "endTime": {
-          "description": "Time when the request finished.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "wasLoadingRequest": {
-          "type": "boolean",
-          "description": "Whether this was a loading request for the instance."
-        },
-        "first": {
-          "type": "boolean",
-          "description": "Whether this is the first RequestLog entry for this request. If an active request has several RequestLog entries written to Stackdriver Logging, then this field will be set for one of them."
-        },
-        "method": {
-          "type": "string",
-          "description": "Request method. Example: \"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\"."
-        },
-        "taskQueueName": {
-          "type": "string",
-          "description": "Queue name of the request, in the case of an offline request."
-        },
-        "megaCycles": {
-          "format": "int64",
-          "description": "Number of CPU megacycles used to process request.",
-          "type": "string"
-        },
-        "requestId": {
-          "description": "Globally unique identifier for a request, which is based on the request start time. Request IDs for requests which started later will compare greater as strings than those for requests which started earlier.",
-          "type": "string"
-        },
-        "referrer": {
-          "type": "string",
-          "description": "Referrer URL of request."
-        },
-        "responseSize": {
-          "description": "Size in bytes sent back to client by request.",
-          "type": "string",
-          "format": "int64"
-        },
-        "resource": {
-          "type": "string",
-          "description": "Contains the path and query portion of the URL that was requested. For example, if the URL was \"http://example.com/app?name=val\", the resource would be \"/app?name=val\". The fragment identifier, which is identified by the # character, is not included."
-        },
-        "host": {
-          "description": "Internet host and port number of the resource being requested.",
-          "type": "string"
-        },
-        "latency": {
-          "format": "google-duration",
-          "description": "Latency of the request.",
-          "type": "string"
-        },
-        "versionId": {
-          "description": "Version of the application that handled this request.",
-          "type": "string"
-        },
-        "traceId": {
-          "type": "string",
-          "description": "Stackdriver Trace identifier for this request."
-        },
-        "userAgent": {
-          "description": "User agent that made the request.",
-          "type": "string"
-        },
-        "nickname": {
-          "description": "The logged-in user who made the request.Most likely, this is the part of the user's email before the @ sign. The field value is the same for different requests from the same user, but different users can have similar names. This information is also available to the application via the App Engine Users API.This field will be populated starting with App Engine 1.9.21.",
-          "type": "string"
-        },
-        "httpVersion": {
-          "description": "HTTP version of request. Example: \"HTTP/1.1\".",
-          "type": "string"
-        }
-      },
-      "id": "RequestLog",
-      "description": "Complete log information about a single HTTP request to an App Engine application."
-    },
-    "SourceLocation": {
-      "description": "Specifies a location in a source code file.",
-      "properties": {
-        "functionName": {
-          "type": "string",
-          "description": "Human-readable name of the function or method being invoked, with optional context such as the class or package name. This information is used in contexts such as the logs viewer, where a file and line number are less meaningful. The format can vary by language. For example: qual.if.ied.Class.method (Java), dir/package.func (Go), function (Python)."
-        },
-        "file": {
-          "type": "string",
-          "description": "Source file name. Depending on the runtime environment, this might be a simple name or a fully-qualified name."
-        },
-        "line": {
-          "type": "string",
-          "format": "int64",
-          "description": "Line within the source file."
-        }
-      },
-      "type": "object",
-      "id": "SourceLocation"
-    },
-    "ListBucketsResponse": {
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "If there might be more results than appear in this response, then nextPageToken is included. To get the next set of results, call the same method again using the value of nextPageToken as pageToken."
-        },
-        "buckets": {
-          "items": {
-            "$ref": "LogBucket"
-          },
-          "description": "A list of buckets.",
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "description": "The response from ListBuckets.",
-      "id": "ListBucketsResponse"
-    },
-    "TailLogEntriesResponse": {
-      "type": "object",
-      "id": "TailLogEntriesResponse",
-      "description": "Result returned from TailLogEntries.",
-      "properties": {
-        "suppressionInfo": {
-          "description": "If entries that otherwise would have been included in the session were not sent back to the client, counts of relevant entries omitted from the session with the reason that they were not included. There will be at most one of each reason per response. The counts represent the number of suppressed entries since the last streamed response.",
-          "type": "array",
-          "items": {
-            "$ref": "SuppressionInfo"
-          }
-        },
-        "entries": {
-          "description": "A list of log entries. Each response in the stream will order entries with increasing values of LogEntry.timestamp. Ordering is not guaranteed between separate responses.",
-          "items": {
-            "$ref": "LogEntry"
-          },
-          "type": "array"
-        }
-      }
-    },
-    "ListViewsResponse": {
-      "description": "The response from ListViews.",
-      "type": "object",
-      "properties": {
-        "views": {
-          "items": {
-            "$ref": "LogView"
-          },
-          "type": "array",
-          "description": "A list of views."
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "If there might be more results than appear in this response, then nextPageToken is included. To get the next set of results, call the same method again using the value of nextPageToken as pageToken."
-        }
-      },
-      "id": "ListViewsResponse"
-    },
-    "LogEntryOperation": {
-      "properties": {
-        "producer": {
-          "description": "Optional. An arbitrary producer identifier. The combination of id and producer must be globally unique. Examples for producer: \"MyDivision.MyBigCompany.com\", \"github.com/MyProject/MyApplication\".",
-          "type": "string"
-        },
-        "first": {
-          "description": "Optional. Set this to True if this is the first log entry in the operation.",
-          "type": "boolean"
-        },
-        "last": {
-          "description": "Optional. Set this to True if this is the last log entry in the operation.",
-          "type": "boolean"
-        },
-        "id": {
-          "description": "Optional. An arbitrary operation identifier. Log entries with the same identifier are assumed to be part of the same operation.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "LogEntryOperation",
-      "description": "Additional information about a potentially long-running operation with which a log entry is associated."
-    },
-    "MonitoredResource": {
-      "properties": {
-        "type": {
-          "description": "Required. The monitored resource type. This field must match the type field of a MonitoredResourceDescriptor object. For example, the type of a Compute Engine VM instance is gce_instance.",
-          "type": "string"
-        },
-        "labels": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "type": "object",
-          "description": "Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Compute Engine VM instances use the labels \"project_id\", \"instance_id\", and \"zone\"."
-        }
-      },
-      "description": "An object representing a resource that can be used for monitoring, logging, billing, or other purposes. Examples include virtual machine instances, databases, and storage devices such as disks. The type field identifies a MonitoredResourceDescriptor object that describes the resource's schema. Information in the labels field identifies the actual resource and its attributes according to the schema. For example, a particular Compute Engine VM instance could be represented by the following object, because the MonitoredResourceDescriptor for \"gce_instance\" has labels \"instance_id\" and \"zone\": { \"type\": \"gce_instance\", \"labels\": { \"instance_id\": \"12345678901234\", \"zone\": \"us-central1-a\" }} ",
-      "id": "MonitoredResource",
-      "type": "object"
-    },
-    "Explicit": {
-      "description": "Specifies a set of buckets with arbitrary widths.There are size(bounds) + 1 (= N) buckets. Bucket i has the following boundaries:Upper bound (0 \u003c= i \u003c N-1): boundsi Lower bound (1 \u003c= i \u003c N); boundsi - 1The bounds field must contain at least one element. If bounds has only one element, then there are no finite buckets, and that single element is the common boundary of the overflow and underflow buckets.",
-      "type": "object",
-      "properties": {
-        "bounds": {
-          "items": {
-            "format": "double",
-            "type": "number"
-          },
-          "description": "The values must be monotonically increasing.",
-          "type": "array"
-        }
-      },
-      "id": "Explicit"
-    },
-    "WriteLogEntriesResponse": {
-      "id": "WriteLogEntriesResponse",
-      "description": "Result returned from WriteLogEntries.",
-      "properties": {},
-      "type": "object"
-    },
-    "LogEntrySourceLocation": {
-      "description": "Additional information about the source code location that produced the log entry.",
-      "id": "LogEntrySourceLocation",
-      "properties": {
-        "function": {
-          "type": "string",
-          "description": "Optional. Human-readable name of the function or method being invoked, with optional context such as the class or package name. This information may be used in contexts such as the logs viewer, where a file and line number are less meaningful. The format can vary by language. For example: qual.if.ied.Class.method (Java), dir/package.func (Go), function (Python)."
-        },
-        "line": {
-          "type": "string",
-          "format": "int64",
-          "description": "Optional. Line within the source file. 1-based; 0 indicates no line number available."
-        },
-        "file": {
-          "description": "Optional. Source file name. Depending on the runtime environment, this might be a simple name or a fully-qualified name.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "LogMetric": {
-      "description": "Describes a logs-based metric. The value of the metric is the number of log entries that match a logs filter in a given time interval.Logs-based metrics can also be used to extract values from logs and create a distribution of the values. The distribution records the statistics of the extracted values along with an optional histogram of the values as specified by the bucket options.",
-      "type": "object",
-      "properties": {
-        "valueExtractor": {
-          "description": "Optional. A value_extractor is required when using a distribution logs-based metric to extract the values to record from a log entry. Two functions are supported for value extraction: EXTRACT(field) or REGEXP_EXTRACT(field, regex). The argument are: 1. field: The name of the log entry field from which the value is to be extracted. 2. regex: A regular expression using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax) with a single capture group to extract data from the specified log entry field. The value of the field is converted to a string before applying the regex. It is an error to specify a regex that does not include exactly one capture group.The result of the extraction must be convertible to a double type, as the distribution always records double values. If either the extraction or the conversion to double fails, then those values are not recorded in the distribution.Example: REGEXP_EXTRACT(jsonPayload.request, \".*quantity=(\\d+).*\")",
-          "type": "string"
-        },
-        "filter": {
-          "type": "string",
-          "description": "Required. An advanced logs filter (https://cloud.google.com/logging/docs/view/advanced_filters) which is used to match log entries. Example: \"resource.type=gae_app AND severity\u003e=ERROR\" The maximum length of the filter is 20000 characters."
-        },
-        "version": {
-          "type": "string",
-          "enumDescriptions": [
-            "Logging API v2.",
-            "Logging API v1."
-          ],
-          "description": "Deprecated. The API version that created or updated this metric. The v2 format is used by default and cannot be changed.",
-          "enum": [
-            "V2",
-            "V1"
-          ]
-        },
-        "name": {
-          "type": "string",
-          "description": "Required. The client-assigned metric identifier. Examples: \"error_count\", \"nginx/requests\".Metric identifiers are limited to 100 characters and can include only the following characters: A-Z, a-z, 0-9, and the special characters _-.,+!*',()%/. The forward-slash character (/) denotes a hierarchy of name pieces, and it cannot be the first character of the name.The metric identifier in this field must not be URL-encoded (https://en.wikipedia.org/wiki/Percent-encoding). However, when the metric identifier appears as the [METRIC_ID] part of a metric_name API parameter, then the metric identifier must be URL-encoded. Example: \"projects/my-project/metrics/nginx%2Frequests\"."
-        },
-        "createTime": {
-          "description": "Output only. The creation timestamp of the metric.This field may not be present for older metrics.",
-          "readOnly": true,
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "updateTime": {
-          "description": "Output only. The last update timestamp of the metric.This field may not be present for older metrics.",
-          "readOnly": true,
-          "type": "string",
-          "format": "google-datetime"
-        },
-        "metricDescriptor": {
-          "description": "Optional. The metric descriptor associated with the logs-based metric. If unspecified, it uses a default metric descriptor with a DELTA metric kind, INT64 value type, with no labels and a unit of \"1\". Such a metric counts the number of log entries matching the filter expression.The name, type, and description fields in the metric_descriptor are output only, and is constructed using the name and description field in the LogMetric.To create a logs-based metric that records a distribution of log values, a DELTA metric kind with a DISTRIBUTION value type must be used along with a value_extractor expression in the LogMetric.Each label in the metric descriptor must have a matching label name as the key and an extractor expression as the value in the label_extractors map.The metric_kind and value_type fields in the metric_descriptor cannot be updated once initially configured. New labels can be added in the metric_descriptor, but existing labels cannot be modified except for their description.",
-          "$ref": "MetricDescriptor"
-        },
-        "description": {
-          "type": "string",
-          "description": "Optional. A description of this metric, which is used in documentation. The maximum length of the description is 8000 characters."
-        },
-        "bucketOptions": {
-          "$ref": "BucketOptions",
-          "description": "Optional. The bucket_options are required when the logs-based metric is using a DISTRIBUTION value type and it describes the bucket boundaries used to create a histogram of the extracted values."
-        },
-        "labelExtractors": {
-          "description": "Optional. A map from a label key string to an extractor expression which is used to extract data from a log entry field and assign as the label value. Each label key specified in the LabelDescriptor must have an associated extractor expression in this map. The syntax of the extractor expression is the same as for the value_extractor field.The extracted value is converted to the type defined in the label descriptor. If the either the extraction or the type conversion fails, the label will have a default value. The default value for a string label is an empty string, for an integer label its 0, and for a boolean label its false.Note that there are upper bounds on the maximum number of labels and the number of active time series that are allowed in a project.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "LogMetric"
-    },
-    "MonitoredResourceMetadata": {
-      "description": "Auxiliary metadata for a MonitoredResource object. MonitoredResource objects contain the minimum set of information to uniquely identify a monitored resource instance. There is some other useful auxiliary metadata. Monitoring and Logging use an ingestion pipeline to extract metadata for cloud resources of all types, and store the metadata in this message.",
-      "type": "object",
-      "properties": {
-        "userLabels": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "type": "object",
-          "description": "Output only. A map of user-defined metadata labels."
-        },
-        "systemLabels": {
-          "type": "object",
-          "description": "Output only. Values for predefined system metadata labels. System labels are a kind of metadata extracted by Google, including \"machine_image\", \"vpc\", \"subnet_id\", \"security_group\", \"name\", etc. System label values can be only strings, Boolean values, or a list of strings. For example: { \"name\": \"my-test-instance\", \"security_group\": [\"a\", \"b\", \"c\"], \"spot_instance\": false } ",
-          "additionalProperties": {
-            "description": "Properties of the object.",
-            "type": "any"
-          }
-        }
-      },
-      "id": "MonitoredResourceMetadata"
-    },
-    "ListExclusionsResponse": {
-      "description": "Result returned from ListExclusions.",
-      "type": "object",
-      "id": "ListExclusionsResponse",
-      "properties": {
-        "exclusions": {
-          "description": "A list of exclusions.",
-          "items": {
-            "$ref": "LogExclusion"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "description": "If there might be more results than appear in this response, then nextPageToken is included. To get the next set of results, call the same method again using the value of nextPageToken as pageToken.",
-          "type": "string"
-        }
-      }
-    },
-    "SourceReference": {
-      "id": "SourceReference",
-      "properties": {
-        "repository": {
-          "description": "Optional. A URI string identifying the repository. Example: \"https://github.com/GoogleCloudPlatform/kubernetes.git\"",
-          "type": "string"
-        },
-        "revisionId": {
-          "description": "The canonical and persistent identifier of the deployed revision. Example (git): \"0035781c50ec7aa23385dc841529ce8a4b70db1b\"",
-          "type": "string"
-        }
-      },
-      "description": "A reference to a particular snapshot of the source tree used to build and deploy an application.",
-      "type": "object"
-    },
-    "ListLocationsResponse": {
-      "description": "The response message for Locations.ListLocations.",
-      "type": "object",
-      "properties": {
-        "locations": {
-          "description": "A list of locations that matches the specified filter in the request.",
-          "type": "array",
-          "items": {
-            "$ref": "Location"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "The standard List next-page token."
-        }
-      },
-      "id": "ListLocationsResponse"
-    },
-    "ListLogEntriesResponse": {
-      "id": "ListLogEntriesResponse",
-      "type": "object",
-      "description": "Result returned from ListLogEntries.",
-      "properties": {
-        "entries": {
-          "description": "A list of log entries. If entries is empty, nextPageToken may still be returned, indicating that more entries may exist. See nextPageToken for more information.",
-          "type": "array",
-          "items": {
-            "$ref": "LogEntry"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "If there might be more results than those appearing in this response, then nextPageToken is included. To get the next set of results, call this method again using the value of nextPageToken as pageToken.If a value for next_page_token appears and the entries field is empty, it means that the search found no log entries so far but it did not have time to search all the possible log entries. Retry the method with this value for page_token to continue the search. Alternatively, consider speeding up the search by changing your filter to specify a single log name or resource type, or to narrow the time range of the search."
-        }
-      }
-    },
-    "ListLogEntriesRequest": {
-      "type": "object",
-      "properties": {
-        "filter": {
-          "type": "string",
-          "description": "Optional. A filter that chooses which log entries to return. See Advanced Logs Queries (https://cloud.google.com/logging/docs/view/advanced-queries). Only log entries that match the filter are returned. An empty filter matches all log entries in the resources listed in resource_names. Referencing a parent resource that is not listed in resource_names will cause the filter to return no results. The maximum length of the filter is 20000 characters."
-        },
-        "pageToken": {
-          "type": "string",
-          "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. page_token must be the value of next_page_token from the previous response. The values of other method parameters should be identical to those in the previous call."
-        },
-        "resourceNames": {
-          "description": "Required. Names of one or more parent resources from which to retrieve log entries: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" May alternatively be one or more views projects/PROJECT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID organization/ORGANIZATION_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID billingAccounts/BILLING_ACCOUNT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID folders/FOLDER_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_IDProjects listed in the project_ids field are added to this list.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "orderBy": {
-          "type": "string",
-          "description": "Optional. How the results should be sorted. Presently, the only permitted values are \"timestamp asc\" (default) and \"timestamp desc\". The first option returns entries in order of increasing values of LogEntry.timestamp (oldest first), and the second option returns entries in order of decreasing timestamps (newest first). Entries with equal timestamps are returned in order of their insert_id values."
-        },
-        "pageSize": {
-          "type": "integer",
-          "description": "Optional. The maximum number of results to return from this request. Default is 50. If the value is negative or exceeds 1000, the request is rejected. The presence of next_page_token in the response indicates that more results might be available.",
-          "format": "int32"
-        },
-        "projectIds": {
-          "description": "Optional. Deprecated. Use resource_names instead. One or more project identifiers or project numbers from which to retrieve log entries. Example: \"my-project-1A\".",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        }
-      },
-      "description": "The parameters to ListLogEntries.",
-      "id": "ListLogEntriesRequest"
-    },
-    "WriteLogEntriesRequest": {
-      "description": "The parameters to WriteLogEntries.",
-      "properties": {
-        "resource": {
-          "description": "Optional. A default monitored resource object that is assigned to all log entries in entries that do not specify a value for resource. Example: { \"type\": \"gce_instance\", \"labels\": { \"zone\": \"us-central1-a\", \"instance_id\": \"00000000000000000000\" }} See LogEntry.",
-          "$ref": "MonitoredResource"
-        },
-        "labels": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional. Default labels that are added to the labels field of all log entries in entries. If a log entry already has a label with the same key as a label in this parameter, then the log entry's label is not changed. See LogEntry.",
-          "type": "object"
-        },
-        "logName": {
-          "description": "Optional. A default log resource name that is assigned to all log entries in entries that do not specify a value for log_name: \"projects/[PROJECT_ID]/logs/[LOG_ID]\" \"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\" \"folders/[FOLDER_ID]/logs/[LOG_ID]\" [LOG_ID] must be URL-encoded. For example: \"projects/my-project-id/logs/syslog\" \"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity\" The permission logging.logEntries.create is needed on each project, organization, billing account, or folder that is receiving new log entries, whether the resource is specified in logName or in an individual log entry.",
-          "type": "string"
-        },
-        "entries": {
-          "type": "array",
-          "description": "Required. The log entries to send to Logging. The order of log entries in this list does not matter. Values supplied in this method's log_name, resource, and labels fields are copied into those log entries in this list that do not include values for their corresponding fields. For more information, see the LogEntry type.If the timestamp or insert_id fields are missing in log entries, then this method supplies the current time or a unique identifier, respectively. The supplied values are chosen so that, among the log entries that did not supply their own values, the entries earlier in the list will sort before the entries later in the list. See the entries.list method.Log entries with timestamps that are more than the logs retention period (https://cloud.google.com/logging/quota-policy) in the past or more than 24 hours in the future will not be available when calling entries.list. However, those log entries can still be exported with LogSinks (https://cloud.google.com/logging/docs/api/tasks/exporting-logs).To improve throughput and to avoid exceeding the quota limit (https://cloud.google.com/logging/quota-policy) for calls to entries.write, you should try to include several log entries in this list, rather than calling this method for each individual log entry.",
-          "items": {
-            "$ref": "LogEntry"
-          }
-        },
-        "dryRun": {
-          "type": "boolean",
-          "description": "Optional. If true, the request should expect normal response, but the entries won't be persisted nor exported. Useful for checking whether the logging API endpoints are working properly before sending valuable data."
-        },
-        "partialSuccess": {
-          "type": "boolean",
-          "description": "Optional. Whether valid entries should be written even if some other entries fail due to INVALID_ARGUMENT or PERMISSION_DENIED errors. If any entry is not written, then the response status is the error associated with one of the failed entries and the response includes error details keyed by the entries' zero-based index in the entries.write method."
-        }
-      },
-      "id": "WriteLogEntriesRequest",
-      "type": "object"
-    },
-    "MonitoredResourceDescriptor": {
-      "description": "An object that describes the schema of a MonitoredResource object using a type name and a set of labels. For example, the monitored resource descriptor for Google Compute Engine VM instances has a type of \"gce_instance\" and specifies the use of the labels \"instance_id\" and \"zone\" to identify particular VM instances.Different APIs can support different monitored resource types. APIs generally provide a list method that returns the monitored resource descriptors used by the API.",
-      "id": "MonitoredResourceDescriptor",
-      "properties": {
-        "launchStage": {
-          "type": "string",
-          "enumDescriptions": [
-            "Do not use this default value.",
-            "The feature is not yet implemented. Users can not use it.",
-            "Prelaunch features are hidden from users and are only visible internally.",
-            "Early Access features are limited to a closed group of testers. To use these features, you must sign up in advance and sign a Trusted Tester agreement (which includes confidentiality provisions). These features may be unstable, changed in backward-incompatible ways, and are not guaranteed to be released.",
-            "Alpha is a limited availability test for releases before they are cleared for widespread use. By Alpha, all significant design issues are resolved and we are in the process of verifying functionality. Alpha customers need to apply for access, agree to applicable terms, and have their projects allowlisted. Alpha releases don’t have to be feature complete, no SLAs are provided, and there are no technical support obligations, but they will be far enough along that customers can actually use them in test environments or for limited-use tests -- just like they would in normal production cases.",
-            "Beta is the point at which we are ready to open a release for any customer to use. There are no SLA or technical support obligations in a Beta release. Products will be complete from a feature perspective, but may have some open outstanding issues. Beta releases are suitable for limited production use cases.",
-            "GA features are open to all developers and are considered stable and fully qualified for production use.",
-            "Deprecated features are scheduled to be shut down and removed. For more information, see the “Deprecation Policy” section of our Terms of Service (https://cloud.google.com/terms/) and the Google Cloud Platform Subject to the Deprecation Policy (https://cloud.google.com/terms/deprecation) documentation."
-          ],
-          "enum": [
-            "LAUNCH_STAGE_UNSPECIFIED",
-            "UNIMPLEMENTED",
-            "PRELAUNCH",
-            "EARLY_ACCESS",
-            "ALPHA",
-            "BETA",
-            "GA",
-            "DEPRECATED"
-          ],
-          "description": "Optional. The launch stage of the monitored resource definition."
-        },
-        "displayName": {
-          "description": "Optional. A concise name for the monitored resource type that might be displayed in user interfaces. It should be a Title Cased Noun Phrase, without any article or other determiners. For example, \"Google Cloud SQL Database\".",
-          "type": "string"
-        },
-        "labels": {
-          "description": "Required. A set of labels used to describe instances of this monitored resource type. For example, an individual Google Cloud SQL database is identified by values for the labels \"database_id\" and \"zone\".",
-          "type": "array",
-          "items": {
-            "$ref": "LabelDescriptor"
-          }
-        },
-        "description": {
-          "type": "string",
-          "description": "Optional. A detailed description of the monitored resource type that might be used in documentation."
-        },
-        "name": {
-          "type": "string",
-          "description": "Optional. The resource name of the monitored resource descriptor: \"projects/{project_id}/monitoredResourceDescriptors/{type}\" where {type} is the value of the type field in this object and {project_id} is a project ID that provides API-specific context for accessing the type. APIs that do not use project information can use the resource name format \"monitoredResourceDescriptors/{type}\"."
-        },
-        "type": {
-          "description": "Required. The monitored resource type. For example, the type \"cloudsql_database\" represents databases in Google Cloud SQL.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "Empty": {
-      "type": "object",
-      "id": "Empty",
-      "properties": {},
-      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for Empty is empty JSON object {}."
-    },
-    "HttpRequest": {
-      "type": "object",
-      "description": "A common proto for logging HTTP requests. Only contains semantics defined by the HTTP specification. Product-specific logging information MUST be defined in a separate message.",
-      "id": "HttpRequest",
-      "properties": {
-        "responseSize": {
-          "format": "int64",
-          "description": "The size of the HTTP response message sent back to the client, in bytes, including the response headers and the response body.",
-          "type": "string"
-        },
-        "cacheLookup": {
-          "type": "boolean",
-          "description": "Whether or not a cache lookup was attempted."
-        },
-        "cacheFillBytes": {
-          "type": "string",
-          "description": "The number of HTTP response bytes inserted into cache. Set only when a cache fill was attempted.",
-          "format": "int64"
-        },
-        "serverIp": {
-          "type": "string",
-          "description": "The IP address (IPv4 or IPv6) of the origin server that the request was sent to. This field can include port information. Examples: \"192.168.1.1\", \"10.0.0.1:80\", \"FE80::0202:B3FF:FE1E:8329\"."
-        },
-        "requestMethod": {
-          "description": "The request method. Examples: \"GET\", \"HEAD\", \"PUT\", \"POST\".",
-          "type": "string"
-        },
-        "requestUrl": {
-          "description": "The scheme (http, https), the host name, the path and the query portion of the URL that was requested. Example: \"http://example.com/some/info?color=red\".",
-          "type": "string"
-        },
-        "userAgent": {
-          "description": "The user agent sent by the client. Example: \"Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Q312461; .NET CLR 1.0.3705)\".",
-          "type": "string"
-        },
-        "status": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The response code indicating the status of response. Examples: 200, 404."
-        },
-        "latency": {
-          "description": "The request processing latency on the server, from the time the request was received until the response was sent.",
-          "type": "string",
-          "format": "google-duration"
-        },
-        "remoteIp": {
-          "type": "string",
-          "description": "The IP address (IPv4 or IPv6) of the client that issued the HTTP request. This field can include port information. Examples: \"192.168.1.1\", \"10.0.0.1:80\", \"FE80::0202:B3FF:FE1E:8329\"."
-        },
-        "cacheHit": {
-          "type": "boolean",
-          "description": "Whether or not an entity was served from cache (with or without validation)."
-        },
-        "cacheValidatedWithOriginServer": {
-          "type": "boolean",
-          "description": "Whether or not the response was validated with the origin server before being served from cache. This field is only meaningful if cache_hit is True."
-        },
-        "requestSize": {
-          "type": "string",
-          "format": "int64",
-          "description": "The size of the HTTP request message in bytes, including the request headers and the request body."
-        },
-        "referer": {
-          "description": "The referer URL of the request, as defined in HTTP/1.1 Header Field Definitions (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html).",
-          "type": "string"
-        },
-        "protocol": {
-          "type": "string",
-          "description": "Protocol used for the request. Examples: \"HTTP/1.1\", \"HTTP/2\", \"websocket\""
-        }
-      }
-    },
-    "Exponential": {
-      "type": "object",
-      "id": "Exponential",
-      "properties": {
-        "numFiniteBuckets": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Must be greater than 0."
-        },
-        "growthFactor": {
-          "description": "Must be greater than 1.",
-          "type": "number",
-          "format": "double"
-        },
-        "scale": {
-          "format": "double",
-          "description": "Must be greater than 0.",
-          "type": "number"
-        }
-      },
-      "description": "Specifies an exponential sequence of buckets that have a width that is proportional to the value of the lower bound. Each bucket represents a constant relative uncertainty on a specific value in the bucket.There are num_finite_buckets + 2 (= N) buckets. Bucket i has the following boundaries:Upper bound (0 \u003c= i \u003c N-1): scale * (growth_factor ^ i). Lower bound (1 \u003c= i \u003c N): scale * (growth_factor ^ (i - 1))."
-    },
-    "LogBucket": {
-      "description": "Describes a repository of logs.",
-      "id": "LogBucket",
-      "type": "object",
-      "properties": {
-        "lifecycleState": {
-          "enumDescriptions": [
-            "Unspecified state. This is only used/useful for distinguishing unset values.",
-            "The normal and active state.",
-            "The bucket has been marked for deletion by the user."
-          ],
-          "description": "Output only. The bucket lifecycle state.",
-          "readOnly": true,
-          "type": "string",
-          "enum": [
-            "LIFECYCLE_STATE_UNSPECIFIED",
-            "ACTIVE",
-            "DELETE_REQUESTED"
-          ]
-        },
-        "createTime": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "Output only. The creation timestamp of the bucket. This is not set for any of the default buckets.",
-          "readOnly": true
-        },
-        "locked": {
-          "type": "boolean",
-          "description": "Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty."
-        },
-        "name": {
-          "readOnly": true,
-          "type": "string",
-          "description": "Output only. The resource name of the bucket. For example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id The supported locations are: \"global\"For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed."
-        },
-        "description": {
-          "description": "Describes this bucket.",
-          "type": "string"
-        },
-        "retentionDays": {
-          "type": "integer",
-          "description": "Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.",
-          "format": "int32"
         },
-        "updateTime": {
-          "type": "string",
-          "readOnly": true,
-          "description": "Output only. The last update timestamp of the bucket.",
-          "format": "google-datetime"
-        }
-      }
-    },
-    "LabelDescriptor": {
-      "type": "object",
-      "properties": {
         "key": {
-          "type": "string",
-          "description": "The label key."
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
         },
-        "description": {
-          "description": "A human-readable description for the label.",
-          "type": "string"
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
         },
-        "valueType": {
-          "description": "The type of data that can be assigned to the label.",
-          "enum": [
-            "STRING",
-            "BOOL",
-            "INT64"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "A variable-length string. This is the default.",
-            "Boolean; true or false.",
-            "A 64-bit signed integer."
-          ]
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      },
-      "id": "LabelDescriptor",
-      "description": "A description of a label."
     },
-    "BigQueryOptions": {
-      "type": "object",
-      "id": "BigQueryOptions",
-      "properties": {
-        "usePartitionedTables": {
-          "description": "Optional. Whether to use BigQuery's partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries' timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.",
-          "type": "boolean"
+    "protocol": "rest",
+    "resources": {
+        "billingAccounts": {
+            "resources": {
+                "buckets": {
+                    "methods": {
+                        "get": {
+                            "description": "Gets a bucket.",
+                            "flatPath": "v2/billingAccounts/{billingAccountsId}/buckets/{bucketsId}",
+                            "httpMethod": "GET",
+                            "id": "logging.billingAccounts.buckets.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The resource name of the bucket: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
+                                    "location": "path",
+                                    "pattern": "^billingAccounts/[^/]+/buckets/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}",
+                            "response": {
+                                "$ref": "LogBucket"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "views": {
+                            "methods": {
+                                "get": {
+                                    "description": "Gets a view.",
+                                    "flatPath": "v2/billingAccounts/{billingAccountsId}/buckets/{bucketsId}/views/{viewsId}",
+                                    "httpMethod": "GET",
+                                    "id": "logging.billingAccounts.buckets.views.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The resource name of the policy: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
+                                            "location": "path",
+                                            "pattern": "^billingAccounts/[^/]+/buckets/[^/]+/views/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+name}",
+                                    "response": {
+                                        "$ref": "LogView"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                        "https://www.googleapis.com/auth/logging.admin",
+                                        "https://www.googleapis.com/auth/logging.read"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                },
+                "exclusions": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a new exclusion in a specified parent resource. Only log entries belonging to that resource can be excluded. You can have up to 10 exclusions in a resource.",
+                            "flatPath": "v2/billingAccounts/{billingAccountsId}/exclusions",
+                            "httpMethod": "POST",
+                            "id": "logging.billingAccounts.exclusions.create",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. The parent resource in which to create the exclusion: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" Examples: \"projects/my-logging-project\", \"organizations/123456789\".",
+                                    "location": "path",
+                                    "pattern": "^billingAccounts/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+parent}/exclusions",
+                            "request": {
+                                "$ref": "LogExclusion"
+                            },
+                            "response": {
+                                "$ref": "LogExclusion"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes an exclusion.",
+                            "flatPath": "v2/billingAccounts/{billingAccountsId}/exclusions/{exclusionsId}",
+                            "httpMethod": "DELETE",
+                            "id": "logging.billingAccounts.exclusions.delete",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The resource name of an existing exclusion to delete: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
+                                    "location": "path",
+                                    "pattern": "^billingAccounts/[^/]+/exclusions/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets the description of an exclusion.",
+                            "flatPath": "v2/billingAccounts/{billingAccountsId}/exclusions/{exclusionsId}",
+                            "httpMethod": "GET",
+                            "id": "logging.billingAccounts.exclusions.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The resource name of an existing exclusion: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
+                                    "location": "path",
+                                    "pattern": "^billingAccounts/[^/]+/exclusions/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}",
+                            "response": {
+                                "$ref": "LogExclusion"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists all the exclusions in a parent resource.",
+                            "flatPath": "v2/billingAccounts/{billingAccountsId}/exclusions",
+                            "httpMethod": "GET",
+                            "id": "logging.billingAccounts.exclusions.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The parent resource whose exclusions are to be listed. \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
+                                    "location": "path",
+                                    "pattern": "^billingAccounts/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+parent}/exclusions",
+                            "response": {
+                                "$ref": "ListExclusionsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Changes one or more properties of an existing exclusion.",
+                            "flatPath": "v2/billingAccounts/{billingAccountsId}/exclusions/{exclusionsId}",
+                            "httpMethod": "PATCH",
+                            "id": "logging.billingAccounts.exclusions.patch",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The resource name of the exclusion to update: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
+                                    "location": "path",
+                                    "pattern": "^billingAccounts/[^/]+/exclusions/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "updateMask": {
+                                    "description": "Required. A non-empty list of fields to change in the existing exclusion. New values for the fields are taken from the corresponding fields in the LogExclusion included in this request. Fields not mentioned in update_mask are not changed and are ignored in the request.For example, to change the filter and description of an exclusion, specify an update_mask of \"filter,description\".",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}",
+                            "request": {
+                                "$ref": "LogExclusion"
+                            },
+                            "response": {
+                                "$ref": "LogExclusion"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        }
+                    }
+                },
+                "locations": {
+                    "methods": {
+                        "get": {
+                            "description": "Gets information about a location.",
+                            "flatPath": "v2/billingAccounts/{billingAccountsId}/locations/{locationsId}",
+                            "httpMethod": "GET",
+                            "id": "logging.billingAccounts.locations.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Resource name for the location.",
+                                    "location": "path",
+                                    "pattern": "^billingAccounts/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}",
+                            "response": {
+                                "$ref": "Location"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists information about the supported locations for this service.",
+                            "flatPath": "v2/billingAccounts/{billingAccountsId}/locations",
+                            "httpMethod": "GET",
+                            "id": "logging.billingAccounts.locations.list",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "The standard list filter.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "name": {
+                                    "description": "The resource that owns the locations collection, if applicable.",
+                                    "location": "path",
+                                    "pattern": "^billingAccounts/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "The standard list page size.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The standard list page token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}/locations",
+                            "response": {
+                                "$ref": "ListLocationsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "buckets": {
+                            "methods": {
+                                "create": {
+                                    "description": "Creates a bucket that can be used to store log entries. Once a bucket has been created, the region cannot be changed.",
+                                    "flatPath": "v2/billingAccounts/{billingAccountsId}/locations/{locationsId}/buckets",
+                                    "httpMethod": "POST",
+                                    "id": "logging.billingAccounts.locations.buckets.create",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "bucketId": {
+                                            "description": "Required. A client-assigned identifier such as \"my-bucket\". Identifiers are limited to 100 characters and can include only letters, digits, underscores, hyphens, and periods.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The resource in which to create the bucket: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]\" Example: \"projects/my-logging-project/locations/global\"",
+                                            "location": "path",
+                                            "pattern": "^billingAccounts/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+parent}/buckets",
+                                    "request": {
+                                        "$ref": "LogBucket"
+                                    },
+                                    "response": {
+                                        "$ref": "LogBucket"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/logging.admin"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a bucket. Moves the bucket to the DELETE_REQUESTED state. After 7 days, the bucket will be purged and all logs in the bucket will be permanently deleted.",
+                                    "flatPath": "v2/billingAccounts/{billingAccountsId}/locations/{locationsId}/buckets/{bucketsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "logging.billingAccounts.locations.buckets.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The full resource name of the bucket to delete. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
+                                            "location": "path",
+                                            "pattern": "^billingAccounts/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+name}",
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/logging.admin"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists buckets.",
+                                    "flatPath": "v2/billingAccounts/{billingAccountsId}/locations/{locationsId}/buckets",
+                                    "httpMethod": "GET",
+                                    "id": "logging.billingAccounts.locations.buckets.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "pageSize": {
+                                            "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The parent resource whose buckets are to be listed: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]\" Note: The locations portion of the resource must be specified, but supplying the character - in place of LOCATION_ID will return all buckets.",
+                                            "location": "path",
+                                            "pattern": "^billingAccounts/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+parent}/buckets",
+                                    "response": {
+                                        "$ref": "ListBucketsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                        "https://www.googleapis.com/auth/logging.admin",
+                                        "https://www.googleapis.com/auth/logging.read"
+                                    ]
+                                },
+                                "patch": {
+                                    "description": "Updates a bucket. This method replaces the following fields in the existing bucket with values from the new bucket: retention_periodIf the retention period is decreased and the bucket is locked, FAILED_PRECONDITION will be returned.If the bucket has a LifecycleState of DELETE_REQUESTED, FAILED_PRECONDITION will be returned.A buckets region may not be modified after it is created.",
+                                    "flatPath": "v2/billingAccounts/{billingAccountsId}/locations/{locationsId}/buckets/{bucketsId}",
+                                    "httpMethod": "PATCH",
+                                    "id": "logging.billingAccounts.locations.buckets.patch",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The full resource name of the bucket to update. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\". Also requires permission \"resourcemanager.projects.updateLiens\" to set the locked property",
+                                            "location": "path",
+                                            "pattern": "^billingAccounts/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "updateMask": {
+                                            "description": "Required. Field mask that specifies the fields in bucket that need an update. A bucket field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=retention_days.",
+                                            "format": "google-fieldmask",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+name}",
+                                    "request": {
+                                        "$ref": "LogBucket"
+                                    },
+                                    "response": {
+                                        "$ref": "LogBucket"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/logging.admin"
+                                    ]
+                                },
+                                "undelete": {
+                                    "description": "Undeletes a bucket. A bucket that has been deleted may be undeleted within the grace period of 7 days.",
+                                    "flatPath": "v2/billingAccounts/{billingAccountsId}/locations/{locationsId}/buckets/{bucketsId}:undelete",
+                                    "httpMethod": "POST",
+                                    "id": "logging.billingAccounts.locations.buckets.undelete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The full resource name of the bucket to undelete. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
+                                            "location": "path",
+                                            "pattern": "^billingAccounts/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+name}:undelete",
+                                    "request": {
+                                        "$ref": "UndeleteBucketRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/logging.admin"
+                                    ]
+                                }
+                            },
+                            "resources": {
+                                "views": {
+                                    "methods": {
+                                        "create": {
+                                            "description": "Creates a view over logs in a bucket. A bucket may contain a maximum of 50 views.",
+                                            "flatPath": "v2/billingAccounts/{billingAccountsId}/locations/{locationsId}/buckets/{bucketsId}/views",
+                                            "httpMethod": "POST",
+                                            "id": "logging.billingAccounts.locations.buckets.views.create",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "parent": {
+                                                    "description": "Required. The bucket in which to create the view \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-logging-project/locations/my-location/buckets/my-bucket\"",
+                                                    "location": "path",
+                                                    "pattern": "^billingAccounts/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "viewId": {
+                                                    "description": "Required. The id to use for this view.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v2/{+parent}/views",
+                                            "request": {
+                                                "$ref": "LogView"
+                                            },
+                                            "response": {
+                                                "$ref": "LogView"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/logging.admin"
+                                            ]
+                                        },
+                                        "delete": {
+                                            "description": "Deletes a view from a bucket.",
+                                            "flatPath": "v2/billingAccounts/{billingAccountsId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
+                                            "httpMethod": "DELETE",
+                                            "id": "logging.billingAccounts.locations.buckets.views.delete",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. The full resource name of the view to delete: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
+                                                    "location": "path",
+                                                    "pattern": "^billingAccounts/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v2/{+name}",
+                                            "response": {
+                                                "$ref": "Empty"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/logging.admin"
+                                            ]
+                                        },
+                                        "list": {
+                                            "description": "Lists views on a bucket.",
+                                            "flatPath": "v2/billingAccounts/{billingAccountsId}/locations/{locationsId}/buckets/{bucketsId}/views",
+                                            "httpMethod": "GET",
+                                            "id": "logging.billingAccounts.locations.buckets.views.list",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "pageSize": {
+                                                    "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                                    "format": "int32",
+                                                    "location": "query",
+                                                    "type": "integer"
+                                                },
+                                                "pageToken": {
+                                                    "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "parent": {
+                                                    "description": "Required. The bucket whose views are to be listed: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" ",
+                                                    "location": "path",
+                                                    "pattern": "^billingAccounts/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v2/{+parent}/views",
+                                            "response": {
+                                                "$ref": "ListViewsResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                                "https://www.googleapis.com/auth/logging.admin",
+                                                "https://www.googleapis.com/auth/logging.read"
+                                            ]
+                                        },
+                                        "patch": {
+                                            "description": "Updates a view. This method replaces the following fields in the existing view with values from the new view: filter.",
+                                            "flatPath": "v2/billingAccounts/{billingAccountsId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
+                                            "httpMethod": "PATCH",
+                                            "id": "logging.billingAccounts.locations.buckets.views.patch",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. The full resource name of the view to update \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
+                                                    "location": "path",
+                                                    "pattern": "^billingAccounts/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "updateMask": {
+                                                    "description": "Optional. Field mask that specifies the fields in view that need an update. A field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
+                                                    "format": "google-fieldmask",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v2/{+name}",
+                                            "request": {
+                                                "$ref": "LogView"
+                                            },
+                                            "response": {
+                                                "$ref": "LogView"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/logging.admin"
+                                            ]
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                },
+                "logs": {
+                    "methods": {
+                        "delete": {
+                            "description": "Deletes all the log entries in a log for the _Default Log Bucket. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.",
+                            "flatPath": "v2/billingAccounts/{billingAccountsId}/logs/{logsId}",
+                            "httpMethod": "DELETE",
+                            "id": "logging.billingAccounts.logs.delete",
+                            "parameterOrder": [
+                                "logName"
+                            ],
+                            "parameters": {
+                                "logName": {
+                                    "description": "Required. The resource name of the log to delete: \"projects/[PROJECT_ID]/logs/[LOG_ID]\" \"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\" \"folders/[FOLDER_ID]/logs/[LOG_ID]\" [LOG_ID] must be URL-encoded. For example, \"projects/my-project-id/logs/syslog\", \"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity\". For more information about log names, see LogEntry.",
+                                    "location": "path",
+                                    "pattern": "^billingAccounts/[^/]+/logs/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+logName}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.",
+                            "flatPath": "v2/billingAccounts/{billingAccountsId}/logs",
+                            "httpMethod": "GET",
+                            "id": "logging.billingAccounts.logs.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The resource name that owns the logs: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
+                                    "location": "path",
+                                    "pattern": "^billingAccounts/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "resourceNames": {
+                                    "description": "Optional. The resource name that owns the logs: projects/PROJECT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID organization/ORGANIZATION_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID billingAccounts/BILLING_ACCOUNT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID folders/FOLDER_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_IDTo support legacy queries, it could also be: \"projects/PROJECT_ID\" \"organizations/ORGANIZATION_ID\" \"billingAccounts/BILLING_ACCOUNT_ID\" \"folders/FOLDER_ID\"",
+                                    "location": "query",
+                                    "repeated": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+parent}/logs",
+                            "response": {
+                                "$ref": "ListLogsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        }
+                    }
+                },
+                "sinks": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a sink that exports specified log entries to a destination. The export of newly-ingested log entries begins immediately, unless the sink's writer_identity is not permitted to write to the destination. A sink can export log entries only from the resource owning the sink.",
+                            "flatPath": "v2/billingAccounts/{billingAccountsId}/sinks",
+                            "httpMethod": "POST",
+                            "id": "logging.billingAccounts.sinks.create",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. The resource in which to create the sink: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" Examples: \"projects/my-logging-project\", \"organizations/123456789\".",
+                                    "location": "path",
+                                    "pattern": "^billingAccounts/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "uniqueWriterIdentity": {
+                                    "description": "Optional. Determines the kind of IAM identity returned as writer_identity in the new sink. If this value is omitted or set to false, and if the sink's parent is a project, then the value returned as writer_identity is the same group or service account used by Logging before the addition of writer identities to this API. The sink's destination must be in the same project as the sink itself.If this field is set to true, or if the sink is owned by a non-project resource such as an organization, then the value of writer_identity will be a unique service account used only for exports from the new sink. For more information, see writer_identity in LogSink.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                }
+                            },
+                            "path": "v2/{+parent}/sinks",
+                            "request": {
+                                "$ref": "LogSink"
+                            },
+                            "response": {
+                                "$ref": "LogSink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes a sink. If the sink has a unique writer_identity, then that service account is also deleted.",
+                            "flatPath": "v2/billingAccounts/{billingAccountsId}/sinks/{sinksId}",
+                            "httpMethod": "DELETE",
+                            "id": "logging.billingAccounts.sinks.delete",
+                            "parameterOrder": [
+                                "sinkName"
+                            ],
+                            "parameters": {
+                                "sinkName": {
+                                    "description": "Required. The full resource name of the sink to delete, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
+                                    "location": "path",
+                                    "pattern": "^billingAccounts/[^/]+/sinks/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+sinkName}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets a sink.",
+                            "flatPath": "v2/billingAccounts/{billingAccountsId}/sinks/{sinksId}",
+                            "httpMethod": "GET",
+                            "id": "logging.billingAccounts.sinks.get",
+                            "parameterOrder": [
+                                "sinkName"
+                            ],
+                            "parameters": {
+                                "sinkName": {
+                                    "description": "Required. The resource name of the sink: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
+                                    "location": "path",
+                                    "pattern": "^billingAccounts/[^/]+/sinks/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+sinkName}",
+                            "response": {
+                                "$ref": "LogSink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists sinks.",
+                            "flatPath": "v2/billingAccounts/{billingAccountsId}/sinks",
+                            "httpMethod": "GET",
+                            "id": "logging.billingAccounts.sinks.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The parent resource whose sinks are to be listed: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
+                                    "location": "path",
+                                    "pattern": "^billingAccounts/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+parent}/sinks",
+                            "response": {
+                                "$ref": "ListSinksResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates a sink. This method replaces the following fields in the existing sink with values from the new sink: destination, and filter.The updated sink might also have a new writer_identity; see the unique_writer_identity field.",
+                            "flatPath": "v2/billingAccounts/{billingAccountsId}/sinks/{sinksId}",
+                            "httpMethod": "PATCH",
+                            "id": "logging.billingAccounts.sinks.patch",
+                            "parameterOrder": [
+                                "sinkName"
+                            ],
+                            "parameters": {
+                                "sinkName": {
+                                    "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
+                                    "location": "path",
+                                    "pattern": "^billingAccounts/[^/]+/sinks/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "uniqueWriterIdentity": {
+                                    "description": "Optional. See sinks.create for a description of this field. When updating a sink, the effect of this field on the value of writer_identity in the updated sink depends on both the old and new values of this field: If the old and new values of this field are both false or both true, then there is no change to the sink's writer_identity. If the old value is false and the new value is true, then writer_identity is changed to a unique service account. It is an error if the old value is true and the new value is set to false or defaulted to false.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "updateMask": {
+                                    "description": "Optional. Field mask that specifies the fields in sink that need an update. A sink field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.An empty updateMask is temporarily treated as using the following mask for backwards compatibility purposes: destination,filter,includeChildren At some point in the future, behavior will be removed and specifying an empty updateMask will be an error.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+sinkName}",
+                            "request": {
+                                "$ref": "LogSink"
+                            },
+                            "response": {
+                                "$ref": "LogSink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates a sink. This method replaces the following fields in the existing sink with values from the new sink: destination, and filter.The updated sink might also have a new writer_identity; see the unique_writer_identity field.",
+                            "flatPath": "v2/billingAccounts/{billingAccountsId}/sinks/{sinksId}",
+                            "httpMethod": "PUT",
+                            "id": "logging.billingAccounts.sinks.update",
+                            "parameterOrder": [
+                                "sinkName"
+                            ],
+                            "parameters": {
+                                "sinkName": {
+                                    "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
+                                    "location": "path",
+                                    "pattern": "^billingAccounts/[^/]+/sinks/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "uniqueWriterIdentity": {
+                                    "description": "Optional. See sinks.create for a description of this field. When updating a sink, the effect of this field on the value of writer_identity in the updated sink depends on both the old and new values of this field: If the old and new values of this field are both false or both true, then there is no change to the sink's writer_identity. If the old value is false and the new value is true, then writer_identity is changed to a unique service account. It is an error if the old value is true and the new value is set to false or defaulted to false.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "updateMask": {
+                                    "description": "Optional. Field mask that specifies the fields in sink that need an update. A sink field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.An empty updateMask is temporarily treated as using the following mask for backwards compatibility purposes: destination,filter,includeChildren At some point in the future, behavior will be removed and specifying an empty updateMask will be an error.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+sinkName}",
+                            "request": {
+                                "$ref": "LogSink"
+                            },
+                            "response": {
+                                "$ref": "LogSink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        }
+                    }
+                }
+            }
         },
-        "usesTimestampColumnPartitioning": {
-          "readOnly": true,
-          "type": "boolean",
-          "description": "Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false."
-        }
-      },
-      "description": "Options that change functionality of a sink exporting data to BigQuery."
-    },
-    "BucketOptions": {
-      "properties": {
-        "linearBuckets": {
-          "$ref": "Linear",
-          "description": "The linear bucket."
+        "entries": {
+            "methods": {
+                "list": {
+                    "description": "Lists log entries. Use this method to retrieve log entries that originated from a project/folder/organization/billing account. For ways to export log entries, see Exporting Logs (https://cloud.google.com/logging/docs/export).",
+                    "flatPath": "v2/entries:list",
+                    "httpMethod": "POST",
+                    "id": "logging.entries.list",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v2/entries:list",
+                    "request": {
+                        "$ref": "ListLogEntriesRequest"
+                    },
+                    "response": {
+                        "$ref": "ListLogEntriesResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                        "https://www.googleapis.com/auth/logging.admin",
+                        "https://www.googleapis.com/auth/logging.read"
+                    ]
+                },
+                "tail": {
+                    "description": "Streaming read of log entries as they are ingested. Until the stream is terminated, it will continue reading logs.",
+                    "flatPath": "v2/entries:tail",
+                    "httpMethod": "POST",
+                    "id": "logging.entries.tail",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v2/entries:tail",
+                    "request": {
+                        "$ref": "TailLogEntriesRequest"
+                    },
+                    "response": {
+                        "$ref": "TailLogEntriesResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                        "https://www.googleapis.com/auth/logging.admin",
+                        "https://www.googleapis.com/auth/logging.read"
+                    ]
+                },
+                "write": {
+                    "description": "Writes log entries to Logging. This API method is the only way to send log entries to Logging. This method is used, directly or indirectly, by the Logging agent (fluentd) and all logging libraries configured to use Logging. A single request may contain log entries for a maximum of 1000 different resources (projects, organizations, billing accounts or folders)",
+                    "flatPath": "v2/entries:write",
+                    "httpMethod": "POST",
+                    "id": "logging.entries.write",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v2/entries:write",
+                    "request": {
+                        "$ref": "WriteLogEntriesRequest"
+                    },
+                    "response": {
+                        "$ref": "WriteLogEntriesResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/logging.admin",
+                        "https://www.googleapis.com/auth/logging.write"
+                    ]
+                }
+            }
         },
-        "explicitBuckets": {
-          "description": "The explicit buckets.",
-          "$ref": "Explicit"
+        "exclusions": {
+            "methods": {
+                "create": {
+                    "description": "Creates a new exclusion in a specified parent resource. Only log entries belonging to that resource can be excluded. You can have up to 10 exclusions in a resource.",
+                    "flatPath": "v2/{v2Id}/{v2Id1}/exclusions",
+                    "httpMethod": "POST",
+                    "id": "logging.exclusions.create",
+                    "parameterOrder": [
+                        "parent"
+                    ],
+                    "parameters": {
+                        "parent": {
+                            "description": "Required. The parent resource in which to create the exclusion: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" Examples: \"projects/my-logging-project\", \"organizations/123456789\".",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v2/{+parent}/exclusions",
+                    "request": {
+                        "$ref": "LogExclusion"
+                    },
+                    "response": {
+                        "$ref": "LogExclusion"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/logging.admin"
+                    ]
+                },
+                "delete": {
+                    "description": "Deletes an exclusion.",
+                    "flatPath": "v2/{v2Id}/{v2Id1}/exclusions/{exclusionsId}",
+                    "httpMethod": "DELETE",
+                    "id": "logging.exclusions.delete",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "Required. The resource name of an existing exclusion to delete: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+/exclusions/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v2/{+name}",
+                    "response": {
+                        "$ref": "Empty"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/logging.admin"
+                    ]
+                },
+                "get": {
+                    "description": "Gets the description of an exclusion.",
+                    "flatPath": "v2/{v2Id}/{v2Id1}/exclusions/{exclusionsId}",
+                    "httpMethod": "GET",
+                    "id": "logging.exclusions.get",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "Required. The resource name of an existing exclusion: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+/exclusions/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v2/{+name}",
+                    "response": {
+                        "$ref": "LogExclusion"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                        "https://www.googleapis.com/auth/logging.admin",
+                        "https://www.googleapis.com/auth/logging.read"
+                    ]
+                },
+                "list": {
+                    "description": "Lists all the exclusions in a parent resource.",
+                    "flatPath": "v2/{v2Id}/{v2Id1}/exclusions",
+                    "httpMethod": "GET",
+                    "id": "logging.exclusions.list",
+                    "parameterOrder": [
+                        "parent"
+                    ],
+                    "parameters": {
+                        "pageSize": {
+                            "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "parent": {
+                            "description": "Required. The parent resource whose exclusions are to be listed. \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v2/{+parent}/exclusions",
+                    "response": {
+                        "$ref": "ListExclusionsResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                        "https://www.googleapis.com/auth/logging.admin",
+                        "https://www.googleapis.com/auth/logging.read"
+                    ]
+                },
+                "patch": {
+                    "description": "Changes one or more properties of an existing exclusion.",
+                    "flatPath": "v2/{v2Id}/{v2Id1}/exclusions/{exclusionsId}",
+                    "httpMethod": "PATCH",
+                    "id": "logging.exclusions.patch",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "Required. The resource name of the exclusion to update: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+/exclusions/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "updateMask": {
+                            "description": "Required. A non-empty list of fields to change in the existing exclusion. New values for the fields are taken from the corresponding fields in the LogExclusion included in this request. Fields not mentioned in update_mask are not changed and are ignored in the request.For example, to change the filter and description of an exclusion, specify an update_mask of \"filter,description\".",
+                            "format": "google-fieldmask",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v2/{+name}",
+                    "request": {
+                        "$ref": "LogExclusion"
+                    },
+                    "response": {
+                        "$ref": "LogExclusion"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/logging.admin"
+                    ]
+                }
+            }
         },
-        "exponentialBuckets": {
-          "$ref": "Exponential",
-          "description": "The exponential buckets."
-        }
-      },
-      "id": "BucketOptions",
-      "type": "object",
-      "description": "BucketOptions describes the bucket boundaries used to create a histogram for the distribution. The buckets can be in a linear sequence, an exponential sequence, or each bucket can be specified explicitly. BucketOptions does not include the number of values in each bucket.A bucket has an inclusive lower bound and exclusive upper bound for the values that are counted for that bucket. The upper bound of a bucket must be strictly greater than the lower bound. The sequence of N buckets for a distribution consists of an underflow bucket (number 0), zero or more finite buckets (number 1 through N - 2) and an overflow bucket (number N - 1). The buckets are contiguous: the lower bound of bucket i (i \u003e 0) is the same as the upper bound of bucket i - 1. The buckets span the whole range of finite values: lower bound of the underflow bucket is -infinity and the upper bound of the overflow bucket is +infinity. The finite buckets are so-called because both bounds are finite."
-    },
-    "LogExclusion": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Required. A client-assigned identifier, such as \"load-balancer-exclusion\". Identifiers are limited to 100 characters and can include only letters, digits, underscores, hyphens, and periods. First character has to be alphanumeric."
+        "folders": {
+            "resources": {
+                "exclusions": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a new exclusion in a specified parent resource. Only log entries belonging to that resource can be excluded. You can have up to 10 exclusions in a resource.",
+                            "flatPath": "v2/folders/{foldersId}/exclusions",
+                            "httpMethod": "POST",
+                            "id": "logging.folders.exclusions.create",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. The parent resource in which to create the exclusion: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" Examples: \"projects/my-logging-project\", \"organizations/123456789\".",
+                                    "location": "path",
+                                    "pattern": "^folders/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+parent}/exclusions",
+                            "request": {
+                                "$ref": "LogExclusion"
+                            },
+                            "response": {
+                                "$ref": "LogExclusion"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes an exclusion.",
+                            "flatPath": "v2/folders/{foldersId}/exclusions/{exclusionsId}",
+                            "httpMethod": "DELETE",
+                            "id": "logging.folders.exclusions.delete",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The resource name of an existing exclusion to delete: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
+                                    "location": "path",
+                                    "pattern": "^folders/[^/]+/exclusions/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets the description of an exclusion.",
+                            "flatPath": "v2/folders/{foldersId}/exclusions/{exclusionsId}",
+                            "httpMethod": "GET",
+                            "id": "logging.folders.exclusions.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The resource name of an existing exclusion: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
+                                    "location": "path",
+                                    "pattern": "^folders/[^/]+/exclusions/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}",
+                            "response": {
+                                "$ref": "LogExclusion"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists all the exclusions in a parent resource.",
+                            "flatPath": "v2/folders/{foldersId}/exclusions",
+                            "httpMethod": "GET",
+                            "id": "logging.folders.exclusions.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The parent resource whose exclusions are to be listed. \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
+                                    "location": "path",
+                                    "pattern": "^folders/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+parent}/exclusions",
+                            "response": {
+                                "$ref": "ListExclusionsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Changes one or more properties of an existing exclusion.",
+                            "flatPath": "v2/folders/{foldersId}/exclusions/{exclusionsId}",
+                            "httpMethod": "PATCH",
+                            "id": "logging.folders.exclusions.patch",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The resource name of the exclusion to update: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
+                                    "location": "path",
+                                    "pattern": "^folders/[^/]+/exclusions/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "updateMask": {
+                                    "description": "Required. A non-empty list of fields to change in the existing exclusion. New values for the fields are taken from the corresponding fields in the LogExclusion included in this request. Fields not mentioned in update_mask are not changed and are ignored in the request.For example, to change the filter and description of an exclusion, specify an update_mask of \"filter,description\".",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}",
+                            "request": {
+                                "$ref": "LogExclusion"
+                            },
+                            "response": {
+                                "$ref": "LogExclusion"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        }
+                    }
+                },
+                "locations": {
+                    "methods": {
+                        "get": {
+                            "description": "Gets information about a location.",
+                            "flatPath": "v2/folders/{foldersId}/locations/{locationsId}",
+                            "httpMethod": "GET",
+                            "id": "logging.folders.locations.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Resource name for the location.",
+                                    "location": "path",
+                                    "pattern": "^folders/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}",
+                            "response": {
+                                "$ref": "Location"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists information about the supported locations for this service.",
+                            "flatPath": "v2/folders/{foldersId}/locations",
+                            "httpMethod": "GET",
+                            "id": "logging.folders.locations.list",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "The standard list filter.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "name": {
+                                    "description": "The resource that owns the locations collection, if applicable.",
+                                    "location": "path",
+                                    "pattern": "^folders/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "The standard list page size.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The standard list page token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}/locations",
+                            "response": {
+                                "$ref": "ListLocationsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "buckets": {
+                            "methods": {
+                                "create": {
+                                    "description": "Creates a bucket that can be used to store log entries. Once a bucket has been created, the region cannot be changed.",
+                                    "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets",
+                                    "httpMethod": "POST",
+                                    "id": "logging.folders.locations.buckets.create",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "bucketId": {
+                                            "description": "Required. A client-assigned identifier such as \"my-bucket\". Identifiers are limited to 100 characters and can include only letters, digits, underscores, hyphens, and periods.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The resource in which to create the bucket: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]\" Example: \"projects/my-logging-project/locations/global\"",
+                                            "location": "path",
+                                            "pattern": "^folders/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+parent}/buckets",
+                                    "request": {
+                                        "$ref": "LogBucket"
+                                    },
+                                    "response": {
+                                        "$ref": "LogBucket"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/logging.admin"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a bucket. Moves the bucket to the DELETE_REQUESTED state. After 7 days, the bucket will be purged and all logs in the bucket will be permanently deleted.",
+                                    "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets/{bucketsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "logging.folders.locations.buckets.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The full resource name of the bucket to delete. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
+                                            "location": "path",
+                                            "pattern": "^folders/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+name}",
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/logging.admin"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets a bucket.",
+                                    "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets/{bucketsId}",
+                                    "httpMethod": "GET",
+                                    "id": "logging.folders.locations.buckets.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The resource name of the bucket: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
+                                            "location": "path",
+                                            "pattern": "^folders/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+name}",
+                                    "response": {
+                                        "$ref": "LogBucket"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                        "https://www.googleapis.com/auth/logging.admin",
+                                        "https://www.googleapis.com/auth/logging.read"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists buckets.",
+                                    "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets",
+                                    "httpMethod": "GET",
+                                    "id": "logging.folders.locations.buckets.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "pageSize": {
+                                            "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The parent resource whose buckets are to be listed: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]\" Note: The locations portion of the resource must be specified, but supplying the character - in place of LOCATION_ID will return all buckets.",
+                                            "location": "path",
+                                            "pattern": "^folders/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+parent}/buckets",
+                                    "response": {
+                                        "$ref": "ListBucketsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                        "https://www.googleapis.com/auth/logging.admin",
+                                        "https://www.googleapis.com/auth/logging.read"
+                                    ]
+                                },
+                                "patch": {
+                                    "description": "Updates a bucket. This method replaces the following fields in the existing bucket with values from the new bucket: retention_periodIf the retention period is decreased and the bucket is locked, FAILED_PRECONDITION will be returned.If the bucket has a LifecycleState of DELETE_REQUESTED, FAILED_PRECONDITION will be returned.A buckets region may not be modified after it is created.",
+                                    "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets/{bucketsId}",
+                                    "httpMethod": "PATCH",
+                                    "id": "logging.folders.locations.buckets.patch",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The full resource name of the bucket to update. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\". Also requires permission \"resourcemanager.projects.updateLiens\" to set the locked property",
+                                            "location": "path",
+                                            "pattern": "^folders/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "updateMask": {
+                                            "description": "Required. Field mask that specifies the fields in bucket that need an update. A bucket field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=retention_days.",
+                                            "format": "google-fieldmask",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+name}",
+                                    "request": {
+                                        "$ref": "LogBucket"
+                                    },
+                                    "response": {
+                                        "$ref": "LogBucket"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/logging.admin"
+                                    ]
+                                },
+                                "undelete": {
+                                    "description": "Undeletes a bucket. A bucket that has been deleted may be undeleted within the grace period of 7 days.",
+                                    "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets/{bucketsId}:undelete",
+                                    "httpMethod": "POST",
+                                    "id": "logging.folders.locations.buckets.undelete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The full resource name of the bucket to undelete. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
+                                            "location": "path",
+                                            "pattern": "^folders/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+name}:undelete",
+                                    "request": {
+                                        "$ref": "UndeleteBucketRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/logging.admin"
+                                    ]
+                                }
+                            },
+                            "resources": {
+                                "views": {
+                                    "methods": {
+                                        "create": {
+                                            "description": "Creates a view over logs in a bucket. A bucket may contain a maximum of 50 views.",
+                                            "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets/{bucketsId}/views",
+                                            "httpMethod": "POST",
+                                            "id": "logging.folders.locations.buckets.views.create",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "parent": {
+                                                    "description": "Required. The bucket in which to create the view \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-logging-project/locations/my-location/buckets/my-bucket\"",
+                                                    "location": "path",
+                                                    "pattern": "^folders/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "viewId": {
+                                                    "description": "Required. The id to use for this view.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v2/{+parent}/views",
+                                            "request": {
+                                                "$ref": "LogView"
+                                            },
+                                            "response": {
+                                                "$ref": "LogView"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/logging.admin"
+                                            ]
+                                        },
+                                        "delete": {
+                                            "description": "Deletes a view from a bucket.",
+                                            "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
+                                            "httpMethod": "DELETE",
+                                            "id": "logging.folders.locations.buckets.views.delete",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. The full resource name of the view to delete: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
+                                                    "location": "path",
+                                                    "pattern": "^folders/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v2/{+name}",
+                                            "response": {
+                                                "$ref": "Empty"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/logging.admin"
+                                            ]
+                                        },
+                                        "get": {
+                                            "description": "Gets a view.",
+                                            "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
+                                            "httpMethod": "GET",
+                                            "id": "logging.folders.locations.buckets.views.get",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. The resource name of the policy: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
+                                                    "location": "path",
+                                                    "pattern": "^folders/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v2/{+name}",
+                                            "response": {
+                                                "$ref": "LogView"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                                "https://www.googleapis.com/auth/logging.admin",
+                                                "https://www.googleapis.com/auth/logging.read"
+                                            ]
+                                        },
+                                        "list": {
+                                            "description": "Lists views on a bucket.",
+                                            "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets/{bucketsId}/views",
+                                            "httpMethod": "GET",
+                                            "id": "logging.folders.locations.buckets.views.list",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "pageSize": {
+                                                    "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                                    "format": "int32",
+                                                    "location": "query",
+                                                    "type": "integer"
+                                                },
+                                                "pageToken": {
+                                                    "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "parent": {
+                                                    "description": "Required. The bucket whose views are to be listed: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" ",
+                                                    "location": "path",
+                                                    "pattern": "^folders/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v2/{+parent}/views",
+                                            "response": {
+                                                "$ref": "ListViewsResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                                "https://www.googleapis.com/auth/logging.admin",
+                                                "https://www.googleapis.com/auth/logging.read"
+                                            ]
+                                        },
+                                        "patch": {
+                                            "description": "Updates a view. This method replaces the following fields in the existing view with values from the new view: filter.",
+                                            "flatPath": "v2/folders/{foldersId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
+                                            "httpMethod": "PATCH",
+                                            "id": "logging.folders.locations.buckets.views.patch",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. The full resource name of the view to update \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
+                                                    "location": "path",
+                                                    "pattern": "^folders/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "updateMask": {
+                                                    "description": "Optional. Field mask that specifies the fields in view that need an update. A field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
+                                                    "format": "google-fieldmask",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v2/{+name}",
+                                            "request": {
+                                                "$ref": "LogView"
+                                            },
+                                            "response": {
+                                                "$ref": "LogView"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/logging.admin"
+                                            ]
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                },
+                "logs": {
+                    "methods": {
+                        "delete": {
+                            "description": "Deletes all the log entries in a log for the _Default Log Bucket. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.",
+                            "flatPath": "v2/folders/{foldersId}/logs/{logsId}",
+                            "httpMethod": "DELETE",
+                            "id": "logging.folders.logs.delete",
+                            "parameterOrder": [
+                                "logName"
+                            ],
+                            "parameters": {
+                                "logName": {
+                                    "description": "Required. The resource name of the log to delete: \"projects/[PROJECT_ID]/logs/[LOG_ID]\" \"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\" \"folders/[FOLDER_ID]/logs/[LOG_ID]\" [LOG_ID] must be URL-encoded. For example, \"projects/my-project-id/logs/syslog\", \"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity\". For more information about log names, see LogEntry.",
+                                    "location": "path",
+                                    "pattern": "^folders/[^/]+/logs/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+logName}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.",
+                            "flatPath": "v2/folders/{foldersId}/logs",
+                            "httpMethod": "GET",
+                            "id": "logging.folders.logs.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The resource name that owns the logs: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
+                                    "location": "path",
+                                    "pattern": "^folders/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "resourceNames": {
+                                    "description": "Optional. The resource name that owns the logs: projects/PROJECT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID organization/ORGANIZATION_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID billingAccounts/BILLING_ACCOUNT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID folders/FOLDER_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_IDTo support legacy queries, it could also be: \"projects/PROJECT_ID\" \"organizations/ORGANIZATION_ID\" \"billingAccounts/BILLING_ACCOUNT_ID\" \"folders/FOLDER_ID\"",
+                                    "location": "query",
+                                    "repeated": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+parent}/logs",
+                            "response": {
+                                "$ref": "ListLogsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        }
+                    }
+                },
+                "sinks": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a sink that exports specified log entries to a destination. The export of newly-ingested log entries begins immediately, unless the sink's writer_identity is not permitted to write to the destination. A sink can export log entries only from the resource owning the sink.",
+                            "flatPath": "v2/folders/{foldersId}/sinks",
+                            "httpMethod": "POST",
+                            "id": "logging.folders.sinks.create",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. The resource in which to create the sink: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" Examples: \"projects/my-logging-project\", \"organizations/123456789\".",
+                                    "location": "path",
+                                    "pattern": "^folders/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "uniqueWriterIdentity": {
+                                    "description": "Optional. Determines the kind of IAM identity returned as writer_identity in the new sink. If this value is omitted or set to false, and if the sink's parent is a project, then the value returned as writer_identity is the same group or service account used by Logging before the addition of writer identities to this API. The sink's destination must be in the same project as the sink itself.If this field is set to true, or if the sink is owned by a non-project resource such as an organization, then the value of writer_identity will be a unique service account used only for exports from the new sink. For more information, see writer_identity in LogSink.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                }
+                            },
+                            "path": "v2/{+parent}/sinks",
+                            "request": {
+                                "$ref": "LogSink"
+                            },
+                            "response": {
+                                "$ref": "LogSink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes a sink. If the sink has a unique writer_identity, then that service account is also deleted.",
+                            "flatPath": "v2/folders/{foldersId}/sinks/{sinksId}",
+                            "httpMethod": "DELETE",
+                            "id": "logging.folders.sinks.delete",
+                            "parameterOrder": [
+                                "sinkName"
+                            ],
+                            "parameters": {
+                                "sinkName": {
+                                    "description": "Required. The full resource name of the sink to delete, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
+                                    "location": "path",
+                                    "pattern": "^folders/[^/]+/sinks/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+sinkName}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets a sink.",
+                            "flatPath": "v2/folders/{foldersId}/sinks/{sinksId}",
+                            "httpMethod": "GET",
+                            "id": "logging.folders.sinks.get",
+                            "parameterOrder": [
+                                "sinkName"
+                            ],
+                            "parameters": {
+                                "sinkName": {
+                                    "description": "Required. The resource name of the sink: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
+                                    "location": "path",
+                                    "pattern": "^folders/[^/]+/sinks/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+sinkName}",
+                            "response": {
+                                "$ref": "LogSink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists sinks.",
+                            "flatPath": "v2/folders/{foldersId}/sinks",
+                            "httpMethod": "GET",
+                            "id": "logging.folders.sinks.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The parent resource whose sinks are to be listed: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
+                                    "location": "path",
+                                    "pattern": "^folders/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+parent}/sinks",
+                            "response": {
+                                "$ref": "ListSinksResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates a sink. This method replaces the following fields in the existing sink with values from the new sink: destination, and filter.The updated sink might also have a new writer_identity; see the unique_writer_identity field.",
+                            "flatPath": "v2/folders/{foldersId}/sinks/{sinksId}",
+                            "httpMethod": "PATCH",
+                            "id": "logging.folders.sinks.patch",
+                            "parameterOrder": [
+                                "sinkName"
+                            ],
+                            "parameters": {
+                                "sinkName": {
+                                    "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
+                                    "location": "path",
+                                    "pattern": "^folders/[^/]+/sinks/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "uniqueWriterIdentity": {
+                                    "description": "Optional. See sinks.create for a description of this field. When updating a sink, the effect of this field on the value of writer_identity in the updated sink depends on both the old and new values of this field: If the old and new values of this field are both false or both true, then there is no change to the sink's writer_identity. If the old value is false and the new value is true, then writer_identity is changed to a unique service account. It is an error if the old value is true and the new value is set to false or defaulted to false.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "updateMask": {
+                                    "description": "Optional. Field mask that specifies the fields in sink that need an update. A sink field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.An empty updateMask is temporarily treated as using the following mask for backwards compatibility purposes: destination,filter,includeChildren At some point in the future, behavior will be removed and specifying an empty updateMask will be an error.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+sinkName}",
+                            "request": {
+                                "$ref": "LogSink"
+                            },
+                            "response": {
+                                "$ref": "LogSink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates a sink. This method replaces the following fields in the existing sink with values from the new sink: destination, and filter.The updated sink might also have a new writer_identity; see the unique_writer_identity field.",
+                            "flatPath": "v2/folders/{foldersId}/sinks/{sinksId}",
+                            "httpMethod": "PUT",
+                            "id": "logging.folders.sinks.update",
+                            "parameterOrder": [
+                                "sinkName"
+                            ],
+                            "parameters": {
+                                "sinkName": {
+                                    "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
+                                    "location": "path",
+                                    "pattern": "^folders/[^/]+/sinks/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "uniqueWriterIdentity": {
+                                    "description": "Optional. See sinks.create for a description of this field. When updating a sink, the effect of this field on the value of writer_identity in the updated sink depends on both the old and new values of this field: If the old and new values of this field are both false or both true, then there is no change to the sink's writer_identity. If the old value is false and the new value is true, then writer_identity is changed to a unique service account. It is an error if the old value is true and the new value is set to false or defaulted to false.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "updateMask": {
+                                    "description": "Optional. Field mask that specifies the fields in sink that need an update. A sink field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.An empty updateMask is temporarily treated as using the following mask for backwards compatibility purposes: destination,filter,includeChildren At some point in the future, behavior will be removed and specifying an empty updateMask will be an error.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+sinkName}",
+                            "request": {
+                                "$ref": "LogSink"
+                            },
+                            "response": {
+                                "$ref": "LogSink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        }
+                    }
+                }
+            }
         },
-        "createTime": {
-          "readOnly": true,
-          "type": "string",
-          "description": "Output only. The creation timestamp of the exclusion.This field may not be present for older exclusions.",
-          "format": "google-datetime"
+        "locations": {
+            "methods": {
+                "get": {
+                    "description": "Gets information about a location.",
+                    "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}",
+                    "httpMethod": "GET",
+                    "id": "logging.locations.get",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "Resource name for the location.",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+/locations/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v2/{+name}",
+                    "response": {
+                        "$ref": "Location"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                        "https://www.googleapis.com/auth/logging.admin",
+                        "https://www.googleapis.com/auth/logging.read"
+                    ]
+                },
+                "list": {
+                    "description": "Lists information about the supported locations for this service.",
+                    "flatPath": "v2/{v2Id}/{v2Id1}/locations",
+                    "httpMethod": "GET",
+                    "id": "logging.locations.list",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "filter": {
+                            "description": "The standard list filter.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "name": {
+                            "description": "The resource that owns the locations collection, if applicable.",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "pageSize": {
+                            "description": "The standard list page size.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The standard list page token.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v2/{+name}/locations",
+                    "response": {
+                        "$ref": "ListLocationsResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                        "https://www.googleapis.com/auth/logging.admin",
+                        "https://www.googleapis.com/auth/logging.read"
+                    ]
+                }
+            },
+            "resources": {
+                "buckets": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a bucket that can be used to store log entries. Once a bucket has been created, the region cannot be changed.",
+                            "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets",
+                            "httpMethod": "POST",
+                            "id": "logging.locations.buckets.create",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "bucketId": {
+                                    "description": "Required. A client-assigned identifier such as \"my-bucket\". Identifiers are limited to 100 characters and can include only letters, digits, underscores, hyphens, and periods.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The resource in which to create the bucket: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]\" Example: \"projects/my-logging-project/locations/global\"",
+                                    "location": "path",
+                                    "pattern": "^[^/]+/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+parent}/buckets",
+                            "request": {
+                                "$ref": "LogBucket"
+                            },
+                            "response": {
+                                "$ref": "LogBucket"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes a bucket. Moves the bucket to the DELETE_REQUESTED state. After 7 days, the bucket will be purged and all logs in the bucket will be permanently deleted.",
+                            "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets/{bucketsId}",
+                            "httpMethod": "DELETE",
+                            "id": "logging.locations.buckets.delete",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The full resource name of the bucket to delete. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
+                                    "location": "path",
+                                    "pattern": "^[^/]+/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets a bucket.",
+                            "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets/{bucketsId}",
+                            "httpMethod": "GET",
+                            "id": "logging.locations.buckets.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The resource name of the bucket: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
+                                    "location": "path",
+                                    "pattern": "^[^/]+/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}",
+                            "response": {
+                                "$ref": "LogBucket"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists buckets.",
+                            "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets",
+                            "httpMethod": "GET",
+                            "id": "logging.locations.buckets.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The parent resource whose buckets are to be listed: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]\" Note: The locations portion of the resource must be specified, but supplying the character - in place of LOCATION_ID will return all buckets.",
+                                    "location": "path",
+                                    "pattern": "^[^/]+/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+parent}/buckets",
+                            "response": {
+                                "$ref": "ListBucketsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates a bucket. This method replaces the following fields in the existing bucket with values from the new bucket: retention_periodIf the retention period is decreased and the bucket is locked, FAILED_PRECONDITION will be returned.If the bucket has a LifecycleState of DELETE_REQUESTED, FAILED_PRECONDITION will be returned.A buckets region may not be modified after it is created.",
+                            "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets/{bucketsId}",
+                            "httpMethod": "PATCH",
+                            "id": "logging.locations.buckets.patch",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The full resource name of the bucket to update. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\". Also requires permission \"resourcemanager.projects.updateLiens\" to set the locked property",
+                                    "location": "path",
+                                    "pattern": "^[^/]+/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "updateMask": {
+                                    "description": "Required. Field mask that specifies the fields in bucket that need an update. A bucket field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=retention_days.",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}",
+                            "request": {
+                                "$ref": "LogBucket"
+                            },
+                            "response": {
+                                "$ref": "LogBucket"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "undelete": {
+                            "description": "Undeletes a bucket. A bucket that has been deleted may be undeleted within the grace period of 7 days.",
+                            "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets/{bucketsId}:undelete",
+                            "httpMethod": "POST",
+                            "id": "logging.locations.buckets.undelete",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The full resource name of the bucket to undelete. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
+                                    "location": "path",
+                                    "pattern": "^[^/]+/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}:undelete",
+                            "request": {
+                                "$ref": "UndeleteBucketRequest"
+                            },
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "views": {
+                            "methods": {
+                                "create": {
+                                    "description": "Creates a view over logs in a bucket. A bucket may contain a maximum of 50 views.",
+                                    "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets/{bucketsId}/views",
+                                    "httpMethod": "POST",
+                                    "id": "logging.locations.buckets.views.create",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "parent": {
+                                            "description": "Required. The bucket in which to create the view \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-logging-project/locations/my-location/buckets/my-bucket\"",
+                                            "location": "path",
+                                            "pattern": "^[^/]+/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "viewId": {
+                                            "description": "Required. The id to use for this view.",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+parent}/views",
+                                    "request": {
+                                        "$ref": "LogView"
+                                    },
+                                    "response": {
+                                        "$ref": "LogView"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/logging.admin"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a view from a bucket.",
+                                    "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "logging.locations.buckets.views.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The full resource name of the view to delete: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
+                                            "location": "path",
+                                            "pattern": "^[^/]+/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+name}",
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/logging.admin"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets a view.",
+                                    "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
+                                    "httpMethod": "GET",
+                                    "id": "logging.locations.buckets.views.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The resource name of the policy: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
+                                            "location": "path",
+                                            "pattern": "^[^/]+/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+name}",
+                                    "response": {
+                                        "$ref": "LogView"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                        "https://www.googleapis.com/auth/logging.admin",
+                                        "https://www.googleapis.com/auth/logging.read"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists views on a bucket.",
+                                    "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets/{bucketsId}/views",
+                                    "httpMethod": "GET",
+                                    "id": "logging.locations.buckets.views.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "pageSize": {
+                                            "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The bucket whose views are to be listed: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" ",
+                                            "location": "path",
+                                            "pattern": "^[^/]+/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+parent}/views",
+                                    "response": {
+                                        "$ref": "ListViewsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                        "https://www.googleapis.com/auth/logging.admin",
+                                        "https://www.googleapis.com/auth/logging.read"
+                                    ]
+                                },
+                                "patch": {
+                                    "description": "Updates a view. This method replaces the following fields in the existing view with values from the new view: filter.",
+                                    "flatPath": "v2/{v2Id}/{v2Id1}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
+                                    "httpMethod": "PATCH",
+                                    "id": "logging.locations.buckets.views.patch",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The full resource name of the view to update \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
+                                            "location": "path",
+                                            "pattern": "^[^/]+/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "updateMask": {
+                                            "description": "Optional. Field mask that specifies the fields in view that need an update. A field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
+                                            "format": "google-fieldmask",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+name}",
+                                    "request": {
+                                        "$ref": "LogView"
+                                    },
+                                    "response": {
+                                        "$ref": "LogView"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/logging.admin"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                }
+            }
         },
-        "disabled": {
-          "description": "Optional. If set to True, then this exclusion is disabled and it does not exclude any log entries. You can update an exclusion to change the value of this field.",
-          "type": "boolean"
+        "logs": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes all the log entries in a log for the _Default Log Bucket. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.",
+                    "flatPath": "v2/{v2Id}/{v2Id1}/logs/{logsId}",
+                    "httpMethod": "DELETE",
+                    "id": "logging.logs.delete",
+                    "parameterOrder": [
+                        "logName"
+                    ],
+                    "parameters": {
+                        "logName": {
+                            "description": "Required. The resource name of the log to delete: \"projects/[PROJECT_ID]/logs/[LOG_ID]\" \"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\" \"folders/[FOLDER_ID]/logs/[LOG_ID]\" [LOG_ID] must be URL-encoded. For example, \"projects/my-project-id/logs/syslog\", \"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity\". For more information about log names, see LogEntry.",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+/logs/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v2/{+logName}",
+                    "response": {
+                        "$ref": "Empty"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/logging.admin"
+                    ]
+                },
+                "list": {
+                    "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.",
+                    "flatPath": "v2/{v2Id}/{v2Id1}/logs",
+                    "httpMethod": "GET",
+                    "id": "logging.logs.list",
+                    "parameterOrder": [
+                        "parent"
+                    ],
+                    "parameters": {
+                        "pageSize": {
+                            "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "parent": {
+                            "description": "Required. The resource name that owns the logs: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "resourceNames": {
+                            "description": "Optional. The resource name that owns the logs: projects/PROJECT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID organization/ORGANIZATION_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID billingAccounts/BILLING_ACCOUNT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID folders/FOLDER_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_IDTo support legacy queries, it could also be: \"projects/PROJECT_ID\" \"organizations/ORGANIZATION_ID\" \"billingAccounts/BILLING_ACCOUNT_ID\" \"folders/FOLDER_ID\"",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v2/{+parent}/logs",
+                    "response": {
+                        "$ref": "ListLogsResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                        "https://www.googleapis.com/auth/logging.admin",
+                        "https://www.googleapis.com/auth/logging.read"
+                    ]
+                }
+            }
         },
-        "updateTime": {
-          "format": "google-datetime",
-          "description": "Output only. The last update timestamp of the exclusion.This field may not be present for older exclusions.",
-          "readOnly": true,
-          "type": "string"
+        "monitoredResourceDescriptors": {
+            "methods": {
+                "list": {
+                    "description": "Lists the descriptors for monitored resource types used by Logging.",
+                    "flatPath": "v2/monitoredResourceDescriptors",
+                    "httpMethod": "GET",
+                    "id": "logging.monitoredResourceDescriptors.list",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "pageSize": {
+                            "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v2/monitoredResourceDescriptors",
+                    "response": {
+                        "$ref": "ListMonitoredResourceDescriptorsResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                        "https://www.googleapis.com/auth/logging.admin",
+                        "https://www.googleapis.com/auth/logging.read"
+                    ]
+                }
+            }
         },
-        "filter": {
-          "type": "string",
-          "description": "Required. An advanced logs filter (https://cloud.google.com/logging/docs/view/advanced-queries) that matches the log entries to be excluded. By using the sample function (https://cloud.google.com/logging/docs/view/advanced-queries#sample), you can exclude less than 100% of the matching log entries. For example, the following query matches 99% of low-severity log entries from Google Cloud Storage buckets:\"resource.type=gcs_bucket severity\u003cERROR sample(insertId, 0.99)\""
+        "organizations": {
+            "methods": {
+                "getCmekSettings": {
+                    "description": "Gets the Logs Router CMEK settings for the given resource.Note: CMEK for the Logs Router can currently only be configured for GCP organizations. Once configured, it applies to all projects and folders in the GCP organization.See Enabling CMEK for Logs Router (https://cloud.google.com/logging/docs/routing/managed-encryption) for more information.",
+                    "flatPath": "v2/organizations/{organizationsId}/cmekSettings",
+                    "httpMethod": "GET",
+                    "id": "logging.organizations.getCmekSettings",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "Required. The resource for which to retrieve CMEK settings. \"projects/[PROJECT_ID]/cmekSettings\" \"organizations/[ORGANIZATION_ID]/cmekSettings\" \"billingAccounts/[BILLING_ACCOUNT_ID]/cmekSettings\" \"folders/[FOLDER_ID]/cmekSettings\" Example: \"organizations/12345/cmekSettings\".Note: CMEK for the Logs Router can currently only be configured for GCP organizations. Once configured, it applies to all projects and folders in the GCP organization.",
+                            "location": "path",
+                            "pattern": "^organizations/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v2/{+name}/cmekSettings",
+                    "response": {
+                        "$ref": "CmekSettings"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                        "https://www.googleapis.com/auth/logging.admin",
+                        "https://www.googleapis.com/auth/logging.read"
+                    ]
+                },
+                "updateCmekSettings": {
+                    "description": "Updates the Logs Router CMEK settings for the given resource.Note: CMEK for the Logs Router can currently only be configured for GCP organizations. Once configured, it applies to all projects and folders in the GCP organization.UpdateCmekSettings will fail if 1) kms_key_name is invalid, or 2) the associated service account does not have the required roles/cloudkms.cryptoKeyEncrypterDecrypter role assigned for the key, or 3) access to the key is disabled.See Enabling CMEK for Logs Router (https://cloud.google.com/logging/docs/routing/managed-encryption) for more information.",
+                    "flatPath": "v2/organizations/{organizationsId}/cmekSettings",
+                    "httpMethod": "PATCH",
+                    "id": "logging.organizations.updateCmekSettings",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "Required. The resource name for the CMEK settings to update. \"projects/[PROJECT_ID]/cmekSettings\" \"organizations/[ORGANIZATION_ID]/cmekSettings\" \"billingAccounts/[BILLING_ACCOUNT_ID]/cmekSettings\" \"folders/[FOLDER_ID]/cmekSettings\" Example: \"organizations/12345/cmekSettings\".Note: CMEK for the Logs Router can currently only be configured for GCP organizations. Once configured, it applies to all projects and folders in the GCP organization.",
+                            "location": "path",
+                            "pattern": "^organizations/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "updateMask": {
+                            "description": "Optional. Field mask identifying which fields from cmek_settings should be updated. A field will be overwritten if and only if it is in the update mask. Output only fields cannot be updated.See FieldMask for more information.Example: \"updateMask=kmsKeyName\"",
+                            "format": "google-fieldmask",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v2/{+name}/cmekSettings",
+                    "request": {
+                        "$ref": "CmekSettings"
+                    },
+                    "response": {
+                        "$ref": "CmekSettings"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/logging.admin"
+                    ]
+                }
+            },
+            "resources": {
+                "exclusions": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a new exclusion in a specified parent resource. Only log entries belonging to that resource can be excluded. You can have up to 10 exclusions in a resource.",
+                            "flatPath": "v2/organizations/{organizationsId}/exclusions",
+                            "httpMethod": "POST",
+                            "id": "logging.organizations.exclusions.create",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. The parent resource in which to create the exclusion: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" Examples: \"projects/my-logging-project\", \"organizations/123456789\".",
+                                    "location": "path",
+                                    "pattern": "^organizations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+parent}/exclusions",
+                            "request": {
+                                "$ref": "LogExclusion"
+                            },
+                            "response": {
+                                "$ref": "LogExclusion"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes an exclusion.",
+                            "flatPath": "v2/organizations/{organizationsId}/exclusions/{exclusionsId}",
+                            "httpMethod": "DELETE",
+                            "id": "logging.organizations.exclusions.delete",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The resource name of an existing exclusion to delete: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
+                                    "location": "path",
+                                    "pattern": "^organizations/[^/]+/exclusions/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets the description of an exclusion.",
+                            "flatPath": "v2/organizations/{organizationsId}/exclusions/{exclusionsId}",
+                            "httpMethod": "GET",
+                            "id": "logging.organizations.exclusions.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The resource name of an existing exclusion: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
+                                    "location": "path",
+                                    "pattern": "^organizations/[^/]+/exclusions/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}",
+                            "response": {
+                                "$ref": "LogExclusion"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists all the exclusions in a parent resource.",
+                            "flatPath": "v2/organizations/{organizationsId}/exclusions",
+                            "httpMethod": "GET",
+                            "id": "logging.organizations.exclusions.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The parent resource whose exclusions are to be listed. \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
+                                    "location": "path",
+                                    "pattern": "^organizations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+parent}/exclusions",
+                            "response": {
+                                "$ref": "ListExclusionsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Changes one or more properties of an existing exclusion.",
+                            "flatPath": "v2/organizations/{organizationsId}/exclusions/{exclusionsId}",
+                            "httpMethod": "PATCH",
+                            "id": "logging.organizations.exclusions.patch",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The resource name of the exclusion to update: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
+                                    "location": "path",
+                                    "pattern": "^organizations/[^/]+/exclusions/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "updateMask": {
+                                    "description": "Required. A non-empty list of fields to change in the existing exclusion. New values for the fields are taken from the corresponding fields in the LogExclusion included in this request. Fields not mentioned in update_mask are not changed and are ignored in the request.For example, to change the filter and description of an exclusion, specify an update_mask of \"filter,description\".",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}",
+                            "request": {
+                                "$ref": "LogExclusion"
+                            },
+                            "response": {
+                                "$ref": "LogExclusion"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        }
+                    }
+                },
+                "locations": {
+                    "methods": {
+                        "get": {
+                            "description": "Gets information about a location.",
+                            "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}",
+                            "httpMethod": "GET",
+                            "id": "logging.organizations.locations.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Resource name for the location.",
+                                    "location": "path",
+                                    "pattern": "^organizations/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}",
+                            "response": {
+                                "$ref": "Location"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists information about the supported locations for this service.",
+                            "flatPath": "v2/organizations/{organizationsId}/locations",
+                            "httpMethod": "GET",
+                            "id": "logging.organizations.locations.list",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "The standard list filter.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "name": {
+                                    "description": "The resource that owns the locations collection, if applicable.",
+                                    "location": "path",
+                                    "pattern": "^organizations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "The standard list page size.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The standard list page token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}/locations",
+                            "response": {
+                                "$ref": "ListLocationsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "buckets": {
+                            "methods": {
+                                "create": {
+                                    "description": "Creates a bucket that can be used to store log entries. Once a bucket has been created, the region cannot be changed.",
+                                    "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets",
+                                    "httpMethod": "POST",
+                                    "id": "logging.organizations.locations.buckets.create",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "bucketId": {
+                                            "description": "Required. A client-assigned identifier such as \"my-bucket\". Identifiers are limited to 100 characters and can include only letters, digits, underscores, hyphens, and periods.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The resource in which to create the bucket: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]\" Example: \"projects/my-logging-project/locations/global\"",
+                                            "location": "path",
+                                            "pattern": "^organizations/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+parent}/buckets",
+                                    "request": {
+                                        "$ref": "LogBucket"
+                                    },
+                                    "response": {
+                                        "$ref": "LogBucket"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/logging.admin"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a bucket. Moves the bucket to the DELETE_REQUESTED state. After 7 days, the bucket will be purged and all logs in the bucket will be permanently deleted.",
+                                    "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets/{bucketsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "logging.organizations.locations.buckets.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The full resource name of the bucket to delete. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
+                                            "location": "path",
+                                            "pattern": "^organizations/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+name}",
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/logging.admin"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets a bucket.",
+                                    "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets/{bucketsId}",
+                                    "httpMethod": "GET",
+                                    "id": "logging.organizations.locations.buckets.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The resource name of the bucket: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
+                                            "location": "path",
+                                            "pattern": "^organizations/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+name}",
+                                    "response": {
+                                        "$ref": "LogBucket"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                        "https://www.googleapis.com/auth/logging.admin",
+                                        "https://www.googleapis.com/auth/logging.read"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists buckets.",
+                                    "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets",
+                                    "httpMethod": "GET",
+                                    "id": "logging.organizations.locations.buckets.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "pageSize": {
+                                            "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The parent resource whose buckets are to be listed: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]\" Note: The locations portion of the resource must be specified, but supplying the character - in place of LOCATION_ID will return all buckets.",
+                                            "location": "path",
+                                            "pattern": "^organizations/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+parent}/buckets",
+                                    "response": {
+                                        "$ref": "ListBucketsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                        "https://www.googleapis.com/auth/logging.admin",
+                                        "https://www.googleapis.com/auth/logging.read"
+                                    ]
+                                },
+                                "patch": {
+                                    "description": "Updates a bucket. This method replaces the following fields in the existing bucket with values from the new bucket: retention_periodIf the retention period is decreased and the bucket is locked, FAILED_PRECONDITION will be returned.If the bucket has a LifecycleState of DELETE_REQUESTED, FAILED_PRECONDITION will be returned.A buckets region may not be modified after it is created.",
+                                    "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets/{bucketsId}",
+                                    "httpMethod": "PATCH",
+                                    "id": "logging.organizations.locations.buckets.patch",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The full resource name of the bucket to update. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\". Also requires permission \"resourcemanager.projects.updateLiens\" to set the locked property",
+                                            "location": "path",
+                                            "pattern": "^organizations/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "updateMask": {
+                                            "description": "Required. Field mask that specifies the fields in bucket that need an update. A bucket field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=retention_days.",
+                                            "format": "google-fieldmask",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+name}",
+                                    "request": {
+                                        "$ref": "LogBucket"
+                                    },
+                                    "response": {
+                                        "$ref": "LogBucket"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/logging.admin"
+                                    ]
+                                },
+                                "undelete": {
+                                    "description": "Undeletes a bucket. A bucket that has been deleted may be undeleted within the grace period of 7 days.",
+                                    "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets/{bucketsId}:undelete",
+                                    "httpMethod": "POST",
+                                    "id": "logging.organizations.locations.buckets.undelete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The full resource name of the bucket to undelete. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
+                                            "location": "path",
+                                            "pattern": "^organizations/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+name}:undelete",
+                                    "request": {
+                                        "$ref": "UndeleteBucketRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/logging.admin"
+                                    ]
+                                }
+                            },
+                            "resources": {
+                                "views": {
+                                    "methods": {
+                                        "create": {
+                                            "description": "Creates a view over logs in a bucket. A bucket may contain a maximum of 50 views.",
+                                            "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets/{bucketsId}/views",
+                                            "httpMethod": "POST",
+                                            "id": "logging.organizations.locations.buckets.views.create",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "parent": {
+                                                    "description": "Required. The bucket in which to create the view \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-logging-project/locations/my-location/buckets/my-bucket\"",
+                                                    "location": "path",
+                                                    "pattern": "^organizations/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "viewId": {
+                                                    "description": "Required. The id to use for this view.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v2/{+parent}/views",
+                                            "request": {
+                                                "$ref": "LogView"
+                                            },
+                                            "response": {
+                                                "$ref": "LogView"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/logging.admin"
+                                            ]
+                                        },
+                                        "delete": {
+                                            "description": "Deletes a view from a bucket.",
+                                            "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
+                                            "httpMethod": "DELETE",
+                                            "id": "logging.organizations.locations.buckets.views.delete",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. The full resource name of the view to delete: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
+                                                    "location": "path",
+                                                    "pattern": "^organizations/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v2/{+name}",
+                                            "response": {
+                                                "$ref": "Empty"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/logging.admin"
+                                            ]
+                                        },
+                                        "get": {
+                                            "description": "Gets a view.",
+                                            "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
+                                            "httpMethod": "GET",
+                                            "id": "logging.organizations.locations.buckets.views.get",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. The resource name of the policy: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
+                                                    "location": "path",
+                                                    "pattern": "^organizations/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v2/{+name}",
+                                            "response": {
+                                                "$ref": "LogView"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                                "https://www.googleapis.com/auth/logging.admin",
+                                                "https://www.googleapis.com/auth/logging.read"
+                                            ]
+                                        },
+                                        "list": {
+                                            "description": "Lists views on a bucket.",
+                                            "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets/{bucketsId}/views",
+                                            "httpMethod": "GET",
+                                            "id": "logging.organizations.locations.buckets.views.list",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "pageSize": {
+                                                    "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                                    "format": "int32",
+                                                    "location": "query",
+                                                    "type": "integer"
+                                                },
+                                                "pageToken": {
+                                                    "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "parent": {
+                                                    "description": "Required. The bucket whose views are to be listed: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" ",
+                                                    "location": "path",
+                                                    "pattern": "^organizations/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v2/{+parent}/views",
+                                            "response": {
+                                                "$ref": "ListViewsResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                                "https://www.googleapis.com/auth/logging.admin",
+                                                "https://www.googleapis.com/auth/logging.read"
+                                            ]
+                                        },
+                                        "patch": {
+                                            "description": "Updates a view. This method replaces the following fields in the existing view with values from the new view: filter.",
+                                            "flatPath": "v2/organizations/{organizationsId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
+                                            "httpMethod": "PATCH",
+                                            "id": "logging.organizations.locations.buckets.views.patch",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. The full resource name of the view to update \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
+                                                    "location": "path",
+                                                    "pattern": "^organizations/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "updateMask": {
+                                                    "description": "Optional. Field mask that specifies the fields in view that need an update. A field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
+                                                    "format": "google-fieldmask",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v2/{+name}",
+                                            "request": {
+                                                "$ref": "LogView"
+                                            },
+                                            "response": {
+                                                "$ref": "LogView"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/logging.admin"
+                                            ]
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                },
+                "logs": {
+                    "methods": {
+                        "delete": {
+                            "description": "Deletes all the log entries in a log for the _Default Log Bucket. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.",
+                            "flatPath": "v2/organizations/{organizationsId}/logs/{logsId}",
+                            "httpMethod": "DELETE",
+                            "id": "logging.organizations.logs.delete",
+                            "parameterOrder": [
+                                "logName"
+                            ],
+                            "parameters": {
+                                "logName": {
+                                    "description": "Required. The resource name of the log to delete: \"projects/[PROJECT_ID]/logs/[LOG_ID]\" \"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\" \"folders/[FOLDER_ID]/logs/[LOG_ID]\" [LOG_ID] must be URL-encoded. For example, \"projects/my-project-id/logs/syslog\", \"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity\". For more information about log names, see LogEntry.",
+                                    "location": "path",
+                                    "pattern": "^organizations/[^/]+/logs/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+logName}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.",
+                            "flatPath": "v2/organizations/{organizationsId}/logs",
+                            "httpMethod": "GET",
+                            "id": "logging.organizations.logs.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The resource name that owns the logs: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
+                                    "location": "path",
+                                    "pattern": "^organizations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "resourceNames": {
+                                    "description": "Optional. The resource name that owns the logs: projects/PROJECT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID organization/ORGANIZATION_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID billingAccounts/BILLING_ACCOUNT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID folders/FOLDER_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_IDTo support legacy queries, it could also be: \"projects/PROJECT_ID\" \"organizations/ORGANIZATION_ID\" \"billingAccounts/BILLING_ACCOUNT_ID\" \"folders/FOLDER_ID\"",
+                                    "location": "query",
+                                    "repeated": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+parent}/logs",
+                            "response": {
+                                "$ref": "ListLogsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        }
+                    }
+                },
+                "sinks": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a sink that exports specified log entries to a destination. The export of newly-ingested log entries begins immediately, unless the sink's writer_identity is not permitted to write to the destination. A sink can export log entries only from the resource owning the sink.",
+                            "flatPath": "v2/organizations/{organizationsId}/sinks",
+                            "httpMethod": "POST",
+                            "id": "logging.organizations.sinks.create",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. The resource in which to create the sink: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" Examples: \"projects/my-logging-project\", \"organizations/123456789\".",
+                                    "location": "path",
+                                    "pattern": "^organizations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "uniqueWriterIdentity": {
+                                    "description": "Optional. Determines the kind of IAM identity returned as writer_identity in the new sink. If this value is omitted or set to false, and if the sink's parent is a project, then the value returned as writer_identity is the same group or service account used by Logging before the addition of writer identities to this API. The sink's destination must be in the same project as the sink itself.If this field is set to true, or if the sink is owned by a non-project resource such as an organization, then the value of writer_identity will be a unique service account used only for exports from the new sink. For more information, see writer_identity in LogSink.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                }
+                            },
+                            "path": "v2/{+parent}/sinks",
+                            "request": {
+                                "$ref": "LogSink"
+                            },
+                            "response": {
+                                "$ref": "LogSink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes a sink. If the sink has a unique writer_identity, then that service account is also deleted.",
+                            "flatPath": "v2/organizations/{organizationsId}/sinks/{sinksId}",
+                            "httpMethod": "DELETE",
+                            "id": "logging.organizations.sinks.delete",
+                            "parameterOrder": [
+                                "sinkName"
+                            ],
+                            "parameters": {
+                                "sinkName": {
+                                    "description": "Required. The full resource name of the sink to delete, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
+                                    "location": "path",
+                                    "pattern": "^organizations/[^/]+/sinks/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+sinkName}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets a sink.",
+                            "flatPath": "v2/organizations/{organizationsId}/sinks/{sinksId}",
+                            "httpMethod": "GET",
+                            "id": "logging.organizations.sinks.get",
+                            "parameterOrder": [
+                                "sinkName"
+                            ],
+                            "parameters": {
+                                "sinkName": {
+                                    "description": "Required. The resource name of the sink: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
+                                    "location": "path",
+                                    "pattern": "^organizations/[^/]+/sinks/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+sinkName}",
+                            "response": {
+                                "$ref": "LogSink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists sinks.",
+                            "flatPath": "v2/organizations/{organizationsId}/sinks",
+                            "httpMethod": "GET",
+                            "id": "logging.organizations.sinks.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The parent resource whose sinks are to be listed: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
+                                    "location": "path",
+                                    "pattern": "^organizations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+parent}/sinks",
+                            "response": {
+                                "$ref": "ListSinksResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates a sink. This method replaces the following fields in the existing sink with values from the new sink: destination, and filter.The updated sink might also have a new writer_identity; see the unique_writer_identity field.",
+                            "flatPath": "v2/organizations/{organizationsId}/sinks/{sinksId}",
+                            "httpMethod": "PATCH",
+                            "id": "logging.organizations.sinks.patch",
+                            "parameterOrder": [
+                                "sinkName"
+                            ],
+                            "parameters": {
+                                "sinkName": {
+                                    "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
+                                    "location": "path",
+                                    "pattern": "^organizations/[^/]+/sinks/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "uniqueWriterIdentity": {
+                                    "description": "Optional. See sinks.create for a description of this field. When updating a sink, the effect of this field on the value of writer_identity in the updated sink depends on both the old and new values of this field: If the old and new values of this field are both false or both true, then there is no change to the sink's writer_identity. If the old value is false and the new value is true, then writer_identity is changed to a unique service account. It is an error if the old value is true and the new value is set to false or defaulted to false.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "updateMask": {
+                                    "description": "Optional. Field mask that specifies the fields in sink that need an update. A sink field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.An empty updateMask is temporarily treated as using the following mask for backwards compatibility purposes: destination,filter,includeChildren At some point in the future, behavior will be removed and specifying an empty updateMask will be an error.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+sinkName}",
+                            "request": {
+                                "$ref": "LogSink"
+                            },
+                            "response": {
+                                "$ref": "LogSink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates a sink. This method replaces the following fields in the existing sink with values from the new sink: destination, and filter.The updated sink might also have a new writer_identity; see the unique_writer_identity field.",
+                            "flatPath": "v2/organizations/{organizationsId}/sinks/{sinksId}",
+                            "httpMethod": "PUT",
+                            "id": "logging.organizations.sinks.update",
+                            "parameterOrder": [
+                                "sinkName"
+                            ],
+                            "parameters": {
+                                "sinkName": {
+                                    "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
+                                    "location": "path",
+                                    "pattern": "^organizations/[^/]+/sinks/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "uniqueWriterIdentity": {
+                                    "description": "Optional. See sinks.create for a description of this field. When updating a sink, the effect of this field on the value of writer_identity in the updated sink depends on both the old and new values of this field: If the old and new values of this field are both false or both true, then there is no change to the sink's writer_identity. If the old value is false and the new value is true, then writer_identity is changed to a unique service account. It is an error if the old value is true and the new value is set to false or defaulted to false.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "updateMask": {
+                                    "description": "Optional. Field mask that specifies the fields in sink that need an update. A sink field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.An empty updateMask is temporarily treated as using the following mask for backwards compatibility purposes: destination,filter,includeChildren At some point in the future, behavior will be removed and specifying an empty updateMask will be an error.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+sinkName}",
+                            "request": {
+                                "$ref": "LogSink"
+                            },
+                            "response": {
+                                "$ref": "LogSink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        }
+                    }
+                }
+            }
         },
-        "description": {
-          "type": "string",
-          "description": "Optional. A description of this exclusion."
-        }
-      },
-      "description": "Specifies a set of log entries that are not to be stored in Logging. If your GCP resource receives a large volume of logs, you can use exclusions to reduce your chargeable logs. Exclusions are processed after log sinks, so you can export log entries before they are excluded. Note that organization-level and folder-level exclusions don't apply to child resources, and that you can't exclude audit log entries.",
-      "id": "LogExclusion"
-    },
-    "UndeleteBucketRequest": {
-      "id": "UndeleteBucketRequest",
-      "properties": {},
-      "type": "object",
-      "description": "The parameters to UndeleteBucket."
-    },
-    "ListMonitoredResourceDescriptorsResponse": {
-      "properties": {
-        "resourceDescriptors": {
-          "type": "array",
-          "description": "A list of resource descriptors.",
-          "items": {
-            "$ref": "MonitoredResourceDescriptor"
-          }
+        "projects": {
+            "resources": {
+                "exclusions": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a new exclusion in a specified parent resource. Only log entries belonging to that resource can be excluded. You can have up to 10 exclusions in a resource.",
+                            "flatPath": "v2/projects/{projectsId}/exclusions",
+                            "httpMethod": "POST",
+                            "id": "logging.projects.exclusions.create",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. The parent resource in which to create the exclusion: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" Examples: \"projects/my-logging-project\", \"organizations/123456789\".",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+parent}/exclusions",
+                            "request": {
+                                "$ref": "LogExclusion"
+                            },
+                            "response": {
+                                "$ref": "LogExclusion"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes an exclusion.",
+                            "flatPath": "v2/projects/{projectsId}/exclusions/{exclusionsId}",
+                            "httpMethod": "DELETE",
+                            "id": "logging.projects.exclusions.delete",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The resource name of an existing exclusion to delete: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/exclusions/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets the description of an exclusion.",
+                            "flatPath": "v2/projects/{projectsId}/exclusions/{exclusionsId}",
+                            "httpMethod": "GET",
+                            "id": "logging.projects.exclusions.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The resource name of an existing exclusion: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/exclusions/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}",
+                            "response": {
+                                "$ref": "LogExclusion"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists all the exclusions in a parent resource.",
+                            "flatPath": "v2/projects/{projectsId}/exclusions",
+                            "httpMethod": "GET",
+                            "id": "logging.projects.exclusions.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The parent resource whose exclusions are to be listed. \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+parent}/exclusions",
+                            "response": {
+                                "$ref": "ListExclusionsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Changes one or more properties of an existing exclusion.",
+                            "flatPath": "v2/projects/{projectsId}/exclusions/{exclusionsId}",
+                            "httpMethod": "PATCH",
+                            "id": "logging.projects.exclusions.patch",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Required. The resource name of the exclusion to update: \"projects/[PROJECT_ID]/exclusions/[EXCLUSION_ID]\" \"organizations/[ORGANIZATION_ID]/exclusions/[EXCLUSION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/exclusions/[EXCLUSION_ID]\" \"folders/[FOLDER_ID]/exclusions/[EXCLUSION_ID]\" Example: \"projects/my-project-id/exclusions/my-exclusion-id\".",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/exclusions/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "updateMask": {
+                                    "description": "Required. A non-empty list of fields to change in the existing exclusion. New values for the fields are taken from the corresponding fields in the LogExclusion included in this request. Fields not mentioned in update_mask are not changed and are ignored in the request.For example, to change the filter and description of an exclusion, specify an update_mask of \"filter,description\".",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}",
+                            "request": {
+                                "$ref": "LogExclusion"
+                            },
+                            "response": {
+                                "$ref": "LogExclusion"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        }
+                    }
+                },
+                "locations": {
+                    "methods": {
+                        "get": {
+                            "description": "Gets information about a location.",
+                            "flatPath": "v2/projects/{projectsId}/locations/{locationsId}",
+                            "httpMethod": "GET",
+                            "id": "logging.projects.locations.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Resource name for the location.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}",
+                            "response": {
+                                "$ref": "Location"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists information about the supported locations for this service.",
+                            "flatPath": "v2/projects/{projectsId}/locations",
+                            "httpMethod": "GET",
+                            "id": "logging.projects.locations.list",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "The standard list filter.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "name": {
+                                    "description": "The resource that owns the locations collection, if applicable.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "The standard list page size.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The standard list page token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+name}/locations",
+                            "response": {
+                                "$ref": "ListLocationsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "buckets": {
+                            "methods": {
+                                "create": {
+                                    "description": "Creates a bucket that can be used to store log entries. Once a bucket has been created, the region cannot be changed.",
+                                    "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets",
+                                    "httpMethod": "POST",
+                                    "id": "logging.projects.locations.buckets.create",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "bucketId": {
+                                            "description": "Required. A client-assigned identifier such as \"my-bucket\". Identifiers are limited to 100 characters and can include only letters, digits, underscores, hyphens, and periods.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The resource in which to create the bucket: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]\" Example: \"projects/my-logging-project/locations/global\"",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+parent}/buckets",
+                                    "request": {
+                                        "$ref": "LogBucket"
+                                    },
+                                    "response": {
+                                        "$ref": "LogBucket"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/logging.admin"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a bucket. Moves the bucket to the DELETE_REQUESTED state. After 7 days, the bucket will be purged and all logs in the bucket will be permanently deleted.",
+                                    "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets/{bucketsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "logging.projects.locations.buckets.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The full resource name of the bucket to delete. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+name}",
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/logging.admin"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets a bucket.",
+                                    "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets/{bucketsId}",
+                                    "httpMethod": "GET",
+                                    "id": "logging.projects.locations.buckets.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The resource name of the bucket: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+name}",
+                                    "response": {
+                                        "$ref": "LogBucket"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                        "https://www.googleapis.com/auth/logging.admin",
+                                        "https://www.googleapis.com/auth/logging.read"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists buckets.",
+                                    "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets",
+                                    "httpMethod": "GET",
+                                    "id": "logging.projects.locations.buckets.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "pageSize": {
+                                            "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The parent resource whose buckets are to be listed: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]\" Note: The locations portion of the resource must be specified, but supplying the character - in place of LOCATION_ID will return all buckets.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+parent}/buckets",
+                                    "response": {
+                                        "$ref": "ListBucketsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                        "https://www.googleapis.com/auth/logging.admin",
+                                        "https://www.googleapis.com/auth/logging.read"
+                                    ]
+                                },
+                                "patch": {
+                                    "description": "Updates a bucket. This method replaces the following fields in the existing bucket with values from the new bucket: retention_periodIf the retention period is decreased and the bucket is locked, FAILED_PRECONDITION will be returned.If the bucket has a LifecycleState of DELETE_REQUESTED, FAILED_PRECONDITION will be returned.A buckets region may not be modified after it is created.",
+                                    "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets/{bucketsId}",
+                                    "httpMethod": "PATCH",
+                                    "id": "logging.projects.locations.buckets.patch",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The full resource name of the bucket to update. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\". Also requires permission \"resourcemanager.projects.updateLiens\" to set the locked property",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "updateMask": {
+                                            "description": "Required. Field mask that specifies the fields in bucket that need an update. A bucket field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=retention_days.",
+                                            "format": "google-fieldmask",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+name}",
+                                    "request": {
+                                        "$ref": "LogBucket"
+                                    },
+                                    "response": {
+                                        "$ref": "LogBucket"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/logging.admin"
+                                    ]
+                                },
+                                "undelete": {
+                                    "description": "Undeletes a bucket. A bucket that has been deleted may be undeleted within the grace period of 7 days.",
+                                    "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets/{bucketsId}:undelete",
+                                    "httpMethod": "POST",
+                                    "id": "logging.projects.locations.buckets.undelete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The full resource name of the bucket to undelete. \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"organizations/[ORGANIZATION_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" \"folders/[FOLDER_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\".",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v2/{+name}:undelete",
+                                    "request": {
+                                        "$ref": "UndeleteBucketRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/logging.admin"
+                                    ]
+                                }
+                            },
+                            "resources": {
+                                "views": {
+                                    "methods": {
+                                        "create": {
+                                            "description": "Creates a view over logs in a bucket. A bucket may contain a maximum of 50 views.",
+                                            "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets/{bucketsId}/views",
+                                            "httpMethod": "POST",
+                                            "id": "logging.projects.locations.buckets.views.create",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "parent": {
+                                                    "description": "Required. The bucket in which to create the view \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" Example: \"projects/my-logging-project/locations/my-location/buckets/my-bucket\"",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "viewId": {
+                                                    "description": "Required. The id to use for this view.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v2/{+parent}/views",
+                                            "request": {
+                                                "$ref": "LogView"
+                                            },
+                                            "response": {
+                                                "$ref": "LogView"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/logging.admin"
+                                            ]
+                                        },
+                                        "delete": {
+                                            "description": "Deletes a view from a bucket.",
+                                            "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
+                                            "httpMethod": "DELETE",
+                                            "id": "logging.projects.locations.buckets.views.delete",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. The full resource name of the view to delete: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v2/{+name}",
+                                            "response": {
+                                                "$ref": "Empty"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/logging.admin"
+                                            ]
+                                        },
+                                        "get": {
+                                            "description": "Gets a view.",
+                                            "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
+                                            "httpMethod": "GET",
+                                            "id": "logging.projects.locations.buckets.views.get",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. The resource name of the policy: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v2/{+name}",
+                                            "response": {
+                                                "$ref": "LogView"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                                "https://www.googleapis.com/auth/logging.admin",
+                                                "https://www.googleapis.com/auth/logging.read"
+                                            ]
+                                        },
+                                        "list": {
+                                            "description": "Lists views on a bucket.",
+                                            "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets/{bucketsId}/views",
+                                            "httpMethod": "GET",
+                                            "id": "logging.projects.locations.buckets.views.list",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "pageSize": {
+                                                    "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                                    "format": "int32",
+                                                    "location": "query",
+                                                    "type": "integer"
+                                                },
+                                                "pageToken": {
+                                                    "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "parent": {
+                                                    "description": "Required. The bucket whose views are to be listed: \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]\" ",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/buckets/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v2/{+parent}/views",
+                                            "response": {
+                                                "$ref": "ListViewsResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                                "https://www.googleapis.com/auth/logging.admin",
+                                                "https://www.googleapis.com/auth/logging.read"
+                                            ]
+                                        },
+                                        "patch": {
+                                            "description": "Updates a view. This method replaces the following fields in the existing view with values from the new view: filter.",
+                                            "flatPath": "v2/projects/{projectsId}/locations/{locationsId}/buckets/{bucketsId}/views/{viewsId}",
+                                            "httpMethod": "PATCH",
+                                            "id": "logging.projects.locations.buckets.views.patch",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. The full resource name of the view to update \"projects/[PROJECT_ID]/locations/[LOCATION_ID]/buckets/[BUCKET_ID]/views/[VIEW_ID]\" Example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view-id\".",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/buckets/[^/]+/views/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "updateMask": {
+                                                    "description": "Optional. Field mask that specifies the fields in view that need an update. A field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
+                                                    "format": "google-fieldmask",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v2/{+name}",
+                                            "request": {
+                                                "$ref": "LogView"
+                                            },
+                                            "response": {
+                                                "$ref": "LogView"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform",
+                                                "https://www.googleapis.com/auth/logging.admin"
+                                            ]
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                },
+                "logs": {
+                    "methods": {
+                        "delete": {
+                            "description": "Deletes all the log entries in a log for the _Default Log Bucket. The log reappears if it receives new entries. Log entries written shortly before the delete operation might not be deleted. Entries received after the delete operation with a timestamp before the operation will be deleted.",
+                            "flatPath": "v2/projects/{projectsId}/logs/{logsId}",
+                            "httpMethod": "DELETE",
+                            "id": "logging.projects.logs.delete",
+                            "parameterOrder": [
+                                "logName"
+                            ],
+                            "parameters": {
+                                "logName": {
+                                    "description": "Required. The resource name of the log to delete: \"projects/[PROJECT_ID]/logs/[LOG_ID]\" \"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\" \"folders/[FOLDER_ID]/logs/[LOG_ID]\" [LOG_ID] must be URL-encoded. For example, \"projects/my-project-id/logs/syslog\", \"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity\". For more information about log names, see LogEntry.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/logs/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+logName}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.",
+                            "flatPath": "v2/projects/{projectsId}/logs",
+                            "httpMethod": "GET",
+                            "id": "logging.projects.logs.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The resource name that owns the logs: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "resourceNames": {
+                                    "description": "Optional. The resource name that owns the logs: projects/PROJECT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID organization/ORGANIZATION_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID billingAccounts/BILLING_ACCOUNT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID folders/FOLDER_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_IDTo support legacy queries, it could also be: \"projects/PROJECT_ID\" \"organizations/ORGANIZATION_ID\" \"billingAccounts/BILLING_ACCOUNT_ID\" \"folders/FOLDER_ID\"",
+                                    "location": "query",
+                                    "repeated": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+parent}/logs",
+                            "response": {
+                                "$ref": "ListLogsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        }
+                    }
+                },
+                "metrics": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a logs-based metric.",
+                            "flatPath": "v2/projects/{projectsId}/metrics",
+                            "httpMethod": "POST",
+                            "id": "logging.projects.metrics.create",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. The resource name of the project in which to create the metric: \"projects/[PROJECT_ID]\" The new metric must be provided in the request.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+parent}/metrics",
+                            "request": {
+                                "$ref": "LogMetric"
+                            },
+                            "response": {
+                                "$ref": "LogMetric"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.write"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes a logs-based metric.",
+                            "flatPath": "v2/projects/{projectsId}/metrics/{metricsId}",
+                            "httpMethod": "DELETE",
+                            "id": "logging.projects.metrics.delete",
+                            "parameterOrder": [
+                                "metricName"
+                            ],
+                            "parameters": {
+                                "metricName": {
+                                    "description": "Required. The resource name of the metric to delete: \"projects/[PROJECT_ID]/metrics/[METRIC_ID]\" ",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/metrics/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+metricName}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.write"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets a logs-based metric.",
+                            "flatPath": "v2/projects/{projectsId}/metrics/{metricsId}",
+                            "httpMethod": "GET",
+                            "id": "logging.projects.metrics.get",
+                            "parameterOrder": [
+                                "metricName"
+                            ],
+                            "parameters": {
+                                "metricName": {
+                                    "description": "Required. The resource name of the desired metric: \"projects/[PROJECT_ID]/metrics/[METRIC_ID]\" ",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/metrics/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+metricName}",
+                            "response": {
+                                "$ref": "LogMetric"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists logs-based metrics.",
+                            "flatPath": "v2/projects/{projectsId}/metrics",
+                            "httpMethod": "GET",
+                            "id": "logging.projects.metrics.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The name of the project containing the metrics: \"projects/[PROJECT_ID]\" ",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+parent}/metrics",
+                            "response": {
+                                "$ref": "ListLogMetricsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "update": {
+                            "description": "Creates or updates a logs-based metric.",
+                            "flatPath": "v2/projects/{projectsId}/metrics/{metricsId}",
+                            "httpMethod": "PUT",
+                            "id": "logging.projects.metrics.update",
+                            "parameterOrder": [
+                                "metricName"
+                            ],
+                            "parameters": {
+                                "metricName": {
+                                    "description": "Required. The resource name of the metric to update: \"projects/[PROJECT_ID]/metrics/[METRIC_ID]\" The updated metric must be provided in the request and it's name field must be the same as [METRIC_ID] If the metric does not exist in [PROJECT_ID], then a new metric is created.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/metrics/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+metricName}",
+                            "request": {
+                                "$ref": "LogMetric"
+                            },
+                            "response": {
+                                "$ref": "LogMetric"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.write"
+                            ]
+                        }
+                    }
+                },
+                "sinks": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a sink that exports specified log entries to a destination. The export of newly-ingested log entries begins immediately, unless the sink's writer_identity is not permitted to write to the destination. A sink can export log entries only from the resource owning the sink.",
+                            "flatPath": "v2/projects/{projectsId}/sinks",
+                            "httpMethod": "POST",
+                            "id": "logging.projects.sinks.create",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. The resource in which to create the sink: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" Examples: \"projects/my-logging-project\", \"organizations/123456789\".",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "uniqueWriterIdentity": {
+                                    "description": "Optional. Determines the kind of IAM identity returned as writer_identity in the new sink. If this value is omitted or set to false, and if the sink's parent is a project, then the value returned as writer_identity is the same group or service account used by Logging before the addition of writer identities to this API. The sink's destination must be in the same project as the sink itself.If this field is set to true, or if the sink is owned by a non-project resource such as an organization, then the value of writer_identity will be a unique service account used only for exports from the new sink. For more information, see writer_identity in LogSink.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                }
+                            },
+                            "path": "v2/{+parent}/sinks",
+                            "request": {
+                                "$ref": "LogSink"
+                            },
+                            "response": {
+                                "$ref": "LogSink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes a sink. If the sink has a unique writer_identity, then that service account is also deleted.",
+                            "flatPath": "v2/projects/{projectsId}/sinks/{sinksId}",
+                            "httpMethod": "DELETE",
+                            "id": "logging.projects.sinks.delete",
+                            "parameterOrder": [
+                                "sinkName"
+                            ],
+                            "parameters": {
+                                "sinkName": {
+                                    "description": "Required. The full resource name of the sink to delete, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/sinks/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+sinkName}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets a sink.",
+                            "flatPath": "v2/projects/{projectsId}/sinks/{sinksId}",
+                            "httpMethod": "GET",
+                            "id": "logging.projects.sinks.get",
+                            "parameterOrder": [
+                                "sinkName"
+                            ],
+                            "parameters": {
+                                "sinkName": {
+                                    "description": "Required. The resource name of the sink: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/sinks/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+sinkName}",
+                            "response": {
+                                "$ref": "LogSink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists sinks.",
+                            "flatPath": "v2/projects/{projectsId}/sinks",
+                            "httpMethod": "GET",
+                            "id": "logging.projects.sinks.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. The parent resource whose sinks are to be listed: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+parent}/sinks",
+                            "response": {
+                                "$ref": "ListSinksResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/logging.admin",
+                                "https://www.googleapis.com/auth/logging.read"
+                            ]
+                        },
+                        "patch": {
+                            "description": "Updates a sink. This method replaces the following fields in the existing sink with values from the new sink: destination, and filter.The updated sink might also have a new writer_identity; see the unique_writer_identity field.",
+                            "flatPath": "v2/projects/{projectsId}/sinks/{sinksId}",
+                            "httpMethod": "PATCH",
+                            "id": "logging.projects.sinks.patch",
+                            "parameterOrder": [
+                                "sinkName"
+                            ],
+                            "parameters": {
+                                "sinkName": {
+                                    "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/sinks/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "uniqueWriterIdentity": {
+                                    "description": "Optional. See sinks.create for a description of this field. When updating a sink, the effect of this field on the value of writer_identity in the updated sink depends on both the old and new values of this field: If the old and new values of this field are both false or both true, then there is no change to the sink's writer_identity. If the old value is false and the new value is true, then writer_identity is changed to a unique service account. It is an error if the old value is true and the new value is set to false or defaulted to false.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "updateMask": {
+                                    "description": "Optional. Field mask that specifies the fields in sink that need an update. A sink field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.An empty updateMask is temporarily treated as using the following mask for backwards compatibility purposes: destination,filter,includeChildren At some point in the future, behavior will be removed and specifying an empty updateMask will be an error.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+sinkName}",
+                            "request": {
+                                "$ref": "LogSink"
+                            },
+                            "response": {
+                                "$ref": "LogSink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates a sink. This method replaces the following fields in the existing sink with values from the new sink: destination, and filter.The updated sink might also have a new writer_identity; see the unique_writer_identity field.",
+                            "flatPath": "v2/projects/{projectsId}/sinks/{sinksId}",
+                            "httpMethod": "PUT",
+                            "id": "logging.projects.sinks.update",
+                            "parameterOrder": [
+                                "sinkName"
+                            ],
+                            "parameters": {
+                                "sinkName": {
+                                    "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/sinks/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "uniqueWriterIdentity": {
+                                    "description": "Optional. See sinks.create for a description of this field. When updating a sink, the effect of this field on the value of writer_identity in the updated sink depends on both the old and new values of this field: If the old and new values of this field are both false or both true, then there is no change to the sink's writer_identity. If the old value is false and the new value is true, then writer_identity is changed to a unique service account. It is an error if the old value is true and the new value is set to false or defaulted to false.",
+                                    "location": "query",
+                                    "type": "boolean"
+                                },
+                                "updateMask": {
+                                    "description": "Optional. Field mask that specifies the fields in sink that need an update. A sink field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.An empty updateMask is temporarily treated as using the following mask for backwards compatibility purposes: destination,filter,includeChildren At some point in the future, behavior will be removed and specifying an empty updateMask will be an error.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
+                                    "format": "google-fieldmask",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v2/{+sinkName}",
+                            "request": {
+                                "$ref": "LogSink"
+                            },
+                            "response": {
+                                "$ref": "LogSink"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/logging.admin"
+                            ]
+                        }
+                    }
+                }
+            }
         },
-        "nextPageToken": {
-          "type": "string",
-          "description": "If there might be more results than those appearing in this response, then nextPageToken is included. To get the next set of results, call this method again using the value of nextPageToken as pageToken."
-        }
-      },
-      "type": "object",
-      "description": "Result returned from ListMonitoredResourceDescriptors.",
-      "id": "ListMonitoredResourceDescriptorsResponse"
-    },
-    "MetricDescriptorMetadata": {
-      "properties": {
-        "launchStage": {
-          "enumDescriptions": [
-            "Do not use this default value.",
-            "The feature is not yet implemented. Users can not use it.",
-            "Prelaunch features are hidden from users and are only visible internally.",
-            "Early Access features are limited to a closed group of testers. To use these features, you must sign up in advance and sign a Trusted Tester agreement (which includes confidentiality provisions). These features may be unstable, changed in backward-incompatible ways, and are not guaranteed to be released.",
-            "Alpha is a limited availability test for releases before they are cleared for widespread use. By Alpha, all significant design issues are resolved and we are in the process of verifying functionality. Alpha customers need to apply for access, agree to applicable terms, and have their projects allowlisted. Alpha releases don’t have to be feature complete, no SLAs are provided, and there are no technical support obligations, but they will be far enough along that customers can actually use them in test environments or for limited-use tests -- just like they would in normal production cases.",
-            "Beta is the point at which we are ready to open a release for any customer to use. There are no SLA or technical support obligations in a Beta release. Products will be complete from a feature perspective, but may have some open outstanding issues. Beta releases are suitable for limited production use cases.",
-            "GA features are open to all developers and are considered stable and fully qualified for production use.",
-            "Deprecated features are scheduled to be shut down and removed. For more information, see the “Deprecation Policy” section of our Terms of Service (https://cloud.google.com/terms/) and the Google Cloud Platform Subject to the Deprecation Policy (https://cloud.google.com/terms/deprecation) documentation."
-          ],
-          "description": "Deprecated. Must use the MetricDescriptor.launch_stage instead.",
-          "enum": [
-            "LAUNCH_STAGE_UNSPECIFIED",
-            "UNIMPLEMENTED",
-            "PRELAUNCH",
-            "EARLY_ACCESS",
-            "ALPHA",
-            "BETA",
-            "GA",
-            "DEPRECATED"
-          ],
-          "type": "string"
-        },
-        "ingestDelay": {
-          "type": "string",
-          "format": "google-duration",
-          "description": "The delay of data points caused by ingestion. Data points older than this age are guaranteed to be ingested and available to be read, excluding data loss due to errors."
-        },
-        "samplePeriod": {
-          "description": "The sampling period of metric data points. For metrics which are written periodically, consecutive data points are stored at this time interval, excluding data loss due to errors. Metrics with a higher granularity have a smaller sampling period.",
-          "type": "string",
-          "format": "google-duration"
-        }
-      },
-      "description": "Additional annotations that can be used to guide the usage of a metric.",
-      "id": "MetricDescriptorMetadata",
-      "type": "object"
-    },
-    "LogView": {
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "The resource name of the view. For example \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view"
-        },
-        "updateTime": {
-          "format": "google-datetime",
-          "description": "Output only. The last update timestamp of the view.",
-          "readOnly": true,
-          "type": "string"
-        },
-        "createTime": {
-          "description": "Output only. The creation timestamp of the view.",
-          "type": "string",
-          "format": "google-datetime",
-          "readOnly": true
-        },
-        "description": {
-          "description": "Describes this view.",
-          "type": "string"
-        },
-        "filter": {
-          "description": "Filter that restricts which log entries in a bucket are visible in this view. Filters are restricted to be a logical AND of ==/!= of any of the following: originating project/folder/organization/billing account. resource type log id Example: SOURCE(\"projects/myproject\") AND resource.type = \"gce_instance\" AND LOG_ID(\"stdout\")",
-          "type": "string"
-        }
-      },
-      "id": "LogView",
-      "description": "Describes a view over logs in a bucket.",
-      "type": "object"
-    },
-    "ListSinksResponse": {
-      "properties": {
         "sinks": {
-          "description": "A list of sinks.",
-          "items": {
-            "$ref": "LogSink"
-          },
-          "type": "array"
+            "methods": {
+                "create": {
+                    "description": "Creates a sink that exports specified log entries to a destination. The export of newly-ingested log entries begins immediately, unless the sink's writer_identity is not permitted to write to the destination. A sink can export log entries only from the resource owning the sink.",
+                    "flatPath": "v2/{v2Id}/{v2Id1}/sinks",
+                    "httpMethod": "POST",
+                    "id": "logging.sinks.create",
+                    "parameterOrder": [
+                        "parent"
+                    ],
+                    "parameters": {
+                        "parent": {
+                            "description": "Required. The resource in which to create the sink: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" Examples: \"projects/my-logging-project\", \"organizations/123456789\".",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "uniqueWriterIdentity": {
+                            "description": "Optional. Determines the kind of IAM identity returned as writer_identity in the new sink. If this value is omitted or set to false, and if the sink's parent is a project, then the value returned as writer_identity is the same group or service account used by Logging before the addition of writer identities to this API. The sink's destination must be in the same project as the sink itself.If this field is set to true, or if the sink is owned by a non-project resource such as an organization, then the value of writer_identity will be a unique service account used only for exports from the new sink. For more information, see writer_identity in LogSink.",
+                            "location": "query",
+                            "type": "boolean"
+                        }
+                    },
+                    "path": "v2/{+parent}/sinks",
+                    "request": {
+                        "$ref": "LogSink"
+                    },
+                    "response": {
+                        "$ref": "LogSink"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/logging.admin"
+                    ]
+                },
+                "delete": {
+                    "description": "Deletes a sink. If the sink has a unique writer_identity, then that service account is also deleted.",
+                    "flatPath": "v2/{v2Id}/{v2Id1}/sinks/{sinksId}",
+                    "httpMethod": "DELETE",
+                    "id": "logging.sinks.delete",
+                    "parameterOrder": [
+                        "sinkName"
+                    ],
+                    "parameters": {
+                        "sinkName": {
+                            "description": "Required. The full resource name of the sink to delete, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+/sinks/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v2/{+sinkName}",
+                    "response": {
+                        "$ref": "Empty"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/logging.admin"
+                    ]
+                },
+                "get": {
+                    "description": "Gets a sink.",
+                    "flatPath": "v2/{v2Id}/{v2Id1}/sinks/{sinksId}",
+                    "httpMethod": "GET",
+                    "id": "logging.sinks.get",
+                    "parameterOrder": [
+                        "sinkName"
+                    ],
+                    "parameters": {
+                        "sinkName": {
+                            "description": "Required. The resource name of the sink: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+/sinks/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v2/{+sinkName}",
+                    "response": {
+                        "$ref": "LogSink"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                        "https://www.googleapis.com/auth/logging.admin",
+                        "https://www.googleapis.com/auth/logging.read"
+                    ]
+                },
+                "list": {
+                    "description": "Lists sinks.",
+                    "flatPath": "v2/{v2Id}/{v2Id1}/sinks",
+                    "httpMethod": "GET",
+                    "id": "logging.sinks.list",
+                    "parameterOrder": [
+                        "parent"
+                    ],
+                    "parameters": {
+                        "pageSize": {
+                            "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of nextPageToken in the response indicates that more results might be available.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. pageToken must be the value of nextPageToken from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "parent": {
+                            "description": "Required. The parent resource whose sinks are to be listed: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" ",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v2/{+parent}/sinks",
+                    "response": {
+                        "$ref": "ListSinksResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                        "https://www.googleapis.com/auth/logging.admin",
+                        "https://www.googleapis.com/auth/logging.read"
+                    ]
+                },
+                "update": {
+                    "description": "Updates a sink. This method replaces the following fields in the existing sink with values from the new sink: destination, and filter.The updated sink might also have a new writer_identity; see the unique_writer_identity field.",
+                    "flatPath": "v2/{v2Id}/{v2Id1}/sinks/{sinksId}",
+                    "httpMethod": "PUT",
+                    "id": "logging.sinks.update",
+                    "parameterOrder": [
+                        "sinkName"
+                    ],
+                    "parameters": {
+                        "sinkName": {
+                            "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier: \"projects/[PROJECT_ID]/sinks/[SINK_ID]\" \"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\" \"folders/[FOLDER_ID]/sinks/[SINK_ID]\" Example: \"projects/my-project-id/sinks/my-sink-id\".",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+/sinks/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "uniqueWriterIdentity": {
+                            "description": "Optional. See sinks.create for a description of this field. When updating a sink, the effect of this field on the value of writer_identity in the updated sink depends on both the old and new values of this field: If the old and new values of this field are both false or both true, then there is no change to the sink's writer_identity. If the old value is false and the new value is true, then writer_identity is changed to a unique service account. It is an error if the old value is true and the new value is set to false or defaulted to false.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "updateMask": {
+                            "description": "Optional. Field mask that specifies the fields in sink that need an update. A sink field will be overwritten if, and only if, it is in the update mask. name and output only fields cannot be updated.An empty updateMask is temporarily treated as using the following mask for backwards compatibility purposes: destination,filter,includeChildren At some point in the future, behavior will be removed and specifying an empty updateMask will be an error.For a detailed FieldMask definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.FieldMaskExample: updateMask=filter.",
+                            "format": "google-fieldmask",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v2/{+sinkName}",
+                    "request": {
+                        "$ref": "LogSink"
+                    },
+                    "response": {
+                        "$ref": "LogSink"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/logging.admin"
+                    ]
+                }
+            }
         },
-        "nextPageToken": {
-          "type": "string",
-          "description": "If there might be more results than appear in this response, then nextPageToken is included. To get the next set of results, call the same method again using the value of nextPageToken as pageToken."
+        "v2": {
+            "methods": {
+                "getCmekSettings": {
+                    "description": "Gets the Logs Router CMEK settings for the given resource.Note: CMEK for the Logs Router can currently only be configured for GCP organizations. Once configured, it applies to all projects and folders in the GCP organization.See Enabling CMEK for Logs Router (https://cloud.google.com/logging/docs/routing/managed-encryption) for more information.",
+                    "flatPath": "v2/{v2Id}/{v2Id1}/cmekSettings",
+                    "httpMethod": "GET",
+                    "id": "logging.getCmekSettings",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "Required. The resource for which to retrieve CMEK settings. \"projects/[PROJECT_ID]/cmekSettings\" \"organizations/[ORGANIZATION_ID]/cmekSettings\" \"billingAccounts/[BILLING_ACCOUNT_ID]/cmekSettings\" \"folders/[FOLDER_ID]/cmekSettings\" Example: \"organizations/12345/cmekSettings\".Note: CMEK for the Logs Router can currently only be configured for GCP organizations. Once configured, it applies to all projects and folders in the GCP organization.",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v2/{+name}/cmekSettings",
+                    "response": {
+                        "$ref": "CmekSettings"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                        "https://www.googleapis.com/auth/logging.admin",
+                        "https://www.googleapis.com/auth/logging.read"
+                    ]
+                },
+                "updateCmekSettings": {
+                    "description": "Updates the Logs Router CMEK settings for the given resource.Note: CMEK for the Logs Router can currently only be configured for GCP organizations. Once configured, it applies to all projects and folders in the GCP organization.UpdateCmekSettings will fail if 1) kms_key_name is invalid, or 2) the associated service account does not have the required roles/cloudkms.cryptoKeyEncrypterDecrypter role assigned for the key, or 3) access to the key is disabled.See Enabling CMEK for Logs Router (https://cloud.google.com/logging/docs/routing/managed-encryption) for more information.",
+                    "flatPath": "v2/{v2Id}/{v2Id1}/cmekSettings",
+                    "httpMethod": "PATCH",
+                    "id": "logging.updateCmekSettings",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "Required. The resource name for the CMEK settings to update. \"projects/[PROJECT_ID]/cmekSettings\" \"organizations/[ORGANIZATION_ID]/cmekSettings\" \"billingAccounts/[BILLING_ACCOUNT_ID]/cmekSettings\" \"folders/[FOLDER_ID]/cmekSettings\" Example: \"organizations/12345/cmekSettings\".Note: CMEK for the Logs Router can currently only be configured for GCP organizations. Once configured, it applies to all projects and folders in the GCP organization.",
+                            "location": "path",
+                            "pattern": "^[^/]+/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "updateMask": {
+                            "description": "Optional. Field mask identifying which fields from cmek_settings should be updated. A field will be overwritten if and only if it is in the update mask. Output only fields cannot be updated.See FieldMask for more information.Example: \"updateMask=kmsKeyName\"",
+                            "format": "google-fieldmask",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v2/{+name}/cmekSettings",
+                    "request": {
+                        "$ref": "CmekSettings"
+                    },
+                    "response": {
+                        "$ref": "CmekSettings"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/logging.admin"
+                    ]
+                }
+            }
         }
-      },
-      "description": "Result returned from ListSinks.",
-      "type": "object",
-      "id": "ListSinksResponse"
-    }
-  },
-  "name": "logging",
-  "basePath": ""
-}
+    },
+    "revision": "20210217",
+    "rootUrl": "https://logging.googleapis.com/",
+    "schemas": {
+        "BigQueryOptions": {
+            "description": "Options that change functionality of a sink exporting data to BigQuery.",
+            "id": "BigQueryOptions",
+            "properties": {
+                "usePartitionedTables": {
+                    "description": "Optional. Whether to use BigQuery's partition tables (https://cloud.google.com/bigquery/docs/partitioned-tables). By default, Logging creates dated tables based on the log entries' timestamps, e.g. syslog_20170523. With partitioned tables the date suffix is no longer present and special query syntax (https://cloud.google.com/bigquery/docs/querying-partitioned-tables) has to be used instead. In both cases, tables are sharded based on UTC timezone.",
+                    "type": "boolean"
+                },
+                "usesTimestampColumnPartitioning": {
+                    "description": "Output only. True if new timestamp column based partitioning is in use, false if legacy ingestion-time partitioning is in use. All new sinks will have this field set true and will use timestamp column based partitioning. If use_partitioned_tables is false, this value has no meaning and will be false. Legacy sinks using partitioned tables will have this field set to false.",
+                    "readOnly": true,
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "BucketOptions": {
+            "description": "BucketOptions describes the bucket boundaries used to create a histogram for the distribution. The buckets can be in a linear sequence, an exponential sequence, or each bucket can be specified explicitly. BucketOptions does not include the number of values in each bucket.A bucket has an inclusive lower bound and exclusive upper bound for the values that are counted for that bucket. The upper bound of a bucket must be strictly greater than the lower bound. The sequence of N buckets for a distribution consists of an underflow bucket (number 0), zero or more finite buckets (number 1 through N - 2) and an overflow bucket (number N - 1). The buckets are contiguous: the lower bound of bucket i (i > 0) is the same as the upper bound of bucket i - 1. The buckets span the whole range of finite values: lower bound of the underflow bucket is -infinity and the upper bound of the overflow bucket is +infinity. The finite buckets are so-called because both bounds are finite.",
+            "id": "BucketOptions",
+            "properties": {
+                "explicitBuckets": {
+                    "$ref": "Explicit",
+                    "description": "The explicit buckets."
+                },
+                "exponentialBuckets": {
+                    "$ref": "Exponential",
+                    "description": "The exponential buckets."
+                },
+                "linearBuckets": {
+                    "$ref": "Linear",
+                    "description": "The linear bucket."
+                }
+            },
+            "type": "object"
+        },
+        "CmekSettings": {
+            "description": "Describes the customer-managed encryption key (CMEK) settings associated with a project, folder, organization, billing account, or flexible resource.Note: CMEK for the Logs Router can currently only be configured for GCP organizations. Once configured, it applies to all projects and folders in the GCP organization.See Enabling CMEK for Logs Router (https://cloud.google.com/logging/docs/routing/managed-encryption) for more information.",
+            "id": "CmekSettings",
+            "properties": {
+                "kmsKeyName": {
+                    "description": "The resource name for the configured Cloud KMS key.KMS key name format: \"projects/PROJECT_ID/locations/LOCATION/keyRings/KEYRING/cryptoKeys/KEY\"For example: \"projects/my-project-id/locations/my-region/keyRings/key-ring-name/cryptoKeys/key-name\"To enable CMEK for the Logs Router, set this field to a valid kms_key_name for which the associated service account has the required roles/cloudkms.cryptoKeyEncrypterDecrypter role assigned for the key.The Cloud KMS key used by the Log Router can be updated by changing the kms_key_name to a new valid key name. Encryption operations that are in progress will be completed with the key that was in use when they started. Decryption operations will be completed using the key that was used at the time of encryption unless access to that key has been revoked.To disable CMEK for the Logs Router, set this field to an empty string.See Enabling CMEK for Logs Router (https://cloud.google.com/logging/docs/routing/managed-encryption) for more information.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Output only. The resource name of the CMEK settings.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "serviceAccountId": {
+                    "description": "Output only. The service account that will be used by the Logs Router to access your Cloud KMS key.Before enabling CMEK for Logs Router, you must first assign the role roles/cloudkms.cryptoKeyEncrypterDecrypter to the service account that the Logs Router will use to access your Cloud KMS key. Use GetCmekSettings to obtain the service account ID.See Enabling CMEK for Logs Router (https://cloud.google.com/logging/docs/routing/managed-encryption) for more information.",
+                    "readOnly": true,
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Empty": {
+            "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for Empty is empty JSON object {}.",
+            "id": "Empty",
+            "properties": {},
+            "type": "object"
+        },
+        "Explicit": {
+            "description": "Specifies a set of buckets with arbitrary widths.There are size(bounds) + 1 (= N) buckets. Bucket i has the following boundaries:Upper bound (0 <= i < N-1): boundsi Lower bound (1 <= i < N); boundsi - 1The bounds field must contain at least one element. If bounds has only one element, then there are no finite buckets, and that single element is the common boundary of the overflow and underflow buckets.",
+            "id": "Explicit",
+            "properties": {
+                "bounds": {
+                    "description": "The values must be monotonically increasing.",
+                    "items": {
+                        "format": "double",
+                        "type": "number"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Exponential": {
+            "description": "Specifies an exponential sequence of buckets that have a width that is proportional to the value of the lower bound. Each bucket represents a constant relative uncertainty on a specific value in the bucket.There are num_finite_buckets + 2 (= N) buckets. Bucket i has the following boundaries:Upper bound (0 <= i < N-1): scale * (growth_factor ^ i). Lower bound (1 <= i < N): scale * (growth_factor ^ (i - 1)).",
+            "id": "Exponential",
+            "properties": {
+                "growthFactor": {
+                    "description": "Must be greater than 1.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "numFiniteBuckets": {
+                    "description": "Must be greater than 0.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "scale": {
+                    "description": "Must be greater than 0.",
+                    "format": "double",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "HttpRequest": {
+            "description": "A common proto for logging HTTP requests. Only contains semantics defined by the HTTP specification. Product-specific logging information MUST be defined in a separate message.",
+            "id": "HttpRequest",
+            "properties": {
+                "cacheFillBytes": {
+                    "description": "The number of HTTP response bytes inserted into cache. Set only when a cache fill was attempted.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "cacheHit": {
+                    "description": "Whether or not an entity was served from cache (with or without validation).",
+                    "type": "boolean"
+                },
+                "cacheLookup": {
+                    "description": "Whether or not a cache lookup was attempted.",
+                    "type": "boolean"
+                },
+                "cacheValidatedWithOriginServer": {
+                    "description": "Whether or not the response was validated with the origin server before being served from cache. This field is only meaningful if cache_hit is True.",
+                    "type": "boolean"
+                },
+                "latency": {
+                    "description": "The request processing latency on the server, from the time the request was received until the response was sent.",
+                    "format": "google-duration",
+                    "type": "string"
+                },
+                "protocol": {
+                    "description": "Protocol used for the request. Examples: \"HTTP/1.1\", \"HTTP/2\", \"websocket\"",
+                    "type": "string"
+                },
+                "referer": {
+                    "description": "The referer URL of the request, as defined in HTTP/1.1 Header Field Definitions (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html).",
+                    "type": "string"
+                },
+                "remoteIp": {
+                    "description": "The IP address (IPv4 or IPv6) of the client that issued the HTTP request. This field can include port information. Examples: \"192.168.1.1\", \"10.0.0.1:80\", \"FE80::0202:B3FF:FE1E:8329\".",
+                    "type": "string"
+                },
+                "requestMethod": {
+                    "description": "The request method. Examples: \"GET\", \"HEAD\", \"PUT\", \"POST\".",
+                    "type": "string"
+                },
+                "requestSize": {
+                    "description": "The size of the HTTP request message in bytes, including the request headers and the request body.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "requestUrl": {
+                    "description": "The scheme (http, https), the host name, the path and the query portion of the URL that was requested. Example: \"http://example.com/some/info?color=red\".",
+                    "type": "string"
+                },
+                "responseSize": {
+                    "description": "The size of the HTTP response message sent back to the client, in bytes, including the response headers and the response body.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "serverIp": {
+                    "description": "The IP address (IPv4 or IPv6) of the origin server that the request was sent to. This field can include port information. Examples: \"192.168.1.1\", \"10.0.0.1:80\", \"FE80::0202:B3FF:FE1E:8329\".",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "The response code indicating the status of response. Examples: 200, 404.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "userAgent": {
+                    "description": "The user agent sent by the client. Example: \"Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Q312461; .NET CLR 1.0.3705)\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LabelDescriptor": {
+            "description": "A description of a label.",
+            "id": "LabelDescriptor",
+            "properties": {
+                "description": {
+                    "description": "A human-readable description for the label.",
+                    "type": "string"
+                },
+                "key": {
+                    "description": "The label key.",
+                    "type": "string"
+                },
+                "valueType": {
+                    "description": "The type of data that can be assigned to the label.",
+                    "enum": [
+                        "STRING",
+                        "BOOL",
+                        "INT64"
+                    ],
+                    "enumDescriptions": [
+                        "A variable-length string. This is the default.",
+                        "Boolean; true or false.",
+                        "A 64-bit signed integer."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Linear": {
+            "description": "Specifies a linear sequence of buckets that all have the same width (except overflow and underflow). Each bucket represents a constant absolute uncertainty on the specific value in the bucket.There are num_finite_buckets + 2 (= N) buckets. Bucket i has the following boundaries:Upper bound (0 <= i < N-1): offset + (width * i). Lower bound (1 <= i < N): offset + (width * (i - 1)).",
+            "id": "Linear",
+            "properties": {
+                "numFiniteBuckets": {
+                    "description": "Must be greater than 0.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "offset": {
+                    "description": "Lower bound of the first bucket.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "width": {
+                    "description": "Must be greater than 0.",
+                    "format": "double",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "ListBucketsResponse": {
+            "description": "The response from ListBuckets.",
+            "id": "ListBucketsResponse",
+            "properties": {
+                "buckets": {
+                    "description": "A list of buckets.",
+                    "items": {
+                        "$ref": "LogBucket"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "If there might be more results than appear in this response, then nextPageToken is included. To get the next set of results, call the same method again using the value of nextPageToken as pageToken.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListExclusionsResponse": {
+            "description": "Result returned from ListExclusions.",
+            "id": "ListExclusionsResponse",
+            "properties": {
+                "exclusions": {
+                    "description": "A list of exclusions.",
+                    "items": {
+                        "$ref": "LogExclusion"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "If there might be more results than appear in this response, then nextPageToken is included. To get the next set of results, call the same method again using the value of nextPageToken as pageToken.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListLocationsResponse": {
+            "description": "The response message for Locations.ListLocations.",
+            "id": "ListLocationsResponse",
+            "properties": {
+                "locations": {
+                    "description": "A list of locations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Location"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListLogEntriesRequest": {
+            "description": "The parameters to ListLogEntries.",
+            "id": "ListLogEntriesRequest",
+            "properties": {
+                "filter": {
+                    "description": "Optional. A filter that chooses which log entries to return. See Advanced Logs Queries (https://cloud.google.com/logging/docs/view/advanced-queries). Only log entries that match the filter are returned. An empty filter matches all log entries in the resources listed in resource_names. Referencing a parent resource that is not listed in resource_names will cause the filter to return no results. The maximum length of the filter is 20000 characters.",
+                    "type": "string"
+                },
+                "orderBy": {
+                    "description": "Optional. How the results should be sorted. Presently, the only permitted values are \"timestamp asc\" (default) and \"timestamp desc\". The first option returns entries in order of increasing values of LogEntry.timestamp (oldest first), and the second option returns entries in order of decreasing timestamps (newest first). Entries with equal timestamps are returned in order of their insert_id values.",
+                    "type": "string"
+                },
+                "pageSize": {
+                    "description": "Optional. The maximum number of results to return from this request. Default is 50. If the value is negative or exceeds 1000, the request is rejected. The presence of next_page_token in the response indicates that more results might be available.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "pageToken": {
+                    "description": "Optional. If present, then retrieve the next batch of results from the preceding call to this method. page_token must be the value of next_page_token from the previous response. The values of other method parameters should be identical to those in the previous call.",
+                    "type": "string"
+                },
+                "projectIds": {
+                    "description": "Optional. Deprecated. Use resource_names instead. One or more project identifiers or project numbers from which to retrieve log entries. Example: \"my-project-1A\".",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "resourceNames": {
+                    "description": "Required. Names of one or more parent resources from which to retrieve log entries: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" May alternatively be one or more views projects/PROJECT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID organization/ORGANIZATION_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID billingAccounts/BILLING_ACCOUNT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID folders/FOLDER_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_IDProjects listed in the project_ids field are added to this list.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListLogEntriesResponse": {
+            "description": "Result returned from ListLogEntries.",
+            "id": "ListLogEntriesResponse",
+            "properties": {
+                "entries": {
+                    "description": "A list of log entries. If entries is empty, nextPageToken may still be returned, indicating that more entries may exist. See nextPageToken for more information.",
+                    "items": {
+                        "$ref": "LogEntry"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "If there might be more results than those appearing in this response, then nextPageToken is included. To get the next set of results, call this method again using the value of nextPageToken as pageToken.If a value for next_page_token appears and the entries field is empty, it means that the search found no log entries so far but it did not have time to search all the possible log entries. Retry the method with this value for page_token to continue the search. Alternatively, consider speeding up the search by changing your filter to specify a single log name or resource type, or to narrow the time range of the search.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListLogMetricsResponse": {
+            "description": "Result returned from ListLogMetrics.",
+            "id": "ListLogMetricsResponse",
+            "properties": {
+                "metrics": {
+                    "description": "A list of logs-based metrics.",
+                    "items": {
+                        "$ref": "LogMetric"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "If there might be more results than appear in this response, then nextPageToken is included. To get the next set of results, call this method again using the value of nextPageToken as pageToken.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListLogsResponse": {
+            "description": "Result returned from ListLogs.",
+            "id": "ListLogsResponse",
+            "properties": {
+                "logNames": {
+                    "description": "A list of log names. For example, \"projects/my-project/logs/syslog\" or \"organizations/123/logs/cloudresourcemanager.googleapis.com%2Factivity\".",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "If there might be more results than those appearing in this response, then nextPageToken is included. To get the next set of results, call this method again using the value of nextPageToken as pageToken.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListMonitoredResourceDescriptorsResponse": {
+            "description": "Result returned from ListMonitoredResourceDescriptors.",
+            "id": "ListMonitoredResourceDescriptorsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "If there might be more results than those appearing in this response, then nextPageToken is included. To get the next set of results, call this method again using the value of nextPageToken as pageToken.",
+                    "type": "string"
+                },
+                "resourceDescriptors": {
+                    "description": "A list of resource descriptors.",
+                    "items": {
+                        "$ref": "MonitoredResourceDescriptor"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListSinksResponse": {
+            "description": "Result returned from ListSinks.",
+            "id": "ListSinksResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "If there might be more results than appear in this response, then nextPageToken is included. To get the next set of results, call the same method again using the value of nextPageToken as pageToken.",
+                    "type": "string"
+                },
+                "sinks": {
+                    "description": "A list of sinks.",
+                    "items": {
+                        "$ref": "LogSink"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListViewsResponse": {
+            "description": "The response from ListViews.",
+            "id": "ListViewsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "If there might be more results than appear in this response, then nextPageToken is included. To get the next set of results, call the same method again using the value of nextPageToken as pageToken.",
+                    "type": "string"
+                },
+                "views": {
+                    "description": "A list of views.",
+                    "items": {
+                        "$ref": "LogView"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Location": {
+            "description": "A resource that represents Google Cloud Platform location.",
+            "id": "Location",
+            "properties": {
+                "displayName": {
+                    "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\".",
+                    "type": "string"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"} ",
+                    "type": "object"
+                },
+                "locationId": {
+                    "description": "The canonical id for this location. For example: \"us-east1\".",
+                    "type": "string"
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata. For example the available capacity at the given location.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "Resource name for the location, which may vary between implementations. For example: \"projects/example-project/locations/us-east1\"",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LogBucket": {
+            "description": "Describes a repository of logs.",
+            "id": "LogBucket",
+            "properties": {
+                "createTime": {
+                    "description": "Output only. The creation timestamp of the bucket. This is not set for any of the default buckets.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "description": {
+                    "description": "Describes this bucket.",
+                    "type": "string"
+                },
+                "lifecycleState": {
+                    "description": "Output only. The bucket lifecycle state.",
+                    "enum": [
+                        "LIFECYCLE_STATE_UNSPECIFIED",
+                        "ACTIVE",
+                        "DELETE_REQUESTED"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified state. This is only used/useful for distinguishing unset values.",
+                        "The normal and active state.",
+                        "The bucket has been marked for deletion by the user."
+                    ],
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "locked": {
+                    "description": "Whether the bucket has been locked. The retention period on a locked bucket may not be changed. Locked buckets may only be deleted if they are empty.",
+                    "type": "boolean"
+                },
+                "name": {
+                    "description": "Output only. The resource name of the bucket. For example: \"projects/my-project-id/locations/my-location/buckets/my-bucket-id\" The supported locations are: global, us-central1, us-east1, us-west1, asia-east1, europe-west1.For the location of global it is unspecified where logs are actually stored. Once a bucket has been created, the location can not be changed.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "retentionDays": {
+                    "description": "Logs will be retained by default for this amount of time, after which they will automatically be deleted. The minimum retention period is 1 day. If this value is set to zero at bucket creation time, the default time of 30 days will be used.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "updateTime": {
+                    "description": "Output only. The last update timestamp of the bucket.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LogEntry": {
+            "description": "An individual entry in a log.",
+            "id": "LogEntry",
+            "properties": {
+                "httpRequest": {
+                    "$ref": "HttpRequest",
+                    "description": "Optional. Information about the HTTP request associated with this log entry, if applicable."
+                },
+                "insertId": {
+                    "description": "Optional. A unique identifier for the log entry. If you provide a value, then Logging considers other log entries in the same project, with the same timestamp, and with the same insert_id to be duplicates which are removed in a single query result. However, there are no guarantees of de-duplication in the export of logs.If the insert_id is omitted when writing a log entry, the Logging API assigns its own unique identifier in this field.In queries, the insert_id is also used to order log entries that have the same log_name and timestamp values.",
+                    "type": "string"
+                },
+                "jsonPayload": {
+                    "additionalProperties": {
+                        "description": "Properties of the object.",
+                        "type": "any"
+                    },
+                    "description": "The log entry payload, represented as a structure that is expressed as a JSON object.",
+                    "type": "object"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Optional. A set of user-defined (key, value) data that provides additional information about the log entry.Cloud Logging truncates label keys that exceed 512 B and label values that exceed 64 KB upon their associated log entry being written. The truncation is indicated by an ellipsis at the end of the character string.",
+                    "type": "object"
+                },
+                "logName": {
+                    "description": "Required. The resource name of the log to which this log entry belongs: \"projects/[PROJECT_ID]/logs/[LOG_ID]\" \"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\" \"folders/[FOLDER_ID]/logs/[LOG_ID]\" A project number may be used in place of PROJECT_ID. The project number is translated to its corresponding PROJECT_ID internally and the log_name field will contain PROJECT_ID in queries and exports.[LOG_ID] must be URL-encoded within log_name. Example: \"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity\". [LOG_ID] must be less than 512 characters long and can only include the following characters: upper and lower case alphanumeric characters, forward-slash, underscore, hyphen, and period.For backward compatibility, if log_name begins with a forward-slash, such as /projects/..., then the log entry is ingested as usual but the forward-slash is removed. Listing the log entry will not show the leading slash and filtering for a log name with a leading slash will never return any results.",
+                    "type": "string"
+                },
+                "metadata": {
+                    "$ref": "MonitoredResourceMetadata",
+                    "description": "Output only. Deprecated. Additional metadata about the monitored resource.Only k8s_container, k8s_pod, and k8s_node MonitoredResources have this field populated for GKE versions older than 1.12.6. For GKE versions 1.12.6 and above, the metadata field has been deprecated. The Kubernetes pod labels that used to be in metadata.userLabels will now be present in the labels field with a key prefix of k8s-pod/. The system labels that were present in the metadata.systemLabels field will no longer be available in the log entry.",
+                    "readOnly": true
+                },
+                "operation": {
+                    "$ref": "LogEntryOperation",
+                    "description": "Optional. Information about an operation associated with the log entry, if applicable."
+                },
+                "protoPayload": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The log entry payload, represented as a protocol buffer. Some Google Cloud Platform services use this field for their log entry payloads.The following protocol buffer types are supported; user-defined types are not supported:\"type.googleapis.com/google.cloud.audit.AuditLog\" \"type.googleapis.com/google.appengine.logging.v1.RequestLog\"",
+                    "type": "object"
+                },
+                "receiveTimestamp": {
+                    "description": "Output only. The time the log entry was received by Logging.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "resource": {
+                    "$ref": "MonitoredResource",
+                    "description": "Required. The monitored resource that produced this log entry.Example: a log entry that reports a database error would be associated with the monitored resource designating the particular database that reported the error."
+                },
+                "severity": {
+                    "description": "Optional. The severity of the log entry. The default value is LogSeverity.DEFAULT.",
+                    "enum": [
+                        "DEFAULT",
+                        "DEBUG",
+                        "INFO",
+                        "NOTICE",
+                        "WARNING",
+                        "ERROR",
+                        "CRITICAL",
+                        "ALERT",
+                        "EMERGENCY"
+                    ],
+                    "enumDescriptions": [
+                        "(0) The log entry has no assigned severity level.",
+                        "(100) Debug or trace information.",
+                        "(200) Routine information, such as ongoing status or performance.",
+                        "(300) Normal but significant events, such as start up, shut down, or a configuration change.",
+                        "(400) Warning events might cause problems.",
+                        "(500) Error events are likely to cause problems.",
+                        "(600) Critical events cause more severe problems or outages.",
+                        "(700) A person must take an action immediately.",
+                        "(800) One or more systems are unusable."
+                    ],
+                    "type": "string"
+                },
+                "sourceLocation": {
+                    "$ref": "LogEntrySourceLocation",
+                    "description": "Optional. Source code location information associated with the log entry, if any."
+                },
+                "spanId": {
+                    "description": "Optional. The span ID within the trace associated with the log entry.For Trace spans, this is the same format that the Trace API v2 uses: a 16-character hexadecimal encoding of an 8-byte array, such as 000000000000004a.",
+                    "type": "string"
+                },
+                "textPayload": {
+                    "description": "The log entry payload, represented as a Unicode string (UTF-8).",
+                    "type": "string"
+                },
+                "timestamp": {
+                    "description": "Optional. The time the event described by the log entry occurred. This time is used to compute the log entry's age and to enforce the logs retention period. If this field is omitted in a new log entry, then Logging assigns it the current time. Timestamps have nanosecond accuracy, but trailing zeros in the fractional seconds might be omitted when the timestamp is displayed.Incoming log entries must have timestamps that don't exceed the logs retention period (https://cloud.google.com/logging/quotas#logs_retention_periods) in the past, and that don't exceed 24 hours in the future. Log entries outside those time boundaries aren't ingested by Logging.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "trace": {
+                    "description": "Optional. Resource name of the trace associated with the log entry, if any. If it contains a relative resource name, the name is assumed to be relative to //tracing.googleapis.com. Example: projects/my-projectid/traces/06796866738c859f2f19b7cfb3214824",
+                    "type": "string"
+                },
+                "traceSampled": {
+                    "description": "Optional. The sampling decision of the trace associated with the log entry.True means that the trace resource name in the trace field was sampled for storage in a trace backend. False means that the trace was not sampled for storage when this log entry was written, or the sampling decision was unknown at the time. A non-sampled trace value is still useful as a request correlation identifier. The default is False.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "LogEntryOperation": {
+            "description": "Additional information about a potentially long-running operation with which a log entry is associated.",
+            "id": "LogEntryOperation",
+            "properties": {
+                "first": {
+                    "description": "Optional. Set this to True if this is the first log entry in the operation.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "Optional. An arbitrary operation identifier. Log entries with the same identifier are assumed to be part of the same operation.",
+                    "type": "string"
+                },
+                "last": {
+                    "description": "Optional. Set this to True if this is the last log entry in the operation.",
+                    "type": "boolean"
+                },
+                "producer": {
+                    "description": "Optional. An arbitrary producer identifier. The combination of id and producer must be globally unique. Examples for producer: \"MyDivision.MyBigCompany.com\", \"github.com/MyProject/MyApplication\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LogEntrySourceLocation": {
+            "description": "Additional information about the source code location that produced the log entry.",
+            "id": "LogEntrySourceLocation",
+            "properties": {
+                "file": {
+                    "description": "Optional. Source file name. Depending on the runtime environment, this might be a simple name or a fully-qualified name.",
+                    "type": "string"
+                },
+                "function": {
+                    "description": "Optional. Human-readable name of the function or method being invoked, with optional context such as the class or package name. This information may be used in contexts such as the logs viewer, where a file and line number are less meaningful. The format can vary by language. For example: qual.if.ied.Class.method (Java), dir/package.func (Go), function (Python).",
+                    "type": "string"
+                },
+                "line": {
+                    "description": "Optional. Line within the source file. 1-based; 0 indicates no line number available.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LogExclusion": {
+            "description": "Specifies a set of log entries that are not to be stored in Logging. If your GCP resource receives a large volume of logs, you can use exclusions to reduce your chargeable logs. Exclusions are processed after log sinks, so you can export log entries before they are excluded. Note that organization-level and folder-level exclusions don't apply to child resources, and that you can't exclude audit log entries.",
+            "id": "LogExclusion",
+            "properties": {
+                "createTime": {
+                    "description": "Output only. The creation timestamp of the exclusion.This field may not be present for older exclusions.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "description": {
+                    "description": "Optional. A description of this exclusion.",
+                    "type": "string"
+                },
+                "disabled": {
+                    "description": "Optional. If set to True, then this exclusion is disabled and it does not exclude any log entries. You can update an exclusion to change the value of this field.",
+                    "type": "boolean"
+                },
+                "filter": {
+                    "description": "Required. An advanced logs filter (https://cloud.google.com/logging/docs/view/advanced-queries) that matches the log entries to be excluded. By using the sample function (https://cloud.google.com/logging/docs/view/advanced-queries#sample), you can exclude less than 100% of the matching log entries. For example, the following query matches 99% of low-severity log entries from Google Cloud Storage buckets:\"resource.type=gcs_bucket severity<ERROR sample(insertId, 0.99)\"",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Required. A client-assigned identifier, such as \"load-balancer-exclusion\". Identifiers are limited to 100 characters and can include only letters, digits, underscores, hyphens, and periods. First character has to be alphanumeric.",
+                    "type": "string"
+                },
+                "updateTime": {
+                    "description": "Output only. The last update timestamp of the exclusion.This field may not be present for older exclusions.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LogLine": {
+            "description": "Application log line emitted while processing a request.",
+            "id": "LogLine",
+            "properties": {
+                "logMessage": {
+                    "description": "App-provided log message.",
+                    "type": "string"
+                },
+                "severity": {
+                    "description": "Severity of this log entry.",
+                    "enum": [
+                        "DEFAULT",
+                        "DEBUG",
+                        "INFO",
+                        "NOTICE",
+                        "WARNING",
+                        "ERROR",
+                        "CRITICAL",
+                        "ALERT",
+                        "EMERGENCY"
+                    ],
+                    "enumDescriptions": [
+                        "(0) The log entry has no assigned severity level.",
+                        "(100) Debug or trace information.",
+                        "(200) Routine information, such as ongoing status or performance.",
+                        "(300) Normal but significant events, such as start up, shut down, or a configuration change.",
+                        "(400) Warning events might cause problems.",
+                        "(500) Error events are likely to cause problems.",
+                        "(600) Critical events cause more severe problems or outages.",
+                        "(700) A person must take an action immediately.",
+                        "(800) One or more systems are unusable."
+                    ],
+                    "type": "string"
+                },
+                "sourceLocation": {
+                    "$ref": "SourceLocation",
+                    "description": "Where in the source code this log message was written."
+                },
+                "time": {
+                    "description": "Approximate time when this log entry was made.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LogMetric": {
+            "description": "Describes a logs-based metric. The value of the metric is the number of log entries that match a logs filter in a given time interval.Logs-based metrics can also be used to extract values from logs and create a distribution of the values. The distribution records the statistics of the extracted values along with an optional histogram of the values as specified by the bucket options.",
+            "id": "LogMetric",
+            "properties": {
+                "bucketOptions": {
+                    "$ref": "BucketOptions",
+                    "description": "Optional. The bucket_options are required when the logs-based metric is using a DISTRIBUTION value type and it describes the bucket boundaries used to create a histogram of the extracted values."
+                },
+                "createTime": {
+                    "description": "Output only. The creation timestamp of the metric.This field may not be present for older metrics.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "description": {
+                    "description": "Optional. A description of this metric, which is used in documentation. The maximum length of the description is 8000 characters.",
+                    "type": "string"
+                },
+                "filter": {
+                    "description": "Required. An advanced logs filter (https://cloud.google.com/logging/docs/view/advanced_filters) which is used to match log entries. Example: \"resource.type=gae_app AND severity>=ERROR\" The maximum length of the filter is 20000 characters.",
+                    "type": "string"
+                },
+                "labelExtractors": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Optional. A map from a label key string to an extractor expression which is used to extract data from a log entry field and assign as the label value. Each label key specified in the LabelDescriptor must have an associated extractor expression in this map. The syntax of the extractor expression is the same as for the value_extractor field.The extracted value is converted to the type defined in the label descriptor. If the either the extraction or the type conversion fails, the label will have a default value. The default value for a string label is an empty string, for an integer label its 0, and for a boolean label its false.Note that there are upper bounds on the maximum number of labels and the number of active time series that are allowed in a project.",
+                    "type": "object"
+                },
+                "metricDescriptor": {
+                    "$ref": "MetricDescriptor",
+                    "description": "Optional. The metric descriptor associated with the logs-based metric. If unspecified, it uses a default metric descriptor with a DELTA metric kind, INT64 value type, with no labels and a unit of \"1\". Such a metric counts the number of log entries matching the filter expression.The name, type, and description fields in the metric_descriptor are output only, and is constructed using the name and description field in the LogMetric.To create a logs-based metric that records a distribution of log values, a DELTA metric kind with a DISTRIBUTION value type must be used along with a value_extractor expression in the LogMetric.Each label in the metric descriptor must have a matching label name as the key and an extractor expression as the value in the label_extractors map.The metric_kind and value_type fields in the metric_descriptor cannot be updated once initially configured. New labels can be added in the metric_descriptor, but existing labels cannot be modified except for their description."
+                },
+                "name": {
+                    "description": "Required. The client-assigned metric identifier. Examples: \"error_count\", \"nginx/requests\".Metric identifiers are limited to 100 characters and can include only the following characters: A-Z, a-z, 0-9, and the special characters _-.,+!*',()%/. The forward-slash character (/) denotes a hierarchy of name pieces, and it cannot be the first character of the name.The metric identifier in this field must not be URL-encoded (https://en.wikipedia.org/wiki/Percent-encoding). However, when the metric identifier appears as the [METRIC_ID] part of a metric_name API parameter, then the metric identifier must be URL-encoded. Example: \"projects/my-project/metrics/nginx%2Frequests\".",
+                    "type": "string"
+                },
+                "updateTime": {
+                    "description": "Output only. The last update timestamp of the metric.This field may not be present for older metrics.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "valueExtractor": {
+                    "description": "Optional. A value_extractor is required when using a distribution logs-based metric to extract the values to record from a log entry. Two functions are supported for value extraction: EXTRACT(field) or REGEXP_EXTRACT(field, regex). The argument are: 1. field: The name of the log entry field from which the value is to be extracted. 2. regex: A regular expression using the Google RE2 syntax (https://github.com/google/re2/wiki/Syntax) with a single capture group to extract data from the specified log entry field. The value of the field is converted to a string before applying the regex. It is an error to specify a regex that does not include exactly one capture group.The result of the extraction must be convertible to a double type, as the distribution always records double values. If either the extraction or the conversion to double fails, then those values are not recorded in the distribution.Example: REGEXP_EXTRACT(jsonPayload.request, \".*quantity=(\\d+).*\")",
+                    "type": "string"
+                },
+                "version": {
+                    "description": "Deprecated. The API version that created or updated this metric. The v2 format is used by default and cannot be changed.",
+                    "enum": [
+                        "V2",
+                        "V1"
+                    ],
+                    "enumDescriptions": [
+                        "Logging API v2.",
+                        "Logging API v1."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LogSink": {
+            "description": "Describes a sink used to export log entries to one of the following destinations in any project: a Cloud Storage bucket, a BigQuery dataset, a Cloud Pub/Sub topic or a Cloud Logging Bucket. A logs filter controls which log entries are exported. The sink must be created within a project, organization, billing account, or folder.",
+            "id": "LogSink",
+            "properties": {
+                "bigqueryOptions": {
+                    "$ref": "BigQueryOptions",
+                    "description": "Optional. Options that affect sinks exporting data to BigQuery."
+                },
+                "createTime": {
+                    "description": "Output only. The creation timestamp of the sink.This field may not be present for older sinks.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "description": {
+                    "description": "Optional. A description of this sink. The maximum length of the description is 8000 characters.",
+                    "type": "string"
+                },
+                "destination": {
+                    "description": "Required. The export destination: \"storage.googleapis.com/[GCS_BUCKET]\" \"bigquery.googleapis.com/projects/[PROJECT_ID]/datasets/[DATASET]\" \"pubsub.googleapis.com/projects/[PROJECT_ID]/topics/[TOPIC_ID]\" The sink's writer_identity, set when the sink is created, must have permission to write to the destination or else the log entries are not exported. For more information, see Exporting Logs with Sinks (https://cloud.google.com/logging/docs/api/tasks/exporting-logs).",
+                    "type": "string"
+                },
+                "disabled": {
+                    "description": "Optional. If set to True, then this sink is disabled and it does not export any log entries.",
+                    "type": "boolean"
+                },
+                "exclusions": {
+                    "description": "Optional. Log entries that match any of the exclusion filters will not be exported. If a log entry is matched by both filter and one of exclusion_filters it will not be exported.",
+                    "items": {
+                        "$ref": "LogExclusion"
+                    },
+                    "type": "array"
+                },
+                "filter": {
+                    "description": "Optional. An advanced logs filter (https://cloud.google.com/logging/docs/view/advanced-queries). The only exported log entries are those that are in the resource owning the sink and that match the filter. For example: logName=\"projects/[PROJECT_ID]/logs/[LOG_ID]\" AND severity>=ERROR ",
+                    "type": "string"
+                },
+                "includeChildren": {
+                    "description": "Optional. This field applies only to sinks owned by organizations and folders. If the field is false, the default, only the logs owned by the sink's parent resource are available for export. If the field is true, then logs from all the projects, folders, and billing accounts contained in the sink's parent resource are also available for export. Whether a particular log entry from the children is exported depends on the sink's filter expression. For example, if this field is true, then the filter resource.type=gce_instance would export all Compute Engine VM instance log entries from all projects in the sink's parent. To only export entries from certain child projects, filter on the project part of the log name: logName:(\"projects/test-project1/\" OR \"projects/test-project2/\") AND resource.type=gce_instance ",
+                    "type": "boolean"
+                },
+                "name": {
+                    "description": "Required. The client-assigned sink identifier, unique within the project. Example: \"my-syslog-errors-to-pubsub\". Sink identifiers are limited to 100 characters and can include only the following characters: upper and lower-case alphanumeric characters, underscores, hyphens, and periods. First character has to be alphanumeric.",
+                    "type": "string"
+                },
+                "outputVersionFormat": {
+                    "description": "Deprecated. This field is unused.",
+                    "enum": [
+                        "VERSION_FORMAT_UNSPECIFIED",
+                        "V2",
+                        "V1"
+                    ],
+                    "enumDescriptions": [
+                        "An unspecified format version that will default to V2.",
+                        "LogEntry version 2 format.",
+                        "LogEntry version 1 format."
+                    ],
+                    "type": "string"
+                },
+                "updateTime": {
+                    "description": "Output only. The last update timestamp of the sink.This field may not be present for older sinks.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "writerIdentity": {
+                    "description": "Output only. An IAM identity\u2014a service account or group\u2014under which Logging writes the exported log entries to the sink's destination. This field is set by sinks.create and sinks.update based on the value of unique_writer_identity in those methods.Until you grant this identity write-access to the destination, log entry exports from this sink will fail. For more information, see Granting Access for a Resource (https://cloud.google.com/iam/docs/granting-roles-to-service-accounts#granting_access_to_a_service_account_for_a_resource). Consult the destination service's documentation to determine the appropriate IAM roles to assign to the identity.",
+                    "readOnly": true,
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LogView": {
+            "description": "Describes a view over logs in a bucket.",
+            "id": "LogView",
+            "properties": {
+                "createTime": {
+                    "description": "Output only. The creation timestamp of the view.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "description": {
+                    "description": "Describes this view.",
+                    "type": "string"
+                },
+                "filter": {
+                    "description": "Filter that restricts which log entries in a bucket are visible in this view. Filters are restricted to be a logical AND of ==/!= of any of the following: originating project/folder/organization/billing account. resource type log id Example: SOURCE(\"projects/myproject\") AND resource.type = \"gce_instance\" AND LOG_ID(\"stdout\")",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The resource name of the view. For example \"projects/my-project-id/locations/my-location/buckets/my-bucket-id/views/my-view",
+                    "type": "string"
+                },
+                "updateTime": {
+                    "description": "Output only. The last update timestamp of the view.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MetricDescriptor": {
+            "description": "Defines a metric type and its schema. Once a metric descriptor is created, deleting or altering it stops data collection and makes the metric type's existing data unusable.",
+            "id": "MetricDescriptor",
+            "properties": {
+                "description": {
+                    "description": "A detailed description of the metric, which can be used in documentation.",
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "A concise name for the metric, which can be displayed in user interfaces. Use sentence case without an ending period, for example \"Request count\". This field is optional but it is recommended to be set for any metrics associated with user-visible concepts, such as Quota.",
+                    "type": "string"
+                },
+                "labels": {
+                    "description": "The set of labels that can be used to describe a specific instance of this metric type. For example, the appengine.googleapis.com/http/server/response_latencies metric type has a label for the HTTP response code, response_code, so you can look at latencies for successful responses or just for responses that failed.",
+                    "items": {
+                        "$ref": "LabelDescriptor"
+                    },
+                    "type": "array"
+                },
+                "launchStage": {
+                    "description": "Optional. The launch stage of the metric definition.",
+                    "enum": [
+                        "LAUNCH_STAGE_UNSPECIFIED",
+                        "UNIMPLEMENTED",
+                        "PRELAUNCH",
+                        "EARLY_ACCESS",
+                        "ALPHA",
+                        "BETA",
+                        "GA",
+                        "DEPRECATED"
+                    ],
+                    "enumDescriptions": [
+                        "Do not use this default value.",
+                        "The feature is not yet implemented. Users can not use it.",
+                        "Prelaunch features are hidden from users and are only visible internally.",
+                        "Early Access features are limited to a closed group of testers. To use these features, you must sign up in advance and sign a Trusted Tester agreement (which includes confidentiality provisions). These features may be unstable, changed in backward-incompatible ways, and are not guaranteed to be released.",
+                        "Alpha is a limited availability test for releases before they are cleared for widespread use. By Alpha, all significant design issues are resolved and we are in the process of verifying functionality. Alpha customers need to apply for access, agree to applicable terms, and have their projects allowlisted. Alpha releases don\u2019t have to be feature complete, no SLAs are provided, and there are no technical support obligations, but they will be far enough along that customers can actually use them in test environments or for limited-use tests -- just like they would in normal production cases.",
+                        "Beta is the point at which we are ready to open a release for any customer to use. There are no SLA or technical support obligations in a Beta release. Products will be complete from a feature perspective, but may have some open outstanding issues. Beta releases are suitable for limited production use cases.",
+                        "GA features are open to all developers and are considered stable and fully qualified for production use.",
+                        "Deprecated features are scheduled to be shut down and removed. For more information, see the \u201cDeprecation Policy\u201d section of our Terms of Service (https://cloud.google.com/terms/) and the Google Cloud Platform Subject to the Deprecation Policy (https://cloud.google.com/terms/deprecation) documentation."
+                    ],
+                    "type": "string"
+                },
+                "metadata": {
+                    "$ref": "MetricDescriptorMetadata",
+                    "description": "Optional. Metadata which can be used to guide usage of the metric."
+                },
+                "metricKind": {
+                    "description": "Whether the metric records instantaneous values, changes to a value, etc. Some combinations of metric_kind and value_type might not be supported.",
+                    "enum": [
+                        "METRIC_KIND_UNSPECIFIED",
+                        "GAUGE",
+                        "DELTA",
+                        "CUMULATIVE"
+                    ],
+                    "enumDescriptions": [
+                        "Do not use this default value.",
+                        "An instantaneous measurement of a value.",
+                        "The change in a value during a time interval.",
+                        "A value accumulated over a time interval. Cumulative measurements in a time series should have the same start time and increasing end times, until an event resets the cumulative value to zero and sets a new start time for the following points."
+                    ],
+                    "type": "string"
+                },
+                "monitoredResourceTypes": {
+                    "description": "Read-only. If present, then a time series, which is identified partially by a metric type and a MonitoredResourceDescriptor, that is associated with this metric type can only be associated with one of the monitored resource types listed here.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "name": {
+                    "description": "The resource name of the metric descriptor.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "The metric type, including its DNS name prefix. The type is not URL-encoded. All user-defined metric types have the DNS name custom.googleapis.com or external.googleapis.com. Metric types should use a natural hierarchical grouping. For example: \"custom.googleapis.com/invoice/paid/amount\" \"external.googleapis.com/prometheus/up\" \"appengine.googleapis.com/http/server/response_latencies\" ",
+                    "type": "string"
+                },
+                "unit": {
+                    "description": "The units in which the metric value is reported. It is only applicable if the value_type is INT64, DOUBLE, or DISTRIBUTION. The unit defines the representation of the stored metric values.Different systems might scale the values to be more easily displayed (so a value of 0.02kBy might be displayed as 20By, and a value of 3523kBy might be displayed as 3.5MBy). However, if the unit is kBy, then the value of the metric is always in thousands of bytes, no matter how it might be displayed.If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an INT64 CUMULATIVE metric whose unit is s{CPU} (or equivalently 1s{CPU} or just s). If the job uses 12,005 CPU-seconds, then the value is written as 12005.Alternatively, if you want a custom metric to record data in a more granular way, you can create a DOUBLE CUMULATIVE metric whose unit is ks{CPU}, and then write the value 12.005 (which is 12005/1000), or use Kis{CPU} and write 11.723 (which is 12005/1024).The supported units are a subset of The Unified Code for Units of Measure (https://unitsofmeasure.org/ucum.html) standard:Basic units (UNIT) bit bit By byte s second min minute h hour d day 1 dimensionlessPrefixes (PREFIX) k kilo (10^3) M mega (10^6) G giga (10^9) T tera (10^12) P peta (10^15) E exa (10^18) Z zetta (10^21) Y yotta (10^24) m milli (10^-3) u micro (10^-6) n nano (10^-9) p pico (10^-12) f femto (10^-15) a atto (10^-18) z zepto (10^-21) y yocto (10^-24) Ki kibi (2^10) Mi mebi (2^20) Gi gibi (2^30) Ti tebi (2^40) Pi pebi (2^50)GrammarThe grammar also includes these connectors: / division or ratio (as an infix operator). For examples, kBy/{email} or MiBy/10ms (although you should almost never have /s in a metric unit; rates should always be computed at query time from the underlying cumulative or delta value). . multiplication or composition (as an infix operator). For examples, GBy.d or k{watt}.h.The grammar for a unit is as follows: Expression = Component { \".\" Component } { \"/\" Component } ; Component = ( [ PREFIX ] UNIT | \"%\" ) [ Annotation ] | Annotation | \"1\" ; Annotation = \"{\" NAME \"}\" ; Notes: Annotation is just a comment if it follows a UNIT. If the annotation is used alone, then the unit is equivalent to 1. For examples, {request}/s == 1/s, By{transmitted}/s == By/s. NAME is a sequence of non-blank printable ASCII characters not containing { or }. 1 represents a unitary dimensionless unit (https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in 1/s. It is typically used when none of the basic units are appropriate. For example, \"new users per day\" can be represented as 1/d or {new-users}/d (and a metric value 5 would mean \"5 new users). Alternatively, \"thousands of page views per day\" would be represented as 1000/d or k1/d or k{page_views}/d (and a metric value of 5.3 would mean \"5300 page views per day\"). % represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value 3 means \"3 percent\"). 10^2.% indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value 0.03 means \"3 percent\").",
+                    "type": "string"
+                },
+                "valueType": {
+                    "description": "Whether the measurement is an integer, a floating-point number, etc. Some combinations of metric_kind and value_type might not be supported.",
+                    "enum": [
+                        "VALUE_TYPE_UNSPECIFIED",
+                        "BOOL",
+                        "INT64",
+                        "DOUBLE",
+                        "STRING",
+                        "DISTRIBUTION",
+                        "MONEY"
+                    ],
+                    "enumDescriptions": [
+                        "Do not use this default value.",
+                        "The value is a boolean. This value type can be used only if the metric kind is GAUGE.",
+                        "The value is a signed 64-bit integer.",
+                        "The value is a double precision floating point number.",
+                        "The value is a text string. This value type can be used only if the metric kind is GAUGE.",
+                        "The value is a Distribution.",
+                        "The value is money."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MetricDescriptorMetadata": {
+            "description": "Additional annotations that can be used to guide the usage of a metric.",
+            "id": "MetricDescriptorMetadata",
+            "properties": {
+                "ingestDelay": {
+                    "description": "The delay of data points caused by ingestion. Data points older than this age are guaranteed to be ingested and available to be read, excluding data loss due to errors.",
+                    "format": "google-duration",
+                    "type": "string"
+                },
+                "launchStage": {
+                    "description": "Deprecated. Must use the MetricDescriptor.launch_stage instead.",
+                    "enum": [
+                        "LAUNCH_STAGE_UNSPECIFIED",
+                        "UNIMPLEMENTED",
+                        "PRELAUNCH",
+                        "EARLY_ACCESS",
+                        "ALPHA",
+                        "BETA",
+                        "GA",
+                        "DEPRECATED"
+                    ],
+                    "enumDescriptions": [
+                        "Do not use this default value.",
+                        "The feature is not yet implemented. Users can not use it.",
+                        "Prelaunch features are hidden from users and are only visible internally.",
+                        "Early Access features are limited to a closed group of testers. To use these features, you must sign up in advance and sign a Trusted Tester agreement (which includes confidentiality provisions). These features may be unstable, changed in backward-incompatible ways, and are not guaranteed to be released.",
+                        "Alpha is a limited availability test for releases before they are cleared for widespread use. By Alpha, all significant design issues are resolved and we are in the process of verifying functionality. Alpha customers need to apply for access, agree to applicable terms, and have their projects allowlisted. Alpha releases don\u2019t have to be feature complete, no SLAs are provided, and there are no technical support obligations, but they will be far enough along that customers can actually use them in test environments or for limited-use tests -- just like they would in normal production cases.",
+                        "Beta is the point at which we are ready to open a release for any customer to use. There are no SLA or technical support obligations in a Beta release. Products will be complete from a feature perspective, but may have some open outstanding issues. Beta releases are suitable for limited production use cases.",
+                        "GA features are open to all developers and are considered stable and fully qualified for production use.",
+                        "Deprecated features are scheduled to be shut down and removed. For more information, see the \u201cDeprecation Policy\u201d section of our Terms of Service (https://cloud.google.com/terms/) and the Google Cloud Platform Subject to the Deprecation Policy (https://cloud.google.com/terms/deprecation) documentation."
+                    ],
+                    "type": "string"
+                },
+                "samplePeriod": {
+                    "description": "The sampling period of metric data points. For metrics which are written periodically, consecutive data points are stored at this time interval, excluding data loss due to errors. Metrics with a higher granularity have a smaller sampling period.",
+                    "format": "google-duration",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MonitoredResource": {
+            "description": "An object representing a resource that can be used for monitoring, logging, billing, or other purposes. Examples include virtual machine instances, databases, and storage devices such as disks. The type field identifies a MonitoredResourceDescriptor object that describes the resource's schema. Information in the labels field identifies the actual resource and its attributes according to the schema. For example, a particular Compute Engine VM instance could be represented by the following object, because the MonitoredResourceDescriptor for \"gce_instance\" has labels \"instance_id\" and \"zone\": { \"type\": \"gce_instance\", \"labels\": { \"instance_id\": \"12345678901234\", \"zone\": \"us-central1-a\" }} ",
+            "id": "MonitoredResource",
+            "properties": {
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Compute Engine VM instances use the labels \"project_id\", \"instance_id\", and \"zone\".",
+                    "type": "object"
+                },
+                "type": {
+                    "description": "Required. The monitored resource type. This field must match the type field of a MonitoredResourceDescriptor object. For example, the type of a Compute Engine VM instance is gce_instance.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MonitoredResourceDescriptor": {
+            "description": "An object that describes the schema of a MonitoredResource object using a type name and a set of labels. For example, the monitored resource descriptor for Google Compute Engine VM instances has a type of \"gce_instance\" and specifies the use of the labels \"instance_id\" and \"zone\" to identify particular VM instances.Different APIs can support different monitored resource types. APIs generally provide a list method that returns the monitored resource descriptors used by the API.",
+            "id": "MonitoredResourceDescriptor",
+            "properties": {
+                "description": {
+                    "description": "Optional. A detailed description of the monitored resource type that might be used in documentation.",
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "Optional. A concise name for the monitored resource type that might be displayed in user interfaces. It should be a Title Cased Noun Phrase, without any article or other determiners. For example, \"Google Cloud SQL Database\".",
+                    "type": "string"
+                },
+                "labels": {
+                    "description": "Required. A set of labels used to describe instances of this monitored resource type. For example, an individual Google Cloud SQL database is identified by values for the labels \"database_id\" and \"zone\".",
+                    "items": {
+                        "$ref": "LabelDescriptor"
+                    },
+                    "type": "array"
+                },
+                "launchStage": {
+                    "description": "Optional. The launch stage of the monitored resource definition.",
+                    "enum": [
+                        "LAUNCH_STAGE_UNSPECIFIED",
+                        "UNIMPLEMENTED",
+                        "PRELAUNCH",
+                        "EARLY_ACCESS",
+                        "ALPHA",
+                        "BETA",
+                        "GA",
+                        "DEPRECATED"
+                    ],
+                    "enumDescriptions": [
+                        "Do not use this default value.",
+                        "The feature is not yet implemented. Users can not use it.",
+                        "Prelaunch features are hidden from users and are only visible internally.",
+                        "Early Access features are limited to a closed group of testers. To use these features, you must sign up in advance and sign a Trusted Tester agreement (which includes confidentiality provisions). These features may be unstable, changed in backward-incompatible ways, and are not guaranteed to be released.",
+                        "Alpha is a limited availability test for releases before they are cleared for widespread use. By Alpha, all significant design issues are resolved and we are in the process of verifying functionality. Alpha customers need to apply for access, agree to applicable terms, and have their projects allowlisted. Alpha releases don\u2019t have to be feature complete, no SLAs are provided, and there are no technical support obligations, but they will be far enough along that customers can actually use them in test environments or for limited-use tests -- just like they would in normal production cases.",
+                        "Beta is the point at which we are ready to open a release for any customer to use. There are no SLA or technical support obligations in a Beta release. Products will be complete from a feature perspective, but may have some open outstanding issues. Beta releases are suitable for limited production use cases.",
+                        "GA features are open to all developers and are considered stable and fully qualified for production use.",
+                        "Deprecated features are scheduled to be shut down and removed. For more information, see the \u201cDeprecation Policy\u201d section of our Terms of Service (https://cloud.google.com/terms/) and the Google Cloud Platform Subject to the Deprecation Policy (https://cloud.google.com/terms/deprecation) documentation."
+                    ],
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Optional. The resource name of the monitored resource descriptor: \"projects/{project_id}/monitoredResourceDescriptors/{type}\" where {type} is the value of the type field in this object and {project_id} is a project ID that provides API-specific context for accessing the type. APIs that do not use project information can use the resource name format \"monitoredResourceDescriptors/{type}\".",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Required. The monitored resource type. For example, the type \"cloudsql_database\" represents databases in Google Cloud SQL.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MonitoredResourceMetadata": {
+            "description": "Auxiliary metadata for a MonitoredResource object. MonitoredResource objects contain the minimum set of information to uniquely identify a monitored resource instance. There is some other useful auxiliary metadata. Monitoring and Logging use an ingestion pipeline to extract metadata for cloud resources of all types, and store the metadata in this message.",
+            "id": "MonitoredResourceMetadata",
+            "properties": {
+                "systemLabels": {
+                    "additionalProperties": {
+                        "description": "Properties of the object.",
+                        "type": "any"
+                    },
+                    "description": "Output only. Values for predefined system metadata labels. System labels are a kind of metadata extracted by Google, including \"machine_image\", \"vpc\", \"subnet_id\", \"security_group\", \"name\", etc. System label values can be only strings, Boolean values, or a list of strings. For example: { \"name\": \"my-test-instance\", \"security_group\": [\"a\", \"b\", \"c\"], \"spot_instance\": false } ",
+                    "type": "object"
+                },
+                "userLabels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Output only. A map of user-defined metadata labels.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "RequestLog": {
+            "description": "Complete log information about a single HTTP request to an App Engine application.",
+            "id": "RequestLog",
+            "properties": {
+                "appEngineRelease": {
+                    "description": "App Engine release version.",
+                    "type": "string"
+                },
+                "appId": {
+                    "description": "Application that handled this request.",
+                    "type": "string"
+                },
+                "cost": {
+                    "description": "An indication of the relative cost of serving this request.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "endTime": {
+                    "description": "Time when the request finished.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "finished": {
+                    "description": "Whether this request is finished or active.",
+                    "type": "boolean"
+                },
+                "first": {
+                    "description": "Whether this is the first RequestLog entry for this request. If an active request has several RequestLog entries written to Stackdriver Logging, then this field will be set for one of them.",
+                    "type": "boolean"
+                },
+                "host": {
+                    "description": "Internet host and port number of the resource being requested.",
+                    "type": "string"
+                },
+                "httpVersion": {
+                    "description": "HTTP version of request. Example: \"HTTP/1.1\".",
+                    "type": "string"
+                },
+                "instanceId": {
+                    "description": "An identifier for the instance that handled the request.",
+                    "type": "string"
+                },
+                "instanceIndex": {
+                    "description": "If the instance processing this request belongs to a manually scaled module, then this is the 0-based index of the instance. Otherwise, this value is -1.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "ip": {
+                    "description": "Origin IP address.",
+                    "type": "string"
+                },
+                "latency": {
+                    "description": "Latency of the request.",
+                    "format": "google-duration",
+                    "type": "string"
+                },
+                "line": {
+                    "description": "A list of log lines emitted by the application while serving this request.",
+                    "items": {
+                        "$ref": "LogLine"
+                    },
+                    "type": "array"
+                },
+                "megaCycles": {
+                    "description": "Number of CPU megacycles used to process request.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "method": {
+                    "description": "Request method. Example: \"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\".",
+                    "type": "string"
+                },
+                "moduleId": {
+                    "description": "Module of the application that handled this request.",
+                    "type": "string"
+                },
+                "nickname": {
+                    "description": "The logged-in user who made the request.Most likely, this is the part of the user's email before the @ sign. The field value is the same for different requests from the same user, but different users can have similar names. This information is also available to the application via the App Engine Users API.This field will be populated starting with App Engine 1.9.21.",
+                    "type": "string"
+                },
+                "pendingTime": {
+                    "description": "Time this request spent in the pending request queue.",
+                    "format": "google-duration",
+                    "type": "string"
+                },
+                "referrer": {
+                    "description": "Referrer URL of request.",
+                    "type": "string"
+                },
+                "requestId": {
+                    "description": "Globally unique identifier for a request, which is based on the request start time. Request IDs for requests which started later will compare greater as strings than those for requests which started earlier.",
+                    "type": "string"
+                },
+                "resource": {
+                    "description": "Contains the path and query portion of the URL that was requested. For example, if the URL was \"http://example.com/app?name=val\", the resource would be \"/app?name=val\". The fragment identifier, which is identified by the # character, is not included.",
+                    "type": "string"
+                },
+                "responseSize": {
+                    "description": "Size in bytes sent back to client by request.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "sourceReference": {
+                    "description": "Source code for the application that handled this request. There can be more than one source reference per deployed application if source code is distributed among multiple repositories.",
+                    "items": {
+                        "$ref": "SourceReference"
+                    },
+                    "type": "array"
+                },
+                "startTime": {
+                    "description": "Time when the request started.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "HTTP response status code. Example: 200, 404.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "taskName": {
+                    "description": "Task name of the request, in the case of an offline request.",
+                    "type": "string"
+                },
+                "taskQueueName": {
+                    "description": "Queue name of the request, in the case of an offline request.",
+                    "type": "string"
+                },
+                "traceId": {
+                    "description": "Stackdriver Trace identifier for this request.",
+                    "type": "string"
+                },
+                "traceSampled": {
+                    "description": "If true, the value in the 'trace_id' field was sampled for storage in a trace backend.",
+                    "type": "boolean"
+                },
+                "urlMapEntry": {
+                    "description": "File or class that handled the request.",
+                    "type": "string"
+                },
+                "userAgent": {
+                    "description": "User agent that made the request.",
+                    "type": "string"
+                },
+                "versionId": {
+                    "description": "Version of the application that handled this request.",
+                    "type": "string"
+                },
+                "wasLoadingRequest": {
+                    "description": "Whether this was a loading request for the instance.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "SourceLocation": {
+            "description": "Specifies a location in a source code file.",
+            "id": "SourceLocation",
+            "properties": {
+                "file": {
+                    "description": "Source file name. Depending on the runtime environment, this might be a simple name or a fully-qualified name.",
+                    "type": "string"
+                },
+                "functionName": {
+                    "description": "Human-readable name of the function or method being invoked, with optional context such as the class or package name. This information is used in contexts such as the logs viewer, where a file and line number are less meaningful. The format can vary by language. For example: qual.if.ied.Class.method (Java), dir/package.func (Go), function (Python).",
+                    "type": "string"
+                },
+                "line": {
+                    "description": "Line within the source file.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SourceReference": {
+            "description": "A reference to a particular snapshot of the source tree used to build and deploy an application.",
+            "id": "SourceReference",
+            "properties": {
+                "repository": {
+                    "description": "Optional. A URI string identifying the repository. Example: \"https://github.com/GoogleCloudPlatform/kubernetes.git\"",
+                    "type": "string"
+                },
+                "revisionId": {
+                    "description": "The canonical and persistent identifier of the deployed revision. Example (git): \"0035781c50ec7aa23385dc841529ce8a4b70db1b\"",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SuppressionInfo": {
+            "description": "Information about entries that were omitted from the session.",
+            "id": "SuppressionInfo",
+            "properties": {
+                "reason": {
+                    "description": "The reason that entries were omitted from the session.",
+                    "enum": [
+                        "REASON_UNSPECIFIED",
+                        "RATE_LIMIT",
+                        "NOT_CONSUMED"
+                    ],
+                    "enumDescriptions": [
+                        "Unexpected default.",
+                        "Indicates suppression occurred due to relevant entries being received in excess of rate limits. For quotas and limits, see Logging API quotas and limits (https://cloud.google.com/logging/quotas#api-limits).",
+                        "Indicates suppression occurred due to the client not consuming responses quickly enough."
+                    ],
+                    "type": "string"
+                },
+                "suppressedCount": {
+                    "description": "A lower bound on the count of entries omitted due to reason.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "TailLogEntriesRequest": {
+            "description": "The parameters to TailLogEntries.",
+            "id": "TailLogEntriesRequest",
+            "properties": {
+                "bufferWindow": {
+                    "description": "Optional. The amount of time to buffer log entries at the server before being returned to prevent out of order results due to late arriving log entries. Valid values are between 0-60000 milliseconds. Defaults to 2000 milliseconds.",
+                    "format": "google-duration",
+                    "type": "string"
+                },
+                "filter": {
+                    "description": "Optional. A filter that chooses which log entries to return. See Advanced Logs Filters (https://cloud.google.com/logging/docs/view/advanced_filters). Only log entries that match the filter are returned. An empty filter matches all log entries in the resources listed in resource_names. Referencing a parent resource that is not in resource_names will cause the filter to return no results. The maximum length of the filter is 20000 characters.",
+                    "type": "string"
+                },
+                "resourceNames": {
+                    "description": "Required. Name of a parent resource from which to retrieve log entries: \"projects/[PROJECT_ID]\" \"organizations/[ORGANIZATION_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]\" \"folders/[FOLDER_ID]\" May alternatively be one or more views: \"projects/PROJECT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID\" \"organization/ORGANIZATION_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID\" \"billingAccounts/BILLING_ACCOUNT_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID\" \"folders/FOLDER_ID/locations/LOCATION_ID/buckets/BUCKET_ID/views/VIEW_ID\"",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "TailLogEntriesResponse": {
+            "description": "Result returned from TailLogEntries.",
+            "id": "TailLogEntriesResponse",
+            "properties": {
+                "entries": {
+                    "description": "A list of log entries. Each response in the stream will order entries with increasing values of LogEntry.timestamp. Ordering is not guaranteed between separate responses.",
+                    "items": {
+                        "$ref": "LogEntry"
+                    },
+                    "type": "array"
+                },
+                "suppressionInfo": {
+                    "description": "If entries that otherwise would have been included in the session were not sent back to the client, counts of relevant entries omitted from the session with the reason that they were not included. There will be at most one of each reason per response. The counts represent the number of suppressed entries since the last streamed response.",
+                    "items": {
+                        "$ref": "SuppressionInfo"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "UndeleteBucketRequest": {
+            "description": "The parameters to UndeleteBucket.",
+            "id": "UndeleteBucketRequest",
+            "properties": {},
+            "type": "object"
+        },
+        "WriteLogEntriesRequest": {
+            "description": "The parameters to WriteLogEntries.",
+            "id": "WriteLogEntriesRequest",
+            "properties": {
+                "dryRun": {
+                    "description": "Optional. If true, the request should expect normal response, but the entries won't be persisted nor exported. Useful for checking whether the logging API endpoints are working properly before sending valuable data.",
+                    "type": "boolean"
+                },
+                "entries": {
+                    "description": "Required. The log entries to send to Logging. The order of log entries in this list does not matter. Values supplied in this method's log_name, resource, and labels fields are copied into those log entries in this list that do not include values for their corresponding fields. For more information, see the LogEntry type.If the timestamp or insert_id fields are missing in log entries, then this method supplies the current time or a unique identifier, respectively. The supplied values are chosen so that, among the log entries that did not supply their own values, the entries earlier in the list will sort before the entries later in the list. See the entries.list method.Log entries with timestamps that are more than the logs retention period (https://cloud.google.com/logging/quota-policy) in the past or more than 24 hours in the future will not be available when calling entries.list. However, those log entries can still be exported with LogSinks (https://cloud.google.com/logging/docs/api/tasks/exporting-logs).To improve throughput and to avoid exceeding the quota limit (https://cloud.google.com/logging/quota-policy) for calls to entries.write, you should try to include several log entries in this list, rather than calling this method for each individual log entry.",
+                    "items": {
+                        "$ref": "LogEntry"
+                    },
+                    "type": "array"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Optional. Default labels that are added to the labels field of all log entries in entries. If a log entry already has a label with the same key as a label in this parameter, then the log entry's label is not changed. See LogEntry.",
+                    "type": "object"
+                },
+                "logName": {
+                    "description": "Optional. A default log resource name that is assigned to all log entries in entries that do not specify a value for log_name: \"projects/[PROJECT_ID]/logs/[LOG_ID]\" \"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\" \"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\" \"folders/[FOLDER_ID]/logs/[LOG_ID]\" [LOG_ID] must be URL-encoded. For example: \"projects/my-project-id/logs/syslog\" \"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity\" The permission logging.logEntries.create is needed on each project, organization, billing account, or folder that is receiving new log entries, whether the resource is specified in logName or in an individual log entry.",
+                    "type": "string"
+                },
+                "partialSuccess": {
+                    "description": "Optional. Whether valid entries should be written even if some other entries fail due to INVALID_ARGUMENT or PERMISSION_DENIED errors. If any entry is not written, then the response status is the error associated with one of the failed entries and the response includes error details keyed by the entries' zero-based index in the entries.write method.",
+                    "type": "boolean"
+                },
+                "resource": {
+                    "$ref": "MonitoredResource",
+                    "description": "Optional. A default monitored resource object that is assigned to all log entries in entries that do not specify a value for resource. Example: { \"type\": \"gce_instance\", \"labels\": { \"zone\": \"us-central1-a\", \"instance_id\": \"00000000000000000000\" }} See LogEntry."
+                }
+            },
+            "type": "object"
+        },
+        "WriteLogEntriesResponse": {
+            "description": "Result returned from WriteLogEntries.",
+            "id": "WriteLogEntriesResponse",
+            "properties": {},
+            "type": "object"
+        }
+    },
+    "servicePath": "",
+    "title": "Cloud Logging API",
+    "version": "v2",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/people.v1.json b/googleapiclient/discovery_cache/documents/people.v1.json
index 8662908..1c72eaf 100644
--- a/googleapiclient/discovery_cache/documents/people.v1.json
+++ b/googleapiclient/discovery_cache/documents/people.v1.json
@@ -1082,7 +1082,7 @@
             }
         }
     },
-    "revision": "20210223",
+    "revision": "20210302",
     "rootUrl": "https://people.googleapis.com/",
     "schemas": {
         "Address": {
@@ -1677,7 +1677,7 @@
             "type": "object"
         },
         "GroupClientData": {
-            "description": "Arbitrary client data that is populated by clients. Duplicate keys and values are allowed. LINT.IfChange(GroupClientData)",
+            "description": "Arbitrary client data that is populated by clients. Duplicate keys and values are allowed.",
             "id": "GroupClientData",
             "properties": {
                 "key": {
diff --git a/googleapiclient/discovery_cache/documents/recommendationengine.v1beta1.json b/googleapiclient/discovery_cache/documents/recommendationengine.v1beta1.json
index 91fdcdd..99deb1e 100644
--- a/googleapiclient/discovery_cache/documents/recommendationengine.v1beta1.json
+++ b/googleapiclient/discovery_cache/documents/recommendationengine.v1beta1.json
@@ -1,2049 +1,2049 @@
 {
-  "resources": {
-    "projects": {
-      "resources": {
-        "locations": {
-          "resources": {
-            "catalogs": {
-              "methods": {
-                "list": {
-                  "description": "Lists all the catalog configurations associated with the project.",
-                  "httpMethod": "GET",
-                  "parameters": {
-                    "pageSize": {
-                      "type": "integer",
-                      "location": "query",
-                      "format": "int32",
-                      "description": "Optional. Maximum number of results to return. If unspecified, defaults to 50. Max allowed value is 1000."
-                    },
-                    "parent": {
-                      "description": "Required. The account resource name with an associated location.",
-                      "type": "string",
-                      "required": true,
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$"
-                    },
-                    "pageToken": {
-                      "description": "Optional. A page token, received from a previous `ListCatalogs` call. Provide this to retrieve the subsequent page.",
-                      "type": "string",
-                      "location": "query"
-                    }
-                  },
-                  "response": {
-                    "$ref": "GoogleCloudRecommendationengineV1beta1ListCatalogsResponse"
-                  },
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs",
-                  "path": "v1beta1/{+parent}/catalogs",
-                  "id": "recommendationengine.projects.locations.catalogs.list",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ]
-                },
-                "patch": {
-                  "response": {
-                    "$ref": "GoogleCloudRecommendationengineV1beta1Catalog"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "id": "recommendationengine.projects.locations.catalogs.patch",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "request": {
-                    "$ref": "GoogleCloudRecommendationengineV1beta1Catalog"
-                  },
-                  "parameters": {
-                    "updateMask": {
-                      "location": "query",
-                      "type": "string",
-                      "format": "google-fieldmask",
-                      "description": "Optional. Indicates which fields in the provided 'catalog' to update. If not set, will only update the catalog_item_level_config field. Currently only fields that can be updated are catalog_item_level_config."
-                    },
-                    "name": {
-                      "type": "string",
-                      "location": "path",
-                      "description": "The fully qualified resource name of the catalog.",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+$",
-                      "required": true
-                    }
-                  },
-                  "path": "v1beta1/{+name}",
-                  "httpMethod": "PATCH",
-                  "description": "Updates the catalog configuration.",
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
                 }
-              },
-              "resources": {
-                "eventStores": {
-                  "resources": {
-                    "userEvents": {
-                      "methods": {
-                        "import": {
-                          "httpMethod": "POST",
-                          "description": "Bulk import of User events. Request processing might be synchronous. Events that already exist are skipped. Use this method for backfilling historical user events. Operation.response is of type ImportResponse. Note that it is possible for a subset of the items to be successfully inserted. Operation.metadata is of type ImportMetadata.",
-                          "id": "recommendationengine.projects.locations.catalogs.eventStores.userEvents.import",
-                          "response": {
-                            "$ref": "GoogleLongrunningOperation"
-                          },
-                          "path": "v1beta1/{+parent}/userEvents:import",
-                          "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/userEvents:import",
-                          "parameters": {
-                            "parent": {
-                              "location": "path",
-                              "type": "string",
-                              "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+$",
-                              "description": "Required. \"projects/1234/locations/global/catalogs/default_catalog/eventStores/default_event_store\"",
-                              "required": true
-                            }
-                          },
-                          "request": {
-                            "$ref": "GoogleCloudRecommendationengineV1beta1ImportUserEventsRequest"
-                          },
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "parameterOrder": [
-                            "parent"
-                          ]
-                        },
-                        "collect": {
-                          "response": {
-                            "$ref": "GoogleApiHttpBody"
-                          },
-                          "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/userEvents:collect",
-                          "httpMethod": "GET",
-                          "path": "v1beta1/{+parent}/userEvents:collect",
-                          "id": "recommendationengine.projects.locations.catalogs.eventStores.userEvents.collect",
-                          "description": "Writes a single user event from the browser. This uses a GET request to due to browser restriction of POST-ing to a 3rd party domain. This method is used only by the Recommendations AI JavaScript pixel. Users should not call this method directly.",
-                          "parameterOrder": [
-                            "parent"
-                          ],
-                          "parameters": {
-                            "userEvent": {
-                              "type": "string",
-                              "location": "query",
-                              "description": "Required. URL encoded UserEvent proto."
+            }
+        }
+    },
+    "basePath": "",
+    "baseUrl": "https://recommendationengine.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Recommendations AI",
+    "description": "Note that we now highly recommend new customers to use Retail API, which incorporates the GA version of the Recommendations AI funtionalities. To enable Retail API, please visit https://console.cloud.google.com/apis/library/retail.googleapis.com. The Recommendations AI service enables customers to build end-to-end personalized recommendation systems without requiring a high level of expertise in machine learning, recommendation system, or Google Cloud.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/recommendations-ai/docs",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "recommendationengine:v1beta1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://recommendationengine.mtls.googleapis.com/",
+    "name": "recommendationengine",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        }
+    },
+    "protocol": "rest",
+    "resources": {
+        "projects": {
+            "resources": {
+                "locations": {
+                    "resources": {
+                        "catalogs": {
+                            "methods": {
+                                "list": {
+                                    "description": "Lists all the catalog configurations associated with the project.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs",
+                                    "httpMethod": "GET",
+                                    "id": "recommendationengine.projects.locations.catalogs.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "pageSize": {
+                                            "description": "Optional. Maximum number of results to return. If unspecified, defaults to 50. Max allowed value is 1000.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "Optional. A page token, received from a previous `ListCatalogs` call. Provide this to retrieve the subsequent page.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The account resource name with an associated location.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/catalogs",
+                                    "response": {
+                                        "$ref": "GoogleCloudRecommendationengineV1beta1ListCatalogsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "patch": {
+                                    "description": "Updates the catalog configuration.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}",
+                                    "httpMethod": "PATCH",
+                                    "id": "recommendationengine.projects.locations.catalogs.patch",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The fully qualified resource name of the catalog.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "updateMask": {
+                                            "description": "Optional. Indicates which fields in the provided 'catalog' to update. If not set, will only update the catalog_item_level_config field. Currently only fields that can be updated are catalog_item_level_config.",
+                                            "format": "google-fieldmask",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "request": {
+                                        "$ref": "GoogleCloudRecommendationengineV1beta1Catalog"
+                                    },
+                                    "response": {
+                                        "$ref": "GoogleCloudRecommendationengineV1beta1Catalog"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
                             },
-                            "ets": {
-                              "type": "string",
-                              "location": "query",
-                              "description": "Optional. The event timestamp in milliseconds. This prevents browser caching of otherwise identical get requests. The name is abbreviated to reduce the payload bytes.",
-                              "format": "int64"
-                            },
-                            "parent": {
-                              "type": "string",
-                              "description": "Required. The parent eventStore name, such as \"projects/1234/locations/global/catalogs/default_catalog/eventStores/default_event_store\".",
-                              "required": true,
-                              "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+$",
-                              "location": "path"
-                            },
-                            "uri": {
-                              "description": "Optional. The url including cgi-parameters but excluding the hash fragment. The URL must be truncated to 1.5K bytes to conservatively be under the 2K bytes. This is often more useful than the referer url, because many browsers only send the domain for 3rd party requests.",
-                              "location": "query",
-                              "type": "string"
+                            "resources": {
+                                "catalogItems": {
+                                    "methods": {
+                                        "create": {
+                                            "description": "Creates a catalog item.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/catalogItems",
+                                            "httpMethod": "POST",
+                                            "id": "recommendationengine.projects.locations.catalogs.catalogItems.create",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "parent": {
+                                                    "description": "Required. The parent catalog resource name, such as \"projects/*/locations/global/catalogs/default_catalog\".",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+parent}/catalogItems",
+                                            "request": {
+                                                "$ref": "GoogleCloudRecommendationengineV1beta1CatalogItem"
+                                            },
+                                            "response": {
+                                                "$ref": "GoogleCloudRecommendationengineV1beta1CatalogItem"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        },
+                                        "delete": {
+                                            "description": "Deletes a catalog item.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/catalogItems/{catalogItemsId}",
+                                            "httpMethod": "DELETE",
+                                            "id": "recommendationengine.projects.locations.catalogs.catalogItems.delete",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. Full resource name of catalog item, such as \"projects/*/locations/global/catalogs/default_catalog/catalogItems/some_catalog_item_id\".",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/catalogItems/.*$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+name}",
+                                            "response": {
+                                                "$ref": "GoogleProtobufEmpty"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        },
+                                        "get": {
+                                            "description": "Gets a specific catalog item.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/catalogItems/{catalogItemsId}",
+                                            "httpMethod": "GET",
+                                            "id": "recommendationengine.projects.locations.catalogs.catalogItems.get",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. Full resource name of catalog item, such as \"projects/*/locations/global/catalogs/default_catalog/catalogitems/some_catalog_item_id\".",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/catalogItems/.*$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+name}",
+                                            "response": {
+                                                "$ref": "GoogleCloudRecommendationengineV1beta1CatalogItem"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        },
+                                        "import": {
+                                            "description": "Bulk import of multiple catalog items. Request processing may be synchronous. No partial updating supported. Non-existing items will be created. Operation.response is of type ImportResponse. Note that it is possible for a subset of the items to be successfully updated.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/catalogItems:import",
+                                            "httpMethod": "POST",
+                                            "id": "recommendationengine.projects.locations.catalogs.catalogItems.import",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "parent": {
+                                                    "description": "Required. \"projects/1234/locations/global/catalogs/default_catalog\" If no updateMask is specified, requires catalogItems.create permission. If updateMask is specified, requires catalogItems.update permission.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+parent}/catalogItems:import",
+                                            "request": {
+                                                "$ref": "GoogleCloudRecommendationengineV1beta1ImportCatalogItemsRequest"
+                                            },
+                                            "response": {
+                                                "$ref": "GoogleLongrunningOperation"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        },
+                                        "list": {
+                                            "description": "Gets a list of catalog items.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/catalogItems",
+                                            "httpMethod": "GET",
+                                            "id": "recommendationengine.projects.locations.catalogs.catalogItems.list",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "filter": {
+                                                    "description": "Optional. A filter to apply on the list results.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "pageSize": {
+                                                    "description": "Optional. Maximum number of results to return per page. If zero, the service will choose a reasonable default.",
+                                                    "format": "int32",
+                                                    "location": "query",
+                                                    "type": "integer"
+                                                },
+                                                "pageToken": {
+                                                    "description": "Optional. The previous ListCatalogItemsResponse.next_page_token.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "parent": {
+                                                    "description": "Required. The parent catalog resource name, such as \"projects/*/locations/global/catalogs/default_catalog\".",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+parent}/catalogItems",
+                                            "response": {
+                                                "$ref": "GoogleCloudRecommendationengineV1beta1ListCatalogItemsResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        },
+                                        "patch": {
+                                            "description": "Updates a catalog item. Partial updating is supported. Non-existing items will be created.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/catalogItems/{catalogItemsId}",
+                                            "httpMethod": "PATCH",
+                                            "id": "recommendationengine.projects.locations.catalogs.catalogItems.patch",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. Full resource name of catalog item, such as \"projects/*/locations/global/catalogs/default_catalog/catalogItems/some_catalog_item_id\".",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/catalogItems/.*$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "updateMask": {
+                                                    "description": "Optional. Indicates which fields in the provided 'item' to update. If not set, will by default update all fields.",
+                                                    "format": "google-fieldmask",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+name}",
+                                            "request": {
+                                                "$ref": "GoogleCloudRecommendationengineV1beta1CatalogItem"
+                                            },
+                                            "response": {
+                                                "$ref": "GoogleCloudRecommendationengineV1beta1CatalogItem"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        }
+                                    }
+                                },
+                                "eventStores": {
+                                    "resources": {
+                                        "operations": {
+                                            "methods": {
+                                                "get": {
+                                                    "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/operations/{operationsId}",
+                                                    "httpMethod": "GET",
+                                                    "id": "recommendationengine.projects.locations.catalogs.eventStores.operations.get",
+                                                    "parameterOrder": [
+                                                        "name"
+                                                    ],
+                                                    "parameters": {
+                                                        "name": {
+                                                            "description": "The name of the operation resource.",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+/operations/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+name}",
+                                                    "response": {
+                                                        "$ref": "GoogleLongrunningOperation"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                },
+                                                "list": {
+                                                    "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/operations",
+                                                    "httpMethod": "GET",
+                                                    "id": "recommendationengine.projects.locations.catalogs.eventStores.operations.list",
+                                                    "parameterOrder": [
+                                                        "name"
+                                                    ],
+                                                    "parameters": {
+                                                        "filter": {
+                                                            "description": "The standard list filter.",
+                                                            "location": "query",
+                                                            "type": "string"
+                                                        },
+                                                        "name": {
+                                                            "description": "The name of the operation's parent resource.",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        },
+                                                        "pageSize": {
+                                                            "description": "The standard list page size.",
+                                                            "format": "int32",
+                                                            "location": "query",
+                                                            "type": "integer"
+                                                        },
+                                                        "pageToken": {
+                                                            "description": "The standard list page token.",
+                                                            "location": "query",
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+name}/operations",
+                                                    "response": {
+                                                        "$ref": "GoogleLongrunningListOperationsResponse"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                }
+                                            }
+                                        },
+                                        "placements": {
+                                            "methods": {
+                                                "predict": {
+                                                    "description": "Makes a recommendation prediction. If using API Key based authentication, the API Key must be registered using the PredictionApiKeyRegistry service. [Learn more](https://cloud.google.com/recommendations-ai/docs/setting-up#register-key).",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/placements/{placementsId}:predict",
+                                                    "httpMethod": "POST",
+                                                    "id": "recommendationengine.projects.locations.catalogs.eventStores.placements.predict",
+                                                    "parameterOrder": [
+                                                        "name"
+                                                    ],
+                                                    "parameters": {
+                                                        "name": {
+                                                            "description": "Required. Full resource name of the format: {name=projects/*/locations/global/catalogs/default_catalog/eventStores/default_event_store/placements/*} The id of the recommendation engine placement. This id is used to identify the set of models that will be used to make the prediction. We currently support three placements with the following IDs by default: * `shopping_cart`: Predicts items frequently bought together with one or more catalog items in the same shopping session. Commonly displayed after `add-to-cart` events, on product detail pages, or on the shopping cart page. * `home_page`: Predicts the next product that a user will most likely engage with or purchase based on the shopping or viewing history of the specified `userId` or `visitorId`. For example - Recommendations for you. * `product_detail`: Predicts the next product that a user will most likely engage with or purchase. The prediction is based on the shopping or viewing history of the specified `userId` or `visitorId` and its relevance to a specified `CatalogItem`. Typically used on product detail pages. For example - More items like this. * `recently_viewed_default`: Returns up to 75 items recently viewed by the specified `userId` or `visitorId`, most recent ones first. Returns nothing if neither of them has viewed any items yet. For example - Recently viewed. The full list of available placements can be seen at https://console.cloud.google.com/recommendation/datafeeds/default_catalog/dashboard",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+/placements/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+name}:predict",
+                                                    "request": {
+                                                        "$ref": "GoogleCloudRecommendationengineV1beta1PredictRequest"
+                                                    },
+                                                    "response": {
+                                                        "$ref": "GoogleCloudRecommendationengineV1beta1PredictResponse"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                }
+                                            }
+                                        },
+                                        "predictionApiKeyRegistrations": {
+                                            "methods": {
+                                                "create": {
+                                                    "description": "Register an API key for use with predict method.",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/predictionApiKeyRegistrations",
+                                                    "httpMethod": "POST",
+                                                    "id": "recommendationengine.projects.locations.catalogs.eventStores.predictionApiKeyRegistrations.create",
+                                                    "parameterOrder": [
+                                                        "parent"
+                                                    ],
+                                                    "parameters": {
+                                                        "parent": {
+                                                            "description": "Required. The parent resource path. \"projects/*/locations/global/catalogs/default_catalog/eventStores/default_event_store\".",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+parent}/predictionApiKeyRegistrations",
+                                                    "request": {
+                                                        "$ref": "GoogleCloudRecommendationengineV1beta1CreatePredictionApiKeyRegistrationRequest"
+                                                    },
+                                                    "response": {
+                                                        "$ref": "GoogleCloudRecommendationengineV1beta1PredictionApiKeyRegistration"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                },
+                                                "delete": {
+                                                    "description": "Unregister an apiKey from using for predict method.",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/predictionApiKeyRegistrations/{predictionApiKeyRegistrationsId}",
+                                                    "httpMethod": "DELETE",
+                                                    "id": "recommendationengine.projects.locations.catalogs.eventStores.predictionApiKeyRegistrations.delete",
+                                                    "parameterOrder": [
+                                                        "name"
+                                                    ],
+                                                    "parameters": {
+                                                        "name": {
+                                                            "description": "Required. The API key to unregister including full resource path. \"projects/*/locations/global/catalogs/default_catalog/eventStores/default_event_store/predictionApiKeyRegistrations/\"",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+/predictionApiKeyRegistrations/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+name}",
+                                                    "response": {
+                                                        "$ref": "GoogleProtobufEmpty"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                },
+                                                "list": {
+                                                    "description": "List the registered apiKeys for use with predict method.",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/predictionApiKeyRegistrations",
+                                                    "httpMethod": "GET",
+                                                    "id": "recommendationengine.projects.locations.catalogs.eventStores.predictionApiKeyRegistrations.list",
+                                                    "parameterOrder": [
+                                                        "parent"
+                                                    ],
+                                                    "parameters": {
+                                                        "pageSize": {
+                                                            "description": "Optional. Maximum number of results to return per page. If unset, the service will choose a reasonable default.",
+                                                            "format": "int32",
+                                                            "location": "query",
+                                                            "type": "integer"
+                                                        },
+                                                        "pageToken": {
+                                                            "description": "Optional. The previous `ListPredictionApiKeyRegistration.nextPageToken`.",
+                                                            "location": "query",
+                                                            "type": "string"
+                                                        },
+                                                        "parent": {
+                                                            "description": "Required. The parent placement resource name such as \"projects/1234/locations/global/catalogs/default_catalog/eventStores/default_event_store\"",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+parent}/predictionApiKeyRegistrations",
+                                                    "response": {
+                                                        "$ref": "GoogleCloudRecommendationengineV1beta1ListPredictionApiKeyRegistrationsResponse"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                }
+                                            }
+                                        },
+                                        "userEvents": {
+                                            "methods": {
+                                                "collect": {
+                                                    "description": "Writes a single user event from the browser. This uses a GET request to due to browser restriction of POST-ing to a 3rd party domain. This method is used only by the Recommendations AI JavaScript pixel. Users should not call this method directly.",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/userEvents:collect",
+                                                    "httpMethod": "GET",
+                                                    "id": "recommendationengine.projects.locations.catalogs.eventStores.userEvents.collect",
+                                                    "parameterOrder": [
+                                                        "parent"
+                                                    ],
+                                                    "parameters": {
+                                                        "ets": {
+                                                            "description": "Optional. The event timestamp in milliseconds. This prevents browser caching of otherwise identical get requests. The name is abbreviated to reduce the payload bytes.",
+                                                            "format": "int64",
+                                                            "location": "query",
+                                                            "type": "string"
+                                                        },
+                                                        "parent": {
+                                                            "description": "Required. The parent eventStore name, such as \"projects/1234/locations/global/catalogs/default_catalog/eventStores/default_event_store\".",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        },
+                                                        "uri": {
+                                                            "description": "Optional. The url including cgi-parameters but excluding the hash fragment. The URL must be truncated to 1.5K bytes to conservatively be under the 2K bytes. This is often more useful than the referer url, because many browsers only send the domain for 3rd party requests.",
+                                                            "location": "query",
+                                                            "type": "string"
+                                                        },
+                                                        "userEvent": {
+                                                            "description": "Required. URL encoded UserEvent proto.",
+                                                            "location": "query",
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+parent}/userEvents:collect",
+                                                    "response": {
+                                                        "$ref": "GoogleApiHttpBody"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                },
+                                                "import": {
+                                                    "description": "Bulk import of User events. Request processing might be synchronous. Events that already exist are skipped. Use this method for backfilling historical user events. Operation.response is of type ImportResponse. Note that it is possible for a subset of the items to be successfully inserted. Operation.metadata is of type ImportMetadata.",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/userEvents:import",
+                                                    "httpMethod": "POST",
+                                                    "id": "recommendationengine.projects.locations.catalogs.eventStores.userEvents.import",
+                                                    "parameterOrder": [
+                                                        "parent"
+                                                    ],
+                                                    "parameters": {
+                                                        "parent": {
+                                                            "description": "Required. \"projects/1234/locations/global/catalogs/default_catalog/eventStores/default_event_store\"",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+parent}/userEvents:import",
+                                                    "request": {
+                                                        "$ref": "GoogleCloudRecommendationengineV1beta1ImportUserEventsRequest"
+                                                    },
+                                                    "response": {
+                                                        "$ref": "GoogleLongrunningOperation"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                },
+                                                "list": {
+                                                    "description": "Gets a list of user events within a time range, with potential filtering. The method does not list unjoined user events. Unjoined user event definition: when a user event is ingested from Recommendations AI User Event APIs, the catalog item included in the user event is connected with the current catalog. If a catalog item of the ingested event is not in the current catalog, it could lead to degraded model quality. This is called an unjoined event.",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/userEvents",
+                                                    "httpMethod": "GET",
+                                                    "id": "recommendationengine.projects.locations.catalogs.eventStores.userEvents.list",
+                                                    "parameterOrder": [
+                                                        "parent"
+                                                    ],
+                                                    "parameters": {
+                                                        "filter": {
+                                                            "description": "Optional. Filtering expression to specify restrictions over returned events. This is a sequence of terms, where each term applies some kind of a restriction to the returned user events. Use this expression to restrict results to a specific time range, or filter events by eventType. eg: eventTime > \"2012-04-23T18:25:43.511Z\" eventsMissingCatalogItems eventTime<\"2012-04-23T18:25:43.511Z\" eventType=search We expect only 3 types of fields: * eventTime: this can be specified a maximum of 2 times, once with a less than operator and once with a greater than operator. The eventTime restrict should result in one contiguous valid eventTime range. * eventType: only 1 eventType restriction can be specified. * eventsMissingCatalogItems: specififying this will restrict results to events for which catalog items were not found in the catalog. The default behavior is to return only those events for which catalog items were found. Some examples of valid filters expressions: * Example 1: eventTime > \"2012-04-23T18:25:43.511Z\" eventTime < \"2012-04-23T18:30:43.511Z\" * Example 2: eventTime > \"2012-04-23T18:25:43.511Z\" eventType = detail-page-view * Example 3: eventsMissingCatalogItems eventType = search eventTime < \"2018-04-23T18:30:43.511Z\" * Example 4: eventTime > \"2012-04-23T18:25:43.511Z\" * Example 5: eventType = search * Example 6: eventsMissingCatalogItems",
+                                                            "location": "query",
+                                                            "type": "string"
+                                                        },
+                                                        "pageSize": {
+                                                            "description": "Optional. Maximum number of results to return per page. If zero, the service will choose a reasonable default.",
+                                                            "format": "int32",
+                                                            "location": "query",
+                                                            "type": "integer"
+                                                        },
+                                                        "pageToken": {
+                                                            "description": "Optional. The previous ListUserEventsResponse.next_page_token.",
+                                                            "location": "query",
+                                                            "type": "string"
+                                                        },
+                                                        "parent": {
+                                                            "description": "Required. The parent eventStore resource name, such as \"projects/*/locations/*/catalogs/default_catalog/eventStores/default_event_store\".",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+parent}/userEvents",
+                                                    "response": {
+                                                        "$ref": "GoogleCloudRecommendationengineV1beta1ListUserEventsResponse"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                },
+                                                "purge": {
+                                                    "description": "Deletes permanently all user events specified by the filter provided. Depending on the number of events specified by the filter, this operation could take hours or days to complete. To test a filter, use the list command first.",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/userEvents:purge",
+                                                    "httpMethod": "POST",
+                                                    "id": "recommendationengine.projects.locations.catalogs.eventStores.userEvents.purge",
+                                                    "parameterOrder": [
+                                                        "parent"
+                                                    ],
+                                                    "parameters": {
+                                                        "parent": {
+                                                            "description": "Required. The resource name of the event_store under which the events are created. The format is \"projects/${projectId}/locations/global/catalogs/${catalogId}/eventStores/${eventStoreId}\"",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+parent}/userEvents:purge",
+                                                    "request": {
+                                                        "$ref": "GoogleCloudRecommendationengineV1beta1PurgeUserEventsRequest"
+                                                    },
+                                                    "response": {
+                                                        "$ref": "GoogleLongrunningOperation"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                },
+                                                "rejoin": {
+                                                    "description": "Triggers a user event rejoin operation with latest catalog data. Events will not be annotated with detailed catalog information if catalog item is missing at the time the user event is ingested, and these events are stored as unjoined events with a limited usage on training and serving. This API can be used to trigger a 'join' operation on specified events with latest version of catalog items. It can also be used to correct events joined with wrong catalog items.",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/userEvents:rejoin",
+                                                    "httpMethod": "POST",
+                                                    "id": "recommendationengine.projects.locations.catalogs.eventStores.userEvents.rejoin",
+                                                    "parameterOrder": [
+                                                        "parent"
+                                                    ],
+                                                    "parameters": {
+                                                        "parent": {
+                                                            "description": "Required. Full resource name of user event, such as \"projects/*/locations/*/catalogs/default_catalog/eventStores/default_event_store\".",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+parent}/userEvents:rejoin",
+                                                    "request": {
+                                                        "$ref": "GoogleCloudRecommendationengineV1beta1RejoinUserEventsRequest"
+                                                    },
+                                                    "response": {
+                                                        "$ref": "GoogleLongrunningOperation"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                },
+                                                "write": {
+                                                    "description": "Writes a single user event.",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/userEvents:write",
+                                                    "httpMethod": "POST",
+                                                    "id": "recommendationengine.projects.locations.catalogs.eventStores.userEvents.write",
+                                                    "parameterOrder": [
+                                                        "parent"
+                                                    ],
+                                                    "parameters": {
+                                                        "parent": {
+                                                            "description": "Required. The parent eventStore resource name, such as \"projects/1234/locations/global/catalogs/default_catalog/eventStores/default_event_store\".",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+parent}/userEvents:write",
+                                                    "request": {
+                                                        "$ref": "GoogleCloudRecommendationengineV1beta1UserEvent"
+                                                    },
+                                                    "response": {
+                                                        "$ref": "GoogleCloudRecommendationengineV1beta1UserEvent"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                }
+                                            }
+                                        }
+                                    }
+                                },
+                                "operations": {
+                                    "methods": {
+                                        "get": {
+                                            "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/operations/{operationsId}",
+                                            "httpMethod": "GET",
+                                            "id": "recommendationengine.projects.locations.catalogs.operations.get",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "The name of the operation resource.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/operations/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+name}",
+                                            "response": {
+                                                "$ref": "GoogleLongrunningOperation"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        },
+                                        "list": {
+                                            "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/operations",
+                                            "httpMethod": "GET",
+                                            "id": "recommendationengine.projects.locations.catalogs.operations.list",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "filter": {
+                                                    "description": "The standard list filter.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "name": {
+                                                    "description": "The name of the operation's parent resource.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "pageSize": {
+                                                    "description": "The standard list page size.",
+                                                    "format": "int32",
+                                                    "location": "query",
+                                                    "type": "integer"
+                                                },
+                                                "pageToken": {
+                                                    "description": "The standard list page token.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+name}/operations",
+                                            "response": {
+                                                "$ref": "GoogleLongrunningListOperationsResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        }
+                                    }
+                                }
                             }
-                          },
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ]
-                        },
-                        "list": {
-                          "path": "v1beta1/{+parent}/userEvents",
-                          "description": "Gets a list of user events within a time range, with potential filtering. The method does not list unjoined user events. Unjoined user event definition: when a user event is ingested from Recommendations AI User Event APIs, the catalog item included in the user event is connected with the current catalog. If a catalog item of the ingested event is not in the current catalog, it could lead to degraded model quality. This is called an unjoined event.",
-                          "response": {
-                            "$ref": "GoogleCloudRecommendationengineV1beta1ListUserEventsResponse"
-                          },
-                          "parameters": {
-                            "pageSize": {
-                              "type": "integer",
-                              "description": "Optional. Maximum number of results to return per page. If zero, the service will choose a reasonable default.",
-                              "location": "query",
-                              "format": "int32"
-                            },
-                            "filter": {
-                              "type": "string",
-                              "location": "query",
-                              "description": "Optional. Filtering expression to specify restrictions over returned events. This is a sequence of terms, where each term applies some kind of a restriction to the returned user events. Use this expression to restrict results to a specific time range, or filter events by eventType. eg: eventTime \u003e \"2012-04-23T18:25:43.511Z\" eventsMissingCatalogItems eventTime\u003c\"2012-04-23T18:25:43.511Z\" eventType=search We expect only 3 types of fields: * eventTime: this can be specified a maximum of 2 times, once with a less than operator and once with a greater than operator. The eventTime restrict should result in one contiguous valid eventTime range. * eventType: only 1 eventType restriction can be specified. * eventsMissingCatalogItems: specififying this will restrict results to events for which catalog items were not found in the catalog. The default behavior is to return only those events for which catalog items were found. Some examples of valid filters expressions: * Example 1: eventTime \u003e \"2012-04-23T18:25:43.511Z\" eventTime \u003c \"2012-04-23T18:30:43.511Z\" * Example 2: eventTime \u003e \"2012-04-23T18:25:43.511Z\" eventType = detail-page-view * Example 3: eventsMissingCatalogItems eventType = search eventTime \u003c \"2018-04-23T18:30:43.511Z\" * Example 4: eventTime \u003e \"2012-04-23T18:25:43.511Z\" * Example 5: eventType = search * Example 6: eventsMissingCatalogItems"
-                            },
-                            "pageToken": {
-                              "description": "Optional. The previous ListUserEventsResponse.next_page_token.",
-                              "location": "query",
-                              "type": "string"
-                            },
-                            "parent": {
-                              "location": "path",
-                              "required": true,
-                              "description": "Required. The parent eventStore resource name, such as \"projects/*/locations/*/catalogs/default_catalog/eventStores/default_event_store\".",
-                              "type": "string",
-                              "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+$"
-                            }
-                          },
-                          "httpMethod": "GET",
-                          "parameterOrder": [
-                            "parent"
-                          ],
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "id": "recommendationengine.projects.locations.catalogs.eventStores.userEvents.list",
-                          "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/userEvents"
-                        },
-                        "purge": {
-                          "httpMethod": "POST",
-                          "parameterOrder": [
-                            "parent"
-                          ],
-                          "id": "recommendationengine.projects.locations.catalogs.eventStores.userEvents.purge",
-                          "request": {
-                            "$ref": "GoogleCloudRecommendationengineV1beta1PurgeUserEventsRequest"
-                          },
-                          "description": "Deletes permanently all user events specified by the filter provided. Depending on the number of events specified by the filter, this operation could take hours or days to complete. To test a filter, use the list command first.",
-                          "response": {
-                            "$ref": "GoogleLongrunningOperation"
-                          },
-                          "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/userEvents:purge",
-                          "path": "v1beta1/{+parent}/userEvents:purge",
-                          "parameters": {
-                            "parent": {
-                              "description": "Required. The resource name of the event_store under which the events are created. The format is \"projects/${projectId}/locations/global/catalogs/${catalogId}/eventStores/${eventStoreId}\"",
-                              "type": "string",
-                              "location": "path",
-                              "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+$",
-                              "required": true
-                            }
-                          },
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ]
-                        },
-                        "write": {
-                          "parameterOrder": [
-                            "parent"
-                          ],
-                          "description": "Writes a single user event.",
-                          "path": "v1beta1/{+parent}/userEvents:write",
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/userEvents:write",
-                          "request": {
-                            "$ref": "GoogleCloudRecommendationengineV1beta1UserEvent"
-                          },
-                          "id": "recommendationengine.projects.locations.catalogs.eventStores.userEvents.write",
-                          "response": {
-                            "$ref": "GoogleCloudRecommendationengineV1beta1UserEvent"
-                          },
-                          "httpMethod": "POST",
-                          "parameters": {
-                            "parent": {
-                              "description": "Required. The parent eventStore resource name, such as \"projects/1234/locations/global/catalogs/default_catalog/eventStores/default_event_store\".",
-                              "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+$",
-                              "required": true,
-                              "location": "path",
-                              "type": "string"
-                            }
-                          }
-                        },
-                        "rejoin": {
-                          "request": {
-                            "$ref": "GoogleCloudRecommendationengineV1beta1RejoinUserEventsRequest"
-                          },
-                          "parameters": {
-                            "parent": {
-                              "required": true,
-                              "type": "string",
-                              "description": "Required. Full resource name of user event, such as \"projects/*/locations/*/catalogs/default_catalog/eventStores/default_event_store\".",
-                              "location": "path",
-                              "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+$"
-                            }
-                          },
-                          "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/userEvents:rejoin",
-                          "path": "v1beta1/{+parent}/userEvents:rejoin",
-                          "response": {
-                            "$ref": "GoogleLongrunningOperation"
-                          },
-                          "description": "Triggers a user event rejoin operation with latest catalog data. Events will not be annotated with detailed catalog information if catalog item is missing at the time the user event is ingested, and these events are stored as unjoined events with a limited usage on training and serving. This API can be used to trigger a 'join' operation on specified events with latest version of catalog items. It can also be used to correct events joined with wrong catalog items.",
-                          "httpMethod": "POST",
-                          "id": "recommendationengine.projects.locations.catalogs.eventStores.userEvents.rejoin",
-                          "parameterOrder": [
-                            "parent"
-                          ],
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ]
                         }
-                      }
-                    },
-                    "operations": {
-                      "methods": {
-                        "list": {
-                          "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/operations",
-                          "parameters": {
-                            "filter": {
-                              "type": "string",
-                              "location": "query",
-                              "description": "The standard list filter."
-                            },
-                            "pageSize": {
-                              "description": "The standard list page size.",
-                              "type": "integer",
-                              "format": "int32",
-                              "location": "query"
-                            },
-                            "name": {
-                              "type": "string",
-                              "required": true,
-                              "location": "path",
-                              "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+$",
-                              "description": "The name of the operation's parent resource."
-                            },
-                            "pageToken": {
-                              "location": "query",
-                              "type": "string",
-                              "description": "The standard list page token."
-                            }
-                          },
-                          "id": "recommendationengine.projects.locations.catalogs.eventStores.operations.list",
-                          "response": {
-                            "$ref": "GoogleLongrunningListOperationsResponse"
-                          },
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "httpMethod": "GET",
-                          "parameterOrder": [
-                            "name"
-                          ],
-                          "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
-                          "path": "v1beta1/{+name}/operations"
-                        },
-                        "get": {
-                          "httpMethod": "GET",
-                          "response": {
-                            "$ref": "GoogleLongrunningOperation"
-                          },
-                          "parameters": {
-                            "name": {
-                              "required": true,
-                              "description": "The name of the operation resource.",
-                              "type": "string",
-                              "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+/operations/[^/]+$",
-                              "location": "path"
-                            }
-                          },
-                          "path": "v1beta1/{+name}",
-                          "parameterOrder": [
-                            "name"
-                          ],
-                          "id": "recommendationengine.projects.locations.catalogs.eventStores.operations.get",
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/operations/{operationsId}",
-                          "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service."
-                        }
-                      }
-                    },
-                    "predictionApiKeyRegistrations": {
-                      "methods": {
-                        "list": {
-                          "response": {
-                            "$ref": "GoogleCloudRecommendationengineV1beta1ListPredictionApiKeyRegistrationsResponse"
-                          },
-                          "path": "v1beta1/{+parent}/predictionApiKeyRegistrations",
-                          "id": "recommendationengine.projects.locations.catalogs.eventStores.predictionApiKeyRegistrations.list",
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "description": "List the registered apiKeys for use with predict method.",
-                          "parameters": {
-                            "pageSize": {
-                              "location": "query",
-                              "description": "Optional. Maximum number of results to return per page. If unset, the service will choose a reasonable default.",
-                              "type": "integer",
-                              "format": "int32"
-                            },
-                            "pageToken": {
-                              "description": "Optional. The previous `ListPredictionApiKeyRegistration.nextPageToken`.",
-                              "location": "query",
-                              "type": "string"
-                            },
-                            "parent": {
-                              "description": "Required. The parent placement resource name such as \"projects/1234/locations/global/catalogs/default_catalog/eventStores/default_event_store\"",
-                              "type": "string",
-                              "required": true,
-                              "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+$",
-                              "location": "path"
-                            }
-                          },
-                          "httpMethod": "GET",
-                          "parameterOrder": [
-                            "parent"
-                          ],
-                          "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/predictionApiKeyRegistrations"
-                        },
-                        "create": {
-                          "request": {
-                            "$ref": "GoogleCloudRecommendationengineV1beta1CreatePredictionApiKeyRegistrationRequest"
-                          },
-                          "path": "v1beta1/{+parent}/predictionApiKeyRegistrations",
-                          "description": "Register an API key for use with predict method.",
-                          "id": "recommendationengine.projects.locations.catalogs.eventStores.predictionApiKeyRegistrations.create",
-                          "parameterOrder": [
-                            "parent"
-                          ],
-                          "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/predictionApiKeyRegistrations",
-                          "httpMethod": "POST",
-                          "parameters": {
-                            "parent": {
-                              "description": "Required. The parent resource path. \"projects/*/locations/global/catalogs/default_catalog/eventStores/default_event_store\".",
-                              "location": "path",
-                              "required": true,
-                              "type": "string",
-                              "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+$"
-                            }
-                          },
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "response": {
-                            "$ref": "GoogleCloudRecommendationengineV1beta1PredictionApiKeyRegistration"
-                          }
-                        },
-                        "delete": {
-                          "httpMethod": "DELETE",
-                          "path": "v1beta1/{+name}",
-                          "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/predictionApiKeyRegistrations/{predictionApiKeyRegistrationsId}",
-                          "parameters": {
-                            "name": {
-                              "location": "path",
-                              "type": "string",
-                              "required": true,
-                              "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+/predictionApiKeyRegistrations/[^/]+$",
-                              "description": "Required. The API key to unregister including full resource path. \"projects/*/locations/global/catalogs/default_catalog/eventStores/default_event_store/predictionApiKeyRegistrations/\""
-                            }
-                          },
-                          "description": "Unregister an apiKey from using for predict method.",
-                          "id": "recommendationengine.projects.locations.catalogs.eventStores.predictionApiKeyRegistrations.delete",
-                          "response": {
-                            "$ref": "GoogleProtobufEmpty"
-                          },
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "parameterOrder": [
-                            "name"
-                          ]
-                        }
-                      }
-                    },
-                    "placements": {
-                      "methods": {
-                        "predict": {
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "description": "Makes a recommendation prediction. If using API Key based authentication, the API Key must be registered using the PredictionApiKeyRegistry service. [Learn more](/recommendations-ai/docs/setting-up#register-key).",
-                          "parameters": {
-                            "name": {
-                              "required": true,
-                              "type": "string",
-                              "description": "Required. Full resource name of the format: {name=projects/*/locations/global/catalogs/default_catalog/eventStores/default_event_store/placements/*} The id of the recommendation engine placement. This id is used to identify the set of models that will be used to make the prediction. We currently support three placements with the following IDs by default: * `shopping_cart`: Predicts items frequently bought together with one or more catalog items in the same shopping session. Commonly displayed after `add-to-cart` events, on product detail pages, or on the shopping cart page. * `home_page`: Predicts the next product that a user will most likely engage with or purchase based on the shopping or viewing history of the specified `userId` or `visitorId`. For example - Recommendations for you. * `product_detail`: Predicts the next product that a user will most likely engage with or purchase. The prediction is based on the shopping or viewing history of the specified `userId` or `visitorId` and its relevance to a specified `CatalogItem`. Typically used on product detail pages. For example - More items like this. * `recently_viewed_default`: Returns up to 75 items recently viewed by the specified `userId` or `visitorId`, most recent ones first. Returns nothing if neither of them has viewed any items yet. For example - Recently viewed. The full list of available placements can be seen at https://console.cloud.google.com/recommendation/datafeeds/default_catalog/dashboard",
-                              "location": "path",
-                              "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/eventStores/[^/]+/placements/[^/]+$"
-                            }
-                          },
-                          "httpMethod": "POST",
-                          "id": "recommendationengine.projects.locations.catalogs.eventStores.placements.predict",
-                          "response": {
-                            "$ref": "GoogleCloudRecommendationengineV1beta1PredictResponse"
-                          },
-                          "path": "v1beta1/{+name}:predict",
-                          "request": {
-                            "$ref": "GoogleCloudRecommendationengineV1beta1PredictRequest"
-                          },
-                          "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/eventStores/{eventStoresId}/placements/{placementsId}:predict",
-                          "parameterOrder": [
-                            "name"
-                          ]
-                        }
-                      }
                     }
-                  }
-                },
-                "catalogItems": {
-                  "methods": {
-                    "list": {
-                      "id": "recommendationengine.projects.locations.catalogs.catalogItems.list",
-                      "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/catalogItems",
-                      "path": "v1beta1/{+parent}/catalogItems",
-                      "httpMethod": "GET",
-                      "parameters": {
-                        "filter": {
-                          "description": "Optional. A filter to apply on the list results.",
-                          "location": "query",
-                          "type": "string"
-                        },
-                        "pageToken": {
-                          "description": "Optional. The previous ListCatalogItemsResponse.next_page_token.",
-                          "type": "string",
-                          "location": "query"
-                        },
-                        "parent": {
-                          "location": "path",
-                          "type": "string",
-                          "required": true,
-                          "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+$",
-                          "description": "Required. The parent catalog resource name, such as \"projects/*/locations/global/catalogs/default_catalog\"."
-                        },
-                        "pageSize": {
-                          "format": "int32",
-                          "description": "Optional. Maximum number of results to return per page. If zero, the service will choose a reasonable default.",
-                          "location": "query",
-                          "type": "integer"
-                        }
-                      },
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "response": {
-                        "$ref": "GoogleCloudRecommendationengineV1beta1ListCatalogItemsResponse"
-                      },
-                      "description": "Gets a list of catalog items.",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ]
-                    },
-                    "import": {
-                      "response": {
-                        "$ref": "GoogleLongrunningOperation"
-                      },
-                      "parameters": {
-                        "parent": {
-                          "required": true,
-                          "type": "string",
-                          "description": "Required. \"projects/1234/locations/global/catalogs/default_catalog\" If no updateMask is specified, requires catalogItems.create permission. If updateMask is specified, requires catalogItems.update permission.",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+$",
-                          "location": "path"
-                        }
-                      },
-                      "path": "v1beta1/{+parent}/catalogItems:import",
-                      "id": "recommendationengine.projects.locations.catalogs.catalogItems.import",
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "httpMethod": "POST",
-                      "description": "Bulk import of multiple catalog items. Request processing may be synchronous. No partial updating supported. Non-existing items will be created. Operation.response is of type ImportResponse. Note that it is possible for a subset of the items to be successfully updated.",
-                      "request": {
-                        "$ref": "GoogleCloudRecommendationengineV1beta1ImportCatalogItemsRequest"
-                      },
-                      "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/catalogItems:import"
-                    },
-                    "patch": {
-                      "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/catalogItems/{catalogItemsId}",
-                      "path": "v1beta1/{+name}",
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "description": "Updates a catalog item. Partial updating is supported. Non-existing items will be created.",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "id": "recommendationengine.projects.locations.catalogs.catalogItems.patch",
-                      "parameters": {
-                        "name": {
-                          "location": "path",
-                          "type": "string",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/catalogItems/.*$",
-                          "required": true,
-                          "description": "Required. Full resource name of catalog item, such as \"projects/*/locations/global/catalogs/default_catalog/catalogItems/some_catalog_item_id\"."
-                        },
-                        "updateMask": {
-                          "description": "Optional. Indicates which fields in the provided 'item' to update. If not set, will by default update all fields.",
-                          "location": "query",
-                          "type": "string",
-                          "format": "google-fieldmask"
-                        }
-                      },
-                      "response": {
-                        "$ref": "GoogleCloudRecommendationengineV1beta1CatalogItem"
-                      },
-                      "httpMethod": "PATCH",
-                      "request": {
-                        "$ref": "GoogleCloudRecommendationengineV1beta1CatalogItem"
-                      }
-                    },
-                    "create": {
-                      "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/catalogItems",
-                      "description": "Creates a catalog item.",
-                      "path": "v1beta1/{+parent}/catalogItems",
-                      "request": {
-                        "$ref": "GoogleCloudRecommendationengineV1beta1CatalogItem"
-                      },
-                      "id": "recommendationengine.projects.locations.catalogs.catalogItems.create",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "httpMethod": "POST",
-                      "response": {
-                        "$ref": "GoogleCloudRecommendationengineV1beta1CatalogItem"
-                      },
-                      "parameters": {
-                        "parent": {
-                          "location": "path",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+$",
-                          "required": true,
-                          "type": "string",
-                          "description": "Required. The parent catalog resource name, such as \"projects/*/locations/global/catalogs/default_catalog\"."
-                        }
-                      },
-                      "parameterOrder": [
-                        "parent"
-                      ]
-                    },
-                    "get": {
-                      "description": "Gets a specific catalog item.",
-                      "id": "recommendationengine.projects.locations.catalogs.catalogItems.get",
-                      "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/catalogItems/{catalogItemsId}",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "httpMethod": "GET",
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "path": "v1beta1/{+name}",
-                      "parameters": {
-                        "name": {
-                          "location": "path",
-                          "type": "string",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/catalogItems/.*$",
-                          "required": true,
-                          "description": "Required. Full resource name of catalog item, such as \"projects/*/locations/global/catalogs/default_catalog/catalogitems/some_catalog_item_id\"."
-                        }
-                      },
-                      "response": {
-                        "$ref": "GoogleCloudRecommendationengineV1beta1CatalogItem"
-                      }
-                    },
-                    "delete": {
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/catalogItems/{catalogItemsId}",
-                      "parameters": {
-                        "name": {
-                          "description": "Required. Full resource name of catalog item, such as \"projects/*/locations/global/catalogs/default_catalog/catalogItems/some_catalog_item_id\".",
-                          "type": "string",
-                          "location": "path",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/catalogItems/.*$",
-                          "required": true
-                        }
-                      },
-                      "httpMethod": "DELETE",
-                      "path": "v1beta1/{+name}",
-                      "description": "Deletes a catalog item.",
-                      "response": {
-                        "$ref": "GoogleProtobufEmpty"
-                      },
-                      "id": "recommendationengine.projects.locations.catalogs.catalogItems.delete"
-                    }
-                  }
-                },
-                "operations": {
-                  "methods": {
-                    "get": {
-                      "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/operations/{operationsId}",
-                      "id": "recommendationengine.projects.locations.catalogs.operations.get",
-                      "parameters": {
-                        "name": {
-                          "location": "path",
-                          "type": "string",
-                          "required": true,
-                          "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+/operations/[^/]+$",
-                          "description": "The name of the operation resource."
-                        }
-                      },
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
-                      "httpMethod": "GET",
-                      "response": {
-                        "$ref": "GoogleLongrunningOperation"
-                      },
-                      "path": "v1beta1/{+name}"
-                    },
-                    "list": {
-                      "parameters": {
-                        "pageToken": {
-                          "location": "query",
-                          "description": "The standard list page token.",
-                          "type": "string"
-                        },
-                        "pageSize": {
-                          "type": "integer",
-                          "description": "The standard list page size.",
-                          "location": "query",
-                          "format": "int32"
-                        },
-                        "name": {
-                          "pattern": "^projects/[^/]+/locations/[^/]+/catalogs/[^/]+$",
-                          "description": "The name of the operation's parent resource.",
-                          "location": "path",
-                          "type": "string",
-                          "required": true
-                        },
-                        "filter": {
-                          "type": "string",
-                          "location": "query",
-                          "description": "The standard list filter."
-                        }
-                      },
-                      "httpMethod": "GET",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "id": "recommendationengine.projects.locations.catalogs.operations.list",
-                      "path": "v1beta1/{+name}/operations",
-                      "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
-                      "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/catalogs/{catalogsId}/operations",
-                      "response": {
-                        "$ref": "GoogleLongrunningListOperationsResponse"
-                      }
-                    }
-                  }
                 }
-              }
             }
-          }
         }
-      }
-    }
-  },
-  "name": "recommendationengine",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "description": "Recommendations AI service enables customers to build end-to-end personalized recommendation systems without requiring a high level of expertise in machine learning, recommendation system, or Google Cloud.",
-  "revision": "20201027",
-  "baseUrl": "https://recommendationengine.googleapis.com/",
-  "mtlsRootUrl": "https://recommendationengine.mtls.googleapis.com/",
-  "fullyEncodeReservedExpansion": true,
-  "batchPath": "batch",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "discoveryVersion": "v1",
-  "version_module": true,
-  "basePath": "",
-  "version": "v1beta1",
-  "servicePath": "",
-  "id": "recommendationengine:v1beta1",
-  "title": "Recommendations AI",
-  "protocol": "rest",
-  "ownerDomain": "google.com",
-  "ownerName": "Google",
-  "canonicalName": "Recommendations AI",
-  "kind": "discovery#restDescription",
-  "rootUrl": "https://recommendationengine.googleapis.com/",
-  "parameters": {
-    "key": {
-      "location": "query",
-      "type": "string",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token."
     },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "location": "query",
-      "type": "string"
-    },
-    "alt": {
-      "description": "Data format for response.",
-      "type": "string",
-      "default": "json",
-      "location": "query",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ]
-    },
-    "quotaUser": {
-      "location": "query",
-      "type": "string",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters."
-    },
-    "fields": {
-      "type": "string",
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response."
-    },
-    "prettyPrint": {
-      "type": "boolean",
-      "description": "Returns response with indentations and line breaks.",
-      "default": "true",
-      "location": "query"
-    },
-    "$.xgafv": {
-      "enum": [
-        "1",
-        "2"
-      ],
-      "location": "query",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "description": "V1 error format."
-    },
-    "oauth_token": {
-      "location": "query",
-      "type": "string",
-      "description": "OAuth 2.0 token for the current user."
-    },
-    "callback": {
-      "description": "JSONP",
-      "location": "query",
-      "type": "string"
-    },
-    "access_token": {
-      "location": "query",
-      "type": "string",
-      "description": "OAuth access token."
-    },
-    "upload_protocol": {
-      "type": "string",
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
-    }
-  },
-  "schemas": {
-    "GoogleCloudRecommendationengineV1alphaRejoinCatalogResponse": {
-      "id": "GoogleCloudRecommendationengineV1alphaRejoinCatalogResponse",
-      "description": "Response message for TriggerCatalogRejoin method.",
-      "properties": {
-        "rejoinedUserEventsCount": {
-          "format": "int64",
-          "description": "Number of user events that were joined with latest catalog items.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudRecommendationengineV1beta1FeatureMap": {
-      "description": "FeatureMap represents extra features that customers want to include in the recommendation model for catalogs/user events as categorical/numerical features.",
-      "properties": {
-        "numericalFeatures": {
-          "type": "object",
-          "description": "Numerical features. Some examples would be the height/weight of a product, or age of a customer. Feature names must be UTF-8 encoded strings. For example: `{ \"lengths_cm\": {\"value\":[2.3, 15.4]}, \"heights_cm\": {\"value\":[8.1, 6.4]} }`",
-          "additionalProperties": {
-            "$ref": "GoogleCloudRecommendationengineV1beta1FeatureMapFloatList"
-          }
-        },
-        "categoricalFeatures": {
-          "description": "Categorical features that can take on one of a limited number of possible values. Some examples would be the brand/maker of a product, or country of a customer. Feature names and values must be UTF-8 encoded strings. For example: `{ \"colors\": {\"value\": [\"yellow\", \"green\"]}, \"sizes\": {\"value\":[\"S\", \"M\"]}`",
-          "additionalProperties": {
-            "$ref": "GoogleCloudRecommendationengineV1beta1FeatureMapStringList"
-          },
-          "type": "object"
-        }
-      },
-      "id": "GoogleCloudRecommendationengineV1beta1FeatureMap",
-      "type": "object"
-    },
-    "GoogleCloudRecommendationengineV1beta1PurgeUserEventsMetadata": {
-      "id": "GoogleCloudRecommendationengineV1beta1PurgeUserEventsMetadata",
-      "properties": {
-        "operationName": {
-          "description": "The ID of the request / operation.",
-          "type": "string"
-        },
-        "createTime": {
-          "description": "Operation create time.",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      },
-      "description": "Metadata related to the progress of the PurgeUserEvents operation. This will be returned by the google.longrunning.Operation.metadata field.",
-      "type": "object"
-    },
-    "GoogleCloudRecommendationengineV1beta1UserEventImportSummary": {
-      "type": "object",
-      "properties": {
-        "unjoinedEventsCount": {
-          "description": "Count of user events imported, but with catalog information not found in the imported catalog.",
-          "format": "int64",
-          "type": "string"
-        },
-        "joinedEventsCount": {
-          "format": "int64",
-          "type": "string",
-          "description": "Count of user events imported with complete existing catalog information."
-        }
-      },
-      "description": "A summary of import result. The UserEventImportSummary summarizes the import status for user events.",
-      "id": "GoogleCloudRecommendationengineV1beta1UserEventImportSummary"
-    },
-    "GoogleCloudRecommendationengineV1beta1ProductCatalogItem": {
-      "description": "ProductCatalogItem captures item metadata specific to retail products.",
-      "id": "GoogleCloudRecommendationengineV1beta1ProductCatalogItem",
-      "type": "object",
-      "properties": {
-        "exactPrice": {
-          "$ref": "GoogleCloudRecommendationengineV1beta1ProductCatalogItemExactPrice",
-          "description": "Optional. The exact product price."
-        },
-        "currencyCode": {
-          "description": "Optional. Only required if the price is set. Currency code for price/costs. Use three-character ISO-4217 code.",
-          "type": "string"
-        },
-        "priceRange": {
-          "$ref": "GoogleCloudRecommendationengineV1beta1ProductCatalogItemPriceRange",
-          "description": "Optional. The product price range."
-        },
-        "images": {
-          "description": "Optional. Product images for the catalog item.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudRecommendationengineV1beta1Image"
-          }
-        },
-        "availableQuantity": {
-          "description": "Optional. The available quantity of the item.",
-          "format": "int64",
-          "type": "string"
-        },
-        "costs": {
-          "description": "Optional. A map to pass the costs associated with the product. For example: {\"manufacturing\": 45.5} The profit of selling this item is computed like so: * If 'exactPrice' is provided, profit = displayPrice - sum(costs) * If 'priceRange' is provided, profit = minPrice - sum(costs)",
-          "additionalProperties": {
-            "type": "number",
-            "format": "float"
-          },
-          "type": "object"
-        },
-        "stockState": {
-          "description": "Optional. Online stock state of the catalog item. Default is `IN_STOCK`.",
-          "enumDescriptions": [
-            "Default item stock status. Should never be used.",
-            "Item in stock.",
-            "Item out of stock.",
-            "Item that is in pre-order state.",
-            "Item that is back-ordered (i.e. temporarily out of stock)."
-          ],
-          "enum": [
-            "STOCK_STATE_UNSPECIFIED",
-            "IN_STOCK",
-            "OUT_OF_STOCK",
-            "PREORDER",
-            "BACKORDER"
-          ],
-          "type": "string"
-        },
-        "canonicalProductUri": {
-          "description": "Optional. Canonical URL directly linking to the item detail page with a length limit of 5 KiB..",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleCloudRecommendationengineV1beta1Catalog": {
-      "type": "object",
-      "properties": {
-        "displayName": {
-          "type": "string",
-          "description": "Required. The catalog display name."
-        },
-        "name": {
-          "type": "string",
-          "description": "The fully qualified resource name of the catalog."
-        },
-        "defaultEventStoreId": {
-          "type": "string",
-          "description": "Required. The ID of the default event store."
-        },
-        "catalogItemLevelConfig": {
-          "description": "Required. The catalog item level configuration.",
-          "$ref": "GoogleCloudRecommendationengineV1beta1CatalogItemLevelConfig"
-        }
-      },
-      "id": "GoogleCloudRecommendationengineV1beta1Catalog",
-      "description": "The catalog configuration. Next ID: 5."
-    },
-    "GoogleCloudRecommendationengineV1beta1ImportErrorsConfig": {
-      "id": "GoogleCloudRecommendationengineV1beta1ImportErrorsConfig",
-      "properties": {
-        "gcsPrefix": {
-          "description": "Google Cloud Storage path for import errors. This must be an empty, existing Cloud Storage bucket. Import errors will be written to a file in this bucket, one per line, as a JSON-encoded `google.rpc.Status` message.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Configuration of destination for Import related errors."
-    },
-    "GoogleLongrunningListOperationsResponse": {
-      "description": "The response message for Operations.ListOperations.",
-      "properties": {
-        "operations": {
-          "items": {
-            "$ref": "GoogleLongrunningOperation"
-          },
-          "type": "array",
-          "description": "A list of operations that matches the specified filter in the request."
-        },
-        "nextPageToken": {
-          "description": "The standard List next-page token.",
-          "type": "string"
-        }
-      },
-      "id": "GoogleLongrunningListOperationsResponse",
-      "type": "object"
-    },
-    "GoogleCloudRecommendationengineV1beta1Image": {
-      "id": "GoogleCloudRecommendationengineV1beta1Image",
-      "type": "object",
-      "description": "Catalog item thumbnail/detail image.",
-      "properties": {
-        "width": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Optional. Width of the image in number of pixels."
-        },
-        "uri": {
-          "description": "Required. URL of the image with a length limit of 5 KiB.",
-          "type": "string"
-        },
-        "height": {
-          "format": "int32",
-          "description": "Optional. Height of the image in number of pixels.",
-          "type": "integer"
-        }
-      }
-    },
-    "GoogleProtobufEmpty": {
-      "properties": {},
-      "id": "GoogleProtobufEmpty",
-      "type": "object",
-      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`."
-    },
-    "GoogleCloudRecommendationengineV1beta1RejoinUserEventsResponse": {
-      "type": "object",
-      "id": "GoogleCloudRecommendationengineV1beta1RejoinUserEventsResponse",
-      "properties": {
-        "rejoinedUserEventsCount": {
-          "type": "string",
-          "description": "Number of user events that were joined with latest catalog items.",
-          "format": "int64"
-        }
-      },
-      "description": "Response message for RejoinUserEvents method."
-    },
-    "GoogleCloudRecommendationengineV1beta1ListCatalogsResponse": {
-      "id": "GoogleCloudRecommendationengineV1beta1ListCatalogsResponse",
-      "description": "Response for ListCatalogs method.",
-      "properties": {
-        "catalogs": {
-          "type": "array",
-          "readOnly": true,
-          "items": {
-            "$ref": "GoogleCloudRecommendationengineV1beta1Catalog"
-          },
-          "description": "Output only. All the customer's catalogs."
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Pagination token, if not returned indicates the last page."
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudRecommendationengineV1beta1ProductCatalogItemExactPrice": {
-      "properties": {
-        "originalPrice": {
-          "type": "number",
-          "description": "Optional. Price of the product without any discount. If zero, by default set to be the 'displayPrice'.",
-          "format": "float"
-        },
-        "displayPrice": {
-          "type": "number",
-          "format": "float",
-          "description": "Optional. Display price of the product."
-        }
-      },
-      "id": "GoogleCloudRecommendationengineV1beta1ProductCatalogItemExactPrice",
-      "type": "object",
-      "description": "Exact product price."
-    },
-    "GoogleCloudRecommendationengineV1beta1CreatePredictionApiKeyRegistrationRequest": {
-      "description": "Request message for the `CreatePredictionApiKeyRegistration` method.",
-      "id": "GoogleCloudRecommendationengineV1beta1CreatePredictionApiKeyRegistrationRequest",
-      "type": "object",
-      "properties": {
-        "predictionApiKeyRegistration": {
-          "description": "Required. The prediction API key registration.",
-          "$ref": "GoogleCloudRecommendationengineV1beta1PredictionApiKeyRegistration"
-        }
-      }
-    },
-    "GoogleCloudRecommendationengineV1beta1CatalogItemCategoryHierarchy": {
-      "properties": {
-        "categories": {
-          "description": "Required. Catalog item categories. Each category should be a UTF-8 encoded string with a length limit of 2 KiB. Note that the order in the list denotes the specificity (from least to most specific).",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "description": "Category represents catalog item category hierarchy.",
-      "id": "GoogleCloudRecommendationengineV1beta1CatalogItemCategoryHierarchy"
-    },
-    "GoogleCloudRecommendationengineV1beta1ProductDetail": {
-      "description": "Detailed product information associated with a user event.",
-      "type": "object",
-      "properties": {
-        "displayPrice": {
-          "type": "number",
-          "format": "float",
-          "description": "Optional. Display price of the product (e.g. discounted price). If provided, this will override the display price in Catalog for this product."
-        },
-        "originalPrice": {
-          "format": "float",
-          "type": "number",
-          "description": "Optional. Original price of the product. If provided, this will override the original price in Catalog for this product."
-        },
-        "availableQuantity": {
-          "description": "Optional. Quantity of the products in stock when a user event happens. Optional. If provided, this overrides the available quantity in Catalog for this event. and can only be set if `stock_status` is set to `IN_STOCK`. Note that if an item is out of stock, you must set the `stock_state` field to be `OUT_OF_STOCK`. Leaving this field unspecified / as zero is not sufficient to mark the item out of stock.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "itemAttributes": {
-          "description": "Optional. Extra features associated with a product in the user event.",
-          "$ref": "GoogleCloudRecommendationengineV1beta1FeatureMap"
-        },
-        "quantity": {
-          "type": "integer",
-          "description": "Optional. Quantity of the product associated with the user event. For example, this field will be 2 if two products are added to the shopping cart for `add-to-cart` event. Required for `add-to-cart`, `add-to-list`, `remove-from-cart`, `checkout-start`, `purchase-complete`, `refund` event types.",
-          "format": "int32"
-        },
-        "id": {
-          "description": "Required. Catalog item ID. UTF-8 encoded string with a length limit of 128 characters.",
-          "type": "string"
-        },
-        "stockState": {
-          "description": "Optional. Item stock state. If provided, this overrides the stock state in Catalog for items in this event.",
-          "enum": [
-            "STOCK_STATE_UNSPECIFIED",
-            "IN_STOCK",
-            "OUT_OF_STOCK",
-            "PREORDER",
-            "BACKORDER"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "Default item stock status. Should never be used.",
-            "Item in stock.",
-            "Item out of stock.",
-            "Item that is in pre-order state.",
-            "Item that is back-ordered (i.e. temporarily out of stock)."
-          ]
-        },
-        "currencyCode": {
-          "type": "string",
-          "description": "Optional. Currency code for price/costs. Use three-character ISO-4217 code. Required only if originalPrice or displayPrice is set."
-        }
-      },
-      "id": "GoogleCloudRecommendationengineV1beta1ProductDetail"
-    },
-    "GoogleCloudRecommendationengineV1beta1CatalogInlineSource": {
-      "type": "object",
-      "id": "GoogleCloudRecommendationengineV1beta1CatalogInlineSource",
-      "properties": {
-        "catalogItems": {
-          "description": "Optional. A list of catalog items to update/create. Recommended max of 10k items.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudRecommendationengineV1beta1CatalogItem"
-          }
-        }
-      },
-      "description": "The inline source for the input config for ImportCatalogItems method."
-    },
-    "GoogleRpcStatus": {
-      "id": "GoogleRpcStatus",
-      "type": "object",
-      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
-      "properties": {
-        "code": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The status code, which should be an enum value of google.rpc.Code."
-        },
-        "details": {
-          "type": "array",
-          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
-          "items": {
-            "type": "object",
-            "additionalProperties": {
-              "type": "any",
-              "description": "Properties of the object. Contains field @type with type URL."
-            }
-          }
-        },
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleCloudRecommendationengineV1beta1ImportUserEventsResponse": {
-      "properties": {
-        "errorSamples": {
-          "type": "array",
-          "items": {
-            "$ref": "GoogleRpcStatus"
-          },
-          "description": "A sample of errors encountered while processing the request."
-        },
-        "errorsConfig": {
-          "$ref": "GoogleCloudRecommendationengineV1beta1ImportErrorsConfig",
-          "description": "Echoes the destination for the complete errors if this field was set in the request."
-        },
-        "importSummary": {
-          "$ref": "GoogleCloudRecommendationengineV1beta1UserEventImportSummary",
-          "description": "Aggregated statistics of user event import status."
-        }
-      },
-      "description": "Response of the ImportUserEventsRequest. If the long running operation was successful, then this message is returned by the google.longrunning.Operations.response field if the operation was successful.",
-      "type": "object",
-      "id": "GoogleCloudRecommendationengineV1beta1ImportUserEventsResponse"
-    },
-    "GoogleCloudRecommendationengineV1beta1FeatureMapStringList": {
-      "id": "GoogleCloudRecommendationengineV1beta1FeatureMapStringList",
-      "type": "object",
-      "description": "A list of string features.",
-      "properties": {
-        "value": {
-          "items": {
-            "type": "string"
-          },
-          "description": "String feature value with a length limit of 128 bytes.",
-          "type": "array"
-        }
-      }
-    },
-    "GoogleCloudRecommendationengineV1beta1FeatureMapFloatList": {
-      "id": "GoogleCloudRecommendationengineV1beta1FeatureMapFloatList",
-      "type": "object",
-      "description": "A list of float features.",
-      "properties": {
-        "value": {
-          "type": "array",
-          "description": "Float feature value.",
-          "items": {
-            "format": "float",
-            "type": "number"
-          }
-        }
-      }
-    },
-    "GoogleCloudRecommendationengineV1beta1BigQuerySource": {
-      "description": "BigQuery source import data from.",
-      "properties": {
-        "gcsStagingDir": {
-          "type": "string",
-          "description": "Optional. Intermediate Cloud Storage directory used for the import. Can be specified if one wants to have the BigQuery export to a specific Cloud Storage directory."
-        },
-        "projectId": {
-          "type": "string",
-          "description": "Optional. The project id (can be project # or id) that the BigQuery source is in. If not specified, inherits the project id from the parent request."
-        },
-        "dataSchema": {
-          "description": "Optional. The schema to use when parsing the data from the source. Supported values for catalog imports: 1: \"catalog_recommendations_ai\" using https://cloud.google.com/recommendations-ai/docs/upload-catalog#json (Default for catalogItems.import) 2: \"catalog_merchant_center\" using https://cloud.google.com/recommendations-ai/docs/upload-catalog#mc Supported values for user event imports: 1: \"user_events_recommendations_ai\" using https://cloud.google.com/recommendations-ai/docs/manage-user-events#import (Default for userEvents.import) 2. \"user_events_ga360\" using https://support.google.com/analytics/answer/3437719?hl=en",
-          "type": "string"
-        },
-        "tableId": {
-          "description": "Required. The BigQuery table to copy the data from.",
-          "type": "string"
-        },
-        "datasetId": {
-          "type": "string",
-          "description": "Required. The BigQuery data set to copy the data from."
-        }
-      },
-      "id": "GoogleCloudRecommendationengineV1beta1BigQuerySource",
-      "type": "object"
-    },
-    "GoogleCloudRecommendationengineV1beta1PurgeUserEventsRequest": {
-      "description": "Request message for PurgeUserEvents method.",
-      "properties": {
-        "force": {
-          "type": "boolean",
-          "description": "Optional. The default value is false. Override this flag to true to actually perform the purge. If the field is not set to true, a sampling of events to be deleted will be returned."
-        },
-        "filter": {
-          "type": "string",
-          "description": "Required. The filter string to specify the events to be deleted. Empty string filter is not allowed. The eligible fields for filtering are: * `eventType`: UserEvent.eventType field of type string. * `eventTime`: in ISO 8601 \"zulu\" format. * `visitorId`: field of type string. Specifying this will delete all events associated with a visitor. * `userId`: field of type string. Specifying this will delete all events associated with a user. Examples: * Deleting all events in a time range: `eventTime \u003e \"2012-04-23T18:25:43.511Z\" eventTime \u003c \"2012-04-23T18:30:43.511Z\"` * Deleting specific eventType in time range: `eventTime \u003e \"2012-04-23T18:25:43.511Z\" eventType = \"detail-page-view\"` * Deleting all events for a specific visitor: `visitorId = \"visitor1024\"` The filtering fields are assumed to have an implicit AND."
-        }
-      },
-      "id": "GoogleCloudRecommendationengineV1beta1PurgeUserEventsRequest",
-      "type": "object"
-    },
-    "GoogleCloudRecommendationengineV1beta1PurchaseTransaction": {
-      "id": "GoogleCloudRecommendationengineV1beta1PurchaseTransaction",
-      "description": "A transaction represents the entire purchase transaction.",
-      "type": "object",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "Optional. The transaction ID with a length limit of 128 bytes."
-        },
-        "currencyCode": {
-          "description": "Required. Currency code. Use three-character ISO-4217 code. This field is not required if the event type is `refund`.",
-          "type": "string"
-        },
-        "revenue": {
-          "description": "Required. Total revenue or grand total associated with the transaction. This value include shipping, tax, or other adjustments to total revenue that you want to include as part of your revenue calculations. This field is not required if the event type is `refund`.",
-          "type": "number",
-          "format": "float"
-        },
-        "taxes": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "number",
-            "format": "float"
-          },
-          "description": "Optional. All the taxes associated with the transaction."
-        },
-        "costs": {
-          "type": "object",
-          "description": "Optional. All the costs associated with the product. These can be manufacturing costs, shipping expenses not borne by the end user, or any other costs. Total product cost such that profit = revenue - (sum(taxes) + sum(costs)) If product_cost is not set, then profit = revenue - tax - shipping - sum(CatalogItem.costs). If CatalogItem.cost is not specified for one of the items, CatalogItem.cost based profit *cannot* be calculated for this Transaction.",
-          "additionalProperties": {
-            "format": "float",
-            "type": "number"
-          }
-        }
-      }
-    },
-    "GoogleCloudRecommendationengineV1beta1PredictResponsePredictionResult": {
-      "properties": {
-        "itemMetadata": {
-          "description": "Additional item metadata / annotations. Possible values: * `catalogItem`: JSON representation of the catalogItem. Will be set if `returnCatalogItem` is set to true in `PredictRequest.params`. * `score`: Prediction score in double value. Will be set if `returnItemScore` is set to true in `PredictRequest.params`.",
-          "additionalProperties": {
-            "type": "any"
-          },
-          "type": "object"
-        },
-        "id": {
-          "type": "string",
-          "description": "ID of the recommended catalog item"
-        }
-      },
-      "id": "GoogleCloudRecommendationengineV1beta1PredictResponsePredictionResult",
-      "type": "object",
-      "description": "PredictionResult represents the recommendation prediction results."
-    },
-    "GoogleCloudRecommendationengineV1alphaRejoinCatalogMetadata": {
-      "description": "Metadata for TriggerCatalogRejoin method.",
-      "id": "GoogleCloudRecommendationengineV1alphaRejoinCatalogMetadata",
-      "type": "object",
-      "properties": {}
-    },
-    "GoogleCloudRecommendationengineV1beta1GcsSource": {
-      "type": "object",
-      "description": "Google Cloud Storage location for input content. format.",
-      "properties": {
-        "inputUris": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "Required. Google Cloud Storage URIs to input files. URI can be up to 2000 characters long. URIs can match the full object path (for example, gs://bucket/directory/object.json) or a pattern matching one or more files, such as gs://bucket/directory/*.json. A request can contain at most 100 files, and each file can be up to 2 GB. See [Importing catalog information](/recommendations-ai/docs/upload-catalog) for the expected file format and setup instructions."
-        },
-        "jsonSchema": {
-          "type": "string",
-          "description": "Optional. The schema to use when parsing the data from the source. Supported values for catalog imports: 1: \"catalog_recommendations_ai\" using https://cloud.google.com/recommendations-ai/docs/upload-catalog#json (Default for catalogItems.import) 2: \"catalog_merchant_center\" using https://cloud.google.com/recommendations-ai/docs/upload-catalog#mc Supported values for user events imports: 1: \"user_events_recommendations_ai\" using https://cloud.google.com/recommendations-ai/docs/manage-user-events#import (Default for userEvents.import) 2. \"user_events_ga360\" using https://support.google.com/analytics/answer/3437719?hl=en"
-        }
-      },
-      "id": "GoogleCloudRecommendationengineV1beta1GcsSource"
-    },
-    "GoogleApiHttpBody": {
-      "id": "GoogleApiHttpBody",
-      "description": "Message that represents an arbitrary HTTP body. It should only be used for payload formats that can't be represented as JSON, such as raw binary or an HTML page. This message can be used both in streaming and non-streaming API methods in the request as well as the response. It can be used as a top-level request field, which is convenient if one wants to extract parameters from either the URL or HTTP template into the request fields and also want access to the raw HTTP body. Example: message GetResourceRequest { // A unique request id. string request_id = 1; // The raw HTTP body is bound to this field. google.api.HttpBody http_body = 2; } service ResourceService { rpc GetResource(GetResourceRequest) returns (google.api.HttpBody); rpc UpdateResource(google.api.HttpBody) returns (google.protobuf.Empty); } Example with streaming methods: service CaldavService { rpc GetCalendar(stream google.api.HttpBody) returns (stream google.api.HttpBody); rpc UpdateCalendar(stream google.api.HttpBody) returns (stream google.api.HttpBody); } Use of this type only changes how the request and response bodies are handled, all other features will continue to work unchanged.",
-      "type": "object",
-      "properties": {
-        "data": {
-          "format": "byte",
-          "type": "string",
-          "description": "The HTTP request/response body as raw binary."
-        },
-        "extensions": {
-          "items": {
-            "additionalProperties": {
-              "description": "Properties of the object. Contains field @type with type URL.",
-              "type": "any"
+    "revision": "20210202",
+    "rootUrl": "https://recommendationengine.googleapis.com/",
+    "schemas": {
+        "GoogleApiHttpBody": {
+            "description": "Message that represents an arbitrary HTTP body. It should only be used for payload formats that can't be represented as JSON, such as raw binary or an HTML page. This message can be used both in streaming and non-streaming API methods in the request as well as the response. It can be used as a top-level request field, which is convenient if one wants to extract parameters from either the URL or HTTP template into the request fields and also want access to the raw HTTP body. Example: message GetResourceRequest { // A unique request id. string request_id = 1; // The raw HTTP body is bound to this field. google.api.HttpBody http_body = 2; } service ResourceService { rpc GetResource(GetResourceRequest) returns (google.api.HttpBody); rpc UpdateResource(google.api.HttpBody) returns (google.protobuf.Empty); } Example with streaming methods: service CaldavService { rpc GetCalendar(stream google.api.HttpBody) returns (stream google.api.HttpBody); rpc UpdateCalendar(stream google.api.HttpBody) returns (stream google.api.HttpBody); } Use of this type only changes how the request and response bodies are handled, all other features will continue to work unchanged.",
+            "id": "GoogleApiHttpBody",
+            "properties": {
+                "contentType": {
+                    "description": "The HTTP Content-Type header value specifying the content type of the body.",
+                    "type": "string"
+                },
+                "data": {
+                    "description": "The HTTP request/response body as raw binary.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "extensions": {
+                    "description": "Application specific response metadata. Must be set in the first response for streaming APIs.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                }
             },
             "type": "object"
-          },
-          "description": "Application specific response metadata. Must be set in the first response for streaming APIs.",
-          "type": "array"
         },
-        "contentType": {
-          "type": "string",
-          "description": "The HTTP Content-Type header value specifying the content type of the body."
+        "GoogleCloudRecommendationengineV1alphaRejoinCatalogMetadata": {
+            "description": "Metadata for TriggerCatalogRejoin method.",
+            "id": "GoogleCloudRecommendationengineV1alphaRejoinCatalogMetadata",
+            "properties": {},
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1alphaRejoinCatalogResponse": {
+            "description": "Response message for TriggerCatalogRejoin method.",
+            "id": "GoogleCloudRecommendationengineV1alphaRejoinCatalogResponse",
+            "properties": {
+                "rejoinedUserEventsCount": {
+                    "description": "Number of user events that were joined with latest catalog items.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1alphaTuningMetadata": {
+            "description": "Metadata associated with a tune operation.",
+            "id": "GoogleCloudRecommendationengineV1alphaTuningMetadata",
+            "properties": {
+                "recommendationModel": {
+                    "description": "The resource name of the recommendation model that this tune applies to. Format: projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/eventStores/{event_store_id}/recommendationModels/{recommendation_model_id}",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1alphaTuningResponse": {
+            "description": "Response associated with a tune operation.",
+            "id": "GoogleCloudRecommendationengineV1alphaTuningResponse",
+            "properties": {},
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1BigQuerySource": {
+            "description": "BigQuery source import data from.",
+            "id": "GoogleCloudRecommendationengineV1beta1BigQuerySource",
+            "properties": {
+                "dataSchema": {
+                    "description": "Optional. The schema to use when parsing the data from the source. Supported values for catalog imports: 1: \"catalog_recommendations_ai\" using https://cloud.google.com/recommendations-ai/docs/upload-catalog#json (Default for catalogItems.import) 2: \"catalog_merchant_center\" using https://cloud.google.com/recommendations-ai/docs/upload-catalog#mc Supported values for user event imports: 1: \"user_events_recommendations_ai\" using https://cloud.google.com/recommendations-ai/docs/manage-user-events#import (Default for userEvents.import) 2. \"user_events_ga360\" using https://support.google.com/analytics/answer/3437719?hl=en",
+                    "type": "string"
+                },
+                "datasetId": {
+                    "description": "Required. The BigQuery data set to copy the data from.",
+                    "type": "string"
+                },
+                "gcsStagingDir": {
+                    "description": "Optional. Intermediate Cloud Storage directory used for the import. Can be specified if one wants to have the BigQuery export to a specific Cloud Storage directory.",
+                    "type": "string"
+                },
+                "projectId": {
+                    "description": "Optional. The project id (can be project # or id) that the BigQuery source is in. If not specified, inherits the project id from the parent request.",
+                    "type": "string"
+                },
+                "tableId": {
+                    "description": "Required. The BigQuery table to copy the data from.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1Catalog": {
+            "description": "The catalog configuration. Next ID: 5.",
+            "id": "GoogleCloudRecommendationengineV1beta1Catalog",
+            "properties": {
+                "catalogItemLevelConfig": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1CatalogItemLevelConfig",
+                    "description": "Required. The catalog item level configuration."
+                },
+                "defaultEventStoreId": {
+                    "description": "Required. The ID of the default event store.",
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "Required. The catalog display name.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The fully qualified resource name of the catalog.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1CatalogInlineSource": {
+            "description": "The inline source for the input config for ImportCatalogItems method.",
+            "id": "GoogleCloudRecommendationengineV1beta1CatalogInlineSource",
+            "properties": {
+                "catalogItems": {
+                    "description": "Optional. A list of catalog items to update/create. Recommended max of 10k items.",
+                    "items": {
+                        "$ref": "GoogleCloudRecommendationengineV1beta1CatalogItem"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1CatalogItem": {
+            "description": "CatalogItem captures all metadata information of items to be recommended.",
+            "id": "GoogleCloudRecommendationengineV1beta1CatalogItem",
+            "properties": {
+                "categoryHierarchies": {
+                    "description": "Required. Catalog item categories. This field is repeated for supporting one catalog item belonging to several parallel category hierarchies. For example, if a shoes product belongs to both [\"Shoes & Accessories\" -> \"Shoes\"] and [\"Sports & Fitness\" -> \"Athletic Clothing\" -> \"Shoes\"], it could be represented as: \"categoryHierarchies\": [ { \"categories\": [\"Shoes & Accessories\", \"Shoes\"]}, { \"categories\": [\"Sports & Fitness\", \"Athletic Clothing\", \"Shoes\"] } ]",
+                    "items": {
+                        "$ref": "GoogleCloudRecommendationengineV1beta1CatalogItemCategoryHierarchy"
+                    },
+                    "type": "array"
+                },
+                "description": {
+                    "description": "Optional. Catalog item description. UTF-8 encoded string with a length limit of 5 KiB.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Required. Catalog item identifier. UTF-8 encoded string with a length limit of 128 bytes. This id must be unique among all catalog items within the same catalog. It should also be used when logging user events in order for the user events to be joined with the Catalog.",
+                    "type": "string"
+                },
+                "itemAttributes": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1FeatureMap",
+                    "description": "Optional. Highly encouraged. Extra catalog item attributes to be included in the recommendation model. For example, for retail products, this could include the store name, vendor, style, color, etc. These are very strong signals for recommendation model, thus we highly recommend providing the item attributes here."
+                },
+                "itemGroupId": {
+                    "description": "Optional. Variant group identifier for prediction results. UTF-8 encoded string with a length limit of 128 bytes. This field must be enabled before it can be used. [Learn more](/recommendations-ai/docs/catalog#item-group-id).",
+                    "type": "string"
+                },
+                "languageCode": {
+                    "description": "Optional. Deprecated. The model automatically detects the text language. Your catalog can include text in different languages, but duplicating catalog items to provide text in multiple languages can result in degraded model performance.",
+                    "type": "string"
+                },
+                "productMetadata": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1ProductCatalogItem",
+                    "description": "Optional. Metadata specific to retail products."
+                },
+                "tags": {
+                    "description": "Optional. Filtering tags associated with the catalog item. Each tag should be a UTF-8 encoded string with a length limit of 1 KiB. This tag can be used for filtering recommendation results by passing the tag as part of the predict request filter.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "title": {
+                    "description": "Required. Catalog item title. UTF-8 encoded string with a length limit of 1 KiB.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1CatalogItemCategoryHierarchy": {
+            "description": "Category represents catalog item category hierarchy.",
+            "id": "GoogleCloudRecommendationengineV1beta1CatalogItemCategoryHierarchy",
+            "properties": {
+                "categories": {
+                    "description": "Required. Catalog item categories. Each category should be a UTF-8 encoded string with a length limit of 2 KiB. Note that the order in the list denotes the specificity (from least to most specific).",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1CatalogItemLevelConfig": {
+            "description": "Configures the catalog level that users send events to, and the level at which predictions are made.",
+            "id": "GoogleCloudRecommendationengineV1beta1CatalogItemLevelConfig",
+            "properties": {
+                "eventItemLevel": {
+                    "description": "Optional. Level of the catalog at which events are uploaded. See https://cloud.google.com/recommendations-ai/docs/catalog#catalog-levels for more details.",
+                    "enum": [
+                        "CATALOG_ITEM_LEVEL_UNSPECIFIED",
+                        "VARIANT",
+                        "MASTER"
+                    ],
+                    "enumDescriptions": [
+                        "Unknown value - should never be used.",
+                        "Catalog items are at variant level.",
+                        "Catalog items are at master level."
+                    ],
+                    "type": "string"
+                },
+                "predictItemLevel": {
+                    "description": "Optional. Level of the catalog at which predictions are made. See https://cloud.google.com/recommendations-ai/docs/catalog#catalog-levels for more details.",
+                    "enum": [
+                        "CATALOG_ITEM_LEVEL_UNSPECIFIED",
+                        "VARIANT",
+                        "MASTER"
+                    ],
+                    "enumDescriptions": [
+                        "Unknown value - should never be used.",
+                        "Catalog items are at variant level.",
+                        "Catalog items are at master level."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1CreatePredictionApiKeyRegistrationRequest": {
+            "description": "Request message for the `CreatePredictionApiKeyRegistration` method.",
+            "id": "GoogleCloudRecommendationengineV1beta1CreatePredictionApiKeyRegistrationRequest",
+            "properties": {
+                "predictionApiKeyRegistration": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1PredictionApiKeyRegistration",
+                    "description": "Required. The prediction API key registration."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1EventDetail": {
+            "description": "User event details shared by all recommendation types.",
+            "id": "GoogleCloudRecommendationengineV1beta1EventDetail",
+            "properties": {
+                "eventAttributes": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1FeatureMap",
+                    "description": "Optional. Extra user event features to include in the recommendation model. For product recommendation, an example of extra user information is traffic_channel, i.e. how user arrives at the site. Users can arrive at the site by coming to the site directly, or coming through Google search, and etc."
+                },
+                "experimentIds": {
+                    "description": "Optional. A list of identifiers for the independent experiment groups this user event belongs to. This is used to distinguish between user events associated with different experiment setups (e.g. using Recommendation Engine system, using different recommendation models).",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "pageViewId": {
+                    "description": "Optional. A unique id of a web page view. This should be kept the same for all user events triggered from the same pageview. For example, an item detail page view could trigger multiple events as the user is browsing the page. The `pageViewId` property should be kept the same for all these events so that they can be grouped together properly. This `pageViewId` will be automatically generated if using the JavaScript pixel.",
+                    "type": "string"
+                },
+                "recommendationToken": {
+                    "description": "Optional. Recommendation token included in the recommendation prediction response. This field enables accurate attribution of recommendation model performance. This token enables us to accurately attribute page view or purchase back to the event and the particular predict response containing this clicked/purchased item. If user clicks on product K in the recommendation results, pass the `PredictResponse.recommendationToken` property as a url parameter to product K's page. When recording events on product K's page, log the PredictResponse.recommendation_token to this field. Optional, but highly encouraged for user events that are the result of a recommendation prediction query.",
+                    "type": "string"
+                },
+                "referrerUri": {
+                    "description": "Optional. The referrer url of the current page. When using the JavaScript pixel, this value is filled in automatically.",
+                    "type": "string"
+                },
+                "uri": {
+                    "description": "Optional. Complete url (window.location.href) of the user's current page. When using the JavaScript pixel, this value is filled in automatically. Maximum length 5KB.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1FeatureMap": {
+            "description": "FeatureMap represents extra features that customers want to include in the recommendation model for catalogs/user events as categorical/numerical features.",
+            "id": "GoogleCloudRecommendationengineV1beta1FeatureMap",
+            "properties": {
+                "categoricalFeatures": {
+                    "additionalProperties": {
+                        "$ref": "GoogleCloudRecommendationengineV1beta1FeatureMapStringList"
+                    },
+                    "description": "Categorical features that can take on one of a limited number of possible values. Some examples would be the brand/maker of a product, or country of a customer. Feature names and values must be UTF-8 encoded strings. For example: `{ \"colors\": {\"value\": [\"yellow\", \"green\"]}, \"sizes\": {\"value\":[\"S\", \"M\"]}`",
+                    "type": "object"
+                },
+                "numericalFeatures": {
+                    "additionalProperties": {
+                        "$ref": "GoogleCloudRecommendationengineV1beta1FeatureMapFloatList"
+                    },
+                    "description": "Numerical features. Some examples would be the height/weight of a product, or age of a customer. Feature names must be UTF-8 encoded strings. For example: `{ \"lengths_cm\": {\"value\":[2.3, 15.4]}, \"heights_cm\": {\"value\":[8.1, 6.4]} }`",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1FeatureMapFloatList": {
+            "description": "A list of float features.",
+            "id": "GoogleCloudRecommendationengineV1beta1FeatureMapFloatList",
+            "properties": {
+                "value": {
+                    "description": "Float feature value.",
+                    "items": {
+                        "format": "float",
+                        "type": "number"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1FeatureMapStringList": {
+            "description": "A list of string features.",
+            "id": "GoogleCloudRecommendationengineV1beta1FeatureMapStringList",
+            "properties": {
+                "value": {
+                    "description": "String feature value with a length limit of 128 bytes.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1GcsSource": {
+            "description": "Google Cloud Storage location for input content. format.",
+            "id": "GoogleCloudRecommendationengineV1beta1GcsSource",
+            "properties": {
+                "inputUris": {
+                    "description": "Required. Google Cloud Storage URIs to input files. URI can be up to 2000 characters long. URIs can match the full object path (for example, gs://bucket/directory/object.json) or a pattern matching one or more files, such as gs://bucket/directory/*.json. A request can contain at most 100 files, and each file can be up to 2 GB. See [Importing catalog information](/recommendations-ai/docs/upload-catalog) for the expected file format and setup instructions.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "jsonSchema": {
+                    "description": "Optional. The schema to use when parsing the data from the source. Supported values for catalog imports: 1: \"catalog_recommendations_ai\" using https://cloud.google.com/recommendations-ai/docs/upload-catalog#json (Default for catalogItems.import) 2: \"catalog_merchant_center\" using https://cloud.google.com/recommendations-ai/docs/upload-catalog#mc Supported values for user events imports: 1: \"user_events_recommendations_ai\" using https://cloud.google.com/recommendations-ai/docs/manage-user-events#import (Default for userEvents.import) 2. \"user_events_ga360\" using https://support.google.com/analytics/answer/3437719?hl=en",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1Image": {
+            "description": "Catalog item thumbnail/detail image.",
+            "id": "GoogleCloudRecommendationengineV1beta1Image",
+            "properties": {
+                "height": {
+                    "description": "Optional. Height of the image in number of pixels.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "uri": {
+                    "description": "Required. URL of the image with a length limit of 5 KiB.",
+                    "type": "string"
+                },
+                "width": {
+                    "description": "Optional. Width of the image in number of pixels.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1ImportCatalogItemsRequest": {
+            "description": "Request message for Import methods.",
+            "id": "GoogleCloudRecommendationengineV1beta1ImportCatalogItemsRequest",
+            "properties": {
+                "errorsConfig": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1ImportErrorsConfig",
+                    "description": "Optional. The desired location of errors incurred during the Import."
+                },
+                "inputConfig": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1InputConfig",
+                    "description": "Required. The desired input location of the data."
+                },
+                "requestId": {
+                    "description": "Optional. Unique identifier provided by client, within the ancestor dataset scope. Ensures idempotency and used for request deduplication. Server-generated if unspecified. Up to 128 characters long. This is returned as google.longrunning.Operation.name in the response.",
+                    "type": "string"
+                },
+                "updateMask": {
+                    "description": "Optional. Indicates which fields in the provided imported 'items' to update. If not set, will by default update all fields.",
+                    "format": "google-fieldmask",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1ImportCatalogItemsResponse": {
+            "description": "Response of the ImportCatalogItemsRequest. If the long running operation is done, then this message is returned by the google.longrunning.Operations.response field if the operation was successful.",
+            "id": "GoogleCloudRecommendationengineV1beta1ImportCatalogItemsResponse",
+            "properties": {
+                "errorSamples": {
+                    "description": "A sample of errors encountered while processing the request.",
+                    "items": {
+                        "$ref": "GoogleRpcStatus"
+                    },
+                    "type": "array"
+                },
+                "errorsConfig": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1ImportErrorsConfig",
+                    "description": "Echoes the destination for the complete errors in the request if set."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1ImportErrorsConfig": {
+            "description": "Configuration of destination for Import related errors.",
+            "id": "GoogleCloudRecommendationengineV1beta1ImportErrorsConfig",
+            "properties": {
+                "gcsPrefix": {
+                    "description": "Google Cloud Storage path for import errors. This must be an empty, existing Cloud Storage bucket. Import errors will be written to a file in this bucket, one per line, as a JSON-encoded `google.rpc.Status` message.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1ImportMetadata": {
+            "description": "Metadata related to the progress of the Import operation. This will be returned by the google.longrunning.Operation.metadata field.",
+            "id": "GoogleCloudRecommendationengineV1beta1ImportMetadata",
+            "properties": {
+                "createTime": {
+                    "description": "Operation create time.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "failureCount": {
+                    "description": "Count of entries that encountered errors while processing.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "operationName": {
+                    "description": "Name of the operation.",
+                    "type": "string"
+                },
+                "requestId": {
+                    "description": "Id of the request / operation. This is parroting back the requestId that was passed in the request.",
+                    "type": "string"
+                },
+                "successCount": {
+                    "description": "Count of entries that were processed successfully.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "updateTime": {
+                    "description": "Operation last update time. If the operation is done, this is also the finish time.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1ImportUserEventsRequest": {
+            "description": "Request message for the ImportUserEvents request.",
+            "id": "GoogleCloudRecommendationengineV1beta1ImportUserEventsRequest",
+            "properties": {
+                "errorsConfig": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1ImportErrorsConfig",
+                    "description": "Optional. The desired location of errors incurred during the Import."
+                },
+                "inputConfig": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1InputConfig",
+                    "description": "Required. The desired input location of the data."
+                },
+                "requestId": {
+                    "description": "Optional. Unique identifier provided by client, within the ancestor dataset scope. Ensures idempotency for expensive long running operations. Server-generated if unspecified. Up to 128 characters long. This is returned as google.longrunning.Operation.name in the response. Note that this field must not be set if the desired input config is catalog_inline_source.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1ImportUserEventsResponse": {
+            "description": "Response of the ImportUserEventsRequest. If the long running operation was successful, then this message is returned by the google.longrunning.Operations.response field if the operation was successful.",
+            "id": "GoogleCloudRecommendationengineV1beta1ImportUserEventsResponse",
+            "properties": {
+                "errorSamples": {
+                    "description": "A sample of errors encountered while processing the request.",
+                    "items": {
+                        "$ref": "GoogleRpcStatus"
+                    },
+                    "type": "array"
+                },
+                "errorsConfig": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1ImportErrorsConfig",
+                    "description": "Echoes the destination for the complete errors if this field was set in the request."
+                },
+                "importSummary": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1UserEventImportSummary",
+                    "description": "Aggregated statistics of user event import status."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1InputConfig": {
+            "description": "The input config source.",
+            "id": "GoogleCloudRecommendationengineV1beta1InputConfig",
+            "properties": {
+                "bigQuerySource": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1BigQuerySource",
+                    "description": "BigQuery input source."
+                },
+                "catalogInlineSource": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1CatalogInlineSource",
+                    "description": "The Inline source for the input content for Catalog items."
+                },
+                "gcsSource": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1GcsSource",
+                    "description": "Google Cloud Storage location for the input content."
+                },
+                "userEventInlineSource": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1UserEventInlineSource",
+                    "description": "The Inline source for the input content for UserEvents."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1ListCatalogItemsResponse": {
+            "description": "Response message for ListCatalogItems method.",
+            "id": "GoogleCloudRecommendationengineV1beta1ListCatalogItemsResponse",
+            "properties": {
+                "catalogItems": {
+                    "description": "The catalog items.",
+                    "items": {
+                        "$ref": "GoogleCloudRecommendationengineV1beta1CatalogItem"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "If empty, the list is complete. If nonempty, the token to pass to the next request's ListCatalogItemRequest.page_token.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1ListCatalogsResponse": {
+            "description": "Response for ListCatalogs method.",
+            "id": "GoogleCloudRecommendationengineV1beta1ListCatalogsResponse",
+            "properties": {
+                "catalogs": {
+                    "description": "Output only. All the customer's catalogs.",
+                    "items": {
+                        "$ref": "GoogleCloudRecommendationengineV1beta1Catalog"
+                    },
+                    "readOnly": true,
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Pagination token, if not returned indicates the last page.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1ListPredictionApiKeyRegistrationsResponse": {
+            "description": "Response message for the `ListPredictionApiKeyRegistrations`.",
+            "id": "GoogleCloudRecommendationengineV1beta1ListPredictionApiKeyRegistrationsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "If empty, the list is complete. If nonempty, pass the token to the next request's `ListPredictionApiKeysRegistrationsRequest.pageToken`.",
+                    "type": "string"
+                },
+                "predictionApiKeyRegistrations": {
+                    "description": "The list of registered API keys.",
+                    "items": {
+                        "$ref": "GoogleCloudRecommendationengineV1beta1PredictionApiKeyRegistration"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1ListUserEventsResponse": {
+            "description": "Response message for ListUserEvents method.",
+            "id": "GoogleCloudRecommendationengineV1beta1ListUserEventsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "If empty, the list is complete. If nonempty, the token to pass to the next request's ListUserEvents.page_token.",
+                    "type": "string"
+                },
+                "userEvents": {
+                    "description": "The user events.",
+                    "items": {
+                        "$ref": "GoogleCloudRecommendationengineV1beta1UserEvent"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1PredictRequest": {
+            "description": "Request message for Predict method.",
+            "id": "GoogleCloudRecommendationengineV1beta1PredictRequest",
+            "properties": {
+                "dryRun": {
+                    "description": "Optional. Use dryRun mode for this prediction query. If set to true, a dummy model will be used that returns arbitrary catalog items. Note that the dryRun mode should only be used for testing the API, or if the model is not ready.",
+                    "type": "boolean"
+                },
+                "filter": {
+                    "description": "Optional. Filter for restricting prediction results. Accepts values for tags and the `filterOutOfStockItems` flag. * Tag expressions. Restricts predictions to items that match all of the specified tags. Boolean operators `OR` and `NOT` are supported if the expression is enclosed in parentheses, and must be separated from the tag values by a space. `-\"tagA\"` is also supported and is equivalent to `NOT \"tagA\"`. Tag values must be double quoted UTF-8 encoded strings with a size limit of 1 KiB. * filterOutOfStockItems. Restricts predictions to items that do not have a stockState value of OUT_OF_STOCK. Examples: * tag=(\"Red\" OR \"Blue\") tag=\"New-Arrival\" tag=(NOT \"promotional\") * filterOutOfStockItems tag=(-\"promotional\") * filterOutOfStockItems If your filter blocks all prediction results, nothing will be returned. If you want generic (unfiltered) popular items to be returned instead, set `strictFiltering` to false in `PredictRequest.params`.",
+                    "type": "string"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Optional. The labels for the predict request. * Label keys can contain lowercase letters, digits and hyphens, must start with a letter, and must end with a letter or digit. * Non-zero label values can contain lowercase letters, digits and hyphens, must start with a letter, and must end with a letter or digit. * No more than 64 labels can be associated with a given request. See https://goo.gl/xmQnxf for more information on and examples of labels.",
+                    "type": "object"
+                },
+                "pageSize": {
+                    "description": "Optional. Maximum number of results to return per page. Set this property to the number of prediction results required. If zero, the service will choose a reasonable default.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "pageToken": {
+                    "description": "Optional. The previous PredictResponse.next_page_token.",
+                    "type": "string"
+                },
+                "params": {
+                    "additionalProperties": {
+                        "type": "any"
+                    },
+                    "description": "Optional. Additional domain specific parameters for the predictions. Allowed values: * `returnCatalogItem`: Boolean. If set to true, the associated catalogItem object will be returned in the `PredictResponse.PredictionResult.itemMetadata` object in the method response. * `returnItemScore`: Boolean. If set to true, the prediction 'score' corresponding to each returned item will be set in the `metadata` field in the prediction response. The given 'score' indicates the probability of an item being clicked/purchased given the user's context and history. * `strictFiltering`: Boolean. True by default. If set to false, the service will return generic (unfiltered) popular items instead of empty if your filter blocks all prediction results.",
+                    "type": "object"
+                },
+                "userEvent": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1UserEvent",
+                    "description": "Required. Context about the user, what they are looking at and what action they took to trigger the predict request. Note that this user event detail won't be ingested to userEvent logs. Thus, a separate userEvent write request is required for event logging."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1PredictResponse": {
+            "description": "Response message for predict method.",
+            "id": "GoogleCloudRecommendationengineV1beta1PredictResponse",
+            "properties": {
+                "dryRun": {
+                    "description": "True if the dryRun property was set in the request.",
+                    "type": "boolean"
+                },
+                "itemsMissingInCatalog": {
+                    "description": "IDs of items in the request that were missing from the catalog.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "type": "any"
+                    },
+                    "description": "Additional domain specific prediction response metadata.",
+                    "type": "object"
+                },
+                "nextPageToken": {
+                    "description": "If empty, the list is complete. If nonempty, the token to pass to the next request's PredictRequest.page_token.",
+                    "type": "string"
+                },
+                "recommendationToken": {
+                    "description": "A unique recommendation token. This should be included in the user event logs resulting from this recommendation, which enables accurate attribution of recommendation model performance.",
+                    "type": "string"
+                },
+                "results": {
+                    "description": "A list of recommended items. The order represents the ranking (from the most relevant item to the least).",
+                    "items": {
+                        "$ref": "GoogleCloudRecommendationengineV1beta1PredictResponsePredictionResult"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1PredictResponsePredictionResult": {
+            "description": "PredictionResult represents the recommendation prediction results.",
+            "id": "GoogleCloudRecommendationengineV1beta1PredictResponsePredictionResult",
+            "properties": {
+                "id": {
+                    "description": "ID of the recommended catalog item",
+                    "type": "string"
+                },
+                "itemMetadata": {
+                    "additionalProperties": {
+                        "type": "any"
+                    },
+                    "description": "Additional item metadata / annotations. Possible values: * `catalogItem`: JSON representation of the catalogItem. Will be set if `returnCatalogItem` is set to true in `PredictRequest.params`. * `score`: Prediction score in double value. Will be set if `returnItemScore` is set to true in `PredictRequest.params`.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1PredictionApiKeyRegistration": {
+            "description": "Registered Api Key.",
+            "id": "GoogleCloudRecommendationengineV1beta1PredictionApiKeyRegistration",
+            "properties": {
+                "apiKey": {
+                    "description": "The API key.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1ProductCatalogItem": {
+            "description": "ProductCatalogItem captures item metadata specific to retail products.",
+            "id": "GoogleCloudRecommendationengineV1beta1ProductCatalogItem",
+            "properties": {
+                "availableQuantity": {
+                    "description": "Optional. The available quantity of the item.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "canonicalProductUri": {
+                    "description": "Optional. Canonical URL directly linking to the item detail page with a length limit of 5 KiB..",
+                    "type": "string"
+                },
+                "costs": {
+                    "additionalProperties": {
+                        "format": "float",
+                        "type": "number"
+                    },
+                    "description": "Optional. A map to pass the costs associated with the product. For example: {\"manufacturing\": 45.5} The profit of selling this item is computed like so: * If 'exactPrice' is provided, profit = displayPrice - sum(costs) * If 'priceRange' is provided, profit = minPrice - sum(costs)",
+                    "type": "object"
+                },
+                "currencyCode": {
+                    "description": "Optional. Only required if the price is set. Currency code for price/costs. Use three-character ISO-4217 code.",
+                    "type": "string"
+                },
+                "exactPrice": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1ProductCatalogItemExactPrice",
+                    "description": "Optional. The exact product price."
+                },
+                "images": {
+                    "description": "Optional. Product images for the catalog item.",
+                    "items": {
+                        "$ref": "GoogleCloudRecommendationengineV1beta1Image"
+                    },
+                    "type": "array"
+                },
+                "priceRange": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1ProductCatalogItemPriceRange",
+                    "description": "Optional. The product price range."
+                },
+                "stockState": {
+                    "description": "Optional. Online stock state of the catalog item. Default is `IN_STOCK`.",
+                    "enum": [
+                        "STOCK_STATE_UNSPECIFIED",
+                        "IN_STOCK",
+                        "OUT_OF_STOCK",
+                        "PREORDER",
+                        "BACKORDER"
+                    ],
+                    "enumDescriptions": [
+                        "Default item stock status. Should never be used.",
+                        "Item in stock.",
+                        "Item out of stock.",
+                        "Item that is in pre-order state.",
+                        "Item that is back-ordered (i.e. temporarily out of stock)."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1ProductCatalogItemExactPrice": {
+            "description": "Exact product price.",
+            "id": "GoogleCloudRecommendationengineV1beta1ProductCatalogItemExactPrice",
+            "properties": {
+                "displayPrice": {
+                    "description": "Optional. Display price of the product.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "originalPrice": {
+                    "description": "Optional. Price of the product without any discount. If zero, by default set to be the 'displayPrice'.",
+                    "format": "float",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1ProductCatalogItemPriceRange": {
+            "description": "Product price range when there are a range of prices for different variations of the same product.",
+            "id": "GoogleCloudRecommendationengineV1beta1ProductCatalogItemPriceRange",
+            "properties": {
+                "max": {
+                    "description": "Required. The maximum product price.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "min": {
+                    "description": "Required. The minimum product price.",
+                    "format": "float",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1ProductDetail": {
+            "description": "Detailed product information associated with a user event.",
+            "id": "GoogleCloudRecommendationengineV1beta1ProductDetail",
+            "properties": {
+                "availableQuantity": {
+                    "description": "Optional. Quantity of the products in stock when a user event happens. Optional. If provided, this overrides the available quantity in Catalog for this event. and can only be set if `stock_status` is set to `IN_STOCK`. Note that if an item is out of stock, you must set the `stock_state` field to be `OUT_OF_STOCK`. Leaving this field unspecified / as zero is not sufficient to mark the item out of stock.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "currencyCode": {
+                    "description": "Optional. Currency code for price/costs. Use three-character ISO-4217 code. Required only if originalPrice or displayPrice is set.",
+                    "type": "string"
+                },
+                "displayPrice": {
+                    "description": "Optional. Display price of the product (e.g. discounted price). If provided, this will override the display price in Catalog for this product.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "id": {
+                    "description": "Required. Catalog item ID. UTF-8 encoded string with a length limit of 128 characters.",
+                    "type": "string"
+                },
+                "itemAttributes": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1FeatureMap",
+                    "description": "Optional. Extra features associated with a product in the user event."
+                },
+                "originalPrice": {
+                    "description": "Optional. Original price of the product. If provided, this will override the original price in Catalog for this product.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "quantity": {
+                    "description": "Optional. Quantity of the product associated with the user event. For example, this field will be 2 if two products are added to the shopping cart for `add-to-cart` event. Required for `add-to-cart`, `add-to-list`, `remove-from-cart`, `checkout-start`, `purchase-complete`, `refund` event types.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "stockState": {
+                    "description": "Optional. Item stock state. If provided, this overrides the stock state in Catalog for items in this event.",
+                    "enum": [
+                        "STOCK_STATE_UNSPECIFIED",
+                        "IN_STOCK",
+                        "OUT_OF_STOCK",
+                        "PREORDER",
+                        "BACKORDER"
+                    ],
+                    "enumDescriptions": [
+                        "Default item stock status. Should never be used.",
+                        "Item in stock.",
+                        "Item out of stock.",
+                        "Item that is in pre-order state.",
+                        "Item that is back-ordered (i.e. temporarily out of stock)."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1ProductEventDetail": {
+            "description": "ProductEventDetail captures user event information specific to retail products.",
+            "id": "GoogleCloudRecommendationengineV1beta1ProductEventDetail",
+            "properties": {
+                "cartId": {
+                    "description": "Optional. The id or name of the associated shopping cart. This id is used to associate multiple items added or present in the cart before purchase. This can only be set for `add-to-cart`, `remove-from-cart`, `checkout-start`, `purchase-complete`, or `shopping-cart-page-view` events.",
+                    "type": "string"
+                },
+                "listId": {
+                    "description": "Required for `add-to-list` and `remove-from-list` events. The id or name of the list that the item is being added to or removed from. Other event types should not set this field.",
+                    "type": "string"
+                },
+                "pageCategories": {
+                    "description": "Required for `category-page-view` events. At least one of search_query or page_categories is required for `search` events. Other event types should not set this field. The categories associated with a category page. Category pages include special pages such as sales or promotions. For instance, a special sale page may have the category hierarchy: categories : [\"Sales\", \"2017 Black Friday Deals\"].",
+                    "items": {
+                        "$ref": "GoogleCloudRecommendationengineV1beta1CatalogItemCategoryHierarchy"
+                    },
+                    "type": "array"
+                },
+                "productDetails": {
+                    "description": "The main product details related to the event. This field is required for the following event types: * `add-to-cart` * `add-to-list` * `checkout-start` * `detail-page-view` * `purchase-complete` * `refund` * `remove-from-cart` * `remove-from-list` This field is optional for the following event types: * `page-visit` * `shopping-cart-page-view` - note that 'product_details' should be set for this unless the shopping cart is empty. * `search` (highly encouraged) In a `search` event, this field represents the products returned to the end user on the current page (the end user may have not finished broswing the whole page yet). When a new page is returned to the end user, after pagination/filtering/ordering even for the same query, a new SEARCH event with different product_details is desired. The end user may have not finished broswing the whole page yet. This field is not allowed for the following event types: * `category-page-view` * `home-page-view`",
+                    "items": {
+                        "$ref": "GoogleCloudRecommendationengineV1beta1ProductDetail"
+                    },
+                    "type": "array"
+                },
+                "purchaseTransaction": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1PurchaseTransaction",
+                    "description": "Optional. A transaction represents the entire purchase transaction. Required for `purchase-complete` events. Optional for `checkout-start` events. Other event types should not set this field."
+                },
+                "searchQuery": {
+                    "description": "At least one of search_query or page_categories is required for `search` events. Other event types should not set this field. The user's search query as UTF-8 encoded text with a length limit of 5 KiB.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1PurchaseTransaction": {
+            "description": "A transaction represents the entire purchase transaction.",
+            "id": "GoogleCloudRecommendationengineV1beta1PurchaseTransaction",
+            "properties": {
+                "costs": {
+                    "additionalProperties": {
+                        "format": "float",
+                        "type": "number"
+                    },
+                    "description": "Optional. All the costs associated with the product. These can be manufacturing costs, shipping expenses not borne by the end user, or any other costs. Total product cost such that profit = revenue - (sum(taxes) + sum(costs)) If product_cost is not set, then profit = revenue - tax - shipping - sum(CatalogItem.costs). If CatalogItem.cost is not specified for one of the items, CatalogItem.cost based profit *cannot* be calculated for this Transaction.",
+                    "type": "object"
+                },
+                "currencyCode": {
+                    "description": "Required. Currency code. Use three-character ISO-4217 code. This field is not required if the event type is `refund`.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Optional. The transaction ID with a length limit of 128 bytes.",
+                    "type": "string"
+                },
+                "revenue": {
+                    "description": "Required. Total revenue or grand total associated with the transaction. This value include shipping, tax, or other adjustments to total revenue that you want to include as part of your revenue calculations. This field is not required if the event type is `refund`.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "taxes": {
+                    "additionalProperties": {
+                        "format": "float",
+                        "type": "number"
+                    },
+                    "description": "Optional. All the taxes associated with the transaction.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1PurgeUserEventsMetadata": {
+            "description": "Metadata related to the progress of the PurgeUserEvents operation. This will be returned by the google.longrunning.Operation.metadata field.",
+            "id": "GoogleCloudRecommendationengineV1beta1PurgeUserEventsMetadata",
+            "properties": {
+                "createTime": {
+                    "description": "Operation create time.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "operationName": {
+                    "description": "The ID of the request / operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1PurgeUserEventsRequest": {
+            "description": "Request message for PurgeUserEvents method.",
+            "id": "GoogleCloudRecommendationengineV1beta1PurgeUserEventsRequest",
+            "properties": {
+                "filter": {
+                    "description": "Required. The filter string to specify the events to be deleted. Empty string filter is not allowed. The eligible fields for filtering are: * `eventType`: UserEvent.eventType field of type string. * `eventTime`: in ISO 8601 \"zulu\" format. * `visitorId`: field of type string. Specifying this will delete all events associated with a visitor. * `userId`: field of type string. Specifying this will delete all events associated with a user. Examples: * Deleting all events in a time range: `eventTime > \"2012-04-23T18:25:43.511Z\" eventTime < \"2012-04-23T18:30:43.511Z\"` * Deleting specific eventType in time range: `eventTime > \"2012-04-23T18:25:43.511Z\" eventType = \"detail-page-view\"` * Deleting all events for a specific visitor: `visitorId = \"visitor1024\"` The filtering fields are assumed to have an implicit AND.",
+                    "type": "string"
+                },
+                "force": {
+                    "description": "Optional. The default value is false. Override this flag to true to actually perform the purge. If the field is not set to true, a sampling of events to be deleted will be returned.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1PurgeUserEventsResponse": {
+            "description": "Response of the PurgeUserEventsRequest. If the long running operation is successfully done, then this message is returned by the google.longrunning.Operations.response field.",
+            "id": "GoogleCloudRecommendationengineV1beta1PurgeUserEventsResponse",
+            "properties": {
+                "purgedEventsCount": {
+                    "description": "The total count of events purged as a result of the operation.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "userEventsSample": {
+                    "description": "A sampling of events deleted (or will be deleted) depending on the `force` property in the request. Max of 500 items will be returned.",
+                    "items": {
+                        "$ref": "GoogleCloudRecommendationengineV1beta1UserEvent"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1RejoinUserEventsMetadata": {
+            "description": "Metadata for RejoinUserEvents method.",
+            "id": "GoogleCloudRecommendationengineV1beta1RejoinUserEventsMetadata",
+            "properties": {},
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1RejoinUserEventsRequest": {
+            "description": "Request message for CatalogRejoin method.",
+            "id": "GoogleCloudRecommendationengineV1beta1RejoinUserEventsRequest",
+            "properties": {
+                "userEventRejoinScope": {
+                    "description": "Required. The type of the catalog rejoin to define the scope and range of the user events to be rejoined with catalog items.",
+                    "enum": [
+                        "USER_EVENT_REJOIN_SCOPE_UNSPECIFIED",
+                        "JOINED_EVENTS",
+                        "UNJOINED_EVENTS"
+                    ],
+                    "enumDescriptions": [
+                        "Rejoin catalogs with all events including both joined events and unjoined events.",
+                        "Only rejoin catalogs with joined events.",
+                        "Only rejoin catalogs with unjoined events."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1RejoinUserEventsResponse": {
+            "description": "Response message for RejoinUserEvents method.",
+            "id": "GoogleCloudRecommendationengineV1beta1RejoinUserEventsResponse",
+            "properties": {
+                "rejoinedUserEventsCount": {
+                    "description": "Number of user events that were joined with latest catalog items.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1UserEvent": {
+            "description": "UserEvent captures all metadata information recommendation engine needs to know about how end users interact with customers' website.",
+            "id": "GoogleCloudRecommendationengineV1beta1UserEvent",
+            "properties": {
+                "eventDetail": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1EventDetail",
+                    "description": "Optional. User event detailed information common across different recommendation types."
+                },
+                "eventSource": {
+                    "description": "Optional. This field should *not* be set when using JavaScript pixel or the Recommendations AI Tag. Defaults to `EVENT_SOURCE_UNSPECIFIED`.",
+                    "enum": [
+                        "EVENT_SOURCE_UNSPECIFIED",
+                        "AUTOML",
+                        "ECOMMERCE",
+                        "BATCH_UPLOAD"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified event source.",
+                        "The event is ingested via a javascript pixel or Recommendations AI Tag through automl datalayer or JS Macros.",
+                        "The event is ingested via Recommendations AI Tag through Enhanced Ecommerce datalayer.",
+                        "The event is ingested via Import user events API."
+                    ],
+                    "type": "string"
+                },
+                "eventTime": {
+                    "description": "Optional. Only required for ImportUserEvents method. Timestamp of user event created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "eventType": {
+                    "description": "Required. User event type. Allowed values are: * `add-to-cart` Products being added to cart. * `add-to-list` Items being added to a list (shopping list, favorites etc). * `category-page-view` Special pages such as sale or promotion pages viewed. * `checkout-start` User starting a checkout process. * `detail-page-view` Products detail page viewed. * `home-page-view` Homepage viewed. * `page-visit` Generic page visits not included in the event types above. * `purchase-complete` User finishing a purchase. * `refund` Purchased items being refunded or returned. * `remove-from-cart` Products being removed from cart. * `remove-from-list` Items being removed from a list. * `search` Product search. * `shopping-cart-page-view` User viewing a shopping cart. * `impression` List of items displayed. Used by Google Tag Manager.",
+                    "type": "string"
+                },
+                "productEventDetail": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1ProductEventDetail",
+                    "description": "Optional. Retail product specific user event metadata. This field is required for the following event types: * `add-to-cart` * `add-to-list` * `category-page-view` * `checkout-start` * `detail-page-view` * `purchase-complete` * `refund` * `remove-from-cart` * `remove-from-list` * `search` This field is optional for the following event types: * `page-visit` * `shopping-cart-page-view` - note that 'product_event_detail' should be set for this unless the shopping cart is empty. This field is not allowed for the following event types: * `home-page-view`"
+                },
+                "userInfo": {
+                    "$ref": "GoogleCloudRecommendationengineV1beta1UserInfo",
+                    "description": "Required. User information."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1UserEventImportSummary": {
+            "description": "A summary of import result. The UserEventImportSummary summarizes the import status for user events.",
+            "id": "GoogleCloudRecommendationengineV1beta1UserEventImportSummary",
+            "properties": {
+                "joinedEventsCount": {
+                    "description": "Count of user events imported with complete existing catalog information.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "unjoinedEventsCount": {
+                    "description": "Count of user events imported, but with catalog information not found in the imported catalog.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1UserEventInlineSource": {
+            "description": "The inline source for the input config for ImportUserEvents method.",
+            "id": "GoogleCloudRecommendationengineV1beta1UserEventInlineSource",
+            "properties": {
+                "userEvents": {
+                    "description": "Optional. A list of user events to import. Recommended max of 10k items.",
+                    "items": {
+                        "$ref": "GoogleCloudRecommendationengineV1beta1UserEvent"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRecommendationengineV1beta1UserInfo": {
+            "description": "Information of end users.",
+            "id": "GoogleCloudRecommendationengineV1beta1UserInfo",
+            "properties": {
+                "directUserRequest": {
+                    "description": "Optional. Indicates if the request is made directly from the end user in which case the user_agent and ip_address fields can be populated from the HTTP request. This should *not* be set when using the javascript pixel. This flag should be set only if the API request is made directly from the end user such as a mobile app (and not if a gateway or a server is processing and pushing the user events).",
+                    "type": "boolean"
+                },
+                "ipAddress": {
+                    "description": "Optional. IP address of the user. This could be either IPv4 (e.g. 104.133.9.80) or IPv6 (e.g. 2001:0db8:85a3:0000:0000:8a2e:0370:7334). This should *not* be set when using the javascript pixel or if `direct_user_request` is set. Used to extract location information for personalization.",
+                    "type": "string"
+                },
+                "userAgent": {
+                    "description": "Optional. User agent as included in the HTTP header. UTF-8 encoded string with a length limit of 1 KiB. This should *not* be set when using the JavaScript pixel or if `directUserRequest` is set.",
+                    "type": "string"
+                },
+                "userId": {
+                    "description": "Optional. Unique identifier for logged-in user with a length limit of 128 bytes. Required only for logged-in users.",
+                    "type": "string"
+                },
+                "visitorId": {
+                    "description": "Required. A unique identifier for tracking visitors with a length limit of 128 bytes. For example, this could be implemented with a http cookie, which should be able to uniquely identify a visitor on a single device. This unique identifier should not change if the visitor log in/out of the website. Maximum length 128 bytes. Cannot be empty.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleLongrunningListOperationsResponse": {
+            "description": "The response message for Operations.ListOperations.",
+            "id": "GoogleLongrunningListOperationsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                },
+                "operations": {
+                    "description": "A list of operations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "GoogleLongrunningOperation"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleLongrunningOperation": {
+            "description": "This resource represents a long-running operation that is the result of a network API call.",
+            "id": "GoogleLongrunningOperation",
+            "properties": {
+                "done": {
+                    "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
+                    "type": "boolean"
+                },
+                "error": {
+                    "$ref": "GoogleRpcStatus",
+                    "description": "The error result of the operation in case of failure or cancellation."
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
+                    "type": "string"
+                },
+                "response": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleProtobufEmpty": {
+            "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
+            "id": "GoogleProtobufEmpty",
+            "properties": {},
+            "type": "object"
+        },
+        "GoogleRpcStatus": {
+            "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
+            "id": "GoogleRpcStatus",
+            "properties": {
+                "code": {
+                    "description": "The status code, which should be an enum value of google.rpc.Code.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         }
-      }
     },
-    "GoogleCloudRecommendationengineV1beta1ImportMetadata": {
-      "id": "GoogleCloudRecommendationengineV1beta1ImportMetadata",
-      "description": "Metadata related to the progress of the Import operation. This will be returned by the google.longrunning.Operation.metadata field.",
-      "properties": {
-        "failureCount": {
-          "description": "Count of entries that encountered errors while processing.",
-          "format": "int64",
-          "type": "string"
-        },
-        "createTime": {
-          "description": "Operation create time.",
-          "type": "string",
-          "format": "google-datetime"
-        },
-        "requestId": {
-          "description": "Id of the request / operation. This is parroting back the requestId that was passed in the request.",
-          "type": "string"
-        },
-        "updateTime": {
-          "description": "Operation last update time. If the operation is done, this is also the finish time.",
-          "type": "string",
-          "format": "google-datetime"
-        },
-        "successCount": {
-          "format": "int64",
-          "description": "Count of entries that were processed successfully.",
-          "type": "string"
-        },
-        "operationName": {
-          "type": "string",
-          "description": "Name of the operation."
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudRecommendationengineV1beta1UserEvent": {
-      "type": "object",
-      "description": "UserEvent captures all metadata information recommendation engine needs to know about how end users interact with customers' website.",
-      "properties": {
-        "userInfo": {
-          "description": "Required. User information.",
-          "$ref": "GoogleCloudRecommendationengineV1beta1UserInfo"
-        },
-        "productEventDetail": {
-          "$ref": "GoogleCloudRecommendationengineV1beta1ProductEventDetail",
-          "description": "Optional. Retail product specific user event metadata. This field is required for the following event types: * `add-to-cart` * `add-to-list` * `category-page-view` * `checkout-start` * `detail-page-view` * `purchase-complete` * `refund` * `remove-from-cart` * `remove-from-list` * `search` This field is optional for the following event types: * `page-visit` * `shopping-cart-page-view` - note that 'product_event_detail' should be set for this unless the shopping cart is empty. This field is not allowed for the following event types: * `home-page-view`"
-        },
-        "eventTime": {
-          "format": "google-datetime",
-          "type": "string",
-          "description": "Optional. Only required for ImportUserEvents method. Timestamp of user event created."
-        },
-        "eventType": {
-          "description": "Required. User event type. Allowed values are: * `add-to-cart` Products being added to cart. * `add-to-list` Items being added to a list (shopping list, favorites etc). * `category-page-view` Special pages such as sale or promotion pages viewed. * `checkout-start` User starting a checkout process. * `detail-page-view` Products detail page viewed. * `home-page-view` Homepage viewed. * `page-visit` Generic page visits not included in the event types above. * `purchase-complete` User finishing a purchase. * `refund` Purchased items being refunded or returned. * `remove-from-cart` Products being removed from cart. * `remove-from-list` Items being removed from a list. * `search` Product search. * `shopping-cart-page-view` User viewing a shopping cart. * `impression` List of items displayed. Used by Google Tag Manager.",
-          "type": "string"
-        },
-        "eventSource": {
-          "enumDescriptions": [
-            "Unspecified event source.",
-            "The event is ingested via a javascript pixel or Recommendations AI Tag through automl datalayer or JS Macros.",
-            "The event is ingested via Recommendations AI Tag through Enhanced Ecommerce datalayer.",
-            "The event is ingested via Import user events API."
-          ],
-          "type": "string",
-          "enum": [
-            "EVENT_SOURCE_UNSPECIFIED",
-            "AUTOML",
-            "ECOMMERCE",
-            "BATCH_UPLOAD"
-          ],
-          "description": "Optional. This field should *not* be set when using JavaScript pixel or the Recommendations AI Tag. Defaults to `EVENT_SOURCE_UNSPECIFIED`."
-        },
-        "eventDetail": {
-          "$ref": "GoogleCloudRecommendationengineV1beta1EventDetail",
-          "description": "Optional. User event detailed information common across different recommendation types."
-        }
-      },
-      "id": "GoogleCloudRecommendationengineV1beta1UserEvent"
-    },
-    "GoogleCloudRecommendationengineV1beta1ImportUserEventsRequest": {
-      "description": "Request message for the ImportUserEvents request.",
-      "id": "GoogleCloudRecommendationengineV1beta1ImportUserEventsRequest",
-      "properties": {
-        "requestId": {
-          "type": "string",
-          "description": "Optional. Unique identifier provided by client, within the ancestor dataset scope. Ensures idempotency for expensive long running operations. Server-generated if unspecified. Up to 128 characters long. This is returned as google.longrunning.Operation.name in the response. Note that this field must not be set if the desired input config is catalog_inline_source."
-        },
-        "errorsConfig": {
-          "$ref": "GoogleCloudRecommendationengineV1beta1ImportErrorsConfig",
-          "description": "Optional. The desired location of errors incurred during the Import."
-        },
-        "inputConfig": {
-          "$ref": "GoogleCloudRecommendationengineV1beta1InputConfig",
-          "description": "Required. The desired input location of the data."
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudRecommendationengineV1beta1PredictRequest": {
-      "description": "Request message for Predict method.",
-      "properties": {
-        "params": {
-          "additionalProperties": {
-            "type": "any"
-          },
-          "description": "Optional. Additional domain specific parameters for the predictions. Allowed values: * `returnCatalogItem`: Boolean. If set to true, the associated catalogItem object will be returned in the `PredictResponse.PredictionResult.itemMetadata` object in the method response. * `returnItemScore`: Boolean. If set to true, the prediction 'score' corresponding to each returned item will be set in the `metadata` field in the prediction response. The given 'score' indicates the probability of an item being clicked/purchased given the user's context and history. * `strictFiltering`: Boolean. True by default. If set to false, the service will return generic (unfiltered) popular items instead of empty if your filter blocks all prediction results.",
-          "type": "object"
-        },
-        "dryRun": {
-          "description": "Optional. Use dryRun mode for this prediction query. If set to true, a dummy model will be used that returns arbitrary catalog items. Note that the dryRun mode should only be used for testing the API, or if the model is not ready.",
-          "type": "boolean"
-        },
-        "pageSize": {
-          "description": "Optional. Maximum number of results to return per page. Set this property to the number of prediction results required. If zero, the service will choose a reasonable default.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "filter": {
-          "description": "Optional. Filter for restricting prediction results. Accepts values for tags and the `filterOutOfStockItems` flag. * Tag expressions. Restricts predictions to items that match all of the specified tags. Boolean operators `OR` and `NOT` are supported if the expression is enclosed in parentheses, and must be separated from the tag values by a space. `-\"tagA\"` is also supported and is equivalent to `NOT \"tagA\"`. Tag values must be double quoted UTF-8 encoded strings with a size limit of 1 KiB. * filterOutOfStockItems. Restricts predictions to items that do not have a stockState value of OUT_OF_STOCK. Examples: * tag=(\"Red\" OR \"Blue\") tag=\"New-Arrival\" tag=(NOT \"promotional\") * filterOutOfStockItems tag=(-\"promotional\") * filterOutOfStockItems If your filter blocks all prediction results, nothing will be returned. If you want generic (unfiltered) popular items to be returned instead, set `strictFiltering` to false in `PredictRequest.params`.",
-          "type": "string"
-        },
-        "pageToken": {
-          "description": "Optional. The previous PredictResponse.next_page_token.",
-          "type": "string"
-        },
-        "labels": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "type": "object",
-          "description": "Optional. The labels for the predict request. * Label keys can contain lowercase letters, digits and hyphens, must start with a letter, and must end with a letter or digit. * Non-zero label values can contain lowercase letters, digits and hyphens, must start with a letter, and must end with a letter or digit. * No more than 64 labels can be associated with a given request. See https://goo.gl/xmQnxf for more information on and examples of labels."
-        },
-        "userEvent": {
-          "$ref": "GoogleCloudRecommendationengineV1beta1UserEvent",
-          "description": "Required. Context about the user, what they are looking at and what action they took to trigger the predict request. Note that this user event detail won't be ingested to userEvent logs. Thus, a separate userEvent write request is required for event logging."
-        }
-      },
-      "type": "object",
-      "id": "GoogleCloudRecommendationengineV1beta1PredictRequest"
-    },
-    "GoogleCloudRecommendationengineV1beta1RejoinUserEventsMetadata": {
-      "description": "Metadata for RejoinUserEvents method.",
-      "type": "object",
-      "id": "GoogleCloudRecommendationengineV1beta1RejoinUserEventsMetadata",
-      "properties": {}
-    },
-    "GoogleCloudRecommendationengineV1alphaTuningMetadata": {
-      "id": "GoogleCloudRecommendationengineV1alphaTuningMetadata",
-      "properties": {
-        "recommendationModel": {
-          "type": "string",
-          "description": "The resource name of the recommendation model that this tune applies to. Format: projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/eventStores/{event_store_id}/recommendationModels/{recommendation_model_id}"
-        }
-      },
-      "type": "object",
-      "description": "Metadata associated with a tune operation."
-    },
-    "GoogleCloudRecommendationengineV1beta1EventDetail": {
-      "description": "User event details shared by all recommendation types.",
-      "id": "GoogleCloudRecommendationengineV1beta1EventDetail",
-      "properties": {
-        "eventAttributes": {
-          "$ref": "GoogleCloudRecommendationengineV1beta1FeatureMap",
-          "description": "Optional. Extra user event features to include in the recommendation model. For product recommendation, an example of extra user information is traffic_channel, i.e. how user arrives at the site. Users can arrive at the site by coming to the site directly, or coming through Google search, and etc."
-        },
-        "pageViewId": {
-          "description": "Optional. A unique id of a web page view. This should be kept the same for all user events triggered from the same pageview. For example, an item detail page view could trigger multiple events as the user is browsing the page. The `pageViewId` property should be kept the same for all these events so that they can be grouped together properly. This `pageViewId` will be automatically generated if using the JavaScript pixel.",
-          "type": "string"
-        },
-        "recommendationToken": {
-          "type": "string",
-          "description": "Optional. Recommendation token included in the recommendation prediction response. This field enables accurate attribution of recommendation model performance. This token enables us to accurately attribute page view or purchase back to the event and the particular predict response containing this clicked/purchased item. If user clicks on product K in the recommendation results, pass the `PredictResponse.recommendationToken` property as a url parameter to product K's page. When recording events on product K's page, log the PredictResponse.recommendation_token to this field. Optional, but highly encouraged for user events that are the result of a recommendation prediction query."
-        },
-        "experimentIds": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "Optional. A list of identifiers for the independent experiment groups this user event belongs to. This is used to distinguish between user events associated with different experiment setups (e.g. using Recommendation Engine system, using different recommendation models)."
-        },
-        "referrerUri": {
-          "description": "Optional. The referrer url of the current page. When using the JavaScript pixel, this value is filled in automatically.",
-          "type": "string"
-        },
-        "uri": {
-          "type": "string",
-          "description": "Optional. Complete url (window.location.href) of the user's current page. When using the JavaScript pixel, this value is filled in automatically. Maximum length 5KB."
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudRecommendationengineV1beta1UserInfo": {
-      "properties": {
-        "ipAddress": {
-          "type": "string",
-          "description": "Optional. IP address of the user. This could be either IPv4 (e.g. 104.133.9.80) or IPv6 (e.g. 2001:0db8:85a3:0000:0000:8a2e:0370:7334). This should *not* be set when using the javascript pixel or if `direct_user_request` is set. Used to extract location information for personalization."
-        },
-        "userId": {
-          "description": "Optional. Unique identifier for logged-in user with a length limit of 128 bytes. Required only for logged-in users.",
-          "type": "string"
-        },
-        "userAgent": {
-          "description": "Optional. User agent as included in the HTTP header. UTF-8 encoded string with a length limit of 1 KiB. This should *not* be set when using the JavaScript pixel or if `directUserRequest` is set.",
-          "type": "string"
-        },
-        "directUserRequest": {
-          "description": "Optional. Indicates if the request is made directly from the end user in which case the user_agent and ip_address fields can be populated from the HTTP request. This should *not* be set when using the javascript pixel. This flag should be set only if the API request is made directly from the end user such as a mobile app (and not if a gateway or a server is processing and pushing the user events).",
-          "type": "boolean"
-        },
-        "visitorId": {
-          "type": "string",
-          "description": "Required. A unique identifier for tracking visitors with a length limit of 128 bytes. For example, this could be implemented with a http cookie, which should be able to uniquely identify a visitor on a single device. This unique identifier should not change if the visitor log in/out of the website. Maximum length 128 bytes. Cannot be empty."
-        }
-      },
-      "id": "GoogleCloudRecommendationengineV1beta1UserInfo",
-      "type": "object",
-      "description": "Information of end users."
-    },
-    "GoogleCloudRecommendationengineV1beta1ProductCatalogItemPriceRange": {
-      "properties": {
-        "min": {
-          "format": "float",
-          "description": "Required. The minimum product price.",
-          "type": "number"
-        },
-        "max": {
-          "format": "float",
-          "description": "Required. The maximum product price.",
-          "type": "number"
-        }
-      },
-      "id": "GoogleCloudRecommendationengineV1beta1ProductCatalogItemPriceRange",
-      "type": "object",
-      "description": "Product price range when there are a range of prices for different variations of the same product."
-    },
-    "GoogleCloudRecommendationengineV1beta1PredictResponse": {
-      "type": "object",
-      "properties": {
-        "results": {
-          "description": "A list of recommended items. The order represents the ranking (from the most relevant item to the least).",
-          "items": {
-            "$ref": "GoogleCloudRecommendationengineV1beta1PredictResponsePredictionResult"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "If empty, the list is complete. If nonempty, the token to pass to the next request's PredictRequest.page_token."
-        },
-        "recommendationToken": {
-          "description": "A unique recommendation token. This should be included in the user event logs resulting from this recommendation, which enables accurate attribution of recommendation model performance.",
-          "type": "string"
-        },
-        "dryRun": {
-          "type": "boolean",
-          "description": "True if the dryRun property was set in the request."
-        },
-        "metadata": {
-          "description": "Additional domain specific prediction response metadata.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "any"
-          }
-        },
-        "itemsMissingInCatalog": {
-          "type": "array",
-          "description": "IDs of items in the request that were missing from the catalog.",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "GoogleCloudRecommendationengineV1beta1PredictResponse",
-      "description": "Response message for predict method."
-    },
-    "GoogleCloudRecommendationengineV1beta1UserEventInlineSource": {
-      "type": "object",
-      "id": "GoogleCloudRecommendationengineV1beta1UserEventInlineSource",
-      "properties": {
-        "userEvents": {
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudRecommendationengineV1beta1UserEvent"
-          },
-          "description": "Optional. A list of user events to import. Recommended max of 10k items."
-        }
-      },
-      "description": "The inline source for the input config for ImportUserEvents method."
-    },
-    "GoogleCloudRecommendationengineV1beta1RejoinUserEventsRequest": {
-      "type": "object",
-      "properties": {
-        "userEventRejoinScope": {
-          "enum": [
-            "USER_EVENT_REJOIN_SCOPE_UNSPECIFIED",
-            "JOINED_EVENTS",
-            "UNJOINED_EVENTS"
-          ],
-          "type": "string",
-          "description": "Required. The type of the catalog rejoin to define the scope and range of the user events to be rejoined with catalog items.",
-          "enumDescriptions": [
-            "Rejoin catalogs with all events including both joined events and unjoined events.",
-            "Only rejoin catalogs with joined events.",
-            "Only rejoin catalogs with unjoined events."
-          ]
-        }
-      },
-      "description": "Request message for CatalogRejoin method.",
-      "id": "GoogleCloudRecommendationengineV1beta1RejoinUserEventsRequest"
-    },
-    "GoogleCloudRecommendationengineV1beta1ImportCatalogItemsRequest": {
-      "type": "object",
-      "description": "Request message for Import methods.",
-      "id": "GoogleCloudRecommendationengineV1beta1ImportCatalogItemsRequest",
-      "properties": {
-        "errorsConfig": {
-          "description": "Optional. The desired location of errors incurred during the Import.",
-          "$ref": "GoogleCloudRecommendationengineV1beta1ImportErrorsConfig"
-        },
-        "requestId": {
-          "description": "Optional. Unique identifier provided by client, within the ancestor dataset scope. Ensures idempotency and used for request deduplication. Server-generated if unspecified. Up to 128 characters long. This is returned as google.longrunning.Operation.name in the response.",
-          "type": "string"
-        },
-        "updateMask": {
-          "description": "Optional. Indicates which fields in the provided imported 'items' to update. If not set, will by default update all fields.",
-          "format": "google-fieldmask",
-          "type": "string"
-        },
-        "inputConfig": {
-          "description": "Required. The desired input location of the data.",
-          "$ref": "GoogleCloudRecommendationengineV1beta1InputConfig"
-        }
-      }
-    },
-    "GoogleCloudRecommendationengineV1beta1InputConfig": {
-      "type": "object",
-      "id": "GoogleCloudRecommendationengineV1beta1InputConfig",
-      "description": "The input config source.",
-      "properties": {
-        "userEventInlineSource": {
-          "$ref": "GoogleCloudRecommendationengineV1beta1UserEventInlineSource",
-          "description": "The Inline source for the input content for UserEvents."
-        },
-        "catalogInlineSource": {
-          "$ref": "GoogleCloudRecommendationengineV1beta1CatalogInlineSource",
-          "description": "The Inline source for the input content for Catalog items."
-        },
-        "bigQuerySource": {
-          "$ref": "GoogleCloudRecommendationengineV1beta1BigQuerySource",
-          "description": "BigQuery input source."
-        },
-        "gcsSource": {
-          "description": "Google Cloud Storage location for the input content.",
-          "$ref": "GoogleCloudRecommendationengineV1beta1GcsSource"
-        }
-      }
-    },
-    "GoogleCloudRecommendationengineV1beta1CatalogItem": {
-      "id": "GoogleCloudRecommendationengineV1beta1CatalogItem",
-      "type": "object",
-      "properties": {
-        "itemAttributes": {
-          "description": "Optional. Highly encouraged. Extra catalog item attributes to be included in the recommendation model. For example, for retail products, this could include the store name, vendor, style, color, etc. These are very strong signals for recommendation model, thus we highly recommend providing the item attributes here.",
-          "$ref": "GoogleCloudRecommendationengineV1beta1FeatureMap"
-        },
-        "itemGroupId": {
-          "description": "Optional. Variant group identifier for prediction results. UTF-8 encoded string with a length limit of 128 bytes. This field must be enabled before it can be used. [Learn more](/recommendations-ai/docs/catalog#item-group-id).",
-          "type": "string"
-        },
-        "tags": {
-          "description": "Optional. Filtering tags associated with the catalog item. Each tag should be a UTF-8 encoded string with a length limit of 1 KiB. This tag can be used for filtering recommendation results by passing the tag as part of the predict request filter.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "id": {
-          "description": "Required. Catalog item identifier. UTF-8 encoded string with a length limit of 128 bytes. This id must be unique among all catalog items within the same catalog. It should also be used when logging user events in order for the user events to be joined with the Catalog.",
-          "type": "string"
-        },
-        "categoryHierarchies": {
-          "items": {
-            "$ref": "GoogleCloudRecommendationengineV1beta1CatalogItemCategoryHierarchy"
-          },
-          "type": "array",
-          "description": "Required. Catalog item categories. This field is repeated for supporting one catalog item belonging to several parallel category hierarchies. For example, if a shoes product belongs to both [\"Shoes & Accessories\" -\u003e \"Shoes\"] and [\"Sports & Fitness\" -\u003e \"Athletic Clothing\" -\u003e \"Shoes\"], it could be represented as: \"categoryHierarchies\": [ { \"categories\": [\"Shoes & Accessories\", \"Shoes\"]}, { \"categories\": [\"Sports & Fitness\", \"Athletic Clothing\", \"Shoes\"] } ]"
-        },
-        "description": {
-          "type": "string",
-          "description": "Optional. Catalog item description. UTF-8 encoded string with a length limit of 5 KiB."
-        },
-        "productMetadata": {
-          "$ref": "GoogleCloudRecommendationengineV1beta1ProductCatalogItem",
-          "description": "Optional. Metadata specific to retail products."
-        },
-        "title": {
-          "type": "string",
-          "description": "Required. Catalog item title. UTF-8 encoded string with a length limit of 1 KiB."
-        },
-        "languageCode": {
-          "type": "string",
-          "description": "Optional. Deprecated. The model automatically detects the text language. Your catalog can include text in different languages, but duplicating catalog items to provide text in multiple languages can result in degraded model performance."
-        }
-      },
-      "description": "CatalogItem captures all metadata information of items to be recommended."
-    },
-    "GoogleCloudRecommendationengineV1beta1PredictionApiKeyRegistration": {
-      "id": "GoogleCloudRecommendationengineV1beta1PredictionApiKeyRegistration",
-      "description": "Registered Api Key.",
-      "properties": {
-        "apiKey": {
-          "description": "The API key.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudRecommendationengineV1beta1PurgeUserEventsResponse": {
-      "properties": {
-        "purgedEventsCount": {
-          "type": "string",
-          "description": "The total count of events purged as a result of the operation.",
-          "format": "int64"
-        },
-        "userEventsSample": {
-          "description": "A sampling of events deleted (or will be deleted) depending on the `force` property in the request. Max of 500 items will be returned.",
-          "items": {
-            "$ref": "GoogleCloudRecommendationengineV1beta1UserEvent"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "description": "Response of the PurgeUserEventsRequest. If the long running operation is successfully done, then this message is returned by the google.longrunning.Operations.response field.",
-      "id": "GoogleCloudRecommendationengineV1beta1PurgeUserEventsResponse"
-    },
-    "GoogleCloudRecommendationengineV1beta1ListUserEventsResponse": {
-      "description": "Response message for ListUserEvents method.",
-      "properties": {
-        "userEvents": {
-          "items": {
-            "$ref": "GoogleCloudRecommendationengineV1beta1UserEvent"
-          },
-          "description": "The user events.",
-          "type": "array"
-        },
-        "nextPageToken": {
-          "description": "If empty, the list is complete. If nonempty, the token to pass to the next request's ListUserEvents.page_token.",
-          "type": "string"
-        }
-      },
-      "id": "GoogleCloudRecommendationengineV1beta1ListUserEventsResponse",
-      "type": "object"
-    },
-    "GoogleCloudRecommendationengineV1beta1ListCatalogItemsResponse": {
-      "description": "Response message for ListCatalogItems method.",
-      "properties": {
-        "catalogItems": {
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudRecommendationengineV1beta1CatalogItem"
-          },
-          "description": "The catalog items."
-        },
-        "nextPageToken": {
-          "description": "If empty, the list is complete. If nonempty, the token to pass to the next request's ListCatalogItemRequest.page_token.",
-          "type": "string"
-        }
-      },
-      "id": "GoogleCloudRecommendationengineV1beta1ListCatalogItemsResponse",
-      "type": "object"
-    },
-    "GoogleCloudRecommendationengineV1beta1CatalogItemLevelConfig": {
-      "properties": {
-        "eventItemLevel": {
-          "description": "Optional. Level of the catalog at which events are uploaded. See https://cloud.google.com/recommendations-ai/docs/catalog#catalog-levels for more details.",
-          "enumDescriptions": [
-            "Unknown value - should never be used.",
-            "Catalog items are at variant level.",
-            "Catalog items are at master level."
-          ],
-          "enum": [
-            "CATALOG_ITEM_LEVEL_UNSPECIFIED",
-            "VARIANT",
-            "MASTER"
-          ],
-          "type": "string"
-        },
-        "predictItemLevel": {
-          "description": "Optional. Level of the catalog at which predictions are made. See https://cloud.google.com/recommendations-ai/docs/catalog#catalog-levels for more details.",
-          "enum": [
-            "CATALOG_ITEM_LEVEL_UNSPECIFIED",
-            "VARIANT",
-            "MASTER"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "Unknown value - should never be used.",
-            "Catalog items are at variant level.",
-            "Catalog items are at master level."
-          ]
-        }
-      },
-      "description": "Configures the catalog level that users send events to, and the level at which predictions are made.",
-      "id": "GoogleCloudRecommendationengineV1beta1CatalogItemLevelConfig",
-      "type": "object"
-    },
-    "GoogleLongrunningOperation": {
-      "description": "This resource represents a long-running operation that is the result of a network API call.",
-      "id": "GoogleLongrunningOperation",
-      "type": "object",
-      "properties": {
-        "response": {
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "type": "object",
-          "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`."
-        },
-        "metadata": {
-          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "type": "object"
-        },
-        "done": {
-          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
-          "type": "boolean"
-        },
-        "error": {
-          "$ref": "GoogleRpcStatus",
-          "description": "The error result of the operation in case of failure or cancellation."
-        },
-        "name": {
-          "type": "string",
-          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`."
-        }
-      }
-    },
-    "GoogleCloudRecommendationengineV1beta1ListPredictionApiKeyRegistrationsResponse": {
-      "type": "object",
-      "description": "Response message for the `ListPredictionApiKeyRegistrations`.",
-      "properties": {
-        "nextPageToken": {
-          "description": "If empty, the list is complete. If nonempty, pass the token to the next request's `ListPredictionApiKeysRegistrationsRequest.pageToken`.",
-          "type": "string"
-        },
-        "predictionApiKeyRegistrations": {
-          "description": "The list of registered API keys.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudRecommendationengineV1beta1PredictionApiKeyRegistration"
-          }
-        }
-      },
-      "id": "GoogleCloudRecommendationengineV1beta1ListPredictionApiKeyRegistrationsResponse"
-    },
-    "GoogleCloudRecommendationengineV1beta1ProductEventDetail": {
-      "id": "GoogleCloudRecommendationengineV1beta1ProductEventDetail",
-      "type": "object",
-      "properties": {
-        "productDetails": {
-          "items": {
-            "$ref": "GoogleCloudRecommendationengineV1beta1ProductDetail"
-          },
-          "type": "array",
-          "description": "The main product details related to the event. This field is required for the following event types: * `add-to-cart` * `add-to-list` * `checkout-start` * `detail-page-view` * `purchase-complete` * `refund` * `remove-from-cart` * `remove-from-list` This field is optional for the following event types: * `page-visit` * `shopping-cart-page-view` - note that 'product_details' should be set for this unless the shopping cart is empty. * `search` (highly encouraged) In a `search` event, this field represents the products returned to the end user on the current page (the end user may have not finished broswing the whole page yet). When a new page is returned to the end user, after pagination/filtering/ordering even for the same query, a new SEARCH event with different product_details is desired. The end user may have not finished broswing the whole page yet. This field is not allowed for the following event types: * `category-page-view` * `home-page-view`"
-        },
-        "purchaseTransaction": {
-          "description": "Optional. A transaction represents the entire purchase transaction. Required for `purchase-complete` events. Optional for `checkout-start` events. Other event types should not set this field.",
-          "$ref": "GoogleCloudRecommendationengineV1beta1PurchaseTransaction"
-        },
-        "pageCategories": {
-          "items": {
-            "$ref": "GoogleCloudRecommendationengineV1beta1CatalogItemCategoryHierarchy"
-          },
-          "description": "Required for `category-page-view` events. Other event types should not set this field. The categories associated with a category page. Category pages include special pages such as sales or promotions. For instance, a special sale page may have the category hierarchy: categories : [\"Sales\", \"2017 Black Friday Deals\"].",
-          "type": "array"
-        },
-        "listId": {
-          "type": "string",
-          "description": "Required for `add-to-list` and `remove-from-list` events. The id or name of the list that the item is being added to or removed from. Other event types should not set this field."
-        },
-        "cartId": {
-          "type": "string",
-          "description": "Optional. The id or name of the associated shopping cart. This id is used to associate multiple items added or present in the cart before purchase. This can only be set for `add-to-cart`, `remove-from-cart`, `checkout-start`, `purchase-complete`, or `shopping-cart-page-view` events."
-        },
-        "searchQuery": {
-          "description": "Required for `search` events. Other event types should not set this field. The user's search query as UTF-8 encoded text with a length limit of 5 KiB.",
-          "type": "string"
-        }
-      },
-      "description": "ProductEventDetail captures user event information specific to retail products."
-    },
-    "GoogleCloudRecommendationengineV1alphaTuningResponse": {
-      "description": "Response associated with a tune operation.",
-      "id": "GoogleCloudRecommendationengineV1alphaTuningResponse",
-      "properties": {},
-      "type": "object"
-    },
-    "GoogleCloudRecommendationengineV1beta1ImportCatalogItemsResponse": {
-      "description": "Response of the ImportCatalogItemsRequest. If the long running operation is done, then this message is returned by the google.longrunning.Operations.response field if the operation was successful.",
-      "id": "GoogleCloudRecommendationengineV1beta1ImportCatalogItemsResponse",
-      "properties": {
-        "errorSamples": {
-          "items": {
-            "$ref": "GoogleRpcStatus"
-          },
-          "description": "A sample of errors encountered while processing the request.",
-          "type": "array"
-        },
-        "errorsConfig": {
-          "$ref": "GoogleCloudRecommendationengineV1beta1ImportErrorsConfig",
-          "description": "Echoes the destination for the complete errors in the request if set."
-        }
-      },
-      "type": "object"
-    }
-  },
-  "documentationLink": "https://cloud.google.com/recommendations-ai/docs"
-}
+    "servicePath": "",
+    "title": "Recommendations AI (Beta)",
+    "version": "v1beta1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/recommender.v1.json b/googleapiclient/discovery_cache/documents/recommender.v1.json
index 7fd90cd..4e70ba4 100644
--- a/googleapiclient/discovery_cache/documents/recommender.v1.json
+++ b/googleapiclient/discovery_cache/documents/recommender.v1.json
@@ -1178,7 +1178,7 @@
             }
         }
     },
-    "revision": "20210118",
+    "revision": "20210227",
     "rootUrl": "https://recommender.googleapis.com/",
     "schemas": {
         "GoogleCloudRecommenderV1CostProjection": {
@@ -1475,7 +1475,7 @@
                     "additionalProperties": {
                         "$ref": "GoogleCloudRecommenderV1ValueMatcher"
                     },
-                    "description": "Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.",
+                    "description": "Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.",
                     "type": "object"
                 },
                 "resource": {
diff --git a/googleapiclient/discovery_cache/documents/recommender.v1beta1.json b/googleapiclient/discovery_cache/documents/recommender.v1beta1.json
index 2170ae3..787aa4a 100644
--- a/googleapiclient/discovery_cache/documents/recommender.v1beta1.json
+++ b/googleapiclient/discovery_cache/documents/recommender.v1beta1.json
@@ -1178,7 +1178,7 @@
             }
         }
     },
-    "revision": "20210118",
+    "revision": "20210227",
     "rootUrl": "https://recommender.googleapis.com/",
     "schemas": {
         "GoogleCloudRecommenderV1beta1CostProjection": {
@@ -1475,7 +1475,7 @@
                     "additionalProperties": {
                         "$ref": "GoogleCloudRecommenderV1beta1ValueMatcher"
                     },
-                    "description": "Similar to path_filters, this contains set of filters to apply if `path` field referes to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.",
+                    "description": "Similar to path_filters, this contains set of filters to apply if `path` field refers to array elements. This is meant to support value matching beyond exact match. To perform exact match, use path_filters. When both path_filters and path_value_matchers are set, an implicit AND must be performed.",
                     "type": "object"
                 },
                 "resource": {
diff --git a/googleapiclient/discovery_cache/documents/redis.v1.json b/googleapiclient/discovery_cache/documents/redis.v1.json
index 32666c1..3e0ec06 100644
--- a/googleapiclient/discovery_cache/documents/redis.v1.json
+++ b/googleapiclient/discovery_cache/documents/redis.v1.json
@@ -1,1135 +1,1135 @@
 {
-  "version": "v1",
-  "ownerDomain": "google.com",
-  "discoveryVersion": "v1",
-  "name": "redis",
-  "schemas": {
-    "ListLocationsResponse": {
-      "description": "The response message for Locations.ListLocations.",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "The standard List next-page token."
-        },
-        "locations": {
-          "description": "A list of locations that matches the specified filter in the request.",
-          "items": {
-            "$ref": "Location"
-          },
-          "type": "array"
-        }
-      },
-      "id": "ListLocationsResponse"
-    },
-    "FailoverInstanceRequest": {
-      "id": "FailoverInstanceRequest",
-      "type": "object",
-      "description": "Request for Failover.",
-      "properties": {
-        "dataProtectionMode": {
-          "enumDescriptions": [
-            "Defaults to LIMITED_DATA_LOSS if a data protection mode is not specified.",
-            "Instance failover will be protected with data loss control. More specifically, the failover will only be performed if the current replication offset diff between primary and replica is under a certain threshold.",
-            "Instance failover will be performed without data loss control."
-          ],
-          "type": "string",
-          "description": "Optional. Available data protection modes that the user can choose. If it's unspecified, data protection mode will be LIMITED_DATA_LOSS by default.",
-          "enum": [
-            "DATA_PROTECTION_MODE_UNSPECIFIED",
-            "LIMITED_DATA_LOSS",
-            "FORCE_DATA_LOSS"
-          ]
-        }
-      }
-    },
-    "Operation": {
-      "description": "This resource represents a long-running operation that is the result of a network API call.",
-      "properties": {
-        "response": {
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "type": "object",
-          "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`."
-        },
-        "metadata": {
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "{ `createTime`: The time the operation was created. `endTime`: The time the operation finished running. `target`: Server-defined resource path for the target of the operation. `verb`: Name of the verb executed by the operation. `statusDetail`: Human-readable status of the operation, if any. `cancelRequested`: Identifies whether the user has requested cancellation of the operation. Operations that have successfully been cancelled have Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`. `apiVersion`: API version used to start the operation. }",
-          "type": "object"
-        },
-        "name": {
-          "type": "string",
-          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`."
-        },
-        "done": {
-          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
-          "type": "boolean"
-        },
-        "error": {
-          "$ref": "Status",
-          "description": "The error result of the operation in case of failure or cancellation."
-        }
-      },
-      "type": "object",
-      "id": "Operation"
-    },
-    "GcsDestination": {
-      "description": "The Cloud Storage location for the output content",
-      "type": "object",
-      "id": "GcsDestination",
-      "properties": {
-        "uri": {
-          "description": "Required. Data destination URI (e.g. 'gs://my_bucket/my_object'). Existing files will be overwritten.",
-          "type": "string"
-        }
-      }
-    },
-    "Status": {
-      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
-      "type": "object",
-      "properties": {
-        "details": {
-          "type": "array",
-          "items": {
-            "type": "object",
-            "additionalProperties": {
-              "description": "Properties of the object. Contains field @type with type URL.",
-              "type": "any"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
+                }
             }
-          },
-          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use."
-        },
-        "code": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The status code, which should be an enum value of google.rpc.Code."
-        },
-        "message": {
-          "type": "string",
-          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client."
         }
-      },
-      "id": "Status"
     },
-    "Location": {
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Full resource name for the region. For example: \"projects/example-project/locations/us-east1\"."
-        },
-        "labels": {
-          "additionalProperties": {
+    "basePath": "",
+    "baseUrl": "https://redis.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Cloud Redis",
+    "description": "Creates and manages Redis instances on the Google Cloud Platform.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/memorystore/docs/redis/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "redis:v1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://redis.mtls.googleapis.com/",
+    "name": "redis",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
             "type": "string"
-          },
-          "type": "object",
-          "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}"
         },
-        "metadata": {
-          "description": "Output only. The set of available zones in the location. The map is keyed by the lowercase ID of each zone, as defined by Compute Engine. These keys can be specified in `location_id` or `alternative_location_id` fields when creating a Redis instance.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          }
-        },
-        "displayName": {
-          "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\".",
-          "type": "string"
-        },
-        "locationId": {
-          "type": "string",
-          "description": "Resource ID for the region. For example: \"us-east1\"."
-        }
-      },
-      "type": "object",
-      "id": "Location",
-      "description": "A resource that represents Google Cloud Platform location."
-    },
-    "Empty": {
-      "type": "object",
-      "properties": {},
-      "id": "Empty",
-      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`."
-    },
-    "InputConfig": {
-      "properties": {
-        "gcsSource": {
-          "description": "Google Cloud Storage location where input content is located.",
-          "$ref": "GcsSource"
-        }
-      },
-      "id": "InputConfig",
-      "description": "The input content",
-      "type": "object"
-    },
-    "ImportInstanceRequest": {
-      "properties": {
-        "inputConfig": {
-          "description": "Required. Specify data to be imported.",
-          "$ref": "InputConfig"
-        }
-      },
-      "description": "Request for Import.",
-      "id": "ImportInstanceRequest",
-      "type": "object"
-    },
-    "GoogleCloudRedisV1ZoneMetadata": {
-      "type": "object",
-      "description": "Defines specific information for a particular zone. Currently empty and reserved for future use only.",
-      "properties": {},
-      "id": "GoogleCloudRedisV1ZoneMetadata"
-    },
-    "GoogleCloudRedisV1LocationMetadata": {
-      "description": "This location metadata represents additional configuration options for a given location where a Redis instance may be created. All fields are output only. It is returned as content of the `google.cloud.location.Location.metadata` field.",
-      "id": "GoogleCloudRedisV1LocationMetadata",
-      "properties": {
-        "availableZones": {
-          "description": "Output only. The set of available zones in the location. The map is keyed by the lowercase ID of each zone, as defined by GCE. These keys can be specified in `location_id` or `alternative_location_id` fields when creating a Redis instance.",
-          "additionalProperties": {
-            "$ref": "GoogleCloudRedisV1ZoneMetadata"
-          },
-          "readOnly": true,
-          "type": "object"
-        }
-      },
-      "type": "object"
-    },
-    "ExportInstanceRequest": {
-      "description": "Request for Export.",
-      "properties": {
-        "outputConfig": {
-          "description": "Required. Specify data to be exported.",
-          "$ref": "OutputConfig"
-        }
-      },
-      "id": "ExportInstanceRequest",
-      "type": "object"
-    },
-    "Instance": {
-      "id": "Instance",
-      "type": "object",
-      "description": "A Google Cloud Redis instance.",
-      "properties": {
-        "tier": {
-          "enumDescriptions": [
-            "Not set.",
-            "BASIC tier: standalone instance",
-            "STANDARD_HA tier: highly available primary/replica instances"
-          ],
-          "description": "Required. The service tier of the instance.",
-          "enum": [
-            "TIER_UNSPECIFIED",
-            "BASIC",
-            "STANDARD_HA"
-          ],
-          "type": "string"
-        },
-        "state": {
-          "enumDescriptions": [
-            "Not set.",
-            "Redis instance is being created.",
-            "Redis instance has been created and is fully usable.",
-            "Redis instance configuration is being updated. Certain kinds of updates may cause the instance to become unusable while the update is in progress.",
-            "Redis instance is being deleted.",
-            "Redis instance is being repaired and may be unusable.",
-            "Maintenance is being performed on this Redis instance.",
-            "Redis instance is importing data (availability may be affected).",
-            "Redis instance is failing over (availability may be affected)."
-          ],
-          "enum": [
-            "STATE_UNSPECIFIED",
-            "CREATING",
-            "READY",
-            "UPDATING",
-            "DELETING",
-            "REPAIRING",
-            "MAINTENANCE",
-            "IMPORTING",
-            "FAILING_OVER"
-          ],
-          "description": "Output only. The current state of this instance.",
-          "readOnly": true,
-          "type": "string"
-        },
-        "authorizedNetwork": {
-          "description": "Optional. The full name of the Google Compute Engine [network](https://cloud.google.com/vpc/docs/vpc) to which the instance is connected. If left unspecified, the `default` network will be used.",
-          "type": "string"
-        },
-        "displayName": {
-          "description": "An arbitrary and optional user-provided name for the instance.",
-          "type": "string"
-        },
-        "redisConfigs": {
-          "additionalProperties": {
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
             "type": "string"
-          },
-          "description": "Optional. Redis configuration parameters, according to http://redis.io/topics/config. Currently, the only supported parameters are: Redis version 3.2 and newer: * maxmemory-policy * notify-keyspace-events Redis version 4.0 and newer: * activedefrag * lfu-decay-time * lfu-log-factor * maxmemory-gb Redis version 5.0 and newer: * stream-node-max-bytes * stream-node-max-entries",
-          "type": "object"
         },
-        "currentLocationId": {
-          "description": "Output only. The current zone where the Redis endpoint is placed. For Basic Tier instances, this will always be the same as the location_id provided by the user at creation time. For Standard Tier instances, this can be either location_id or alternative_location_id and can change after a failover event.",
-          "type": "string",
-          "readOnly": true
-        },
-        "labels": {
-          "description": "Resource labels to represent user provided metadata",
-          "additionalProperties": {
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
             "type": "string"
-          },
-          "type": "object"
         },
-        "persistenceIamIdentity": {
-          "description": "Output only. Cloud IAM identity used by import / export operations to transfer data to/from Cloud Storage. Format is \"serviceAccount:\". The value may change over time for a given instance so should be checked before each import/export operation.",
-          "type": "string",
-          "readOnly": true
-        },
-        "serverCaCerts": {
-          "items": {
-            "$ref": "TlsCertificate"
-          },
-          "description": "Output only. List of server CA certificates for the instance.",
-          "type": "array",
-          "readOnly": true
-        },
-        "host": {
-          "description": "Output only. Hostname or IP address of the exposed Redis endpoint used by clients to connect to the service.",
-          "type": "string",
-          "readOnly": true
-        },
-        "alternativeLocationId": {
-          "description": "Optional. Only applicable to STANDARD_HA tier which protects the instance against zonal failures by provisioning it across two zones. If provided, it must be a different zone from the one provided in location_id.",
-          "type": "string"
-        },
-        "statusMessage": {
-          "description": "Output only. Additional information about the current status of this instance, if available.",
-          "type": "string",
-          "readOnly": true
-        },
-        "transitEncryptionMode": {
-          "enumDescriptions": [
-            "Not set.",
-            "In-transit encryption enabled with server authentication",
-            "In-transit encryption is disabled for instance."
-          ],
-          "type": "string",
-          "description": "Optional. The In-transit encryption mode of Redis instance. If not provided, in-transit encryption is disabled for instance.",
-          "enum": [
-            "TRANSIT_ENCRYPTION_MODE_UNSPECIFIED",
-            "SERVER_AUTHENTICATION",
-            "DISABLED"
-          ]
-        },
-        "authEnabled": {
-          "description": "Optional. Indicates whether OSS Redis AUTH is enabled for the instance. If set to \"true\" AUTH is enabled on the instance. Default value is \"false\" meaning AUTH is disabled.",
-          "type": "boolean"
-        },
-        "redisVersion": {
-          "type": "string",
-          "description": "Optional. The version of Redis software. If not provided, latest supported version will be used. Currently, the supported values are: * `REDIS_3_2` for Redis 3.2 compatibility * `REDIS_4_0` for Redis 4.0 compatibility (default) * `REDIS_5_0` for Redis 5.0 compatibility"
-        },
-        "memorySizeGb": {
-          "description": "Required. Redis memory size in GiB.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "reservedIpRange": {
-          "type": "string",
-          "description": "Optional. The CIDR range of internal addresses that are reserved for this instance. If not provided, the service will choose an unused /29 block, for example, 10.0.0.0/29 or 192.168.0.0/29. Ranges must be unique and non-overlapping with existing subnets in an authorized network."
-        },
-        "name": {
-          "description": "Required. Unique name of the resource in this scope including project and location using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` Note: Redis instances are managed and addressed at regional level so location_id here refers to a GCP region; however, users may choose which specific zone (or collection of zones for cross-zone instances) an instance should be provisioned in. Refer to location_id and alternative_location_id fields for more details.",
-          "type": "string"
-        },
-        "locationId": {
-          "description": "Optional. The zone where the instance will be provisioned. If not provided, the service will choose a zone for the instance. For STANDARD_HA tier, instances will be created across two zones for protection against zonal failures. If alternative_location_id is also provided, it must be different from location_id.",
-          "type": "string"
-        },
-        "createTime": {
-          "type": "string",
-          "readOnly": true,
-          "format": "google-datetime",
-          "description": "Output only. The time the instance was created."
-        },
-        "port": {
-          "readOnly": true,
-          "format": "int32",
-          "type": "integer",
-          "description": "Output only. The port number of the exposed Redis endpoint."
-        },
-        "connectMode": {
-          "enumDescriptions": [
-            "Not set.",
-            "Connect via direct peering to the Memorystore for Redis hosted service.",
-            "Connect your Memorystore for Redis instance using Private Service Access. Private services access provides an IP address range for multiple Google Cloud services, including Memorystore."
-          ],
-          "type": "string",
-          "description": "Optional. The network connect mode of the Redis instance. If not provided, the connect mode defaults to DIRECT_PEERING.",
-          "enum": [
-            "CONNECT_MODE_UNSPECIFIED",
-            "DIRECT_PEERING",
-            "PRIVATE_SERVICE_ACCESS"
-          ]
-        }
-      }
-    },
-    "GoogleCloudRedisV1OperationMetadata": {
-      "type": "object",
-      "properties": {
-        "target": {
-          "description": "Operation target.",
-          "type": "string"
-        },
-        "verb": {
-          "description": "Operation verb.",
-          "type": "string"
-        },
-        "cancelRequested": {
-          "type": "boolean",
-          "description": "Specifies if cancellation was requested for the operation."
-        },
-        "createTime": {
-          "description": "Creation timestamp.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "statusDetail": {
-          "type": "string",
-          "description": "Operation status details."
-        },
-        "endTime": {
-          "description": "End timestamp.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "apiVersion": {
-          "type": "string",
-          "description": "API version."
-        }
-      },
-      "description": "Represents the v1 metadata of the long-running operation.",
-      "id": "GoogleCloudRedisV1OperationMetadata"
-    },
-    "ListInstancesResponse": {
-      "properties": {
-        "instances": {
-          "description": "A list of Redis instances in the project in the specified location, or across all locations. If the `location_id` in the parent field of the request is \"-\", all regions available to the project are queried, and the results aggregated. If in such an aggregated query a location is unavailable, a placeholder Redis entry is included in the response with the `name` field set to a value of the form `projects/{project_id}/locations/{location_id}/instances/`- and the `status` field set to ERROR and `status_message` field set to \"location not available for ListInstances\".",
-          "items": {
-            "$ref": "Instance"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "description": "Token to retrieve the next page of results, or empty if there are no more results in the list.",
-          "type": "string"
-        },
-        "unreachable": {
-          "type": "array",
-          "description": "Locations that could not be reached.",
-          "items": {
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
             "type": "string"
-          }
-        }
-      },
-      "id": "ListInstancesResponse",
-      "description": "Response for ListInstances.",
-      "type": "object"
-    },
-    "GcsSource": {
-      "id": "GcsSource",
-      "description": "The Cloud Storage location for the input content",
-      "properties": {
-        "uri": {
-          "type": "string",
-          "description": "Required. Source data URI. (e.g. 'gs://my_bucket/my_object')."
-        }
-      },
-      "type": "object"
-    },
-    "ListOperationsResponse": {
-      "description": "The response message for Operations.ListOperations.",
-      "properties": {
-        "nextPageToken": {
-          "description": "The standard List next-page token.",
-          "type": "string"
         },
-        "operations": {
-          "type": "array",
-          "description": "A list of operations that matches the specified filter in the request.",
-          "items": {
-            "$ref": "Operation"
-          }
-        }
-      },
-      "id": "ListOperationsResponse",
-      "type": "object"
-    },
-    "UpgradeInstanceRequest": {
-      "properties": {
-        "redisVersion": {
-          "type": "string",
-          "description": "Required. Specifies the target version of Redis software to upgrade to."
-        }
-      },
-      "id": "UpgradeInstanceRequest",
-      "description": "Request for UpgradeInstance.",
-      "type": "object"
-    },
-    "OutputConfig": {
-      "type": "object",
-      "properties": {
-        "gcsDestination": {
-          "description": "Google Cloud Storage destination for output content.",
-          "$ref": "GcsDestination"
-        }
-      },
-      "id": "OutputConfig",
-      "description": "The output content"
-    },
-    "TlsCertificate": {
-      "properties": {
-        "createTime": {
-          "readOnly": true,
-          "description": "Output only. The time when the certificate was created in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, for example `2020-05-18T00:00:00.094Z`.",
-          "type": "string",
-          "format": "google-datetime"
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
         },
-        "cert": {
-          "description": "PEM representation.",
-          "type": "string"
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
         },
-        "sha1Fingerprint": {
-          "type": "string",
-          "description": "Sha1 Fingerprint of the certificate."
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
         },
-        "serialNumber": {
-          "description": "Serial number, as extracted from the certificate.",
-          "type": "string"
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
         },
-        "expireTime": {
-          "description": "Output only. The time when the certificate expires in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, for example `2020-05-18T00:00:00.094Z`.",
-          "readOnly": true,
-          "format": "google-datetime",
-          "type": "string"
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      },
-      "id": "TlsCertificate",
-      "type": "object",
-      "description": "TlsCertificate Resource"
     },
-    "InstanceAuthString": {
-      "properties": {
-        "authString": {
-          "description": "AUTH string set on the instance.",
-          "type": "string"
+    "protocol": "rest",
+    "resources": {
+        "projects": {
+            "resources": {
+                "locations": {
+                    "methods": {
+                        "get": {
+                            "description": "Gets information about a location.",
+                            "flatPath": "v1/projects/{projectsId}/locations/{locationsId}",
+                            "httpMethod": "GET",
+                            "id": "redis.projects.locations.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Resource name for the location.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+name}",
+                            "response": {
+                                "$ref": "Location"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists information about the supported locations for this service.",
+                            "flatPath": "v1/projects/{projectsId}/locations",
+                            "httpMethod": "GET",
+                            "id": "redis.projects.locations.list",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "The standard list filter.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "name": {
+                                    "description": "The resource that owns the locations collection, if applicable.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "The standard list page size.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The standard list page token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+name}/locations",
+                            "response": {
+                                "$ref": "ListLocationsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "instances": {
+                            "methods": {
+                                "create": {
+                                    "description": "Creates a Redis instance based on the specified tier and memory size. By default, the instance is accessible from the project's [default network](https://cloud.google.com/vpc/docs/vpc). The creation is executed asynchronously and callers may check the returned operation to track its progress. Once the operation is completed the Redis instance will be fully functional. Completed longrunning.Operation will contain the new instance object in the response field. The returned operation is automatically deleted after a few hours, so there is no need to call DeleteOperation.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/instances",
+                                    "httpMethod": "POST",
+                                    "id": "redis.projects.locations.instances.create",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "instanceId": {
+                                            "description": "Required. The logical name of the Redis instance in the customer project with the following restrictions: * Must contain only lowercase letters, numbers, and hyphens. * Must start with a letter. * Must be between 1-40 characters. * Must end with a number or a letter. * Must be unique within the customer project / location",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The resource name of the instance location using the form: `projects/{project_id}/locations/{location_id}` where `location_id` refers to a GCP region.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+parent}/instances",
+                                    "request": {
+                                        "$ref": "Instance"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a specific Redis instance. Instance stops serving and data is deleted.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "redis.projects.locations.instances.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}",
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "export": {
+                                    "description": "Export Redis instance data into a Redis RDB format file in Cloud Storage. Redis will continue serving during this operation. The returned operation is automatically deleted after a few hours, so there is no need to call DeleteOperation.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}:export",
+                                    "httpMethod": "POST",
+                                    "id": "redis.projects.locations.instances.export",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}:export",
+                                    "request": {
+                                        "$ref": "ExportInstanceRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "failover": {
+                                    "description": "Initiates a failover of the primary node to current replica node for a specific STANDARD tier Cloud Memorystore for Redis instance.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}:failover",
+                                    "httpMethod": "POST",
+                                    "id": "redis.projects.locations.instances.failover",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}:failover",
+                                    "request": {
+                                        "$ref": "FailoverInstanceRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets the details of a specific Redis instance.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}",
+                                    "httpMethod": "GET",
+                                    "id": "redis.projects.locations.instances.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}",
+                                    "response": {
+                                        "$ref": "Instance"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "getAuthString": {
+                                    "description": "Gets the AUTH string for a Redis instance. If AUTH is not enabled for the instance the response will be empty. This information is not included in the details returned to GetInstance.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}/authString",
+                                    "httpMethod": "GET",
+                                    "id": "redis.projects.locations.instances.getAuthString",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}/authString",
+                                    "response": {
+                                        "$ref": "InstanceAuthString"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "import": {
+                                    "description": "Import a Redis RDB snapshot file from Cloud Storage into a Redis instance. Redis may stop serving during this operation. Instance state will be IMPORTING for entire operation. When complete, the instance will contain only data from the imported file. The returned operation is automatically deleted after a few hours, so there is no need to call DeleteOperation.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}:import",
+                                    "httpMethod": "POST",
+                                    "id": "redis.projects.locations.instances.import",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}:import",
+                                    "request": {
+                                        "$ref": "ImportInstanceRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists all Redis instances owned by a project in either the specified location (region) or all locations. The location should have the following format: * `projects/{project_id}/locations/{location_id}` If `location_id` is specified as `-` (wildcard), then all regions available to the project are queried, and the results are aggregated.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/instances",
+                                    "httpMethod": "GET",
+                                    "id": "redis.projects.locations.instances.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "pageSize": {
+                                            "description": "The maximum number of items to return. If not specified, a default value of 1000 will be used by the service. Regardless of the page_size value, the response may include a partial list and a caller should only rely on response's `next_page_token` to determine if there are more instances left to be queried.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "The `next_page_token` value returned from a previous ListInstances request, if any.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The resource name of the instance location using the form: `projects/{project_id}/locations/{location_id}` where `location_id` refers to a GCP region.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+parent}/instances",
+                                    "response": {
+                                        "$ref": "ListInstancesResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "patch": {
+                                    "description": "Updates the metadata and configuration of a specific Redis instance. Completed longrunning.Operation will contain the new instance object in the response field. The returned operation is automatically deleted after a few hours, so there is no need to call DeleteOperation.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}",
+                                    "httpMethod": "PATCH",
+                                    "id": "redis.projects.locations.instances.patch",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Unique name of the resource in this scope including project and location using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` Note: Redis instances are managed and addressed at regional level so location_id here refers to a GCP region; however, users may choose which specific zone (or collection of zones for cross-zone instances) an instance should be provisioned in. Refer to location_id and alternative_location_id fields for more details.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "updateMask": {
+                                            "description": "Required. Mask of fields to update. At least one path must be supplied in this field. The elements of the repeated paths field may only include these fields from Instance: * `displayName` * `labels` * `memorySizeGb` * `redisConfig`",
+                                            "format": "google-fieldmask",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}",
+                                    "request": {
+                                        "$ref": "Instance"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "upgrade": {
+                                    "description": "Upgrades Redis instance to the newer Redis version specified in the request.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}:upgrade",
+                                    "httpMethod": "POST",
+                                    "id": "redis.projects.locations.instances.upgrade",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}:upgrade",
+                                    "request": {
+                                        "$ref": "UpgradeInstanceRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
+                            }
+                        },
+                        "operations": {
+                            "methods": {
+                                "cancel": {
+                                    "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}:cancel",
+                                    "httpMethod": "POST",
+                                    "id": "redis.projects.locations.operations.cancel",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The name of the operation resource to be cancelled.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}:cancel",
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "redis.projects.locations.operations.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The name of the operation resource to be deleted.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}",
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
+                                    "httpMethod": "GET",
+                                    "id": "redis.projects.locations.operations.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The name of the operation resource.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}",
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
+                                    "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations",
+                                    "httpMethod": "GET",
+                                    "id": "redis.projects.locations.operations.list",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "filter": {
+                                            "description": "The standard list filter.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "name": {
+                                            "description": "The name of the operation's parent resource.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "The standard list page size.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "The standard list page token.",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}/operations",
+                                    "response": {
+                                        "$ref": "ListOperationsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                }
+            }
         }
-      },
-      "id": "InstanceAuthString",
-      "type": "object",
-      "description": "Instance AUTH string details."
-    }
-  },
-  "description": "Creates and manages Redis instances on the Google Cloud Platform.",
-  "canonicalName": "Cloud Redis",
-  "mtlsRootUrl": "https://redis.mtls.googleapis.com/",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "ownerName": "Google",
-  "basePath": "",
-  "documentationLink": "https://cloud.google.com/memorystore/docs/redis/",
-  "rootUrl": "https://redis.googleapis.com/",
-  "resources": {
-    "projects": {
-      "resources": {
-        "locations": {
-          "methods": {
-            "list": {
-              "description": "Lists information about the supported locations for this service.",
-              "path": "v1/{+name}/locations",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameterOrder": [
-                "name"
-              ],
-              "id": "redis.projects.locations.list",
-              "parameters": {
-                "pageSize": {
-                  "type": "integer",
-                  "format": "int32",
-                  "description": "The standard list page size.",
-                  "location": "query"
+    },
+    "revision": "20210225",
+    "rootUrl": "https://redis.googleapis.com/",
+    "schemas": {
+        "Empty": {
+            "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
+            "id": "Empty",
+            "properties": {},
+            "type": "object"
+        },
+        "ExportInstanceRequest": {
+            "description": "Request for Export.",
+            "id": "ExportInstanceRequest",
+            "properties": {
+                "outputConfig": {
+                    "$ref": "OutputConfig",
+                    "description": "Required. Specify data to be exported."
+                }
+            },
+            "type": "object"
+        },
+        "FailoverInstanceRequest": {
+            "description": "Request for Failover.",
+            "id": "FailoverInstanceRequest",
+            "properties": {
+                "dataProtectionMode": {
+                    "description": "Optional. Available data protection modes that the user can choose. If it's unspecified, data protection mode will be LIMITED_DATA_LOSS by default.",
+                    "enum": [
+                        "DATA_PROTECTION_MODE_UNSPECIFIED",
+                        "LIMITED_DATA_LOSS",
+                        "FORCE_DATA_LOSS"
+                    ],
+                    "enumDescriptions": [
+                        "Defaults to LIMITED_DATA_LOSS if a data protection mode is not specified.",
+                        "Instance failover will be protected with data loss control. More specifically, the failover will only be performed if the current replication offset diff between primary and replica is under a certain threshold.",
+                        "Instance failover will be performed without data loss control."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GcsDestination": {
+            "description": "The Cloud Storage location for the output content",
+            "id": "GcsDestination",
+            "properties": {
+                "uri": {
+                    "description": "Required. Data destination URI (e.g. 'gs://my_bucket/my_object'). Existing files will be overwritten.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GcsSource": {
+            "description": "The Cloud Storage location for the input content",
+            "id": "GcsSource",
+            "properties": {
+                "uri": {
+                    "description": "Required. Source data URI. (e.g. 'gs://my_bucket/my_object').",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRedisV1LocationMetadata": {
+            "description": "This location metadata represents additional configuration options for a given location where a Redis instance may be created. All fields are output only. It is returned as content of the `google.cloud.location.Location.metadata` field.",
+            "id": "GoogleCloudRedisV1LocationMetadata",
+            "properties": {
+                "availableZones": {
+                    "additionalProperties": {
+                        "$ref": "GoogleCloudRedisV1ZoneMetadata"
+                    },
+                    "description": "Output only. The set of available zones in the location. The map is keyed by the lowercase ID of each zone, as defined by GCE. These keys can be specified in `location_id` or `alternative_location_id` fields when creating a Redis instance.",
+                    "readOnly": true,
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRedisV1OperationMetadata": {
+            "description": "Represents the v1 metadata of the long-running operation.",
+            "id": "GoogleCloudRedisV1OperationMetadata",
+            "properties": {
+                "apiVersion": {
+                    "description": "API version.",
+                    "type": "string"
                 },
-                "pageToken": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "The standard list page token."
+                "cancelRequested": {
+                    "description": "Specifies if cancellation was requested for the operation.",
+                    "type": "boolean"
                 },
-                "filter": {
-                  "description": "The standard list filter.",
-                  "location": "query",
-                  "type": "string"
+                "createTime": {
+                    "description": "Creation timestamp.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "endTime": {
+                    "description": "End timestamp.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "statusDetail": {
+                    "description": "Operation status details.",
+                    "type": "string"
+                },
+                "target": {
+                    "description": "Operation target.",
+                    "type": "string"
+                },
+                "verb": {
+                    "description": "Operation verb.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRedisV1ZoneMetadata": {
+            "description": "Defines specific information for a particular zone. Currently empty and reserved for future use only.",
+            "id": "GoogleCloudRedisV1ZoneMetadata",
+            "properties": {},
+            "type": "object"
+        },
+        "ImportInstanceRequest": {
+            "description": "Request for Import.",
+            "id": "ImportInstanceRequest",
+            "properties": {
+                "inputConfig": {
+                    "$ref": "InputConfig",
+                    "description": "Required. Specify data to be imported."
+                }
+            },
+            "type": "object"
+        },
+        "InputConfig": {
+            "description": "The input content",
+            "id": "InputConfig",
+            "properties": {
+                "gcsSource": {
+                    "$ref": "GcsSource",
+                    "description": "Google Cloud Storage location where input content is located."
+                }
+            },
+            "type": "object"
+        },
+        "Instance": {
+            "description": "A Google Cloud Redis instance.",
+            "id": "Instance",
+            "properties": {
+                "alternativeLocationId": {
+                    "description": "Optional. Only applicable to STANDARD_HA tier which protects the instance against zonal failures by provisioning it across two zones. If provided, it must be a different zone from the one provided in location_id.",
+                    "type": "string"
+                },
+                "authEnabled": {
+                    "description": "Optional. Indicates whether OSS Redis AUTH is enabled for the instance. If set to \"true\" AUTH is enabled on the instance. Default value is \"false\" meaning AUTH is disabled.",
+                    "type": "boolean"
+                },
+                "authorizedNetwork": {
+                    "description": "Optional. The full name of the Google Compute Engine [network](https://cloud.google.com/vpc/docs/vpc) to which the instance is connected. If left unspecified, the `default` network will be used.",
+                    "type": "string"
+                },
+                "connectMode": {
+                    "description": "Optional. The network connect mode of the Redis instance. If not provided, the connect mode defaults to DIRECT_PEERING.",
+                    "enum": [
+                        "CONNECT_MODE_UNSPECIFIED",
+                        "DIRECT_PEERING",
+                        "PRIVATE_SERVICE_ACCESS"
+                    ],
+                    "enumDescriptions": [
+                        "Not set.",
+                        "Connect via direct peering to the Memorystore for Redis hosted service.",
+                        "Connect your Memorystore for Redis instance using Private Service Access. Private services access provides an IP address range for multiple Google Cloud services, including Memorystore."
+                    ],
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "Output only. The time the instance was created.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "currentLocationId": {
+                    "description": "Output only. The current zone where the Redis endpoint is placed. For Basic Tier instances, this will always be the same as the location_id provided by the user at creation time. For Standard Tier instances, this can be either location_id or alternative_location_id and can change after a failover event.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "An arbitrary and optional user-provided name for the instance.",
+                    "type": "string"
+                },
+                "host": {
+                    "description": "Output only. Hostname or IP address of the exposed Redis endpoint used by clients to connect to the service.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Resource labels to represent user provided metadata",
+                    "type": "object"
+                },
+                "locationId": {
+                    "description": "Optional. The zone where the instance will be provisioned. If not provided, the service will choose a zone for the instance. For STANDARD_HA tier, instances will be created across two zones for protection against zonal failures. If alternative_location_id is also provided, it must be different from location_id.",
+                    "type": "string"
+                },
+                "memorySizeGb": {
+                    "description": "Required. Redis memory size in GiB.",
+                    "format": "int32",
+                    "type": "integer"
                 },
                 "name": {
-                  "pattern": "^projects/[^/]+$",
-                  "description": "The resource that owns the locations collection, if applicable.",
-                  "type": "string",
-                  "required": true,
-                  "location": "path"
+                    "description": "Required. Unique name of the resource in this scope including project and location using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` Note: Redis instances are managed and addressed at regional level so location_id here refers to a GCP region; however, users may choose which specific zone (or collection of zones for cross-zone instances) an instance should be provisioned in. Refer to location_id and alternative_location_id fields for more details.",
+                    "type": "string"
+                },
+                "persistenceIamIdentity": {
+                    "description": "Output only. Cloud IAM identity used by import / export operations to transfer data to/from Cloud Storage. Format is \"serviceAccount:\". The value may change over time for a given instance so should be checked before each import/export operation.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "port": {
+                    "description": "Output only. The port number of the exposed Redis endpoint.",
+                    "format": "int32",
+                    "readOnly": true,
+                    "type": "integer"
+                },
+                "redisConfigs": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Optional. Redis configuration parameters, according to http://redis.io/topics/config. Currently, the only supported parameters are: Redis version 3.2 and newer: * maxmemory-policy * notify-keyspace-events Redis version 4.0 and newer: * activedefrag * lfu-decay-time * lfu-log-factor * maxmemory-gb Redis version 5.0 and newer: * stream-node-max-bytes * stream-node-max-entries",
+                    "type": "object"
+                },
+                "redisVersion": {
+                    "description": "Optional. The version of Redis software. If not provided, latest supported version will be used. Currently, the supported values are: * `REDIS_3_2` for Redis 3.2 compatibility * `REDIS_4_0` for Redis 4.0 compatibility (default) * `REDIS_5_0` for Redis 5.0 compatibility * `REDIS_6_0` for Redis 6.0 compatibility",
+                    "type": "string"
+                },
+                "reservedIpRange": {
+                    "description": "Optional. The CIDR range of internal addresses that are reserved for this instance. If not provided, the service will choose an unused /29 block, for example, 10.0.0.0/29 or 192.168.0.0/29. Ranges must be unique and non-overlapping with existing subnets in an authorized network.",
+                    "type": "string"
+                },
+                "serverCaCerts": {
+                    "description": "Output only. List of server CA certificates for the instance.",
+                    "items": {
+                        "$ref": "TlsCertificate"
+                    },
+                    "readOnly": true,
+                    "type": "array"
+                },
+                "state": {
+                    "description": "Output only. The current state of this instance.",
+                    "enum": [
+                        "STATE_UNSPECIFIED",
+                        "CREATING",
+                        "READY",
+                        "UPDATING",
+                        "DELETING",
+                        "REPAIRING",
+                        "MAINTENANCE",
+                        "IMPORTING",
+                        "FAILING_OVER"
+                    ],
+                    "enumDescriptions": [
+                        "Not set.",
+                        "Redis instance is being created.",
+                        "Redis instance has been created and is fully usable.",
+                        "Redis instance configuration is being updated. Certain kinds of updates may cause the instance to become unusable while the update is in progress.",
+                        "Redis instance is being deleted.",
+                        "Redis instance is being repaired and may be unusable.",
+                        "Maintenance is being performed on this Redis instance.",
+                        "Redis instance is importing data (availability may be affected).",
+                        "Redis instance is failing over (availability may be affected)."
+                    ],
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "statusMessage": {
+                    "description": "Output only. Additional information about the current status of this instance, if available.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "tier": {
+                    "description": "Required. The service tier of the instance.",
+                    "enum": [
+                        "TIER_UNSPECIFIED",
+                        "BASIC",
+                        "STANDARD_HA"
+                    ],
+                    "enumDescriptions": [
+                        "Not set.",
+                        "BASIC tier: standalone instance",
+                        "STANDARD_HA tier: highly available primary/replica instances"
+                    ],
+                    "type": "string"
+                },
+                "transitEncryptionMode": {
+                    "description": "Optional. The TLS mode of the Redis instance. If not provided, TLS is disabled for the instance.",
+                    "enum": [
+                        "TRANSIT_ENCRYPTION_MODE_UNSPECIFIED",
+                        "SERVER_AUTHENTICATION",
+                        "DISABLED"
+                    ],
+                    "enumDescriptions": [
+                        "Not set.",
+                        "Client to Server traffic encryption enabled with server authentication.",
+                        "TLS is disabled for the instance."
+                    ],
+                    "type": "string"
                 }
-              },
-              "response": {
-                "$ref": "ListLocationsResponse"
-              },
-              "flatPath": "v1/projects/{projectsId}/locations",
-              "httpMethod": "GET"
             },
-            "get": {
-              "response": {
-                "$ref": "Location"
-              },
-              "path": "v1/{+name}",
-              "parameters": {
+            "type": "object"
+        },
+        "InstanceAuthString": {
+            "description": "Instance AUTH string details.",
+            "id": "InstanceAuthString",
+            "properties": {
+                "authString": {
+                    "description": "AUTH string set on the instance.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListInstancesResponse": {
+            "description": "Response for ListInstances.",
+            "id": "ListInstancesResponse",
+            "properties": {
+                "instances": {
+                    "description": "A list of Redis instances in the project in the specified location, or across all locations. If the `location_id` in the parent field of the request is \"-\", all regions available to the project are queried, and the results aggregated. If in such an aggregated query a location is unavailable, a placeholder Redis entry is included in the response with the `name` field set to a value of the form `projects/{project_id}/locations/{location_id}/instances/`- and the `status` field set to ERROR and `status_message` field set to \"location not available for ListInstances\".",
+                    "items": {
+                        "$ref": "Instance"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Token to retrieve the next page of results, or empty if there are no more results in the list.",
+                    "type": "string"
+                },
+                "unreachable": {
+                    "description": "Locations that could not be reached.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListLocationsResponse": {
+            "description": "The response message for Locations.ListLocations.",
+            "id": "ListLocationsResponse",
+            "properties": {
+                "locations": {
+                    "description": "A list of locations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Location"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListOperationsResponse": {
+            "description": "The response message for Operations.ListOperations.",
+            "id": "ListOperationsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                },
+                "operations": {
+                    "description": "A list of operations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Operation"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Location": {
+            "description": "A resource that represents Google Cloud Platform location.",
+            "id": "Location",
+            "properties": {
+                "displayName": {
+                    "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\".",
+                    "type": "string"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}",
+                    "type": "object"
+                },
+                "locationId": {
+                    "description": "Resource ID for the region. For example: \"us-east1\".",
+                    "type": "string"
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Output only. The set of available zones in the location. The map is keyed by the lowercase ID of each zone, as defined by Compute Engine. These keys can be specified in `location_id` or `alternative_location_id` fields when creating a Redis instance.",
+                    "type": "object"
+                },
                 "name": {
-                  "required": true,
-                  "description": "Resource name for the location.",
-                  "pattern": "^projects/[^/]+/locations/[^/]+$",
-                  "location": "path",
-                  "type": "string"
+                    "description": "Full resource name for the region. For example: \"projects/example-project/locations/us-east1\".",
+                    "type": "string"
                 }
-              },
-              "flatPath": "v1/projects/{projectsId}/locations/{locationsId}",
-              "id": "redis.projects.locations.get",
-              "description": "Gets information about a location.",
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ]
-            }
-          },
-          "resources": {
-            "instances": {
-              "methods": {
-                "get": {
-                  "id": "redis.projects.locations.instances.get",
-                  "response": {
-                    "$ref": "Instance"
-                  },
-                  "parameters": {
-                    "name": {
-                      "required": true,
-                      "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
-                      "location": "path",
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$"
-                    }
-                  },
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "description": "Gets the details of a specific Redis instance.",
-                  "httpMethod": "GET",
-                  "path": "v1/{+name}"
-                },
-                "getAuthString": {
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
-                      "type": "string",
-                      "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
-                      "required": true,
-                      "location": "path"
-                    }
-                  },
-                  "path": "v1/{+name}/authString",
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "InstanceAuthString"
-                  },
-                  "id": "redis.projects.locations.instances.getAuthString",
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}/authString",
-                  "description": "Gets the AUTH string for a Redis instance. If AUTH is not enabled for the instance the response will be empty. This information is not included in the details returned to GetInstance.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ]
-                },
-                "patch": {
-                  "request": {
-                    "$ref": "Instance"
-                  },
-                  "parameters": {
-                    "name": {
-                      "location": "path",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
-                      "type": "string",
-                      "description": "Required. Unique name of the resource in this scope including project and location using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` Note: Redis instances are managed and addressed at regional level so location_id here refers to a GCP region; however, users may choose which specific zone (or collection of zones for cross-zone instances) an instance should be provisioned in. Refer to location_id and alternative_location_id fields for more details."
-                    },
-                    "updateMask": {
-                      "type": "string",
-                      "description": "Required. Mask of fields to update. At least one path must be supplied in this field. The elements of the repeated paths field may only include these fields from Instance: * `displayName` * `labels` * `memorySizeGb` * `redisConfig`",
-                      "location": "query",
-                      "format": "google-fieldmask"
-                    }
-                  },
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "description": "Updates the metadata and configuration of a specific Redis instance. Completed longrunning.Operation will contain the new instance object in the response field. The returned operation is automatically deleted after a few hours, so there is no need to call DeleteOperation.",
-                  "path": "v1/{+name}",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}",
-                  "id": "redis.projects.locations.instances.patch",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "httpMethod": "PATCH"
-                },
-                "export": {
-                  "path": "v1/{+name}:export",
-                  "parameters": {
-                    "name": {
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
-                      "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
-                      "location": "path",
-                      "type": "string"
-                    }
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "POST",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "description": "Export Redis instance data into a Redis RDB format file in Cloud Storage. Redis will continue serving during this operation. The returned operation is automatically deleted after a few hours, so there is no need to call DeleteOperation.",
-                  "id": "redis.projects.locations.instances.export",
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}:export",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "request": {
-                    "$ref": "ExportInstanceRequest"
-                  }
-                },
-                "import": {
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "required": true,
-                      "type": "string",
-                      "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$"
-                    }
-                  },
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}:import",
-                  "request": {
-                    "$ref": "ImportInstanceRequest"
-                  },
-                  "httpMethod": "POST",
-                  "description": "Import a Redis RDB snapshot file from Cloud Storage into a Redis instance. Redis may stop serving during this operation. Instance state will be IMPORTING for entire operation. When complete, the instance will contain only data from the imported file. The returned operation is automatically deleted after a few hours, so there is no need to call DeleteOperation.",
-                  "path": "v1/{+name}:import",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "id": "redis.projects.locations.instances.import"
-                },
-                "failover": {
-                  "description": "Initiates a failover of the primary node to current replica node for a specific STANDARD tier Cloud Memorystore for Redis instance.",
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}:failover",
-                  "path": "v1/{+name}:failover",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "httpMethod": "POST",
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
-                      "required": true,
-                      "location": "path",
-                      "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region."
-                    }
-                  },
-                  "request": {
-                    "$ref": "FailoverInstanceRequest"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "id": "redis.projects.locations.instances.failover",
-                  "response": {
-                    "$ref": "Operation"
-                  }
-                },
-                "create": {
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/instances",
-                  "description": "Creates a Redis instance based on the specified tier and memory size. By default, the instance is accessible from the project's [default network](https://cloud.google.com/vpc/docs/vpc). The creation is executed asynchronously and callers may check the returned operation to track its progress. Once the operation is completed the Redis instance will be fully functional. Completed longrunning.Operation will contain the new instance object in the response field. The returned operation is automatically deleted after a few hours, so there is no need to call DeleteOperation.",
-                  "parameters": {
-                    "parent": {
-                      "required": true,
-                      "description": "Required. The resource name of the instance location using the form: `projects/{project_id}/locations/{location_id}` where `location_id` refers to a GCP region.",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "location": "path",
-                      "type": "string"
-                    },
-                    "instanceId": {
-                      "type": "string",
-                      "description": "Required. The logical name of the Redis instance in the customer project with the following restrictions: * Must contain only lowercase letters, numbers, and hyphens. * Must start with a letter. * Must be between 1-40 characters. * Must end with a number or a letter. * Must be unique within the customer project / location",
-                      "location": "query"
-                    }
-                  },
-                  "request": {
-                    "$ref": "Instance"
-                  },
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "path": "v1/{+parent}/instances",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "id": "redis.projects.locations.instances.create"
-                },
-                "upgrade": {
-                  "id": "redis.projects.locations.instances.upgrade",
-                  "httpMethod": "POST",
-                  "description": "Upgrades Redis instance to the newer Redis version specified in the request.",
-                  "request": {
-                    "$ref": "UpgradeInstanceRequest"
-                  },
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}:upgrade",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
-                      "location": "path",
-                      "type": "string"
-                    }
-                  },
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "path": "v1/{+name}:upgrade"
-                },
-                "delete": {
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "path": "v1/{+name}",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "httpMethod": "DELETE",
-                  "id": "redis.projects.locations.instances.delete",
-                  "description": "Deletes a specific Redis instance. Instance stops serving and data is deleted.",
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}",
-                  "parameters": {
-                    "name": {
-                      "location": "path",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
-                      "type": "string",
-                      "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region."
-                    }
-                  },
-                  "response": {
-                    "$ref": "Operation"
-                  }
-                },
-                "list": {
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/instances",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "path": "v1/{+parent}/instances",
-                  "response": {
-                    "$ref": "ListInstancesResponse"
-                  },
-                  "description": "Lists all Redis instances owned by a project in either the specified location (region) or all locations. The location should have the following format: * `projects/{project_id}/locations/{location_id}` If `location_id` is specified as `-` (wildcard), then all regions available to the project are queried, and the results are aggregated.",
-                  "id": "redis.projects.locations.instances.list",
-                  "httpMethod": "GET",
-                  "parameters": {
-                    "pageSize": {
-                      "format": "int32",
-                      "description": "The maximum number of items to return. If not specified, a default value of 1000 will be used by the service. Regardless of the page_size value, the response may include a partial list and a caller should only rely on response's `next_page_token` to determine if there are more instances left to be queried.",
-                      "type": "integer",
-                      "location": "query"
-                    },
-                    "pageToken": {
-                      "location": "query",
-                      "type": "string",
-                      "description": "The `next_page_token` value returned from a previous ListInstances request, if any."
-                    },
-                    "parent": {
-                      "location": "path",
-                      "description": "Required. The resource name of the instance location using the form: `projects/{project_id}/locations/{location_id}` where `location_id` refers to a GCP region.",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$"
-                    }
-                  },
-                  "parameterOrder": [
-                    "parent"
-                  ]
-                }
-              }
             },
-            "operations": {
-              "methods": {
-                "cancel": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "id": "redis.projects.locations.operations.cancel",
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}:cancel",
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "path": "v1/{+name}:cancel",
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "description": "The name of the operation resource to be cancelled.",
-                      "location": "path",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$"
-                    }
-                  },
-                  "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`."
+            "type": "object"
+        },
+        "Operation": {
+            "description": "This resource represents a long-running operation that is the result of a network API call.",
+            "id": "Operation",
+            "properties": {
+                "done": {
+                    "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
+                    "type": "boolean"
                 },
-                "list": {
-                  "path": "v1/{+name}/operations",
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations",
-                  "parameters": {
-                    "pageSize": {
-                      "format": "int32",
-                      "type": "integer",
-                      "location": "query",
-                      "description": "The standard list page size."
-                    },
-                    "name": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "description": "The name of the operation's parent resource.",
-                      "type": "string",
-                      "required": true,
-                      "location": "path"
-                    },
-                    "pageToken": {
-                      "location": "query",
-                      "type": "string",
-                      "description": "The standard list page token."
-                    },
-                    "filter": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "The standard list filter."
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "response": {
-                    "$ref": "ListOperationsResponse"
-                  },
-                  "httpMethod": "GET",
-                  "id": "redis.projects.locations.operations.list",
-                  "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id."
+                "error": {
+                    "$ref": "Status",
+                    "description": "The error result of the operation in case of failure or cancellation."
                 },
-                "delete": {
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.",
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "httpMethod": "DELETE",
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
-                  "id": "redis.projects.locations.operations.delete",
-                  "parameters": {
-                    "name": {
-                      "description": "The name of the operation resource to be deleted.",
-                      "type": "string",
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
-                      "required": true
-                    }
-                  },
-                  "path": "v1/{+name}"
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "{ `createTime`: The time the operation was created. `endTime`: The time the operation finished running. `target`: Server-defined resource path for the target of the operation. `verb`: Name of the verb executed by the operation. `statusDetail`: Human-readable status of the operation, if any. `cancelRequested`: Identifies whether the user has requested cancellation of the operation. Operations that have successfully been cancelled have Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`. `apiVersion`: API version used to start the operation. }",
+                    "type": "object"
                 },
-                "get": {
-                  "parameters": {
-                    "name": {
-                      "description": "The name of the operation resource.",
-                      "required": true,
-                      "location": "path",
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$"
-                    }
-                  },
-                  "path": "v1/{+name}",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
-                  "httpMethod": "GET",
-                  "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "id": "redis.projects.locations.operations.get",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ]
+                "name": {
+                    "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
+                    "type": "string"
+                },
+                "response": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
+                    "type": "object"
                 }
-              }
-            }
-          }
+            },
+            "type": "object"
+        },
+        "OutputConfig": {
+            "description": "The output content",
+            "id": "OutputConfig",
+            "properties": {
+                "gcsDestination": {
+                    "$ref": "GcsDestination",
+                    "description": "Google Cloud Storage destination for output content."
+                }
+            },
+            "type": "object"
+        },
+        "Status": {
+            "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
+            "id": "Status",
+            "properties": {
+                "code": {
+                    "description": "The status code, which should be an enum value of google.rpc.Code.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TlsCertificate": {
+            "description": "TlsCertificate Resource",
+            "id": "TlsCertificate",
+            "properties": {
+                "cert": {
+                    "description": "PEM representation.",
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "Output only. The time when the certificate was created in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, for example `2020-05-18T00:00:00.094Z`.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "expireTime": {
+                    "description": "Output only. The time when the certificate expires in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, for example `2020-05-18T00:00:00.094Z`.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "serialNumber": {
+                    "description": "Serial number, as extracted from the certificate.",
+                    "type": "string"
+                },
+                "sha1Fingerprint": {
+                    "description": "Sha1 Fingerprint of the certificate.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UpgradeInstanceRequest": {
+            "description": "Request for UpgradeInstance.",
+            "id": "UpgradeInstanceRequest",
+            "properties": {
+                "redisVersion": {
+                    "description": "Required. Specifies the target version of Redis software to upgrade to.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         }
-      }
-    }
-  },
-  "fullyEncodeReservedExpansion": true,
-  "id": "redis:v1",
-  "version_module": true,
-  "title": "Google Cloud Memorystore for Redis API",
-  "parameters": {
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
     },
-    "access_token": {
-      "location": "query",
-      "type": "string",
-      "description": "OAuth access token."
-    },
-    "fields": {
-      "type": "string",
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response."
-    },
-    "quotaUser": {
-      "location": "query",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "type": "string"
-    },
-    "key": {
-      "location": "query",
-      "type": "string",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token."
-    },
-    "upload_protocol": {
-      "type": "string",
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "location": "query",
-      "description": "V1 error format.",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "type": "string"
-    },
-    "alt": {
-      "description": "Data format for response.",
-      "location": "query",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "type": "string",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "default": "json"
-    },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "default": "true",
-      "location": "query",
-      "type": "boolean"
-    },
-    "callback": {
-      "type": "string",
-      "location": "query",
-      "description": "JSONP"
-    }
-  },
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "baseUrl": "https://redis.googleapis.com/",
-  "protocol": "rest",
-  "revision": "20201110",
-  "servicePath": "",
-  "kind": "discovery#restDescription",
-  "batchPath": "batch"
-}
+    "servicePath": "",
+    "title": "Google Cloud Memorystore for Redis API",
+    "version": "v1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/redis.v1beta1.json b/googleapiclient/discovery_cache/documents/redis.v1beta1.json
index 3d96c08..e992a83 100644
--- a/googleapiclient/discovery_cache/documents/redis.v1beta1.json
+++ b/googleapiclient/discovery_cache/documents/redis.v1beta1.json
@@ -1,1135 +1,1135 @@
 {
-  "discoveryVersion": "v1",
-  "rootUrl": "https://redis.googleapis.com/",
-  "basePath": "",
-  "version_module": true,
-  "kind": "discovery#restDescription",
-  "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
-  },
-  "batchPath": "batch",
-  "mtlsRootUrl": "https://redis.mtls.googleapis.com/",
-  "revision": "20201110",
-  "name": "redis",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
+                }
+            }
         }
-      }
-    }
-  },
-  "documentationLink": "https://cloud.google.com/memorystore/docs/redis/",
-  "id": "redis:v1beta1",
-  "parameters": {
-    "$.xgafv": {
-      "location": "query",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "description": "V1 error format.",
-      "type": "string",
-      "enum": [
-        "1",
-        "2"
-      ]
     },
-    "fields": {
-      "type": "string",
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response."
+    "basePath": "",
+    "baseUrl": "https://redis.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Cloud Redis",
+    "description": "Creates and manages Redis instances on the Google Cloud Platform.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/memorystore/docs/redis/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
     },
-    "key": {
-      "location": "query",
-      "type": "string",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token."
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "location": "query",
-      "type": "string"
-    },
-    "uploadType": {
-      "type": "string",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
-    },
-    "access_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth access token."
-    },
-    "prettyPrint": {
-      "type": "boolean",
-      "description": "Returns response with indentations and line breaks.",
-      "default": "true",
-      "location": "query"
-    },
-    "callback": {
-      "type": "string",
-      "description": "JSONP",
-      "location": "query"
-    },
-    "alt": {
-      "type": "string",
-      "location": "query",
-      "description": "Data format for response.",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "default": "json",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ]
-    },
-    "quotaUser": {
-      "type": "string",
-      "location": "query",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters."
-    }
-  },
-  "servicePath": "",
-  "fullyEncodeReservedExpansion": true,
-  "canonicalName": "Cloud Redis",
-  "title": "Google Cloud Memorystore for Redis API",
-  "baseUrl": "https://redis.googleapis.com/",
-  "schemas": {
-    "GoogleCloudCommonOperationMetadata": {
-      "type": "object",
-      "id": "GoogleCloudCommonOperationMetadata",
-      "properties": {
-        "apiVersion": {
-          "type": "string",
-          "description": "[Output only] API version used to start the operation."
+    "id": "redis:v1beta1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://redis.mtls.googleapis.com/",
+    "name": "redis",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "verb": {
-          "type": "string",
-          "description": "[Output only] Name of the verb executed by the operation."
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
         },
-        "createTime": {
-          "format": "google-datetime",
-          "type": "string",
-          "description": "[Output only] The time the operation was created."
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "statusDetail": {
-          "description": "[Output only] Human-readable status of the operation, if any.",
-          "type": "string"
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
         },
-        "cancelRequested": {
-          "description": "[Output only] Identifies whether the user has requested cancellation of the operation. Operations that have successfully been cancelled have Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.",
-          "type": "boolean"
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
         },
-        "endTime": {
-          "format": "google-datetime",
-          "type": "string",
-          "description": "[Output only] The time the operation finished running."
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
         },
-        "target": {
-          "type": "string",
-          "description": "[Output only] Server-defined resource path for the target of the operation."
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      },
-      "description": "Represents the metadata of the long-running operation."
     },
-    "Empty": {
-      "id": "Empty",
-      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
-      "properties": {},
-      "type": "object"
-    },
-    "FailoverInstanceRequest": {
-      "description": "Request for Failover.",
-      "type": "object",
-      "id": "FailoverInstanceRequest",
-      "properties": {
-        "dataProtectionMode": {
-          "type": "string",
-          "enum": [
-            "DATA_PROTECTION_MODE_UNSPECIFIED",
-            "LIMITED_DATA_LOSS",
-            "FORCE_DATA_LOSS"
-          ],
-          "description": "Optional. Available data protection modes that the user can choose. If it's unspecified, data protection mode will be LIMITED_DATA_LOSS by default.",
-          "enumDescriptions": [
-            "Defaults to LIMITED_DATA_LOSS if a data protection mode is not specified.",
-            "Instance failover will be protected with data loss control. More specifically, the failover will only be performed if the current replication offset diff between primary and replica is under a certain threshold.",
-            "Instance failover will be performed without data loss control."
-          ]
+    "protocol": "rest",
+    "resources": {
+        "projects": {
+            "resources": {
+                "locations": {
+                    "methods": {
+                        "get": {
+                            "description": "Gets information about a location.",
+                            "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}",
+                            "httpMethod": "GET",
+                            "id": "redis.projects.locations.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Resource name for the location.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "response": {
+                                "$ref": "Location"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists information about the supported locations for this service.",
+                            "flatPath": "v1beta1/projects/{projectsId}/locations",
+                            "httpMethod": "GET",
+                            "id": "redis.projects.locations.list",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "The standard list filter.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "name": {
+                                    "description": "The resource that owns the locations collection, if applicable.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "The standard list page size.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The standard list page token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}/locations",
+                            "response": {
+                                "$ref": "ListLocationsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "instances": {
+                            "methods": {
+                                "create": {
+                                    "description": "Creates a Redis instance based on the specified tier and memory size. By default, the instance is accessible from the project's [default network](https://cloud.google.com/vpc/docs/vpc). The creation is executed asynchronously and callers may check the returned operation to track its progress. Once the operation is completed the Redis instance will be fully functional. Completed longrunning.Operation will contain the new instance object in the response field. The returned operation is automatically deleted after a few hours, so there is no need to call DeleteOperation.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/instances",
+                                    "httpMethod": "POST",
+                                    "id": "redis.projects.locations.instances.create",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "instanceId": {
+                                            "description": "Required. The logical name of the Redis instance in the customer project with the following restrictions: * Must contain only lowercase letters, numbers, and hyphens. * Must start with a letter. * Must be between 1-40 characters. * Must end with a number or a letter. * Must be unique within the customer project / location",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The resource name of the instance location using the form: `projects/{project_id}/locations/{location_id}` where `location_id` refers to a GCP region.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/instances",
+                                    "request": {
+                                        "$ref": "Instance"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a specific Redis instance. Instance stops serving and data is deleted.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "redis.projects.locations.instances.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "export": {
+                                    "description": "Export Redis instance data into a Redis RDB format file in Cloud Storage. Redis will continue serving during this operation. The returned operation is automatically deleted after a few hours, so there is no need to call DeleteOperation.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}:export",
+                                    "httpMethod": "POST",
+                                    "id": "redis.projects.locations.instances.export",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}:export",
+                                    "request": {
+                                        "$ref": "ExportInstanceRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "failover": {
+                                    "description": "Initiates a failover of the primary node to current replica node for a specific STANDARD tier Cloud Memorystore for Redis instance.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}:failover",
+                                    "httpMethod": "POST",
+                                    "id": "redis.projects.locations.instances.failover",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}:failover",
+                                    "request": {
+                                        "$ref": "FailoverInstanceRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets the details of a specific Redis instance.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}",
+                                    "httpMethod": "GET",
+                                    "id": "redis.projects.locations.instances.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "response": {
+                                        "$ref": "Instance"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "getAuthString": {
+                                    "description": "Gets the AUTH string for a Redis instance. If AUTH is not enabled for the instance the response will be empty. This information is not included in the details returned to GetInstance.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}/authString",
+                                    "httpMethod": "GET",
+                                    "id": "redis.projects.locations.instances.getAuthString",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}/authString",
+                                    "response": {
+                                        "$ref": "InstanceAuthString"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "import": {
+                                    "description": "Import a Redis RDB snapshot file from Cloud Storage into a Redis instance. Redis may stop serving during this operation. Instance state will be IMPORTING for entire operation. When complete, the instance will contain only data from the imported file. The returned operation is automatically deleted after a few hours, so there is no need to call DeleteOperation.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}:import",
+                                    "httpMethod": "POST",
+                                    "id": "redis.projects.locations.instances.import",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}:import",
+                                    "request": {
+                                        "$ref": "ImportInstanceRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists all Redis instances owned by a project in either the specified location (region) or all locations. The location should have the following format: * `projects/{project_id}/locations/{location_id}` If `location_id` is specified as `-` (wildcard), then all regions available to the project are queried, and the results are aggregated.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/instances",
+                                    "httpMethod": "GET",
+                                    "id": "redis.projects.locations.instances.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "pageSize": {
+                                            "description": "The maximum number of items to return. If not specified, a default value of 1000 will be used by the service. Regardless of the page_size value, the response may include a partial list and a caller should only rely on response's `next_page_token` to determine if there are more instances left to be queried.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "The `next_page_token` value returned from a previous ListInstances request, if any.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The resource name of the instance location using the form: `projects/{project_id}/locations/{location_id}` where `location_id` refers to a GCP region.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/instances",
+                                    "response": {
+                                        "$ref": "ListInstancesResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "patch": {
+                                    "description": "Updates the metadata and configuration of a specific Redis instance. Completed longrunning.Operation will contain the new instance object in the response field. The returned operation is automatically deleted after a few hours, so there is no need to call DeleteOperation.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}",
+                                    "httpMethod": "PATCH",
+                                    "id": "redis.projects.locations.instances.patch",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Unique name of the resource in this scope including project and location using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` Note: Redis instances are managed and addressed at regional level so location_id here refers to a GCP region; however, users may choose which specific zone (or collection of zones for cross-zone instances) an instance should be provisioned in. Refer to location_id and alternative_location_id fields for more details.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "updateMask": {
+                                            "description": "Required. Mask of fields to update. At least one path must be supplied in this field. The elements of the repeated paths field may only include these fields from Instance: * `displayName` * `labels` * `memorySizeGb` * `redisConfig`",
+                                            "format": "google-fieldmask",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "request": {
+                                        "$ref": "Instance"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "upgrade": {
+                                    "description": "Upgrades Redis instance to the newer Redis version specified in the request.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}:upgrade",
+                                    "httpMethod": "POST",
+                                    "id": "redis.projects.locations.instances.upgrade",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}:upgrade",
+                                    "request": {
+                                        "$ref": "UpgradeInstanceRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
+                            }
+                        },
+                        "operations": {
+                            "methods": {
+                                "cancel": {
+                                    "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}:cancel",
+                                    "httpMethod": "POST",
+                                    "id": "redis.projects.locations.operations.cancel",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The name of the operation resource to be cancelled.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}:cancel",
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "redis.projects.locations.operations.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The name of the operation resource to be deleted.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
+                                    "httpMethod": "GET",
+                                    "id": "redis.projects.locations.operations.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The name of the operation resource.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/operations",
+                                    "httpMethod": "GET",
+                                    "id": "redis.projects.locations.operations.list",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "filter": {
+                                            "description": "The standard list filter.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "name": {
+                                            "description": "The name of the operation's parent resource.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "The standard list page size.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "The standard list page token.",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}/operations",
+                                    "response": {
+                                        "$ref": "ListOperationsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                }
+            }
         }
-      }
     },
-    "Status": {
-      "properties": {
-        "code": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The status code, which should be an enum value of google.rpc.Code."
+    "revision": "20201210",
+    "rootUrl": "https://redis.googleapis.com/",
+    "schemas": {
+        "Empty": {
+            "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
+            "id": "Empty",
+            "properties": {},
+            "type": "object"
         },
-        "details": {
-          "items": {
-            "additionalProperties": {
-              "description": "Properties of the object. Contains field @type with type URL.",
-              "type": "any"
+        "ExportInstanceRequest": {
+            "description": "Request for Export.",
+            "id": "ExportInstanceRequest",
+            "properties": {
+                "outputConfig": {
+                    "$ref": "OutputConfig",
+                    "description": "Required. Specify data to be exported."
+                }
             },
             "type": "object"
-          },
-          "type": "array",
-          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use."
         },
-        "message": {
-          "type": "string",
-          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client."
-        }
-      },
-      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
-      "type": "object",
-      "id": "Status"
-    },
-    "InstanceAuthString": {
-      "description": "Instance AUTH string details.",
-      "type": "object",
-      "properties": {
-        "authString": {
-          "description": "AUTH string set on the instance.",
-          "type": "string"
-        }
-      },
-      "id": "InstanceAuthString"
-    },
-    "ListLocationsResponse": {
-      "properties": {
-        "locations": {
-          "type": "array",
-          "items": {
-            "$ref": "Location"
-          },
-          "description": "A list of locations that matches the specified filter in the request."
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "The standard List next-page token."
-        }
-      },
-      "type": "object",
-      "description": "The response message for Locations.ListLocations.",
-      "id": "ListLocationsResponse"
-    },
-    "TlsCertificate": {
-      "type": "object",
-      "properties": {
-        "createTime": {
-          "readOnly": true,
-          "format": "google-datetime",
-          "description": "Output only. The time when the certificate was created in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, for example `2020-05-18T00:00:00.094Z`.",
-          "type": "string"
-        },
-        "sha1Fingerprint": {
-          "type": "string",
-          "description": "Sha1 Fingerprint of the certificate."
-        },
-        "serialNumber": {
-          "type": "string",
-          "description": "Serial number, as extracted from the certificate."
-        },
-        "cert": {
-          "type": "string",
-          "description": "PEM representation."
-        },
-        "expireTime": {
-          "readOnly": true,
-          "description": "Output only. The time when the certificate expires in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, for example `2020-05-18T00:00:00.094Z`.",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      },
-      "id": "TlsCertificate",
-      "description": "TlsCertificate Resource"
-    },
-    "ListOperationsResponse": {
-      "properties": {
-        "operations": {
-          "description": "A list of operations that matches the specified filter in the request.",
-          "items": {
-            "$ref": "Operation"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "description": "The standard List next-page token.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "The response message for Operations.ListOperations.",
-      "id": "ListOperationsResponse"
-    },
-    "Instance": {
-      "id": "Instance",
-      "properties": {
-        "memorySizeGb": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Required. Redis memory size in GiB."
-        },
-        "labels": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "type": "object",
-          "description": "Resource labels to represent user provided metadata"
-        },
-        "connectMode": {
-          "type": "string",
-          "enum": [
-            "CONNECT_MODE_UNSPECIFIED",
-            "DIRECT_PEERING",
-            "PRIVATE_SERVICE_ACCESS"
-          ],
-          "description": "Optional. The network connect mode of the Redis instance. If not provided, the connect mode defaults to DIRECT_PEERING.",
-          "enumDescriptions": [
-            "Not set.",
-            "Connect via direct peering to the Memorystore for Redis hosted service.",
-            "Connect your Memorystore for Redis instance using Private Services Access. Private services access provides an IP address range for multiple Google Cloud services, including Memorystore."
-          ]
-        },
-        "createTime": {
-          "readOnly": true,
-          "description": "Output only. The time the instance was created.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "transitEncryptionMode": {
-          "type": "string",
-          "enum": [
-            "TRANSIT_ENCRYPTION_MODE_UNSPECIFIED",
-            "SERVER_AUTHENTICATION",
-            "DISABLED"
-          ],
-          "description": "Optional. The In-transit encryption mode of Redis instance. If not provided, in-transit encryption is disabled for instance.",
-          "enumDescriptions": [
-            "Not set.",
-            "In-transit encryption enabled with server authentication",
-            "In-transit encryption is disabled for instance."
-          ]
-        },
-        "name": {
-          "type": "string",
-          "description": "Required. Unique name of the resource in this scope including project and location using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` Note: Redis instances are managed and addressed at regional level so location_id here refers to a GCP region; however, users may choose which specific zone (or collection of zones for cross-zone instances) an instance should be provisioned in. Refer to location_id and alternative_location_id fields for more details."
-        },
-        "authorizedNetwork": {
-          "description": "Optional. The full name of the Google Compute Engine [network](https://cloud.google.com/vpc/docs/vpc) to which the instance is connected. If left unspecified, the `default` network will be used.",
-          "type": "string"
-        },
-        "alternativeLocationId": {
-          "description": "Optional. Only applicable to STANDARD_HA tier which protects the instance against zonal failures by provisioning it across two zones. If provided, it must be a different zone from the one provided in location_id.",
-          "type": "string"
-        },
-        "port": {
-          "readOnly": true,
-          "type": "integer",
-          "format": "int32",
-          "description": "Output only. The port number of the exposed Redis endpoint."
-        },
-        "persistenceIamIdentity": {
-          "type": "string",
-          "readOnly": true,
-          "description": "Output only. Cloud IAM identity used by import / export operations to transfer data to/from Cloud Storage. Format is \"serviceAccount:\". The value may change over time for a given instance so should be checked before each import/export operation."
-        },
-        "authEnabled": {
-          "type": "boolean",
-          "description": "Optional. Indicates whether OSS Redis AUTH is enabled for the instance. If set to \"true\" AUTH is enabled on the instance. Default value is \"false\" meaning AUTH is disabled."
-        },
-        "redisVersion": {
-          "type": "string",
-          "description": "Optional. The version of Redis software. If not provided, latest supported version will be used. Currently, the supported values are: * `REDIS_3_2` for Redis 3.2 compatibility * `REDIS_4_0` for Redis 4.0 compatibility (default) * `REDIS_5_0` for Redis 5.0 compatibility"
-        },
-        "host": {
-          "description": "Output only. Hostname or IP address of the exposed Redis endpoint used by clients to connect to the service.",
-          "readOnly": true,
-          "type": "string"
-        },
-        "statusMessage": {
-          "type": "string",
-          "description": "Output only. Additional information about the current status of this instance, if available.",
-          "readOnly": true
-        },
-        "currentLocationId": {
-          "readOnly": true,
-          "type": "string",
-          "description": "Output only. The current zone where the Redis endpoint is placed. For Basic Tier instances, this will always be the same as the location_id provided by the user at creation time. For Standard Tier instances, this can be either location_id or alternative_location_id and can change after a failover event."
-        },
-        "state": {
-          "enumDescriptions": [
-            "Not set.",
-            "Redis instance is being created.",
-            "Redis instance has been created and is fully usable.",
-            "Redis instance configuration is being updated. Certain kinds of updates may cause the instance to become unusable while the update is in progress.",
-            "Redis instance is being deleted.",
-            "Redis instance is being repaired and may be unusable.",
-            "Maintenance is being performed on this Redis instance.",
-            "Redis instance is importing data (availability may be affected).",
-            "Redis instance is failing over (availability may be affected)."
-          ],
-          "description": "Output only. The current state of this instance.",
-          "readOnly": true,
-          "type": "string",
-          "enum": [
-            "STATE_UNSPECIFIED",
-            "CREATING",
-            "READY",
-            "UPDATING",
-            "DELETING",
-            "REPAIRING",
-            "MAINTENANCE",
-            "IMPORTING",
-            "FAILING_OVER"
-          ]
-        },
-        "redisConfigs": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional. Redis configuration parameters, according to http://redis.io/topics/config. Currently, the only supported parameters are: Redis version 3.2 and newer: * maxmemory-policy * notify-keyspace-events Redis version 4.0 and newer: * activedefrag * lfu-decay-time * lfu-log-factor * maxmemory-gb Redis version 5.0 and newer: * stream-node-max-bytes * stream-node-max-entries",
-          "type": "object"
-        },
-        "reservedIpRange": {
-          "description": "Optional. The CIDR range of internal addresses that are reserved for this instance. If not provided, the service will choose an unused /29 block, for example, 10.0.0.0/29 or 192.168.0.0/29. Ranges must be unique and non-overlapping with existing subnets in an authorized network.",
-          "type": "string"
-        },
-        "tier": {
-          "enumDescriptions": [
-            "Not set.",
-            "BASIC tier: standalone instance",
-            "STANDARD_HA tier: highly available primary/replica instances"
-          ],
-          "description": "Required. The service tier of the instance.",
-          "type": "string",
-          "enum": [
-            "TIER_UNSPECIFIED",
-            "BASIC",
-            "STANDARD_HA"
-          ]
-        },
-        "serverCaCerts": {
-          "type": "array",
-          "readOnly": true,
-          "items": {
-            "$ref": "TlsCertificate"
-          },
-          "description": "Output only. List of server CA certificates for the instance."
-        },
-        "displayName": {
-          "type": "string",
-          "description": "An arbitrary and optional user-provided name for the instance."
-        },
-        "locationId": {
-          "type": "string",
-          "description": "Optional. The zone where the instance will be provisioned. If not provided, the service will choose a zone for the instance. For STANDARD_HA tier, instances will be created across two zones for protection against zonal failures. If alternative_location_id is also provided, it must be different from location_id."
-        }
-      },
-      "description": "A Google Cloud Redis instance.",
-      "type": "object"
-    },
-    "ListInstancesResponse": {
-      "properties": {
-        "instances": {
-          "description": "A list of Redis instances in the project in the specified location, or across all locations. If the `location_id` in the parent field of the request is \"-\", all regions available to the project are queried, and the results aggregated. If in such an aggregated query a location is unavailable, a placeholder Redis entry is included in the response with the `name` field set to a value of the form `projects/{project_id}/locations/{location_id}/instances/`- and the `status` field set to ERROR and `status_message` field set to \"location not available for ListInstances\".",
-          "items": {
-            "$ref": "Instance"
-          },
-          "type": "array"
-        },
-        "unreachable": {
-          "description": "Locations that could not be reached.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "nextPageToken": {
-          "description": "Token to retrieve the next page of results, or empty if there are no more results in the list.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Response for ListInstances.",
-      "id": "ListInstancesResponse"
-    },
-    "InputConfig": {
-      "id": "InputConfig",
-      "description": "The input content",
-      "type": "object",
-      "properties": {
-        "gcsSource": {
-          "description": "Google Cloud Storage location where input content is located.",
-          "$ref": "GcsSource"
-        }
-      }
-    },
-    "Location": {
-      "id": "Location",
-      "description": "A resource that represents Google Cloud Platform location.",
-      "type": "object",
-      "properties": {
-        "labels": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "type": "object",
-          "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}"
-        },
-        "name": {
-          "type": "string",
-          "description": "Full resource name for the region. For example: \"projects/example-project/locations/us-east1\"."
-        },
-        "metadata": {
-          "type": "object",
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "Output only. The set of available zones in the location. The map is keyed by the lowercase ID of each zone, as defined by Compute Engine. These keys can be specified in `location_id` or `alternative_location_id` fields when creating a Redis instance."
-        },
-        "locationId": {
-          "description": "Resource ID for the region. For example: \"us-east1\".",
-          "type": "string"
-        },
-        "displayName": {
-          "type": "string",
-          "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\"."
-        }
-      }
-    },
-    "OutputConfig": {
-      "type": "object",
-      "properties": {
-        "gcsDestination": {
-          "$ref": "GcsDestination",
-          "description": "Google Cloud Storage destination for output content."
-        }
-      },
-      "id": "OutputConfig",
-      "description": "The output content"
-    },
-    "UpgradeInstanceRequest": {
-      "description": "Request for UpgradeInstance.",
-      "id": "UpgradeInstanceRequest",
-      "properties": {
-        "redisVersion": {
-          "description": "Required. Specifies the target version of Redis software to upgrade to.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "GoogleCloudRedisV1beta1ZoneMetadata": {
-      "description": "Defines specific information for a particular zone. Currently empty and reserved for future use only.",
-      "type": "object",
-      "id": "GoogleCloudRedisV1beta1ZoneMetadata",
-      "properties": {}
-    },
-    "Operation": {
-      "description": "This resource represents a long-running operation that is the result of a network API call.",
-      "type": "object",
-      "id": "Operation",
-      "properties": {
-        "metadata": {
-          "type": "object",
-          "description": "{ `createTime`: The time the operation was created. `endTime`: The time the operation finished running. `target`: Server-defined resource path for the target of the operation. `verb`: Name of the verb executed by the operation. `statusDetail`: Human-readable status of the operation, if any. `cancelRequested`: Identifies whether the user has requested cancellation of the operation. Operations that have successfully been cancelled have Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`. `apiVersion`: API version used to start the operation. }",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          }
-        },
-        "response": {
-          "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "type": "object"
-        },
-        "done": {
-          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
-          "type": "boolean"
-        },
-        "name": {
-          "type": "string",
-          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`."
-        },
-        "error": {
-          "description": "The error result of the operation in case of failure or cancellation.",
-          "$ref": "Status"
-        }
-      }
-    },
-    "GcsSource": {
-      "properties": {
-        "uri": {
-          "description": "Required. Source data URI. (e.g. 'gs://my_bucket/my_object').",
-          "type": "string"
-        }
-      },
-      "description": "The Cloud Storage location for the input content",
-      "type": "object",
-      "id": "GcsSource"
-    },
-    "ExportInstanceRequest": {
-      "type": "object",
-      "properties": {
-        "outputConfig": {
-          "description": "Required. Specify data to be exported.",
-          "$ref": "OutputConfig"
-        }
-      },
-      "description": "Request for Export.",
-      "id": "ExportInstanceRequest"
-    },
-    "ImportInstanceRequest": {
-      "description": "Request for Import.",
-      "id": "ImportInstanceRequest",
-      "properties": {
-        "inputConfig": {
-          "description": "Required. Specify data to be imported.",
-          "$ref": "InputConfig"
-        }
-      },
-      "type": "object"
-    },
-    "GcsDestination": {
-      "id": "GcsDestination",
-      "type": "object",
-      "description": "The Cloud Storage location for the output content",
-      "properties": {
-        "uri": {
-          "description": "Required. Data destination URI (e.g. 'gs://my_bucket/my_object'). Existing files will be overwritten.",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleCloudRedisV1beta1LocationMetadata": {
-      "properties": {
-        "availableZones": {
-          "description": "Output only. The set of available zones in the location. The map is keyed by the lowercase ID of each zone, as defined by GCE. These keys can be specified in `location_id` or `alternative_location_id` fields when creating a Redis instance.",
-          "readOnly": true,
-          "type": "object",
-          "additionalProperties": {
-            "$ref": "GoogleCloudRedisV1beta1ZoneMetadata"
-          }
-        }
-      },
-      "id": "GoogleCloudRedisV1beta1LocationMetadata",
-      "type": "object",
-      "description": "This location metadata represents additional configuration options for a given location where a Redis instance may be created. All fields are output only. It is returned as content of the `google.cloud.location.Location.metadata` field."
-    }
-  },
-  "version": "v1beta1",
-  "ownerDomain": "google.com",
-  "description": "Creates and manages Redis instances on the Google Cloud Platform.",
-  "protocol": "rest",
-  "ownerName": "Google",
-  "resources": {
-    "projects": {
-      "resources": {
-        "locations": {
-          "resources": {
-            "instances": {
-              "methods": {
-                "patch": {
-                  "path": "v1beta1/{+name}",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "description": "Updates the metadata and configuration of a specific Redis instance. Completed longrunning.Operation will contain the new instance object in the response field. The returned operation is automatically deleted after a few hours, so there is no need to call DeleteOperation.",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "description": "Required. Unique name of the resource in this scope including project and location using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` Note: Redis instances are managed and addressed at regional level so location_id here refers to a GCP region; however, users may choose which specific zone (or collection of zones for cross-zone instances) an instance should be provisioned in. Refer to location_id and alternative_location_id fields for more details.",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
-                      "location": "path",
-                      "required": true
-                    },
-                    "updateMask": {
-                      "description": "Required. Mask of fields to update. At least one path must be supplied in this field. The elements of the repeated paths field may only include these fields from Instance: * `displayName` * `labels` * `memorySizeGb` * `redisConfig`",
-                      "location": "query",
-                      "format": "google-fieldmask",
-                      "type": "string"
-                    }
-                  },
-                  "httpMethod": "PATCH",
-                  "id": "redis.projects.locations.instances.patch",
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}",
-                  "request": {
-                    "$ref": "Instance"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ]
-                },
-                "export": {
-                  "request": {
-                    "$ref": "ExportInstanceRequest"
-                  },
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "location": "path",
-                      "type": "string",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
-                      "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region."
-                    }
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "description": "Export Redis instance data into a Redis RDB format file in Cloud Storage. Redis will continue serving during this operation. The returned operation is automatically deleted after a few hours, so there is no need to call DeleteOperation.",
-                  "httpMethod": "POST",
-                  "id": "redis.projects.locations.instances.export",
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}:export",
-                  "path": "v1beta1/{+name}:export"
-                },
-                "getAuthString": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "description": "Gets the AUTH string for a Redis instance. If AUTH is not enabled for the instance the response will be empty. This information is not included in the details returned to GetInstance.",
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "InstanceAuthString"
-                  },
-                  "id": "redis.projects.locations.instances.getAuthString",
-                  "path": "v1beta1/{+name}/authString",
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "location": "path",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
-                      "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region."
-                    }
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}/authString"
-                },
-                "import": {
-                  "parameters": {
-                    "name": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
-                      "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
-                      "required": true,
-                      "location": "path",
-                      "type": "string"
-                    }
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}:import",
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "path": "v1beta1/{+name}:import",
-                  "description": "Import a Redis RDB snapshot file from Cloud Storage into a Redis instance. Redis may stop serving during this operation. Instance state will be IMPORTING for entire operation. When complete, the instance will contain only data from the imported file. The returned operation is automatically deleted after a few hours, so there is no need to call DeleteOperation.",
-                  "id": "redis.projects.locations.instances.import",
-                  "request": {
-                    "$ref": "ImportInstanceRequest"
-                  }
-                },
-                "create": {
-                  "parameters": {
-                    "instanceId": {
-                      "description": "Required. The logical name of the Redis instance in the customer project with the following restrictions: * Must contain only lowercase letters, numbers, and hyphens. * Must start with a letter. * Must be between 1-40 characters. * Must end with a number or a letter. * Must be unique within the customer project / location",
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "parent": {
-                      "description": "Required. The resource name of the instance location using the form: `projects/{project_id}/locations/{location_id}` where `location_id` refers to a GCP region.",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "location": "path"
-                    }
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/instances",
-                  "request": {
-                    "$ref": "Instance"
-                  },
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "description": "Creates a Redis instance based on the specified tier and memory size. By default, the instance is accessible from the project's [default network](https://cloud.google.com/vpc/docs/vpc). The creation is executed asynchronously and callers may check the returned operation to track its progress. Once the operation is completed the Redis instance will be fully functional. Completed longrunning.Operation will contain the new instance object in the response field. The returned operation is automatically deleted after a few hours, so there is no need to call DeleteOperation.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "path": "v1beta1/{+parent}/instances",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "httpMethod": "POST",
-                  "id": "redis.projects.locations.instances.create"
-                },
-                "get": {
-                  "httpMethod": "GET",
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}",
-                  "id": "redis.projects.locations.instances.get",
-                  "response": {
-                    "$ref": "Instance"
-                  },
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
-                      "required": true,
-                      "location": "path"
-                    }
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "path": "v1beta1/{+name}",
-                  "description": "Gets the details of a specific Redis instance."
-                },
-                "upgrade": {
-                  "description": "Upgrades Redis instance to the newer Redis version specified in the request.",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "id": "redis.projects.locations.instances.upgrade",
-                  "parameters": {
-                    "name": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$"
-                    }
-                  },
-                  "httpMethod": "POST",
-                  "request": {
-                    "$ref": "UpgradeInstanceRequest"
-                  },
-                  "path": "v1beta1/{+name}:upgrade",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}:upgrade"
-                },
-                "list": {
-                  "httpMethod": "GET",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "description": "Lists all Redis instances owned by a project in either the specified location (region) or all locations. The location should have the following format: * `projects/{project_id}/locations/{location_id}` If `location_id` is specified as `-` (wildcard), then all regions available to the project are queried, and the results are aggregated.",
-                  "path": "v1beta1/{+parent}/instances",
-                  "parameters": {
-                    "parent": {
-                      "required": true,
-                      "description": "Required. The resource name of the instance location using the form: `projects/{project_id}/locations/{location_id}` where `location_id` refers to a GCP region.",
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "location": "path"
-                    },
-                    "pageToken": {
-                      "location": "query",
-                      "type": "string",
-                      "description": "The `next_page_token` value returned from a previous ListInstances request, if any."
-                    },
-                    "pageSize": {
-                      "description": "The maximum number of items to return. If not specified, a default value of 1000 will be used by the service. Regardless of the page_size value, the response may include a partial list and a caller should only rely on response's `next_page_token` to determine if there are more instances left to be queried.",
-                      "location": "query",
-                      "format": "int32",
-                      "type": "integer"
-                    }
-                  },
-                  "id": "redis.projects.locations.instances.list",
-                  "response": {
-                    "$ref": "ListInstancesResponse"
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/instances",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ]
-                },
-                "failover": {
-                  "httpMethod": "POST",
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}:failover",
-                  "parameters": {
-                    "name": {
-                      "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
-                      "required": true,
-                      "location": "path",
-                      "type": "string"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "path": "v1beta1/{+name}:failover",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "request": {
-                    "$ref": "FailoverInstanceRequest"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "id": "redis.projects.locations.instances.failover",
-                  "description": "Initiates a failover of the primary node to current replica node for a specific STANDARD tier Cloud Memorystore for Redis instance."
-                },
-                "delete": {
-                  "parameters": {
-                    "name": {
-                      "description": "Required. Redis instance resource name using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` where `location_id` refers to a GCP region.",
-                      "type": "string",
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/instances/[^/]+$",
-                      "required": true
-                    }
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/instances/{instancesId}",
-                  "path": "v1beta1/{+name}",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "id": "redis.projects.locations.instances.delete",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "description": "Deletes a specific Redis instance. Instance stops serving and data is deleted.",
-                  "httpMethod": "DELETE"
+        "FailoverInstanceRequest": {
+            "description": "Request for Failover.",
+            "id": "FailoverInstanceRequest",
+            "properties": {
+                "dataProtectionMode": {
+                    "description": "Optional. Available data protection modes that the user can choose. If it's unspecified, data protection mode will be LIMITED_DATA_LOSS by default.",
+                    "enum": [
+                        "DATA_PROTECTION_MODE_UNSPECIFIED",
+                        "LIMITED_DATA_LOSS",
+                        "FORCE_DATA_LOSS"
+                    ],
+                    "enumDescriptions": [
+                        "Defaults to LIMITED_DATA_LOSS if a data protection mode is not specified.",
+                        "Instance failover will be protected with data loss control. More specifically, the failover will only be performed if the current replication offset diff between primary and replica is under a certain threshold.",
+                        "Instance failover will be performed without data loss control."
+                    ],
+                    "type": "string"
                 }
-              }
             },
-            "operations": {
-              "methods": {
-                "get": {
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
-                  "path": "v1beta1/{+name}",
-                  "parameters": {
-                    "name": {
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
-                      "description": "The name of the operation resource.",
-                      "type": "string",
-                      "required": true
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "httpMethod": "GET",
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "id": "redis.projects.locations.operations.get"
-                },
-                "delete": {
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
-                  "path": "v1beta1/{+name}",
-                  "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.",
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "httpMethod": "DELETE",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
-                      "description": "The name of the operation resource to be deleted.",
-                      "type": "string",
-                      "required": true,
-                      "location": "path"
-                    }
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "id": "redis.projects.locations.operations.delete"
-                },
-                "cancel": {
-                  "path": "v1beta1/{+name}:cancel",
-                  "httpMethod": "POST",
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "parameters": {
-                    "name": {
-                      "required": true,
-                      "location": "path",
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
-                      "description": "The name of the operation resource to be cancelled."
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "id": "redis.projects.locations.operations.cancel",
-                  "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}:cancel"
-                },
-                "list": {
-                  "path": "v1beta1/{+name}/operations",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
-                  "response": {
-                    "$ref": "ListOperationsResponse"
-                  },
-                  "id": "redis.projects.locations.operations.list",
-                  "parameters": {
-                    "pageToken": {
-                      "description": "The standard list page token.",
-                      "location": "query",
-                      "type": "string"
-                    },
-                    "filter": {
-                      "description": "The standard list filter.",
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "name": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "type": "string",
-                      "description": "The name of the operation's parent resource.",
-                      "required": true,
-                      "location": "path"
-                    },
-                    "pageSize": {
-                      "location": "query",
-                      "format": "int32",
-                      "description": "The standard list page size.",
-                      "type": "integer"
-                    }
-                  },
-                  "httpMethod": "GET",
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/operations"
+            "type": "object"
+        },
+        "GcsDestination": {
+            "description": "The Cloud Storage location for the output content",
+            "id": "GcsDestination",
+            "properties": {
+                "uri": {
+                    "description": "Required. Data destination URI (e.g. 'gs://my_bucket/my_object'). Existing files will be overwritten.",
+                    "type": "string"
                 }
-              }
-            }
-          },
-          "methods": {
-            "list": {
-              "parameterOrder": [
-                "name"
-              ],
-              "id": "redis.projects.locations.list",
-              "path": "v1beta1/{+name}/locations",
-              "response": {
-                "$ref": "ListLocationsResponse"
-              },
-              "flatPath": "v1beta1/projects/{projectsId}/locations",
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "pageSize": {
-                  "description": "The standard list page size.",
-                  "format": "int32",
-                  "location": "query",
-                  "type": "integer"
+            },
+            "type": "object"
+        },
+        "GcsSource": {
+            "description": "The Cloud Storage location for the input content",
+            "id": "GcsSource",
+            "properties": {
+                "uri": {
+                    "description": "Required. Source data URI. (e.g. 'gs://my_bucket/my_object').",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudCommonOperationMetadata": {
+            "description": "Represents the metadata of the long-running operation.",
+            "id": "GoogleCloudCommonOperationMetadata",
+            "properties": {
+                "apiVersion": {
+                    "description": "[Output only] API version used to start the operation.",
+                    "type": "string"
                 },
-                "pageToken": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "The standard list page token."
+                "cancelRequested": {
+                    "description": "[Output only] Identifies whether the user has requested cancellation of the operation. Operations that have successfully been cancelled have Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.",
+                    "type": "boolean"
+                },
+                "createTime": {
+                    "description": "[Output only] The time the operation was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "endTime": {
+                    "description": "[Output only] The time the operation finished running.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "statusDetail": {
+                    "description": "[Output only] Human-readable status of the operation, if any.",
+                    "type": "string"
+                },
+                "target": {
+                    "description": "[Output only] Server-defined resource path for the target of the operation.",
+                    "type": "string"
+                },
+                "verb": {
+                    "description": "[Output only] Name of the verb executed by the operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRedisV1beta1LocationMetadata": {
+            "description": "This location metadata represents additional configuration options for a given location where a Redis instance may be created. All fields are output only. It is returned as content of the `google.cloud.location.Location.metadata` field.",
+            "id": "GoogleCloudRedisV1beta1LocationMetadata",
+            "properties": {
+                "availableZones": {
+                    "additionalProperties": {
+                        "$ref": "GoogleCloudRedisV1beta1ZoneMetadata"
+                    },
+                    "description": "Output only. The set of available zones in the location. The map is keyed by the lowercase ID of each zone, as defined by GCE. These keys can be specified in `location_id` or `alternative_location_id` fields when creating a Redis instance.",
+                    "readOnly": true,
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleCloudRedisV1beta1ZoneMetadata": {
+            "description": "Defines specific information for a particular zone. Currently empty and reserved for future use only.",
+            "id": "GoogleCloudRedisV1beta1ZoneMetadata",
+            "properties": {},
+            "type": "object"
+        },
+        "ImportInstanceRequest": {
+            "description": "Request for Import.",
+            "id": "ImportInstanceRequest",
+            "properties": {
+                "inputConfig": {
+                    "$ref": "InputConfig",
+                    "description": "Required. Specify data to be imported."
+                }
+            },
+            "type": "object"
+        },
+        "InputConfig": {
+            "description": "The input content",
+            "id": "InputConfig",
+            "properties": {
+                "gcsSource": {
+                    "$ref": "GcsSource",
+                    "description": "Google Cloud Storage location where input content is located."
+                }
+            },
+            "type": "object"
+        },
+        "Instance": {
+            "description": "A Google Cloud Redis instance.",
+            "id": "Instance",
+            "properties": {
+                "alternativeLocationId": {
+                    "description": "Optional. Only applicable to STANDARD_HA tier which protects the instance against zonal failures by provisioning it across two zones. If provided, it must be a different zone from the one provided in location_id.",
+                    "type": "string"
+                },
+                "authEnabled": {
+                    "description": "Optional. Indicates whether OSS Redis AUTH is enabled for the instance. If set to \"true\" AUTH is enabled on the instance. Default value is \"false\" meaning AUTH is disabled.",
+                    "type": "boolean"
+                },
+                "authorizedNetwork": {
+                    "description": "Optional. The full name of the Google Compute Engine [network](https://cloud.google.com/vpc/docs/vpc) to which the instance is connected. If left unspecified, the `default` network will be used.",
+                    "type": "string"
+                },
+                "connectMode": {
+                    "description": "Optional. The network connect mode of the Redis instance. If not provided, the connect mode defaults to DIRECT_PEERING.",
+                    "enum": [
+                        "CONNECT_MODE_UNSPECIFIED",
+                        "DIRECT_PEERING",
+                        "PRIVATE_SERVICE_ACCESS"
+                    ],
+                    "enumDescriptions": [
+                        "Not set.",
+                        "Connect via direct peering to the Memorystore for Redis hosted service.",
+                        "Connect your Memorystore for Redis instance using Private Services Access. Private services access provides an IP address range for multiple Google Cloud services, including Memorystore."
+                    ],
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "Output only. The time the instance was created.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "currentLocationId": {
+                    "description": "Output only. The current zone where the Redis endpoint is placed. For Basic Tier instances, this will always be the same as the location_id provided by the user at creation time. For Standard Tier instances, this can be either location_id or alternative_location_id and can change after a failover event.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "An arbitrary and optional user-provided name for the instance.",
+                    "type": "string"
+                },
+                "host": {
+                    "description": "Output only. Hostname or IP address of the exposed Redis endpoint used by clients to connect to the service.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Resource labels to represent user provided metadata",
+                    "type": "object"
+                },
+                "locationId": {
+                    "description": "Optional. The zone where the instance will be provisioned. If not provided, the service will choose a zone for the instance. For STANDARD_HA tier, instances will be created across two zones for protection against zonal failures. If alternative_location_id is also provided, it must be different from location_id.",
+                    "type": "string"
+                },
+                "memorySizeGb": {
+                    "description": "Required. Redis memory size in GiB.",
+                    "format": "int32",
+                    "type": "integer"
                 },
                 "name": {
-                  "description": "The resource that owns the locations collection, if applicable.",
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "required": true,
-                  "location": "path"
+                    "description": "Required. Unique name of the resource in this scope including project and location using the form: `projects/{project_id}/locations/{location_id}/instances/{instance_id}` Note: Redis instances are managed and addressed at regional level so location_id here refers to a GCP region; however, users may choose which specific zone (or collection of zones for cross-zone instances) an instance should be provisioned in. Refer to location_id and alternative_location_id fields for more details.",
+                    "type": "string"
                 },
-                "filter": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "The standard list filter."
+                "persistenceIamIdentity": {
+                    "description": "Output only. Cloud IAM identity used by import / export operations to transfer data to/from Cloud Storage. Format is \"serviceAccount:\". The value may change over time for a given instance so should be checked before each import/export operation.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "port": {
+                    "description": "Output only. The port number of the exposed Redis endpoint.",
+                    "format": "int32",
+                    "readOnly": true,
+                    "type": "integer"
+                },
+                "redisConfigs": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Optional. Redis configuration parameters, according to http://redis.io/topics/config. Currently, the only supported parameters are: Redis version 3.2 and newer: * maxmemory-policy * notify-keyspace-events Redis version 4.0 and newer: * activedefrag * lfu-decay-time * lfu-log-factor * maxmemory-gb Redis version 5.0 and newer: * stream-node-max-bytes * stream-node-max-entries",
+                    "type": "object"
+                },
+                "redisVersion": {
+                    "description": "Optional. The version of Redis software. If not provided, latest supported version will be used. Currently, the supported values are: * `REDIS_3_2` for Redis 3.2 compatibility * `REDIS_4_0` for Redis 4.0 compatibility (default) * `REDIS_5_0` for Redis 5.0 compatibility",
+                    "type": "string"
+                },
+                "reservedIpRange": {
+                    "description": "Optional. The CIDR range of internal addresses that are reserved for this instance. If not provided, the service will choose an unused /29 block, for example, 10.0.0.0/29 or 192.168.0.0/29. Ranges must be unique and non-overlapping with existing subnets in an authorized network.",
+                    "type": "string"
+                },
+                "serverCaCerts": {
+                    "description": "Output only. List of server CA certificates for the instance.",
+                    "items": {
+                        "$ref": "TlsCertificate"
+                    },
+                    "readOnly": true,
+                    "type": "array"
+                },
+                "state": {
+                    "description": "Output only. The current state of this instance.",
+                    "enum": [
+                        "STATE_UNSPECIFIED",
+                        "CREATING",
+                        "READY",
+                        "UPDATING",
+                        "DELETING",
+                        "REPAIRING",
+                        "MAINTENANCE",
+                        "IMPORTING",
+                        "FAILING_OVER"
+                    ],
+                    "enumDescriptions": [
+                        "Not set.",
+                        "Redis instance is being created.",
+                        "Redis instance has been created and is fully usable.",
+                        "Redis instance configuration is being updated. Certain kinds of updates may cause the instance to become unusable while the update is in progress.",
+                        "Redis instance is being deleted.",
+                        "Redis instance is being repaired and may be unusable.",
+                        "Maintenance is being performed on this Redis instance.",
+                        "Redis instance is importing data (availability may be affected).",
+                        "Redis instance is failing over (availability may be affected)."
+                    ],
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "statusMessage": {
+                    "description": "Output only. Additional information about the current status of this instance, if available.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "tier": {
+                    "description": "Required. The service tier of the instance.",
+                    "enum": [
+                        "TIER_UNSPECIFIED",
+                        "BASIC",
+                        "STANDARD_HA"
+                    ],
+                    "enumDescriptions": [
+                        "Not set.",
+                        "BASIC tier: standalone instance",
+                        "STANDARD_HA tier: highly available primary/replica instances"
+                    ],
+                    "type": "string"
+                },
+                "transitEncryptionMode": {
+                    "description": "Optional. The TLS mode of the Redis instance. If not provided, TLS is disabled for the instance.",
+                    "enum": [
+                        "TRANSIT_ENCRYPTION_MODE_UNSPECIFIED",
+                        "SERVER_AUTHENTICATION",
+                        "DISABLED"
+                    ],
+                    "enumDescriptions": [
+                        "Not set.",
+                        "Client to Server traffic encryption enabled with server authentication.",
+                        "TLS is disabled for the instance."
+                    ],
+                    "type": "string"
                 }
-              },
-              "description": "Lists information about the supported locations for this service."
             },
-            "get": {
-              "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "id": "redis.projects.locations.get",
-              "response": {
-                "$ref": "Location"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET",
-              "description": "Gets information about a location.",
-              "path": "v1beta1/{+name}",
-              "parameters": {
-                "name": {
-                  "description": "Resource name for the location.",
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/locations/[^/]+$",
-                  "required": true,
-                  "location": "path"
+            "type": "object"
+        },
+        "InstanceAuthString": {
+            "description": "Instance AUTH string details.",
+            "id": "InstanceAuthString",
+            "properties": {
+                "authString": {
+                    "description": "AUTH string set on the instance.",
+                    "type": "string"
                 }
-              }
-            }
-          }
+            },
+            "type": "object"
+        },
+        "ListInstancesResponse": {
+            "description": "Response for ListInstances.",
+            "id": "ListInstancesResponse",
+            "properties": {
+                "instances": {
+                    "description": "A list of Redis instances in the project in the specified location, or across all locations. If the `location_id` in the parent field of the request is \"-\", all regions available to the project are queried, and the results aggregated. If in such an aggregated query a location is unavailable, a placeholder Redis entry is included in the response with the `name` field set to a value of the form `projects/{project_id}/locations/{location_id}/instances/`- and the `status` field set to ERROR and `status_message` field set to \"location not available for ListInstances\".",
+                    "items": {
+                        "$ref": "Instance"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Token to retrieve the next page of results, or empty if there are no more results in the list.",
+                    "type": "string"
+                },
+                "unreachable": {
+                    "description": "Locations that could not be reached.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListLocationsResponse": {
+            "description": "The response message for Locations.ListLocations.",
+            "id": "ListLocationsResponse",
+            "properties": {
+                "locations": {
+                    "description": "A list of locations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Location"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListOperationsResponse": {
+            "description": "The response message for Operations.ListOperations.",
+            "id": "ListOperationsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                },
+                "operations": {
+                    "description": "A list of operations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Operation"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Location": {
+            "description": "A resource that represents Google Cloud Platform location.",
+            "id": "Location",
+            "properties": {
+                "displayName": {
+                    "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\".",
+                    "type": "string"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}",
+                    "type": "object"
+                },
+                "locationId": {
+                    "description": "Resource ID for the region. For example: \"us-east1\".",
+                    "type": "string"
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Output only. The set of available zones in the location. The map is keyed by the lowercase ID of each zone, as defined by Compute Engine. These keys can be specified in `location_id` or `alternative_location_id` fields when creating a Redis instance.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "Full resource name for the region. For example: \"projects/example-project/locations/us-east1\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Operation": {
+            "description": "This resource represents a long-running operation that is the result of a network API call.",
+            "id": "Operation",
+            "properties": {
+                "done": {
+                    "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
+                    "type": "boolean"
+                },
+                "error": {
+                    "$ref": "Status",
+                    "description": "The error result of the operation in case of failure or cancellation."
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "{ `createTime`: The time the operation was created. `endTime`: The time the operation finished running. `target`: Server-defined resource path for the target of the operation. `verb`: Name of the verb executed by the operation. `statusDetail`: Human-readable status of the operation, if any. `cancelRequested`: Identifies whether the user has requested cancellation of the operation. Operations that have successfully been cancelled have Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`. `apiVersion`: API version used to start the operation. }",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
+                    "type": "string"
+                },
+                "response": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "OutputConfig": {
+            "description": "The output content",
+            "id": "OutputConfig",
+            "properties": {
+                "gcsDestination": {
+                    "$ref": "GcsDestination",
+                    "description": "Google Cloud Storage destination for output content."
+                }
+            },
+            "type": "object"
+        },
+        "Status": {
+            "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
+            "id": "Status",
+            "properties": {
+                "code": {
+                    "description": "The status code, which should be an enum value of google.rpc.Code.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TlsCertificate": {
+            "description": "TlsCertificate Resource",
+            "id": "TlsCertificate",
+            "properties": {
+                "cert": {
+                    "description": "PEM representation.",
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "Output only. The time when the certificate was created in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, for example `2020-05-18T00:00:00.094Z`.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "expireTime": {
+                    "description": "Output only. The time when the certificate expires in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, for example `2020-05-18T00:00:00.094Z`.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "serialNumber": {
+                    "description": "Serial number, as extracted from the certificate.",
+                    "type": "string"
+                },
+                "sha1Fingerprint": {
+                    "description": "Sha1 Fingerprint of the certificate.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UpgradeInstanceRequest": {
+            "description": "Request for UpgradeInstance.",
+            "id": "UpgradeInstanceRequest",
+            "properties": {
+                "redisVersion": {
+                    "description": "Required. Specifies the target version of Redis software to upgrade to.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         }
-      }
-    }
-  }
-}
+    },
+    "servicePath": "",
+    "title": "Google Cloud Memorystore for Redis API",
+    "version": "v1beta1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/script.v1.json b/googleapiclient/discovery_cache/documents/script.v1.json
index 9a8d474..3cea158 100644
--- a/googleapiclient/discovery_cache/documents/script.v1.json
+++ b/googleapiclient/discovery_cache/documents/script.v1.json
@@ -1,1773 +1,1773 @@
 {
-  "basePath": "",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/groups": {
-          "description": "View and manage your Google Groups"
-        },
-        "https://www.googleapis.com/auth/forms.currentonly": {
-          "description": "View and manage forms that this application has been installed in"
-        },
-        "https://www.googleapis.com/auth/script.projects": {
-          "description": "Create and update Google Apps Script projects"
-        },
-        "https://www.googleapis.com/auth/script.projects.readonly": {
-          "description": "View Google Apps Script projects"
-        },
-        "https://www.googleapis.com/auth/spreadsheets": {
-          "description": "See, edit, create, and delete your spreadsheets in Google Drive"
-        },
-        "https://www.googleapis.com/auth/drive": {
-          "description": "See, edit, create, and delete all of your Google Drive files"
-        },
-        "https://www.googleapis.com/auth/documents": {
-          "description": "View and manage your Google Docs documents"
-        },
-        "https://www.googleapis.com/auth/script.metrics": {
-          "description": "View Google Apps Script project's metrics"
-        },
-        "https://www.googleapis.com/auth/admin.directory.user": {
-          "description": "View and manage the provisioning of users on your domain"
-        },
-        "https://www.googleapis.com/auth/script.processes": {
-          "description": "View Google Apps Script processes"
-        },
-        "https://www.googleapis.com/auth/userinfo.email": {
-          "description": "View your email address"
-        },
-        "https://www.googleapis.com/auth/forms": {
-          "description": "View and manage your forms in Google Drive"
-        },
-        "https://www.google.com/m8/feeds": {
-          "description": "See, edit, download, and permanently delete your contacts"
-        },
-        "https://www.google.com/calendar/feeds": {
-          "description": "See, edit, share, and permanently delete all the calendars you can access using Google Calendar"
-        },
-        "https://www.googleapis.com/auth/script.deployments.readonly": {
-          "description": "View Google Apps Script deployments"
-        },
-        "https://www.googleapis.com/auth/admin.directory.group": {
-          "description": "View and manage the provisioning of groups on your domain"
-        },
-        "https://mail.google.com/": {
-          "description": "Read, compose, send, and permanently delete all your email from Gmail"
-        },
-        "https://www.googleapis.com/auth/script.deployments": {
-          "description": "Create and update Google Apps Script deployments"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://mail.google.com/": {
+                    "description": "Read, compose, send, and permanently delete all your email from Gmail"
+                },
+                "https://www.google.com/calendar/feeds": {
+                    "description": "See, edit, share, and permanently delete all the calendars you can access using Google Calendar"
+                },
+                "https://www.google.com/m8/feeds": {
+                    "description": "See, edit, download, and permanently delete your contacts"
+                },
+                "https://www.googleapis.com/auth/admin.directory.group": {
+                    "description": "View and manage the provisioning of groups on your domain"
+                },
+                "https://www.googleapis.com/auth/admin.directory.user": {
+                    "description": "View and manage the provisioning of users on your domain"
+                },
+                "https://www.googleapis.com/auth/documents": {
+                    "description": "See, create, and edit all Google Docs documents you have access to"
+                },
+                "https://www.googleapis.com/auth/drive": {
+                    "description": "See, edit, create, and delete all of your Google Drive files"
+                },
+                "https://www.googleapis.com/auth/forms": {
+                    "description": "View and manage your forms in Google Drive"
+                },
+                "https://www.googleapis.com/auth/forms.currentonly": {
+                    "description": "View and manage forms that this application has been installed in"
+                },
+                "https://www.googleapis.com/auth/groups": {
+                    "description": "View and manage your Google Groups"
+                },
+                "https://www.googleapis.com/auth/script.deployments": {
+                    "description": "Create and update Google Apps Script deployments"
+                },
+                "https://www.googleapis.com/auth/script.deployments.readonly": {
+                    "description": "View Google Apps Script deployments"
+                },
+                "https://www.googleapis.com/auth/script.metrics": {
+                    "description": "View Google Apps Script project's metrics"
+                },
+                "https://www.googleapis.com/auth/script.processes": {
+                    "description": "View Google Apps Script processes"
+                },
+                "https://www.googleapis.com/auth/script.projects": {
+                    "description": "Create and update Google Apps Script projects"
+                },
+                "https://www.googleapis.com/auth/script.projects.readonly": {
+                    "description": "View Google Apps Script projects"
+                },
+                "https://www.googleapis.com/auth/spreadsheets": {
+                    "description": "See, edit, create, and delete your spreadsheets in Google Drive"
+                },
+                "https://www.googleapis.com/auth/userinfo.email": {
+                    "description": "View your email address"
+                }
+            }
         }
-      }
-    }
-  },
-  "fullyEncodeReservedExpansion": true,
-  "name": "script",
-  "revision": "20200811",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "version": "v1",
-  "baseUrl": "https://script.googleapis.com/",
-  "ownerDomain": "google.com",
-  "servicePath": "",
-  "rootUrl": "https://script.googleapis.com/",
-  "schemas": {
-    "GoogleAppsScriptTypeWebAppConfig": {
-      "id": "GoogleAppsScriptTypeWebAppConfig",
-      "description": "Web app entry point configuration.",
-      "properties": {
-        "access": {
-          "type": "string",
-          "enumDescriptions": [
-            "Default value, should not be used.",
-            "Only the user who deployed the web app or executable can access it. Note that this is not necessarily the owner of the script project.",
-            "Only users in the same domain as the user who deployed the web app or executable can access it.",
-            "Any logged in user can access the web app or executable.",
-            "Any user, logged in or not, can access the web app or executable."
-          ],
-          "description": "Who has permission to run the web app.",
-          "enum": [
-            "UNKNOWN_ACCESS",
-            "MYSELF",
-            "DOMAIN",
-            "ANYONE",
-            "ANYONE_ANONYMOUS"
-          ]
+    },
+    "basePath": "",
+    "baseUrl": "https://script.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Script",
+    "description": "Manages and executes Google Apps Script projects. ",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://developers.google.com/apps-script/api/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "script:v1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://script.mtls.googleapis.com/",
+    "name": "script",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "executeAs": {
-          "enum": [
-            "UNKNOWN_EXECUTE_AS",
-            "USER_ACCESSING",
-            "USER_DEPLOYING"
-          ],
-          "enumDescriptions": [
-            "Default value, should not be used.",
-            "The script runs as the user accessing the web app.",
-            "The script runs as the user who deployed the web app. Note that this is not necessarily the owner of the script project."
-          ],
-          "description": "Who to execute the web app as.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "GoogleAppsScriptTypeWebAppEntryPoint": {
-      "properties": {
-        "url": {
-          "type": "string",
-          "description": "The URL for the web application."
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
         },
-        "entryPointConfig": {
-          "description": "The entry point's configuration.",
-          "$ref": "GoogleAppsScriptTypeWebAppConfig"
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      },
-      "description": "A web application entry point.",
-      "id": "GoogleAppsScriptTypeWebAppEntryPoint",
-      "type": "object"
     },
-    "Empty": {
-      "properties": {},
-      "type": "object",
-      "id": "Empty",
-      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`."
+    "protocol": "rest",
+    "resources": {
+        "processes": {
+            "methods": {
+                "list": {
+                    "description": "List information about processes made by or on behalf of a user, such as process type and current status.",
+                    "flatPath": "v1/processes",
+                    "httpMethod": "GET",
+                    "id": "script.processes.list",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "pageSize": {
+                            "description": "The maximum number of returned processes per page of results. Defaults to 50.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The token for continuing a previous list request on the next page. This should be set to the value of `nextPageToken` from a previous response.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "userProcessFilter.deploymentId": {
+                            "description": "Optional field used to limit returned processes to those originating from projects with a specific deployment ID.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "userProcessFilter.endTime": {
+                            "description": "Optional field used to limit returned processes to those that completed on or before the given timestamp.",
+                            "format": "google-datetime",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "userProcessFilter.functionName": {
+                            "description": "Optional field used to limit returned processes to those originating from a script function with the given function name.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "userProcessFilter.projectName": {
+                            "description": "Optional field used to limit returned processes to those originating from projects with project names containing a specific string.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "userProcessFilter.scriptId": {
+                            "description": "Optional field used to limit returned processes to those originating from projects with a specific script ID.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "userProcessFilter.startTime": {
+                            "description": "Optional field used to limit returned processes to those that were started on or after the given timestamp.",
+                            "format": "google-datetime",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "userProcessFilter.statuses": {
+                            "description": "Optional field used to limit returned processes to those having one of the specified process statuses.",
+                            "enum": [
+                                "PROCESS_STATUS_UNSPECIFIED",
+                                "RUNNING",
+                                "PAUSED",
+                                "COMPLETED",
+                                "CANCELED",
+                                "FAILED",
+                                "TIMED_OUT",
+                                "UNKNOWN",
+                                "DELAYED"
+                            ],
+                            "enumDescriptions": [
+                                "Unspecified status.",
+                                "The process is currently running.",
+                                "The process has paused.",
+                                "The process has completed.",
+                                "The process was cancelled.",
+                                "The process failed.",
+                                "The process timed out.",
+                                "Process status unknown.",
+                                "The process is delayed, waiting for quota."
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "userProcessFilter.types": {
+                            "description": "Optional field used to limit returned processes to those having one of the specified process types.",
+                            "enum": [
+                                "PROCESS_TYPE_UNSPECIFIED",
+                                "ADD_ON",
+                                "EXECUTION_API",
+                                "TIME_DRIVEN",
+                                "TRIGGER",
+                                "WEBAPP",
+                                "EDITOR",
+                                "SIMPLE_TRIGGER",
+                                "MENU",
+                                "BATCH_TASK"
+                            ],
+                            "enumDescriptions": [
+                                "Unspecified type.",
+                                "The process was started from an add-on entry point.",
+                                "The process was started using the Apps Script API.",
+                                "The process was started from a time-based trigger.",
+                                "The process was started from an event-based trigger.",
+                                "The process was started from a web app entry point.",
+                                "The process was started using the Apps Script IDE.",
+                                "The process was started from a G Suite simple trigger.",
+                                "The process was started from a G Suite menu item.",
+                                "The process was started as a task in a batch job."
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "userProcessFilter.userAccessLevels": {
+                            "description": "Optional field used to limit returned processes to those having one of the specified user access levels.",
+                            "enum": [
+                                "USER_ACCESS_LEVEL_UNSPECIFIED",
+                                "NONE",
+                                "READ",
+                                "WRITE",
+                                "OWNER"
+                            ],
+                            "enumDescriptions": [
+                                "User access level unspecified",
+                                "The user has no access.",
+                                "The user has read-only access.",
+                                "The user has write access.",
+                                "The user is an owner."
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/processes",
+                    "response": {
+                        "$ref": "ListUserProcessesResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/script.processes"
+                    ]
+                },
+                "listScriptProcesses": {
+                    "description": "List information about a script's executed processes, such as process type and current status.",
+                    "flatPath": "v1/processes:listScriptProcesses",
+                    "httpMethod": "GET",
+                    "id": "script.processes.listScriptProcesses",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "pageSize": {
+                            "description": "The maximum number of returned processes per page of results. Defaults to 50.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The token for continuing a previous list request on the next page. This should be set to the value of `nextPageToken` from a previous response.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "scriptId": {
+                            "description": "The script ID of the project whose processes are listed.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "scriptProcessFilter.deploymentId": {
+                            "description": "Optional field used to limit returned processes to those originating from projects with a specific deployment ID.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "scriptProcessFilter.endTime": {
+                            "description": "Optional field used to limit returned processes to those that completed on or before the given timestamp.",
+                            "format": "google-datetime",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "scriptProcessFilter.functionName": {
+                            "description": "Optional field used to limit returned processes to those originating from a script function with the given function name.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "scriptProcessFilter.startTime": {
+                            "description": "Optional field used to limit returned processes to those that were started on or after the given timestamp.",
+                            "format": "google-datetime",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "scriptProcessFilter.statuses": {
+                            "description": "Optional field used to limit returned processes to those having one of the specified process statuses.",
+                            "enum": [
+                                "PROCESS_STATUS_UNSPECIFIED",
+                                "RUNNING",
+                                "PAUSED",
+                                "COMPLETED",
+                                "CANCELED",
+                                "FAILED",
+                                "TIMED_OUT",
+                                "UNKNOWN",
+                                "DELAYED"
+                            ],
+                            "enumDescriptions": [
+                                "Unspecified status.",
+                                "The process is currently running.",
+                                "The process has paused.",
+                                "The process has completed.",
+                                "The process was cancelled.",
+                                "The process failed.",
+                                "The process timed out.",
+                                "Process status unknown.",
+                                "The process is delayed, waiting for quota."
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "scriptProcessFilter.types": {
+                            "description": "Optional field used to limit returned processes to those having one of the specified process types.",
+                            "enum": [
+                                "PROCESS_TYPE_UNSPECIFIED",
+                                "ADD_ON",
+                                "EXECUTION_API",
+                                "TIME_DRIVEN",
+                                "TRIGGER",
+                                "WEBAPP",
+                                "EDITOR",
+                                "SIMPLE_TRIGGER",
+                                "MENU",
+                                "BATCH_TASK"
+                            ],
+                            "enumDescriptions": [
+                                "Unspecified type.",
+                                "The process was started from an add-on entry point.",
+                                "The process was started using the Apps Script API.",
+                                "The process was started from a time-based trigger.",
+                                "The process was started from an event-based trigger.",
+                                "The process was started from a web app entry point.",
+                                "The process was started using the Apps Script IDE.",
+                                "The process was started from a G Suite simple trigger.",
+                                "The process was started from a G Suite menu item.",
+                                "The process was started as a task in a batch job."
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "scriptProcessFilter.userAccessLevels": {
+                            "description": "Optional field used to limit returned processes to those having one of the specified user access levels.",
+                            "enum": [
+                                "USER_ACCESS_LEVEL_UNSPECIFIED",
+                                "NONE",
+                                "READ",
+                                "WRITE",
+                                "OWNER"
+                            ],
+                            "enumDescriptions": [
+                                "User access level unspecified",
+                                "The user has no access.",
+                                "The user has read-only access.",
+                                "The user has write access.",
+                                "The user is an owner."
+                            ],
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/processes:listScriptProcesses",
+                    "response": {
+                        "$ref": "ListScriptProcessesResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/script.processes"
+                    ]
+                }
+            }
+        },
+        "projects": {
+            "methods": {
+                "create": {
+                    "description": "Creates a new, empty script project with no script files and a base manifest file.",
+                    "flatPath": "v1/projects",
+                    "httpMethod": "POST",
+                    "id": "script.projects.create",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v1/projects",
+                    "request": {
+                        "$ref": "CreateProjectRequest"
+                    },
+                    "response": {
+                        "$ref": "Project"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/script.projects"
+                    ]
+                },
+                "get": {
+                    "description": "Gets a script project's metadata.",
+                    "flatPath": "v1/projects/{scriptId}",
+                    "httpMethod": "GET",
+                    "id": "script.projects.get",
+                    "parameterOrder": [
+                        "scriptId"
+                    ],
+                    "parameters": {
+                        "scriptId": {
+                            "description": "The script project's Drive ID.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/projects/{scriptId}",
+                    "response": {
+                        "$ref": "Project"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/script.projects",
+                        "https://www.googleapis.com/auth/script.projects.readonly"
+                    ]
+                },
+                "getContent": {
+                    "description": "Gets the content of the script project, including the code source and metadata for each script file.",
+                    "flatPath": "v1/projects/{scriptId}/content",
+                    "httpMethod": "GET",
+                    "id": "script.projects.getContent",
+                    "parameterOrder": [
+                        "scriptId"
+                    ],
+                    "parameters": {
+                        "scriptId": {
+                            "description": "The script project's Drive ID.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "versionNumber": {
+                            "description": "The version number of the project to retrieve. If not provided, the project's HEAD version is returned.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        }
+                    },
+                    "path": "v1/projects/{scriptId}/content",
+                    "response": {
+                        "$ref": "Content"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/script.projects",
+                        "https://www.googleapis.com/auth/script.projects.readonly"
+                    ]
+                },
+                "getMetrics": {
+                    "description": "Get metrics data for scripts, such as number of executions and active users.",
+                    "flatPath": "v1/projects/{scriptId}/metrics",
+                    "httpMethod": "GET",
+                    "id": "script.projects.getMetrics",
+                    "parameterOrder": [
+                        "scriptId"
+                    ],
+                    "parameters": {
+                        "metricsFilter.deploymentId": {
+                            "description": "Optional field indicating a specific deployment to retrieve metrics from.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "metricsGranularity": {
+                            "description": "Required field indicating what granularity of metrics are returned.",
+                            "enum": [
+                                "UNSPECIFIED_GRANULARITY",
+                                "WEEKLY",
+                                "DAILY"
+                            ],
+                            "enumDescriptions": [
+                                "Default metric granularity used to query no metrics.",
+                                "Represents weekly metrics.",
+                                "Represents daily metrics over a period of 7 days."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "scriptId": {
+                            "description": "Required field indicating the script to get metrics for.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/projects/{scriptId}/metrics",
+                    "response": {
+                        "$ref": "Metrics"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/script.metrics"
+                    ]
+                },
+                "updateContent": {
+                    "description": "Updates the content of the specified script project. This content is stored as the HEAD version, and is used when the script is executed as a trigger, in the script editor, in add-on preview mode, or as a web app or Apps Script API in development mode. This clears all the existing files in the project.",
+                    "flatPath": "v1/projects/{scriptId}/content",
+                    "httpMethod": "PUT",
+                    "id": "script.projects.updateContent",
+                    "parameterOrder": [
+                        "scriptId"
+                    ],
+                    "parameters": {
+                        "scriptId": {
+                            "description": "The script project's Drive ID.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/projects/{scriptId}/content",
+                    "request": {
+                        "$ref": "Content"
+                    },
+                    "response": {
+                        "$ref": "Content"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/script.projects"
+                    ]
+                }
+            },
+            "resources": {
+                "deployments": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a deployment of an Apps Script project.",
+                            "flatPath": "v1/projects/{scriptId}/deployments",
+                            "httpMethod": "POST",
+                            "id": "script.projects.deployments.create",
+                            "parameterOrder": [
+                                "scriptId"
+                            ],
+                            "parameters": {
+                                "scriptId": {
+                                    "description": "The script project's Drive ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/projects/{scriptId}/deployments",
+                            "request": {
+                                "$ref": "DeploymentConfig"
+                            },
+                            "response": {
+                                "$ref": "Deployment"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/script.deployments"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes a deployment of an Apps Script project.",
+                            "flatPath": "v1/projects/{scriptId}/deployments/{deploymentId}",
+                            "httpMethod": "DELETE",
+                            "id": "script.projects.deployments.delete",
+                            "parameterOrder": [
+                                "scriptId",
+                                "deploymentId"
+                            ],
+                            "parameters": {
+                                "deploymentId": {
+                                    "description": "The deployment ID to be undeployed.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "scriptId": {
+                                    "description": "The script project's Drive ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/projects/{scriptId}/deployments/{deploymentId}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/script.deployments"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets a deployment of an Apps Script project.",
+                            "flatPath": "v1/projects/{scriptId}/deployments/{deploymentId}",
+                            "httpMethod": "GET",
+                            "id": "script.projects.deployments.get",
+                            "parameterOrder": [
+                                "scriptId",
+                                "deploymentId"
+                            ],
+                            "parameters": {
+                                "deploymentId": {
+                                    "description": "The deployment ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "scriptId": {
+                                    "description": "The script project's Drive ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/projects/{scriptId}/deployments/{deploymentId}",
+                            "response": {
+                                "$ref": "Deployment"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/script.deployments",
+                                "https://www.googleapis.com/auth/script.deployments.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists the deployments of an Apps Script project.",
+                            "flatPath": "v1/projects/{scriptId}/deployments",
+                            "httpMethod": "GET",
+                            "id": "script.projects.deployments.list",
+                            "parameterOrder": [
+                                "scriptId"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "The maximum number of deployments on each returned page. Defaults to 50.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The token for continuing a previous list request on the next page. This should be set to the value of `nextPageToken` from a previous response.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "scriptId": {
+                                    "description": "The script project's Drive ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/projects/{scriptId}/deployments",
+                            "response": {
+                                "$ref": "ListDeploymentsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/script.deployments",
+                                "https://www.googleapis.com/auth/script.deployments.readonly"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates a deployment of an Apps Script project.",
+                            "flatPath": "v1/projects/{scriptId}/deployments/{deploymentId}",
+                            "httpMethod": "PUT",
+                            "id": "script.projects.deployments.update",
+                            "parameterOrder": [
+                                "scriptId",
+                                "deploymentId"
+                            ],
+                            "parameters": {
+                                "deploymentId": {
+                                    "description": "The deployment ID for this deployment.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "scriptId": {
+                                    "description": "The script project's Drive ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/projects/{scriptId}/deployments/{deploymentId}",
+                            "request": {
+                                "$ref": "UpdateDeploymentRequest"
+                            },
+                            "response": {
+                                "$ref": "Deployment"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/script.deployments"
+                            ]
+                        }
+                    }
+                },
+                "versions": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a new immutable version using the current code, with a unique version number.",
+                            "flatPath": "v1/projects/{scriptId}/versions",
+                            "httpMethod": "POST",
+                            "id": "script.projects.versions.create",
+                            "parameterOrder": [
+                                "scriptId"
+                            ],
+                            "parameters": {
+                                "scriptId": {
+                                    "description": "The script project's Drive ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/projects/{scriptId}/versions",
+                            "request": {
+                                "$ref": "Version"
+                            },
+                            "response": {
+                                "$ref": "Version"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/script.projects"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets a version of a script project.",
+                            "flatPath": "v1/projects/{scriptId}/versions/{versionNumber}",
+                            "httpMethod": "GET",
+                            "id": "script.projects.versions.get",
+                            "parameterOrder": [
+                                "scriptId",
+                                "versionNumber"
+                            ],
+                            "parameters": {
+                                "scriptId": {
+                                    "description": "The script project's Drive ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "versionNumber": {
+                                    "description": "The version number.",
+                                    "format": "int32",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "integer"
+                                }
+                            },
+                            "path": "v1/projects/{scriptId}/versions/{versionNumber}",
+                            "response": {
+                                "$ref": "Version"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/script.projects",
+                                "https://www.googleapis.com/auth/script.projects.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "List the versions of a script project.",
+                            "flatPath": "v1/projects/{scriptId}/versions",
+                            "httpMethod": "GET",
+                            "id": "script.projects.versions.list",
+                            "parameterOrder": [
+                                "scriptId"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "The maximum number of versions on each returned page. Defaults to 50.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The token for continuing a previous list request on the next page. This should be set to the value of `nextPageToken` from a previous response.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "scriptId": {
+                                    "description": "The script project's Drive ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/projects/{scriptId}/versions",
+                            "response": {
+                                "$ref": "ListVersionsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/script.projects",
+                                "https://www.googleapis.com/auth/script.projects.readonly"
+                            ]
+                        }
+                    }
+                }
+            }
+        },
+        "scripts": {
+            "methods": {
+                "run": {
+                    "description": "Runs a function in an Apps Script project. The script project must be deployed for use with the Apps Script API and the calling application must share the same Cloud Platform project. This method requires authorization with an OAuth 2.0 token that includes at least one of the scopes listed in the [Authorization](#authorization-scopes) section; script projects that do not require authorization cannot be executed through this API. To find the correct scopes to include in the authentication token, open the script project **Overview** page and scroll down to \"Project OAuth Scopes.\" The error `403, PERMISSION_DENIED: The caller does not have permission` indicates that the Cloud Platform project used to authorize the request is not the same as the one used by the script.",
+                    "flatPath": "v1/scripts/{scriptId}:run",
+                    "httpMethod": "POST",
+                    "id": "script.scripts.run",
+                    "parameterOrder": [
+                        "scriptId"
+                    ],
+                    "parameters": {
+                        "scriptId": {
+                            "description": "The script ID of the script to be executed. Find the script ID on the **Project settings** page under \"IDs.\"",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/scripts/{scriptId}:run",
+                    "request": {
+                        "$ref": "ExecutionRequest"
+                    },
+                    "response": {
+                        "$ref": "Operation"
+                    },
+                    "scopes": [
+                        "https://mail.google.com/",
+                        "https://www.google.com/calendar/feeds",
+                        "https://www.google.com/m8/feeds",
+                        "https://www.googleapis.com/auth/admin.directory.group",
+                        "https://www.googleapis.com/auth/admin.directory.user",
+                        "https://www.googleapis.com/auth/documents",
+                        "https://www.googleapis.com/auth/drive",
+                        "https://www.googleapis.com/auth/forms",
+                        "https://www.googleapis.com/auth/forms.currentonly",
+                        "https://www.googleapis.com/auth/groups",
+                        "https://www.googleapis.com/auth/spreadsheets",
+                        "https://www.googleapis.com/auth/userinfo.email"
+                    ]
+                }
+            }
+        }
     },
-    "Status": {
-      "id": "Status",
-      "type": "object",
-      "properties": {
-        "details": {
-          "description": "An array that contains a single ExecutionError object that provides information about the nature of the error.",
-          "type": "array",
-          "items": {
-            "additionalProperties": {
-              "type": "any",
-              "description": "Properties of the object. Contains field @type with type URL."
+    "revision": "20210206",
+    "rootUrl": "https://script.googleapis.com/",
+    "schemas": {
+        "Content": {
+            "description": "The Content resource.",
+            "id": "Content",
+            "properties": {
+                "files": {
+                    "description": "The list of script project files. One of the files is a script manifest; it must be named \"appsscript\", must have type of JSON, and include the manifest configurations for the project.",
+                    "items": {
+                        "$ref": "File"
+                    },
+                    "type": "array"
+                },
+                "scriptId": {
+                    "description": "The script project's Drive ID.",
+                    "type": "string"
+                }
             },
             "type": "object"
-          }
         },
-        "code": {
-          "format": "int32",
-          "description": "The status code. For this API, this value either: - 10, indicating a `SCRIPT_TIMEOUT` error, - 3, indicating an `INVALID_ARGUMENT` error, or - 1, indicating a `CANCELLED` execution. ",
-          "type": "integer"
-        },
-        "message": {
-          "description": "A developer-facing error message, which is in English. Any user-facing error message is localized and sent in the details field, or localized by the client.",
-          "type": "string"
-        }
-      },
-      "description": "If a `run` call succeeds but the script function (or Apps Script itself) throws an exception, the response body's error field contains this `Status` object."
-    },
-    "Version": {
-      "id": "Version",
-      "description": "A resource representing a script project version. A version is a \"snapshot\" of a script project and is similar to a read-only branched release. When creating deployments, the version to use must be specified.",
-      "type": "object",
-      "properties": {
-        "description": {
-          "description": "The description for this version.",
-          "type": "string"
-        },
-        "versionNumber": {
-          "format": "int32",
-          "description": "The incremental ID that is created by Apps Script when a version is created. This is system assigned number and is immutable once created.",
-          "type": "integer"
-        },
-        "scriptId": {
-          "type": "string",
-          "description": "The script project's Drive ID."
-        },
-        "createTime": {
-          "description": "When the version was created.",
-          "type": "string",
-          "format": "google-datetime"
-        }
-      }
-    },
-    "File": {
-      "id": "File",
-      "type": "object",
-      "properties": {
-        "functionSet": {
-          "$ref": "GoogleAppsScriptTypeFunctionSet",
-          "description": "The defined set of functions in the script file, if any."
-        },
-        "updateTime": {
-          "description": "Last modified date timestamp. This read-only field is only visible to users who have WRITER permission for the script project.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "createTime": {
-          "format": "google-datetime",
-          "description": "Creation date timestamp. This read-only field is only visible to users who have WRITER permission for the script project.",
-          "type": "string"
-        },
-        "lastModifyUser": {
-          "$ref": "GoogleAppsScriptTypeUser",
-          "description": "The user who modified the file most recently. This read-only field is only visible to users who have WRITER permission for the script project."
-        },
-        "source": {
-          "description": "The file content.",
-          "type": "string"
-        },
-        "type": {
-          "description": "The type of the file.",
-          "enum": [
-            "ENUM_TYPE_UNSPECIFIED",
-            "SERVER_JS",
-            "HTML",
-            "JSON"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "Undetermined file type; never actually used.",
-            "An Apps Script server-side code file.",
-            "A file containing client-side HTML.",
-            "A file in JSON format. This type is only used for the script project's manifest. The manifest file content must match the structure of a valid [ScriptManifest](/apps-script/concepts/manifests)"
-          ]
-        },
-        "name": {
-          "description": "The name of the file. The file extension is not part of the file name, which can be identified from the type field.",
-          "type": "string"
-        }
-      },
-      "description": "An individual file within a script project. A file is a third-party source code created by one or more developers. It can be a server-side JS code, HTML, or a configuration file. Each script project can contain multiple files."
-    },
-    "Operation": {
-      "description": "A representation of an execution of an Apps Script function started with run. The execution response does not arrive until the function finishes executing. The maximum execution runtime is listed in the [Apps Script quotas guide](/apps-script/guides/services/quotas#current_limitations). After execution has started, it can have one of four outcomes: - If the script function returns successfully, the response field contains an ExecutionResponse object with the function's return value in the object's `result` field. - If the script function (or Apps Script itself) throws an exception, the error field contains a Status object. The `Status` object's `details` field contains an array with a single ExecutionError object that provides information about the nature of the error. - If the execution has not yet completed, the done field is `false` and the neither the `response` nor `error` fields are present. - If the `run` call itself fails (for example, because of a malformed request or an authorization error), the method returns an HTTP response code in the 4XX range with a different format for the response body. Client libraries automatically convert a 4XX response into an exception class. ",
-      "properties": {
-        "error": {
-          "description": "If a `run` call succeeds but the script function (or Apps Script itself) throws an exception, this field contains a Status object. The `Status` object's `details` field contains an array with a single ExecutionError object that provides information about the nature of the error.",
-          "$ref": "Status"
-        },
-        "done": {
-          "type": "boolean",
-          "description": "This field indicates whether the script execution has completed. A completed execution has a populated `response` field containing the ExecutionResponse from function that was executed."
-        },
-        "response": {
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "description": "If the script function returns successfully, this field contains an ExecutionResponse object with the function's return value.",
-          "type": "object"
-        }
-      },
-      "id": "Operation",
-      "type": "object"
-    },
-    "ScriptStackTraceElement": {
-      "description": "A stack trace through the script that shows where the execution failed.",
-      "type": "object",
-      "properties": {
-        "function": {
-          "type": "string",
-          "description": "The name of the function that failed."
-        },
-        "lineNumber": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The line number where the script failed."
-        }
-      },
-      "id": "ScriptStackTraceElement"
-    },
-    "ExecutionRequest": {
-      "type": "object",
-      "properties": {
-        "parameters": {
-          "items": {
-            "type": "any"
-          },
-          "description": "The parameters to be passed to the function being executed. The object type for each parameter should match the expected type in Apps Script. Parameters cannot be Apps Script-specific object types (such as a `Document` or a `Calendar`); they can only be primitive types such as `string`, `number`, `array`, `object`, or `boolean`. Optional.",
-          "type": "array"
-        },
-        "sessionState": {
-          "type": "string",
-          "description": "*Deprecated*. For use with Android add-ons only. An ID that represents the user's current session in the Android app for Google Docs or Sheets, included as extra data in the [Intent](https://developer.android.com/guide/components/intents-filters.html) that launches the add-on. When an Android add-on is run with a session state, it gains the privileges of a [bound](https://developers.google.com/apps-script/guides/bound) script—that is, it can access information like the user's current cursor position (in Docs) or selected cell (in Sheets). To retrieve the state, call `Intent.getStringExtra(\"com.google.android.apps.docs.addons.SessionState\")`. Optional."
-        },
-        "devMode": {
-          "description": "If `true` and the user is an owner of the script, the script runs at the most recently saved version rather than the version deployed for use with the Apps Script API. Optional; default is `false`.",
-          "type": "boolean"
-        },
-        "function": {
-          "type": "string",
-          "description": "The name of the function to execute in the given script. The name does not include parentheses or parameters. It can reference a function in an included library such as `Library.libFunction1`."
-        }
-      },
-      "description": "A request to run the function in a script. The script is identified by the specified `script_id`. Executing a function on a script returns results based on the implementation of the script.",
-      "id": "ExecutionRequest"
-    },
-    "GoogleAppsScriptTypeFunctionSet": {
-      "id": "GoogleAppsScriptTypeFunctionSet",
-      "type": "object",
-      "description": "A set of functions. No duplicates are permitted.",
-      "properties": {
-        "values": {
-          "description": "A list of functions composing the set.",
-          "items": {
-            "$ref": "GoogleAppsScriptTypeFunction"
-          },
-          "type": "array"
-        }
-      }
-    },
-    "ListDeploymentsResponse": {
-      "properties": {
-        "deployments": {
-          "description": "The list of deployments.",
-          "items": {
-            "$ref": "Deployment"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "The token that can be used in the next call to get the next page of results."
-        }
-      },
-      "id": "ListDeploymentsResponse",
-      "type": "object",
-      "description": "Response with the list of deployments for the specified Apps Script project."
-    },
-    "Value": {
-      "type": "object",
-      "properties": {
-        "stringValue": {
-          "type": "string",
-          "description": "Represents a string value."
-        },
-        "numberValue": {
-          "type": "number",
-          "format": "double",
-          "description": "Represents a double value."
-        },
-        "nullValue": {
-          "description": "Represents a null value.",
-          "enum": [
-            "NULL_VALUE"
-          ],
-          "enumDescriptions": [
-            "Null value."
-          ],
-          "type": "string"
-        },
-        "bytesValue": {
-          "type": "string",
-          "description": "Represents raw byte values.",
-          "format": "byte"
-        },
-        "protoValue": {
-          "type": "object",
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "Represents a structured proto value."
-        },
-        "dateValue": {
-          "description": "Represents a date in ms since the epoch.",
-          "type": "string",
-          "format": "int64"
-        },
-        "boolValue": {
-          "description": "Represents a boolean value.",
-          "type": "boolean"
-        },
-        "structValue": {
-          "$ref": "Struct",
-          "description": "Represents a structured value."
-        },
-        "listValue": {
-          "description": "Represents a repeated `Value`.",
-          "$ref": "ListValue"
-        }
-      },
-      "id": "Value",
-      "description": "`Value` represents a dynamically typed value which is the outcome of an executed script."
-    },
-    "Content": {
-      "id": "Content",
-      "type": "object",
-      "description": "The Content resource.",
-      "properties": {
-        "files": {
-          "items": {
-            "$ref": "File"
-          },
-          "type": "array",
-          "description": "The list of script project files. One of the files is a script manifest; it must be named \"appsscript\", must have type of JSON, and include the manifest configurations for the project."
-        },
-        "scriptId": {
-          "description": "The script project's Drive ID.",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleAppsScriptTypeExecutionApiConfig": {
-      "description": "API executable entry point configuration.",
-      "type": "object",
-      "properties": {
-        "access": {
-          "enum": [
-            "UNKNOWN_ACCESS",
-            "MYSELF",
-            "DOMAIN",
-            "ANYONE",
-            "ANYONE_ANONYMOUS"
-          ],
-          "description": "Who has permission to run the API executable.",
-          "enumDescriptions": [
-            "Default value, should not be used.",
-            "Only the user who deployed the web app or executable can access it. Note that this is not necessarily the owner of the script project.",
-            "Only users in the same domain as the user who deployed the web app or executable can access it.",
-            "Any logged in user can access the web app or executable.",
-            "Any user, logged in or not, can access the web app or executable."
-          ],
-          "type": "string"
-        }
-      },
-      "id": "GoogleAppsScriptTypeExecutionApiConfig"
-    },
-    "Deployment": {
-      "description": "Representation of a single script deployment.",
-      "properties": {
-        "entryPoints": {
-          "description": "The deployment's entry points.",
-          "items": {
-            "$ref": "EntryPoint"
-          },
-          "type": "array"
-        },
-        "deploymentId": {
-          "description": "The deployment ID for this deployment.",
-          "type": "string"
-        },
-        "deploymentConfig": {
-          "description": "The deployment configuration.",
-          "$ref": "DeploymentConfig"
-        },
-        "updateTime": {
-          "description": "Last modified date time stamp.",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      },
-      "id": "Deployment",
-      "type": "object"
-    },
-    "GoogleAppsScriptTypeAddOnEntryPoint": {
-      "properties": {
-        "postInstallTipUrl": {
-          "description": "The add-on's required post install tip URL.",
-          "type": "string"
-        },
-        "addOnType": {
-          "enum": [
-            "UNKNOWN_ADDON_TYPE",
-            "GMAIL",
-            "DATA_STUDIO"
-          ],
-          "type": "string",
-          "description": "The add-on's required list of supported container types.",
-          "enumDescriptions": [
-            "Default value, unknown add-on type.",
-            "Add-on type for Gmail.",
-            "Add-on type for Data Studio."
-          ]
-        },
-        "helpUrl": {
-          "type": "string",
-          "description": "The add-on's optional help URL."
-        },
-        "reportIssueUrl": {
-          "type": "string",
-          "description": "The add-on's optional report issue URL."
-        },
-        "description": {
-          "type": "string",
-          "description": "The add-on's optional description."
-        },
-        "title": {
-          "type": "string",
-          "description": "The add-on's required title."
-        }
-      },
-      "description": "An add-on entry point.",
-      "id": "GoogleAppsScriptTypeAddOnEntryPoint",
-      "type": "object"
-    },
-    "CreateProjectRequest": {
-      "description": "Request to create a script project.",
-      "type": "object",
-      "id": "CreateProjectRequest",
-      "properties": {
-        "title": {
-          "description": "The title for the project.",
-          "type": "string"
-        },
-        "parentId": {
-          "description": "The Drive ID of a parent file that the created script project is bound to. This is usually the ID of a Google Doc, Google Sheet, Google Form, or Google Slides file. If not set, a standalone script project is created.",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleAppsScriptTypeUser": {
-      "id": "GoogleAppsScriptTypeUser",
-      "description": "A simple user profile resource.",
-      "type": "object",
-      "properties": {
-        "domain": {
-          "description": "The user's domain.",
-          "type": "string"
-        },
-        "photoUrl": {
-          "description": "The user's photo.",
-          "type": "string"
-        },
-        "name": {
-          "description": "The user's display name.",
-          "type": "string"
-        },
-        "email": {
-          "description": "The user's identifying email address.",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleAppsScriptTypeFunction": {
-      "properties": {
-        "name": {
-          "description": "The function name in the script project.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "GoogleAppsScriptTypeFunction",
-      "description": "Represents a function in a script project."
-    },
-    "ScriptExecutionResult": {
-      "description": "The result of an execution.",
-      "properties": {
-        "returnValue": {
-          "$ref": "Value",
-          "description": "The returned value of the execution."
-        }
-      },
-      "type": "object",
-      "id": "ScriptExecutionResult"
-    },
-    "ListUserProcessesResponse": {
-      "description": "Response with the list of Process resources.",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "description": "Token for the next page of results. If empty, there are no more pages remaining.",
-          "type": "string"
-        },
-        "processes": {
-          "description": "List of processes matching request parameters.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleAppsScriptTypeProcess"
-          }
-        }
-      },
-      "id": "ListUserProcessesResponse"
-    },
-    "UpdateDeploymentRequest": {
-      "type": "object",
-      "id": "UpdateDeploymentRequest",
-      "description": "Request with deployment information to update an existing deployment.",
-      "properties": {
-        "deploymentConfig": {
-          "$ref": "DeploymentConfig",
-          "description": "The deployment configuration."
-        }
-      }
-    },
-    "GoogleAppsScriptTypeProcess": {
-      "properties": {
-        "userAccessLevel": {
-          "enum": [
-            "USER_ACCESS_LEVEL_UNSPECIFIED",
-            "NONE",
-            "READ",
-            "WRITE",
-            "OWNER"
-          ],
-          "enumDescriptions": [
-            "User access level unspecified",
-            "The user has no access.",
-            "The user has read-only access.",
-            "The user has write access.",
-            "The user is an owner."
-          ],
-          "description": "The executing users access level to the script.",
-          "type": "string"
-        },
-        "processStatus": {
-          "enumDescriptions": [
-            "Unspecified status.",
-            "The process is currently running.",
-            "The process has paused.",
-            "The process has completed.",
-            "The process was cancelled.",
-            "The process failed.",
-            "The process timed out.",
-            "Process status unknown.",
-            "The process is delayed, waiting for quota."
-          ],
-          "description": "The executions status.",
-          "type": "string",
-          "enum": [
-            "PROCESS_STATUS_UNSPECIFIED",
-            "RUNNING",
-            "PAUSED",
-            "COMPLETED",
-            "CANCELED",
-            "FAILED",
-            "TIMED_OUT",
-            "UNKNOWN",
-            "DELAYED"
-          ]
-        },
-        "duration": {
-          "description": "Duration the execution spent executing.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "projectName": {
-          "description": "Name of the script being executed.",
-          "type": "string"
-        },
-        "startTime": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "Time the execution started."
-        },
-        "functionName": {
-          "description": "Name of the function the started the execution.",
-          "type": "string"
-        },
-        "processType": {
-          "type": "string",
-          "enum": [
-            "PROCESS_TYPE_UNSPECIFIED",
-            "ADD_ON",
-            "EXECUTION_API",
-            "TIME_DRIVEN",
-            "TRIGGER",
-            "WEBAPP",
-            "EDITOR",
-            "SIMPLE_TRIGGER",
-            "MENU",
-            "BATCH_TASK"
-          ],
-          "enumDescriptions": [
-            "Unspecified type.",
-            "The process was started from an add-on entry point.",
-            "The process was started using the Apps Script API.",
-            "The process was started from a time-based trigger.",
-            "The process was started from an event-based trigger.",
-            "The process was started from a web app entry point.",
-            "The process was started using the Apps Script IDE.",
-            "The process was started from a G Suite simple trigger.",
-            "The process was started from a G Suite menu item.",
-            "The process was started as a task in a batch job."
-          ],
-          "description": "The executions type."
-        }
-      },
-      "description": "Representation of a single script process execution that was started from the script editor, a trigger, an application, or using the Apps Script API. This is distinct from the `Operation` resource, which only represents executions started via the Apps Script API.",
-      "type": "object",
-      "id": "GoogleAppsScriptTypeProcess"
-    },
-    "ExecutionResponse": {
-      "properties": {
-        "result": {
-          "type": "any",
-          "description": "The return value of the script function. The type matches the object type returned in Apps Script. Functions called using the Apps Script API cannot return Apps Script-specific objects (such as a `Document` or a `Calendar`); they can only return primitive types such as a `string`, `number`, `array`, `object`, or `boolean`."
-        }
-      },
-      "id": "ExecutionResponse",
-      "type": "object",
-      "description": "An object that provides the return value of a function executed using the Apps Script API. If the script function returns successfully, the response body's response field contains this `ExecutionResponse` object."
-    },
-    "DeploymentConfig": {
-      "id": "DeploymentConfig",
-      "description": "Metadata the defines how a deployment is configured.",
-      "properties": {
-        "scriptId": {
-          "description": "The script project's Drive ID.",
-          "type": "string"
-        },
-        "versionNumber": {
-          "description": "The version number on which this deployment is based.",
-          "type": "integer",
-          "format": "int32"
-        },
-        "manifestFileName": {
-          "description": "The manifest file name for this deployment.",
-          "type": "string"
-        },
-        "description": {
-          "description": "The description for this deployment.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "EntryPoint": {
-      "type": "object",
-      "description": "A configuration that defines how a deployment is accessed externally.",
-      "properties": {
-        "webApp": {
-          "$ref": "GoogleAppsScriptTypeWebAppEntryPoint",
-          "description": "An entry point specification for web apps."
-        },
-        "addOn": {
-          "$ref": "GoogleAppsScriptTypeAddOnEntryPoint",
-          "description": "Add-on properties."
-        },
-        "executionApi": {
-          "description": "An entry point specification for Apps Script API execution calls.",
-          "$ref": "GoogleAppsScriptTypeExecutionApiEntryPoint"
-        },
-        "entryPointType": {
-          "type": "string",
-          "enumDescriptions": [
-            "An unspecified entry point.",
-            "A web application entry point.",
-            "An API executable entry point.",
-            "An Add-On entry point."
-          ],
-          "description": "The type of the entry point.",
-          "enum": [
-            "ENTRY_POINT_TYPE_UNSPECIFIED",
-            "WEB_APP",
-            "EXECUTION_API",
-            "ADD_ON"
-          ]
-        }
-      },
-      "id": "EntryPoint"
-    },
-    "ListValue": {
-      "properties": {
-        "values": {
-          "type": "array",
-          "items": {
-            "$ref": "Value"
-          },
-          "description": "Repeated field of dynamically typed values."
-        }
-      },
-      "description": "`ListValue` is a wrapper around a repeated field of values.",
-      "id": "ListValue",
-      "type": "object"
-    },
-    "Struct": {
-      "description": "`Struct` represents a structured data value, consisting of fields which map to dynamically typed values.",
-      "type": "object",
-      "properties": {
-        "fields": {
-          "description": "Unordered map of dynamically typed values.",
-          "type": "object",
-          "additionalProperties": {
-            "$ref": "Value"
-          }
-        }
-      },
-      "id": "Struct"
-    },
-    "MetricsValue": {
-      "id": "MetricsValue",
-      "description": "Metrics value that holds number of executions counted.",
-      "type": "object",
-      "properties": {
-        "startTime": {
-          "description": "Required field indicating the start time of the interval.",
-          "type": "string",
-          "format": "google-datetime"
-        },
-        "endTime": {
-          "description": "Required field indicating the end time of the interval.",
-          "type": "string",
-          "format": "google-datetime"
-        },
-        "value": {
-          "description": "Indicates the number of executions counted.",
-          "format": "uint64",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleAppsScriptTypeExecutionApiEntryPoint": {
-      "properties": {
-        "entryPointConfig": {
-          "$ref": "GoogleAppsScriptTypeExecutionApiConfig",
-          "description": "The entry point's configuration."
-        }
-      },
-      "description": "An API executable entry point.",
-      "id": "GoogleAppsScriptTypeExecutionApiEntryPoint",
-      "type": "object"
-    },
-    "Metrics": {
-      "id": "Metrics",
-      "type": "object",
-      "description": "Resource containing usage stats for a given script, based on the supplied filter and mask present in the request.",
-      "properties": {
-        "activeUsers": {
-          "description": "Number of active users.",
-          "items": {
-            "$ref": "MetricsValue"
-          },
-          "type": "array"
-        },
-        "failedExecutions": {
-          "items": {
-            "$ref": "MetricsValue"
-          },
-          "description": "Number of failed executions.",
-          "type": "array"
-        },
-        "totalExecutions": {
-          "type": "array",
-          "items": {
-            "$ref": "MetricsValue"
-          },
-          "description": "Number of total executions."
-        }
-      }
-    },
-    "ListScriptProcessesResponse": {
-      "type": "object",
-      "id": "ListScriptProcessesResponse",
-      "description": "Response with the list of Process resources.",
-      "properties": {
-        "processes": {
-          "type": "array",
-          "items": {
-            "$ref": "GoogleAppsScriptTypeProcess"
-          },
-          "description": "List of processes matching request parameters."
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Token for the next page of results. If empty, there are no more pages remaining."
-        }
-      }
-    },
-    "ExecutionError": {
-      "description": "An object that provides information about the nature of an error resulting from an attempted execution of a script function using the Apps Script API. If a run call succeeds but the script function (or Apps Script itself) throws an exception, the response body's error field contains a Status object. The `Status` object's `details` field contains an array with a single one of these `ExecutionError` objects.",
-      "id": "ExecutionError",
-      "type": "object",
-      "properties": {
-        "errorType": {
-          "description": "The error type, for example `TypeError` or `ReferenceError`. If the error type is unavailable, this field is not included.",
-          "type": "string"
-        },
-        "scriptStackTraceElements": {
-          "type": "array",
-          "description": "An array of objects that provide a stack trace through the script to show where the execution failed, with the deepest call first.",
-          "items": {
-            "$ref": "ScriptStackTraceElement"
-          }
-        },
-        "errorMessage": {
-          "description": "The error message thrown by Apps Script, usually localized into the user's language.",
-          "type": "string"
-        }
-      }
-    },
-    "ExecuteStreamResponse": {
-      "properties": {
-        "result": {
-          "$ref": "ScriptExecutionResult",
-          "description": "The result of the execution."
-        }
-      },
-      "type": "object",
-      "description": "The response for executing or debugging a function in an Apps Script project.",
-      "id": "ExecuteStreamResponse"
-    },
-    "ListVersionsResponse": {
-      "id": "ListVersionsResponse",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "The token use to fetch the next page of records. if not exist in the response, that means no more versions to list."
-        },
-        "versions": {
-          "items": {
-            "$ref": "Version"
-          },
-          "type": "array",
-          "description": "The list of versions."
-        }
-      },
-      "type": "object",
-      "description": "Response with the list of the versions for the specified script project."
-    },
-    "Project": {
-      "id": "Project",
-      "properties": {
-        "createTime": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "When the script was created."
-        },
-        "parentId": {
-          "description": "The parent's Drive ID that the script will be attached to. This is usually the ID of a Google Document or Google Sheet. This filed is optional, and if not set, a stand-alone script will be created.",
-          "type": "string"
-        },
-        "lastModifyUser": {
-          "$ref": "GoogleAppsScriptTypeUser",
-          "description": "User who last modified the script."
-        },
-        "title": {
-          "description": "The title for the project.",
-          "type": "string"
-        },
-        "scriptId": {
-          "type": "string",
-          "description": "The script project's Drive ID."
-        },
-        "updateTime": {
-          "description": "When the script was last updated.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "creator": {
-          "$ref": "GoogleAppsScriptTypeUser",
-          "description": "User who originally created the script."
-        }
-      },
-      "description": "The script project resource.",
-      "type": "object"
-    }
-  },
-  "protocol": "rest",
-  "kind": "discovery#restDescription",
-  "ownerName": "Google",
-  "resources": {
-    "processes": {
-      "methods": {
-        "listScriptProcesses": {
-          "flatPath": "v1/processes:listScriptProcesses",
-          "description": "List information about a script's executed processes, such as process type and current status.",
-          "httpMethod": "GET",
-          "parameters": {
-            "scriptProcessFilter.startTime": {
-              "location": "query",
-              "type": "string",
-              "format": "google-datetime",
-              "description": "Optional field used to limit returned processes to those that were started on or after the given timestamp."
-            },
-            "scriptId": {
-              "type": "string",
-              "description": "The script ID of the project whose processes are listed.",
-              "location": "query"
-            },
-            "scriptProcessFilter.statuses": {
-              "enumDescriptions": [
-                "Unspecified status.",
-                "The process is currently running.",
-                "The process has paused.",
-                "The process has completed.",
-                "The process was cancelled.",
-                "The process failed.",
-                "The process timed out.",
-                "Process status unknown.",
-                "The process is delayed, waiting for quota."
-              ],
-              "description": "Optional field used to limit returned processes to those having one of the specified process statuses.",
-              "repeated": true,
-              "type": "string",
-              "location": "query",
-              "enum": [
-                "PROCESS_STATUS_UNSPECIFIED",
-                "RUNNING",
-                "PAUSED",
-                "COMPLETED",
-                "CANCELED",
-                "FAILED",
-                "TIMED_OUT",
-                "UNKNOWN",
-                "DELAYED"
-              ]
-            },
-            "scriptProcessFilter.functionName": {
-              "description": "Optional field used to limit returned processes to those originating from a script function with the given function name.",
-              "location": "query",
-              "type": "string"
-            },
-            "scriptProcessFilter.userAccessLevels": {
-              "type": "string",
-              "repeated": true,
-              "enumDescriptions": [
-                "User access level unspecified",
-                "The user has no access.",
-                "The user has read-only access.",
-                "The user has write access.",
-                "The user is an owner."
-              ],
-              "enum": [
-                "USER_ACCESS_LEVEL_UNSPECIFIED",
-                "NONE",
-                "READ",
-                "WRITE",
-                "OWNER"
-              ],
-              "location": "query",
-              "description": "Optional field used to limit returned processes to those having one of the specified user access levels."
-            },
-            "pageSize": {
-              "location": "query",
-              "format": "int32",
-              "type": "integer",
-              "description": "The maximum number of returned processes per page of results. Defaults to 50."
-            },
-            "pageToken": {
-              "description": "The token for continuing a previous list request on the next page. This should be set to the value of `nextPageToken` from a previous response.",
-              "location": "query",
-              "type": "string"
-            },
-            "scriptProcessFilter.endTime": {
-              "format": "google-datetime",
-              "description": "Optional field used to limit returned processes to those that completed on or before the given timestamp.",
-              "type": "string",
-              "location": "query"
-            },
-            "scriptProcessFilter.types": {
-              "enum": [
-                "PROCESS_TYPE_UNSPECIFIED",
-                "ADD_ON",
-                "EXECUTION_API",
-                "TIME_DRIVEN",
-                "TRIGGER",
-                "WEBAPP",
-                "EDITOR",
-                "SIMPLE_TRIGGER",
-                "MENU",
-                "BATCH_TASK"
-              ],
-              "enumDescriptions": [
-                "Unspecified type.",
-                "The process was started from an add-on entry point.",
-                "The process was started using the Apps Script API.",
-                "The process was started from a time-based trigger.",
-                "The process was started from an event-based trigger.",
-                "The process was started from a web app entry point.",
-                "The process was started using the Apps Script IDE.",
-                "The process was started from a G Suite simple trigger.",
-                "The process was started from a G Suite menu item.",
-                "The process was started as a task in a batch job."
-              ],
-              "location": "query",
-              "type": "string",
-              "description": "Optional field used to limit returned processes to those having one of the specified process types.",
-              "repeated": true
-            },
-            "scriptProcessFilter.deploymentId": {
-              "location": "query",
-              "type": "string",
-              "description": "Optional field used to limit returned processes to those originating from projects with a specific deployment ID."
-            }
-          },
-          "id": "script.processes.listScriptProcesses",
-          "path": "v1/processes:listScriptProcesses",
-          "scopes": [
-            "https://www.googleapis.com/auth/script.processes"
-          ],
-          "response": {
-            "$ref": "ListScriptProcessesResponse"
-          },
-          "parameterOrder": []
-        },
-        "list": {
-          "parameterOrder": [],
-          "description": "List information about processes made by or on behalf of a user, such as process type and current status.",
-          "response": {
-            "$ref": "ListUserProcessesResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/script.processes"
-          ],
-          "path": "v1/processes",
-          "id": "script.processes.list",
-          "httpMethod": "GET",
-          "flatPath": "v1/processes",
-          "parameters": {
-            "userProcessFilter.deploymentId": {
-              "type": "string",
-              "description": "Optional field used to limit returned processes to those originating from projects with a specific deployment ID.",
-              "location": "query"
-            },
-            "userProcessFilter.endTime": {
-              "location": "query",
-              "type": "string",
-              "format": "google-datetime",
-              "description": "Optional field used to limit returned processes to those that completed on or before the given timestamp."
-            },
-            "pageSize": {
-              "description": "The maximum number of returned processes per page of results. Defaults to 50.",
-              "location": "query",
-              "format": "int32",
-              "type": "integer"
-            },
-            "userProcessFilter.scriptId": {
-              "description": "Optional field used to limit returned processes to those originating from projects with a specific script ID.",
-              "type": "string",
-              "location": "query"
-            },
-            "userProcessFilter.startTime": {
-              "description": "Optional field used to limit returned processes to those that were started on or after the given timestamp.",
-              "format": "google-datetime",
-              "type": "string",
-              "location": "query"
-            },
-            "userProcessFilter.userAccessLevels": {
-              "type": "string",
-              "location": "query",
-              "description": "Optional field used to limit returned processes to those having one of the specified user access levels.",
-              "enum": [
-                "USER_ACCESS_LEVEL_UNSPECIFIED",
-                "NONE",
-                "READ",
-                "WRITE",
-                "OWNER"
-              ],
-              "enumDescriptions": [
-                "User access level unspecified",
-                "The user has no access.",
-                "The user has read-only access.",
-                "The user has write access.",
-                "The user is an owner."
-              ],
-              "repeated": true
-            },
-            "userProcessFilter.projectName": {
-              "type": "string",
-              "description": "Optional field used to limit returned processes to those originating from projects with project names containing a specific string.",
-              "location": "query"
-            },
-            "pageToken": {
-              "description": "The token for continuing a previous list request on the next page. This should be set to the value of `nextPageToken` from a previous response.",
-              "type": "string",
-              "location": "query"
-            },
-            "userProcessFilter.types": {
-              "enum": [
-                "PROCESS_TYPE_UNSPECIFIED",
-                "ADD_ON",
-                "EXECUTION_API",
-                "TIME_DRIVEN",
-                "TRIGGER",
-                "WEBAPP",
-                "EDITOR",
-                "SIMPLE_TRIGGER",
-                "MENU",
-                "BATCH_TASK"
-              ],
-              "enumDescriptions": [
-                "Unspecified type.",
-                "The process was started from an add-on entry point.",
-                "The process was started using the Apps Script API.",
-                "The process was started from a time-based trigger.",
-                "The process was started from an event-based trigger.",
-                "The process was started from a web app entry point.",
-                "The process was started using the Apps Script IDE.",
-                "The process was started from a G Suite simple trigger.",
-                "The process was started from a G Suite menu item.",
-                "The process was started as a task in a batch job."
-              ],
-              "type": "string",
-              "repeated": true,
-              "description": "Optional field used to limit returned processes to those having one of the specified process types.",
-              "location": "query"
-            },
-            "userProcessFilter.statuses": {
-              "enum": [
-                "PROCESS_STATUS_UNSPECIFIED",
-                "RUNNING",
-                "PAUSED",
-                "COMPLETED",
-                "CANCELED",
-                "FAILED",
-                "TIMED_OUT",
-                "UNKNOWN",
-                "DELAYED"
-              ],
-              "description": "Optional field used to limit returned processes to those having one of the specified process statuses.",
-              "location": "query",
-              "repeated": true,
-              "type": "string",
-              "enumDescriptions": [
-                "Unspecified status.",
-                "The process is currently running.",
-                "The process has paused.",
-                "The process has completed.",
-                "The process was cancelled.",
-                "The process failed.",
-                "The process timed out.",
-                "Process status unknown.",
-                "The process is delayed, waiting for quota."
-              ]
-            },
-            "userProcessFilter.functionName": {
-              "location": "query",
-              "description": "Optional field used to limit returned processes to those originating from a script function with the given function name.",
-              "type": "string"
-            }
-          }
-        }
-      }
-    },
-    "scripts": {
-      "methods": {
-        "run": {
-          "response": {
-            "$ref": "Operation"
-          },
-          "request": {
-            "$ref": "ExecutionRequest"
-          },
-          "path": "v1/scripts/{scriptId}:run",
-          "id": "script.scripts.run",
-          "scopes": [
-            "https://mail.google.com/",
-            "https://www.google.com/calendar/feeds",
-            "https://www.google.com/m8/feeds",
-            "https://www.googleapis.com/auth/admin.directory.group",
-            "https://www.googleapis.com/auth/admin.directory.user",
-            "https://www.googleapis.com/auth/documents",
-            "https://www.googleapis.com/auth/drive",
-            "https://www.googleapis.com/auth/forms",
-            "https://www.googleapis.com/auth/forms.currentonly",
-            "https://www.googleapis.com/auth/groups",
-            "https://www.googleapis.com/auth/spreadsheets",
-            "https://www.googleapis.com/auth/userinfo.email"
-          ],
-          "httpMethod": "POST",
-          "parameters": {
-            "scriptId": {
-              "location": "path",
-              "description": "The script ID of the script to be executed. To find the script ID, open the project in the script editor and select **File \u003e Project properties**.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "parameterOrder": [
-            "scriptId"
-          ],
-          "description": "Runs a function in an Apps Script project. The script project must be deployed for use with the Apps Script API and the calling application must share the same Cloud Platform project. This method requires authorization with an OAuth 2.0 token that includes at least one of the scopes listed in the [Authorization](#authorization-scopes) section; script projects that do not require authorization cannot be executed through this API. To find the correct scopes to include in the authentication token, open the project in the script editor, then select **File \u003e Project properties** and click the **Scopes** tab. The error `403, PERMISSION_DENIED: The caller does not have permission` indicates that the Cloud Platform project used to authorize the request is not the same as the one used by the script.",
-          "flatPath": "v1/scripts/{scriptId}:run"
-        }
-      }
-    },
-    "projects": {
-      "resources": {
-        "deployments": {
-          "methods": {
-            "update": {
-              "scopes": [
-                "https://www.googleapis.com/auth/script.deployments"
-              ],
-              "httpMethod": "PUT",
-              "response": {
-                "$ref": "Deployment"
-              },
-              "path": "v1/projects/{scriptId}/deployments/{deploymentId}",
-              "request": {
-                "$ref": "UpdateDeploymentRequest"
-              },
-              "flatPath": "v1/projects/{scriptId}/deployments/{deploymentId}",
-              "parameterOrder": [
-                "scriptId",
-                "deploymentId"
-              ],
-              "id": "script.projects.deployments.update",
-              "parameters": {
-                "deploymentId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "The deployment ID for this deployment."
+        "CreateProjectRequest": {
+            "description": "Request to create a script project.",
+            "id": "CreateProjectRequest",
+            "properties": {
+                "parentId": {
+                    "description": "The Drive ID of a parent file that the created script project is bound to. This is usually the ID of a Google Doc, Google Sheet, Google Form, or Google Slides file. If not set, a standalone script project is created.",
+                    "type": "string"
                 },
-                "scriptId": {
-                  "location": "path",
-                  "description": "The script project's Drive ID.",
-                  "type": "string",
-                  "required": true
+                "title": {
+                    "description": "The title for the project.",
+                    "type": "string"
                 }
-              },
-              "description": "Updates a deployment of an Apps Script project."
             },
-            "delete": {
-              "id": "script.projects.deployments.delete",
-              "httpMethod": "DELETE",
-              "scopes": [
-                "https://www.googleapis.com/auth/script.deployments"
-              ],
-              "path": "v1/projects/{scriptId}/deployments/{deploymentId}",
-              "description": "Deletes a deployment of an Apps Script project.",
-              "parameterOrder": [
-                "scriptId",
-                "deploymentId"
-              ],
-              "parameters": {
-                "scriptId": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "description": "The script project's Drive ID."
+            "type": "object"
+        },
+        "Deployment": {
+            "description": "Representation of a single script deployment.",
+            "id": "Deployment",
+            "properties": {
+                "deploymentConfig": {
+                    "$ref": "DeploymentConfig",
+                    "description": "The deployment configuration."
                 },
                 "deploymentId": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "description": "The deployment ID to be undeployed."
-                }
-              },
-              "response": {
-                "$ref": "Empty"
-              },
-              "flatPath": "v1/projects/{scriptId}/deployments/{deploymentId}"
-            },
-            "list": {
-              "parameterOrder": [
-                "scriptId"
-              ],
-              "path": "v1/projects/{scriptId}/deployments",
-              "description": "Lists the deployments of an Apps Script project.",
-              "response": {
-                "$ref": "ListDeploymentsResponse"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/script.deployments",
-                "https://www.googleapis.com/auth/script.deployments.readonly"
-              ],
-              "httpMethod": "GET",
-              "flatPath": "v1/projects/{scriptId}/deployments",
-              "parameters": {
-                "scriptId": {
-                  "type": "string",
-                  "required": true,
-                  "location": "path",
-                  "description": "The script project's Drive ID."
+                    "description": "The deployment ID for this deployment.",
+                    "type": "string"
                 },
-                "pageToken": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "The token for continuing a previous list request on the next page. This should be set to the value of `nextPageToken` from a previous response."
+                "entryPoints": {
+                    "description": "The deployment's entry points.",
+                    "items": {
+                        "$ref": "EntryPoint"
+                    },
+                    "type": "array"
                 },
-                "pageSize": {
-                  "description": "The maximum number of deployments on each returned page. Defaults to 50.",
-                  "location": "query",
-                  "format": "int32",
-                  "type": "integer"
+                "updateTime": {
+                    "description": "Last modified date time stamp.",
+                    "format": "google-datetime",
+                    "type": "string"
                 }
-              },
-              "id": "script.projects.deployments.list"
             },
-            "create": {
-              "path": "v1/projects/{scriptId}/deployments",
-              "scopes": [
-                "https://www.googleapis.com/auth/script.deployments"
-              ],
-              "description": "Creates a deployment of an Apps Script project.",
-              "parameters": {
-                "scriptId": {
-                  "type": "string",
-                  "description": "The script project's Drive ID.",
-                  "required": true,
-                  "location": "path"
-                }
-              },
-              "request": {
-                "$ref": "DeploymentConfig"
-              },
-              "httpMethod": "POST",
-              "flatPath": "v1/projects/{scriptId}/deployments",
-              "response": {
-                "$ref": "Deployment"
-              },
-              "parameterOrder": [
-                "scriptId"
-              ],
-              "id": "script.projects.deployments.create"
-            },
-            "get": {
-              "httpMethod": "GET",
-              "flatPath": "v1/projects/{scriptId}/deployments/{deploymentId}",
-              "parameters": {
-                "scriptId": {
-                  "description": "The script project's Drive ID.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "deploymentId": {
-                  "description": "The deployment ID.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true
-                }
-              },
-              "description": "Gets a deployment of an Apps Script project.",
-              "response": {
-                "$ref": "Deployment"
-              },
-              "id": "script.projects.deployments.get",
-              "parameterOrder": [
-                "scriptId",
-                "deploymentId"
-              ],
-              "path": "v1/projects/{scriptId}/deployments/{deploymentId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/script.deployments",
-                "https://www.googleapis.com/auth/script.deployments.readonly"
-              ]
-            }
-          }
+            "type": "object"
         },
-        "versions": {
-          "methods": {
-            "list": {
-              "response": {
-                "$ref": "ListVersionsResponse"
-              },
-              "parameters": {
-                "scriptId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "The script project's Drive ID."
+        "DeploymentConfig": {
+            "description": "Metadata the defines how a deployment is configured.",
+            "id": "DeploymentConfig",
+            "properties": {
+                "description": {
+                    "description": "The description for this deployment.",
+                    "type": "string"
                 },
-                "pageToken": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "The token for continuing a previous list request on the next page. This should be set to the value of `nextPageToken` from a previous response."
+                "manifestFileName": {
+                    "description": "The manifest file name for this deployment.",
+                    "type": "string"
                 },
-                "pageSize": {
-                  "format": "int32",
-                  "location": "query",
-                  "description": "The maximum number of versions on each returned page. Defaults to 50.",
-                  "type": "integer"
-                }
-              },
-              "flatPath": "v1/projects/{scriptId}/versions",
-              "scopes": [
-                "https://www.googleapis.com/auth/script.projects",
-                "https://www.googleapis.com/auth/script.projects.readonly"
-              ],
-              "parameterOrder": [
-                "scriptId"
-              ],
-              "id": "script.projects.versions.list",
-              "path": "v1/projects/{scriptId}/versions",
-              "httpMethod": "GET",
-              "description": "List the versions of a script project."
-            },
-            "create": {
-              "httpMethod": "POST",
-              "parameters": {
                 "scriptId": {
-                  "type": "string",
-                  "required": true,
-                  "description": "The script project's Drive ID.",
-                  "location": "path"
-                }
-              },
-              "response": {
-                "$ref": "Version"
-              },
-              "request": {
-                "$ref": "Version"
-              },
-              "description": "Creates a new immutable version using the current code, with a unique version number.",
-              "scopes": [
-                "https://www.googleapis.com/auth/script.projects"
-              ],
-              "parameterOrder": [
-                "scriptId"
-              ],
-              "flatPath": "v1/projects/{scriptId}/versions",
-              "id": "script.projects.versions.create",
-              "path": "v1/projects/{scriptId}/versions"
-            },
-            "get": {
-              "scopes": [
-                "https://www.googleapis.com/auth/script.projects",
-                "https://www.googleapis.com/auth/script.projects.readonly"
-              ],
-              "httpMethod": "GET",
-              "flatPath": "v1/projects/{scriptId}/versions/{versionNumber}",
-              "path": "v1/projects/{scriptId}/versions/{versionNumber}",
-              "response": {
-                "$ref": "Version"
-              },
-              "id": "script.projects.versions.get",
-              "parameters": {
+                    "description": "The script project's Drive ID.",
+                    "type": "string"
+                },
                 "versionNumber": {
-                  "type": "integer",
-                  "description": "The version number.",
-                  "format": "int32",
-                  "required": true,
-                  "location": "path"
+                    "description": "The version number on which this deployment is based.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "Empty": {
+            "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
+            "id": "Empty",
+            "properties": {},
+            "type": "object"
+        },
+        "EntryPoint": {
+            "description": "A configuration that defines how a deployment is accessed externally.",
+            "id": "EntryPoint",
+            "properties": {
+                "addOn": {
+                    "$ref": "GoogleAppsScriptTypeAddOnEntryPoint",
+                    "description": "Add-on properties."
+                },
+                "entryPointType": {
+                    "description": "The type of the entry point.",
+                    "enum": [
+                        "ENTRY_POINT_TYPE_UNSPECIFIED",
+                        "WEB_APP",
+                        "EXECUTION_API",
+                        "ADD_ON"
+                    ],
+                    "enumDescriptions": [
+                        "An unspecified entry point.",
+                        "A web application entry point.",
+                        "An API executable entry point.",
+                        "An Add-On entry point."
+                    ],
+                    "type": "string"
+                },
+                "executionApi": {
+                    "$ref": "GoogleAppsScriptTypeExecutionApiEntryPoint",
+                    "description": "An entry point specification for Apps Script API execution calls."
+                },
+                "webApp": {
+                    "$ref": "GoogleAppsScriptTypeWebAppEntryPoint",
+                    "description": "An entry point specification for web apps."
+                }
+            },
+            "type": "object"
+        },
+        "ExecuteStreamResponse": {
+            "description": "The response for executing or debugging a function in an Apps Script project.",
+            "id": "ExecuteStreamResponse",
+            "properties": {
+                "result": {
+                    "$ref": "ScriptExecutionResult",
+                    "description": "The result of the execution."
+                }
+            },
+            "type": "object"
+        },
+        "ExecutionError": {
+            "description": "An object that provides information about the nature of an error resulting from an attempted execution of a script function using the Apps Script API. If a run call succeeds but the script function (or Apps Script itself) throws an exception, the response body's error field contains a Status object. The `Status` object's `details` field contains an array with a single one of these `ExecutionError` objects.",
+            "id": "ExecutionError",
+            "properties": {
+                "errorMessage": {
+                    "description": "The error message thrown by Apps Script, usually localized into the user's language.",
+                    "type": "string"
+                },
+                "errorType": {
+                    "description": "The error type, for example `TypeError` or `ReferenceError`. If the error type is unavailable, this field is not included.",
+                    "type": "string"
+                },
+                "scriptStackTraceElements": {
+                    "description": "An array of objects that provide a stack trace through the script to show where the execution failed, with the deepest call first.",
+                    "items": {
+                        "$ref": "ScriptStackTraceElement"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ExecutionRequest": {
+            "description": "A request to run the function in a script. The script is identified by the specified `script_id`. Executing a function on a script returns results based on the implementation of the script.",
+            "id": "ExecutionRequest",
+            "properties": {
+                "devMode": {
+                    "description": "If `true` and the user is an owner of the script, the script runs at the most recently saved version rather than the version deployed for use with the Apps Script API. Optional; default is `false`.",
+                    "type": "boolean"
+                },
+                "function": {
+                    "description": "The name of the function to execute in the given script. The name does not include parentheses or parameters. It can reference a function in an included library such as `Library.libFunction1`.",
+                    "type": "string"
+                },
+                "parameters": {
+                    "description": "The parameters to be passed to the function being executed. The object type for each parameter should match the expected type in Apps Script. Parameters cannot be Apps Script-specific object types (such as a `Document` or a `Calendar`); they can only be primitive types such as `string`, `number`, `array`, `object`, or `boolean`. Optional.",
+                    "items": {
+                        "type": "any"
+                    },
+                    "type": "array"
+                },
+                "sessionState": {
+                    "description": "*Deprecated*. For use with Android add-ons only. An ID that represents the user's current session in the Android app for Google Docs or Sheets, included as extra data in the [Intent](https://developer.android.com/guide/components/intents-filters.html) that launches the add-on. When an Android add-on is run with a session state, it gains the privileges of a [bound](https://developers.google.com/apps-script/guides/bound) script\u2014that is, it can access information like the user's current cursor position (in Docs) or selected cell (in Sheets). To retrieve the state, call `Intent.getStringExtra(\"com.google.android.apps.docs.addons.SessionState\")`. Optional.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ExecutionResponse": {
+            "description": "An object that provides the return value of a function executed using the Apps Script API. If the script function returns successfully, the response body's response field contains this `ExecutionResponse` object.",
+            "id": "ExecutionResponse",
+            "properties": {
+                "result": {
+                    "description": "The return value of the script function. The type matches the object type returned in Apps Script. Functions called using the Apps Script API cannot return Apps Script-specific objects (such as a `Document` or a `Calendar`); they can only return primitive types such as a `string`, `number`, `array`, `object`, or `boolean`.",
+                    "type": "any"
+                }
+            },
+            "type": "object"
+        },
+        "File": {
+            "description": "An individual file within a script project. A file is a third-party source code created by one or more developers. It can be a server-side JS code, HTML, or a configuration file. Each script project can contain multiple files.",
+            "id": "File",
+            "properties": {
+                "createTime": {
+                    "description": "Creation date timestamp. This read-only field is only visible to users who have WRITER permission for the script project.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "functionSet": {
+                    "$ref": "GoogleAppsScriptTypeFunctionSet",
+                    "description": "The defined set of functions in the script file, if any."
+                },
+                "lastModifyUser": {
+                    "$ref": "GoogleAppsScriptTypeUser",
+                    "description": "The user who modified the file most recently. This read-only field is only visible to users who have WRITER permission for the script project."
+                },
+                "name": {
+                    "description": "The name of the file. The file extension is not part of the file name, which can be identified from the type field.",
+                    "type": "string"
+                },
+                "source": {
+                    "description": "The file content.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "The type of the file.",
+                    "enum": [
+                        "ENUM_TYPE_UNSPECIFIED",
+                        "SERVER_JS",
+                        "HTML",
+                        "JSON"
+                    ],
+                    "enumDescriptions": [
+                        "Undetermined file type; never actually used.",
+                        "An Apps Script server-side code file.",
+                        "A file containing client-side HTML.",
+                        "A file in JSON format. This type is only used for the script project's manifest. The manifest file content must match the structure of a valid [ScriptManifest](/apps-script/concepts/manifests)"
+                    ],
+                    "type": "string"
+                },
+                "updateTime": {
+                    "description": "Last modified date timestamp. This read-only field is only visible to users who have WRITER permission for the script project.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleAppsScriptTypeAddOnEntryPoint": {
+            "description": "An add-on entry point.",
+            "id": "GoogleAppsScriptTypeAddOnEntryPoint",
+            "properties": {
+                "addOnType": {
+                    "description": "The add-on's required list of supported container types.",
+                    "enum": [
+                        "UNKNOWN_ADDON_TYPE",
+                        "GMAIL",
+                        "DATA_STUDIO"
+                    ],
+                    "enumDescriptions": [
+                        "Default value, unknown add-on type.",
+                        "Add-on type for Gmail.",
+                        "Add-on type for Data Studio."
+                    ],
+                    "type": "string"
+                },
+                "description": {
+                    "description": "The add-on's optional description.",
+                    "type": "string"
+                },
+                "helpUrl": {
+                    "description": "The add-on's optional help URL.",
+                    "type": "string"
+                },
+                "postInstallTipUrl": {
+                    "description": "The add-on's required post install tip URL.",
+                    "type": "string"
+                },
+                "reportIssueUrl": {
+                    "description": "The add-on's optional report issue URL.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "The add-on's required title.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleAppsScriptTypeExecutionApiConfig": {
+            "description": "API executable entry point configuration.",
+            "id": "GoogleAppsScriptTypeExecutionApiConfig",
+            "properties": {
+                "access": {
+                    "description": "Who has permission to run the API executable.",
+                    "enum": [
+                        "UNKNOWN_ACCESS",
+                        "MYSELF",
+                        "DOMAIN",
+                        "ANYONE",
+                        "ANYONE_ANONYMOUS"
+                    ],
+                    "enumDescriptions": [
+                        "Default value, should not be used.",
+                        "Only the user who deployed the web app or executable can access it. Note that this is not necessarily the owner of the script project.",
+                        "Only users in the same domain as the user who deployed the web app or executable can access it.",
+                        "Any logged in user can access the web app or executable.",
+                        "Any user, logged in or not, can access the web app or executable."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleAppsScriptTypeExecutionApiEntryPoint": {
+            "description": "An API executable entry point.",
+            "id": "GoogleAppsScriptTypeExecutionApiEntryPoint",
+            "properties": {
+                "entryPointConfig": {
+                    "$ref": "GoogleAppsScriptTypeExecutionApiConfig",
+                    "description": "The entry point's configuration."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleAppsScriptTypeFunction": {
+            "description": "Represents a function in a script project.",
+            "id": "GoogleAppsScriptTypeFunction",
+            "properties": {
+                "name": {
+                    "description": "The function name in the script project.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleAppsScriptTypeFunctionSet": {
+            "description": "A set of functions. No duplicates are permitted.",
+            "id": "GoogleAppsScriptTypeFunctionSet",
+            "properties": {
+                "values": {
+                    "description": "A list of functions composing the set.",
+                    "items": {
+                        "$ref": "GoogleAppsScriptTypeFunction"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleAppsScriptTypeProcess": {
+            "description": "Representation of a single script process execution that was started from the script editor, a trigger, an application, or using the Apps Script API. This is distinct from the `Operation` resource, which only represents executions started via the Apps Script API.",
+            "id": "GoogleAppsScriptTypeProcess",
+            "properties": {
+                "duration": {
+                    "description": "Duration the execution spent executing.",
+                    "format": "google-duration",
+                    "type": "string"
+                },
+                "functionName": {
+                    "description": "Name of the function the started the execution.",
+                    "type": "string"
+                },
+                "processStatus": {
+                    "description": "The executions status.",
+                    "enum": [
+                        "PROCESS_STATUS_UNSPECIFIED",
+                        "RUNNING",
+                        "PAUSED",
+                        "COMPLETED",
+                        "CANCELED",
+                        "FAILED",
+                        "TIMED_OUT",
+                        "UNKNOWN",
+                        "DELAYED"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified status.",
+                        "The process is currently running.",
+                        "The process has paused.",
+                        "The process has completed.",
+                        "The process was cancelled.",
+                        "The process failed.",
+                        "The process timed out.",
+                        "Process status unknown.",
+                        "The process is delayed, waiting for quota."
+                    ],
+                    "type": "string"
+                },
+                "processType": {
+                    "description": "The executions type.",
+                    "enum": [
+                        "PROCESS_TYPE_UNSPECIFIED",
+                        "ADD_ON",
+                        "EXECUTION_API",
+                        "TIME_DRIVEN",
+                        "TRIGGER",
+                        "WEBAPP",
+                        "EDITOR",
+                        "SIMPLE_TRIGGER",
+                        "MENU",
+                        "BATCH_TASK"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecified type.",
+                        "The process was started from an add-on entry point.",
+                        "The process was started using the Apps Script API.",
+                        "The process was started from a time-based trigger.",
+                        "The process was started from an event-based trigger.",
+                        "The process was started from a web app entry point.",
+                        "The process was started using the Apps Script IDE.",
+                        "The process was started from a G Suite simple trigger.",
+                        "The process was started from a G Suite menu item.",
+                        "The process was started as a task in a batch job."
+                    ],
+                    "type": "string"
+                },
+                "projectName": {
+                    "description": "Name of the script being executed.",
+                    "type": "string"
+                },
+                "startTime": {
+                    "description": "Time the execution started.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "userAccessLevel": {
+                    "description": "The executing users access level to the script.",
+                    "enum": [
+                        "USER_ACCESS_LEVEL_UNSPECIFIED",
+                        "NONE",
+                        "READ",
+                        "WRITE",
+                        "OWNER"
+                    ],
+                    "enumDescriptions": [
+                        "User access level unspecified",
+                        "The user has no access.",
+                        "The user has read-only access.",
+                        "The user has write access.",
+                        "The user is an owner."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleAppsScriptTypeUser": {
+            "description": "A simple user profile resource.",
+            "id": "GoogleAppsScriptTypeUser",
+            "properties": {
+                "domain": {
+                    "description": "The user's domain.",
+                    "type": "string"
+                },
+                "email": {
+                    "description": "The user's identifying email address.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The user's display name.",
+                    "type": "string"
+                },
+                "photoUrl": {
+                    "description": "The user's photo.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleAppsScriptTypeWebAppConfig": {
+            "description": "Web app entry point configuration.",
+            "id": "GoogleAppsScriptTypeWebAppConfig",
+            "properties": {
+                "access": {
+                    "description": "Who has permission to run the web app.",
+                    "enum": [
+                        "UNKNOWN_ACCESS",
+                        "MYSELF",
+                        "DOMAIN",
+                        "ANYONE",
+                        "ANYONE_ANONYMOUS"
+                    ],
+                    "enumDescriptions": [
+                        "Default value, should not be used.",
+                        "Only the user who deployed the web app or executable can access it. Note that this is not necessarily the owner of the script project.",
+                        "Only users in the same domain as the user who deployed the web app or executable can access it.",
+                        "Any logged in user can access the web app or executable.",
+                        "Any user, logged in or not, can access the web app or executable."
+                    ],
+                    "type": "string"
+                },
+                "executeAs": {
+                    "description": "Who to execute the web app as.",
+                    "enum": [
+                        "UNKNOWN_EXECUTE_AS",
+                        "USER_ACCESSING",
+                        "USER_DEPLOYING"
+                    ],
+                    "enumDescriptions": [
+                        "Default value, should not be used.",
+                        "The script runs as the user accessing the web app.",
+                        "The script runs as the user who deployed the web app. Note that this is not necessarily the owner of the script project."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleAppsScriptTypeWebAppEntryPoint": {
+            "description": "A web application entry point.",
+            "id": "GoogleAppsScriptTypeWebAppEntryPoint",
+            "properties": {
+                "entryPointConfig": {
+                    "$ref": "GoogleAppsScriptTypeWebAppConfig",
+                    "description": "The entry point's configuration."
+                },
+                "url": {
+                    "description": "The URL for the web application.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListDeploymentsResponse": {
+            "description": "Response with the list of deployments for the specified Apps Script project.",
+            "id": "ListDeploymentsResponse",
+            "properties": {
+                "deployments": {
+                    "description": "The list of deployments.",
+                    "items": {
+                        "$ref": "Deployment"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "The token that can be used in the next call to get the next page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListScriptProcessesResponse": {
+            "description": "Response with the list of Process resources.",
+            "id": "ListScriptProcessesResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "Token for the next page of results. If empty, there are no more pages remaining.",
+                    "type": "string"
+                },
+                "processes": {
+                    "description": "List of processes matching request parameters.",
+                    "items": {
+                        "$ref": "GoogleAppsScriptTypeProcess"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListUserProcessesResponse": {
+            "description": "Response with the list of Process resources.",
+            "id": "ListUserProcessesResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "Token for the next page of results. If empty, there are no more pages remaining.",
+                    "type": "string"
+                },
+                "processes": {
+                    "description": "List of processes matching request parameters.",
+                    "items": {
+                        "$ref": "GoogleAppsScriptTypeProcess"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListValue": {
+            "description": "`ListValue` is a wrapper around a repeated field of values.",
+            "id": "ListValue",
+            "properties": {
+                "values": {
+                    "description": "Repeated field of dynamically typed values.",
+                    "items": {
+                        "$ref": "Value"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListVersionsResponse": {
+            "description": "Response with the list of the versions for the specified script project.",
+            "id": "ListVersionsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The token use to fetch the next page of records. if not exist in the response, that means no more versions to list.",
+                    "type": "string"
+                },
+                "versions": {
+                    "description": "The list of versions.",
+                    "items": {
+                        "$ref": "Version"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Metrics": {
+            "description": "Resource containing usage stats for a given script, based on the supplied filter and mask present in the request.",
+            "id": "Metrics",
+            "properties": {
+                "activeUsers": {
+                    "description": "Number of active users.",
+                    "items": {
+                        "$ref": "MetricsValue"
+                    },
+                    "type": "array"
+                },
+                "failedExecutions": {
+                    "description": "Number of failed executions.",
+                    "items": {
+                        "$ref": "MetricsValue"
+                    },
+                    "type": "array"
+                },
+                "totalExecutions": {
+                    "description": "Number of total executions.",
+                    "items": {
+                        "$ref": "MetricsValue"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "MetricsValue": {
+            "description": "Metrics value that holds number of executions counted.",
+            "id": "MetricsValue",
+            "properties": {
+                "endTime": {
+                    "description": "Required field indicating the end time of the interval.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "startTime": {
+                    "description": "Required field indicating the start time of the interval.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "value": {
+                    "description": "Indicates the number of executions counted.",
+                    "format": "uint64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Operation": {
+            "description": "A representation of an execution of an Apps Script function started with run. The execution response does not arrive until the function finishes executing. The maximum execution runtime is listed in the [Apps Script quotas guide](/apps-script/guides/services/quotas#current_limitations). After execution has started, it can have one of four outcomes: - If the script function returns successfully, the response field contains an ExecutionResponse object with the function's return value in the object's `result` field. - If the script function (or Apps Script itself) throws an exception, the error field contains a Status object. The `Status` object's `details` field contains an array with a single ExecutionError object that provides information about the nature of the error. - If the execution has not yet completed, the done field is `false` and the neither the `response` nor `error` fields are present. - If the `run` call itself fails (for example, because of a malformed request or an authorization error), the method returns an HTTP response code in the 4XX range with a different format for the response body. Client libraries automatically convert a 4XX response into an exception class. ",
+            "id": "Operation",
+            "properties": {
+                "done": {
+                    "description": "This field indicates whether the script execution has completed. A completed execution has a populated `response` field containing the ExecutionResponse from function that was executed.",
+                    "type": "boolean"
+                },
+                "error": {
+                    "$ref": "Status",
+                    "description": "If a `run` call succeeds but the script function (or Apps Script itself) throws an exception, this field contains a Status object. The `Status` object's `details` field contains an array with a single ExecutionError object that provides information about the nature of the error."
+                },
+                "response": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "If the script function returns successfully, this field contains an ExecutionResponse object with the function's return value.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "Project": {
+            "description": "The script project resource.",
+            "id": "Project",
+            "properties": {
+                "createTime": {
+                    "description": "When the script was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "creator": {
+                    "$ref": "GoogleAppsScriptTypeUser",
+                    "description": "User who originally created the script."
+                },
+                "lastModifyUser": {
+                    "$ref": "GoogleAppsScriptTypeUser",
+                    "description": "User who last modified the script."
+                },
+                "parentId": {
+                    "description": "The parent's Drive ID that the script will be attached to. This is usually the ID of a Google Document or Google Sheet. This filed is optional, and if not set, a stand-alone script will be created.",
+                    "type": "string"
                 },
                 "scriptId": {
-                  "required": true,
-                  "description": "The script project's Drive ID.",
-                  "type": "string",
-                  "location": "path"
+                    "description": "The script project's Drive ID.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "The title for the project.",
+                    "type": "string"
+                },
+                "updateTime": {
+                    "description": "When the script was last updated.",
+                    "format": "google-datetime",
+                    "type": "string"
                 }
-              },
-              "description": "Gets a version of a script project.",
-              "parameterOrder": [
-                "scriptId",
-                "versionNumber"
-              ]
-            }
-          }
+            },
+            "type": "object"
+        },
+        "ScriptExecutionResult": {
+            "description": "The result of an execution.",
+            "id": "ScriptExecutionResult",
+            "properties": {
+                "returnValue": {
+                    "$ref": "Value",
+                    "description": "The returned value of the execution."
+                }
+            },
+            "type": "object"
+        },
+        "ScriptStackTraceElement": {
+            "description": "A stack trace through the script that shows where the execution failed.",
+            "id": "ScriptStackTraceElement",
+            "properties": {
+                "function": {
+                    "description": "The name of the function that failed.",
+                    "type": "string"
+                },
+                "lineNumber": {
+                    "description": "The line number where the script failed.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "Status": {
+            "description": "If a `run` call succeeds but the script function (or Apps Script itself) throws an exception, the response body's error field contains this `Status` object.",
+            "id": "Status",
+            "properties": {
+                "code": {
+                    "description": "The status code. For this API, this value either: - 10, indicating a `SCRIPT_TIMEOUT` error, - 3, indicating an `INVALID_ARGUMENT` error, or - 1, indicating a `CANCELLED` execution. ",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "An array that contains a single ExecutionError object that provides information about the nature of the error.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which is in English. Any user-facing error message is localized and sent in the details field, or localized by the client.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Struct": {
+            "description": "`Struct` represents a structured data value, consisting of fields which map to dynamically typed values.",
+            "id": "Struct",
+            "properties": {
+                "fields": {
+                    "additionalProperties": {
+                        "$ref": "Value"
+                    },
+                    "description": "Unordered map of dynamically typed values.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "UpdateDeploymentRequest": {
+            "description": "Request with deployment information to update an existing deployment.",
+            "id": "UpdateDeploymentRequest",
+            "properties": {
+                "deploymentConfig": {
+                    "$ref": "DeploymentConfig",
+                    "description": "The deployment configuration."
+                }
+            },
+            "type": "object"
+        },
+        "Value": {
+            "description": "`Value` represents a dynamically typed value which is the outcome of an executed script.",
+            "id": "Value",
+            "properties": {
+                "boolValue": {
+                    "description": "Represents a boolean value.",
+                    "type": "boolean"
+                },
+                "bytesValue": {
+                    "description": "Represents raw byte values.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "dateValue": {
+                    "description": "Represents a date in ms since the epoch.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "listValue": {
+                    "$ref": "ListValue",
+                    "description": "Represents a repeated `Value`."
+                },
+                "nullValue": {
+                    "description": "Represents a null value.",
+                    "enum": [
+                        "NULL_VALUE"
+                    ],
+                    "enumDescriptions": [
+                        "Null value."
+                    ],
+                    "type": "string"
+                },
+                "numberValue": {
+                    "description": "Represents a double value.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "protoValue": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Represents a structured proto value.",
+                    "type": "object"
+                },
+                "stringValue": {
+                    "description": "Represents a string value.",
+                    "type": "string"
+                },
+                "structValue": {
+                    "$ref": "Struct",
+                    "description": "Represents a structured value."
+                }
+            },
+            "type": "object"
+        },
+        "Version": {
+            "description": "A resource representing a script project version. A version is a \"snapshot\" of a script project and is similar to a read-only branched release. When creating deployments, the version to use must be specified.",
+            "id": "Version",
+            "properties": {
+                "createTime": {
+                    "description": "When the version was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "description": {
+                    "description": "The description for this version.",
+                    "type": "string"
+                },
+                "scriptId": {
+                    "description": "The script project's Drive ID.",
+                    "type": "string"
+                },
+                "versionNumber": {
+                    "description": "The incremental ID that is created by Apps Script when a version is created. This is system assigned number and is immutable once created.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
         }
-      },
-      "methods": {
-        "getContent": {
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/script.projects",
-            "https://www.googleapis.com/auth/script.projects.readonly"
-          ],
-          "parameters": {
-            "scriptId": {
-              "type": "string",
-              "description": "The script project's Drive ID.",
-              "required": true,
-              "location": "path"
-            },
-            "versionNumber": {
-              "description": "The version number of the project to retrieve. If not provided, the project's HEAD version is returned.",
-              "format": "int32",
-              "location": "query",
-              "type": "integer"
-            }
-          },
-          "path": "v1/projects/{scriptId}/content",
-          "id": "script.projects.getContent",
-          "description": "Gets the content of the script project, including the code source and metadata for each script file.",
-          "response": {
-            "$ref": "Content"
-          },
-          "flatPath": "v1/projects/{scriptId}/content",
-          "parameterOrder": [
-            "scriptId"
-          ]
-        },
-        "getMetrics": {
-          "response": {
-            "$ref": "Metrics"
-          },
-          "description": "Get metrics data for scripts, such as number of executions and active users.",
-          "httpMethod": "GET",
-          "parameters": {
-            "scriptId": {
-              "description": "Required field indicating the script to get metrics for.",
-              "required": true,
-              "location": "path",
-              "type": "string"
-            },
-            "metricsGranularity": {
-              "type": "string",
-              "description": "Required field indicating what granularity of metrics are returned.",
-              "location": "query",
-              "enumDescriptions": [
-                "Default metric granularity used to query no metrics.",
-                "Represents weekly metrics.",
-                "Represents daily metrics over a period of 7 days."
-              ],
-              "enum": [
-                "UNSPECIFIED_GRANULARITY",
-                "WEEKLY",
-                "DAILY"
-              ]
-            },
-            "metricsFilter.deploymentId": {
-              "description": "Optional field indicating a specific deployment to retrieve metrics from.",
-              "type": "string",
-              "location": "query"
-            }
-          },
-          "parameterOrder": [
-            "scriptId"
-          ],
-          "id": "script.projects.getMetrics",
-          "path": "v1/projects/{scriptId}/metrics",
-          "scopes": [
-            "https://www.googleapis.com/auth/script.metrics"
-          ],
-          "flatPath": "v1/projects/{scriptId}/metrics"
-        },
-        "create": {
-          "description": "Creates a new, empty script project with no script files and a base manifest file.",
-          "scopes": [
-            "https://www.googleapis.com/auth/script.projects"
-          ],
-          "id": "script.projects.create",
-          "parameters": {},
-          "path": "v1/projects",
-          "flatPath": "v1/projects",
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "request": {
-            "$ref": "CreateProjectRequest"
-          },
-          "response": {
-            "$ref": "Project"
-          }
-        },
-        "get": {
-          "flatPath": "v1/projects/{scriptId}",
-          "description": "Gets a script project's metadata.",
-          "parameterOrder": [
-            "scriptId"
-          ],
-          "httpMethod": "GET",
-          "parameters": {
-            "scriptId": {
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "description": "The script project's Drive ID."
-            }
-          },
-          "path": "v1/projects/{scriptId}",
-          "response": {
-            "$ref": "Project"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/script.projects",
-            "https://www.googleapis.com/auth/script.projects.readonly"
-          ],
-          "id": "script.projects.get"
-        },
-        "updateContent": {
-          "httpMethod": "PUT",
-          "parameterOrder": [
-            "scriptId"
-          ],
-          "id": "script.projects.updateContent",
-          "parameters": {
-            "scriptId": {
-              "location": "path",
-              "description": "The script project's Drive ID.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "response": {
-            "$ref": "Content"
-          },
-          "description": "Updates the content of the specified script project. This content is stored as the HEAD version, and is used when the script is executed as a trigger, in the script editor, in add-on preview mode, or as a web app or Apps Script API in development mode. This clears all the existing files in the project.",
-          "flatPath": "v1/projects/{scriptId}/content",
-          "path": "v1/projects/{scriptId}/content",
-          "scopes": [
-            "https://www.googleapis.com/auth/script.projects"
-          ],
-          "request": {
-            "$ref": "Content"
-          }
-        }
-      }
-    }
-  },
-  "batchPath": "batch",
-  "documentationLink": "https://developers.google.com/apps-script/api/",
-  "description": "Manages and executes Google Apps Script projects. ",
-  "canonicalName": "Script",
-  "discoveryVersion": "v1",
-  "title": "Apps Script API",
-  "parameters": {
-    "$.xgafv": {
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "type": "string",
-      "description": "V1 error format.",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ]
     },
-    "key": {
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "location": "query",
-      "type": "string"
-    },
-    "alt": {
-      "default": "json",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "type": "string",
-      "location": "query",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "description": "Data format for response."
-    },
-    "quotaUser": {
-      "type": "string",
-      "location": "query",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters."
-    },
-    "access_token": {
-      "description": "OAuth access token.",
-      "location": "query",
-      "type": "string"
-    },
-    "upload_protocol": {
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "location": "query"
-    },
-    "callback": {
-      "description": "JSONP",
-      "location": "query",
-      "type": "string"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
-    "oauth_token": {
-      "type": "string",
-      "description": "OAuth 2.0 token for the current user.",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "type": "boolean",
-      "default": "true",
-      "description": "Returns response with indentations and line breaks.",
-      "location": "query"
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    }
-  },
-  "mtlsRootUrl": "https://script.mtls.googleapis.com/",
-  "id": "script:v1"
-}
+    "servicePath": "",
+    "title": "Apps Script API",
+    "version": "v1"
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/servicedirectory.v1.json b/googleapiclient/discovery_cache/documents/servicedirectory.v1.json
new file mode 100644
index 0000000..d65482f
--- /dev/null
+++ b/googleapiclient/discovery_cache/documents/servicedirectory.v1.json
@@ -0,0 +1,1234 @@
+{
+  "kind": "discovery#restDescription",
+  "discoveryVersion": "v1",
+  "documentationLink": "https://cloud.google.com/service-directory",
+  "rootUrl": "https://servicedirectory.googleapis.com/",
+  "ownerDomain": "google.com",
+  "protocol": "rest",
+  "revision": "20210203",
+  "id": "servicedirectory:v1",
+  "resources": {
+    "projects": {
+      "resources": {
+        "locations": {
+          "methods": {
+            "list": {
+              "response": {
+                "$ref": "ListLocationsResponse"
+              },
+              "parameters": {
+                "filter": {
+                  "description": "The standard list filter.",
+                  "type": "string",
+                  "location": "query"
+                },
+                "name": {
+                  "location": "path",
+                  "type": "string",
+                  "description": "The resource that owns the locations collection, if applicable.",
+                  "required": true,
+                  "pattern": "^projects/[^/]+$"
+                },
+                "pageToken": {
+                  "location": "query",
+                  "type": "string",
+                  "description": "The standard list page token."
+                },
+                "pageSize": {
+                  "format": "int32",
+                  "location": "query",
+                  "type": "integer",
+                  "description": "The standard list page size."
+                }
+              },
+              "path": "v1/{+name}/locations",
+              "flatPath": "v1/projects/{projectsId}/locations",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "description": "Lists information about the supported locations for this service.",
+              "id": "servicedirectory.projects.locations.list",
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "GET"
+            },
+            "get": {
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "name": {
+                  "description": "Resource name for the location.",
+                  "location": "path",
+                  "pattern": "^projects/[^/]+/locations/[^/]+$",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "id": "servicedirectory.projects.locations.get",
+              "path": "v1/{+name}",
+              "httpMethod": "GET",
+              "response": {
+                "$ref": "Location"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1/projects/{projectsId}/locations/{locationsId}",
+              "description": "Gets information about a location."
+            }
+          },
+          "resources": {
+            "namespaces": {
+              "methods": {
+                "get": {
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}",
+                  "parameters": {
+                    "name": {
+                      "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
+                      "required": true,
+                      "description": "Required. The name of the namespace to retrieve.",
+                      "location": "path",
+                      "type": "string"
+                    }
+                  },
+                  "description": "Gets a namespace.",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "id": "servicedirectory.projects.locations.namespaces.get",
+                  "path": "v1/{+name}",
+                  "httpMethod": "GET",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "response": {
+                    "$ref": "Namespace"
+                  }
+                },
+                "list": {
+                  "id": "servicedirectory.projects.locations.namespaces.list",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "orderBy": {
+                      "type": "string",
+                      "location": "query",
+                      "description": "Optional. The order to list results by. General `order_by` string syntax: ` () (,)` * `` allows value: `name` * `` ascending or descending order by ``. If this is left blank, `asc` is used Note that an empty `order_by` string results in default order, which is order by `name` in ascending order."
+                    },
+                    "filter": {
+                      "type": "string",
+                      "location": "query",
+                      "description": "Optional. The filter to list results by. General `filter` string syntax: ` ()` * `` can be `name` or `labels.` for map field * `` can be `\u003c`, `\u003e`, `\u003c=`, `\u003e=`, `!=`, `=`, `:`. Of which `:` means `HAS`, and is roughly the same as `=` * `` must be the same data type as field * `` can be `AND`, `OR`, `NOT` Examples of valid filters: * `labels.owner` returns namespaces that have a label with the key `owner`, this is the same as `labels:owner` * `labels.owner=sd` returns namespaces that have key/value `owner=sd` * `name\u003eprojects/my-project/locations/us-east1/namespaces/namespace-c` returns namespaces that have name that is alphabetically later than the string, so \"namespace-e\" is returned but \"namespace-a\" is not * `labels.owner!=sd AND labels.foo=bar` returns namespaces that have `owner` in label key but value is not `sd` AND have key/value `foo=bar` * `doesnotexist.foo=bar` returns an empty list. Note that namespace doesn't have a field called \"doesnotexist\". Since the filter does not match any namespaces, it returns no results For more information about filtering, see [API Filtering](https://aip.dev/160)."
+                    },
+                    "pageSize": {
+                      "type": "integer",
+                      "location": "query",
+                      "format": "int32",
+                      "description": "Optional. The maximum number of items to return."
+                    },
+                    "parent": {
+                      "pattern": "^projects/[^/]+/locations/[^/]+$",
+                      "location": "path",
+                      "description": "Required. The resource name of the project and location whose namespaces you'd like to list.",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "pageToken": {
+                      "description": "Optional. The next_page_token value returned from a previous List request, if any.",
+                      "location": "query",
+                      "type": "string"
+                    }
+                  },
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "response": {
+                    "$ref": "ListNamespacesResponse"
+                  },
+                  "path": "v1/{+parent}/namespaces",
+                  "httpMethod": "GET",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces",
+                  "description": "Lists all namespaces."
+                },
+                "delete": {
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "path": "v1/{+name}",
+                  "id": "servicedirectory.projects.locations.namespaces.delete",
+                  "response": {
+                    "$ref": "Empty"
+                  },
+                  "parameters": {
+                    "name": {
+                      "description": "Required. The name of the namespace to delete.",
+                      "required": true,
+                      "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
+                      "location": "path",
+                      "type": "string"
+                    }
+                  },
+                  "httpMethod": "DELETE",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}",
+                  "description": "Deletes a namespace. This also deletes all services and endpoints in the namespace."
+                },
+                "setIamPolicy": {
+                  "httpMethod": "POST",
+                  "parameterOrder": [
+                    "resource"
+                  ],
+                  "id": "servicedirectory.projects.locations.namespaces.setIamPolicy",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "response": {
+                    "$ref": "Policy"
+                  },
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}:setIamPolicy",
+                  "request": {
+                    "$ref": "SetIamPolicyRequest"
+                  },
+                  "description": "Sets the IAM Policy for a resource (namespace or service only).",
+                  "path": "v1/{+resource}:setIamPolicy",
+                  "parameters": {
+                    "resource": {
+                      "location": "path",
+                      "required": true,
+                      "description": "REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field.",
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$"
+                    }
+                  }
+                },
+                "getIamPolicy": {
+                  "parameterOrder": [
+                    "resource"
+                  ],
+                  "httpMethod": "POST",
+                  "description": "Gets the IAM Policy for a resource (namespace or service only).",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}:getIamPolicy",
+                  "response": {
+                    "$ref": "Policy"
+                  },
+                  "path": "v1/{+resource}:getIamPolicy",
+                  "parameters": {
+                    "resource": {
+                      "type": "string",
+                      "description": "REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
+                      "required": true
+                    }
+                  },
+                  "request": {
+                    "$ref": "GetIamPolicyRequest"
+                  },
+                  "id": "servicedirectory.projects.locations.namespaces.getIamPolicy"
+                },
+                "patch": {
+                  "id": "servicedirectory.projects.locations.namespaces.patch",
+                  "path": "v1/{+name}",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "description": "Updates a namespace.",
+                  "response": {
+                    "$ref": "Namespace"
+                  },
+                  "request": {
+                    "$ref": "Namespace"
+                  },
+                  "parameters": {
+                    "name": {
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
+                      "location": "path",
+                      "description": "Immutable. The resource name for the namespace in the format `projects/*/locations/*/namespaces/*`."
+                    },
+                    "updateMask": {
+                      "description": "Required. List of fields to be updated in this request.",
+                      "type": "string",
+                      "location": "query",
+                      "format": "google-fieldmask"
+                    }
+                  },
+                  "httpMethod": "PATCH"
+                },
+                "create": {
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces",
+                  "id": "servicedirectory.projects.locations.namespaces.create",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "httpMethod": "POST",
+                  "description": "Creates a namespace, and returns the new namespace.",
+                  "parameters": {
+                    "parent": {
+                      "location": "path",
+                      "required": true,
+                      "pattern": "^projects/[^/]+/locations/[^/]+$",
+                      "type": "string",
+                      "description": "Required. The resource name of the project and location the namespace will be created in."
+                    },
+                    "namespaceId": {
+                      "description": "Required. The Resource ID must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.",
+                      "type": "string",
+                      "location": "query"
+                    }
+                  },
+                  "path": "v1/{+parent}/namespaces",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "response": {
+                    "$ref": "Namespace"
+                  },
+                  "request": {
+                    "$ref": "Namespace"
+                  }
+                },
+                "testIamPermissions": {
+                  "parameterOrder": [
+                    "resource"
+                  ],
+                  "parameters": {
+                    "resource": {
+                      "required": true,
+                      "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
+                      "location": "path",
+                      "description": "REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field.",
+                      "type": "string"
+                    }
+                  },
+                  "description": "Tests IAM permissions for a resource (namespace or service only).",
+                  "id": "servicedirectory.projects.locations.namespaces.testIamPermissions",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}:testIamPermissions",
+                  "response": {
+                    "$ref": "TestIamPermissionsResponse"
+                  },
+                  "httpMethod": "POST",
+                  "request": {
+                    "$ref": "TestIamPermissionsRequest"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "path": "v1/{+resource}:testIamPermissions"
+                }
+              },
+              "resources": {
+                "services": {
+                  "resources": {
+                    "endpoints": {
+                      "methods": {
+                        "create": {
+                          "id": "servicedirectory.projects.locations.namespaces.services.endpoints.create",
+                          "parameterOrder": [
+                            "parent"
+                          ],
+                          "scopes": [
+                            "https://www.googleapis.com/auth/cloud-platform"
+                          ],
+                          "request": {
+                            "$ref": "Endpoint"
+                          },
+                          "httpMethod": "POST",
+                          "parameters": {
+                            "endpointId": {
+                              "type": "string",
+                              "location": "query",
+                              "description": "Required. The Resource ID must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash."
+                            },
+                            "parent": {
+                              "required": true,
+                              "location": "path",
+                              "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
+                              "type": "string",
+                              "description": "Required. The resource name of the service that this endpoint provides."
+                            }
+                          },
+                          "response": {
+                            "$ref": "Endpoint"
+                          },
+                          "path": "v1/{+parent}/endpoints",
+                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}/endpoints",
+                          "description": "Creates an endpoint, and returns the new endpoint."
+                        },
+                        "delete": {
+                          "id": "servicedirectory.projects.locations.namespaces.services.endpoints.delete",
+                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}/endpoints/{endpointsId}",
+                          "parameterOrder": [
+                            "name"
+                          ],
+                          "httpMethod": "DELETE",
+                          "description": "Deletes an endpoint.",
+                          "path": "v1/{+name}",
+                          "response": {
+                            "$ref": "Empty"
+                          },
+                          "parameters": {
+                            "name": {
+                              "location": "path",
+                              "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+/endpoints/[^/]+$",
+                              "description": "Required. The name of the endpoint to delete.",
+                              "required": true,
+                              "type": "string"
+                            }
+                          },
+                          "scopes": [
+                            "https://www.googleapis.com/auth/cloud-platform"
+                          ]
+                        },
+                        "get": {
+                          "httpMethod": "GET",
+                          "scopes": [
+                            "https://www.googleapis.com/auth/cloud-platform"
+                          ],
+                          "id": "servicedirectory.projects.locations.namespaces.services.endpoints.get",
+                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}/endpoints/{endpointsId}",
+                          "parameterOrder": [
+                            "name"
+                          ],
+                          "response": {
+                            "$ref": "Endpoint"
+                          },
+                          "description": "Gets an endpoint.",
+                          "parameters": {
+                            "name": {
+                              "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+/endpoints/[^/]+$",
+                              "required": true,
+                              "description": "Required. The name of the endpoint to get.",
+                              "location": "path",
+                              "type": "string"
+                            }
+                          },
+                          "path": "v1/{+name}"
+                        },
+                        "list": {
+                          "path": "v1/{+parent}/endpoints",
+                          "parameters": {
+                            "pageSize": {
+                              "description": "Optional. The maximum number of items to return.",
+                              "type": "integer",
+                              "format": "int32",
+                              "location": "query"
+                            },
+                            "pageToken": {
+                              "type": "string",
+                              "location": "query",
+                              "description": "Optional. The next_page_token value returned from a previous List request, if any."
+                            },
+                            "orderBy": {
+                              "description": "Optional. The order to list results by. General `order_by` string syntax: ` () (,)` * `` allows values: `name`, `address`, `port` * `` ascending or descending order by ``. If this is left blank, `asc` is used Note that an empty `order_by` string results in default order, which is order by `name` in ascending order.",
+                              "type": "string",
+                              "location": "query"
+                            },
+                            "parent": {
+                              "description": "Required. The resource name of the service whose endpoints you'd like to list.",
+                              "location": "path",
+                              "type": "string",
+                              "required": true,
+                              "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$"
+                            },
+                            "filter": {
+                              "location": "query",
+                              "description": "Optional. The filter to list results by. General `filter` string syntax: ` ()` * `` can be `name`, `address`, `port`, or `annotations.` for map field * `` can be `\u003c`, `\u003e`, `\u003c=`, `\u003e=`, `!=`, `=`, `:`. Of which `:` means `HAS`, and is roughly the same as `=` * `` must be the same data type as field * `` can be `AND`, `OR`, `NOT` Examples of valid filters: * `annotations.owner` returns endpoints that have a annotation with the key `owner`, this is the same as `annotations:owner` * `annotations.protocol=gRPC` returns endpoints that have key/value `protocol=gRPC` * `address=192.108.1.105` returns endpoints that have this address * `port\u003e8080` returns endpoints that have port number larger than 8080 * `name\u003eprojects/my-project/locations/us-east1/namespaces/my-namespace/services/my-service/endpoints/endpoint-c` returns endpoints that have name that is alphabetically later than the string, so \"endpoint-e\" is returned but \"endpoint-a\" is not * `annotations.owner!=sd AND annotations.foo=bar` returns endpoints that have `owner` in annotation key but value is not `sd` AND have key/value `foo=bar` * `doesnotexist.foo=bar` returns an empty list. Note that endpoint doesn't have a field called \"doesnotexist\". Since the filter does not match any endpoints, it returns no results For more information about filtering, see [API Filtering](https://aip.dev/160).",
+                              "type": "string"
+                            }
+                          },
+                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}/endpoints",
+                          "response": {
+                            "$ref": "ListEndpointsResponse"
+                          },
+                          "httpMethod": "GET",
+                          "description": "Lists all endpoints.",
+                          "id": "servicedirectory.projects.locations.namespaces.services.endpoints.list",
+                          "parameterOrder": [
+                            "parent"
+                          ],
+                          "scopes": [
+                            "https://www.googleapis.com/auth/cloud-platform"
+                          ]
+                        },
+                        "patch": {
+                          "response": {
+                            "$ref": "Endpoint"
+                          },
+                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}/endpoints/{endpointsId}",
+                          "path": "v1/{+name}",
+                          "httpMethod": "PATCH",
+                          "description": "Updates an endpoint.",
+                          "request": {
+                            "$ref": "Endpoint"
+                          },
+                          "parameters": {
+                            "name": {
+                              "location": "path",
+                              "type": "string",
+                              "required": true,
+                              "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+/endpoints/[^/]+$",
+                              "description": "Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`."
+                            },
+                            "updateMask": {
+                              "location": "query",
+                              "format": "google-fieldmask",
+                              "type": "string",
+                              "description": "Required. List of fields to be updated in this request."
+                            }
+                          },
+                          "scopes": [
+                            "https://www.googleapis.com/auth/cloud-platform"
+                          ],
+                          "id": "servicedirectory.projects.locations.namespaces.services.endpoints.patch",
+                          "parameterOrder": [
+                            "name"
+                          ]
+                        }
+                      }
+                    }
+                  },
+                  "methods": {
+                    "delete": {
+                      "parameters": {
+                        "name": {
+                          "required": true,
+                          "description": "Required. The name of the service to delete.",
+                          "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
+                          "type": "string",
+                          "location": "path"
+                        }
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
+                      "description": "Deletes a service. This also deletes all endpoints associated with the service.",
+                      "parameterOrder": [
+                        "name"
+                      ],
+                      "path": "v1/{+name}",
+                      "id": "servicedirectory.projects.locations.namespaces.services.delete",
+                      "response": {
+                        "$ref": "Empty"
+                      },
+                      "httpMethod": "DELETE",
+                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}"
+                    },
+                    "list": {
+                      "parameters": {
+                        "parent": {
+                          "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
+                          "required": true,
+                          "location": "path",
+                          "type": "string",
+                          "description": "Required. The resource name of the namespace whose services you'd like to list."
+                        },
+                        "pageSize": {
+                          "description": "Optional. The maximum number of items to return.",
+                          "location": "query",
+                          "type": "integer",
+                          "format": "int32"
+                        },
+                        "filter": {
+                          "location": "query",
+                          "description": "Optional. The filter to list results by. General `filter` string syntax: ` ()` * `` can be `name` or `annotations.` for map field * `` can be `\u003c`, `\u003e`, `\u003c=`, `\u003e=`, `!=`, `=`, `:`. Of which `:` means `HAS`, and is roughly the same as `=` * `` must be the same data type as field * `` can be `AND`, `OR`, `NOT` Examples of valid filters: * `annotations.owner` returns services that have a annotation with the key `owner`, this is the same as `annotations:owner` * `annotations.protocol=gRPC` returns services that have key/value `protocol=gRPC` * `name\u003eprojects/my-project/locations/us-east1/namespaces/my-namespace/services/service-c` returns services that have name that is alphabetically later than the string, so \"service-e\" is returned but \"service-a\" is not * `annotations.owner!=sd AND annotations.foo=bar` returns services that have `owner` in annotation key but value is not `sd` AND have key/value `foo=bar` * `doesnotexist.foo=bar` returns an empty list. Note that service doesn't have a field called \"doesnotexist\". Since the filter does not match any services, it returns no results For more information about filtering, see [API Filtering](https://aip.dev/160).",
+                          "type": "string"
+                        },
+                        "pageToken": {
+                          "description": "Optional. The next_page_token value returned from a previous List request, if any.",
+                          "location": "query",
+                          "type": "string"
+                        },
+                        "orderBy": {
+                          "description": "Optional. The order to list results by. General `order_by` string syntax: ` () (,)` * `` allows value: `name` * `` ascending or descending order by ``. If this is left blank, `asc` is used Note that an empty `order_by` string results in default order, which is order by `name` in ascending order.",
+                          "type": "string",
+                          "location": "query"
+                        }
+                      },
+                      "path": "v1/{+parent}/services",
+                      "parameterOrder": [
+                        "parent"
+                      ],
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
+                      "description": "Lists all services belonging to a namespace.",
+                      "httpMethod": "GET",
+                      "response": {
+                        "$ref": "ListServicesResponse"
+                      },
+                      "id": "servicedirectory.projects.locations.namespaces.services.list",
+                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services"
+                    },
+                    "get": {
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
+                      "path": "v1/{+name}",
+                      "parameters": {
+                        "name": {
+                          "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
+                          "location": "path",
+                          "type": "string",
+                          "description": "Required. The name of the service to get.",
+                          "required": true
+                        }
+                      },
+                      "id": "servicedirectory.projects.locations.namespaces.services.get",
+                      "description": "Gets a service.",
+                      "response": {
+                        "$ref": "Service"
+                      },
+                      "parameterOrder": [
+                        "name"
+                      ],
+                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}",
+                      "httpMethod": "GET"
+                    },
+                    "create": {
+                      "response": {
+                        "$ref": "Service"
+                      },
+                      "id": "servicedirectory.projects.locations.namespaces.services.create",
+                      "parameters": {
+                        "serviceId": {
+                          "location": "query",
+                          "description": "Required. The Resource ID must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.",
+                          "type": "string"
+                        },
+                        "parent": {
+                          "type": "string",
+                          "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
+                          "description": "Required. The resource name of the namespace this service will belong to.",
+                          "required": true,
+                          "location": "path"
+                        }
+                      },
+                      "request": {
+                        "$ref": "Service"
+                      },
+                      "parameterOrder": [
+                        "parent"
+                      ],
+                      "httpMethod": "POST",
+                      "description": "Creates a service, and returns the new service.",
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
+                      "path": "v1/{+parent}/services",
+                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services"
+                    },
+                    "testIamPermissions": {
+                      "parameterOrder": [
+                        "resource"
+                      ],
+                      "request": {
+                        "$ref": "TestIamPermissionsRequest"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
+                      "path": "v1/{+resource}:testIamPermissions",
+                      "response": {
+                        "$ref": "TestIamPermissionsResponse"
+                      },
+                      "description": "Tests IAM permissions for a resource (namespace or service only).",
+                      "id": "servicedirectory.projects.locations.namespaces.services.testIamPermissions",
+                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}:testIamPermissions",
+                      "httpMethod": "POST",
+                      "parameters": {
+                        "resource": {
+                          "required": true,
+                          "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
+                          "type": "string",
+                          "description": "REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field.",
+                          "location": "path"
+                        }
+                      }
+                    },
+                    "patch": {
+                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}",
+                      "parameters": {
+                        "updateMask": {
+                          "description": "Required. List of fields to be updated in this request.",
+                          "format": "google-fieldmask",
+                          "location": "query",
+                          "type": "string"
+                        },
+                        "name": {
+                          "required": true,
+                          "location": "path",
+                          "type": "string",
+                          "description": "Immutable. The resource name for the service in the format `projects/*/locations/*/namespaces/*/services/*`.",
+                          "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$"
+                        }
+                      },
+                      "id": "servicedirectory.projects.locations.namespaces.services.patch",
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
+                      "path": "v1/{+name}",
+                      "response": {
+                        "$ref": "Service"
+                      },
+                      "description": "Updates a service.",
+                      "request": {
+                        "$ref": "Service"
+                      },
+                      "httpMethod": "PATCH",
+                      "parameterOrder": [
+                        "name"
+                      ]
+                    },
+                    "getIamPolicy": {
+                      "httpMethod": "POST",
+                      "path": "v1/{+resource}:getIamPolicy",
+                      "parameters": {
+                        "resource": {
+                          "type": "string",
+                          "required": true,
+                          "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
+                          "description": "REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field.",
+                          "location": "path"
+                        }
+                      },
+                      "request": {
+                        "$ref": "GetIamPolicyRequest"
+                      },
+                      "parameterOrder": [
+                        "resource"
+                      ],
+                      "description": "Gets the IAM Policy for a resource (namespace or service only).",
+                      "id": "servicedirectory.projects.locations.namespaces.services.getIamPolicy",
+                      "response": {
+                        "$ref": "Policy"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
+                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}:getIamPolicy"
+                    },
+                    "setIamPolicy": {
+                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}:setIamPolicy",
+                      "parameterOrder": [
+                        "resource"
+                      ],
+                      "id": "servicedirectory.projects.locations.namespaces.services.setIamPolicy",
+                      "path": "v1/{+resource}:setIamPolicy",
+                      "request": {
+                        "$ref": "SetIamPolicyRequest"
+                      },
+                      "description": "Sets the IAM Policy for a resource (namespace or service only).",
+                      "parameters": {
+                        "resource": {
+                          "location": "path",
+                          "description": "REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field.",
+                          "type": "string",
+                          "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
+                          "required": true
+                        }
+                      },
+                      "httpMethod": "POST",
+                      "response": {
+                        "$ref": "Policy"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ]
+                    },
+                    "resolve": {
+                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}:resolve",
+                      "parameterOrder": [
+                        "name"
+                      ],
+                      "id": "servicedirectory.projects.locations.namespaces.services.resolve",
+                      "httpMethod": "POST",
+                      "response": {
+                        "$ref": "ResolveServiceResponse"
+                      },
+                      "parameters": {
+                        "name": {
+                          "description": "Required. The name of the service to resolve.",
+                          "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
+                          "required": true,
+                          "type": "string",
+                          "location": "path"
+                        }
+                      },
+                      "description": "Returns a service and its associated endpoints. Resolving a service is not considered an active developer method.",
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
+                      "request": {
+                        "$ref": "ResolveServiceRequest"
+                      },
+                      "path": "v1/{+name}:resolve"
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  },
+  "ownerName": "Google",
+  "description": "Service Directory is a platform for discovering, publishing, and connecting services. ",
+  "servicePath": "",
+  "version_module": true,
+  "basePath": "",
+  "canonicalName": "Service Directory",
+  "title": "Service Directory API",
+  "icons": {
+    "x32": "http://www.google.com/images/icons/product/search-32.gif",
+    "x16": "http://www.google.com/images/icons/product/search-16.gif"
+  },
+  "parameters": {
+    "callback": {
+      "type": "string",
+      "location": "query",
+      "description": "JSONP"
+    },
+    "fields": {
+      "location": "query",
+      "type": "string",
+      "description": "Selector specifying which fields to include in a partial response."
+    },
+    "$.xgafv": {
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "description": "V1 error format.",
+      "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "type": "string"
+    },
+    "access_token": {
+      "location": "query",
+      "type": "string",
+      "description": "OAuth access token."
+    },
+    "prettyPrint": {
+      "description": "Returns response with indentations and line breaks.",
+      "default": "true",
+      "type": "boolean",
+      "location": "query"
+    },
+    "uploadType": {
+      "location": "query",
+      "type": "string",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
+    },
+    "key": {
+      "type": "string",
+      "location": "query",
+      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token."
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "location": "query",
+      "type": "string"
+    },
+    "alt": {
+      "default": "json",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ],
+      "location": "query",
+      "description": "Data format for response.",
+      "type": "string",
+      "enumDescriptions": [
+        "Responses with Content-Type of application/json",
+        "Media download with context-dependent Content-Type",
+        "Responses with Content-Type of application/x-protobuf"
+      ]
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "location": "query",
+      "type": "string"
+    },
+    "quotaUser": {
+      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+      "location": "query",
+      "type": "string"
+    }
+  },
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/cloud-platform": {
+          "description": "View and manage your data across Google Cloud Platform services"
+        }
+      }
+    }
+  },
+  "mtlsRootUrl": "https://servicedirectory.mtls.googleapis.com/",
+  "name": "servicedirectory",
+  "batchPath": "batch",
+  "baseUrl": "https://servicedirectory.googleapis.com/",
+  "fullyEncodeReservedExpansion": true,
+  "schemas": {
+    "SetIamPolicyRequest": {
+      "id": "SetIamPolicyRequest",
+      "type": "object",
+      "properties": {
+        "policy": {
+          "$ref": "Policy",
+          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them."
+        }
+      },
+      "description": "Request message for `SetIamPolicy` method."
+    },
+    "Endpoint": {
+      "properties": {
+        "port": {
+          "format": "int32",
+          "description": "Optional. Service Directory rejects values outside of `[0, 65535]`.",
+          "type": "integer"
+        },
+        "annotations": {
+          "description": "Optional. Annotations for the endpoint. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/) Annotations that fails to meet these requirements are rejected. * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.",
+          "additionalProperties": {
+            "type": "string"
+          },
+          "type": "object"
+        },
+        "address": {
+          "description": "Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.",
+          "type": "string"
+        },
+        "name": {
+          "type": "string",
+          "description": "Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`."
+        }
+      },
+      "description": "An individual endpoint that provides a service. The service must already exist to create an endpoint.",
+      "type": "object",
+      "id": "Endpoint"
+    },
+    "Location": {
+      "description": "A resource that represents Google Cloud Platform location.",
+      "type": "object",
+      "id": "Location",
+      "properties": {
+        "displayName": {
+          "type": "string",
+          "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\"."
+        },
+        "metadata": {
+          "additionalProperties": {
+            "type": "any",
+            "description": "Properties of the object. Contains field @type with type URL."
+          },
+          "description": "Service-specific metadata. For example the available capacity at the given location.",
+          "type": "object"
+        },
+        "name": {
+          "description": "Resource name for the location, which may vary between implementations. For example: `\"projects/example-project/locations/us-east1\"`",
+          "type": "string"
+        },
+        "labels": {
+          "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}",
+          "type": "object",
+          "additionalProperties": {
+            "type": "string"
+          }
+        },
+        "locationId": {
+          "type": "string",
+          "description": "The canonical id for this location. For example: `\"us-east1\"`."
+        }
+      }
+    },
+    "GetIamPolicyRequest": {
+      "properties": {
+        "options": {
+          "$ref": "GetPolicyOptions",
+          "description": "OPTIONAL: A `GetPolicyOptions` object for specifying options to `GetIamPolicy`."
+        }
+      },
+      "description": "Request message for `GetIamPolicy` method.",
+      "type": "object",
+      "id": "GetIamPolicyRequest"
+    },
+    "ResolveServiceRequest": {
+      "type": "object",
+      "description": "The request message for LookupService.ResolveService. Looks up a service by its name, returns the service and its endpoints.",
+      "id": "ResolveServiceRequest",
+      "properties": {
+        "maxEndpoints": {
+          "description": "Optional. The maximum number of endpoints to return. Defaults to 25. Maximum is 100. If a value less than one is specified, the Default is used. If a value greater than the Maximum is specified, the Maximum is used.",
+          "type": "integer",
+          "format": "int32"
+        },
+        "endpointFilter": {
+          "type": "string",
+          "description": "Optional. The filter applied to the endpoints of the resolved service. General `filter` string syntax: ` ()` * `` can be `name`, `address`, `port`, or `annotations.` for map field * `` can be `\u003c`, `\u003e`, `\u003c=`, `\u003e=`, `!=`, `=`, `:`. Of which `:` means `HAS`, and is roughly the same as `=` * `` must be the same data type as field * `` can be `AND`, `OR`, `NOT` Examples of valid filters: * `annotations.owner` returns endpoints that have a annotation with the key `owner`, this is the same as `annotations:owner` * `annotations.protocol=gRPC` returns endpoints that have key/value `protocol=gRPC` * `address=192.108.1.105` returns endpoints that have this address * `port\u003e8080` returns endpoints that have port number larger than 8080 * `name\u003eprojects/my-project/locations/us-east1/namespaces/my-namespace/services/my-service/endpoints/endpoint-c` returns endpoints that have name that is alphabetically later than the string, so \"endpoint-e\" is returned but \"endpoint-a\" is not * `annotations.owner!=sd AND annotations.foo=bar` returns endpoints that have `owner` in annotation key but value is not `sd` AND have key/value `foo=bar` * `doesnotexist.foo=bar` returns an empty list. Note that endpoint doesn't have a field called \"doesnotexist\". Since the filter does not match any endpoint, it returns no results For more information about filtering, see [API Filtering](https://aip.dev/160)."
+        }
+      }
+    },
+    "ListServicesResponse": {
+      "properties": {
+        "nextPageToken": {
+          "description": "Token to retrieve the next page of results, or empty if there are no more results in the list.",
+          "type": "string"
+        },
+        "services": {
+          "description": "The list of services.",
+          "type": "array",
+          "items": {
+            "$ref": "Service"
+          }
+        }
+      },
+      "type": "object",
+      "id": "ListServicesResponse",
+      "description": "The response message for RegistrationService.ListServices."
+    },
+    "ListLocationsResponse": {
+      "properties": {
+        "nextPageToken": {
+          "description": "The standard List next-page token.",
+          "type": "string"
+        },
+        "locations": {
+          "type": "array",
+          "description": "A list of locations that matches the specified filter in the request.",
+          "items": {
+            "$ref": "Location"
+          }
+        }
+      },
+      "type": "object",
+      "description": "The response message for Locations.ListLocations.",
+      "id": "ListLocationsResponse"
+    },
+    "TestIamPermissionsResponse": {
+      "type": "object",
+      "id": "TestIamPermissionsResponse",
+      "description": "Response message for `TestIamPermissions` method.",
+      "properties": {
+        "permissions": {
+          "type": "array",
+          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is allowed.",
+          "items": {
+            "type": "string"
+          }
+        }
+      }
+    },
+    "TestIamPermissionsRequest": {
+      "properties": {
+        "permissions": {
+          "description": "The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or 'storage.*') are not allowed. For more information see [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "TestIamPermissionsRequest",
+      "type": "object",
+      "description": "Request message for `TestIamPermissions` method."
+    },
+    "Binding": {
+      "type": "object",
+      "description": "Associates `members` with a `role`.",
+      "properties": {
+        "role": {
+          "description": "Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.",
+          "type": "string"
+        },
+        "members": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. "
+        },
+        "condition": {
+          "description": "The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
+          "$ref": "Expr"
+        }
+      },
+      "id": "Binding"
+    },
+    "ResolveServiceResponse": {
+      "properties": {
+        "service": {
+          "$ref": "Service"
+        }
+      },
+      "description": "The response message for LookupService.ResolveService.",
+      "type": "object",
+      "id": "ResolveServiceResponse"
+    },
+    "GetPolicyOptions": {
+      "description": "Encapsulates settings provided to GetIamPolicy.",
+      "type": "object",
+      "id": "GetPolicyOptions",
+      "properties": {
+        "requestedPolicyVersion": {
+          "format": "int32",
+          "type": "integer",
+          "description": "Optional. The policy format version to be returned. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional bindings must specify version 3. Policies without any conditional bindings may specify any valid value or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)."
+        }
+      }
+    },
+    "Service": {
+      "description": "An individual service. A service contains a name and optional metadata. A service must exist before endpoints can be added to it.",
+      "id": "Service",
+      "type": "object",
+      "properties": {
+        "name": {
+          "type": "string",
+          "description": "Immutable. The resource name for the service in the format `projects/*/locations/*/namespaces/*/services/*`."
+        },
+        "annotations": {
+          "type": "object",
+          "description": "Optional. Annotations for the service. This data can be consumed by service clients. Restrictions: * The entire annotations dictionary may contain up to 512 characters, spread accoss all key-value pairs. Annotations that go beyond this limit are rejected * Valid annotation keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Annotations that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system annotations managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `metadata` field in the v1beta1 API. They have the same syntax and read/write to the same location in Service Directory.",
+          "additionalProperties": {
+            "type": "string"
+          }
+        },
+        "endpoints": {
+          "readOnly": true,
+          "description": "Output only. Endpoints associated with this service. Returned on LookupService.ResolveService. Control plane clients should use RegistrationService.ListEndpoints.",
+          "type": "array",
+          "items": {
+            "$ref": "Endpoint"
+          }
+        }
+      }
+    },
+    "Policy": {
+      "id": "Policy",
+      "properties": {
+        "version": {
+          "format": "int32",
+          "description": "Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
+          "type": "integer"
+        },
+        "etag": {
+          "description": "`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.",
+          "format": "byte",
+          "type": "string"
+        },
+        "bindings": {
+          "items": {
+            "$ref": "Binding"
+          },
+          "description": "Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.",
+          "type": "array"
+        }
+      },
+      "type": "object",
+      "description": "An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { \"bindings\": [ { \"role\": \"roles/resourcemanager.organizationAdmin\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\" ] }, { \"role\": \"roles/resourcemanager.organizationViewer\", \"members\": [ \"user:eve@example.com\" ], \"condition\": { \"title\": \"expirable access\", \"description\": \"Does not grant access after Sep 2020\", \"expression\": \"request.time \u003c timestamp('2020-10-01T00:00:00.000Z')\", } } ], \"etag\": \"BwWWja0YfJA=\", \"version\": 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time \u003c timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/)."
+    },
+    "Empty": {
+      "properties": {},
+      "id": "Empty",
+      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
+      "type": "object"
+    },
+    "ListNamespacesResponse": {
+      "type": "object",
+      "id": "ListNamespacesResponse",
+      "properties": {
+        "nextPageToken": {
+          "type": "string",
+          "description": "Token to retrieve the next page of results, or empty if there are no more results in the list."
+        },
+        "namespaces": {
+          "type": "array",
+          "items": {
+            "$ref": "Namespace"
+          },
+          "description": "The list of namespaces."
+        }
+      },
+      "description": "The response message for RegistrationService.ListNamespaces."
+    },
+    "Namespace": {
+      "type": "object",
+      "description": "A container for services. Namespaces allow administrators to group services together and define permissions for a collection of services.",
+      "properties": {
+        "name": {
+          "description": "Immutable. The resource name for the namespace in the format `projects/*/locations/*/namespaces/*`.",
+          "type": "string"
+        },
+        "labels": {
+          "type": "object",
+          "description": "Optional. Resource labels associated with this namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.",
+          "additionalProperties": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "Namespace"
+    },
+    "ListEndpointsResponse": {
+      "id": "ListEndpointsResponse",
+      "description": "The response message for RegistrationService.ListEndpoints.",
+      "type": "object",
+      "properties": {
+        "endpoints": {
+          "items": {
+            "$ref": "Endpoint"
+          },
+          "type": "array",
+          "description": "The list of endpoints."
+        },
+        "nextPageToken": {
+          "type": "string",
+          "description": "Token to retrieve the next page of results, or empty if there are no more results in the list."
+        }
+      }
+    },
+    "Expr": {
+      "type": "object",
+      "properties": {
+        "title": {
+          "type": "string",
+          "description": "Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression."
+        },
+        "expression": {
+          "description": "Textual representation of an expression in Common Expression Language syntax.",
+          "type": "string"
+        },
+        "location": {
+          "description": "Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.",
+          "type": "string"
+        },
+        "description": {
+          "type": "string",
+          "description": "Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI."
+        }
+      },
+      "id": "Expr",
+      "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() \u003c 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information."
+    }
+  },
+  "version": "v1"
+}
diff --git a/googleapiclient/discovery_cache/documents/servicedirectory.v1beta1.json b/googleapiclient/discovery_cache/documents/servicedirectory.v1beta1.json
index a4cf4bb..ba63e4b 100644
--- a/googleapiclient/discovery_cache/documents/servicedirectory.v1beta1.json
+++ b/googleapiclient/discovery_cache/documents/servicedirectory.v1beta1.json
@@ -1,1234 +1,1234 @@
 {
-  "discoveryVersion": "v1",
-  "schemas": {
-    "GetIamPolicyRequest": {
-      "id": "GetIamPolicyRequest",
-      "type": "object",
-      "description": "Request message for `GetIamPolicy` method.",
-      "properties": {
-        "options": {
-          "$ref": "GetPolicyOptions",
-          "description": "OPTIONAL: A `GetPolicyOptions` object for specifying options to `GetIamPolicy`."
-        }
-      }
-    },
-    "ListEndpointsResponse": {
-      "description": "The response message for RegistrationService.ListEndpoints.",
-      "id": "ListEndpointsResponse",
-      "properties": {
-        "nextPageToken": {
-          "description": "Token to retrieve the next page of results, or empty if there are no more results in the list.",
-          "type": "string"
-        },
-        "endpoints": {
-          "type": "array",
-          "items": {
-            "$ref": "Endpoint"
-          },
-          "description": "The list of endpoints."
-        }
-      },
-      "type": "object"
-    },
-    "ResolveServiceResponse": {
-      "description": "The response message for LookupService.ResolveService.",
-      "id": "ResolveServiceResponse",
-      "properties": {
-        "service": {
-          "$ref": "Service"
-        }
-      },
-      "type": "object"
-    },
-    "ListNamespacesResponse": {
-      "properties": {
-        "nextPageToken": {
-          "description": "Token to retrieve the next page of results, or empty if there are no more results in the list.",
-          "type": "string"
-        },
-        "namespaces": {
-          "type": "array",
-          "items": {
-            "$ref": "Namespace"
-          },
-          "description": "The list of namespaces."
-        }
-      },
-      "id": "ListNamespacesResponse",
-      "type": "object",
-      "description": "The response message for RegistrationService.ListNamespaces."
-    },
-    "Binding": {
-      "properties": {
-        "members": {
-          "items": {
-            "type": "string"
-          },
-          "description": "Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. ",
-          "type": "array"
-        },
-        "condition": {
-          "$ref": "Expr",
-          "description": "The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)."
-        },
-        "role": {
-          "description": "Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Associates `members` with a `role`.",
-      "id": "Binding"
-    },
-    "Policy": {
-      "type": "object",
-      "properties": {
-        "version": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)."
-        },
-        "etag": {
-          "description": "`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.",
-          "format": "byte",
-          "type": "string"
-        },
-        "bindings": {
-          "type": "array",
-          "description": "Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.",
-          "items": {
-            "$ref": "Binding"
-          }
-        }
-      },
-      "description": "An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { \"bindings\": [ { \"role\": \"roles/resourcemanager.organizationAdmin\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\" ] }, { \"role\": \"roles/resourcemanager.organizationViewer\", \"members\": [ \"user:eve@example.com\" ], \"condition\": { \"title\": \"expirable access\", \"description\": \"Does not grant access after Sep 2020\", \"expression\": \"request.time \u003c timestamp('2020-10-01T00:00:00.000Z')\", } } ], \"etag\": \"BwWWja0YfJA=\", \"version\": 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time \u003c timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).",
-      "id": "Policy"
-    },
-    "Namespace": {
-      "type": "object",
-      "description": "A container for services. Namespaces allow administrators to group services together and define permissions for a collection of services.",
-      "properties": {
-        "labels": {
-          "description": "Optional. Resource labels associated with this Namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.",
-          "additionalProperties": {
-            "type": "string"
-          },
-          "type": "object"
-        },
-        "name": {
-          "type": "string",
-          "description": "Immutable. The resource name for the namespace in the format 'projects/*/locations/*/namespaces/*'."
-        }
-      },
-      "id": "Namespace"
-    },
-    "GetPolicyOptions": {
-      "description": "Encapsulates settings provided to GetIamPolicy.",
-      "type": "object",
-      "properties": {
-        "requestedPolicyVersion": {
-          "description": "Optional. The policy format version to be returned. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional bindings must specify version 3. Policies without any conditional bindings may specify any valid value or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
-          "type": "integer",
-          "format": "int32"
-        }
-      },
-      "id": "GetPolicyOptions"
-    },
-    "SetIamPolicyRequest": {
-      "properties": {
-        "policy": {
-          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them.",
-          "$ref": "Policy"
-        }
-      },
-      "description": "Request message for `SetIamPolicy` method.",
-      "id": "SetIamPolicyRequest",
-      "type": "object"
-    },
-    "Empty": {
-      "type": "object",
-      "id": "Empty",
-      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
-      "properties": {}
-    },
-    "TestIamPermissionsRequest": {
-      "id": "TestIamPermissionsRequest",
-      "description": "Request message for `TestIamPermissions` method.",
-      "type": "object",
-      "properties": {
-        "permissions": {
-          "description": "The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or 'storage.*') are not allowed. For more information see [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        }
-      }
-    },
-    "Endpoint": {
-      "description": "An individual endpoint that provides a service. The service must already exist to create an endpoint.",
-      "id": "Endpoint",
-      "properties": {
-        "address": {
-          "description": "Optional. An IPv4 or IPv6 address. Service Directory will reject bad addresses like: \"8.8.8\" \"8.8.8.8:53\" \"test:bad:address\" \"[::1]\" \"[::1]:8080\" Limited to 45 characters.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "Immutable. The resource name for the endpoint in the format 'projects/*/locations/*/namespaces/*/services/*/endpoints/*'."
-        },
-        "port": {
-          "description": "Optional. Service Directory will reject values outside of [0, 65535].",
-          "format": "int32",
-          "type": "integer"
-        },
-        "metadata": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The '(*.)google.com/' and '(*.)googleapis.com/' prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.",
-          "type": "object"
-        }
-      },
-      "type": "object"
-    },
-    "Location": {
-      "description": "A resource that represents Google Cloud Platform location.",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "Resource name for the location, which may vary between implementations. For example: `\"projects/example-project/locations/us-east1\"`",
-          "type": "string"
-        },
-        "metadata": {
-          "description": "Service-specific metadata. For example the available capacity at the given location.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          }
-        },
-        "locationId": {
-          "description": "The canonical id for this location. For example: `\"us-east1\"`.",
-          "type": "string"
-        },
-        "displayName": {
-          "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\".",
-          "type": "string"
-        },
-        "labels": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}"
-        }
-      },
-      "id": "Location"
-    },
-    "ListServicesResponse": {
-      "description": "The response message for RegistrationService.ListServices.",
-      "id": "ListServicesResponse",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "Token to retrieve the next page of results, or empty if there are no more results in the list."
-        },
-        "services": {
-          "type": "array",
-          "items": {
-            "$ref": "Service"
-          },
-          "description": "The list of services."
-        }
-      },
-      "type": "object"
-    },
-    "Service": {
-      "description": "An individual service. A service contains a name and optional metadata. A service must exist before endpoints can be added to it.",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Immutable. The resource name for the service in the format 'projects/*/locations/*/namespaces/*/services/*'."
-        },
-        "endpoints": {
-          "description": "Output only. Endpoints associated with this service. Returned on LookupService.Resolve. Control plane clients should use RegistrationService.ListEndpoints.",
-          "type": "array",
-          "items": {
-            "$ref": "Endpoint"
-          },
-          "readOnly": true
-        },
-        "metadata": {
-          "description": "Optional. Metadata for the service. This data can be consumed by service clients. Restrictions: - The entire metadata dictionary may contain up to 2000 characters, spread accoss all key-value pairs. Metadata that goes beyond any these limits will be rejected. - Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements will be rejected. - The '(*.)google.com/' and '(*.)googleapis.com/' prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries will be silently ignored by the system.",
-          "additionalProperties": {
-            "type": "string"
-          },
-          "type": "object"
-        }
-      },
-      "id": "Service",
-      "type": "object"
-    },
-    "ResolveServiceRequest": {
-      "id": "ResolveServiceRequest",
-      "type": "object",
-      "description": "The request message for LookupService.ResolveService. Looks up a service by its name, returns the service and its endpoints.",
-      "properties": {
-        "endpointFilter": {
-          "type": "string",
-          "description": "Optional. The filter applied to the endpoints of the resolved service. General filter string syntax: () can be \"name\" or \"metadata.\" for map field. can be \"\u003c, \u003e, \u003c=, \u003e=, !=, =, :\". Of which \":\" means HAS and is roughly the same as \"=\". must be the same data type as the field. can be \"AND, OR, NOT\". Examples of valid filters: * \"metadata.owner\" returns Endpoints that have a label with the key \"owner\", this is the same as \"metadata:owner\" * \"metadata.protocol=gRPC\" returns Endpoints that have key/value \"protocol=gRPC\" * \"metadata.owner!=sd AND metadata.foo=bar\" returns Endpoints that have \"owner\" field in metadata with a value that is not \"sd\" AND have the key/value foo=bar."
-        },
-        "maxEndpoints": {
-          "description": "Optional. The maximum number of endpoints to return. Defaults to 25. Maximum is 100. If a value less than one is specified, the Default is used. If a value greater than the Maximum is specified, the Maximum is used.",
-          "format": "int32",
-          "type": "integer"
-        }
-      }
-    },
-    "Expr": {
-      "type": "object",
-      "id": "Expr",
-      "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() \u003c 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.",
-      "properties": {
-        "location": {
-          "description": "Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.",
-          "type": "string"
-        },
-        "title": {
-          "description": "Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.",
-          "type": "string"
-        },
-        "description": {
-          "type": "string",
-          "description": "Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI."
-        },
-        "expression": {
-          "type": "string",
-          "description": "Textual representation of an expression in Common Expression Language syntax."
-        }
-      }
-    },
-    "ListLocationsResponse": {
-      "description": "The response message for Locations.ListLocations.",
-      "id": "ListLocationsResponse",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "description": "The standard List next-page token.",
-          "type": "string"
-        },
-        "locations": {
-          "description": "A list of locations that matches the specified filter in the request.",
-          "items": {
-            "$ref": "Location"
-          },
-          "type": "array"
-        }
-      }
-    },
-    "TestIamPermissionsResponse": {
-      "properties": {
-        "permissions": {
-          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is allowed.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "TestIamPermissionsResponse",
-      "type": "object",
-      "description": "Response message for `TestIamPermissions` method."
-    }
-  },
-  "ownerDomain": "google.com",
-  "parameters": {
-    "access_token": {
-      "description": "OAuth access token.",
-      "location": "query",
-      "type": "string"
-    },
-    "fields": {
-      "type": "string",
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response."
-    },
-    "quotaUser": {
-      "type": "string",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "location": "query"
-    },
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
-    },
-    "$.xgafv": {
-      "type": "string",
-      "description": "V1 error format.",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "location": "query",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ]
-    },
-    "uploadType": {
-      "type": "string",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "type": "boolean",
-      "location": "query",
-      "default": "true",
-      "description": "Returns response with indentations and line breaks."
-    },
-    "oauth_token": {
-      "type": "string",
-      "description": "OAuth 2.0 token for the current user.",
-      "location": "query"
-    },
-    "alt": {
-      "description": "Data format for response.",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "location": "query",
-      "type": "string",
-      "default": "json",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ]
-    },
-    "key": {
-      "type": "string",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "location": "query"
-    }
-  },
-  "servicePath": "",
-  "version": "v1beta1",
-  "resources": {
-    "projects": {
-      "resources": {
-        "locations": {
-          "resources": {
-            "namespaces": {
-              "methods": {
-                "create": {
-                  "path": "v1beta1/{+parent}/namespaces",
-                  "httpMethod": "POST",
-                  "request": {
-                    "$ref": "Namespace"
-                  },
-                  "parameters": {
-                    "parent": {
-                      "required": true,
-                      "location": "path",
-                      "type": "string",
-                      "description": "Required. The resource name of the project and location the namespace will be created in.",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$"
-                    },
-                    "namespaceId": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "Required. The Resource ID must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash."
-                    }
-                  },
-                  "description": "Creates a namespace, and returns the new Namespace.",
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "response": {
-                    "$ref": "Namespace"
-                  },
-                  "id": "servicedirectory.projects.locations.namespaces.create",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ]
-                },
-                "list": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "path": "v1beta1/{+parent}/namespaces",
-                  "parameters": {
-                    "orderBy": {
-                      "location": "query",
-                      "description": "Optional. The order to list result by. General order by string syntax: () (,) allows values {\"name\"} ascending or descending order by . If this is left blank, \"asc\" is used. Note that an empty order_by string result in default order, which is order by name in ascending order.",
-                      "type": "string"
-                    },
-                    "pageToken": {
-                      "type": "string",
-                      "description": "Optional. The next_page_token value returned from a previous List request, if any.",
-                      "location": "query"
-                    },
-                    "filter": {
-                      "type": "string",
-                      "description": "Optional. The filter to list result by. General filter string syntax: () can be \"name\", or \"labels.\" for map field. can be \"\u003c, \u003e, \u003c=, \u003e=, !=, =, :\". Of which \":\" means HAS, and is roughly the same as \"=\". must be the same data type as field. can be \"AND, OR, NOT\". Examples of valid filters: * \"labels.owner\" returns Namespaces that have a label with the key \"owner\" this is the same as \"labels:owner\". * \"labels.protocol=gRPC\" returns Namespaces that have key/value \"protocol=gRPC\". * \"name\u003eprojects/my-project/locations/us-east/namespaces/namespace-c\" returns Namespaces that have name that is alphabetically later than the string, so \"namespace-e\" will be returned but \"namespace-a\" will not be. * \"labels.owner!=sd AND labels.foo=bar\" returns Namespaces that have \"owner\" in label key but value is not \"sd\" AND have key/value foo=bar. * \"doesnotexist.foo=bar\" returns an empty list. Note that Namespace doesn't have a field called \"doesnotexist\". Since the filter does not match any Namespaces, it returns no results.",
-                      "location": "query"
-                    },
-                    "parent": {
-                      "location": "path",
-                      "description": "Required. The resource name of the project and location whose namespaces we'd like to list.",
-                      "type": "string",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+$"
-                    },
-                    "pageSize": {
-                      "description": "Optional. The maximum number of items to return.",
-                      "location": "query",
-                      "format": "int32",
-                      "type": "integer"
-                    }
-                  },
-                  "httpMethod": "GET",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "response": {
-                    "$ref": "ListNamespacesResponse"
-                  },
-                  "description": "Lists all namespaces.",
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces",
-                  "id": "servicedirectory.projects.locations.namespaces.list"
-                },
-                "patch": {
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "request": {
-                    "$ref": "Namespace"
-                  },
-                  "path": "v1beta1/{+name}",
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}",
-                  "response": {
-                    "$ref": "Namespace"
-                  },
-                  "httpMethod": "PATCH",
-                  "parameters": {
-                    "updateMask": {
-                      "type": "string",
-                      "description": "Required. List of fields to be updated in this request.",
-                      "format": "google-fieldmask",
-                      "location": "query"
-                    },
-                    "name": {
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
-                      "required": true,
-                      "location": "path",
-                      "description": "Immutable. The resource name for the namespace in the format 'projects/*/locations/*/namespaces/*'."
-                    }
-                  },
-                  "id": "servicedirectory.projects.locations.namespaces.patch",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "description": "Updates a namespace."
-                },
-                "get": {
-                  "response": {
-                    "$ref": "Namespace"
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}",
-                  "path": "v1beta1/{+name}",
-                  "parameters": {
-                    "name": {
-                      "required": true,
-                      "description": "Required. The name of the namespace to retrieve.",
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
-                      "type": "string"
-                    }
-                  },
-                  "description": "Gets a namespace.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "id": "servicedirectory.projects.locations.namespaces.get",
-                  "httpMethod": "GET",
-                  "parameterOrder": [
-                    "name"
-                  ]
-                },
-                "getIamPolicy": {
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "resource"
-                  ],
-                  "response": {
-                    "$ref": "Policy"
-                  },
-                  "parameters": {
-                    "resource": {
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
-                      "description": "REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field.",
-                      "location": "path",
-                      "required": true
-                    }
-                  },
-                  "path": "v1beta1/{+resource}:getIamPolicy",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "description": "Gets the IAM Policy for a resource (namespace or service only).",
-                  "request": {
-                    "$ref": "GetIamPolicyRequest"
-                  },
-                  "id": "servicedirectory.projects.locations.namespaces.getIamPolicy",
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}:getIamPolicy"
-                },
-                "testIamPermissions": {
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}:testIamPermissions",
-                  "description": "Tests IAM permissions for a resource (namespace or service only).",
-                  "id": "servicedirectory.projects.locations.namespaces.testIamPermissions",
-                  "response": {
-                    "$ref": "TestIamPermissionsResponse"
-                  },
-                  "httpMethod": "POST",
-                  "request": {
-                    "$ref": "TestIamPermissionsRequest"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "resource": {
-                      "required": true,
-                      "description": "REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field.",
-                      "location": "path",
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$"
-                    }
-                  },
-                  "path": "v1beta1/{+resource}:testIamPermissions",
-                  "parameterOrder": [
-                    "resource"
-                  ]
-                },
-                "delete": {
-                  "id": "servicedirectory.projects.locations.namespaces.delete",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "description": "Deletes a namespace. This also deletes all services and endpoints in the namespace.",
-                  "path": "v1beta1/{+name}",
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}",
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "httpMethod": "DELETE",
-                  "parameters": {
-                    "name": {
-                      "required": true,
-                      "location": "path",
-                      "description": "Required. The name of the namespace to delete.",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
-                      "type": "string"
-                    }
-                  }
-                },
-                "setIamPolicy": {
-                  "description": "Sets the IAM Policy for a resource (namespace or service only).",
-                  "id": "servicedirectory.projects.locations.namespaces.setIamPolicy",
-                  "parameters": {
-                    "resource": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
-                      "description": "REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field.",
-                      "location": "path",
-                      "type": "string",
-                      "required": true
-                    }
-                  },
-                  "response": {
-                    "$ref": "Policy"
-                  },
-                  "request": {
-                    "$ref": "SetIamPolicyRequest"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "path": "v1beta1/{+resource}:setIamPolicy",
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "resource"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}:setIamPolicy"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
                 }
-              },
-              "resources": {
-                "services": {
-                  "resources": {
-                    "endpoints": {
-                      "methods": {
+            }
+        }
+    },
+    "basePath": "",
+    "baseUrl": "https://servicedirectory.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Service Directory",
+    "description": "Service Directory is a platform for discovering, publishing, and connecting services. ",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/service-directory",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "servicedirectory:v1beta1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://servicedirectory.mtls.googleapis.com/",
+    "name": "servicedirectory",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        }
+    },
+    "protocol": "rest",
+    "resources": {
+        "projects": {
+            "resources": {
+                "locations": {
+                    "methods": {
                         "get": {
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "parameterOrder": [
-                            "name"
-                          ],
-                          "response": {
-                            "$ref": "Endpoint"
-                          },
-                          "parameters": {
-                            "name": {
-                              "location": "path",
-                              "description": "Required. The name of the endpoint to get.",
-                              "required": true,
-                              "type": "string",
-                              "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+/endpoints/[^/]+$"
-                            }
-                          },
-                          "id": "servicedirectory.projects.locations.namespaces.services.endpoints.get",
-                          "httpMethod": "GET",
-                          "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}/endpoints/{endpointsId}",
-                          "description": "Gets a endpoint.",
-                          "path": "v1beta1/{+name}"
-                        },
-                        "delete": {
-                          "parameters": {
-                            "name": {
-                              "type": "string",
-                              "required": true,
-                              "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+/endpoints/[^/]+$",
-                              "location": "path",
-                              "description": "Required. The name of the endpoint to delete."
-                            }
-                          },
-                          "httpMethod": "DELETE",
-                          "response": {
-                            "$ref": "Empty"
-                          },
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "parameterOrder": [
-                            "name"
-                          ],
-                          "path": "v1beta1/{+name}",
-                          "id": "servicedirectory.projects.locations.namespaces.services.endpoints.delete",
-                          "description": "Deletes a endpoint.",
-                          "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}/endpoints/{endpointsId}"
+                            "description": "Gets information about a location.",
+                            "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}",
+                            "httpMethod": "GET",
+                            "id": "servicedirectory.projects.locations.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Resource name for the location.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta1/{+name}",
+                            "response": {
+                                "$ref": "Location"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
                         },
                         "list": {
-                          "response": {
-                            "$ref": "ListEndpointsResponse"
-                          },
-                          "description": "Lists all endpoints.",
-                          "parameterOrder": [
-                            "parent"
-                          ],
-                          "id": "servicedirectory.projects.locations.namespaces.services.endpoints.list",
-                          "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}/endpoints",
-                          "httpMethod": "GET",
-                          "path": "v1beta1/{+parent}/endpoints",
-                          "parameters": {
-                            "filter": {
-                              "description": "Optional. The filter to list result by. General filter string syntax: () can be \"name\", \"address\", \"port\" or \"metadata.\" for map field. can be \"\u003c, \u003e, \u003c=, \u003e=, !=, =, :\". Of which \":\" means HAS, and is roughly the same as \"=\". must be the same data type as field. can be \"AND, OR, NOT\". Examples of valid filters: * \"metadata.owner\" returns Endpoints that have a label with the key \"owner\" this is the same as \"metadata:owner\". * \"metadata.protocol=gRPC\" returns Endpoints that have key/value \"protocol=gRPC\". * \"address=192.108.1.105\" returns Endpoints that have this address. * \"port\u003e8080\" returns Endpoints that have port number larger than 8080. * \"name\u003eprojects/my-project/locations/us-east/namespaces/my-namespace/services/my-service/endpoints/endpoint-c\" returns Endpoints that have name that is alphabetically later than the string, so \"endpoint-e\" will be returned but \"endpoint-a\" will not be. * \"metadata.owner!=sd AND metadata.foo=bar\" returns Endpoints that have \"owner\" in label key but value is not \"sd\" AND have key/value foo=bar. * \"doesnotexist.foo=bar\" returns an empty list. Note that Endpoint doesn't have a field called \"doesnotexist\". Since the filter does not match any Endpoints, it returns no results.",
-                              "type": "string",
-                              "location": "query"
+                            "description": "Lists information about the supported locations for this service.",
+                            "flatPath": "v1beta1/projects/{projectsId}/locations",
+                            "httpMethod": "GET",
+                            "id": "servicedirectory.projects.locations.list",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "The standard list filter.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "name": {
+                                    "description": "The resource that owns the locations collection, if applicable.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "The standard list page size.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The standard list page token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
                             },
-                            "pageToken": {
-                              "type": "string",
-                              "description": "Optional. The next_page_token value returned from a previous List request, if any.",
-                              "location": "query"
+                            "path": "v1beta1/{+name}/locations",
+                            "response": {
+                                "$ref": "ListLocationsResponse"
                             },
-                            "pageSize": {
-                              "type": "integer",
-                              "location": "query",
-                              "format": "int32",
-                              "description": "Optional. The maximum number of items to return."
-                            },
-                            "orderBy": {
-                              "location": "query",
-                              "description": "Optional. The order to list result by.",
-                              "type": "string"
-                            },
-                            "parent": {
-                              "required": true,
-                              "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
-                              "description": "Required. The resource name of the service whose endpoints we'd like to list.",
-                              "location": "path",
-                              "type": "string"
-                            }
-                          },
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ]
-                        },
-                        "patch": {
-                          "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}/endpoints/{endpointsId}",
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "response": {
-                            "$ref": "Endpoint"
-                          },
-                          "parameterOrder": [
-                            "name"
-                          ],
-                          "parameters": {
-                            "updateMask": {
-                              "type": "string",
-                              "location": "query",
-                              "format": "google-fieldmask",
-                              "description": "Required. List of fields to be updated in this request."
-                            },
-                            "name": {
-                              "required": true,
-                              "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+/endpoints/[^/]+$",
-                              "description": "Immutable. The resource name for the endpoint in the format 'projects/*/locations/*/namespaces/*/services/*/endpoints/*'.",
-                              "location": "path",
-                              "type": "string"
-                            }
-                          },
-                          "httpMethod": "PATCH",
-                          "request": {
-                            "$ref": "Endpoint"
-                          },
-                          "description": "Updates a endpoint.",
-                          "path": "v1beta1/{+name}",
-                          "id": "servicedirectory.projects.locations.namespaces.services.endpoints.patch"
-                        },
-                        "create": {
-                          "parameterOrder": [
-                            "parent"
-                          ],
-                          "id": "servicedirectory.projects.locations.namespaces.services.endpoints.create",
-                          "request": {
-                            "$ref": "Endpoint"
-                          },
-                          "response": {
-                            "$ref": "Endpoint"
-                          },
-                          "description": "Creates a endpoint, and returns the new Endpoint.",
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}/endpoints",
-                          "httpMethod": "POST",
-                          "path": "v1beta1/{+parent}/endpoints",
-                          "parameters": {
-                            "endpointId": {
-                              "description": "Required. The Resource ID must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.",
-                              "location": "query",
-                              "type": "string"
-                            },
-                            "parent": {
-                              "description": "Required. The resource name of the service that this endpoint provides.",
-                              "type": "string",
-                              "required": true,
-                              "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
-                              "location": "path"
-                            }
-                          }
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
                         }
-                      }
+                    },
+                    "resources": {
+                        "namespaces": {
+                            "methods": {
+                                "create": {
+                                    "description": "Creates a namespace, and returns the new namespace.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces",
+                                    "httpMethod": "POST",
+                                    "id": "servicedirectory.projects.locations.namespaces.create",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "namespaceId": {
+                                            "description": "Required. The Resource ID must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The resource name of the project and location the namespace will be created in.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/namespaces",
+                                    "request": {
+                                        "$ref": "Namespace"
+                                    },
+                                    "response": {
+                                        "$ref": "Namespace"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a namespace. This also deletes all services and endpoints in the namespace.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "servicedirectory.projects.locations.namespaces.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The name of the namespace to delete.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets a namespace.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}",
+                                    "httpMethod": "GET",
+                                    "id": "servicedirectory.projects.locations.namespaces.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The name of the namespace to retrieve.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "response": {
+                                        "$ref": "Namespace"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "getIamPolicy": {
+                                    "description": "Gets the IAM Policy for a resource (namespace or service only).",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}:getIamPolicy",
+                                    "httpMethod": "POST",
+                                    "id": "servicedirectory.projects.locations.namespaces.getIamPolicy",
+                                    "parameterOrder": [
+                                        "resource"
+                                    ],
+                                    "parameters": {
+                                        "resource": {
+                                            "description": "REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+resource}:getIamPolicy",
+                                    "request": {
+                                        "$ref": "GetIamPolicyRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Policy"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists all namespaces.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces",
+                                    "httpMethod": "GET",
+                                    "id": "servicedirectory.projects.locations.namespaces.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "filter": {
+                                            "description": "Optional. The filter to list results by. General `filter` string syntax: ` ()` * `` can be `name` or `labels.` for map field * `` can be `<`, `>`, `<=`, `>=`, `!=`, `=`, `:`. Of which `:` means `HAS`, and is roughly the same as `=` * `` must be the same data type as field * `` can be `AND`, `OR`, `NOT` Examples of valid filters: * `labels.owner` returns namespaces that have a label with the key `owner`, this is the same as `labels:owner` * `labels.owner=sd` returns namespaces that have key/value `owner=sd` * `name>projects/my-project/locations/us-east1/namespaces/namespace-c` returns namespaces that have name that is alphabetically later than the string, so \"namespace-e\" is returned but \"namespace-a\" is not * `labels.owner!=sd AND labels.foo=bar` returns namespaces that have `owner` in label key but value is not `sd` AND have key/value `foo=bar` * `doesnotexist.foo=bar` returns an empty list. Note that namespace doesn't have a field called \"doesnotexist\". Since the filter does not match any namespaces, it returns no results For more information about filtering, see [API Filtering](https://aip.dev/160).",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "orderBy": {
+                                            "description": "Optional. The order to list results by. General `order_by` string syntax: ` () (,)` * `` allows value: `name` * `` ascending or descending order by ``. If this is left blank, `asc` is used Note that an empty `order_by` string results in default order, which is order by `name` in ascending order.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "Optional. The maximum number of items to return.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "Optional. The next_page_token value returned from a previous List request, if any.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The resource name of the project and location whose namespaces you'd like to list.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+parent}/namespaces",
+                                    "response": {
+                                        "$ref": "ListNamespacesResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "patch": {
+                                    "description": "Updates a namespace.",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}",
+                                    "httpMethod": "PATCH",
+                                    "id": "servicedirectory.projects.locations.namespaces.patch",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Immutable. The resource name for the namespace in the format `projects/*/locations/*/namespaces/*`.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "updateMask": {
+                                            "description": "Required. List of fields to be updated in this request.",
+                                            "format": "google-fieldmask",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+name}",
+                                    "request": {
+                                        "$ref": "Namespace"
+                                    },
+                                    "response": {
+                                        "$ref": "Namespace"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "setIamPolicy": {
+                                    "description": "Sets the IAM Policy for a resource (namespace or service only).",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}:setIamPolicy",
+                                    "httpMethod": "POST",
+                                    "id": "servicedirectory.projects.locations.namespaces.setIamPolicy",
+                                    "parameterOrder": [
+                                        "resource"
+                                    ],
+                                    "parameters": {
+                                        "resource": {
+                                            "description": "REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+resource}:setIamPolicy",
+                                    "request": {
+                                        "$ref": "SetIamPolicyRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Policy"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "testIamPermissions": {
+                                    "description": "Tests IAM permissions for a resource (namespace or service only).",
+                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}:testIamPermissions",
+                                    "httpMethod": "POST",
+                                    "id": "servicedirectory.projects.locations.namespaces.testIamPermissions",
+                                    "parameterOrder": [
+                                        "resource"
+                                    ],
+                                    "parameters": {
+                                        "resource": {
+                                            "description": "REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta1/{+resource}:testIamPermissions",
+                                    "request": {
+                                        "$ref": "TestIamPermissionsRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "TestIamPermissionsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
+                            },
+                            "resources": {
+                                "services": {
+                                    "methods": {
+                                        "create": {
+                                            "description": "Creates a service, and returns the new service.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services",
+                                            "httpMethod": "POST",
+                                            "id": "servicedirectory.projects.locations.namespaces.services.create",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "parent": {
+                                                    "description": "Required. The resource name of the namespace this service will belong to.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "serviceId": {
+                                                    "description": "Required. The Resource ID must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+parent}/services",
+                                            "request": {
+                                                "$ref": "Service"
+                                            },
+                                            "response": {
+                                                "$ref": "Service"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        },
+                                        "delete": {
+                                            "description": "Deletes a service. This also deletes all endpoints associated with the service.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}",
+                                            "httpMethod": "DELETE",
+                                            "id": "servicedirectory.projects.locations.namespaces.services.delete",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. The name of the service to delete.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+name}",
+                                            "response": {
+                                                "$ref": "Empty"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        },
+                                        "get": {
+                                            "description": "Gets a service.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}",
+                                            "httpMethod": "GET",
+                                            "id": "servicedirectory.projects.locations.namespaces.services.get",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. The name of the service to get.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+name}",
+                                            "response": {
+                                                "$ref": "Service"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        },
+                                        "getIamPolicy": {
+                                            "description": "Gets the IAM Policy for a resource (namespace or service only).",
+                                            "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}:getIamPolicy",
+                                            "httpMethod": "POST",
+                                            "id": "servicedirectory.projects.locations.namespaces.services.getIamPolicy",
+                                            "parameterOrder": [
+                                                "resource"
+                                            ],
+                                            "parameters": {
+                                                "resource": {
+                                                    "description": "REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+resource}:getIamPolicy",
+                                            "request": {
+                                                "$ref": "GetIamPolicyRequest"
+                                            },
+                                            "response": {
+                                                "$ref": "Policy"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        },
+                                        "list": {
+                                            "description": "Lists all services belonging to a namespace.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services",
+                                            "httpMethod": "GET",
+                                            "id": "servicedirectory.projects.locations.namespaces.services.list",
+                                            "parameterOrder": [
+                                                "parent"
+                                            ],
+                                            "parameters": {
+                                                "filter": {
+                                                    "description": "Optional. The filter to list results by. General `filter` string syntax: ` ()` * `` can be `name` or `metadata.` for map field * `` can be `<`, `>`, `<=`, `>=`, `!=`, `=`, `:`. Of which `:` means `HAS`, and is roughly the same as `=` * `` must be the same data type as field * `` can be `AND`, `OR`, `NOT` Examples of valid filters: * `metadata.owner` returns services that have a metadata with the key `owner`, this is the same as `metadata:owner` * `metadata.protocol=gRPC` returns services that have key/value `protocol=gRPC` * `name>projects/my-project/locations/us-east1/namespaces/my-namespace/services/service-c` returns services that have name that is alphabetically later than the string, so \"service-e\" is returned but \"service-a\" is not * `metadata.owner!=sd AND metadata.foo=bar` returns services that have `owner` in metadata key but value is not `sd` AND have key/value `foo=bar` * `doesnotexist.foo=bar` returns an empty list. Note that service doesn't have a field called \"doesnotexist\". Since the filter does not match any services, it returns no results For more information about filtering, see [API Filtering](https://aip.dev/160).",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "orderBy": {
+                                                    "description": "Optional. The order to list results by. General `order_by` string syntax: ` () (,)` * `` allows value: `name` * `` ascending or descending order by ``. If this is left blank, `asc` is used Note that an empty `order_by` string results in default order, which is order by `name` in ascending order.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "pageSize": {
+                                                    "description": "Optional. The maximum number of items to return.",
+                                                    "format": "int32",
+                                                    "location": "query",
+                                                    "type": "integer"
+                                                },
+                                                "pageToken": {
+                                                    "description": "Optional. The next_page_token value returned from a previous List request, if any.",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                },
+                                                "parent": {
+                                                    "description": "Required. The resource name of the namespace whose services you'd like to list.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+parent}/services",
+                                            "response": {
+                                                "$ref": "ListServicesResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        },
+                                        "patch": {
+                                            "description": "Updates a service.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}",
+                                            "httpMethod": "PATCH",
+                                            "id": "servicedirectory.projects.locations.namespaces.services.patch",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Immutable. The resource name for the service in the format `projects/*/locations/*/namespaces/*/services/*`.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                },
+                                                "updateMask": {
+                                                    "description": "Required. List of fields to be updated in this request.",
+                                                    "format": "google-fieldmask",
+                                                    "location": "query",
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+name}",
+                                            "request": {
+                                                "$ref": "Service"
+                                            },
+                                            "response": {
+                                                "$ref": "Service"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        },
+                                        "resolve": {
+                                            "description": "Returns a service and its associated endpoints. Resolving a service is not considered an active developer method.",
+                                            "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}:resolve",
+                                            "httpMethod": "POST",
+                                            "id": "servicedirectory.projects.locations.namespaces.services.resolve",
+                                            "parameterOrder": [
+                                                "name"
+                                            ],
+                                            "parameters": {
+                                                "name": {
+                                                    "description": "Required. The name of the service to resolve.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+name}:resolve",
+                                            "request": {
+                                                "$ref": "ResolveServiceRequest"
+                                            },
+                                            "response": {
+                                                "$ref": "ResolveServiceResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        },
+                                        "setIamPolicy": {
+                                            "description": "Sets the IAM Policy for a resource (namespace or service only).",
+                                            "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}:setIamPolicy",
+                                            "httpMethod": "POST",
+                                            "id": "servicedirectory.projects.locations.namespaces.services.setIamPolicy",
+                                            "parameterOrder": [
+                                                "resource"
+                                            ],
+                                            "parameters": {
+                                                "resource": {
+                                                    "description": "REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+resource}:setIamPolicy",
+                                            "request": {
+                                                "$ref": "SetIamPolicyRequest"
+                                            },
+                                            "response": {
+                                                "$ref": "Policy"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        },
+                                        "testIamPermissions": {
+                                            "description": "Tests IAM permissions for a resource (namespace or service only).",
+                                            "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}:testIamPermissions",
+                                            "httpMethod": "POST",
+                                            "id": "servicedirectory.projects.locations.namespaces.services.testIamPermissions",
+                                            "parameterOrder": [
+                                                "resource"
+                                            ],
+                                            "parameters": {
+                                                "resource": {
+                                                    "description": "REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field.",
+                                                    "location": "path",
+                                                    "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
+                                                    "required": true,
+                                                    "type": "string"
+                                                }
+                                            },
+                                            "path": "v1beta1/{+resource}:testIamPermissions",
+                                            "request": {
+                                                "$ref": "TestIamPermissionsRequest"
+                                            },
+                                            "response": {
+                                                "$ref": "TestIamPermissionsResponse"
+                                            },
+                                            "scopes": [
+                                                "https://www.googleapis.com/auth/cloud-platform"
+                                            ]
+                                        }
+                                    },
+                                    "resources": {
+                                        "endpoints": {
+                                            "methods": {
+                                                "create": {
+                                                    "description": "Creates an endpoint, and returns the new endpoint.",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}/endpoints",
+                                                    "httpMethod": "POST",
+                                                    "id": "servicedirectory.projects.locations.namespaces.services.endpoints.create",
+                                                    "parameterOrder": [
+                                                        "parent"
+                                                    ],
+                                                    "parameters": {
+                                                        "endpointId": {
+                                                            "description": "Required. The Resource ID must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.",
+                                                            "location": "query",
+                                                            "type": "string"
+                                                        },
+                                                        "parent": {
+                                                            "description": "Required. The resource name of the service that this endpoint provides.",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+parent}/endpoints",
+                                                    "request": {
+                                                        "$ref": "Endpoint"
+                                                    },
+                                                    "response": {
+                                                        "$ref": "Endpoint"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                },
+                                                "delete": {
+                                                    "description": "Deletes an endpoint.",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}/endpoints/{endpointsId}",
+                                                    "httpMethod": "DELETE",
+                                                    "id": "servicedirectory.projects.locations.namespaces.services.endpoints.delete",
+                                                    "parameterOrder": [
+                                                        "name"
+                                                    ],
+                                                    "parameters": {
+                                                        "name": {
+                                                            "description": "Required. The name of the endpoint to delete.",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+/endpoints/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+name}",
+                                                    "response": {
+                                                        "$ref": "Empty"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                },
+                                                "get": {
+                                                    "description": "Gets an endpoint.",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}/endpoints/{endpointsId}",
+                                                    "httpMethod": "GET",
+                                                    "id": "servicedirectory.projects.locations.namespaces.services.endpoints.get",
+                                                    "parameterOrder": [
+                                                        "name"
+                                                    ],
+                                                    "parameters": {
+                                                        "name": {
+                                                            "description": "Required. The name of the endpoint to get.",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+/endpoints/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+name}",
+                                                    "response": {
+                                                        "$ref": "Endpoint"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                },
+                                                "list": {
+                                                    "description": "Lists all endpoints.",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}/endpoints",
+                                                    "httpMethod": "GET",
+                                                    "id": "servicedirectory.projects.locations.namespaces.services.endpoints.list",
+                                                    "parameterOrder": [
+                                                        "parent"
+                                                    ],
+                                                    "parameters": {
+                                                        "filter": {
+                                                            "description": "Optional. The filter to list results by. General `filter` string syntax: ` ()` * `` can be `name`, `address`, `port`, or `metadata.` for map field * `` can be `<`, `>`, `<=`, `>=`, `!=`, `=`, `:`. Of which `:` means `HAS`, and is roughly the same as `=` * `` must be the same data type as field * `` can be `AND`, `OR`, `NOT` Examples of valid filters: * `metadata.owner` returns endpoints that have a metadata with the key `owner`, this is the same as `metadata:owner` * `metadata.protocol=gRPC` returns endpoints that have key/value `protocol=gRPC` * `address=192.108.1.105` returns endpoints that have this address * `port>8080` returns endpoints that have port number larger than 8080 * `name>projects/my-project/locations/us-east1/namespaces/my-namespace/services/my-service/endpoints/endpoint-c` returns endpoints that have name that is alphabetically later than the string, so \"endpoint-e\" is returned but \"endpoint-a\" is not * `metadata.owner!=sd AND metadata.foo=bar` returns endpoints that have `owner` in metadata key but value is not `sd` AND have key/value `foo=bar` * `doesnotexist.foo=bar` returns an empty list. Note that endpoint doesn't have a field called \"doesnotexist\". Since the filter does not match any endpoints, it returns no results For more information about filtering, see [API Filtering](https://aip.dev/160).",
+                                                            "location": "query",
+                                                            "type": "string"
+                                                        },
+                                                        "orderBy": {
+                                                            "description": "Optional. The order to list results by. General `order_by` string syntax: ` () (,)` * `` allows values: `name`, `address`, `port` * `` ascending or descending order by ``. If this is left blank, `asc` is used Note that an empty `order_by` string results in default order, which is order by `name` in ascending order.",
+                                                            "location": "query",
+                                                            "type": "string"
+                                                        },
+                                                        "pageSize": {
+                                                            "description": "Optional. The maximum number of items to return.",
+                                                            "format": "int32",
+                                                            "location": "query",
+                                                            "type": "integer"
+                                                        },
+                                                        "pageToken": {
+                                                            "description": "Optional. The next_page_token value returned from a previous List request, if any.",
+                                                            "location": "query",
+                                                            "type": "string"
+                                                        },
+                                                        "parent": {
+                                                            "description": "Required. The resource name of the service whose endpoints you'd like to list.",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+parent}/endpoints",
+                                                    "response": {
+                                                        "$ref": "ListEndpointsResponse"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                },
+                                                "patch": {
+                                                    "description": "Updates an endpoint.",
+                                                    "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}/endpoints/{endpointsId}",
+                                                    "httpMethod": "PATCH",
+                                                    "id": "servicedirectory.projects.locations.namespaces.services.endpoints.patch",
+                                                    "parameterOrder": [
+                                                        "name"
+                                                    ],
+                                                    "parameters": {
+                                                        "name": {
+                                                            "description": "Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.",
+                                                            "location": "path",
+                                                            "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+/endpoints/[^/]+$",
+                                                            "required": true,
+                                                            "type": "string"
+                                                        },
+                                                        "updateMask": {
+                                                            "description": "Required. List of fields to be updated in this request.",
+                                                            "format": "google-fieldmask",
+                                                            "location": "query",
+                                                            "type": "string"
+                                                        }
+                                                    },
+                                                    "path": "v1beta1/{+name}",
+                                                    "request": {
+                                                        "$ref": "Endpoint"
+                                                    },
+                                                    "response": {
+                                                        "$ref": "Endpoint"
+                                                    },
+                                                    "scopes": [
+                                                        "https://www.googleapis.com/auth/cloud-platform"
+                                                    ]
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
                     }
-                  },
-                  "methods": {
-                    "patch": {
-                      "response": {
-                        "$ref": "Service"
-                      },
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "request": {
-                        "$ref": "Service"
-                      },
-                      "id": "servicedirectory.projects.locations.namespaces.services.patch",
-                      "path": "v1beta1/{+name}",
-                      "description": "Updates a service.",
-                      "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}",
-                      "parameters": {
-                        "updateMask": {
-                          "format": "google-fieldmask",
-                          "description": "Required. List of fields to be updated in this request.",
-                          "type": "string",
-                          "location": "query"
-                        },
-                        "name": {
-                          "type": "string",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
-                          "required": true,
-                          "description": "Immutable. The resource name for the service in the format 'projects/*/locations/*/namespaces/*/services/*'.",
-                          "location": "path"
-                        }
-                      },
-                      "httpMethod": "PATCH",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ]
-                    },
-                    "get": {
-                      "description": "Gets a service.",
-                      "response": {
-                        "$ref": "Service"
-                      },
-                      "parameters": {
-                        "name": {
-                          "location": "path",
-                          "description": "Required. The name of the service to get.",
-                          "type": "string",
-                          "required": true,
-                          "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$"
-                        }
-                      },
-                      "path": "v1beta1/{+name}",
-                      "id": "servicedirectory.projects.locations.namespaces.services.get",
-                      "httpMethod": "GET",
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ]
-                    },
-                    "create": {
-                      "path": "v1beta1/{+parent}/services",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services",
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "response": {
-                        "$ref": "Service"
-                      },
-                      "id": "servicedirectory.projects.locations.namespaces.services.create",
-                      "description": "Creates a service, and returns the new Service.",
-                      "request": {
-                        "$ref": "Service"
-                      },
-                      "httpMethod": "POST",
-                      "parameters": {
-                        "serviceId": {
-                          "description": "Required. The Resource ID must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.",
-                          "location": "query",
-                          "type": "string"
-                        },
-                        "parent": {
-                          "required": true,
-                          "type": "string",
-                          "description": "Required. The resource name of the namespace this service will belong to.",
-                          "location": "path",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$"
-                        }
-                      }
-                    },
-                    "resolve": {
-                      "parameters": {
-                        "name": {
-                          "required": true,
-                          "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
-                          "description": "Required. The name of the service to resolve.",
-                          "type": "string",
-                          "location": "path"
-                        }
-                      },
-                      "response": {
-                        "$ref": "ResolveServiceResponse"
-                      },
-                      "id": "servicedirectory.projects.locations.namespaces.services.resolve",
-                      "description": "Returns a service and its associated endpoints. Resolving a service is not considered an active developer method.",
-                      "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}:resolve",
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "path": "v1beta1/{+name}:resolve",
-                      "httpMethod": "POST",
-                      "request": {
-                        "$ref": "ResolveServiceRequest"
-                      },
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ]
-                    },
-                    "list": {
-                      "response": {
-                        "$ref": "ListServicesResponse"
-                      },
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "description": "Lists all services belonging to a namespace.",
-                      "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services",
-                      "httpMethod": "GET",
-                      "path": "v1beta1/{+parent}/services",
-                      "id": "servicedirectory.projects.locations.namespaces.services.list",
-                      "parameterOrder": [
-                        "parent"
-                      ],
-                      "parameters": {
-                        "filter": {
-                          "type": "string",
-                          "location": "query",
-                          "description": "Optional. The filter to list result by. General filter string syntax: () can be \"name\", or \"metadata.\" for map field. can be \"\u003c, \u003e, \u003c=, \u003e=, !=, =, :\". Of which \":\" means HAS, and is roughly the same as \"=\". must be the same data type as field. can be \"AND, OR, NOT\". Examples of valid filters: * \"metadata.owner\" returns Services that have a label with the key \"owner\" this is the same as \"metadata:owner\". * \"metadata.protocol=gRPC\" returns Services that have key/value \"protocol=gRPC\". * \"name\u003eprojects/my-project/locations/us-east/namespaces/my-namespace/services/service-c\" returns Services that have name that is alphabetically later than the string, so \"service-e\" will be returned but \"service-a\" will not be. * \"metadata.owner!=sd AND metadata.foo=bar\" returns Services that have \"owner\" in label key but value is not \"sd\" AND have key/value foo=bar. * \"doesnotexist.foo=bar\" returns an empty list. Note that Service doesn't have a field called \"doesnotexist\". Since the filter does not match any Services, it returns no results."
-                        },
-                        "orderBy": {
-                          "type": "string",
-                          "description": "Optional. The order to list result by.",
-                          "location": "query"
-                        },
-                        "parent": {
-                          "required": true,
-                          "description": "Required. The resource name of the namespace whose services we'd like to list.",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+$",
-                          "type": "string",
-                          "location": "path"
-                        },
-                        "pageToken": {
-                          "type": "string",
-                          "description": "Optional. The next_page_token value returned from a previous List request, if any.",
-                          "location": "query"
-                        },
-                        "pageSize": {
-                          "format": "int32",
-                          "location": "query",
-                          "description": "Optional. The maximum number of items to return.",
-                          "type": "integer"
-                        }
-                      }
-                    },
-                    "setIamPolicy": {
-                      "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}:setIamPolicy",
-                      "path": "v1beta1/{+resource}:setIamPolicy",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "httpMethod": "POST",
-                      "response": {
-                        "$ref": "Policy"
-                      },
-                      "description": "Sets the IAM Policy for a resource (namespace or service only).",
-                      "parameterOrder": [
-                        "resource"
-                      ],
-                      "id": "servicedirectory.projects.locations.namespaces.services.setIamPolicy",
-                      "request": {
-                        "$ref": "SetIamPolicyRequest"
-                      },
-                      "parameters": {
-                        "resource": {
-                          "location": "path",
-                          "required": true,
-                          "description": "REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field.",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
-                          "type": "string"
-                        }
-                      }
-                    },
-                    "delete": {
-                      "description": "Deletes a service. This also deletes all endpoints associated with the service.",
-                      "id": "servicedirectory.projects.locations.namespaces.services.delete",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "response": {
-                        "$ref": "Empty"
-                      },
-                      "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}",
-                      "parameterOrder": [
-                        "name"
-                      ],
-                      "path": "v1beta1/{+name}",
-                      "httpMethod": "DELETE",
-                      "parameters": {
-                        "name": {
-                          "location": "path",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
-                          "type": "string",
-                          "description": "Required. The name of the service to delete.",
-                          "required": true
-                        }
-                      }
-                    },
-                    "testIamPermissions": {
-                      "description": "Tests IAM permissions for a resource (namespace or service only).",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "id": "servicedirectory.projects.locations.namespaces.services.testIamPermissions",
-                      "httpMethod": "POST",
-                      "path": "v1beta1/{+resource}:testIamPermissions",
-                      "response": {
-                        "$ref": "TestIamPermissionsResponse"
-                      },
-                      "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}:testIamPermissions",
-                      "request": {
-                        "$ref": "TestIamPermissionsRequest"
-                      },
-                      "parameters": {
-                        "resource": {
-                          "description": "REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field.",
-                          "location": "path",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
-                          "required": true,
-                          "type": "string"
-                        }
-                      },
-                      "parameterOrder": [
-                        "resource"
-                      ]
-                    },
-                    "getIamPolicy": {
-                      "request": {
-                        "$ref": "GetIamPolicyRequest"
-                      },
-                      "parameterOrder": [
-                        "resource"
-                      ],
-                      "description": "Gets the IAM Policy for a resource (namespace or service only).",
-                      "response": {
-                        "$ref": "Policy"
-                      },
-                      "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}/namespaces/{namespacesId}/services/{servicesId}:getIamPolicy",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "parameters": {
-                        "resource": {
-                          "pattern": "^projects/[^/]+/locations/[^/]+/namespaces/[^/]+/services/[^/]+$",
-                          "description": "REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field.",
-                          "required": true,
-                          "type": "string",
-                          "location": "path"
-                        }
-                      },
-                      "path": "v1beta1/{+resource}:getIamPolicy",
-                      "httpMethod": "POST",
-                      "id": "servicedirectory.projects.locations.namespaces.services.getIamPolicy"
-                    }
-                  }
                 }
-              }
             }
-          },
-          "methods": {
-            "get": {
-              "response": {
-                "$ref": "Location"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET",
-              "path": "v1beta1/{+name}",
-              "id": "servicedirectory.projects.locations.get",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "name": {
-                  "required": true,
-                  "description": "Resource name for the location.",
-                  "location": "path",
-                  "pattern": "^projects/[^/]+/locations/[^/]+$",
-                  "type": "string"
+        }
+    },
+    "revision": "20210203",
+    "rootUrl": "https://servicedirectory.googleapis.com/",
+    "schemas": {
+        "Binding": {
+            "description": "Associates `members` with a `role`.",
+            "id": "Binding",
+            "properties": {
+                "condition": {
+                    "$ref": "Expr",
+                    "description": "The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)."
+                },
+                "members": {
+                    "description": "Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. ",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "role": {
+                    "description": "Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.",
+                    "type": "string"
                 }
-              },
-              "description": "Gets information about a location.",
-              "flatPath": "v1beta1/projects/{projectsId}/locations/{locationsId}"
             },
-            "list": {
-              "flatPath": "v1beta1/projects/{projectsId}/locations",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "filter": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "The standard list filter."
+            "type": "object"
+        },
+        "Empty": {
+            "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
+            "id": "Empty",
+            "properties": {},
+            "type": "object"
+        },
+        "Endpoint": {
+            "description": "An individual endpoint that provides a service. The service must already exist to create an endpoint.",
+            "id": "Endpoint",
+            "properties": {
+                "address": {
+                    "description": "Optional. An IPv4 or IPv6 address. Service Directory rejects bad addresses like: * `8.8.8` * `8.8.8.8:53` * `test:bad:address` * `[::1]` * `[::1]:8080` Limited to 45 characters.",
+                    "type": "string"
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Optional. Metadata for the endpoint. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.",
+                    "type": "object"
                 },
                 "name": {
-                  "type": "string",
-                  "required": true,
-                  "description": "The resource that owns the locations collection, if applicable.",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path"
+                    "description": "Immutable. The resource name for the endpoint in the format `projects/*/locations/*/namespaces/*/services/*/endpoints/*`.",
+                    "type": "string"
                 },
-                "pageSize": {
-                  "format": "int32",
-                  "type": "integer",
-                  "description": "The standard list page size.",
-                  "location": "query"
-                },
-                "pageToken": {
-                  "description": "The standard list page token.",
-                  "location": "query",
-                  "type": "string"
+                "port": {
+                    "description": "Optional. Service Directory rejects values outside of `[0, 65535]`.",
+                    "format": "int32",
+                    "type": "integer"
                 }
-              },
-              "path": "v1beta1/{+name}/locations",
-              "description": "Lists information about the supported locations for this service.",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "ListLocationsResponse"
-              },
-              "id": "servicedirectory.projects.locations.list"
-            }
-          }
+            },
+            "type": "object"
+        },
+        "Expr": {
+            "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.",
+            "id": "Expr",
+            "properties": {
+                "description": {
+                    "description": "Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.",
+                    "type": "string"
+                },
+                "expression": {
+                    "description": "Textual representation of an expression in Common Expression Language syntax.",
+                    "type": "string"
+                },
+                "location": {
+                    "description": "Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GetIamPolicyRequest": {
+            "description": "Request message for `GetIamPolicy` method.",
+            "id": "GetIamPolicyRequest",
+            "properties": {
+                "options": {
+                    "$ref": "GetPolicyOptions",
+                    "description": "OPTIONAL: A `GetPolicyOptions` object for specifying options to `GetIamPolicy`."
+                }
+            },
+            "type": "object"
+        },
+        "GetPolicyOptions": {
+            "description": "Encapsulates settings provided to GetIamPolicy.",
+            "id": "GetPolicyOptions",
+            "properties": {
+                "requestedPolicyVersion": {
+                    "description": "Optional. The policy format version to be returned. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional bindings must specify version 3. Policies without any conditional bindings may specify any valid value or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "ListEndpointsResponse": {
+            "description": "The response message for RegistrationService.ListEndpoints.",
+            "id": "ListEndpointsResponse",
+            "properties": {
+                "endpoints": {
+                    "description": "The list of endpoints.",
+                    "items": {
+                        "$ref": "Endpoint"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Token to retrieve the next page of results, or empty if there are no more results in the list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListLocationsResponse": {
+            "description": "The response message for Locations.ListLocations.",
+            "id": "ListLocationsResponse",
+            "properties": {
+                "locations": {
+                    "description": "A list of locations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Location"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListNamespacesResponse": {
+            "description": "The response message for RegistrationService.ListNamespaces.",
+            "id": "ListNamespacesResponse",
+            "properties": {
+                "namespaces": {
+                    "description": "The list of namespaces.",
+                    "items": {
+                        "$ref": "Namespace"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Token to retrieve the next page of results, or empty if there are no more results in the list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListServicesResponse": {
+            "description": "The response message for RegistrationService.ListServices.",
+            "id": "ListServicesResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "Token to retrieve the next page of results, or empty if there are no more results in the list.",
+                    "type": "string"
+                },
+                "services": {
+                    "description": "The list of services.",
+                    "items": {
+                        "$ref": "Service"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Location": {
+            "description": "A resource that represents Google Cloud Platform location.",
+            "id": "Location",
+            "properties": {
+                "displayName": {
+                    "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\".",
+                    "type": "string"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}",
+                    "type": "object"
+                },
+                "locationId": {
+                    "description": "The canonical id for this location. For example: `\"us-east1\"`.",
+                    "type": "string"
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata. For example the available capacity at the given location.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "Resource name for the location, which may vary between implementations. For example: `\"projects/example-project/locations/us-east1\"`",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Namespace": {
+            "description": "A container for services. Namespaces allow administrators to group services together and define permissions for a collection of services.",
+            "id": "Namespace",
+            "properties": {
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Optional. Resource labels associated with this namespace. No more than 64 user labels can be associated with a given resource. Label keys and values can be no longer than 63 characters.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "Immutable. The resource name for the namespace in the format `projects/*/locations/*/namespaces/*`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Policy": {
+            "description": "An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { \"bindings\": [ { \"role\": \"roles/resourcemanager.organizationAdmin\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\" ] }, { \"role\": \"roles/resourcemanager.organizationViewer\", \"members\": [ \"user:eve@example.com\" ], \"condition\": { \"title\": \"expirable access\", \"description\": \"Does not grant access after Sep 2020\", \"expression\": \"request.time < timestamp('2020-10-01T00:00:00.000Z')\", } } ], \"etag\": \"BwWWja0YfJA=\", \"version\": 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).",
+            "id": "Policy",
+            "properties": {
+                "bindings": {
+                    "description": "Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.",
+                    "items": {
+                        "$ref": "Binding"
+                    },
+                    "type": "array"
+                },
+                "etag": {
+                    "description": "`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "version": {
+                    "description": "Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "ResolveServiceRequest": {
+            "description": "The request message for LookupService.ResolveService. Looks up a service by its name, returns the service and its endpoints.",
+            "id": "ResolveServiceRequest",
+            "properties": {
+                "endpointFilter": {
+                    "description": "Optional. The filter applied to the endpoints of the resolved service. General `filter` string syntax: ` ()` * `` can be `name`, `address`, `port`, or `metadata.` for map field * `` can be `<`, `>`, `<=`, `>=`, `!=`, `=`, `:`. Of which `:` means `HAS`, and is roughly the same as `=` * `` must be the same data type as field * `` can be `AND`, `OR`, `NOT` Examples of valid filters: * `metadata.owner` returns endpoints that have a annotation with the key `owner`, this is the same as `metadata:owner` * `metadata.protocol=gRPC` returns endpoints that have key/value `protocol=gRPC` * `address=192.108.1.105` returns endpoints that have this address * `port>8080` returns endpoints that have port number larger than 8080 * `name>projects/my-project/locations/us-east1/namespaces/my-namespace/services/my-service/endpoints/endpoint-c` returns endpoints that have name that is alphabetically later than the string, so \"endpoint-e\" is returned but \"endpoint-a\" is not * `metadata.owner!=sd AND metadata.foo=bar` returns endpoints that have `owner` in annotation key but value is not `sd` AND have key/value `foo=bar` * `doesnotexist.foo=bar` returns an empty list. Note that endpoint doesn't have a field called \"doesnotexist\". Since the filter does not match any endpoint, it returns no results For more information about filtering, see [API Filtering](https://aip.dev/160).",
+                    "type": "string"
+                },
+                "maxEndpoints": {
+                    "description": "Optional. The maximum number of endpoints to return. Defaults to 25. Maximum is 100. If a value less than one is specified, the Default is used. If a value greater than the Maximum is specified, the Maximum is used.",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "ResolveServiceResponse": {
+            "description": "The response message for LookupService.ResolveService.",
+            "id": "ResolveServiceResponse",
+            "properties": {
+                "service": {
+                    "$ref": "Service"
+                }
+            },
+            "type": "object"
+        },
+        "Service": {
+            "description": "An individual service. A service contains a name and optional metadata. A service must exist before endpoints can be added to it.",
+            "id": "Service",
+            "properties": {
+                "endpoints": {
+                    "description": "Output only. Endpoints associated with this service. Returned on LookupService.ResolveService. Control plane clients should use RegistrationService.ListEndpoints.",
+                    "items": {
+                        "$ref": "Endpoint"
+                    },
+                    "readOnly": true,
+                    "type": "array"
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Optional. Metadata for the service. This data can be consumed by service clients. Restrictions: * The entire metadata dictionary may contain up to 512 characters, spread accoss all key-value pairs. Metadata that goes beyond this limit are rejected * Valid metadata keys have two segments: an optional prefix and name, separated by a slash (/). The name segment is required and must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between. The prefix is optional. If specified, the prefix must be a DNS subdomain: a series of DNS labels separated by dots (.), not longer than 253 characters in total, followed by a slash (/). Metadata that fails to meet these requirements are rejected * The `(*.)google.com/` and `(*.)googleapis.com/` prefixes are reserved for system metadata managed by Service Directory. If the user tries to write to these keyspaces, those entries are silently ignored by the system Note: This field is equivalent to the `annotations` field in the v1 API. They have the same syntax and read/write to the same location in Service Directory.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "Immutable. The resource name for the service in the format `projects/*/locations/*/namespaces/*/services/*`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SetIamPolicyRequest": {
+            "description": "Request message for `SetIamPolicy` method.",
+            "id": "SetIamPolicyRequest",
+            "properties": {
+                "policy": {
+                    "$ref": "Policy",
+                    "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them."
+                }
+            },
+            "type": "object"
+        },
+        "TestIamPermissionsRequest": {
+            "description": "Request message for `TestIamPermissions` method.",
+            "id": "TestIamPermissionsRequest",
+            "properties": {
+                "permissions": {
+                    "description": "The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or 'storage.*') are not allowed. For more information see [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "TestIamPermissionsResponse": {
+            "description": "Response message for `TestIamPermissions` method.",
+            "id": "TestIamPermissionsResponse",
+            "properties": {
+                "permissions": {
+                    "description": "A subset of `TestPermissionsRequest.permissions` that the caller is allowed.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         }
-      }
-    }
-  },
-  "fullyEncodeReservedExpansion": true,
-  "revision": "20201112",
-  "kind": "discovery#restDescription",
-  "documentationLink": "https://cloud.google.com/service-directory",
-  "rootUrl": "https://servicedirectory.googleapis.com/",
-  "description": "Service Directory is a platform for discovering, publishing, and connecting services. ",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "batchPath": "batch",
-  "version_module": true,
-  "title": "Service Directory API",
-  "basePath": "",
-  "ownerName": "Google",
-  "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
-  },
-  "mtlsRootUrl": "https://servicedirectory.mtls.googleapis.com/",
-  "protocol": "rest",
-  "id": "servicedirectory:v1beta1",
-  "name": "servicedirectory",
-  "baseUrl": "https://servicedirectory.googleapis.com/",
-  "canonicalName": "Service Directory"
-}
+    },
+    "servicePath": "",
+    "title": "Service Directory API",
+    "version": "v1beta1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/servicemanagement.v1.json b/googleapiclient/discovery_cache/documents/servicemanagement.v1.json
index 8a0926e..a001f6b 100644
--- a/googleapiclient/discovery_cache/documents/servicemanagement.v1.json
+++ b/googleapiclient/discovery_cache/documents/servicemanagement.v1.json
@@ -1,3202 +1,3202 @@
 {
-  "rootUrl": "https://servicemanagement.googleapis.com/",
-  "basePath": "",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        },
-        "https://www.googleapis.com/auth/service.management.readonly": {
-          "description": "View your Google API service configuration"
-        },
-        "https://www.googleapis.com/auth/cloud-platform.read-only": {
-          "description": "View your data across Google Cloud Platform services"
-        },
-        "https://www.googleapis.com/auth/service.management": {
-          "description": "Manage your Google API service configuration"
-        }
-      }
-    }
-  },
-  "resources": {
-    "services": {
-      "resources": {
-        "consumers": {
-          "methods": {
-            "getIamPolicy": {
-              "response": {
-                "$ref": "Policy"
-              },
-              "parameters": {
-                "resource": {
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "pattern": "^services/[^/]+/consumers/[^/]+$",
-                  "description": "REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field."
-                }
-              },
-              "parameterOrder": [
-                "resource"
-              ],
-              "id": "servicemanagement.services.consumers.getIamPolicy",
-              "path": "v1/{+resource}:getIamPolicy",
-              "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/service.management",
-                "https://www.googleapis.com/auth/service.management.readonly"
-              ],
-              "request": {
-                "$ref": "GetIamPolicyRequest"
-              },
-              "httpMethod": "POST",
-              "flatPath": "v1/services/{servicesId}/consumers/{consumersId}:getIamPolicy"
-            },
-            "setIamPolicy": {
-              "id": "servicemanagement.services.consumers.setIamPolicy",
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "resource"
-              ],
-              "flatPath": "v1/services/{servicesId}/consumers/{consumersId}:setIamPolicy",
-              "parameters": {
-                "resource": {
-                  "location": "path",
-                  "type": "string",
-                  "description": "REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field.",
-                  "pattern": "^services/[^/]+/consumers/[^/]+$",
-                  "required": true
-                }
-              },
-              "description": "Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.",
-              "path": "v1/{+resource}:setIamPolicy",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/service.management"
-              ],
-              "request": {
-                "$ref": "SetIamPolicyRequest"
-              },
-              "response": {
-                "$ref": "Policy"
-              }
-            },
-            "testIamPermissions": {
-              "parameters": {
-                "resource": {
-                  "location": "path",
-                  "pattern": "^services/[^/]+/consumers/[^/]+$",
-                  "required": true,
-                  "type": "string",
-                  "description": "REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field."
-                }
-              },
-              "request": {
-                "$ref": "TestIamPermissionsRequest"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/service.management",
-                "https://www.googleapis.com/auth/service.management.readonly"
-              ],
-              "response": {
-                "$ref": "TestIamPermissionsResponse"
-              },
-              "path": "v1/{+resource}:testIamPermissions",
-              "flatPath": "v1/services/{servicesId}/consumers/{consumersId}:testIamPermissions",
-              "parameterOrder": [
-                "resource"
-              ],
-              "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may \"fail open\" without warning.",
-              "id": "servicemanagement.services.consumers.testIamPermissions",
-              "httpMethod": "POST"
-            }
-          }
-        },
-        "rollouts": {
-          "methods": {
-            "create": {
-              "request": {
-                "$ref": "Rollout"
-              },
-              "parameterOrder": [
-                "serviceName"
-              ],
-              "id": "servicemanagement.services.rollouts.create",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/service.management"
-              ],
-              "path": "v1/services/{serviceName}/rollouts",
-              "flatPath": "v1/services/{serviceName}/rollouts",
-              "response": {
-                "$ref": "Operation"
-              },
-              "description": "Creates a new service configuration rollout. Based on rollout, the Google Service Management will roll out the service configurations to different backend services. For example, the logging configuration will be pushed to Google Cloud Logging. Please note that any previous pending and running Rollouts and associated Operations will be automatically cancelled so that the latest Rollout will not be blocked by previous Rollouts. Only the 100 most recent (in any state) and the last 10 successful (if not already part of the set of 100 most recent) rollouts are kept for each service. The rest will be deleted eventually. Operation",
-              "httpMethod": "POST",
-              "parameters": {
-                "serviceName": {
-                  "location": "path",
-                  "description": "Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`.",
-                  "required": true,
-                  "type": "string"
-                }
-              }
-            },
-            "list": {
-              "path": "v1/services/{serviceName}/rollouts",
-              "flatPath": "v1/services/{serviceName}/rollouts",
-              "parameters": {
-                "pageToken": {
-                  "location": "query",
-                  "type": "string",
-                  "description": "The token of the page to retrieve."
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
                 },
-                "filter": {
-                  "type": "string",
-                  "description": "Required. Use `filter` to return subset of rollouts. The following filters are supported: -- To limit the results to only those in [status](google.api.servicemanagement.v1.RolloutStatus) 'SUCCESS', use filter='status=SUCCESS' -- To limit the results to those in [status](google.api.servicemanagement.v1.RolloutStatus) 'CANCELLED' or 'FAILED', use filter='status=CANCELLED OR status=FAILED'",
-                  "location": "query"
+                "https://www.googleapis.com/auth/cloud-platform.read-only": {
+                    "description": "View your data across Google Cloud Platform services"
                 },
-                "pageSize": {
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query",
-                  "description": "The max number of items to include in the response list. Page size is 50 if not specified. Maximum value is 100."
+                "https://www.googleapis.com/auth/service.management": {
+                    "description": "Manage your Google API service configuration"
                 },
-                "serviceName": {
-                  "type": "string",
-                  "location": "path",
-                  "description": "Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`.",
-                  "required": true
+                "https://www.googleapis.com/auth/service.management.readonly": {
+                    "description": "View your Google API service configuration"
                 }
-              },
-              "description": "Lists the history of the service configuration rollouts for a managed service, from the newest to the oldest.",
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "ListServiceRolloutsResponse"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/service.management",
-                "https://www.googleapis.com/auth/service.management.readonly"
-              ],
-              "parameterOrder": [
-                "serviceName"
-              ],
-              "id": "servicemanagement.services.rollouts.list"
-            },
-            "get": {
-              "id": "servicemanagement.services.rollouts.get",
-              "path": "v1/services/{serviceName}/rollouts/{rolloutId}",
-              "response": {
-                "$ref": "Rollout"
-              },
-              "parameterOrder": [
-                "serviceName",
-                "rolloutId"
-              ],
-              "flatPath": "v1/services/{serviceName}/rollouts/{rolloutId}",
-              "parameters": {
-                "serviceName": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "description": "Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`."
-                },
-                "rolloutId": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "Required. The id of the rollout resource."
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/service.management",
-                "https://www.googleapis.com/auth/service.management.readonly"
-              ],
-              "description": "Gets a service configuration rollout.",
-              "httpMethod": "GET"
             }
-          }
-        },
-        "configs": {
-          "methods": {
-            "get": {
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/service.management",
-                "https://www.googleapis.com/auth/service.management.readonly"
-              ],
-              "flatPath": "v1/services/{serviceName}/configs/{configId}",
-              "path": "v1/services/{serviceName}/configs/{configId}",
-              "description": "Gets a service configuration (version) for a managed service.",
-              "response": {
-                "$ref": "Service"
-              },
-              "parameterOrder": [
-                "serviceName",
-                "configId"
-              ],
-              "id": "servicemanagement.services.configs.get",
-              "parameters": {
-                "serviceName": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "description": "Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`."
-                },
-                "configId": {
-                  "description": "Required. The id of the service configuration resource. This field must be specified for the server to return all fields, including `SourceInfo`.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "view": {
-                  "enumDescriptions": [
-                    "Server response includes all fields except SourceInfo.",
-                    "Server response includes all fields including SourceInfo. SourceFiles are of type 'google.api.servicemanagement.v1.ConfigFile' and are only available for configs created using the SubmitConfigSource method."
-                  ],
-                  "location": "query",
-                  "enum": [
-                    "BASIC",
-                    "FULL"
-                  ],
-                  "description": "Specifies which parts of the Service Config should be returned in the response.",
-                  "type": "string"
-                }
-              }
-            },
-            "create": {
-              "parameters": {
-                "serviceName": {
-                  "type": "string",
-                  "required": true,
-                  "description": "Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`.",
-                  "location": "path"
-                }
-              },
-              "response": {
-                "$ref": "Service"
-              },
-              "request": {
-                "$ref": "Service"
-              },
-              "id": "servicemanagement.services.configs.create",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/service.management"
-              ],
-              "httpMethod": "POST",
-              "description": "Creates a new service configuration (version) for a managed service. This method only stores the service configuration. To roll out the service configuration to backend systems please call CreateServiceRollout. Only the 100 most recent service configurations and ones referenced by existing rollouts are kept for each service. The rest will be deleted eventually.",
-              "flatPath": "v1/services/{serviceName}/configs",
-              "path": "v1/services/{serviceName}/configs",
-              "parameterOrder": [
-                "serviceName"
-              ]
-            },
-            "submit": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/service.management"
-              ],
-              "description": "Creates a new service configuration (version) for a managed service based on user-supplied configuration source files (for example: OpenAPI Specification). This method stores the source configurations as well as the generated service configuration. To rollout the service configuration to other services, please call CreateServiceRollout. Only the 100 most recent configuration sources and ones referenced by existing service configurtions are kept for each service. The rest will be deleted eventually. Operation",
-              "path": "v1/services/{serviceName}/configs:submit",
-              "request": {
-                "$ref": "SubmitConfigSourceRequest"
-              },
-              "parameterOrder": [
-                "serviceName"
-              ],
-              "response": {
-                "$ref": "Operation"
-              },
-              "id": "servicemanagement.services.configs.submit",
-              "flatPath": "v1/services/{serviceName}/configs:submit",
-              "parameters": {
-                "serviceName": {
-                  "type": "string",
-                  "location": "path",
-                  "description": "Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`.",
-                  "required": true
-                }
-              },
-              "httpMethod": "POST"
-            },
-            "list": {
-              "httpMethod": "GET",
-              "id": "servicemanagement.services.configs.list",
-              "path": "v1/services/{serviceName}/configs",
-              "parameterOrder": [
-                "serviceName"
-              ],
-              "parameters": {
-                "pageSize": {
-                  "location": "query",
-                  "format": "int32",
-                  "description": "The max number of items to include in the response list. Page size is 50 if not specified. Maximum value is 100.",
-                  "type": "integer"
-                },
-                "pageToken": {
-                  "description": "The token of the page to retrieve.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "serviceName": {
-                  "required": true,
-                  "location": "path",
-                  "description": "Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`.",
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only",
-                "https://www.googleapis.com/auth/service.management",
-                "https://www.googleapis.com/auth/service.management.readonly"
-              ],
-              "description": "Lists the history of the service configuration for a managed service, from the newest to the oldest.",
-              "flatPath": "v1/services/{serviceName}/configs",
-              "response": {
-                "$ref": "ListServiceConfigsResponse"
-              }
-            }
-          }
         }
-      },
-      "methods": {
-        "setIamPolicy": {
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/service.management"
-          ],
-          "response": {
-            "$ref": "Policy"
-          },
-          "path": "v1/{+resource}:setIamPolicy",
-          "id": "servicemanagement.services.setIamPolicy",
-          "request": {
-            "$ref": "SetIamPolicyRequest"
-          },
-          "httpMethod": "POST",
-          "parameters": {
-            "resource": {
-              "location": "path",
-              "pattern": "^services/[^/]+$",
-              "type": "string",
-              "required": true,
-              "description": "REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field."
-            }
-          },
-          "description": "Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.",
-          "parameterOrder": [
-            "resource"
-          ],
-          "flatPath": "v1/services/{servicesId}:setIamPolicy"
-        },
-        "create": {
-          "httpMethod": "POST",
-          "path": "v1/services",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/service.management"
-          ],
-          "request": {
-            "$ref": "ManagedService"
-          },
-          "parameters": {},
-          "response": {
-            "$ref": "Operation"
-          },
-          "id": "servicemanagement.services.create",
-          "flatPath": "v1/services",
-          "description": "Creates a new managed service. A managed service is immutable, and is subject to mandatory 30-day data retention. You cannot move a service or recreate it within 30 days after deletion. One producer project can own no more than 500 services. For security and reliability purposes, a production service should be hosted in a dedicated producer project. Operation",
-          "parameterOrder": []
-        },
-        "get": {
-          "flatPath": "v1/services/{serviceName}",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only",
-            "https://www.googleapis.com/auth/service.management",
-            "https://www.googleapis.com/auth/service.management.readonly"
-          ],
-          "id": "servicemanagement.services.get",
-          "description": "Gets a managed service. Authentication is required unless the service is public.",
-          "path": "v1/services/{serviceName}",
-          "httpMethod": "GET",
-          "parameters": {
-            "serviceName": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "Required. The name of the service. See the `ServiceManager` overview for naming requirements. For example: `example.googleapis.com`."
-            }
-          },
-          "response": {
-            "$ref": "ManagedService"
-          },
-          "parameterOrder": [
-            "serviceName"
-          ]
-        },
-        "delete": {
-          "flatPath": "v1/services/{serviceName}",
-          "response": {
-            "$ref": "Operation"
-          },
-          "path": "v1/services/{serviceName}",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/service.management"
-          ],
-          "id": "servicemanagement.services.delete",
-          "parameters": {
-            "serviceName": {
-              "description": "Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`.",
-              "type": "string",
-              "location": "path",
-              "required": true
-            }
-          },
-          "parameterOrder": [
-            "serviceName"
-          ],
-          "description": "Deletes a managed service. This method will change the service to the `Soft-Delete` state for 30 days. Within this period, service producers may call UndeleteService to restore the service. After 30 days, the service will be permanently deleted. Operation",
-          "httpMethod": "DELETE"
-        },
-        "undelete": {
-          "parameterOrder": [
-            "serviceName"
-          ],
-          "id": "servicemanagement.services.undelete",
-          "httpMethod": "POST",
-          "path": "v1/services/{serviceName}:undelete",
-          "parameters": {
-            "serviceName": {
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`."
-            }
-          },
-          "description": "Revives a previously deleted managed service. The method restores the service using the configuration at the time the service was deleted. The target service must exist and must have been deleted within the last 30 days. Operation",
-          "response": {
-            "$ref": "Operation"
-          },
-          "flatPath": "v1/services/{serviceName}:undelete",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/service.management"
-          ]
-        },
-        "getConfig": {
-          "path": "v1/services/{serviceName}/config",
-          "description": "Gets a service configuration (version) for a managed service.",
-          "response": {
-            "$ref": "Service"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only",
-            "https://www.googleapis.com/auth/service.management",
-            "https://www.googleapis.com/auth/service.management.readonly"
-          ],
-          "parameterOrder": [
-            "serviceName"
-          ],
-          "flatPath": "v1/services/{serviceName}/config",
-          "parameters": {
-            "view": {
-              "location": "query",
-              "enum": [
-                "BASIC",
-                "FULL"
-              ],
-              "description": "Specifies which parts of the Service Config should be returned in the response.",
-              "type": "string",
-              "enumDescriptions": [
-                "Server response includes all fields except SourceInfo.",
-                "Server response includes all fields including SourceInfo. SourceFiles are of type 'google.api.servicemanagement.v1.ConfigFile' and are only available for configs created using the SubmitConfigSource method."
-              ]
-            },
-            "configId": {
-              "type": "string",
-              "location": "query",
-              "description": "Required. The id of the service configuration resource. This field must be specified for the server to return all fields, including `SourceInfo`."
-            },
-            "serviceName": {
-              "description": "Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`.",
-              "location": "path",
-              "type": "string",
-              "required": true
-            }
-          },
-          "httpMethod": "GET",
-          "id": "servicemanagement.services.getConfig"
-        },
-        "getIamPolicy": {
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only",
-            "https://www.googleapis.com/auth/service.management",
-            "https://www.googleapis.com/auth/service.management.readonly"
-          ],
-          "id": "servicemanagement.services.getIamPolicy",
-          "request": {
-            "$ref": "GetIamPolicyRequest"
-          },
-          "flatPath": "v1/services/{servicesId}:getIamPolicy",
-          "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.",
-          "parameterOrder": [
-            "resource"
-          ],
-          "parameters": {
-            "resource": {
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field.",
-              "pattern": "^services/[^/]+$"
-            }
-          },
-          "path": "v1/{+resource}:getIamPolicy",
-          "response": {
-            "$ref": "Policy"
-          },
-          "httpMethod": "POST"
-        },
-        "enable": {
-          "httpMethod": "POST",
-          "parameters": {
-            "serviceName": {
-              "type": "string",
-              "required": true,
-              "description": "Required. Name of the service to enable. Specifying an unknown service name will cause the request to fail.",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/service.management"
-          ],
-          "path": "v1/services/{serviceName}:enable",
-          "description": "Enables a service for a project, so it can be used for the project. See [Cloud Auth Guide](https://cloud.google.com/docs/authentication) for more information. Operation",
-          "parameterOrder": [
-            "serviceName"
-          ],
-          "response": {
-            "$ref": "Operation"
-          },
-          "request": {
-            "$ref": "EnableServiceRequest"
-          },
-          "flatPath": "v1/services/{serviceName}:enable",
-          "id": "servicemanagement.services.enable"
-        },
-        "list": {
-          "parameterOrder": [],
-          "id": "servicemanagement.services.list",
-          "parameters": {
-            "pageSize": {
-              "type": "integer",
-              "description": "The max number of items to include in the response list. Page size is 50 if not specified. Maximum value is 100.",
-              "location": "query",
-              "format": "int32"
-            },
-            "producerProjectId": {
-              "location": "query",
-              "type": "string",
-              "description": "Include services produced by the specified project."
-            },
-            "pageToken": {
-              "location": "query",
-              "type": "string",
-              "description": "Token identifying which result to start with; returned by a previous list call."
-            },
-            "consumerId": {
-              "type": "string",
-              "location": "query",
-              "description": "Include services consumed by the specified consumer. The Google Service Management implementation accepts the following forms: - project:"
-            }
-          },
-          "flatPath": "v1/services",
-          "path": "v1/services",
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only",
-            "https://www.googleapis.com/auth/service.management",
-            "https://www.googleapis.com/auth/service.management.readonly"
-          ],
-          "response": {
-            "$ref": "ListServicesResponse"
-          },
-          "description": "Lists managed services. Returns all public services. For authenticated users, also returns all services the calling user has \"servicemanagement.services.get\" permission for. **BETA:** If the caller specifies the `consumer_id`, it returns only the services enabled on the consumer. The `consumer_id` must have the format of \"project:{PROJECT-ID}\"."
-        },
-        "testIamPermissions": {
-          "response": {
-            "$ref": "TestIamPermissionsResponse"
-          },
-          "request": {
-            "$ref": "TestIamPermissionsRequest"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only",
-            "https://www.googleapis.com/auth/service.management",
-            "https://www.googleapis.com/auth/service.management.readonly"
-          ],
-          "parameters": {
-            "resource": {
-              "location": "path",
-              "pattern": "^services/[^/]+$",
-              "required": true,
-              "type": "string",
-              "description": "REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field."
-            }
-          },
-          "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may \"fail open\" without warning.",
-          "flatPath": "v1/services/{servicesId}:testIamPermissions",
-          "parameterOrder": [
-            "resource"
-          ],
-          "path": "v1/{+resource}:testIamPermissions",
-          "httpMethod": "POST",
-          "id": "servicemanagement.services.testIamPermissions"
-        },
-        "generateConfigReport": {
-          "flatPath": "v1/services:generateConfigReport",
-          "httpMethod": "POST",
-          "description": "Generates and returns a report (errors, warnings and changes from existing configurations) associated with GenerateConfigReportRequest.new_value If GenerateConfigReportRequest.old_value is specified, GenerateConfigReportRequest will contain a single ChangeReport based on the comparison between GenerateConfigReportRequest.new_value and GenerateConfigReportRequest.old_value. If GenerateConfigReportRequest.old_value is not specified, this method will compare GenerateConfigReportRequest.new_value with the last pushed service configuration.",
-          "parameters": {},
-          "parameterOrder": [],
-          "response": {
-            "$ref": "GenerateConfigReportResponse"
-          },
-          "id": "servicemanagement.services.generateConfigReport",
-          "path": "v1/services:generateConfigReport",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/service.management"
-          ],
-          "request": {
-            "$ref": "GenerateConfigReportRequest"
-          }
-        }
-      }
     },
-    "operations": {
-      "methods": {
-        "get": {
-          "flatPath": "v1/operations/{operationsId}",
-          "response": {
-            "$ref": "Operation"
-          },
-          "path": "v1/{+name}",
-          "httpMethod": "GET",
-          "id": "servicemanagement.operations.get",
-          "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
-          "parameterOrder": [
-            "name"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/service.management"
-          ],
-          "parameters": {
-            "name": {
-              "pattern": "^operations/.*$",
-              "location": "path",
-              "required": true,
-              "description": "The name of the operation resource.",
-              "type": "string"
-            }
-          }
-        },
-        "list": {
-          "path": "v1/operations",
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/service.management"
-          ],
-          "description": "Lists service operations that match the specified filter in the request.",
-          "flatPath": "v1/operations",
-          "parameterOrder": [],
-          "id": "servicemanagement.operations.list",
-          "response": {
-            "$ref": "ListOperationsResponse"
-          },
-          "parameters": {
-            "pageSize": {
-              "format": "int32",
-              "type": "integer",
-              "location": "query",
-              "description": "The maximum number of operations to return. If unspecified, defaults to 50. The maximum value is 100."
-            },
-            "filter": {
-              "type": "string",
-              "location": "query",
-              "description": "A string for filtering Operations. The following filter fields are supported: * serviceName: Required. Only `=` operator is allowed. * startTime: The time this job was started, in ISO 8601 format. Allowed operators are `\u003e=`, `\u003e`, `\u003c=`, and `\u003c`. * status: Can be `done`, `in_progress`, or `failed`. Allowed operators are `=`, and `!=`. Filter expression supports conjunction (AND) and disjunction (OR) logical operators. However, the serviceName restriction must be at the top-level and can only be combined with other restrictions via the AND logical operator. Examples: * `serviceName={some-service}.googleapis.com` * `serviceName={some-service}.googleapis.com AND startTime\u003e=\"2017-02-01\"` * `serviceName={some-service}.googleapis.com AND status=done` * `serviceName={some-service}.googleapis.com AND (status=done OR startTime\u003e=\"2017-02-01\")`"
-            },
-            "pageToken": {
-              "description": "The standard list page token.",
-              "type": "string",
-              "location": "query"
-            },
-            "name": {
-              "location": "query",
-              "description": "Not used.",
-              "type": "string"
-            }
-          }
-        }
-      }
-    }
-  },
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "servicePath": "",
-  "fullyEncodeReservedExpansion": true,
-  "id": "servicemanagement:v1",
-  "ownerName": "Google",
-  "version": "v1",
-  "protocol": "rest",
-  "baseUrl": "https://servicemanagement.googleapis.com/",
-  "revision": "20201106",
-  "name": "servicemanagement",
-  "canonicalName": "Service Management",
-  "ownerDomain": "google.com",
-  "schemas": {
-    "EnableServiceRequest": {
-      "description": "Request message for EnableService method.",
-      "properties": {
-        "consumerId": {
-          "description": "Required. The identity of consumer resource which service enablement will be applied to. The Google Service Management implementation accepts the following forms: - \"project:\" Note: this is made compatible with google.api.servicecontrol.v1.Operation.consumer_id.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "EnableServiceRequest"
+    "basePath": "",
+    "baseUrl": "https://servicemanagement.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Service Management",
+    "description": "Google Service Management allows service producers to publish their services on Google Cloud Platform so that they can be discovered and used by service consumers.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/service-management/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
     },
-    "TrafficPercentStrategy": {
-      "description": "Strategy that specifies how clients of Google Service Controller want to send traffic to use different config versions. This is generally used by API proxy to split traffic based on your configured percentage for each config version. One example of how to gradually rollout a new service configuration using this strategy: Day 1 Rollout { id: \"example.googleapis.com/rollout_20160206\" traffic_percent_strategy { percentages: { \"example.googleapis.com/20160201\": 70.00 \"example.googleapis.com/20160206\": 30.00 } } } Day 2 Rollout { id: \"example.googleapis.com/rollout_20160207\" traffic_percent_strategy: { percentages: { \"example.googleapis.com/20160206\": 100.00 } } }",
-      "type": "object",
-      "properties": {
-        "percentages": {
-          "additionalProperties": {
-            "format": "double",
-            "type": "number"
-          },
-          "type": "object",
-          "description": "Maps service configuration IDs to their corresponding traffic percentage. Key is the service configuration ID, Value is the traffic percentage which must be greater than 0.0 and the sum must equal to 100.0."
-        }
-      },
-      "id": "TrafficPercentStrategy"
-    },
-    "Rollout": {
-      "id": "Rollout",
-      "type": "object",
-      "properties": {
-        "status": {
-          "description": "The status of this rollout. Readonly. In case of a failed rollout, the system will automatically rollback to the current Rollout version. Readonly.",
-          "type": "string",
-          "enumDescriptions": [
-            "No status specified.",
-            "The Rollout is in progress.",
-            "The Rollout has completed successfully.",
-            "The Rollout has been cancelled. This can happen if you have overlapping Rollout pushes, and the previous ones will be cancelled.",
-            "The Rollout has failed and the rollback attempt has failed too.",
-            "The Rollout has not started yet and is pending for execution.",
-            "The Rollout has failed and rolled back to the previous successful Rollout."
-          ],
-          "enum": [
-            "ROLLOUT_STATUS_UNSPECIFIED",
-            "IN_PROGRESS",
-            "SUCCESS",
-            "CANCELLED",
-            "FAILED",
-            "PENDING",
-            "FAILED_ROLLED_BACK"
-          ]
-        },
-        "trafficPercentStrategy": {
-          "$ref": "TrafficPercentStrategy",
-          "description": "Google Service Control selects service configurations based on traffic percentage."
-        },
-        "rolloutId": {
-          "description": "Optional. Unique identifier of this Rollout. Must be no longer than 63 characters and only lower case letters, digits, '.', '_' and '-' are allowed. If not specified by client, the server will generate one. The generated id will have the form of , where \"date\" is the create date in ISO 8601 format. \"revision number\" is a monotonically increasing positive number that is reset every day for each service. An example of the generated rollout_id is '2016-02-16r1'",
-          "type": "string"
-        },
-        "createTime": {
-          "description": "Creation time of the rollout. Readonly.",
-          "type": "string",
-          "format": "google-datetime"
-        },
-        "deleteServiceStrategy": {
-          "$ref": "DeleteServiceStrategy",
-          "description": "The strategy associated with a rollout to delete a `ManagedService`. Readonly."
-        },
-        "serviceName": {
-          "description": "The name of the service associated with this Rollout.",
-          "type": "string"
-        },
-        "createdBy": {
-          "type": "string",
-          "description": "This field is deprecated and will be deleted. Please remove usage of this field."
-        }
-      },
-      "description": "A rollout resource that defines how service configuration versions are pushed to control plane systems. Typically, you create a new version of the service config, and then create a Rollout to push the service config."
-    },
-    "ContextRule": {
-      "id": "ContextRule",
-      "properties": {
-        "provided": {
-          "type": "array",
-          "description": "A list of full type names of provided contexts.",
-          "items": {
+    "id": "servicemanagement:v1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://servicemanagement.mtls.googleapis.com/",
+    "name": "servicemanagement",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
             "type": "string"
-          }
         },
-        "allowedResponseExtensions": {
-          "items": {
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
             "type": "string"
-          },
-          "description": "A list of full type names or extension IDs of extensions allowed in grpc side channel from backend to client.",
-          "type": "array"
         },
-        "allowedRequestExtensions": {
-          "type": "array",
-          "items": {
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
             "type": "string"
-          },
-          "description": "A list of full type names or extension IDs of extensions allowed in grpc side channel from client to backend."
         },
-        "requested": {
-          "description": "A list of full type names of requested contexts.",
-          "items": {
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
             "type": "string"
-          },
-          "type": "array"
-        },
-        "selector": {
-          "description": "Selects the methods to which this rule applies. Refer to selector for syntax details.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "A context rule provides information about the context for an individual API element."
-    },
-    "Authentication": {
-      "id": "Authentication",
-      "type": "object",
-      "description": "`Authentication` defines the authentication configuration for an API. Example for an API targeted for external use: name: calendar.googleapis.com authentication: providers: - id: google_calendar_auth jwks_uri: https://www.googleapis.com/oauth2/v1/certs issuer: https://securetoken.google.com rules: - selector: \"*\" requirements: provider_id: google_calendar_auth",
-      "properties": {
-        "providers": {
-          "type": "array",
-          "description": "Defines a set of authentication providers that a service supports.",
-          "items": {
-            "$ref": "AuthProvider"
-          }
-        },
-        "rules": {
-          "type": "array",
-          "description": "A list of authentication rules that apply to individual API methods. **NOTE:** All service configuration rules follow \"last one wins\" order.",
-          "items": {
-            "$ref": "AuthenticationRule"
-          }
-        }
-      }
-    },
-    "SetIamPolicyRequest": {
-      "type": "object",
-      "description": "Request message for `SetIamPolicy` method.",
-      "properties": {
-        "updateMask": {
-          "description": "OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only the fields in the mask will be modified. If no mask is provided, the following default mask is used: `paths: \"bindings, etag\"`",
-          "format": "google-fieldmask",
-          "type": "string"
-        },
-        "policy": {
-          "$ref": "Policy",
-          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them."
-        }
-      },
-      "id": "SetIamPolicyRequest"
-    },
-    "ChangeReport": {
-      "id": "ChangeReport",
-      "type": "object",
-      "description": "Change report associated with a particular service configuration. It contains a list of ConfigChanges based on the comparison between two service configurations.",
-      "properties": {
-        "configChanges": {
-          "description": "List of changes between two service configurations. The changes will be alphabetically sorted based on the identifier of each change. A ConfigChange identifier is a dot separated path to the configuration. Example: visibility.rules[selector='LibraryService.CreateBook'].restriction",
-          "items": {
-            "$ref": "ConfigChange"
-          },
-          "type": "array"
-        }
-      }
-    },
-    "AuditLogConfig": {
-      "id": "AuditLogConfig",
-      "type": "object",
-      "description": "Provides the configuration for logging a type of permissions. Example: { \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" } ] } This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting jose@example.com from DATA_READ logging.",
-      "properties": {
-        "logType": {
-          "type": "string",
-          "description": "The log type that this config enables.",
-          "enum": [
-            "LOG_TYPE_UNSPECIFIED",
-            "ADMIN_READ",
-            "DATA_WRITE",
-            "DATA_READ"
-          ],
-          "enumDescriptions": [
-            "Default case. Should never be this.",
-            "Admin reads. Example: CloudIAM getIamPolicy",
-            "Data writes. Example: CloudSQL Users create",
-            "Data reads. Example: CloudSQL Users list"
-          ]
-        },
-        "exemptedMembers": {
-          "type": "array",
-          "description": "Specifies the identities that do not cause logging for this type of permission. Follows the same format of Binding.members.",
-          "items": {
-            "type": "string"
-          }
-        }
-      }
-    },
-    "Usage": {
-      "type": "object",
-      "id": "Usage",
-      "properties": {
-        "requirements": {
-          "type": "array",
-          "description": "Requirements that must be satisfied before a consumer project can use the service. Each requirement is of the form /; for example 'serviceusage.googleapis.com/billing-enabled'.",
-          "items": {
-            "type": "string"
-          }
-        },
-        "producerNotificationChannel": {
-          "description": "The full resource name of a channel used for sending notifications to the service producer. Google Service Management currently only supports [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification channel. To use Google Cloud Pub/Sub as the channel, this must be the name of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format documented in https://cloud.google.com/pubsub/docs/overview.",
-          "type": "string"
-        },
-        "rules": {
-          "items": {
-            "$ref": "UsageRule"
-          },
-          "type": "array",
-          "description": "A list of usage rules that apply to individual API methods. **NOTE:** All service configuration rules follow \"last one wins\" order."
-        }
-      },
-      "description": "Configuration controlling usage of a service."
-    },
-    "GetPolicyOptions": {
-      "id": "GetPolicyOptions",
-      "type": "object",
-      "properties": {
-        "requestedPolicyVersion": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Optional. The policy format version to be returned. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional bindings must specify version 3. Policies without any conditional bindings may specify any valid value or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)."
-        }
-      },
-      "description": "Encapsulates settings provided to GetIamPolicy."
-    },
-    "ManagedService": {
-      "id": "ManagedService",
-      "type": "object",
-      "description": "The full representation of a Service that is managed by Google Service Management.",
-      "properties": {
-        "serviceName": {
-          "description": "The name of the service. See the [overview](/service-management/overview) for naming requirements.",
-          "type": "string"
-        },
-        "producerProjectId": {
-          "description": "ID of the project that produces and owns this service.",
-          "type": "string"
-        }
-      }
-    },
-    "ListServiceRolloutsResponse": {
-      "description": "Response message for ListServiceRollouts method.",
-      "properties": {
-        "nextPageToken": {
-          "description": "The token of the next page of results.",
-          "type": "string"
-        },
-        "rollouts": {
-          "type": "array",
-          "description": "The list of rollout resources.",
-          "items": {
-            "$ref": "Rollout"
-          }
-        }
-      },
-      "id": "ListServiceRolloutsResponse",
-      "type": "object"
-    },
-    "LogDescriptor": {
-      "type": "object",
-      "id": "LogDescriptor",
-      "description": "A description of a log type. Example in YAML format: - name: library.googleapis.com/activity_history description: The history of borrowing and returning library items. display_name: Activity labels: - key: /customer_id description: Identifier of a library customer",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "The name of the log. It must be less than 512 characters long and can include the following characters: upper- and lower-case alphanumeric characters [A-Za-z0-9], and punctuation characters including slash, underscore, hyphen, period [/_-.]."
-        },
-        "description": {
-          "type": "string",
-          "description": "A human-readable description of this log. This information appears in the documentation and can contain details."
-        },
-        "labels": {
-          "description": "The set of labels that are available to describe a specific log entry. Runtime requests that contain labels not specified here are considered invalid.",
-          "type": "array",
-          "items": {
-            "$ref": "LabelDescriptor"
-          }
-        },
-        "displayName": {
-          "type": "string",
-          "description": "The human-readable name for this log. This information appears on the user interface and should be concise."
-        }
-      }
-    },
-    "EnumValue": {
-      "id": "EnumValue",
-      "type": "object",
-      "properties": {
-        "number": {
-          "type": "integer",
-          "format": "int32",
-          "description": "Enum value number."
-        },
-        "options": {
-          "type": "array",
-          "items": {
-            "$ref": "Option"
-          },
-          "description": "Protocol buffer options."
-        },
-        "name": {
-          "description": "Enum value name.",
-          "type": "string"
-        }
-      },
-      "description": "Enum value definition."
-    },
-    "Quota": {
-      "type": "object",
-      "description": "Quota configuration helps to achieve fairness and budgeting in service usage. The metric based quota configuration works this way: - The service configuration defines a set of metrics. - For API calls, the quota.metric_rules maps methods to metrics with corresponding costs. - The quota.limits defines limits on the metrics, which will be used for quota checks at runtime. An example quota configuration in yaml format: quota: limits: - name: apiWriteQpsPerProject metric: library.googleapis.com/write_calls unit: \"1/min/{project}\" # rate limit for consumer projects values: STANDARD: 10000 # The metric rules bind all methods to the read_calls metric, # except for the UpdateBook and DeleteBook methods. These two methods # are mapped to the write_calls metric, with the UpdateBook method # consuming at twice rate as the DeleteBook method. metric_rules: - selector: \"*\" metric_costs: library.googleapis.com/read_calls: 1 - selector: google.example.library.v1.LibraryService.UpdateBook metric_costs: library.googleapis.com/write_calls: 2 - selector: google.example.library.v1.LibraryService.DeleteBook metric_costs: library.googleapis.com/write_calls: 1 Corresponding Metric definition: metrics: - name: library.googleapis.com/read_calls display_name: Read requests metric_kind: DELTA value_type: INT64 - name: library.googleapis.com/write_calls display_name: Write requests metric_kind: DELTA value_type: INT64 ",
-      "properties": {
-        "metricRules": {
-          "items": {
-            "$ref": "MetricRule"
-          },
-          "type": "array",
-          "description": "List of `MetricRule` definitions, each one mapping a selected method to one or more metrics."
-        },
-        "limits": {
-          "description": "List of `QuotaLimit` definitions for the service.",
-          "items": {
-            "$ref": "QuotaLimit"
-          },
-          "type": "array"
-        }
-      },
-      "id": "Quota"
-    },
-    "Expr": {
-      "properties": {
-        "expression": {
-          "description": "Textual representation of an expression in Common Expression Language syntax.",
-          "type": "string"
-        },
-        "location": {
-          "type": "string",
-          "description": "Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file."
-        },
-        "description": {
-          "description": "Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.",
-          "type": "string"
-        },
-        "title": {
-          "type": "string",
-          "description": "Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression."
-        }
-      },
-      "id": "Expr",
-      "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() \u003c 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.",
-      "type": "object"
-    },
-    "HttpRule": {
-      "description": "# gRPC Transcoding gRPC Transcoding is a feature for mapping between a gRPC method and one or more HTTP REST endpoints. It allows developers to build a single API service that supports both gRPC APIs and REST APIs. Many systems, including [Google APIs](https://github.com/googleapis/googleapis), [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC Gateway](https://github.com/grpc-ecosystem/grpc-gateway), and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature and use it for large scale production services. `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies how different portions of the gRPC request message are mapped to the URL path, URL query parameters, and HTTP request body. It also controls how the gRPC response message is mapped to the HTTP response body. `HttpRule` is typically specified as an `google.api.http` annotation on the gRPC method. Each mapping specifies a URL path template and an HTTP method. The path template may refer to one or more fields in the gRPC request message, as long as each field is a non-repeated field with a primitive (non-message) type. The path template controls how fields of the request message are mapped to the URL path. Example: service Messaging { rpc GetMessage(GetMessageRequest) returns (Message) { option (google.api.http) = { get: \"/v1/{name=messages/*}\" }; } } message GetMessageRequest { string name = 1; // Mapped to URL path. } message Message { string text = 1; // The resource content. } This enables an HTTP REST to gRPC mapping as below: HTTP | gRPC -----|----- `GET /v1/messages/123456` | `GetMessage(name: \"messages/123456\")` Any fields in the request message which are not bound by the path template automatically become HTTP query parameters if there is no HTTP request body. For example: service Messaging { rpc GetMessage(GetMessageRequest) returns (Message) { option (google.api.http) = { get:\"/v1/messages/{message_id}\" }; } } message GetMessageRequest { message SubMessage { string subfield = 1; } string message_id = 1; // Mapped to URL path. int64 revision = 2; // Mapped to URL query parameter `revision`. SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`. } This enables a HTTP JSON to RPC mapping as below: HTTP | gRPC -----|----- `GET /v1/messages/123456?revision=2&sub.subfield=foo` | `GetMessage(message_id: \"123456\" revision: 2 sub: SubMessage(subfield: \"foo\"))` Note that fields which are mapped to URL query parameters must have a primitive type or a repeated primitive type or a non-repeated message type. In the case of a repeated type, the parameter can be repeated in the URL as `...?param=A&param=B`. In the case of a message type, each field of the message is mapped to a separate parameter, such as `...?foo.a=A&foo.b=B&foo.c=C`. For HTTP methods that allow a request body, the `body` field specifies the mapping. Consider a REST update method on the message resource collection: service Messaging { rpc UpdateMessage(UpdateMessageRequest) returns (Message) { option (google.api.http) = { patch: \"/v1/messages/{message_id}\" body: \"message\" }; } } message UpdateMessageRequest { string message_id = 1; // mapped to the URL Message message = 2; // mapped to the body } The following HTTP JSON to RPC mapping is enabled, where the representation of the JSON in the request body is determined by protos JSON encoding: HTTP | gRPC -----|----- `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id: \"123456\" message { text: \"Hi!\" })` The special name `*` can be used in the body mapping to define that every field not bound by the path template should be mapped to the request body. This enables the following alternative definition of the update method: service Messaging { rpc UpdateMessage(Message) returns (Message) { option (google.api.http) = { patch: \"/v1/messages/{message_id}\" body: \"*\" }; } } message Message { string message_id = 1; string text = 2; } The following HTTP JSON to RPC mapping is enabled: HTTP | gRPC -----|----- `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id: \"123456\" text: \"Hi!\")` Note that when using `*` in the body mapping, it is not possible to have HTTP parameters, as all fields not bound by the path end in the body. This makes this option more rarely used in practice when defining REST APIs. The common usage of `*` is in custom methods which don't use the URL at all for transferring data. It is possible to define multiple HTTP methods for one RPC by using the `additional_bindings` option. Example: service Messaging { rpc GetMessage(GetMessageRequest) returns (Message) { option (google.api.http) = { get: \"/v1/messages/{message_id}\" additional_bindings { get: \"/v1/users/{user_id}/messages/{message_id}\" } }; } } message GetMessageRequest { string message_id = 1; string user_id = 2; } This enables the following two alternative HTTP JSON to RPC mappings: HTTP | gRPC -----|----- `GET /v1/messages/123456` | `GetMessage(message_id: \"123456\")` `GET /v1/users/me/messages/123456` | `GetMessage(user_id: \"me\" message_id: \"123456\")` ## Rules for HTTP mapping 1. Leaf request fields (recursive expansion nested messages in the request message) are classified into three categories: - Fields referred by the path template. They are passed via the URL path. - Fields referred by the HttpRule.body. They are passed via the HTTP request body. - All other fields are passed via the URL query parameters, and the parameter name is the field path in the request message. A repeated field can be represented as multiple query parameters under the same name. 2. If HttpRule.body is \"*\", there is no URL query parameter, all fields are passed via URL path and HTTP request body. 3. If HttpRule.body is omitted, there is no HTTP request body, all fields are passed via URL path and URL query parameters. ### Path template syntax Template = \"/\" Segments [ Verb ] ; Segments = Segment { \"/\" Segment } ; Segment = \"*\" | \"**\" | LITERAL | Variable ; Variable = \"{\" FieldPath [ \"=\" Segments ] \"}\" ; FieldPath = IDENT { \".\" IDENT } ; Verb = \":\" LITERAL ; The syntax `*` matches a single URL path segment. The syntax `**` matches zero or more URL path segments, which must be the last part of the URL path except the `Verb`. The syntax `Variable` matches part of the URL path as specified by its template. A variable template must not contain other variables. If a variable matches a single path segment, its template may be omitted, e.g. `{var}` is equivalent to `{var=*}`. The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL` contains any reserved character, such characters should be percent-encoded before the matching. If a variable contains exactly one path segment, such as `\"{var}\"` or `\"{var=*}\"`, when such a variable is expanded into a URL path on the client side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The server side does the reverse decoding. Such variables show up in the [Discovery Document](https://developers.google.com/discovery/v1/reference/apis) as `{var}`. If a variable contains multiple path segments, such as `\"{var=foo/*}\"` or `\"{var=**}\"`, when such a variable is expanded into a URL path on the client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. The server side does the reverse decoding, except \"%2F\" and \"%2f\" are left unchanged. Such variables show up in the [Discovery Document](https://developers.google.com/discovery/v1/reference/apis) as `{+var}`. ## Using gRPC API Service Configuration gRPC API Service Configuration (service config) is a configuration language for configuring a gRPC service to become a user-facing product. The service config is simply the YAML representation of the `google.api.Service` proto message. As an alternative to annotating your proto file, you can configure gRPC transcoding in your service config YAML files. You do this by specifying a `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same effect as the proto annotation. This can be particularly useful if you have a proto that is reused in multiple services. Note that any transcoding specified in the service config will override any matching transcoding configuration in the proto. Example: http: rules: # Selects a gRPC method and applies HttpRule to it. - selector: example.v1.Messaging.GetMessage get: /v1/messages/{message_id}/{sub.subfield} ## Special notes When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the proto to JSON conversion must follow the [proto3 specification](https://developers.google.com/protocol-buffers/docs/proto3#json). While the single segment variable follows the semantics of [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String Expansion, the multi segment variable **does not** follow RFC 6570 Section 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion does not expand special characters like `?` and `#`, which would lead to invalid URLs. As the result, gRPC Transcoding uses a custom encoding for multi segment variables. The path variables **must not** refer to any repeated or mapped field, because client libraries are not capable of handling such variable expansion. The path variables **must not** capture the leading \"/\" character. The reason is that the most common use case \"{var}\" does not capture the leading \"/\" character. For consistency, all path variables must share the same behavior. Repeated message fields must not be mapped to URL query parameters, because no client library can support such complicated mapping. If an API needs to use a JSON array for request or response body, it can map the request or response body to a repeated field. However, some gRPC Transcoding implementations may not support this feature.",
-      "type": "object",
-      "id": "HttpRule",
-      "properties": {
-        "additionalBindings": {
-          "items": {
-            "$ref": "HttpRule"
-          },
-          "description": "Additional HTTP bindings for the selector. Nested bindings must not contain an `additional_bindings` field themselves (that is, the nesting may only be one level deep).",
-          "type": "array"
-        },
-        "post": {
-          "description": "Maps to HTTP POST. Used for creating a resource or performing an action.",
-          "type": "string"
-        },
-        "get": {
-          "type": "string",
-          "description": "Maps to HTTP GET. Used for listing and getting information about resources."
-        },
-        "patch": {
-          "type": "string",
-          "description": "Maps to HTTP PATCH. Used for updating a resource."
-        },
-        "put": {
-          "type": "string",
-          "description": "Maps to HTTP PUT. Used for replacing a resource."
-        },
-        "delete": {
-          "type": "string",
-          "description": "Maps to HTTP DELETE. Used for deleting a resource."
-        },
-        "responseBody": {
-          "type": "string",
-          "description": "Optional. The name of the response field whose value is mapped to the HTTP response body. When omitted, the entire response message will be used as the HTTP response body. NOTE: The referred field must be present at the top-level of the response message type."
-        },
-        "custom": {
-          "description": "The custom pattern is used for specifying an HTTP method that is not included in the `pattern` field, such as HEAD, or \"*\" to leave the HTTP method unspecified for this rule. The wild-card rule is useful for services that provide content to Web (HTML) clients.",
-          "$ref": "CustomHttpPattern"
-        },
-        "selector": {
-          "description": "Selects a method to which this rule applies. Refer to selector for syntax details.",
-          "type": "string"
-        },
-        "body": {
-          "description": "The name of the request field whose value is mapped to the HTTP request body, or `*` for mapping all request fields not captured by the path pattern to the HTTP body, or omitted for not having any HTTP request body. NOTE: the referred field must be present at the top-level of the request message type.",
-          "type": "string"
-        }
-      }
-    },
-    "EnableServiceResponse": {
-      "id": "EnableServiceResponse",
-      "type": "object",
-      "description": "Operation payload for EnableService method.",
-      "properties": {}
-    },
-    "MetricRule": {
-      "description": "Bind API methods to metrics. Binding a method to a metric causes that metric's configured quota behaviors to apply to the method call.",
-      "id": "MetricRule",
-      "properties": {
-        "selector": {
-          "type": "string",
-          "description": "Selects the methods to which this rule applies. Refer to selector for syntax details."
-        },
-        "metricCosts": {
-          "description": "Metrics to update when the selected methods are called, and the associated cost applied to each metric. The key of the map is the metric name, and the values are the amount increased for the metric against which the quota limits are defined. The value must not be negative.",
-          "additionalProperties": {
-            "format": "int64",
-            "type": "string"
-          },
-          "type": "object"
-        }
-      },
-      "type": "object"
-    },
-    "Documentation": {
-      "type": "object",
-      "id": "Documentation",
-      "description": "`Documentation` provides the information for describing a service. Example: documentation: summary: \u003e The Google Calendar API gives access to most calendar features. pages: - name: Overview content: (== include google/foo/overview.md ==) - name: Tutorial content: (== include google/foo/tutorial.md ==) subpages; - name: Java content: (== include google/foo/tutorial_java.md ==) rules: - selector: google.calendar.Calendar.Get description: \u003e ... - selector: google.calendar.Calendar.Put description: \u003e ... Documentation is provided in markdown syntax. In addition to standard markdown features, definition lists, tables and fenced code blocks are supported. Section headers can be provided and are interpreted relative to the section nesting of the context where a documentation fragment is embedded. Documentation from the IDL is merged with documentation defined via the config at normalization time, where documentation provided by config rules overrides IDL provided. A number of constructs specific to the API platform are supported in documentation text. In order to reference a proto element, the following notation can be used: [fully.qualified.proto.name][] To override the display text used for the link, this can be used: [display text][fully.qualified.proto.name] Text can be excluded from doc using the following notation: (-- internal comment --) A few directives are available in documentation. Note that directives must appear on a single line to be properly identified. The `include` directive includes a markdown file from an external source: (== include path/to/file ==) The `resource_for` directive marks a message to be the resource of a collection in REST view. If it is not specified, tools attempt to infer the resource from the operations in a collection: (== resource_for v1.shelves.books ==) The directive `suppress_warning` does not directly affect documentation and is documented together with service config validation.",
-      "properties": {
-        "summary": {
-          "description": "A short summary of what the service does. Can only be provided by plain text.",
-          "type": "string"
-        },
-        "rules": {
-          "items": {
-            "$ref": "DocumentationRule"
-          },
-          "type": "array",
-          "description": "A list of documentation rules that apply to individual API elements. **NOTE:** All service configuration rules follow \"last one wins\" order."
-        },
-        "pages": {
-          "type": "array",
-          "items": {
-            "$ref": "Page"
-          },
-          "description": "The top level pages for the documentation set."
-        },
-        "overview": {
-          "type": "string",
-          "description": "Declares a single overview page. For example: documentation: summary: ... overview: (== include overview.md ==) This is a shortcut for the following declaration (using pages style): documentation: summary: ... pages: - name: Overview content: (== include overview.md ==) Note: you cannot specify both `overview` field and `pages` field."
-        },
-        "documentationRootUrl": {
-          "type": "string",
-          "description": "The URL to the root of documentation."
-        },
-        "serviceRootUrl": {
-          "type": "string",
-          "description": "Specifies the service root url if the default one (the service name from the yaml file) is not suitable. This can be seen in any fully specified service urls as well as sections that show a base that other urls are relative to."
-        }
-      }
-    },
-    "Binding": {
-      "properties": {
-        "condition": {
-          "description": "The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
-          "$ref": "Expr"
-        },
-        "members": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. "
-        },
-        "role": {
-          "type": "string",
-          "description": "Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`."
-        }
-      },
-      "type": "object",
-      "description": "Associates `members` with a `role`.",
-      "id": "Binding"
-    },
-    "Option": {
-      "id": "Option",
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "The option's name. For protobuf built-in options (options defined in descriptor.proto), this is the short name. For example, `\"map_entry\"`. For custom options, it should be the fully-qualified name. For example, `\"google.api.http\"`."
-        },
-        "value": {
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "type": "object",
-          "description": "The option's value packed in an Any message. If the value is a primitive, the corresponding wrapper type defined in google/protobuf/wrappers.proto should be used. If the value is an enum, it should be stored as an int32 value using the google.protobuf.Int32Value type."
-        }
-      },
-      "description": "A protocol buffer option, which can be attached to a message, field, enumeration, etc."
-    },
-    "AuthenticationRule": {
-      "id": "AuthenticationRule",
-      "type": "object",
-      "properties": {
-        "selector": {
-          "type": "string",
-          "description": "Selects the methods to which this rule applies. Refer to selector for syntax details."
-        },
-        "requirements": {
-          "description": "Requirements for additional authentication providers.",
-          "type": "array",
-          "items": {
-            "$ref": "AuthRequirement"
-          }
-        },
-        "oauth": {
-          "description": "The requirements for OAuth credentials.",
-          "$ref": "OAuthRequirements"
-        },
-        "allowWithoutCredential": {
-          "type": "boolean",
-          "description": "If true, the service accepts API keys without any other credential. This flag only applies to HTTP and gRPC requests."
-        }
-      },
-      "description": "Authentication rules for the service. By default, if a method has any authentication requirements, every request must include a valid credential matching one of the requirements. It's an error to include more than one kind of credential in a single request. If a method doesn't have any auth requirements, request credentials will be ignored."
-    },
-    "Monitoring": {
-      "id": "Monitoring",
-      "description": "Monitoring configuration of the service. The example below shows how to configure monitored resources and metrics for monitoring. In the example, a monitored resource and two metrics are defined. The `library.googleapis.com/book/returned_count` metric is sent to both producer and consumer projects, whereas the `library.googleapis.com/book/num_overdue` metric is only sent to the consumer project. monitored_resources: - type: library.googleapis.com/Branch display_name: \"Library Branch\" description: \"A branch of a library.\" launch_stage: GA labels: - key: resource_container description: \"The Cloud container (ie. project id) for the Branch.\" - key: location description: \"The location of the library branch.\" - key: branch_id description: \"The id of the branch.\" metrics: - name: library.googleapis.com/book/returned_count display_name: \"Books Returned\" description: \"The count of books that have been returned.\" launch_stage: GA metric_kind: DELTA value_type: INT64 unit: \"1\" labels: - key: customer_id description: \"The id of the customer.\" - name: library.googleapis.com/book/num_overdue display_name: \"Books Overdue\" description: \"The current number of overdue books.\" launch_stage: GA metric_kind: GAUGE value_type: INT64 unit: \"1\" labels: - key: customer_id description: \"The id of the customer.\" monitoring: producer_destinations: - monitored_resource: library.googleapis.com/Branch metrics: - library.googleapis.com/book/returned_count consumer_destinations: - monitored_resource: library.googleapis.com/Branch metrics: - library.googleapis.com/book/returned_count - library.googleapis.com/book/num_overdue",
-      "properties": {
-        "consumerDestinations": {
-          "items": {
-            "$ref": "MonitoringDestination"
-          },
-          "description": "Monitoring configurations for sending metrics to the consumer project. There can be multiple consumer destinations. A monitored resource type may appear in multiple monitoring destinations if different aggregations are needed for different sets of metrics associated with that monitored resource type. A monitored resource and metric pair may only be used once in the Monitoring configuration.",
-          "type": "array"
-        },
-        "producerDestinations": {
-          "items": {
-            "$ref": "MonitoringDestination"
-          },
-          "type": "array",
-          "description": "Monitoring configurations for sending metrics to the producer project. There can be multiple producer destinations. A monitored resource type may appear in multiple monitoring destinations if different aggregations are needed for different sets of metrics associated with that monitored resource type. A monitored resource and metric pair may only be used once in the Monitoring configuration."
-        }
-      },
-      "type": "object"
-    },
-    "SystemParameter": {
-      "description": "Define a parameter's name and location. The parameter may be passed as either an HTTP header or a URL query parameter, and if both are passed the behavior is implementation-dependent.",
-      "properties": {
-        "urlQueryParameter": {
-          "description": "Define the URL query parameter name to use for the parameter. It is case sensitive.",
-          "type": "string"
-        },
-        "httpHeader": {
-          "type": "string",
-          "description": "Define the HTTP header name to use for the parameter. It is case insensitive."
-        },
-        "name": {
-          "type": "string",
-          "description": "Define the name of the parameter, such as \"api_key\" . It is case sensitive."
-        }
-      },
-      "type": "object",
-      "id": "SystemParameter"
-    },
-    "SourceInfo": {
-      "description": "Source information used to create a Service Config",
-      "properties": {
-        "sourceFiles": {
-          "type": "array",
-          "items": {
-            "additionalProperties": {
-              "description": "Properties of the object. Contains field @type with type URL.",
-              "type": "any"
-            },
-            "type": "object"
-          },
-          "description": "All files used during config generation."
-        }
-      },
-      "type": "object",
-      "id": "SourceInfo"
-    },
-    "DocumentationRule": {
-      "id": "DocumentationRule",
-      "properties": {
-        "selector": {
-          "description": "The selector is a comma-separated list of patterns. Each pattern is a qualified name of the element which may end in \"*\", indicating a wildcard. Wildcards are only allowed at the end and for a whole component of the qualified name, i.e. \"foo.*\" is ok, but not \"foo.b*\" or \"foo.*.bar\". A wildcard will match one or more components. To specify a default for all applicable elements, the whole pattern \"*\" is used.",
-          "type": "string"
-        },
-        "deprecationDescription": {
-          "type": "string",
-          "description": "Deprecation description of the selected element(s). It can be provided if an element is marked as `deprecated`."
-        },
-        "description": {
-          "description": "Description of the selected API(s).",
-          "type": "string"
-        }
-      },
-      "description": "A documentation rule provides information about individual API elements.",
-      "type": "object"
-    },
-    "MonitoredResourceDescriptor": {
-      "id": "MonitoredResourceDescriptor",
-      "properties": {
-        "displayName": {
-          "type": "string",
-          "description": "Optional. A concise name for the monitored resource type that might be displayed in user interfaces. It should be a Title Cased Noun Phrase, without any article or other determiners. For example, `\"Google Cloud SQL Database\"`."
-        },
-        "launchStage": {
-          "type": "string",
-          "enumDescriptions": [
-            "Do not use this default value.",
-            "The feature is not yet implemented. Users can not use it.",
-            "Prelaunch features are hidden from users and are only visible internally.",
-            "Early Access features are limited to a closed group of testers. To use these features, you must sign up in advance and sign a Trusted Tester agreement (which includes confidentiality provisions). These features may be unstable, changed in backward-incompatible ways, and are not guaranteed to be released.",
-            "Alpha is a limited availability test for releases before they are cleared for widespread use. By Alpha, all significant design issues are resolved and we are in the process of verifying functionality. Alpha customers need to apply for access, agree to applicable terms, and have their projects allowlisted. Alpha releases don’t have to be feature complete, no SLAs are provided, and there are no technical support obligations, but they will be far enough along that customers can actually use them in test environments or for limited-use tests -- just like they would in normal production cases.",
-            "Beta is the point at which we are ready to open a release for any customer to use. There are no SLA or technical support obligations in a Beta release. Products will be complete from a feature perspective, but may have some open outstanding issues. Beta releases are suitable for limited production use cases.",
-            "GA features are open to all developers and are considered stable and fully qualified for production use.",
-            "Deprecated features are scheduled to be shut down and removed. For more information, see the “Deprecation Policy” section of our [Terms of Service](https://cloud.google.com/terms/) and the [Google Cloud Platform Subject to the Deprecation Policy](https://cloud.google.com/terms/deprecation) documentation."
-          ],
-          "description": "Optional. The launch stage of the monitored resource definition.",
-          "enum": [
-            "LAUNCH_STAGE_UNSPECIFIED",
-            "UNIMPLEMENTED",
-            "PRELAUNCH",
-            "EARLY_ACCESS",
-            "ALPHA",
-            "BETA",
-            "GA",
-            "DEPRECATED"
-          ]
-        },
-        "name": {
-          "type": "string",
-          "description": "Optional. The resource name of the monitored resource descriptor: `\"projects/{project_id}/monitoredResourceDescriptors/{type}\"` where {type} is the value of the `type` field in this object and {project_id} is a project ID that provides API-specific context for accessing the type. APIs that do not use project information can use the resource name format `\"monitoredResourceDescriptors/{type}\"`."
-        },
-        "labels": {
-          "type": "array",
-          "description": "Required. A set of labels used to describe instances of this monitored resource type. For example, an individual Google Cloud SQL database is identified by values for the labels `\"database_id\"` and `\"zone\"`.",
-          "items": {
-            "$ref": "LabelDescriptor"
-          }
-        },
-        "description": {
-          "description": "Optional. A detailed description of the monitored resource type that might be used in documentation.",
-          "type": "string"
-        },
-        "type": {
-          "description": "Required. The monitored resource type. For example, the type `\"cloudsql_database\"` represents databases in Google Cloud SQL.",
-          "type": "string"
-        }
-      },
-      "description": "An object that describes the schema of a MonitoredResource object using a type name and a set of labels. For example, the monitored resource descriptor for Google Compute Engine VM instances has a type of `\"gce_instance\"` and specifies the use of the labels `\"instance_id\"` and `\"zone\"` to identify particular VM instances. Different APIs can support different monitored resource types. APIs generally provide a `list` method that returns the monitored resource descriptors used by the API. ",
-      "type": "object"
-    },
-    "ListOperationsResponse": {
-      "properties": {
-        "operations": {
-          "items": {
-            "$ref": "Operation"
-          },
-          "type": "array",
-          "description": "A list of operations that matches the specified filter in the request."
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "The standard List next-page token."
-        }
-      },
-      "type": "object",
-      "description": "The response message for Operations.ListOperations.",
-      "id": "ListOperationsResponse"
-    },
-    "MonitoringDestination": {
-      "description": "Configuration of a specific monitoring destination (the producer project or the consumer project).",
-      "properties": {
-        "metrics": {
-          "description": "Types of the metrics to report to this monitoring destination. Each type must be defined in Service.metrics section.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "monitoredResource": {
-          "type": "string",
-          "description": "The monitored resource type. The type must be defined in Service.monitored_resources section."
-        }
-      },
-      "id": "MonitoringDestination",
-      "type": "object"
-    },
-    "Mixin": {
-      "id": "Mixin",
-      "description": "Declares an API Interface to be included in this interface. The including interface must redeclare all the methods from the included interface, but documentation and options are inherited as follows: - If after comment and whitespace stripping, the documentation string of the redeclared method is empty, it will be inherited from the original method. - Each annotation belonging to the service config (http, visibility) which is not set in the redeclared method will be inherited. - If an http annotation is inherited, the path pattern will be modified as follows. Any version prefix will be replaced by the version of the including interface plus the root path if specified. Example of a simple mixin: package google.acl.v1; service AccessControl { // Get the underlying ACL object. rpc GetAcl(GetAclRequest) returns (Acl) { option (google.api.http).get = \"/v1/{resource=**}:getAcl\"; } } package google.storage.v2; service Storage { // rpc GetAcl(GetAclRequest) returns (Acl); // Get a data record. rpc GetData(GetDataRequest) returns (Data) { option (google.api.http).get = \"/v2/{resource=**}\"; } } Example of a mixin configuration: apis: - name: google.storage.v2.Storage mixins: - name: google.acl.v1.AccessControl The mixin construct implies that all methods in `AccessControl` are also declared with same name and request/response types in `Storage`. A documentation generator or annotation processor will see the effective `Storage.GetAcl` method after inheriting documentation and annotations as follows: service Storage { // Get the underlying ACL object. rpc GetAcl(GetAclRequest) returns (Acl) { option (google.api.http).get = \"/v2/{resource=**}:getAcl\"; } ... } Note how the version in the path pattern changed from `v1` to `v2`. If the `root` field in the mixin is specified, it should be a relative path under which inherited HTTP paths are placed. Example: apis: - name: google.storage.v2.Storage mixins: - name: google.acl.v1.AccessControl root: acls This implies the following inherited HTTP annotation: service Storage { // Get the underlying ACL object. rpc GetAcl(GetAclRequest) returns (Acl) { option (google.api.http).get = \"/v2/acls/{resource=**}:getAcl\"; } ... }",
-      "properties": {
-        "name": {
-          "description": "The fully qualified name of the interface which is included.",
-          "type": "string"
-        },
-        "root": {
-          "description": "If non-empty specifies a path under which inherited HTTP paths are rooted.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "FlowErrorDetails": {
-      "id": "FlowErrorDetails",
-      "properties": {
-        "exceptionType": {
-          "description": "The type of exception (as a class name).",
-          "type": "string"
-        },
-        "flowStepId": {
-          "description": "The step that failed.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Encapsulation of flow-specific error details for debugging. Used as a details field on an error Status, not intended for external use."
-    },
-    "Billing": {
-      "properties": {
-        "consumerDestinations": {
-          "items": {
-            "$ref": "BillingDestination"
-          },
-          "type": "array",
-          "description": "Billing configurations for sending metrics to the consumer project. There can be multiple consumer destinations per service, each one must have a different monitored resource type. A metric can be used in at most one consumer destination."
-        }
-      },
-      "type": "object",
-      "description": "Billing related configuration of the service. The following example shows how to configure monitored resources and metrics for billing, `consumer_destinations` is the only supported destination and the monitored resources need at least one label key `cloud.googleapis.com/location` to indicate the location of the billing usage, using different monitored resources between monitoring and billing is recommended so they can be evolved independently: monitored_resources: - type: library.googleapis.com/billing_branch labels: - key: cloud.googleapis.com/location description: | Predefined label to support billing location restriction. - key: city description: | Custom label to define the city where the library branch is located in. - key: name description: Custom label to define the name of the library branch. metrics: - name: library.googleapis.com/book/borrowed_count metric_kind: DELTA value_type: INT64 unit: \"1\" billing: consumer_destinations: - monitored_resource: library.googleapis.com/billing_branch metrics: - library.googleapis.com/book/borrowed_count",
-      "id": "Billing"
-    },
-    "CustomErrorRule": {
-      "type": "object",
-      "id": "CustomErrorRule",
-      "properties": {
-        "selector": {
-          "description": "Selects messages to which this rule applies. Refer to selector for syntax details.",
-          "type": "string"
-        },
-        "isErrorType": {
-          "type": "boolean",
-          "description": "Mark this message as possible payload in error response. Otherwise, objects of this type will be filtered when they appear in error payload."
-        }
-      },
-      "description": "A custom error rule."
-    },
-    "GetIamPolicyRequest": {
-      "properties": {
-        "options": {
-          "description": "OPTIONAL: A `GetPolicyOptions` object for specifying options to `GetIamPolicy`.",
-          "$ref": "GetPolicyOptions"
-        }
-      },
-      "description": "Request message for `GetIamPolicy` method.",
-      "id": "GetIamPolicyRequest",
-      "type": "object"
-    },
-    "Diagnostic": {
-      "description": "Represents a diagnostic message (error or warning)",
-      "id": "Diagnostic",
-      "type": "object",
-      "properties": {
-        "location": {
-          "type": "string",
-          "description": "File name and line number of the error or warning."
-        },
-        "kind": {
-          "type": "string",
-          "enumDescriptions": [
-            "Warnings and errors",
-            "Only errors"
-          ],
-          "description": "The kind of diagnostic information provided.",
-          "enum": [
-            "WARNING",
-            "ERROR"
-          ]
-        },
-        "message": {
-          "type": "string",
-          "description": "Message describing the error or warning."
-        }
-      }
-    },
-    "GenerateConfigReportRequest": {
-      "description": "Request message for GenerateConfigReport method.",
-      "id": "GenerateConfigReportRequest",
-      "type": "object",
-      "properties": {
-        "newConfig": {
-          "type": "object",
-          "description": "Required. Service configuration for which we want to generate the report. For this version of API, the supported types are google.api.servicemanagement.v1.ConfigRef, google.api.servicemanagement.v1.ConfigSource, and google.api.Service",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          }
-        },
-        "oldConfig": {
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "type": "object",
-          "description": "Optional. Service configuration against which the comparison will be done. For this version of API, the supported types are google.api.servicemanagement.v1.ConfigRef, google.api.servicemanagement.v1.ConfigSource, and google.api.Service"
-        }
-      }
-    },
-    "Operation": {
-      "id": "Operation",
-      "type": "object",
-      "description": "This resource represents a long-running operation that is the result of a network API call.",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`."
-        },
-        "response": {
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
-          "type": "object"
-        },
-        "done": {
-          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
-          "type": "boolean"
-        },
-        "metadata": {
-          "type": "object",
-          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          }
-        },
-        "error": {
-          "description": "The error result of the operation in case of failure or cancellation.",
-          "$ref": "Status"
-        }
-      }
-    },
-    "ConfigChange": {
-      "id": "ConfigChange",
-      "properties": {
-        "newValue": {
-          "type": "string",
-          "description": "Value of the changed object in the new Service configuration, in JSON format. This field will not be populated if ChangeType == REMOVED."
-        },
-        "element": {
-          "description": "Object hierarchy path to the change, with levels separated by a '.' character. For repeated fields, an applicable unique identifier field is used for the index (usually selector, name, or id). For maps, the term 'key' is used. If the field has no unique identifier, the numeric index is used. Examples: - visibility.rules[selector==\"google.LibraryService.ListBooks\"].restriction - quota.metric_rules[selector==\"google\"].metric_costs[key==\"reads\"].value - logging.producer_destinations[0]",
-          "type": "string"
-        },
-        "changeType": {
-          "type": "string",
-          "description": "The type for this change, either ADDED, REMOVED, or MODIFIED.",
-          "enum": [
-            "CHANGE_TYPE_UNSPECIFIED",
-            "ADDED",
-            "REMOVED",
-            "MODIFIED"
-          ],
-          "enumDescriptions": [
-            "No value was provided.",
-            "The changed object exists in the 'new' service configuration, but not in the 'old' service configuration.",
-            "The changed object exists in the 'old' service configuration, but not in the 'new' service configuration.",
-            "The changed object exists in both service configurations, but its value is different."
-          ]
-        },
-        "oldValue": {
-          "description": "Value of the changed object in the old Service configuration, in JSON format. This field will not be populated if ChangeType == ADDED.",
-          "type": "string"
-        },
-        "advices": {
-          "description": "Collection of advice provided for this change, useful for determining the possible impact of this change.",
-          "items": {
-            "$ref": "Advice"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "description": "Output generated from semantically comparing two versions of a service configuration. Includes detailed information about a field that have changed with applicable advice about potential consequences for the change, such as backwards-incompatibility."
-    },
-    "Context": {
-      "properties": {
-        "rules": {
-          "type": "array",
-          "items": {
-            "$ref": "ContextRule"
-          },
-          "description": "A list of RPC context rules that apply to individual API methods. **NOTE:** All service configuration rules follow \"last one wins\" order."
-        }
-      },
-      "id": "Context",
-      "description": "`Context` defines which contexts an API requests. Example: context: rules: - selector: \"*\" requested: - google.rpc.context.ProjectContext - google.rpc.context.OriginContext The above specifies that all methods in the API request `google.rpc.context.ProjectContext` and `google.rpc.context.OriginContext`. Available context types are defined in package `google.rpc.context`. This also provides mechanism to allowlist any protobuf message extension that can be sent in grpc metadata using “x-goog-ext--bin” and “x-goog-ext--jspb” format. For example, list any service specific protobuf types that can appear in grpc metadata as follows in your yaml file: Example: context: rules: - selector: \"google.example.library.v1.LibraryService.CreateBook\" allowed_request_extensions: - google.foo.v1.NewExtension allowed_response_extensions: - google.foo.v1.NewExtension You can also specify extension ID instead of fully qualified extension name here.",
-      "type": "object"
-    },
-    "ListServicesResponse": {
-      "description": "Response message for `ListServices` method.",
-      "properties": {
-        "nextPageToken": {
-          "description": "Token that can be passed to `ListServices` to resume a paginated query.",
-          "type": "string"
-        },
-        "services": {
-          "items": {
-            "$ref": "ManagedService"
-          },
-          "description": "The returned services will only have the name field set.",
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "id": "ListServicesResponse"
-    },
-    "Step": {
-      "type": "object",
-      "description": "Represents the status of one operation step.",
-      "id": "Step",
-      "properties": {
-        "status": {
-          "description": "The status code.",
-          "type": "string",
-          "enum": [
-            "STATUS_UNSPECIFIED",
-            "DONE",
-            "NOT_STARTED",
-            "IN_PROGRESS",
-            "FAILED",
-            "CANCELLED"
-          ],
-          "enumDescriptions": [
-            "Unspecifed code.",
-            "The operation or step has completed without errors.",
-            "The operation or step has not started yet.",
-            "The operation or step is in progress.",
-            "The operation or step has completed with errors. If the operation is rollbackable, the rollback completed with errors too.",
-            "The operation or step has completed with cancellation."
-          ]
-        },
-        "description": {
-          "type": "string",
-          "description": "The short description of the step."
-        }
-      }
-    },
-    "DeleteServiceStrategy": {
-      "type": "object",
-      "description": "Strategy used to delete a service. This strategy is a placeholder only used by the system generated rollout to delete a service.",
-      "id": "DeleteServiceStrategy",
-      "properties": {}
-    },
-    "Enum": {
-      "description": "Enum type definition.",
-      "id": "Enum",
-      "properties": {
-        "options": {
-          "items": {
-            "$ref": "Option"
-          },
-          "type": "array",
-          "description": "Protocol buffer options."
-        },
-        "name": {
-          "description": "Enum type name.",
-          "type": "string"
-        },
-        "sourceContext": {
-          "description": "The source context.",
-          "$ref": "SourceContext"
-        },
-        "enumvalue": {
-          "items": {
-            "$ref": "EnumValue"
-          },
-          "type": "array",
-          "description": "Enum value definitions."
-        },
-        "syntax": {
-          "description": "The source syntax.",
-          "type": "string",
-          "enumDescriptions": [
-            "Syntax `proto2`.",
-            "Syntax `proto3`."
-          ],
-          "enum": [
-            "SYNTAX_PROTO2",
-            "SYNTAX_PROTO3"
-          ]
-        }
-      },
-      "type": "object"
-    },
-    "Api": {
-      "properties": {
-        "methods": {
-          "description": "The methods of this interface, in unspecified order.",
-          "items": {
-            "$ref": "Method"
-          },
-          "type": "array"
-        },
-        "mixins": {
-          "items": {
-            "$ref": "Mixin"
-          },
-          "type": "array",
-          "description": "Included interfaces. See Mixin."
-        },
-        "syntax": {
-          "enumDescriptions": [
-            "Syntax `proto2`.",
-            "Syntax `proto3`."
-          ],
-          "enum": [
-            "SYNTAX_PROTO2",
-            "SYNTAX_PROTO3"
-          ],
-          "type": "string",
-          "description": "The source syntax of the service."
-        },
-        "version": {
-          "type": "string",
-          "description": "A version string for this interface. If specified, must have the form `major-version.minor-version`, as in `1.10`. If the minor version is omitted, it defaults to zero. If the entire version field is empty, the major version is derived from the package name, as outlined below. If the field is not empty, the version in the package name will be verified to be consistent with what is provided here. The versioning schema uses [semantic versioning](http://semver.org) where the major version number indicates a breaking change and the minor version an additive, non-breaking change. Both version numbers are signals to users what to expect from different versions, and should be carefully chosen based on the product plan. The major version is also reflected in the package name of the interface, which must end in `v`, as in `google.feature.v1`. For major versions 0 and 1, the suffix can be omitted. Zero major versions must only be used for experimental, non-GA interfaces. "
-        },
-        "options": {
-          "type": "array",
-          "description": "Any metadata attached to the interface.",
-          "items": {
-            "$ref": "Option"
-          }
-        },
-        "name": {
-          "type": "string",
-          "description": "The fully qualified name of this interface, including package name followed by the interface's simple name."
-        },
-        "sourceContext": {
-          "description": "Source context for the protocol buffer service represented by this message.",
-          "$ref": "SourceContext"
-        }
-      },
-      "type": "object",
-      "description": "Api is a light-weight descriptor for an API Interface. Interfaces are also described as \"protocol buffer services\" in some contexts, such as by the \"service\" keyword in a .proto file, but they are different from API Services, which represent a concrete implementation of an interface as opposed to simply a description of methods and bindings. They are also sometimes simply referred to as \"APIs\" in other contexts, such as the name of this message itself. See https://cloud.google.com/apis/design/glossary for detailed terminology.",
-      "id": "Api"
-    },
-    "CustomHttpPattern": {
-      "properties": {
-        "path": {
-          "description": "The path matched by this custom verb.",
-          "type": "string"
-        },
-        "kind": {
-          "description": "The name of this custom HTTP verb.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "A custom pattern is used for defining custom HTTP verb.",
-      "id": "CustomHttpPattern"
-    },
-    "Type": {
-      "description": "A protocol buffer message type.",
-      "id": "Type",
-      "properties": {
-        "options": {
-          "type": "array",
-          "description": "The protocol buffer options.",
-          "items": {
-            "$ref": "Option"
-          }
-        },
-        "syntax": {
-          "type": "string",
-          "enumDescriptions": [
-            "Syntax `proto2`.",
-            "Syntax `proto3`."
-          ],
-          "description": "The source syntax.",
-          "enum": [
-            "SYNTAX_PROTO2",
-            "SYNTAX_PROTO3"
-          ]
-        },
-        "sourceContext": {
-          "description": "The source context.",
-          "$ref": "SourceContext"
         },
         "fields": {
-          "type": "array",
-          "items": {
-            "$ref": "Field"
-          },
-          "description": "The list of fields."
-        },
-        "oneofs": {
-          "items": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
             "type": "string"
-          },
-          "type": "array",
-          "description": "The list of types appearing in `oneof` definitions in this type."
         },
-        "name": {
-          "type": "string",
-          "description": "The fully qualified message name."
-        }
-      },
-      "type": "object"
-    },
-    "Backend": {
-      "id": "Backend",
-      "description": "`Backend` defines the backend configuration for a service.",
-      "type": "object",
-      "properties": {
-        "rules": {
-          "description": "A list of API backend rules that apply to individual API methods. **NOTE:** All service configuration rules follow \"last one wins\" order.",
-          "type": "array",
-          "items": {
-            "$ref": "BackendRule"
-          }
-        }
-      }
-    },
-    "ConfigSource": {
-      "type": "object",
-      "id": "ConfigSource",
-      "description": "Represents a source file which is used to generate the service configuration defined by `google.api.Service`.",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "A unique ID for a specific instance of this message, typically assigned by the client for tracking purpose. If empty, the server may choose to generate one instead."
-        },
-        "files": {
-          "description": "Set of source configuration files that are used to generate a service configuration (`google.api.Service`).",
-          "items": {
-            "$ref": "ConfigFile"
-          },
-          "type": "array"
-        }
-      }
-    },
-    "CustomError": {
-      "description": "Customize service error responses. For example, list any service specific protobuf types that can appear in error detail lists of error responses. Example: custom_error: types: - google.foo.v1.CustomError - google.foo.v1.AnotherError",
-      "id": "CustomError",
-      "properties": {
-        "types": {
-          "items": {
-            "type": "string"
-          },
-          "description": "The list of custom error detail types, e.g. 'google.foo.v1.CustomError'.",
-          "type": "array"
-        },
-        "rules": {
-          "type": "array",
-          "description": "The list of custom error rules that apply to individual API messages. **NOTE:** All service configuration rules follow \"last one wins\" order.",
-          "items": {
-            "$ref": "CustomErrorRule"
-          }
-        }
-      },
-      "type": "object"
-    },
-    "Control": {
-      "description": "Selects and configures the service controller used by the service. The service controller handles features like abuse, quota, billing, logging, monitoring, etc.",
-      "properties": {
-        "environment": {
-          "type": "string",
-          "description": "The service control environment to use. If empty, no control plane feature (like quota and billing) will be enabled."
-        }
-      },
-      "type": "object",
-      "id": "Control"
-    },
-    "UndeleteServiceResponse": {
-      "type": "object",
-      "properties": {
-        "service": {
-          "$ref": "ManagedService",
-          "description": "Revived service resource."
-        }
-      },
-      "id": "UndeleteServiceResponse",
-      "description": "Response message for UndeleteService method."
-    },
-    "SystemParameters": {
-      "properties": {
-        "rules": {
-          "items": {
-            "$ref": "SystemParameterRule"
-          },
-          "description": "Define system parameters. The parameters defined here will override the default parameters implemented by the system. If this field is missing from the service config, default system parameters will be used. Default system parameters and names is implementation-dependent. Example: define api key for all methods system_parameters rules: - selector: \"*\" parameters: - name: api_key url_query_parameter: api_key Example: define 2 api key names for a specific method. system_parameters rules: - selector: \"/ListShelves\" parameters: - name: api_key http_header: Api-Key1 - name: api_key http_header: Api-Key2 **NOTE:** All service configuration rules follow \"last one wins\" order.",
-          "type": "array"
-        }
-      },
-      "description": "### System parameter configuration A system parameter is a special kind of parameter defined by the API system, not by an individual API. It is typically mapped to an HTTP header and/or a URL query parameter. This configuration specifies which methods change the names of the system parameters.",
-      "id": "SystemParameters",
-      "type": "object"
-    },
-    "JwtLocation": {
-      "properties": {
-        "query": {
-          "type": "string",
-          "description": "Specifies URL query parameter name to extract JWT token."
-        },
-        "header": {
-          "type": "string",
-          "description": "Specifies HTTP header name to extract JWT token."
-        },
-        "valuePrefix": {
-          "description": "The value prefix. The value format is \"value_prefix{token}\" Only applies to \"in\" header type. Must be empty for \"in\" query type. If not empty, the header value has to match (case sensitive) this prefix. If not matched, JWT will not be extracted. If matched, JWT will be extracted after the prefix is removed. For example, for \"Authorization: Bearer {JWT}\", value_prefix=\"Bearer \" with a space at the end.",
-          "type": "string"
-        }
-      },
-      "id": "JwtLocation",
-      "description": "Specifies a location to extract JWT from an API request.",
-      "type": "object"
-    },
-    "QuotaLimit": {
-      "id": "QuotaLimit",
-      "description": "`QuotaLimit` defines a specific limit that applies over a specified duration for a limit type. There can be at most one limit for a duration and limit type combination defined within a `QuotaGroup`.",
-      "properties": {
-        "freeTier": {
-          "format": "int64",
-          "description": "Free tier value displayed in the Developers Console for this limit. The free tier is the number of tokens that will be subtracted from the billed amount when billing is enabled. This field can only be set on a limit with duration \"1d\", in a billable group; it is invalid on any other limit. If this field is not set, it defaults to 0, indicating that there is no free tier for this service. Used by group-based quotas only.",
-          "type": "string"
-        },
-        "duration": {
-          "description": "Duration of this limit in textual notation. Must be \"100s\" or \"1d\". Used by group-based quotas only.",
-          "type": "string"
-        },
-        "maxLimit": {
-          "format": "int64",
-          "description": "Maximum number of tokens that can be consumed during the specified duration. Client application developers can override the default limit up to this maximum. If specified, this value cannot be set to a value less than the default limit. If not specified, it is set to the default limit. To allow clients to apply overrides with no upper bound, set this to -1, indicating unlimited maximum quota. Used by group-based quotas only.",
-          "type": "string"
-        },
-        "defaultLimit": {
-          "format": "int64",
-          "description": "Default number of tokens that can be consumed during the specified duration. This is the number of tokens assigned when a client application developer activates the service for his/her project. Specifying a value of 0 will block all requests. This can be used if you are provisioning quota to selected consumers and blocking others. Similarly, a value of -1 will indicate an unlimited quota. No other negative values are allowed. Used by group-based quotas only.",
-          "type": "string"
-        },
-        "description": {
-          "description": "Optional. User-visible, extended description for this quota limit. Should be used only when more context is needed to understand this limit than provided by the limit's display name (see: `display_name`).",
-          "type": "string"
-        },
-        "displayName": {
-          "description": "User-visible display name for this limit. Optional. If not set, the UI will provide a default display name based on the quota configuration. This field can be used to override the default display name generated from the configuration.",
-          "type": "string"
-        },
-        "metric": {
-          "description": "The name of the metric this quota limit applies to. The quota limits with the same metric will be checked together during runtime. The metric must be defined within the service config.",
-          "type": "string"
-        },
-        "unit": {
-          "description": "Specify the unit of the quota limit. It uses the same syntax as Metric.unit. The supported unit kinds are determined by the quota backend system. Here are some examples: * \"1/min/{project}\" for quota per minute per project. Note: the order of unit components is insignificant. The \"1\" at the beginning is required to follow the metric unit syntax.",
-          "type": "string"
-        },
-        "values": {
-          "type": "object",
-          "description": "Tiered limit values. You must specify this as a key:value pair, with an integer value that is the maximum number of requests allowed for the specified unit. Currently only STANDARD is supported.",
-          "additionalProperties": {
-            "type": "string",
-            "format": "int64"
-          }
-        },
-        "name": {
-          "description": "Name of the quota limit. The name must be provided, and it must be unique within the service. The name can only include alphanumeric characters as well as '-'. The maximum length of the limit name is 64 characters.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "Status": {
-      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
-      "id": "Status",
-      "properties": {
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
-          "type": "string"
-        },
-        "code": {
-          "type": "integer",
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "format": "int32"
-        },
-        "details": {
-          "type": "array",
-          "items": {
-            "type": "object",
-            "additionalProperties": {
-              "type": "any",
-              "description": "Properties of the object. Contains field @type with type URL."
-            }
-          },
-          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use."
-        }
-      },
-      "type": "object"
-    },
-    "SubmitConfigSourceRequest": {
-      "properties": {
-        "validateOnly": {
-          "description": "Optional. If set, this will result in the generation of a `google.api.Service` configuration based on the `ConfigSource` provided, but the generated config and the sources will NOT be persisted.",
-          "type": "boolean"
-        },
-        "configSource": {
-          "description": "Required. The source configuration for the service.",
-          "$ref": "ConfigSource"
-        }
-      },
-      "description": "Request message for SubmitConfigSource method.",
-      "type": "object",
-      "id": "SubmitConfigSourceRequest"
-    },
-    "Endpoint": {
-      "id": "Endpoint",
-      "description": "`Endpoint` describes a network endpoint that serves a set of APIs. A service may expose any number of endpoints, and all endpoints share the same service configuration, such as quota configuration and monitoring configuration. Example service configuration: name: library-example.googleapis.com endpoints: # Below entry makes 'google.example.library.v1.Library' # API be served from endpoint address library-example.googleapis.com. # It also allows HTTP OPTIONS calls to be passed to the backend, for # it to decide whether the subsequent cross-origin request is # allowed to proceed. - name: library-example.googleapis.com allow_cors: true",
-      "properties": {
-        "name": {
-          "description": "The canonical name of this endpoint.",
-          "type": "string"
-        },
-        "aliases": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "DEPRECATED: This field is no longer supported. Instead of using aliases, please specify multiple google.api.Endpoint for each of the intended aliases. Additional names that this endpoint will be hosted on."
-        },
-        "allowCors": {
-          "description": "Allowing [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka cross-domain traffic, would allow the backends served from this endpoint to receive and respond to HTTP OPTIONS requests. The response will be used by the browser to determine whether the subsequent cross-origin request is allowed to proceed.",
-          "type": "boolean"
-        },
-        "target": {
-          "description": "The specification of an Internet routable address of API frontend that will handle requests to this [API Endpoint](https://cloud.google.com/apis/design/glossary). It should be either a valid IPv4 address or a fully-qualified domain name. For example, \"8.8.8.8\" or \"myservice.appspot.com\".",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "SourceContext": {
-      "type": "object",
-      "properties": {
-        "fileName": {
-          "type": "string",
-          "description": "The path-qualified name of the .proto file that contained the associated protobuf element. For example: `\"google/protobuf/source_context.proto\"`."
-        }
-      },
-      "description": "`SourceContext` represents information about the source of a protobuf element, like the file in which it is defined.",
-      "id": "SourceContext"
-    },
-    "TestIamPermissionsResponse": {
-      "id": "TestIamPermissionsResponse",
-      "properties": {
-        "permissions": {
-          "items": {
-            "type": "string"
-          },
-          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is allowed.",
-          "type": "array"
-        }
-      },
-      "description": "Response message for `TestIamPermissions` method.",
-      "type": "object"
-    },
-    "SubmitConfigSourceResponse": {
-      "type": "object",
-      "description": "Response message for SubmitConfigSource method.",
-      "id": "SubmitConfigSourceResponse",
-      "properties": {
-        "serviceConfig": {
-          "$ref": "Service",
-          "description": "The generated service configuration."
-        }
-      }
-    },
-    "TestIamPermissionsRequest": {
-      "id": "TestIamPermissionsRequest",
-      "description": "Request message for `TestIamPermissions` method.",
-      "type": "object",
-      "properties": {
-        "permissions": {
-          "type": "array",
-          "description": "The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or 'storage.*') are not allowed. For more information see [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
-          "items": {
-            "type": "string"
-          }
-        }
-      }
-    },
-    "BackendRule": {
-      "description": "A backend rule provides configuration for an individual API element.",
-      "properties": {
-        "selector": {
-          "description": "Selects the methods to which this rule applies. Refer to selector for syntax details.",
-          "type": "string"
-        },
-        "jwtAudience": {
-          "description": "The JWT audience is used when generating a JWT ID token for the backend. This ID token will be added in the HTTP \"authorization\" header, and sent to the backend.",
-          "type": "string"
-        },
-        "pathTranslation": {
-          "enum": [
-            "PATH_TRANSLATION_UNSPECIFIED",
-            "CONSTANT_ADDRESS",
-            "APPEND_PATH_TO_ADDRESS"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "Use the backend address as-is, with no modification to the path. If the URL pattern contains variables, the variable names and values will be appended to the query string. If a query string parameter and a URL pattern variable have the same name, this may result in duplicate keys in the query string. # Examples Given the following operation config: Method path: /api/company/{cid}/user/{uid} Backend address: https://example.cloudfunctions.net/getUser Requests to the following request paths will call the backend at the translated path: Request path: /api/company/widgetworks/user/johndoe Translated: https://example.cloudfunctions.net/getUser?cid=widgetworks&uid=johndoe Request path: /api/company/widgetworks/user/johndoe?timezone=EST Translated: https://example.cloudfunctions.net/getUser?timezone=EST&cid=widgetworks&uid=johndoe",
-            "The request path will be appended to the backend address. # Examples Given the following operation config: Method path: /api/company/{cid}/user/{uid} Backend address: https://example.appspot.com Requests to the following request paths will call the backend at the translated path: Request path: /api/company/widgetworks/user/johndoe Translated: https://example.appspot.com/api/company/widgetworks/user/johndoe Request path: /api/company/widgetworks/user/johndoe?timezone=EST Translated: https://example.appspot.com/api/company/widgetworks/user/johndoe?timezone=EST"
-          ]
-        },
-        "protocol": {
-          "description": "The protocol used for sending a request to the backend. The supported values are \"http/1.1\" and \"h2\". The default value is inferred from the scheme in the address field: SCHEME PROTOCOL http:// http/1.1 https:// http/1.1 grpc:// h2 grpcs:// h2 For secure HTTP backends (https://) that support HTTP/2, set this field to \"h2\" for improved performance. Configuring this field to non-default values is only supported for secure HTTP backends. This field will be ignored for all other backends. See https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids for more details on the supported values.",
-          "type": "string"
-        },
-        "operationDeadline": {
-          "description": "The number of seconds to wait for the completion of a long running operation. The default is no deadline.",
-          "format": "double",
-          "type": "number"
-        },
-        "deadline": {
-          "format": "double",
-          "type": "number",
-          "description": "The number of seconds to wait for a response from a request. The default varies based on the request protocol and deployment environment."
-        },
-        "address": {
-          "type": "string",
-          "description": "The address of the API backend. The scheme is used to determine the backend protocol and security. The following schemes are accepted: SCHEME PROTOCOL SECURITY http:// HTTP None https:// HTTP TLS grpc:// gRPC None grpcs:// gRPC TLS It is recommended to explicitly include a scheme. Leaving out the scheme may cause constrasting behaviors across platforms. If the port is unspecified, the default is: - 80 for schemes without TLS - 443 for schemes with TLS For HTTP backends, use protocol to specify the protocol version."
-        },
-        "disableAuth": {
-          "description": "When disable_auth is true, a JWT ID token won't be generated and the original \"Authorization\" HTTP header will be preserved. If the header is used to carry the original token and is expected by the backend, this field must be set to true to preserve the header.",
-          "type": "boolean"
-        },
-        "minDeadline": {
-          "type": "number",
-          "description": "Minimum deadline in seconds needed for this method. Calls having deadline value lower than this will be rejected.",
-          "format": "double"
-        }
-      },
-      "id": "BackendRule",
-      "type": "object"
-    },
-    "ListServiceConfigsResponse": {
-      "properties": {
-        "serviceConfigs": {
-          "items": {
-            "$ref": "Service"
-          },
-          "type": "array",
-          "description": "The list of service configuration resources."
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "The token of the next page of results."
-        }
-      },
-      "id": "ListServiceConfigsResponse",
-      "description": "Response message for ListServiceConfigs method.",
-      "type": "object"
-    },
-    "SystemParameterRule": {
-      "properties": {
-        "selector": {
-          "description": "Selects the methods to which this rule applies. Use '*' to indicate all methods in all APIs. Refer to selector for syntax details.",
-          "type": "string"
-        },
-        "parameters": {
-          "description": "Define parameters. Multiple names may be defined for a parameter. For a given method call, only one of them should be used. If multiple names are used the behavior is implementation-dependent. If none of the specified names are present the behavior is parameter-dependent.",
-          "type": "array",
-          "items": {
-            "$ref": "SystemParameter"
-          }
-        }
-      },
-      "type": "object",
-      "description": "Define a system parameter rule mapping system parameter definitions to methods.",
-      "id": "SystemParameterRule"
-    },
-    "Page": {
-      "id": "Page",
-      "properties": {
-        "subpages": {
-          "items": {
-            "$ref": "Page"
-          },
-          "type": "array",
-          "description": "Subpages of this page. The order of subpages specified here will be honored in the generated docset."
-        },
-        "content": {
-          "description": "The Markdown content of the page. You can use (== include {path} ==) to include content from a Markdown file.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "The name of the page. It will be used as an identity of the page to generate URI of the page, text of the link to this page in navigation, etc. The full page name (start from the root page name to this page concatenated with `.`) can be used as reference to the page in your documentation. For example: pages: - name: Tutorial content: (== include tutorial.md ==) subpages: - name: Java content: (== include tutorial_java.md ==) You can reference `Java` page using Markdown reference link syntax: `Java`."
-        }
-      },
-      "type": "object",
-      "description": "Represents a documentation page. A page can contain subpages to represent nested documentation set structure."
-    },
-    "DisableServiceResponse": {
-      "id": "DisableServiceResponse",
-      "type": "object",
-      "description": "Operation payload for DisableService method.",
-      "properties": {}
-    },
-    "BillingDestination": {
-      "type": "object",
-      "properties": {
-        "metrics": {
-          "description": "Names of the metrics to report to this billing destination. Each name must be defined in Service.metrics section.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "monitoredResource": {
-          "description": "The monitored resource type. The type must be defined in Service.monitored_resources section.",
-          "type": "string"
-        }
-      },
-      "id": "BillingDestination",
-      "description": "Configuration of a specific billing destination (Currently only support bill against consumer project)."
-    },
-    "LabelDescriptor": {
-      "id": "LabelDescriptor",
-      "description": "A description of a label.",
-      "properties": {
         "key": {
-          "type": "string",
-          "description": "The label key."
-        },
-        "description": {
-          "description": "A human-readable description for the label.",
-          "type": "string"
-        },
-        "valueType": {
-          "description": "The type of data that can be assigned to the label.",
-          "type": "string",
-          "enum": [
-            "STRING",
-            "BOOL",
-            "INT64"
-          ],
-          "enumDescriptions": [
-            "A variable-length string. This is the default.",
-            "Boolean; true or false.",
-            "A 64-bit signed integer."
-          ]
-        }
-      },
-      "type": "object"
-    },
-    "AuthProvider": {
-      "type": "object",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "The unique identifier of the auth provider. It will be referred to by `AuthRequirement.provider_id`. Example: \"bookstore_auth\"."
-        },
-        "authorizationUrl": {
-          "type": "string",
-          "description": "Redirect URL if JWT token is required but not present or is expired. Implement authorizationUrl of securityDefinitions in OpenAPI spec."
-        },
-        "issuer": {
-          "type": "string",
-          "description": "Identifies the principal that issued the JWT. See https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.1 Usually a URL or an email address. Example: https://securetoken.google.com Example: 1234567-compute@developer.gserviceaccount.com"
-        },
-        "jwksUri": {
-          "description": "URL of the provider's public key set to validate signature of the JWT. See [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata). Optional if the key set document: - can be retrieved from [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html) of the issuer. - can be inferred from the email domain of the issuer (e.g. a Google service account). Example: https://www.googleapis.com/oauth2/v1/certs",
-          "type": "string"
-        },
-        "jwtLocations": {
-          "items": {
-            "$ref": "JwtLocation"
-          },
-          "description": "Defines the locations to extract the JWT. JWT locations can be either from HTTP headers or URL query parameters. The rule is that the first match wins. The checking order is: checking all headers first, then URL query parameters. If not specified, default to use following 3 locations: 1) Authorization: Bearer 2) x-goog-iap-jwt-assertion 3) access_token query parameter Default locations can be specified as followings: jwt_locations: - header: Authorization value_prefix: \"Bearer \" - header: x-goog-iap-jwt-assertion - query: access_token",
-          "type": "array"
-        },
-        "audiences": {
-          "type": "string",
-          "description": "The list of JWT [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3). that are allowed to access. A JWT containing any of these audiences will be accepted. When this setting is absent, JWTs with audiences: - \"https://[service.name]/[google.protobuf.Api.name]\" - \"https://[service.name]/\" will be accepted. For example, if no audiences are in the setting, LibraryService API will accept JWTs with the following audiences: - https://library-example.googleapis.com/google.example.library.v1.LibraryService - https://library-example.googleapis.com/ Example: audiences: bookstore_android.apps.googleusercontent.com, bookstore_web.apps.googleusercontent.com"
-        }
-      },
-      "description": "Configuration for an authentication provider, including support for [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).",
-      "id": "AuthProvider"
-    },
-    "Logging": {
-      "properties": {
-        "consumerDestinations": {
-          "items": {
-            "$ref": "LoggingDestination"
-          },
-          "description": "Logging configurations for sending logs to the consumer project. There can be multiple consumer destinations, each one must have a different monitored resource type. A log can be used in at most one consumer destination.",
-          "type": "array"
-        },
-        "producerDestinations": {
-          "items": {
-            "$ref": "LoggingDestination"
-          },
-          "type": "array",
-          "description": "Logging configurations for sending logs to the producer project. There can be multiple producer destinations, each one must have a different monitored resource type. A log can be used in at most one producer destination."
-        }
-      },
-      "description": "Logging configuration of the service. The following example shows how to configure logs to be sent to the producer and consumer projects. In the example, the `activity_history` log is sent to both the producer and consumer projects, whereas the `purchase_history` log is only sent to the producer project. monitored_resources: - type: library.googleapis.com/branch labels: - key: /city description: The city where the library branch is located in. - key: /name description: The name of the branch. logs: - name: activity_history labels: - key: /customer_id - name: purchase_history logging: producer_destinations: - monitored_resource: library.googleapis.com/branch logs: - activity_history - purchase_history consumer_destinations: - monitored_resource: library.googleapis.com/branch logs: - activity_history",
-      "id": "Logging",
-      "type": "object"
-    },
-    "Http": {
-      "description": "Defines the HTTP configuration for an API service. It contains a list of HttpRule, each specifying the mapping of an RPC method to one or more HTTP REST API methods.",
-      "id": "Http",
-      "type": "object",
-      "properties": {
-        "rules": {
-          "type": "array",
-          "description": "A list of HTTP configuration rules that apply to individual API methods. **NOTE:** All service configuration rules follow \"last one wins\" order.",
-          "items": {
-            "$ref": "HttpRule"
-          }
-        },
-        "fullyDecodeReservedExpansion": {
-          "type": "boolean",
-          "description": "When set to true, URL path parameters will be fully URI-decoded except in cases of single segment matches in reserved expansion, where \"%2F\" will be left encoded. The default behavior is to not decode RFC 6570 reserved characters in multi segment matches."
-        }
-      }
-    },
-    "UsageRule": {
-      "properties": {
-        "skipServiceControl": {
-          "description": "If true, the selected method should skip service control and the control plane features, such as quota and billing, will not be available. This flag is used by Google Cloud Endpoints to bypass checks for internal methods, such as service health check methods.",
-          "type": "boolean"
-        },
-        "allowUnregisteredCalls": {
-          "type": "boolean",
-          "description": "If true, the selected method allows unregistered calls, e.g. calls that don't identify any user or application."
-        },
-        "selector": {
-          "description": "Selects the methods to which this rule applies. Use '*' to indicate all methods in all APIs. Refer to selector for syntax details.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "UsageRule",
-      "description": "Usage configuration rules for the service. NOTE: Under development. Use this rule to configure unregistered calls for the service. Unregistered calls are calls that do not contain consumer project identity. (Example: calls that do not contain an API key). By default, API methods do not allow unregistered calls, and each method call must be identified by a consumer project identity. Use this rule to allow/disallow unregistered calls. Example of an API that wants to allow unregistered calls for entire service. usage: rules: - selector: \"*\" allow_unregistered_calls: true Example of a method that wants to allow unregistered calls. usage: rules: - selector: \"google.example.library.v1.LibraryService.CreateBook\" allow_unregistered_calls: true"
-    },
-    "LoggingDestination": {
-      "type": "object",
-      "description": "Configuration of a specific logging destination (the producer project or the consumer project).",
-      "properties": {
-        "logs": {
-          "description": "Names of the logs to be sent to this destination. Each name must be defined in the Service.logs section. If the log name is not a domain scoped name, it will be automatically prefixed with the service name followed by \"/\".",
-          "items": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
             "type": "string"
-          },
-          "type": "array"
         },
-        "monitoredResource": {
-          "type": "string",
-          "description": "The monitored resource type. The type must be defined in the Service.monitored_resources section."
-        }
-      },
-      "id": "LoggingDestination"
-    },
-    "AuditConfig": {
-      "type": "object",
-      "description": "Specifies the audit configuration for a service. The configuration determines which permission types are logged, and what identities, if any, are exempted from logging. An AuditConfig must have one or more AuditLogConfigs. If there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is used for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each AuditLogConfig are exempted. Example Policy with multiple AuditConfigs: { \"audit_configs\": [ { \"service\": \"allServices\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" }, { \"log_type\": \"ADMIN_READ\" } ] }, { \"service\": \"sampleservice.googleapis.com\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\" }, { \"log_type\": \"DATA_WRITE\", \"exempted_members\": [ \"user:aliya@example.com\" ] } ] } ] } For sampleservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ logging. It also exempts jose@example.com from DATA_READ logging, and aliya@example.com from DATA_WRITE logging.",
-      "id": "AuditConfig",
-      "properties": {
-        "service": {
-          "type": "string",
-          "description": "Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices` is a special value that covers all services."
-        },
-        "auditLogConfigs": {
-          "items": {
-            "$ref": "AuditLogConfig"
-          },
-          "description": "The configuration for logging of each type of permission.",
-          "type": "array"
-        }
-      }
-    },
-    "ConfigFile": {
-      "properties": {
-        "filePath": {
-          "type": "string",
-          "description": "The file name of the configuration file (full or relative path)."
-        },
-        "fileContents": {
-          "format": "byte",
-          "description": "The bytes that constitute the file.",
-          "type": "string"
-        },
-        "fileType": {
-          "type": "string",
-          "description": "The type of configuration file this represents.",
-          "enumDescriptions": [
-            "Unknown file type.",
-            "YAML-specification of service.",
-            "OpenAPI specification, serialized in JSON.",
-            "OpenAPI specification, serialized in YAML.",
-            "FileDescriptorSet, generated by protoc. To generate, use protoc with imports and source info included. For an example test.proto file, the following command would put the value in a new file named out.pb. $protoc --include_imports --include_source_info test.proto -o out.pb",
-            "Uncompiled Proto file. Used for storage and display purposes only, currently server-side compilation is not supported. Should match the inputs to 'protoc' command used to generated FILE_DESCRIPTOR_SET_PROTO. A file of this type can only be included if at least one file of type FILE_DESCRIPTOR_SET_PROTO is included."
-          ],
-          "enum": [
-            "FILE_TYPE_UNSPECIFIED",
-            "SERVICE_CONFIG_YAML",
-            "OPEN_API_JSON",
-            "OPEN_API_YAML",
-            "FILE_DESCRIPTOR_SET_PROTO",
-            "PROTO_FILE"
-          ]
-        }
-      },
-      "id": "ConfigFile",
-      "type": "object",
-      "description": "Generic specification of a source configuration file"
-    },
-    "OperationMetadata": {
-      "properties": {
-        "steps": {
-          "items": {
-            "$ref": "Step"
-          },
-          "description": "Detailed status information for each step. The order is undetermined.",
-          "type": "array"
-        },
-        "progressPercentage": {
-          "description": "Percentage of completion of this operation, ranging from 0 to 100.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "resourceNames": {
-          "description": "The full name of the resources that this operation is directly associated with.",
-          "type": "array",
-          "items": {
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
             "type": "string"
-          }
         },
-        "startTime": {
-          "description": "The start time of the operation.",
-          "type": "string",
-          "format": "google-datetime"
-        }
-      },
-      "type": "object",
-      "id": "OperationMetadata",
-      "description": "The metadata associated with a long running operation resource."
-    },
-    "ResourceReference": {
-      "properties": {
-        "childType": {
-          "description": "The resource type of a child collection that the annotated field references. This is useful for annotating the `parent` field that doesn't have a fixed resource type. Example: message ListLogEntriesRequest { string parent = 1 [(google.api.resource_reference) = { child_type: \"logging.googleapis.com/LogEntry\" }; }",
-          "type": "string"
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
         },
-        "type": {
-          "type": "string",
-          "description": "The resource type that the annotated field references. Example: message Subscription { string topic = 2 [(google.api.resource_reference) = { type: \"pubsub.googleapis.com/Topic\" }]; } Occasionally, a field may reference an arbitrary resource. In this case, APIs use the special value * in their resource reference. Example: message GetIamPolicyRequest { string resource = 2 [(google.api.resource_reference) = { type: \"*\" }]; }"
-        }
-      },
-      "id": "ResourceReference",
-      "description": "Defines a proto annotation that describes a string field that refers to an API resource.",
-      "type": "object"
-    },
-    "Method": {
-      "id": "Method",
-      "properties": {
-        "requestStreaming": {
-          "type": "boolean",
-          "description": "If true, the request is streamed."
-        },
-        "responseTypeUrl": {
-          "description": "The URL of the output message type.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "The simple name of this method."
-        },
-        "syntax": {
-          "enumDescriptions": [
-            "Syntax `proto2`.",
-            "Syntax `proto3`."
-          ],
-          "enum": [
-            "SYNTAX_PROTO2",
-            "SYNTAX_PROTO3"
-          ],
-          "description": "The source syntax of this method.",
-          "type": "string"
-        },
-        "responseStreaming": {
-          "type": "boolean",
-          "description": "If true, the response is streamed."
-        },
-        "requestTypeUrl": {
-          "description": "A URL of the input message type.",
-          "type": "string"
-        },
-        "options": {
-          "description": "Any metadata attached to the method.",
-          "type": "array",
-          "items": {
-            "$ref": "Option"
-          }
-        }
-      },
-      "type": "object",
-      "description": "Method represents a method of an API interface."
-    },
-    "GenerateConfigReportResponse": {
-      "properties": {
-        "id": {
-          "description": "ID of the service configuration this report belongs to.",
-          "type": "string"
-        },
-        "diagnostics": {
-          "items": {
-            "$ref": "Diagnostic"
-          },
-          "description": "Errors / Linter warnings associated with the service definition this report belongs to.",
-          "type": "array"
-        },
-        "changeReports": {
-          "type": "array",
-          "description": "list of ChangeReport, each corresponding to comparison between two service configurations.",
-          "items": {
-            "$ref": "ChangeReport"
-          }
-        },
-        "serviceName": {
-          "description": "Name of the service this report belongs to.",
-          "type": "string"
-        }
-      },
-      "id": "GenerateConfigReportResponse",
-      "type": "object",
-      "description": "Response message for GenerateConfigReport method."
-    },
-    "AuthRequirement": {
-      "properties": {
-        "audiences": {
-          "description": "NOTE: This will be deprecated soon, once AuthProvider.audiences is implemented and accepted in all the runtime components. The list of JWT [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3). that are allowed to access. A JWT containing any of these audiences will be accepted. When this setting is absent, only JWTs with audience \"https://Service_name/API_name\" will be accepted. For example, if no audiences are in the setting, LibraryService API will only accept JWTs with the following audience \"https://library-example.googleapis.com/google.example.library.v1.LibraryService\". Example: audiences: bookstore_android.apps.googleusercontent.com, bookstore_web.apps.googleusercontent.com",
-          "type": "string"
-        },
-        "providerId": {
-          "type": "string",
-          "description": "id from authentication provider. Example: provider_id: bookstore_auth"
-        }
-      },
-      "id": "AuthRequirement",
-      "description": "User-defined authentication requirements, including support for [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).",
-      "type": "object"
-    },
-    "Service": {
-      "description": "`Service` is the root object of Google service configuration schema. It describes basic information about a service, such as the name and the title, and delegates other aspects to sub-sections. Each sub-section is either a proto message or a repeated proto message that configures a specific aspect, such as auth. See each proto message definition for details. Example: type: google.api.Service config_version: 3 name: calendar.googleapis.com title: Google Calendar API apis: - name: google.calendar.v3.Calendar authentication: providers: - id: google_calendar_auth jwks_uri: https://www.googleapis.com/oauth2/v1/certs issuer: https://securetoken.google.com rules: - selector: \"*\" requirements: provider_id: google_calendar_auth",
-      "id": "Service",
-      "type": "object",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "A unique ID for a specific instance of this message, typically assigned by the client for tracking purpose. Must be no longer than 63 characters and only lower case letters, digits, '.', '_' and '-' are allowed. If empty, the server may choose to generate one instead."
-        },
-        "producerProjectId": {
-          "type": "string",
-          "description": "The Google project that owns this service."
-        },
-        "logging": {
-          "description": "Logging configuration.",
-          "$ref": "Logging"
-        },
-        "sourceInfo": {
-          "$ref": "SourceInfo",
-          "description": "Output only. The source information for this configuration if available."
-        },
-        "quota": {
-          "$ref": "Quota",
-          "description": "Quota configuration."
-        },
-        "systemParameters": {
-          "$ref": "SystemParameters",
-          "description": "System parameter configuration."
-        },
-        "logs": {
-          "description": "Defines the logs used by this service.",
-          "type": "array",
-          "items": {
-            "$ref": "LogDescriptor"
-          }
-        },
-        "monitoring": {
-          "$ref": "Monitoring",
-          "description": "Monitoring configuration."
-        },
-        "usage": {
-          "$ref": "Usage",
-          "description": "Configuration controlling usage of this service."
-        },
-        "title": {
-          "description": "The product title for this service.",
-          "type": "string"
-        },
-        "http": {
-          "$ref": "Http",
-          "description": "HTTP configuration."
-        },
-        "customError": {
-          "description": "Custom error configuration.",
-          "$ref": "CustomError"
-        },
-        "billing": {
-          "description": "Billing configuration.",
-          "$ref": "Billing"
-        },
-        "documentation": {
-          "$ref": "Documentation",
-          "description": "Additional API documentation."
-        },
-        "control": {
-          "description": "Configuration for the service control plane.",
-          "$ref": "Control"
-        },
-        "systemTypes": {
-          "items": {
-            "$ref": "Type"
-          },
-          "type": "array",
-          "description": "A list of all proto message types included in this API service. It serves similar purpose as [google.api.Service.types], except that these types are not needed by user-defined APIs. Therefore, they will not show up in the generated discovery doc. This field should only be used to define system APIs in ESF."
-        },
-        "authentication": {
-          "$ref": "Authentication",
-          "description": "Auth configuration."
-        },
-        "context": {
-          "$ref": "Context",
-          "description": "Context configuration."
-        },
-        "name": {
-          "description": "The service name, which is a DNS-like logical identifier for the service, such as `calendar.googleapis.com`. The service name typically goes through DNS verification to make sure the owner of the service also owns the DNS name.",
-          "type": "string"
-        },
-        "endpoints": {
-          "description": "Configuration for network endpoints. If this is empty, then an endpoint with the same name as the service is automatically generated to service all defined APIs.",
-          "type": "array",
-          "items": {
-            "$ref": "Endpoint"
-          }
-        },
-        "metrics": {
-          "type": "array",
-          "description": "Defines the metrics used by this service.",
-          "items": {
-            "$ref": "MetricDescriptor"
-          }
-        },
-        "apis": {
-          "type": "array",
-          "items": {
-            "$ref": "Api"
-          },
-          "description": "A list of API interfaces exported by this service. Only the `name` field of the google.protobuf.Api needs to be provided by the configuration author, as the remaining fields will be derived from the IDL during the normalization process. It is an error to specify an API interface here which cannot be resolved against the associated IDL files."
-        },
-        "monitoredResources": {
-          "items": {
-            "$ref": "MonitoredResourceDescriptor"
-          },
-          "type": "array",
-          "description": "Defines the monitored resources used by this service. This is required by the Service.monitoring and Service.logging configurations."
-        },
-        "types": {
-          "description": "A list of all proto message types included in this API service. Types referenced directly or indirectly by the `apis` are automatically included. Messages which are not referenced but shall be included, such as types used by the `google.protobuf.Any` type, should be listed here by name. Example: types: - name: google.protobuf.Int32",
-          "type": "array",
-          "items": {
-            "$ref": "Type"
-          }
-        },
-        "enums": {
-          "type": "array",
-          "items": {
-            "$ref": "Enum"
-          },
-          "description": "A list of all enum types included in this API service. Enums referenced directly or indirectly by the `apis` are automatically included. Enums which are not referenced but shall be included should be listed here by name. Example: enums: - name: google.someapi.v1.SomeEnum"
-        },
-        "configVersion": {
-          "format": "uint32",
-          "type": "integer",
-          "description": "This field is obsolete. Its value must be set to `3`."
-        },
-        "backend": {
-          "description": "API backend configuration.",
-          "$ref": "Backend"
-        }
-      }
-    },
-    "MetricDescriptor": {
-      "properties": {
-        "displayName": {
-          "description": "A concise name for the metric, which can be displayed in user interfaces. Use sentence case without an ending period, for example \"Request count\". This field is optional but it is recommended to be set for any metrics associated with user-visible concepts, such as Quota.",
-          "type": "string"
-        },
-        "type": {
-          "type": "string",
-          "description": "The metric type, including its DNS name prefix. The type is not URL-encoded. All user-defined metric types have the DNS name `custom.googleapis.com` or `external.googleapis.com`. Metric types should use a natural hierarchical grouping. For example: \"custom.googleapis.com/invoice/paid/amount\" \"external.googleapis.com/prometheus/up\" \"appengine.googleapis.com/http/server/response_latencies\""
-        },
-        "valueType": {
-          "description": "Whether the measurement is an integer, a floating-point number, etc. Some combinations of `metric_kind` and `value_type` might not be supported.",
-          "enum": [
-            "VALUE_TYPE_UNSPECIFIED",
-            "BOOL",
-            "INT64",
-            "DOUBLE",
-            "STRING",
-            "DISTRIBUTION",
-            "MONEY"
-          ],
-          "enumDescriptions": [
-            "Do not use this default value.",
-            "The value is a boolean. This value type can be used only if the metric kind is `GAUGE`.",
-            "The value is a signed 64-bit integer.",
-            "The value is a double precision floating point number.",
-            "The value is a text string. This value type can be used only if the metric kind is `GAUGE`.",
-            "The value is a `Distribution`.",
-            "The value is money."
-          ],
-          "type": "string"
-        },
-        "metadata": {
-          "description": "Optional. Metadata which can be used to guide usage of the metric.",
-          "$ref": "MetricDescriptorMetadata"
-        },
-        "monitoredResourceTypes": {
-          "description": "Read-only. If present, then a time series, which is identified partially by a metric type and a MonitoredResourceDescriptor, that is associated with this metric type can only be associated with one of the monitored resource types listed here.",
-          "type": "array",
-          "items": {
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
             "type": "string"
-          }
         },
-        "description": {
-          "type": "string",
-          "description": "A detailed description of the metric, which can be used in documentation."
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         },
-        "metricKind": {
-          "enumDescriptions": [
-            "Do not use this default value.",
-            "An instantaneous measurement of a value.",
-            "The change in a value during a time interval.",
-            "A value accumulated over a time interval. Cumulative measurements in a time series should have the same start time and increasing end times, until an event resets the cumulative value to zero and sets a new start time for the following points."
-          ],
-          "enum": [
-            "METRIC_KIND_UNSPECIFIED",
-            "GAUGE",
-            "DELTA",
-            "CUMULATIVE"
-          ],
-          "type": "string",
-          "description": "Whether the metric records instantaneous values, changes to a value, etc. Some combinations of `metric_kind` and `value_type` might not be supported."
-        },
-        "launchStage": {
-          "enum": [
-            "LAUNCH_STAGE_UNSPECIFIED",
-            "UNIMPLEMENTED",
-            "PRELAUNCH",
-            "EARLY_ACCESS",
-            "ALPHA",
-            "BETA",
-            "GA",
-            "DEPRECATED"
-          ],
-          "type": "string",
-          "description": "Optional. The launch stage of the metric definition.",
-          "enumDescriptions": [
-            "Do not use this default value.",
-            "The feature is not yet implemented. Users can not use it.",
-            "Prelaunch features are hidden from users and are only visible internally.",
-            "Early Access features are limited to a closed group of testers. To use these features, you must sign up in advance and sign a Trusted Tester agreement (which includes confidentiality provisions). These features may be unstable, changed in backward-incompatible ways, and are not guaranteed to be released.",
-            "Alpha is a limited availability test for releases before they are cleared for widespread use. By Alpha, all significant design issues are resolved and we are in the process of verifying functionality. Alpha customers need to apply for access, agree to applicable terms, and have their projects allowlisted. Alpha releases don’t have to be feature complete, no SLAs are provided, and there are no technical support obligations, but they will be far enough along that customers can actually use them in test environments or for limited-use tests -- just like they would in normal production cases.",
-            "Beta is the point at which we are ready to open a release for any customer to use. There are no SLA or technical support obligations in a Beta release. Products will be complete from a feature perspective, but may have some open outstanding issues. Beta releases are suitable for limited production use cases.",
-            "GA features are open to all developers and are considered stable and fully qualified for production use.",
-            "Deprecated features are scheduled to be shut down and removed. For more information, see the “Deprecation Policy” section of our [Terms of Service](https://cloud.google.com/terms/) and the [Google Cloud Platform Subject to the Deprecation Policy](https://cloud.google.com/terms/deprecation) documentation."
-          ]
-        },
-        "name": {
-          "type": "string",
-          "description": "The resource name of the metric descriptor."
-        },
-        "labels": {
-          "type": "array",
-          "description": "The set of labels that can be used to describe a specific instance of this metric type. For example, the `appengine.googleapis.com/http/server/response_latencies` metric type has a label for the HTTP response code, `response_code`, so you can look at latencies for successful responses or just for responses that failed.",
-          "items": {
-            "$ref": "LabelDescriptor"
-          }
-        },
-        "unit": {
-          "description": "The units in which the metric value is reported. It is only applicable if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The `unit` defines the representation of the stored metric values. Different systems may scale the values to be more easily displayed (so a value of `0.02KBy` _might_ be displayed as `20By`, and a value of `3523KBy` _might_ be displayed as `3.5MBy`). However, if the `unit` is `KBy`, then the value of the metric is always in thousands of bytes, no matter how it may be displayed.. If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an `INT64 CUMULATIVE` metric whose `unit` is `s{CPU}` (or equivalently `1s{CPU}` or just `s`). If the job uses 12,005 CPU-seconds, then the value is written as `12005`. Alternatively, if you want a custom metric to record data in a more granular way, you can create a `DOUBLE CUMULATIVE` metric whose `unit` is `ks{CPU}`, and then write the value `12.005` (which is `12005/1000`), or use `Kis{CPU}` and write `11.723` (which is `12005/1024`). The supported units are a subset of [The Unified Code for Units of Measure](http://unitsofmeasure.org/ucum.html) standard: **Basic units (UNIT)** * `bit` bit * `By` byte * `s` second * `min` minute * `h` hour * `d` day * `1` dimensionless **Prefixes (PREFIX)** * `k` kilo (10^3) * `M` mega (10^6) * `G` giga (10^9) * `T` tera (10^12) * `P` peta (10^15) * `E` exa (10^18) * `Z` zetta (10^21) * `Y` yotta (10^24) * `m` milli (10^-3) * `u` micro (10^-6) * `n` nano (10^-9) * `p` pico (10^-12) * `f` femto (10^-15) * `a` atto (10^-18) * `z` zepto (10^-21) * `y` yocto (10^-24) * `Ki` kibi (2^10) * `Mi` mebi (2^20) * `Gi` gibi (2^30) * `Ti` tebi (2^40) * `Pi` pebi (2^50) **Grammar** The grammar also includes these connectors: * `/` division or ratio (as an infix operator). For examples, `kBy/{email}` or `MiBy/10ms` (although you should almost never have `/s` in a metric `unit`; rates should always be computed at query time from the underlying cumulative or delta value). * `.` multiplication or composition (as an infix operator). For examples, `GBy.d` or `k{watt}.h`. The grammar for a unit is as follows: Expression = Component { \".\" Component } { \"/\" Component } ; Component = ( [ PREFIX ] UNIT | \"%\" ) [ Annotation ] | Annotation | \"1\" ; Annotation = \"{\" NAME \"}\" ; Notes: * `Annotation` is just a comment if it follows a `UNIT`. If the annotation is used alone, then the unit is equivalent to `1`. For examples, `{request}/s == 1/s`, `By{transmitted}/s == By/s`. * `NAME` is a sequence of non-blank printable ASCII characters not containing `{` or `}`. * `1` represents a unitary [dimensionless unit](https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in `1/s`. It is typically used when none of the basic units are appropriate. For example, \"new users per day\" can be represented as `1/d` or `{new-users}/d` (and a metric value `5` would mean \"5 new users). Alternatively, \"thousands of page views per day\" would be represented as `1000/d` or `k1/d` or `k{page_views}/d` (and a metric value of `5.3` would mean \"5300 page views per day\"). * `%` represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value `3` means \"3 percent\"). * `10^2.%` indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value `0.03` means \"3 percent\").",
-          "type": "string"
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      },
-      "type": "object",
-      "id": "MetricDescriptor",
-      "description": "Defines a metric type and its schema. Once a metric descriptor is created, deleting or altering it stops data collection and makes the metric type's existing data unusable. "
     },
-    "ConfigRef": {
-      "description": "Represents a service configuration with its name and id.",
-      "type": "object",
-      "id": "ConfigRef",
-      "properties": {
-        "name": {
-          "description": "Resource name of a service config. It must have the following format: \"services/{service name}/configs/{config id}\".",
-          "type": "string"
+    "protocol": "rest",
+    "resources": {
+        "operations": {
+            "methods": {
+                "get": {
+                    "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
+                    "flatPath": "v1/operations/{operationsId}",
+                    "httpMethod": "GET",
+                    "id": "servicemanagement.operations.get",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "The name of the operation resource.",
+                            "location": "path",
+                            "pattern": "^operations/.*$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/{+name}",
+                    "response": {
+                        "$ref": "Operation"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/service.management"
+                    ]
+                },
+                "list": {
+                    "description": "Lists service operations that match the specified filter in the request.",
+                    "flatPath": "v1/operations",
+                    "httpMethod": "GET",
+                    "id": "servicemanagement.operations.list",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "filter": {
+                            "description": "A string for filtering Operations. The following filter fields are supported: * serviceName: Required. Only `=` operator is allowed. * startTime: The time this job was started, in ISO 8601 format. Allowed operators are `>=`, `>`, `<=`, and `<`. * status: Can be `done`, `in_progress`, or `failed`. Allowed operators are `=`, and `!=`. Filter expression supports conjunction (AND) and disjunction (OR) logical operators. However, the serviceName restriction must be at the top-level and can only be combined with other restrictions via the AND logical operator. Examples: * `serviceName={some-service}.googleapis.com` * `serviceName={some-service}.googleapis.com AND startTime>=\"2017-02-01\"` * `serviceName={some-service}.googleapis.com AND status=done` * `serviceName={some-service}.googleapis.com AND (status=done OR startTime>=\"2017-02-01\")`",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "name": {
+                            "description": "Not used.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageSize": {
+                            "description": "The maximum number of operations to return. If unspecified, defaults to 50. The maximum value is 100.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The standard list page token.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/operations",
+                    "response": {
+                        "$ref": "ListOperationsResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/service.management"
+                    ]
+                }
+            }
+        },
+        "services": {
+            "methods": {
+                "create": {
+                    "description": "Creates a new managed service. A managed service is immutable, and is subject to mandatory 30-day data retention. You cannot move a service or recreate it within 30 days after deletion. One producer project can own no more than 500 services. For security and reliability purposes, a production service should be hosted in a dedicated producer project. Operation",
+                    "flatPath": "v1/services",
+                    "httpMethod": "POST",
+                    "id": "servicemanagement.services.create",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v1/services",
+                    "request": {
+                        "$ref": "ManagedService"
+                    },
+                    "response": {
+                        "$ref": "Operation"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/service.management"
+                    ]
+                },
+                "delete": {
+                    "description": "Deletes a managed service. This method will change the service to the `Soft-Delete` state for 30 days. Within this period, service producers may call UndeleteService to restore the service. After 30 days, the service will be permanently deleted. Operation",
+                    "flatPath": "v1/services/{serviceName}",
+                    "httpMethod": "DELETE",
+                    "id": "servicemanagement.services.delete",
+                    "parameterOrder": [
+                        "serviceName"
+                    ],
+                    "parameters": {
+                        "serviceName": {
+                            "description": "Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/services/{serviceName}",
+                    "response": {
+                        "$ref": "Operation"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/service.management"
+                    ]
+                },
+                "enable": {
+                    "description": "Enables a service for a project, so it can be used for the project. See [Cloud Auth Guide](https://cloud.google.com/docs/authentication) for more information. Operation",
+                    "flatPath": "v1/services/{serviceName}:enable",
+                    "httpMethod": "POST",
+                    "id": "servicemanagement.services.enable",
+                    "parameterOrder": [
+                        "serviceName"
+                    ],
+                    "parameters": {
+                        "serviceName": {
+                            "description": "Required. Name of the service to enable. Specifying an unknown service name will cause the request to fail.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/services/{serviceName}:enable",
+                    "request": {
+                        "$ref": "EnableServiceRequest"
+                    },
+                    "response": {
+                        "$ref": "Operation"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/service.management"
+                    ]
+                },
+                "generateConfigReport": {
+                    "description": "Generates and returns a report (errors, warnings and changes from existing configurations) associated with GenerateConfigReportRequest.new_value If GenerateConfigReportRequest.old_value is specified, GenerateConfigReportRequest will contain a single ChangeReport based on the comparison between GenerateConfigReportRequest.new_value and GenerateConfigReportRequest.old_value. If GenerateConfigReportRequest.old_value is not specified, this method will compare GenerateConfigReportRequest.new_value with the last pushed service configuration.",
+                    "flatPath": "v1/services:generateConfigReport",
+                    "httpMethod": "POST",
+                    "id": "servicemanagement.services.generateConfigReport",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v1/services:generateConfigReport",
+                    "request": {
+                        "$ref": "GenerateConfigReportRequest"
+                    },
+                    "response": {
+                        "$ref": "GenerateConfigReportResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/service.management"
+                    ]
+                },
+                "get": {
+                    "description": "Gets a managed service. Authentication is required unless the service is public.",
+                    "flatPath": "v1/services/{serviceName}",
+                    "httpMethod": "GET",
+                    "id": "servicemanagement.services.get",
+                    "parameterOrder": [
+                        "serviceName"
+                    ],
+                    "parameters": {
+                        "serviceName": {
+                            "description": "Required. The name of the service. See the `ServiceManager` overview for naming requirements. For example: `example.googleapis.com`.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/services/{serviceName}",
+                    "response": {
+                        "$ref": "ManagedService"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                        "https://www.googleapis.com/auth/service.management",
+                        "https://www.googleapis.com/auth/service.management.readonly"
+                    ]
+                },
+                "getConfig": {
+                    "description": "Gets a service configuration (version) for a managed service.",
+                    "flatPath": "v1/services/{serviceName}/config",
+                    "httpMethod": "GET",
+                    "id": "servicemanagement.services.getConfig",
+                    "parameterOrder": [
+                        "serviceName"
+                    ],
+                    "parameters": {
+                        "configId": {
+                            "description": "Required. The id of the service configuration resource. This field must be specified for the server to return all fields, including `SourceInfo`.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "serviceName": {
+                            "description": "Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "view": {
+                            "description": "Specifies which parts of the Service Config should be returned in the response.",
+                            "enum": [
+                                "BASIC",
+                                "FULL"
+                            ],
+                            "enumDescriptions": [
+                                "Server response includes all fields except SourceInfo.",
+                                "Server response includes all fields including SourceInfo. SourceFiles are of type 'google.api.servicemanagement.v1.ConfigFile' and are only available for configs created using the SubmitConfigSource method."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/services/{serviceName}/config",
+                    "response": {
+                        "$ref": "Service"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                        "https://www.googleapis.com/auth/service.management",
+                        "https://www.googleapis.com/auth/service.management.readonly"
+                    ]
+                },
+                "getIamPolicy": {
+                    "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.",
+                    "flatPath": "v1/services/{servicesId}:getIamPolicy",
+                    "httpMethod": "POST",
+                    "id": "servicemanagement.services.getIamPolicy",
+                    "parameterOrder": [
+                        "resource"
+                    ],
+                    "parameters": {
+                        "resource": {
+                            "description": "REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field.",
+                            "location": "path",
+                            "pattern": "^services/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/{+resource}:getIamPolicy",
+                    "request": {
+                        "$ref": "GetIamPolicyRequest"
+                    },
+                    "response": {
+                        "$ref": "Policy"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                        "https://www.googleapis.com/auth/service.management",
+                        "https://www.googleapis.com/auth/service.management.readonly"
+                    ]
+                },
+                "list": {
+                    "description": "Lists managed services. Returns all public services. For authenticated users, also returns all services the calling user has \"servicemanagement.services.get\" permission for. **BETA:** If the caller specifies the `consumer_id`, it returns only the services enabled on the consumer. The `consumer_id` must have the format of \"project:{PROJECT-ID}\".",
+                    "flatPath": "v1/services",
+                    "httpMethod": "GET",
+                    "id": "servicemanagement.services.list",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "consumerId": {
+                            "description": "Include services consumed by the specified consumer. The Google Service Management implementation accepts the following forms: - project:",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageSize": {
+                            "description": "The max number of items to include in the response list. Page size is 50 if not specified. Maximum value is 100.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Token identifying which result to start with; returned by a previous list call.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "producerProjectId": {
+                            "description": "Include services produced by the specified project.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/services",
+                    "response": {
+                        "$ref": "ListServicesResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                        "https://www.googleapis.com/auth/service.management",
+                        "https://www.googleapis.com/auth/service.management.readonly"
+                    ]
+                },
+                "setIamPolicy": {
+                    "description": "Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.",
+                    "flatPath": "v1/services/{servicesId}:setIamPolicy",
+                    "httpMethod": "POST",
+                    "id": "servicemanagement.services.setIamPolicy",
+                    "parameterOrder": [
+                        "resource"
+                    ],
+                    "parameters": {
+                        "resource": {
+                            "description": "REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field.",
+                            "location": "path",
+                            "pattern": "^services/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/{+resource}:setIamPolicy",
+                    "request": {
+                        "$ref": "SetIamPolicyRequest"
+                    },
+                    "response": {
+                        "$ref": "Policy"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/service.management"
+                    ]
+                },
+                "testIamPermissions": {
+                    "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may \"fail open\" without warning.",
+                    "flatPath": "v1/services/{servicesId}:testIamPermissions",
+                    "httpMethod": "POST",
+                    "id": "servicemanagement.services.testIamPermissions",
+                    "parameterOrder": [
+                        "resource"
+                    ],
+                    "parameters": {
+                        "resource": {
+                            "description": "REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field.",
+                            "location": "path",
+                            "pattern": "^services/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/{+resource}:testIamPermissions",
+                    "request": {
+                        "$ref": "TestIamPermissionsRequest"
+                    },
+                    "response": {
+                        "$ref": "TestIamPermissionsResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-platform.read-only",
+                        "https://www.googleapis.com/auth/service.management",
+                        "https://www.googleapis.com/auth/service.management.readonly"
+                    ]
+                },
+                "undelete": {
+                    "description": "Revives a previously deleted managed service. The method restores the service using the configuration at the time the service was deleted. The target service must exist and must have been deleted within the last 30 days. Operation",
+                    "flatPath": "v1/services/{serviceName}:undelete",
+                    "httpMethod": "POST",
+                    "id": "servicemanagement.services.undelete",
+                    "parameterOrder": [
+                        "serviceName"
+                    ],
+                    "parameters": {
+                        "serviceName": {
+                            "description": "Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/services/{serviceName}:undelete",
+                    "response": {
+                        "$ref": "Operation"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/service.management"
+                    ]
+                }
+            },
+            "resources": {
+                "configs": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a new service configuration (version) for a managed service. This method only stores the service configuration. To roll out the service configuration to backend systems please call CreateServiceRollout. Only the 100 most recent service configurations and ones referenced by existing rollouts are kept for each service. The rest will be deleted eventually.",
+                            "flatPath": "v1/services/{serviceName}/configs",
+                            "httpMethod": "POST",
+                            "id": "servicemanagement.services.configs.create",
+                            "parameterOrder": [
+                                "serviceName"
+                            ],
+                            "parameters": {
+                                "serviceName": {
+                                    "description": "Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/services/{serviceName}/configs",
+                            "request": {
+                                "$ref": "Service"
+                            },
+                            "response": {
+                                "$ref": "Service"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/service.management"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets a service configuration (version) for a managed service.",
+                            "flatPath": "v1/services/{serviceName}/configs/{configId}",
+                            "httpMethod": "GET",
+                            "id": "servicemanagement.services.configs.get",
+                            "parameterOrder": [
+                                "serviceName",
+                                "configId"
+                            ],
+                            "parameters": {
+                                "configId": {
+                                    "description": "Required. The id of the service configuration resource. This field must be specified for the server to return all fields, including `SourceInfo`.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "serviceName": {
+                                    "description": "Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "view": {
+                                    "description": "Specifies which parts of the Service Config should be returned in the response.",
+                                    "enum": [
+                                        "BASIC",
+                                        "FULL"
+                                    ],
+                                    "enumDescriptions": [
+                                        "Server response includes all fields except SourceInfo.",
+                                        "Server response includes all fields including SourceInfo. SourceFiles are of type 'google.api.servicemanagement.v1.ConfigFile' and are only available for configs created using the SubmitConfigSource method."
+                                    ],
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/services/{serviceName}/configs/{configId}",
+                            "response": {
+                                "$ref": "Service"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/service.management",
+                                "https://www.googleapis.com/auth/service.management.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists the history of the service configuration for a managed service, from the newest to the oldest.",
+                            "flatPath": "v1/services/{serviceName}/configs",
+                            "httpMethod": "GET",
+                            "id": "servicemanagement.services.configs.list",
+                            "parameterOrder": [
+                                "serviceName"
+                            ],
+                            "parameters": {
+                                "pageSize": {
+                                    "description": "The max number of items to include in the response list. Page size is 50 if not specified. Maximum value is 100.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The token of the page to retrieve.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "serviceName": {
+                                    "description": "Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/services/{serviceName}/configs",
+                            "response": {
+                                "$ref": "ListServiceConfigsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/service.management",
+                                "https://www.googleapis.com/auth/service.management.readonly"
+                            ]
+                        },
+                        "submit": {
+                            "description": "Creates a new service configuration (version) for a managed service based on user-supplied configuration source files (for example: OpenAPI Specification). This method stores the source configurations as well as the generated service configuration. To rollout the service configuration to other services, please call CreateServiceRollout. Only the 100 most recent configuration sources and ones referenced by existing service configurtions are kept for each service. The rest will be deleted eventually. Operation",
+                            "flatPath": "v1/services/{serviceName}/configs:submit",
+                            "httpMethod": "POST",
+                            "id": "servicemanagement.services.configs.submit",
+                            "parameterOrder": [
+                                "serviceName"
+                            ],
+                            "parameters": {
+                                "serviceName": {
+                                    "description": "Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/services/{serviceName}/configs:submit",
+                            "request": {
+                                "$ref": "SubmitConfigSourceRequest"
+                            },
+                            "response": {
+                                "$ref": "Operation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/service.management"
+                            ]
+                        }
+                    }
+                },
+                "consumers": {
+                    "methods": {
+                        "getIamPolicy": {
+                            "description": "Gets the access control policy for a resource. Returns an empty policy if the resource exists and does not have a policy set.",
+                            "flatPath": "v1/services/{servicesId}/consumers/{consumersId}:getIamPolicy",
+                            "httpMethod": "POST",
+                            "id": "servicemanagement.services.consumers.getIamPolicy",
+                            "parameterOrder": [
+                                "resource"
+                            ],
+                            "parameters": {
+                                "resource": {
+                                    "description": "REQUIRED: The resource for which the policy is being requested. See the operation documentation for the appropriate value for this field.",
+                                    "location": "path",
+                                    "pattern": "^services/[^/]+/consumers/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+resource}:getIamPolicy",
+                            "request": {
+                                "$ref": "GetIamPolicyRequest"
+                            },
+                            "response": {
+                                "$ref": "Policy"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/service.management",
+                                "https://www.googleapis.com/auth/service.management.readonly"
+                            ]
+                        },
+                        "setIamPolicy": {
+                            "description": "Sets the access control policy on the specified resource. Replaces any existing policy. Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED` errors.",
+                            "flatPath": "v1/services/{servicesId}/consumers/{consumersId}:setIamPolicy",
+                            "httpMethod": "POST",
+                            "id": "servicemanagement.services.consumers.setIamPolicy",
+                            "parameterOrder": [
+                                "resource"
+                            ],
+                            "parameters": {
+                                "resource": {
+                                    "description": "REQUIRED: The resource for which the policy is being specified. See the operation documentation for the appropriate value for this field.",
+                                    "location": "path",
+                                    "pattern": "^services/[^/]+/consumers/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+resource}:setIamPolicy",
+                            "request": {
+                                "$ref": "SetIamPolicyRequest"
+                            },
+                            "response": {
+                                "$ref": "Policy"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/service.management"
+                            ]
+                        },
+                        "testIamPermissions": {
+                            "description": "Returns permissions that a caller has on the specified resource. If the resource does not exist, this will return an empty set of permissions, not a `NOT_FOUND` error. Note: This operation is designed to be used for building permission-aware UIs and command-line tools, not for authorization checking. This operation may \"fail open\" without warning.",
+                            "flatPath": "v1/services/{servicesId}/consumers/{consumersId}:testIamPermissions",
+                            "httpMethod": "POST",
+                            "id": "servicemanagement.services.consumers.testIamPermissions",
+                            "parameterOrder": [
+                                "resource"
+                            ],
+                            "parameters": {
+                                "resource": {
+                                    "description": "REQUIRED: The resource for which the policy detail is being requested. See the operation documentation for the appropriate value for this field.",
+                                    "location": "path",
+                                    "pattern": "^services/[^/]+/consumers/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+resource}:testIamPermissions",
+                            "request": {
+                                "$ref": "TestIamPermissionsRequest"
+                            },
+                            "response": {
+                                "$ref": "TestIamPermissionsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/service.management",
+                                "https://www.googleapis.com/auth/service.management.readonly"
+                            ]
+                        }
+                    }
+                },
+                "rollouts": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a new service configuration rollout. Based on rollout, the Google Service Management will roll out the service configurations to different backend services. For example, the logging configuration will be pushed to Google Cloud Logging. Please note that any previous pending and running Rollouts and associated Operations will be automatically cancelled so that the latest Rollout will not be blocked by previous Rollouts. Only the 100 most recent (in any state) and the last 10 successful (if not already part of the set of 100 most recent) rollouts are kept for each service. The rest will be deleted eventually. Operation",
+                            "flatPath": "v1/services/{serviceName}/rollouts",
+                            "httpMethod": "POST",
+                            "id": "servicemanagement.services.rollouts.create",
+                            "parameterOrder": [
+                                "serviceName"
+                            ],
+                            "parameters": {
+                                "serviceName": {
+                                    "description": "Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/services/{serviceName}/rollouts",
+                            "request": {
+                                "$ref": "Rollout"
+                            },
+                            "response": {
+                                "$ref": "Operation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/service.management"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets a service configuration rollout.",
+                            "flatPath": "v1/services/{serviceName}/rollouts/{rolloutId}",
+                            "httpMethod": "GET",
+                            "id": "servicemanagement.services.rollouts.get",
+                            "parameterOrder": [
+                                "serviceName",
+                                "rolloutId"
+                            ],
+                            "parameters": {
+                                "rolloutId": {
+                                    "description": "Required. The id of the rollout resource.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "serviceName": {
+                                    "description": "Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/services/{serviceName}/rollouts/{rolloutId}",
+                            "response": {
+                                "$ref": "Rollout"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/service.management",
+                                "https://www.googleapis.com/auth/service.management.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists the history of the service configuration rollouts for a managed service, from the newest to the oldest.",
+                            "flatPath": "v1/services/{serviceName}/rollouts",
+                            "httpMethod": "GET",
+                            "id": "servicemanagement.services.rollouts.list",
+                            "parameterOrder": [
+                                "serviceName"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "Required. Use `filter` to return subset of rollouts. The following filters are supported: -- To limit the results to only those in [status](google.api.servicemanagement.v1.RolloutStatus) 'SUCCESS', use filter='status=SUCCESS' -- To limit the results to those in [status](google.api.servicemanagement.v1.RolloutStatus) 'CANCELLED' or 'FAILED', use filter='status=CANCELLED OR status=FAILED'",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "The max number of items to include in the response list. Page size is 50 if not specified. Maximum value is 100.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The token of the page to retrieve.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "serviceName": {
+                                    "description": "Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/services/{serviceName}/rollouts",
+                            "response": {
+                                "$ref": "ListServiceRolloutsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-platform.read-only",
+                                "https://www.googleapis.com/auth/service.management",
+                                "https://www.googleapis.com/auth/service.management.readonly"
+                            ]
+                        }
+                    }
+                }
+            }
         }
-      }
     },
-    "MetricDescriptorMetadata": {
-      "description": "Additional annotations that can be used to guide the usage of a metric.",
-      "properties": {
-        "launchStage": {
-          "type": "string",
-          "description": "Deprecated. Must use the MetricDescriptor.launch_stage instead.",
-          "enumDescriptions": [
-            "Do not use this default value.",
-            "The feature is not yet implemented. Users can not use it.",
-            "Prelaunch features are hidden from users and are only visible internally.",
-            "Early Access features are limited to a closed group of testers. To use these features, you must sign up in advance and sign a Trusted Tester agreement (which includes confidentiality provisions). These features may be unstable, changed in backward-incompatible ways, and are not guaranteed to be released.",
-            "Alpha is a limited availability test for releases before they are cleared for widespread use. By Alpha, all significant design issues are resolved and we are in the process of verifying functionality. Alpha customers need to apply for access, agree to applicable terms, and have their projects allowlisted. Alpha releases don’t have to be feature complete, no SLAs are provided, and there are no technical support obligations, but they will be far enough along that customers can actually use them in test environments or for limited-use tests -- just like they would in normal production cases.",
-            "Beta is the point at which we are ready to open a release for any customer to use. There are no SLA or technical support obligations in a Beta release. Products will be complete from a feature perspective, but may have some open outstanding issues. Beta releases are suitable for limited production use cases.",
-            "GA features are open to all developers and are considered stable and fully qualified for production use.",
-            "Deprecated features are scheduled to be shut down and removed. For more information, see the “Deprecation Policy” section of our [Terms of Service](https://cloud.google.com/terms/) and the [Google Cloud Platform Subject to the Deprecation Policy](https://cloud.google.com/terms/deprecation) documentation."
-          ],
-          "enum": [
-            "LAUNCH_STAGE_UNSPECIFIED",
-            "UNIMPLEMENTED",
-            "PRELAUNCH",
-            "EARLY_ACCESS",
-            "ALPHA",
-            "BETA",
-            "GA",
-            "DEPRECATED"
-          ]
+    "revision": "20210219",
+    "rootUrl": "https://servicemanagement.googleapis.com/",
+    "schemas": {
+        "Advice": {
+            "description": "Generated advice about this change, used for providing more information about how a change will affect the existing service.",
+            "id": "Advice",
+            "properties": {
+                "description": {
+                    "description": "Useful description for why this advice was applied and what actions should be taken to mitigate any implied risks.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "ingestDelay": {
-          "format": "google-duration",
-          "description": "The delay of data points caused by ingestion. Data points older than this age are guaranteed to be ingested and available to be read, excluding data loss due to errors.",
-          "type": "string"
+        "Api": {
+            "description": "Api is a light-weight descriptor for an API Interface. Interfaces are also described as \"protocol buffer services\" in some contexts, such as by the \"service\" keyword in a .proto file, but they are different from API Services, which represent a concrete implementation of an interface as opposed to simply a description of methods and bindings. They are also sometimes simply referred to as \"APIs\" in other contexts, such as the name of this message itself. See https://cloud.google.com/apis/design/glossary for detailed terminology.",
+            "id": "Api",
+            "properties": {
+                "methods": {
+                    "description": "The methods of this interface, in unspecified order.",
+                    "items": {
+                        "$ref": "Method"
+                    },
+                    "type": "array"
+                },
+                "mixins": {
+                    "description": "Included interfaces. See Mixin.",
+                    "items": {
+                        "$ref": "Mixin"
+                    },
+                    "type": "array"
+                },
+                "name": {
+                    "description": "The fully qualified name of this interface, including package name followed by the interface's simple name.",
+                    "type": "string"
+                },
+                "options": {
+                    "description": "Any metadata attached to the interface.",
+                    "items": {
+                        "$ref": "Option"
+                    },
+                    "type": "array"
+                },
+                "sourceContext": {
+                    "$ref": "SourceContext",
+                    "description": "Source context for the protocol buffer service represented by this message."
+                },
+                "syntax": {
+                    "description": "The source syntax of the service.",
+                    "enum": [
+                        "SYNTAX_PROTO2",
+                        "SYNTAX_PROTO3"
+                    ],
+                    "enumDescriptions": [
+                        "Syntax `proto2`.",
+                        "Syntax `proto3`."
+                    ],
+                    "type": "string"
+                },
+                "version": {
+                    "description": "A version string for this interface. If specified, must have the form `major-version.minor-version`, as in `1.10`. If the minor version is omitted, it defaults to zero. If the entire version field is empty, the major version is derived from the package name, as outlined below. If the field is not empty, the version in the package name will be verified to be consistent with what is provided here. The versioning schema uses [semantic versioning](http://semver.org) where the major version number indicates a breaking change and the minor version an additive, non-breaking change. Both version numbers are signals to users what to expect from different versions, and should be carefully chosen based on the product plan. The major version is also reflected in the package name of the interface, which must end in `v`, as in `google.feature.v1`. For major versions 0 and 1, the suffix can be omitted. Zero major versions must only be used for experimental, non-GA interfaces. ",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "samplePeriod": {
-          "description": "The sampling period of metric data points. For metrics which are written periodically, consecutive data points are stored at this time interval, excluding data loss due to errors. Metrics with a higher granularity have a smaller sampling period.",
-          "format": "google-duration",
-          "type": "string"
+        "AuditConfig": {
+            "description": "Specifies the audit configuration for a service. The configuration determines which permission types are logged, and what identities, if any, are exempted from logging. An AuditConfig must have one or more AuditLogConfigs. If there are AuditConfigs for both `allServices` and a specific service, the union of the two AuditConfigs is used for that service: the log_types specified in each AuditConfig are enabled, and the exempted_members in each AuditLogConfig are exempted. Example Policy with multiple AuditConfigs: { \"audit_configs\": [ { \"service\": \"allServices\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" }, { \"log_type\": \"ADMIN_READ\" } ] }, { \"service\": \"sampleservice.googleapis.com\", \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\" }, { \"log_type\": \"DATA_WRITE\", \"exempted_members\": [ \"user:aliya@example.com\" ] } ] } ] } For sampleservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ logging. It also exempts jose@example.com from DATA_READ logging, and aliya@example.com from DATA_WRITE logging.",
+            "id": "AuditConfig",
+            "properties": {
+                "auditLogConfigs": {
+                    "description": "The configuration for logging of each type of permission.",
+                    "items": {
+                        "$ref": "AuditLogConfig"
+                    },
+                    "type": "array"
+                },
+                "service": {
+                    "description": "Specifies a service that will be enabled for audit logging. For example, `storage.googleapis.com`, `cloudsql.googleapis.com`. `allServices` is a special value that covers all services.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AuditLogConfig": {
+            "description": "Provides the configuration for logging a type of permissions. Example: { \"audit_log_configs\": [ { \"log_type\": \"DATA_READ\", \"exempted_members\": [ \"user:jose@example.com\" ] }, { \"log_type\": \"DATA_WRITE\" } ] } This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting jose@example.com from DATA_READ logging.",
+            "id": "AuditLogConfig",
+            "properties": {
+                "exemptedMembers": {
+                    "description": "Specifies the identities that do not cause logging for this type of permission. Follows the same format of Binding.members.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "logType": {
+                    "description": "The log type that this config enables.",
+                    "enum": [
+                        "LOG_TYPE_UNSPECIFIED",
+                        "ADMIN_READ",
+                        "DATA_WRITE",
+                        "DATA_READ"
+                    ],
+                    "enumDescriptions": [
+                        "Default case. Should never be this.",
+                        "Admin reads. Example: CloudIAM getIamPolicy",
+                        "Data writes. Example: CloudSQL Users create",
+                        "Data reads. Example: CloudSQL Users list"
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AuthProvider": {
+            "description": "Configuration for an authentication provider, including support for [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).",
+            "id": "AuthProvider",
+            "properties": {
+                "audiences": {
+                    "description": "The list of JWT [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3). that are allowed to access. A JWT containing any of these audiences will be accepted. When this setting is absent, JWTs with audiences: - \"https://[service.name]/[google.protobuf.Api.name]\" - \"https://[service.name]/\" will be accepted. For example, if no audiences are in the setting, LibraryService API will accept JWTs with the following audiences: - https://library-example.googleapis.com/google.example.library.v1.LibraryService - https://library-example.googleapis.com/ Example: audiences: bookstore_android.apps.googleusercontent.com, bookstore_web.apps.googleusercontent.com",
+                    "type": "string"
+                },
+                "authorizationUrl": {
+                    "description": "Redirect URL if JWT token is required but not present or is expired. Implement authorizationUrl of securityDefinitions in OpenAPI spec.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "The unique identifier of the auth provider. It will be referred to by `AuthRequirement.provider_id`. Example: \"bookstore_auth\".",
+                    "type": "string"
+                },
+                "issuer": {
+                    "description": "Identifies the principal that issued the JWT. See https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.1 Usually a URL or an email address. Example: https://securetoken.google.com Example: 1234567-compute@developer.gserviceaccount.com",
+                    "type": "string"
+                },
+                "jwksUri": {
+                    "description": "URL of the provider's public key set to validate signature of the JWT. See [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata). Optional if the key set document: - can be retrieved from [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html) of the issuer. - can be inferred from the email domain of the issuer (e.g. a Google service account). Example: https://www.googleapis.com/oauth2/v1/certs",
+                    "type": "string"
+                },
+                "jwtLocations": {
+                    "description": "Defines the locations to extract the JWT. JWT locations can be either from HTTP headers or URL query parameters. The rule is that the first match wins. The checking order is: checking all headers first, then URL query parameters. If not specified, default to use following 3 locations: 1) Authorization: Bearer 2) x-goog-iap-jwt-assertion 3) access_token query parameter Default locations can be specified as followings: jwt_locations: - header: Authorization value_prefix: \"Bearer \" - header: x-goog-iap-jwt-assertion - query: access_token",
+                    "items": {
+                        "$ref": "JwtLocation"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "AuthRequirement": {
+            "description": "User-defined authentication requirements, including support for [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).",
+            "id": "AuthRequirement",
+            "properties": {
+                "audiences": {
+                    "description": "NOTE: This will be deprecated soon, once AuthProvider.audiences is implemented and accepted in all the runtime components. The list of JWT [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3). that are allowed to access. A JWT containing any of these audiences will be accepted. When this setting is absent, only JWTs with audience \"https://Service_name/API_name\" will be accepted. For example, if no audiences are in the setting, LibraryService API will only accept JWTs with the following audience \"https://library-example.googleapis.com/google.example.library.v1.LibraryService\". Example: audiences: bookstore_android.apps.googleusercontent.com, bookstore_web.apps.googleusercontent.com",
+                    "type": "string"
+                },
+                "providerId": {
+                    "description": "id from authentication provider. Example: provider_id: bookstore_auth",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Authentication": {
+            "description": "`Authentication` defines the authentication configuration for an API. Example for an API targeted for external use: name: calendar.googleapis.com authentication: providers: - id: google_calendar_auth jwks_uri: https://www.googleapis.com/oauth2/v1/certs issuer: https://securetoken.google.com rules: - selector: \"*\" requirements: provider_id: google_calendar_auth",
+            "id": "Authentication",
+            "properties": {
+                "providers": {
+                    "description": "Defines a set of authentication providers that a service supports.",
+                    "items": {
+                        "$ref": "AuthProvider"
+                    },
+                    "type": "array"
+                },
+                "rules": {
+                    "description": "A list of authentication rules that apply to individual API methods. **NOTE:** All service configuration rules follow \"last one wins\" order.",
+                    "items": {
+                        "$ref": "AuthenticationRule"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "AuthenticationRule": {
+            "description": "Authentication rules for the service. By default, if a method has any authentication requirements, every request must include a valid credential matching one of the requirements. It's an error to include more than one kind of credential in a single request. If a method doesn't have any auth requirements, request credentials will be ignored.",
+            "id": "AuthenticationRule",
+            "properties": {
+                "allowWithoutCredential": {
+                    "description": "If true, the service accepts API keys without any other credential. This flag only applies to HTTP and gRPC requests.",
+                    "type": "boolean"
+                },
+                "oauth": {
+                    "$ref": "OAuthRequirements",
+                    "description": "The requirements for OAuth credentials."
+                },
+                "requirements": {
+                    "description": "Requirements for additional authentication providers.",
+                    "items": {
+                        "$ref": "AuthRequirement"
+                    },
+                    "type": "array"
+                },
+                "selector": {
+                    "description": "Selects the methods to which this rule applies. Refer to selector for syntax details.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Backend": {
+            "description": "`Backend` defines the backend configuration for a service.",
+            "id": "Backend",
+            "properties": {
+                "rules": {
+                    "description": "A list of API backend rules that apply to individual API methods. **NOTE:** All service configuration rules follow \"last one wins\" order.",
+                    "items": {
+                        "$ref": "BackendRule"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "BackendRule": {
+            "description": "A backend rule provides configuration for an individual API element.",
+            "id": "BackendRule",
+            "properties": {
+                "address": {
+                    "description": "The address of the API backend. The scheme is used to determine the backend protocol and security. The following schemes are accepted: SCHEME PROTOCOL SECURITY http:// HTTP None https:// HTTP TLS grpc:// gRPC None grpcs:// gRPC TLS It is recommended to explicitly include a scheme. Leaving out the scheme may cause constrasting behaviors across platforms. If the port is unspecified, the default is: - 80 for schemes without TLS - 443 for schemes with TLS For HTTP backends, use protocol to specify the protocol version.",
+                    "type": "string"
+                },
+                "deadline": {
+                    "description": "The number of seconds to wait for a response from a request. The default varies based on the request protocol and deployment environment.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "disableAuth": {
+                    "description": "When disable_auth is true, a JWT ID token won't be generated and the original \"Authorization\" HTTP header will be preserved. If the header is used to carry the original token and is expected by the backend, this field must be set to true to preserve the header.",
+                    "type": "boolean"
+                },
+                "jwtAudience": {
+                    "description": "The JWT audience is used when generating a JWT ID token for the backend. This ID token will be added in the HTTP \"authorization\" header, and sent to the backend.",
+                    "type": "string"
+                },
+                "minDeadline": {
+                    "description": "Minimum deadline in seconds needed for this method. Calls having deadline value lower than this will be rejected.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "operationDeadline": {
+                    "description": "The number of seconds to wait for the completion of a long running operation. The default is no deadline.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "pathTranslation": {
+                    "enum": [
+                        "PATH_TRANSLATION_UNSPECIFIED",
+                        "CONSTANT_ADDRESS",
+                        "APPEND_PATH_TO_ADDRESS"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        "Use the backend address as-is, with no modification to the path. If the URL pattern contains variables, the variable names and values will be appended to the query string. If a query string parameter and a URL pattern variable have the same name, this may result in duplicate keys in the query string. # Examples Given the following operation config: Method path: /api/company/{cid}/user/{uid} Backend address: https://example.cloudfunctions.net/getUser Requests to the following request paths will call the backend at the translated path: Request path: /api/company/widgetworks/user/johndoe Translated: https://example.cloudfunctions.net/getUser?cid=widgetworks&uid=johndoe Request path: /api/company/widgetworks/user/johndoe?timezone=EST Translated: https://example.cloudfunctions.net/getUser?timezone=EST&cid=widgetworks&uid=johndoe",
+                        "The request path will be appended to the backend address. # Examples Given the following operation config: Method path: /api/company/{cid}/user/{uid} Backend address: https://example.appspot.com Requests to the following request paths will call the backend at the translated path: Request path: /api/company/widgetworks/user/johndoe Translated: https://example.appspot.com/api/company/widgetworks/user/johndoe Request path: /api/company/widgetworks/user/johndoe?timezone=EST Translated: https://example.appspot.com/api/company/widgetworks/user/johndoe?timezone=EST"
+                    ],
+                    "type": "string"
+                },
+                "protocol": {
+                    "description": "The protocol used for sending a request to the backend. The supported values are \"http/1.1\" and \"h2\". The default value is inferred from the scheme in the address field: SCHEME PROTOCOL http:// http/1.1 https:// http/1.1 grpc:// h2 grpcs:// h2 For secure HTTP backends (https://) that support HTTP/2, set this field to \"h2\" for improved performance. Configuring this field to non-default values is only supported for secure HTTP backends. This field will be ignored for all other backends. See https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids for more details on the supported values.",
+                    "type": "string"
+                },
+                "selector": {
+                    "description": "Selects the methods to which this rule applies. Refer to selector for syntax details.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Billing": {
+            "description": "Billing related configuration of the service. The following example shows how to configure monitored resources and metrics for billing, `consumer_destinations` is the only supported destination and the monitored resources need at least one label key `cloud.googleapis.com/location` to indicate the location of the billing usage, using different monitored resources between monitoring and billing is recommended so they can be evolved independently: monitored_resources: - type: library.googleapis.com/billing_branch labels: - key: cloud.googleapis.com/location description: | Predefined label to support billing location restriction. - key: city description: | Custom label to define the city where the library branch is located in. - key: name description: Custom label to define the name of the library branch. metrics: - name: library.googleapis.com/book/borrowed_count metric_kind: DELTA value_type: INT64 unit: \"1\" billing: consumer_destinations: - monitored_resource: library.googleapis.com/billing_branch metrics: - library.googleapis.com/book/borrowed_count",
+            "id": "Billing",
+            "properties": {
+                "consumerDestinations": {
+                    "description": "Billing configurations for sending metrics to the consumer project. There can be multiple consumer destinations per service, each one must have a different monitored resource type. A metric can be used in at most one consumer destination.",
+                    "items": {
+                        "$ref": "BillingDestination"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "BillingDestination": {
+            "description": "Configuration of a specific billing destination (Currently only support bill against consumer project).",
+            "id": "BillingDestination",
+            "properties": {
+                "metrics": {
+                    "description": "Names of the metrics to report to this billing destination. Each name must be defined in Service.metrics section.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "monitoredResource": {
+                    "description": "The monitored resource type. The type must be defined in Service.monitored_resources section.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Binding": {
+            "description": "Associates `members` with a `role`.",
+            "id": "Binding",
+            "properties": {
+                "condition": {
+                    "$ref": "Expr",
+                    "description": "The condition that is associated with this binding. If the condition evaluates to `true`, then this binding applies to the current request. If the condition evaluates to `false`, then this binding does not apply to the current request. However, a different role binding might grant the same role to one or more of the members in this binding. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)."
+                },
+                "members": {
+                    "description": "Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@example.com` . * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `deleted:user:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a user that has been recently deleted. For example, `alice@example.com?uid=123456789012345678901`. If the user is recovered, this value reverts to `user:{emailid}` and the recovered user retains the role in the binding. * `deleted:serviceAccount:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a service account that has been recently deleted. For example, `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`. If the service account is undeleted, this value reverts to `serviceAccount:{emailid}` and the undeleted service account retains the role in the binding. * `deleted:group:{emailid}?uid={uniqueid}`: An email address (plus unique identifier) representing a Google group that has been recently deleted. For example, `admins@example.com?uid=123456789012345678901`. If the group is recovered, this value reverts to `group:{emailid}` and the recovered group retains the role in the binding. * `domain:{domain}`: The G Suite domain (primary) that represents all the users of that domain. For example, `google.com` or `example.com`. ",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "role": {
+                    "description": "Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ChangeReport": {
+            "description": "Change report associated with a particular service configuration. It contains a list of ConfigChanges based on the comparison between two service configurations.",
+            "id": "ChangeReport",
+            "properties": {
+                "configChanges": {
+                    "description": "List of changes between two service configurations. The changes will be alphabetically sorted based on the identifier of each change. A ConfigChange identifier is a dot separated path to the configuration. Example: visibility.rules[selector='LibraryService.CreateBook'].restriction",
+                    "items": {
+                        "$ref": "ConfigChange"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ConfigChange": {
+            "description": "Output generated from semantically comparing two versions of a service configuration. Includes detailed information about a field that have changed with applicable advice about potential consequences for the change, such as backwards-incompatibility.",
+            "id": "ConfigChange",
+            "properties": {
+                "advices": {
+                    "description": "Collection of advice provided for this change, useful for determining the possible impact of this change.",
+                    "items": {
+                        "$ref": "Advice"
+                    },
+                    "type": "array"
+                },
+                "changeType": {
+                    "description": "The type for this change, either ADDED, REMOVED, or MODIFIED.",
+                    "enum": [
+                        "CHANGE_TYPE_UNSPECIFIED",
+                        "ADDED",
+                        "REMOVED",
+                        "MODIFIED"
+                    ],
+                    "enumDescriptions": [
+                        "No value was provided.",
+                        "The changed object exists in the 'new' service configuration, but not in the 'old' service configuration.",
+                        "The changed object exists in the 'old' service configuration, but not in the 'new' service configuration.",
+                        "The changed object exists in both service configurations, but its value is different."
+                    ],
+                    "type": "string"
+                },
+                "element": {
+                    "description": "Object hierarchy path to the change, with levels separated by a '.' character. For repeated fields, an applicable unique identifier field is used for the index (usually selector, name, or id). For maps, the term 'key' is used. If the field has no unique identifier, the numeric index is used. Examples: - visibility.rules[selector==\"google.LibraryService.ListBooks\"].restriction - quota.metric_rules[selector==\"google\"].metric_costs[key==\"reads\"].value - logging.producer_destinations[0]",
+                    "type": "string"
+                },
+                "newValue": {
+                    "description": "Value of the changed object in the new Service configuration, in JSON format. This field will not be populated if ChangeType == REMOVED.",
+                    "type": "string"
+                },
+                "oldValue": {
+                    "description": "Value of the changed object in the old Service configuration, in JSON format. This field will not be populated if ChangeType == ADDED.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ConfigFile": {
+            "description": "Generic specification of a source configuration file",
+            "id": "ConfigFile",
+            "properties": {
+                "fileContents": {
+                    "description": "The bytes that constitute the file.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "filePath": {
+                    "description": "The file name of the configuration file (full or relative path).",
+                    "type": "string"
+                },
+                "fileType": {
+                    "description": "The type of configuration file this represents.",
+                    "enum": [
+                        "FILE_TYPE_UNSPECIFIED",
+                        "SERVICE_CONFIG_YAML",
+                        "OPEN_API_JSON",
+                        "OPEN_API_YAML",
+                        "FILE_DESCRIPTOR_SET_PROTO",
+                        "PROTO_FILE"
+                    ],
+                    "enumDescriptions": [
+                        "Unknown file type.",
+                        "YAML-specification of service.",
+                        "OpenAPI specification, serialized in JSON.",
+                        "OpenAPI specification, serialized in YAML.",
+                        "FileDescriptorSet, generated by protoc. To generate, use protoc with imports and source info included. For an example test.proto file, the following command would put the value in a new file named out.pb. $protoc --include_imports --include_source_info test.proto -o out.pb",
+                        "Uncompiled Proto file. Used for storage and display purposes only, currently server-side compilation is not supported. Should match the inputs to 'protoc' command used to generated FILE_DESCRIPTOR_SET_PROTO. A file of this type can only be included if at least one file of type FILE_DESCRIPTOR_SET_PROTO is included."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ConfigRef": {
+            "description": "Represents a service configuration with its name and id.",
+            "id": "ConfigRef",
+            "properties": {
+                "name": {
+                    "description": "Resource name of a service config. It must have the following format: \"services/{service name}/configs/{config id}\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ConfigSource": {
+            "description": "Represents a source file which is used to generate the service configuration defined by `google.api.Service`.",
+            "id": "ConfigSource",
+            "properties": {
+                "files": {
+                    "description": "Set of source configuration files that are used to generate a service configuration (`google.api.Service`).",
+                    "items": {
+                        "$ref": "ConfigFile"
+                    },
+                    "type": "array"
+                },
+                "id": {
+                    "description": "A unique ID for a specific instance of this message, typically assigned by the client for tracking purpose. If empty, the server may choose to generate one instead.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Context": {
+            "description": "`Context` defines which contexts an API requests. Example: context: rules: - selector: \"*\" requested: - google.rpc.context.ProjectContext - google.rpc.context.OriginContext The above specifies that all methods in the API request `google.rpc.context.ProjectContext` and `google.rpc.context.OriginContext`. Available context types are defined in package `google.rpc.context`. This also provides mechanism to allowlist any protobuf message extension that can be sent in grpc metadata using \u201cx-goog-ext--bin\u201d and \u201cx-goog-ext--jspb\u201d format. For example, list any service specific protobuf types that can appear in grpc metadata as follows in your yaml file: Example: context: rules: - selector: \"google.example.library.v1.LibraryService.CreateBook\" allowed_request_extensions: - google.foo.v1.NewExtension allowed_response_extensions: - google.foo.v1.NewExtension You can also specify extension ID instead of fully qualified extension name here.",
+            "id": "Context",
+            "properties": {
+                "rules": {
+                    "description": "A list of RPC context rules that apply to individual API methods. **NOTE:** All service configuration rules follow \"last one wins\" order.",
+                    "items": {
+                        "$ref": "ContextRule"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ContextRule": {
+            "description": "A context rule provides information about the context for an individual API element.",
+            "id": "ContextRule",
+            "properties": {
+                "allowedRequestExtensions": {
+                    "description": "A list of full type names or extension IDs of extensions allowed in grpc side channel from client to backend.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "allowedResponseExtensions": {
+                    "description": "A list of full type names or extension IDs of extensions allowed in grpc side channel from backend to client.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "provided": {
+                    "description": "A list of full type names of provided contexts.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "requested": {
+                    "description": "A list of full type names of requested contexts.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "selector": {
+                    "description": "Selects the methods to which this rule applies. Refer to selector for syntax details.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Control": {
+            "description": "Selects and configures the service controller used by the service. The service controller handles features like abuse, quota, billing, logging, monitoring, etc.",
+            "id": "Control",
+            "properties": {
+                "environment": {
+                    "description": "The service control environment to use. If empty, no control plane feature (like quota and billing) will be enabled.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CustomError": {
+            "description": "Customize service error responses. For example, list any service specific protobuf types that can appear in error detail lists of error responses. Example: custom_error: types: - google.foo.v1.CustomError - google.foo.v1.AnotherError",
+            "id": "CustomError",
+            "properties": {
+                "rules": {
+                    "description": "The list of custom error rules that apply to individual API messages. **NOTE:** All service configuration rules follow \"last one wins\" order.",
+                    "items": {
+                        "$ref": "CustomErrorRule"
+                    },
+                    "type": "array"
+                },
+                "types": {
+                    "description": "The list of custom error detail types, e.g. 'google.foo.v1.CustomError'.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "CustomErrorRule": {
+            "description": "A custom error rule.",
+            "id": "CustomErrorRule",
+            "properties": {
+                "isErrorType": {
+                    "description": "Mark this message as possible payload in error response. Otherwise, objects of this type will be filtered when they appear in error payload.",
+                    "type": "boolean"
+                },
+                "selector": {
+                    "description": "Selects messages to which this rule applies. Refer to selector for syntax details.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CustomHttpPattern": {
+            "description": "A custom pattern is used for defining custom HTTP verb.",
+            "id": "CustomHttpPattern",
+            "properties": {
+                "kind": {
+                    "description": "The name of this custom HTTP verb.",
+                    "type": "string"
+                },
+                "path": {
+                    "description": "The path matched by this custom verb.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DeleteServiceStrategy": {
+            "description": "Strategy used to delete a service. This strategy is a placeholder only used by the system generated rollout to delete a service.",
+            "id": "DeleteServiceStrategy",
+            "properties": {},
+            "type": "object"
+        },
+        "Diagnostic": {
+            "description": "Represents a diagnostic message (error or warning)",
+            "id": "Diagnostic",
+            "properties": {
+                "kind": {
+                    "description": "The kind of diagnostic information provided.",
+                    "enum": [
+                        "WARNING",
+                        "ERROR"
+                    ],
+                    "enumDescriptions": [
+                        "Warnings and errors",
+                        "Only errors"
+                    ],
+                    "type": "string"
+                },
+                "location": {
+                    "description": "File name and line number of the error or warning.",
+                    "type": "string"
+                },
+                "message": {
+                    "description": "Message describing the error or warning.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DisableServiceResponse": {
+            "description": "Operation payload for DisableService method.",
+            "id": "DisableServiceResponse",
+            "properties": {},
+            "type": "object"
+        },
+        "Documentation": {
+            "description": "`Documentation` provides the information for describing a service. Example: documentation: summary: > The Google Calendar API gives access to most calendar features. pages: - name: Overview content: (== include google/foo/overview.md ==) - name: Tutorial content: (== include google/foo/tutorial.md ==) subpages; - name: Java content: (== include google/foo/tutorial_java.md ==) rules: - selector: google.calendar.Calendar.Get description: > ... - selector: google.calendar.Calendar.Put description: > ... Documentation is provided in markdown syntax. In addition to standard markdown features, definition lists, tables and fenced code blocks are supported. Section headers can be provided and are interpreted relative to the section nesting of the context where a documentation fragment is embedded. Documentation from the IDL is merged with documentation defined via the config at normalization time, where documentation provided by config rules overrides IDL provided. A number of constructs specific to the API platform are supported in documentation text. In order to reference a proto element, the following notation can be used: [fully.qualified.proto.name][] To override the display text used for the link, this can be used: [display text][fully.qualified.proto.name] Text can be excluded from doc using the following notation: (-- internal comment --) A few directives are available in documentation. Note that directives must appear on a single line to be properly identified. The `include` directive includes a markdown file from an external source: (== include path/to/file ==) The `resource_for` directive marks a message to be the resource of a collection in REST view. If it is not specified, tools attempt to infer the resource from the operations in a collection: (== resource_for v1.shelves.books ==) The directive `suppress_warning` does not directly affect documentation and is documented together with service config validation.",
+            "id": "Documentation",
+            "properties": {
+                "documentationRootUrl": {
+                    "description": "The URL to the root of documentation.",
+                    "type": "string"
+                },
+                "overview": {
+                    "description": "Declares a single overview page. For example: documentation: summary: ... overview: (== include overview.md ==) This is a shortcut for the following declaration (using pages style): documentation: summary: ... pages: - name: Overview content: (== include overview.md ==) Note: you cannot specify both `overview` field and `pages` field.",
+                    "type": "string"
+                },
+                "pages": {
+                    "description": "The top level pages for the documentation set.",
+                    "items": {
+                        "$ref": "Page"
+                    },
+                    "type": "array"
+                },
+                "rules": {
+                    "description": "A list of documentation rules that apply to individual API elements. **NOTE:** All service configuration rules follow \"last one wins\" order.",
+                    "items": {
+                        "$ref": "DocumentationRule"
+                    },
+                    "type": "array"
+                },
+                "serviceRootUrl": {
+                    "description": "Specifies the service root url if the default one (the service name from the yaml file) is not suitable. This can be seen in any fully specified service urls as well as sections that show a base that other urls are relative to.",
+                    "type": "string"
+                },
+                "summary": {
+                    "description": "A short summary of what the service does. Can only be provided by plain text.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DocumentationRule": {
+            "description": "A documentation rule provides information about individual API elements.",
+            "id": "DocumentationRule",
+            "properties": {
+                "deprecationDescription": {
+                    "description": "Deprecation description of the selected element(s). It can be provided if an element is marked as `deprecated`.",
+                    "type": "string"
+                },
+                "description": {
+                    "description": "Description of the selected API(s).",
+                    "type": "string"
+                },
+                "selector": {
+                    "description": "The selector is a comma-separated list of patterns. Each pattern is a qualified name of the element which may end in \"*\", indicating a wildcard. Wildcards are only allowed at the end and for a whole component of the qualified name, i.e. \"foo.*\" is ok, but not \"foo.b*\" or \"foo.*.bar\". A wildcard will match one or more components. To specify a default for all applicable elements, the whole pattern \"*\" is used.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "EnableServiceRequest": {
+            "description": "Request message for EnableService method.",
+            "id": "EnableServiceRequest",
+            "properties": {
+                "consumerId": {
+                    "description": "Required. The identity of consumer resource which service enablement will be applied to. The Google Service Management implementation accepts the following forms: - \"project:\" Note: this is made compatible with google.api.servicecontrol.v1.Operation.consumer_id.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "EnableServiceResponse": {
+            "description": "Operation payload for EnableService method.",
+            "id": "EnableServiceResponse",
+            "properties": {},
+            "type": "object"
+        },
+        "Endpoint": {
+            "description": "`Endpoint` describes a network endpoint of a service that serves a set of APIs. It is commonly known as a service endpoint. A service may expose any number of service endpoints, and all service endpoints share the same service definition, such as quota limits and monitoring metrics. Example service configuration: name: library-example.googleapis.com endpoints: # Below entry makes 'google.example.library.v1.Library' # API be served from endpoint address library-example.googleapis.com. # It also allows HTTP OPTIONS calls to be passed to the backend, for # it to decide whether the subsequent cross-origin request is # allowed to proceed. - name: library-example.googleapis.com allow_cors: true",
+            "id": "Endpoint",
+            "properties": {
+                "aliases": {
+                    "description": "DEPRECATED: This field is no longer supported. Instead of using aliases, please specify multiple google.api.Endpoint for each of the intended aliases. Additional names that this endpoint will be hosted on.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "allowCors": {
+                    "description": "Allowing [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka cross-domain traffic, would allow the backends served from this endpoint to receive and respond to HTTP OPTIONS requests. The response will be used by the browser to determine whether the subsequent cross-origin request is allowed to proceed.",
+                    "type": "boolean"
+                },
+                "name": {
+                    "description": "The canonical name of this endpoint.",
+                    "type": "string"
+                },
+                "target": {
+                    "description": "The specification of an Internet routable address of API frontend that will handle requests to this [API Endpoint](https://cloud.google.com/apis/design/glossary). It should be either a valid IPv4 address or a fully-qualified domain name. For example, \"8.8.8.8\" or \"myservice.appspot.com\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Enum": {
+            "description": "Enum type definition.",
+            "id": "Enum",
+            "properties": {
+                "enumvalue": {
+                    "description": "Enum value definitions.",
+                    "items": {
+                        "$ref": "EnumValue"
+                    },
+                    "type": "array"
+                },
+                "name": {
+                    "description": "Enum type name.",
+                    "type": "string"
+                },
+                "options": {
+                    "description": "Protocol buffer options.",
+                    "items": {
+                        "$ref": "Option"
+                    },
+                    "type": "array"
+                },
+                "sourceContext": {
+                    "$ref": "SourceContext",
+                    "description": "The source context."
+                },
+                "syntax": {
+                    "description": "The source syntax.",
+                    "enum": [
+                        "SYNTAX_PROTO2",
+                        "SYNTAX_PROTO3"
+                    ],
+                    "enumDescriptions": [
+                        "Syntax `proto2`.",
+                        "Syntax `proto3`."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "EnumValue": {
+            "description": "Enum value definition.",
+            "id": "EnumValue",
+            "properties": {
+                "name": {
+                    "description": "Enum value name.",
+                    "type": "string"
+                },
+                "number": {
+                    "description": "Enum value number.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "options": {
+                    "description": "Protocol buffer options.",
+                    "items": {
+                        "$ref": "Option"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Expr": {
+            "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and functions that may be referenced within an expression are determined by the service that evaluates it. See the service documentation for additional information.",
+            "id": "Expr",
+            "properties": {
+                "description": {
+                    "description": "Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.",
+                    "type": "string"
+                },
+                "expression": {
+                    "description": "Textual representation of an expression in Common Expression Language syntax.",
+                    "type": "string"
+                },
+                "location": {
+                    "description": "Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Field": {
+            "description": "A single field of a message type.",
+            "id": "Field",
+            "properties": {
+                "cardinality": {
+                    "description": "The field cardinality.",
+                    "enum": [
+                        "CARDINALITY_UNKNOWN",
+                        "CARDINALITY_OPTIONAL",
+                        "CARDINALITY_REQUIRED",
+                        "CARDINALITY_REPEATED"
+                    ],
+                    "enumDescriptions": [
+                        "For fields with unknown cardinality.",
+                        "For optional fields.",
+                        "For required fields. Proto2 syntax only.",
+                        "For repeated fields."
+                    ],
+                    "type": "string"
+                },
+                "defaultValue": {
+                    "description": "The string value of the default value of this field. Proto2 syntax only.",
+                    "type": "string"
+                },
+                "jsonName": {
+                    "description": "The field JSON name.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "The field type.",
+                    "enum": [
+                        "TYPE_UNKNOWN",
+                        "TYPE_DOUBLE",
+                        "TYPE_FLOAT",
+                        "TYPE_INT64",
+                        "TYPE_UINT64",
+                        "TYPE_INT32",
+                        "TYPE_FIXED64",
+                        "TYPE_FIXED32",
+                        "TYPE_BOOL",
+                        "TYPE_STRING",
+                        "TYPE_GROUP",
+                        "TYPE_MESSAGE",
+                        "TYPE_BYTES",
+                        "TYPE_UINT32",
+                        "TYPE_ENUM",
+                        "TYPE_SFIXED32",
+                        "TYPE_SFIXED64",
+                        "TYPE_SINT32",
+                        "TYPE_SINT64"
+                    ],
+                    "enumDescriptions": [
+                        "Field type unknown.",
+                        "Field type double.",
+                        "Field type float.",
+                        "Field type int64.",
+                        "Field type uint64.",
+                        "Field type int32.",
+                        "Field type fixed64.",
+                        "Field type fixed32.",
+                        "Field type bool.",
+                        "Field type string.",
+                        "Field type group. Proto2 syntax only, and deprecated.",
+                        "Field type message.",
+                        "Field type bytes.",
+                        "Field type uint32.",
+                        "Field type enum.",
+                        "Field type sfixed32.",
+                        "Field type sfixed64.",
+                        "Field type sint32.",
+                        "Field type sint64."
+                    ],
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The field name.",
+                    "type": "string"
+                },
+                "number": {
+                    "description": "The field number.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "oneofIndex": {
+                    "description": "The index of the field type in `Type.oneofs`, for message or enumeration types. The first type has index 1; zero means the type is not in the list.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "options": {
+                    "description": "The protocol buffer options.",
+                    "items": {
+                        "$ref": "Option"
+                    },
+                    "type": "array"
+                },
+                "packed": {
+                    "description": "Whether to use alternative packed wire representation.",
+                    "type": "boolean"
+                },
+                "typeUrl": {
+                    "description": "The field type URL, without the scheme, for message or enumeration types. Example: `\"type.googleapis.com/google.protobuf.Timestamp\"`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "FlowErrorDetails": {
+            "description": "Encapsulation of flow-specific error details for debugging. Used as a details field on an error Status, not intended for external use.",
+            "id": "FlowErrorDetails",
+            "properties": {
+                "exceptionType": {
+                    "description": "The type of exception (as a class name).",
+                    "type": "string"
+                },
+                "flowStepId": {
+                    "description": "The step that failed.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GenerateConfigReportRequest": {
+            "description": "Request message for GenerateConfigReport method.",
+            "id": "GenerateConfigReportRequest",
+            "properties": {
+                "newConfig": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Required. Service configuration for which we want to generate the report. For this version of API, the supported types are google.api.servicemanagement.v1.ConfigRef, google.api.servicemanagement.v1.ConfigSource, and google.api.Service",
+                    "type": "object"
+                },
+                "oldConfig": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Optional. Service configuration against which the comparison will be done. For this version of API, the supported types are google.api.servicemanagement.v1.ConfigRef, google.api.servicemanagement.v1.ConfigSource, and google.api.Service",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "GenerateConfigReportResponse": {
+            "description": "Response message for GenerateConfigReport method.",
+            "id": "GenerateConfigReportResponse",
+            "properties": {
+                "changeReports": {
+                    "description": "list of ChangeReport, each corresponding to comparison between two service configurations.",
+                    "items": {
+                        "$ref": "ChangeReport"
+                    },
+                    "type": "array"
+                },
+                "diagnostics": {
+                    "description": "Errors / Linter warnings associated with the service definition this report belongs to.",
+                    "items": {
+                        "$ref": "Diagnostic"
+                    },
+                    "type": "array"
+                },
+                "id": {
+                    "description": "ID of the service configuration this report belongs to.",
+                    "type": "string"
+                },
+                "serviceName": {
+                    "description": "Name of the service this report belongs to.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GetIamPolicyRequest": {
+            "description": "Request message for `GetIamPolicy` method.",
+            "id": "GetIamPolicyRequest",
+            "properties": {
+                "options": {
+                    "$ref": "GetPolicyOptions",
+                    "description": "OPTIONAL: A `GetPolicyOptions` object for specifying options to `GetIamPolicy`."
+                }
+            },
+            "type": "object"
+        },
+        "GetPolicyOptions": {
+            "description": "Encapsulates settings provided to GetIamPolicy.",
+            "id": "GetPolicyOptions",
+            "properties": {
+                "requestedPolicyVersion": {
+                    "description": "Optional. The policy format version to be returned. Valid values are 0, 1, and 3. Requests specifying an invalid value will be rejected. Requests for policies with any conditional bindings must specify version 3. Policies without any conditional bindings may specify any valid value or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "Http": {
+            "description": "Defines the HTTP configuration for an API service. It contains a list of HttpRule, each specifying the mapping of an RPC method to one or more HTTP REST API methods.",
+            "id": "Http",
+            "properties": {
+                "fullyDecodeReservedExpansion": {
+                    "description": "When set to true, URL path parameters will be fully URI-decoded except in cases of single segment matches in reserved expansion, where \"%2F\" will be left encoded. The default behavior is to not decode RFC 6570 reserved characters in multi segment matches.",
+                    "type": "boolean"
+                },
+                "rules": {
+                    "description": "A list of HTTP configuration rules that apply to individual API methods. **NOTE:** All service configuration rules follow \"last one wins\" order.",
+                    "items": {
+                        "$ref": "HttpRule"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "HttpRule": {
+            "description": "# gRPC Transcoding gRPC Transcoding is a feature for mapping between a gRPC method and one or more HTTP REST endpoints. It allows developers to build a single API service that supports both gRPC APIs and REST APIs. Many systems, including [Google APIs](https://github.com/googleapis/googleapis), [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC Gateway](https://github.com/grpc-ecosystem/grpc-gateway), and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature and use it for large scale production services. `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies how different portions of the gRPC request message are mapped to the URL path, URL query parameters, and HTTP request body. It also controls how the gRPC response message is mapped to the HTTP response body. `HttpRule` is typically specified as an `google.api.http` annotation on the gRPC method. Each mapping specifies a URL path template and an HTTP method. The path template may refer to one or more fields in the gRPC request message, as long as each field is a non-repeated field with a primitive (non-message) type. The path template controls how fields of the request message are mapped to the URL path. Example: service Messaging { rpc GetMessage(GetMessageRequest) returns (Message) { option (google.api.http) = { get: \"/v1/{name=messages/*}\" }; } } message GetMessageRequest { string name = 1; // Mapped to URL path. } message Message { string text = 1; // The resource content. } This enables an HTTP REST to gRPC mapping as below: HTTP | gRPC -----|----- `GET /v1/messages/123456` | `GetMessage(name: \"messages/123456\")` Any fields in the request message which are not bound by the path template automatically become HTTP query parameters if there is no HTTP request body. For example: service Messaging { rpc GetMessage(GetMessageRequest) returns (Message) { option (google.api.http) = { get:\"/v1/messages/{message_id}\" }; } } message GetMessageRequest { message SubMessage { string subfield = 1; } string message_id = 1; // Mapped to URL path. int64 revision = 2; // Mapped to URL query parameter `revision`. SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`. } This enables a HTTP JSON to RPC mapping as below: HTTP | gRPC -----|----- `GET /v1/messages/123456?revision=2&sub.subfield=foo` | `GetMessage(message_id: \"123456\" revision: 2 sub: SubMessage(subfield: \"foo\"))` Note that fields which are mapped to URL query parameters must have a primitive type or a repeated primitive type or a non-repeated message type. In the case of a repeated type, the parameter can be repeated in the URL as `...?param=A&param=B`. In the case of a message type, each field of the message is mapped to a separate parameter, such as `...?foo.a=A&foo.b=B&foo.c=C`. For HTTP methods that allow a request body, the `body` field specifies the mapping. Consider a REST update method on the message resource collection: service Messaging { rpc UpdateMessage(UpdateMessageRequest) returns (Message) { option (google.api.http) = { patch: \"/v1/messages/{message_id}\" body: \"message\" }; } } message UpdateMessageRequest { string message_id = 1; // mapped to the URL Message message = 2; // mapped to the body } The following HTTP JSON to RPC mapping is enabled, where the representation of the JSON in the request body is determined by protos JSON encoding: HTTP | gRPC -----|----- `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id: \"123456\" message { text: \"Hi!\" })` The special name `*` can be used in the body mapping to define that every field not bound by the path template should be mapped to the request body. This enables the following alternative definition of the update method: service Messaging { rpc UpdateMessage(Message) returns (Message) { option (google.api.http) = { patch: \"/v1/messages/{message_id}\" body: \"*\" }; } } message Message { string message_id = 1; string text = 2; } The following HTTP JSON to RPC mapping is enabled: HTTP | gRPC -----|----- `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id: \"123456\" text: \"Hi!\")` Note that when using `*` in the body mapping, it is not possible to have HTTP parameters, as all fields not bound by the path end in the body. This makes this option more rarely used in practice when defining REST APIs. The common usage of `*` is in custom methods which don't use the URL at all for transferring data. It is possible to define multiple HTTP methods for one RPC by using the `additional_bindings` option. Example: service Messaging { rpc GetMessage(GetMessageRequest) returns (Message) { option (google.api.http) = { get: \"/v1/messages/{message_id}\" additional_bindings { get: \"/v1/users/{user_id}/messages/{message_id}\" } }; } } message GetMessageRequest { string message_id = 1; string user_id = 2; } This enables the following two alternative HTTP JSON to RPC mappings: HTTP | gRPC -----|----- `GET /v1/messages/123456` | `GetMessage(message_id: \"123456\")` `GET /v1/users/me/messages/123456` | `GetMessage(user_id: \"me\" message_id: \"123456\")` ## Rules for HTTP mapping 1. Leaf request fields (recursive expansion nested messages in the request message) are classified into three categories: - Fields referred by the path template. They are passed via the URL path. - Fields referred by the HttpRule.body. They are passed via the HTTP request body. - All other fields are passed via the URL query parameters, and the parameter name is the field path in the request message. A repeated field can be represented as multiple query parameters under the same name. 2. If HttpRule.body is \"*\", there is no URL query parameter, all fields are passed via URL path and HTTP request body. 3. If HttpRule.body is omitted, there is no HTTP request body, all fields are passed via URL path and URL query parameters. ### Path template syntax Template = \"/\" Segments [ Verb ] ; Segments = Segment { \"/\" Segment } ; Segment = \"*\" | \"**\" | LITERAL | Variable ; Variable = \"{\" FieldPath [ \"=\" Segments ] \"}\" ; FieldPath = IDENT { \".\" IDENT } ; Verb = \":\" LITERAL ; The syntax `*` matches a single URL path segment. The syntax `**` matches zero or more URL path segments, which must be the last part of the URL path except the `Verb`. The syntax `Variable` matches part of the URL path as specified by its template. A variable template must not contain other variables. If a variable matches a single path segment, its template may be omitted, e.g. `{var}` is equivalent to `{var=*}`. The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL` contains any reserved character, such characters should be percent-encoded before the matching. If a variable contains exactly one path segment, such as `\"{var}\"` or `\"{var=*}\"`, when such a variable is expanded into a URL path on the client side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The server side does the reverse decoding. Such variables show up in the [Discovery Document](https://developers.google.com/discovery/v1/reference/apis) as `{var}`. If a variable contains multiple path segments, such as `\"{var=foo/*}\"` or `\"{var=**}\"`, when such a variable is expanded into a URL path on the client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. The server side does the reverse decoding, except \"%2F\" and \"%2f\" are left unchanged. Such variables show up in the [Discovery Document](https://developers.google.com/discovery/v1/reference/apis) as `{+var}`. ## Using gRPC API Service Configuration gRPC API Service Configuration (service config) is a configuration language for configuring a gRPC service to become a user-facing product. The service config is simply the YAML representation of the `google.api.Service` proto message. As an alternative to annotating your proto file, you can configure gRPC transcoding in your service config YAML files. You do this by specifying a `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same effect as the proto annotation. This can be particularly useful if you have a proto that is reused in multiple services. Note that any transcoding specified in the service config will override any matching transcoding configuration in the proto. Example: http: rules: # Selects a gRPC method and applies HttpRule to it. - selector: example.v1.Messaging.GetMessage get: /v1/messages/{message_id}/{sub.subfield} ## Special notes When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the proto to JSON conversion must follow the [proto3 specification](https://developers.google.com/protocol-buffers/docs/proto3#json). While the single segment variable follows the semantics of [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String Expansion, the multi segment variable **does not** follow RFC 6570 Section 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion does not expand special characters like `?` and `#`, which would lead to invalid URLs. As the result, gRPC Transcoding uses a custom encoding for multi segment variables. The path variables **must not** refer to any repeated or mapped field, because client libraries are not capable of handling such variable expansion. The path variables **must not** capture the leading \"/\" character. The reason is that the most common use case \"{var}\" does not capture the leading \"/\" character. For consistency, all path variables must share the same behavior. Repeated message fields must not be mapped to URL query parameters, because no client library can support such complicated mapping. If an API needs to use a JSON array for request or response body, it can map the request or response body to a repeated field. However, some gRPC Transcoding implementations may not support this feature.",
+            "id": "HttpRule",
+            "properties": {
+                "additionalBindings": {
+                    "description": "Additional HTTP bindings for the selector. Nested bindings must not contain an `additional_bindings` field themselves (that is, the nesting may only be one level deep).",
+                    "items": {
+                        "$ref": "HttpRule"
+                    },
+                    "type": "array"
+                },
+                "body": {
+                    "description": "The name of the request field whose value is mapped to the HTTP request body, or `*` for mapping all request fields not captured by the path pattern to the HTTP body, or omitted for not having any HTTP request body. NOTE: the referred field must be present at the top-level of the request message type.",
+                    "type": "string"
+                },
+                "custom": {
+                    "$ref": "CustomHttpPattern",
+                    "description": "The custom pattern is used for specifying an HTTP method that is not included in the `pattern` field, such as HEAD, or \"*\" to leave the HTTP method unspecified for this rule. The wild-card rule is useful for services that provide content to Web (HTML) clients."
+                },
+                "delete": {
+                    "description": "Maps to HTTP DELETE. Used for deleting a resource.",
+                    "type": "string"
+                },
+                "get": {
+                    "description": "Maps to HTTP GET. Used for listing and getting information about resources.",
+                    "type": "string"
+                },
+                "patch": {
+                    "description": "Maps to HTTP PATCH. Used for updating a resource.",
+                    "type": "string"
+                },
+                "post": {
+                    "description": "Maps to HTTP POST. Used for creating a resource or performing an action.",
+                    "type": "string"
+                },
+                "put": {
+                    "description": "Maps to HTTP PUT. Used for replacing a resource.",
+                    "type": "string"
+                },
+                "responseBody": {
+                    "description": "Optional. The name of the response field whose value is mapped to the HTTP response body. When omitted, the entire response message will be used as the HTTP response body. NOTE: The referred field must be present at the top-level of the response message type.",
+                    "type": "string"
+                },
+                "selector": {
+                    "description": "Selects a method to which this rule applies. Refer to selector for syntax details.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "JwtLocation": {
+            "description": "Specifies a location to extract JWT from an API request.",
+            "id": "JwtLocation",
+            "properties": {
+                "header": {
+                    "description": "Specifies HTTP header name to extract JWT token.",
+                    "type": "string"
+                },
+                "query": {
+                    "description": "Specifies URL query parameter name to extract JWT token.",
+                    "type": "string"
+                },
+                "valuePrefix": {
+                    "description": "The value prefix. The value format is \"value_prefix{token}\" Only applies to \"in\" header type. Must be empty for \"in\" query type. If not empty, the header value has to match (case sensitive) this prefix. If not matched, JWT will not be extracted. If matched, JWT will be extracted after the prefix is removed. For example, for \"Authorization: Bearer {JWT}\", value_prefix=\"Bearer \" with a space at the end.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LabelDescriptor": {
+            "description": "A description of a label.",
+            "id": "LabelDescriptor",
+            "properties": {
+                "description": {
+                    "description": "A human-readable description for the label.",
+                    "type": "string"
+                },
+                "key": {
+                    "description": "The label key.",
+                    "type": "string"
+                },
+                "valueType": {
+                    "description": "The type of data that can be assigned to the label.",
+                    "enum": [
+                        "STRING",
+                        "BOOL",
+                        "INT64"
+                    ],
+                    "enumDescriptions": [
+                        "A variable-length string. This is the default.",
+                        "Boolean; true or false.",
+                        "A 64-bit signed integer."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListOperationsResponse": {
+            "description": "The response message for Operations.ListOperations.",
+            "id": "ListOperationsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                },
+                "operations": {
+                    "description": "A list of operations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Operation"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListServiceConfigsResponse": {
+            "description": "Response message for ListServiceConfigs method.",
+            "id": "ListServiceConfigsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The token of the next page of results.",
+                    "type": "string"
+                },
+                "serviceConfigs": {
+                    "description": "The list of service configuration resources.",
+                    "items": {
+                        "$ref": "Service"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListServiceRolloutsResponse": {
+            "description": "Response message for ListServiceRollouts method.",
+            "id": "ListServiceRolloutsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The token of the next page of results.",
+                    "type": "string"
+                },
+                "rollouts": {
+                    "description": "The list of rollout resources.",
+                    "items": {
+                        "$ref": "Rollout"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListServicesResponse": {
+            "description": "Response message for `ListServices` method.",
+            "id": "ListServicesResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "Token that can be passed to `ListServices` to resume a paginated query.",
+                    "type": "string"
+                },
+                "services": {
+                    "description": "The returned services will only have the name field set.",
+                    "items": {
+                        "$ref": "ManagedService"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "LogDescriptor": {
+            "description": "A description of a log type. Example in YAML format: - name: library.googleapis.com/activity_history description: The history of borrowing and returning library items. display_name: Activity labels: - key: /customer_id description: Identifier of a library customer",
+            "id": "LogDescriptor",
+            "properties": {
+                "description": {
+                    "description": "A human-readable description of this log. This information appears in the documentation and can contain details.",
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "The human-readable name for this log. This information appears on the user interface and should be concise.",
+                    "type": "string"
+                },
+                "labels": {
+                    "description": "The set of labels that are available to describe a specific log entry. Runtime requests that contain labels not specified here are considered invalid.",
+                    "items": {
+                        "$ref": "LabelDescriptor"
+                    },
+                    "type": "array"
+                },
+                "name": {
+                    "description": "The name of the log. It must be less than 512 characters long and can include the following characters: upper- and lower-case alphanumeric characters [A-Za-z0-9], and punctuation characters including slash, underscore, hyphen, period [/_-.].",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Logging": {
+            "description": "Logging configuration of the service. The following example shows how to configure logs to be sent to the producer and consumer projects. In the example, the `activity_history` log is sent to both the producer and consumer projects, whereas the `purchase_history` log is only sent to the producer project. monitored_resources: - type: library.googleapis.com/branch labels: - key: /city description: The city where the library branch is located in. - key: /name description: The name of the branch. logs: - name: activity_history labels: - key: /customer_id - name: purchase_history logging: producer_destinations: - monitored_resource: library.googleapis.com/branch logs: - activity_history - purchase_history consumer_destinations: - monitored_resource: library.googleapis.com/branch logs: - activity_history",
+            "id": "Logging",
+            "properties": {
+                "consumerDestinations": {
+                    "description": "Logging configurations for sending logs to the consumer project. There can be multiple consumer destinations, each one must have a different monitored resource type. A log can be used in at most one consumer destination.",
+                    "items": {
+                        "$ref": "LoggingDestination"
+                    },
+                    "type": "array"
+                },
+                "producerDestinations": {
+                    "description": "Logging configurations for sending logs to the producer project. There can be multiple producer destinations, each one must have a different monitored resource type. A log can be used in at most one producer destination.",
+                    "items": {
+                        "$ref": "LoggingDestination"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "LoggingDestination": {
+            "description": "Configuration of a specific logging destination (the producer project or the consumer project).",
+            "id": "LoggingDestination",
+            "properties": {
+                "logs": {
+                    "description": "Names of the logs to be sent to this destination. Each name must be defined in the Service.logs section. If the log name is not a domain scoped name, it will be automatically prefixed with the service name followed by \"/\".",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "monitoredResource": {
+                    "description": "The monitored resource type. The type must be defined in the Service.monitored_resources section.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ManagedService": {
+            "description": "The full representation of a Service that is managed by Google Service Management.",
+            "id": "ManagedService",
+            "properties": {
+                "producerProjectId": {
+                    "description": "ID of the project that produces and owns this service.",
+                    "type": "string"
+                },
+                "serviceName": {
+                    "description": "The name of the service. See the [overview](/service-management/overview) for naming requirements.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Method": {
+            "description": "Method represents a method of an API interface.",
+            "id": "Method",
+            "properties": {
+                "name": {
+                    "description": "The simple name of this method.",
+                    "type": "string"
+                },
+                "options": {
+                    "description": "Any metadata attached to the method.",
+                    "items": {
+                        "$ref": "Option"
+                    },
+                    "type": "array"
+                },
+                "requestStreaming": {
+                    "description": "If true, the request is streamed.",
+                    "type": "boolean"
+                },
+                "requestTypeUrl": {
+                    "description": "A URL of the input message type.",
+                    "type": "string"
+                },
+                "responseStreaming": {
+                    "description": "If true, the response is streamed.",
+                    "type": "boolean"
+                },
+                "responseTypeUrl": {
+                    "description": "The URL of the output message type.",
+                    "type": "string"
+                },
+                "syntax": {
+                    "description": "The source syntax of this method.",
+                    "enum": [
+                        "SYNTAX_PROTO2",
+                        "SYNTAX_PROTO3"
+                    ],
+                    "enumDescriptions": [
+                        "Syntax `proto2`.",
+                        "Syntax `proto3`."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MetricDescriptor": {
+            "description": "Defines a metric type and its schema. Once a metric descriptor is created, deleting or altering it stops data collection and makes the metric type's existing data unusable. ",
+            "id": "MetricDescriptor",
+            "properties": {
+                "description": {
+                    "description": "A detailed description of the metric, which can be used in documentation.",
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "A concise name for the metric, which can be displayed in user interfaces. Use sentence case without an ending period, for example \"Request count\". This field is optional but it is recommended to be set for any metrics associated with user-visible concepts, such as Quota.",
+                    "type": "string"
+                },
+                "labels": {
+                    "description": "The set of labels that can be used to describe a specific instance of this metric type. For example, the `appengine.googleapis.com/http/server/response_latencies` metric type has a label for the HTTP response code, `response_code`, so you can look at latencies for successful responses or just for responses that failed.",
+                    "items": {
+                        "$ref": "LabelDescriptor"
+                    },
+                    "type": "array"
+                },
+                "launchStage": {
+                    "description": "Optional. The launch stage of the metric definition.",
+                    "enum": [
+                        "LAUNCH_STAGE_UNSPECIFIED",
+                        "UNIMPLEMENTED",
+                        "PRELAUNCH",
+                        "EARLY_ACCESS",
+                        "ALPHA",
+                        "BETA",
+                        "GA",
+                        "DEPRECATED"
+                    ],
+                    "enumDescriptions": [
+                        "Do not use this default value.",
+                        "The feature is not yet implemented. Users can not use it.",
+                        "Prelaunch features are hidden from users and are only visible internally.",
+                        "Early Access features are limited to a closed group of testers. To use these features, you must sign up in advance and sign a Trusted Tester agreement (which includes confidentiality provisions). These features may be unstable, changed in backward-incompatible ways, and are not guaranteed to be released.",
+                        "Alpha is a limited availability test for releases before they are cleared for widespread use. By Alpha, all significant design issues are resolved and we are in the process of verifying functionality. Alpha customers need to apply for access, agree to applicable terms, and have their projects allowlisted. Alpha releases don\u2019t have to be feature complete, no SLAs are provided, and there are no technical support obligations, but they will be far enough along that customers can actually use them in test environments or for limited-use tests -- just like they would in normal production cases.",
+                        "Beta is the point at which we are ready to open a release for any customer to use. There are no SLA or technical support obligations in a Beta release. Products will be complete from a feature perspective, but may have some open outstanding issues. Beta releases are suitable for limited production use cases.",
+                        "GA features are open to all developers and are considered stable and fully qualified for production use.",
+                        "Deprecated features are scheduled to be shut down and removed. For more information, see the \u201cDeprecation Policy\u201d section of our [Terms of Service](https://cloud.google.com/terms/) and the [Google Cloud Platform Subject to the Deprecation Policy](https://cloud.google.com/terms/deprecation) documentation."
+                    ],
+                    "type": "string"
+                },
+                "metadata": {
+                    "$ref": "MetricDescriptorMetadata",
+                    "description": "Optional. Metadata which can be used to guide usage of the metric."
+                },
+                "metricKind": {
+                    "description": "Whether the metric records instantaneous values, changes to a value, etc. Some combinations of `metric_kind` and `value_type` might not be supported.",
+                    "enum": [
+                        "METRIC_KIND_UNSPECIFIED",
+                        "GAUGE",
+                        "DELTA",
+                        "CUMULATIVE"
+                    ],
+                    "enumDescriptions": [
+                        "Do not use this default value.",
+                        "An instantaneous measurement of a value.",
+                        "The change in a value during a time interval.",
+                        "A value accumulated over a time interval. Cumulative measurements in a time series should have the same start time and increasing end times, until an event resets the cumulative value to zero and sets a new start time for the following points."
+                    ],
+                    "type": "string"
+                },
+                "monitoredResourceTypes": {
+                    "description": "Read-only. If present, then a time series, which is identified partially by a metric type and a MonitoredResourceDescriptor, that is associated with this metric type can only be associated with one of the monitored resource types listed here.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "name": {
+                    "description": "The resource name of the metric descriptor.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "The metric type, including its DNS name prefix. The type is not URL-encoded. All user-defined metric types have the DNS name `custom.googleapis.com` or `external.googleapis.com`. Metric types should use a natural hierarchical grouping. For example: \"custom.googleapis.com/invoice/paid/amount\" \"external.googleapis.com/prometheus/up\" \"appengine.googleapis.com/http/server/response_latencies\"",
+                    "type": "string"
+                },
+                "unit": {
+                    "description": "The units in which the metric value is reported. It is only applicable if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The `unit` defines the representation of the stored metric values. Different systems might scale the values to be more easily displayed (so a value of `0.02kBy` _might_ be displayed as `20By`, and a value of `3523kBy` _might_ be displayed as `3.5MBy`). However, if the `unit` is `kBy`, then the value of the metric is always in thousands of bytes, no matter how it might be displayed. If you want a custom metric to record the exact number of CPU-seconds used by a job, you can create an `INT64 CUMULATIVE` metric whose `unit` is `s{CPU}` (or equivalently `1s{CPU}` or just `s`). If the job uses 12,005 CPU-seconds, then the value is written as `12005`. Alternatively, if you want a custom metric to record data in a more granular way, you can create a `DOUBLE CUMULATIVE` metric whose `unit` is `ks{CPU}`, and then write the value `12.005` (which is `12005/1000`), or use `Kis{CPU}` and write `11.723` (which is `12005/1024`). The supported units are a subset of [The Unified Code for Units of Measure](https://unitsofmeasure.org/ucum.html) standard: **Basic units (UNIT)** * `bit` bit * `By` byte * `s` second * `min` minute * `h` hour * `d` day * `1` dimensionless **Prefixes (PREFIX)** * `k` kilo (10^3) * `M` mega (10^6) * `G` giga (10^9) * `T` tera (10^12) * `P` peta (10^15) * `E` exa (10^18) * `Z` zetta (10^21) * `Y` yotta (10^24) * `m` milli (10^-3) * `u` micro (10^-6) * `n` nano (10^-9) * `p` pico (10^-12) * `f` femto (10^-15) * `a` atto (10^-18) * `z` zepto (10^-21) * `y` yocto (10^-24) * `Ki` kibi (2^10) * `Mi` mebi (2^20) * `Gi` gibi (2^30) * `Ti` tebi (2^40) * `Pi` pebi (2^50) **Grammar** The grammar also includes these connectors: * `/` division or ratio (as an infix operator). For examples, `kBy/{email}` or `MiBy/10ms` (although you should almost never have `/s` in a metric `unit`; rates should always be computed at query time from the underlying cumulative or delta value). * `.` multiplication or composition (as an infix operator). For examples, `GBy.d` or `k{watt}.h`. The grammar for a unit is as follows: Expression = Component { \".\" Component } { \"/\" Component } ; Component = ( [ PREFIX ] UNIT | \"%\" ) [ Annotation ] | Annotation | \"1\" ; Annotation = \"{\" NAME \"}\" ; Notes: * `Annotation` is just a comment if it follows a `UNIT`. If the annotation is used alone, then the unit is equivalent to `1`. For examples, `{request}/s == 1/s`, `By{transmitted}/s == By/s`. * `NAME` is a sequence of non-blank printable ASCII characters not containing `{` or `}`. * `1` represents a unitary [dimensionless unit](https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in `1/s`. It is typically used when none of the basic units are appropriate. For example, \"new users per day\" can be represented as `1/d` or `{new-users}/d` (and a metric value `5` would mean \"5 new users). Alternatively, \"thousands of page views per day\" would be represented as `1000/d` or `k1/d` or `k{page_views}/d` (and a metric value of `5.3` would mean \"5300 page views per day\"). * `%` represents dimensionless value of 1/100, and annotates values giving a percentage (so the metric values are typically in the range of 0..100, and a metric value `3` means \"3 percent\"). * `10^2.%` indicates a metric contains a ratio, typically in the range 0..1, that will be multiplied by 100 and displayed as a percentage (so a metric value `0.03` means \"3 percent\").",
+                    "type": "string"
+                },
+                "valueType": {
+                    "description": "Whether the measurement is an integer, a floating-point number, etc. Some combinations of `metric_kind` and `value_type` might not be supported.",
+                    "enum": [
+                        "VALUE_TYPE_UNSPECIFIED",
+                        "BOOL",
+                        "INT64",
+                        "DOUBLE",
+                        "STRING",
+                        "DISTRIBUTION",
+                        "MONEY"
+                    ],
+                    "enumDescriptions": [
+                        "Do not use this default value.",
+                        "The value is a boolean. This value type can be used only if the metric kind is `GAUGE`.",
+                        "The value is a signed 64-bit integer.",
+                        "The value is a double precision floating point number.",
+                        "The value is a text string. This value type can be used only if the metric kind is `GAUGE`.",
+                        "The value is a `Distribution`.",
+                        "The value is money."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MetricDescriptorMetadata": {
+            "description": "Additional annotations that can be used to guide the usage of a metric.",
+            "id": "MetricDescriptorMetadata",
+            "properties": {
+                "ingestDelay": {
+                    "description": "The delay of data points caused by ingestion. Data points older than this age are guaranteed to be ingested and available to be read, excluding data loss due to errors.",
+                    "format": "google-duration",
+                    "type": "string"
+                },
+                "launchStage": {
+                    "description": "Deprecated. Must use the MetricDescriptor.launch_stage instead.",
+                    "enum": [
+                        "LAUNCH_STAGE_UNSPECIFIED",
+                        "UNIMPLEMENTED",
+                        "PRELAUNCH",
+                        "EARLY_ACCESS",
+                        "ALPHA",
+                        "BETA",
+                        "GA",
+                        "DEPRECATED"
+                    ],
+                    "enumDescriptions": [
+                        "Do not use this default value.",
+                        "The feature is not yet implemented. Users can not use it.",
+                        "Prelaunch features are hidden from users and are only visible internally.",
+                        "Early Access features are limited to a closed group of testers. To use these features, you must sign up in advance and sign a Trusted Tester agreement (which includes confidentiality provisions). These features may be unstable, changed in backward-incompatible ways, and are not guaranteed to be released.",
+                        "Alpha is a limited availability test for releases before they are cleared for widespread use. By Alpha, all significant design issues are resolved and we are in the process of verifying functionality. Alpha customers need to apply for access, agree to applicable terms, and have their projects allowlisted. Alpha releases don\u2019t have to be feature complete, no SLAs are provided, and there are no technical support obligations, but they will be far enough along that customers can actually use them in test environments or for limited-use tests -- just like they would in normal production cases.",
+                        "Beta is the point at which we are ready to open a release for any customer to use. There are no SLA or technical support obligations in a Beta release. Products will be complete from a feature perspective, but may have some open outstanding issues. Beta releases are suitable for limited production use cases.",
+                        "GA features are open to all developers and are considered stable and fully qualified for production use.",
+                        "Deprecated features are scheduled to be shut down and removed. For more information, see the \u201cDeprecation Policy\u201d section of our [Terms of Service](https://cloud.google.com/terms/) and the [Google Cloud Platform Subject to the Deprecation Policy](https://cloud.google.com/terms/deprecation) documentation."
+                    ],
+                    "type": "string"
+                },
+                "samplePeriod": {
+                    "description": "The sampling period of metric data points. For metrics which are written periodically, consecutive data points are stored at this time interval, excluding data loss due to errors. Metrics with a higher granularity have a smaller sampling period.",
+                    "format": "google-duration",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MetricRule": {
+            "description": "Bind API methods to metrics. Binding a method to a metric causes that metric's configured quota behaviors to apply to the method call.",
+            "id": "MetricRule",
+            "properties": {
+                "metricCosts": {
+                    "additionalProperties": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "description": "Metrics to update when the selected methods are called, and the associated cost applied to each metric. The key of the map is the metric name, and the values are the amount increased for the metric against which the quota limits are defined. The value must not be negative.",
+                    "type": "object"
+                },
+                "selector": {
+                    "description": "Selects the methods to which this rule applies. Refer to selector for syntax details.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Mixin": {
+            "description": "Declares an API Interface to be included in this interface. The including interface must redeclare all the methods from the included interface, but documentation and options are inherited as follows: - If after comment and whitespace stripping, the documentation string of the redeclared method is empty, it will be inherited from the original method. - Each annotation belonging to the service config (http, visibility) which is not set in the redeclared method will be inherited. - If an http annotation is inherited, the path pattern will be modified as follows. Any version prefix will be replaced by the version of the including interface plus the root path if specified. Example of a simple mixin: package google.acl.v1; service AccessControl { // Get the underlying ACL object. rpc GetAcl(GetAclRequest) returns (Acl) { option (google.api.http).get = \"/v1/{resource=**}:getAcl\"; } } package google.storage.v2; service Storage { // rpc GetAcl(GetAclRequest) returns (Acl); // Get a data record. rpc GetData(GetDataRequest) returns (Data) { option (google.api.http).get = \"/v2/{resource=**}\"; } } Example of a mixin configuration: apis: - name: google.storage.v2.Storage mixins: - name: google.acl.v1.AccessControl The mixin construct implies that all methods in `AccessControl` are also declared with same name and request/response types in `Storage`. A documentation generator or annotation processor will see the effective `Storage.GetAcl` method after inheriting documentation and annotations as follows: service Storage { // Get the underlying ACL object. rpc GetAcl(GetAclRequest) returns (Acl) { option (google.api.http).get = \"/v2/{resource=**}:getAcl\"; } ... } Note how the version in the path pattern changed from `v1` to `v2`. If the `root` field in the mixin is specified, it should be a relative path under which inherited HTTP paths are placed. Example: apis: - name: google.storage.v2.Storage mixins: - name: google.acl.v1.AccessControl root: acls This implies the following inherited HTTP annotation: service Storage { // Get the underlying ACL object. rpc GetAcl(GetAclRequest) returns (Acl) { option (google.api.http).get = \"/v2/acls/{resource=**}:getAcl\"; } ... }",
+            "id": "Mixin",
+            "properties": {
+                "name": {
+                    "description": "The fully qualified name of the interface which is included.",
+                    "type": "string"
+                },
+                "root": {
+                    "description": "If non-empty specifies a path under which inherited HTTP paths are rooted.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MonitoredResourceDescriptor": {
+            "description": "An object that describes the schema of a MonitoredResource object using a type name and a set of labels. For example, the monitored resource descriptor for Google Compute Engine VM instances has a type of `\"gce_instance\"` and specifies the use of the labels `\"instance_id\"` and `\"zone\"` to identify particular VM instances. Different APIs can support different monitored resource types. APIs generally provide a `list` method that returns the monitored resource descriptors used by the API. ",
+            "id": "MonitoredResourceDescriptor",
+            "properties": {
+                "description": {
+                    "description": "Optional. A detailed description of the monitored resource type that might be used in documentation.",
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "Optional. A concise name for the monitored resource type that might be displayed in user interfaces. It should be a Title Cased Noun Phrase, without any article or other determiners. For example, `\"Google Cloud SQL Database\"`.",
+                    "type": "string"
+                },
+                "labels": {
+                    "description": "Required. A set of labels used to describe instances of this monitored resource type. For example, an individual Google Cloud SQL database is identified by values for the labels `\"database_id\"` and `\"zone\"`.",
+                    "items": {
+                        "$ref": "LabelDescriptor"
+                    },
+                    "type": "array"
+                },
+                "launchStage": {
+                    "description": "Optional. The launch stage of the monitored resource definition.",
+                    "enum": [
+                        "LAUNCH_STAGE_UNSPECIFIED",
+                        "UNIMPLEMENTED",
+                        "PRELAUNCH",
+                        "EARLY_ACCESS",
+                        "ALPHA",
+                        "BETA",
+                        "GA",
+                        "DEPRECATED"
+                    ],
+                    "enumDescriptions": [
+                        "Do not use this default value.",
+                        "The feature is not yet implemented. Users can not use it.",
+                        "Prelaunch features are hidden from users and are only visible internally.",
+                        "Early Access features are limited to a closed group of testers. To use these features, you must sign up in advance and sign a Trusted Tester agreement (which includes confidentiality provisions). These features may be unstable, changed in backward-incompatible ways, and are not guaranteed to be released.",
+                        "Alpha is a limited availability test for releases before they are cleared for widespread use. By Alpha, all significant design issues are resolved and we are in the process of verifying functionality. Alpha customers need to apply for access, agree to applicable terms, and have their projects allowlisted. Alpha releases don\u2019t have to be feature complete, no SLAs are provided, and there are no technical support obligations, but they will be far enough along that customers can actually use them in test environments or for limited-use tests -- just like they would in normal production cases.",
+                        "Beta is the point at which we are ready to open a release for any customer to use. There are no SLA or technical support obligations in a Beta release. Products will be complete from a feature perspective, but may have some open outstanding issues. Beta releases are suitable for limited production use cases.",
+                        "GA features are open to all developers and are considered stable and fully qualified for production use.",
+                        "Deprecated features are scheduled to be shut down and removed. For more information, see the \u201cDeprecation Policy\u201d section of our [Terms of Service](https://cloud.google.com/terms/) and the [Google Cloud Platform Subject to the Deprecation Policy](https://cloud.google.com/terms/deprecation) documentation."
+                    ],
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Optional. The resource name of the monitored resource descriptor: `\"projects/{project_id}/monitoredResourceDescriptors/{type}\"` where {type} is the value of the `type` field in this object and {project_id} is a project ID that provides API-specific context for accessing the type. APIs that do not use project information can use the resource name format `\"monitoredResourceDescriptors/{type}\"`.",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "Required. The monitored resource type. For example, the type `\"cloudsql_database\"` represents databases in Google Cloud SQL.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Monitoring": {
+            "description": "Monitoring configuration of the service. The example below shows how to configure monitored resources and metrics for monitoring. In the example, a monitored resource and two metrics are defined. The `library.googleapis.com/book/returned_count` metric is sent to both producer and consumer projects, whereas the `library.googleapis.com/book/num_overdue` metric is only sent to the consumer project. monitored_resources: - type: library.googleapis.com/Branch display_name: \"Library Branch\" description: \"A branch of a library.\" launch_stage: GA labels: - key: resource_container description: \"The Cloud container (ie. project id) for the Branch.\" - key: location description: \"The location of the library branch.\" - key: branch_id description: \"The id of the branch.\" metrics: - name: library.googleapis.com/book/returned_count display_name: \"Books Returned\" description: \"The count of books that have been returned.\" launch_stage: GA metric_kind: DELTA value_type: INT64 unit: \"1\" labels: - key: customer_id description: \"The id of the customer.\" - name: library.googleapis.com/book/num_overdue display_name: \"Books Overdue\" description: \"The current number of overdue books.\" launch_stage: GA metric_kind: GAUGE value_type: INT64 unit: \"1\" labels: - key: customer_id description: \"The id of the customer.\" monitoring: producer_destinations: - monitored_resource: library.googleapis.com/Branch metrics: - library.googleapis.com/book/returned_count consumer_destinations: - monitored_resource: library.googleapis.com/Branch metrics: - library.googleapis.com/book/returned_count - library.googleapis.com/book/num_overdue",
+            "id": "Monitoring",
+            "properties": {
+                "consumerDestinations": {
+                    "description": "Monitoring configurations for sending metrics to the consumer project. There can be multiple consumer destinations. A monitored resource type may appear in multiple monitoring destinations if different aggregations are needed for different sets of metrics associated with that monitored resource type. A monitored resource and metric pair may only be used once in the Monitoring configuration.",
+                    "items": {
+                        "$ref": "MonitoringDestination"
+                    },
+                    "type": "array"
+                },
+                "producerDestinations": {
+                    "description": "Monitoring configurations for sending metrics to the producer project. There can be multiple producer destinations. A monitored resource type may appear in multiple monitoring destinations if different aggregations are needed for different sets of metrics associated with that monitored resource type. A monitored resource and metric pair may only be used once in the Monitoring configuration.",
+                    "items": {
+                        "$ref": "MonitoringDestination"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "MonitoringDestination": {
+            "description": "Configuration of a specific monitoring destination (the producer project or the consumer project).",
+            "id": "MonitoringDestination",
+            "properties": {
+                "metrics": {
+                    "description": "Types of the metrics to report to this monitoring destination. Each type must be defined in Service.metrics section.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "monitoredResource": {
+                    "description": "The monitored resource type. The type must be defined in Service.monitored_resources section.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "OAuthRequirements": {
+            "description": "OAuth scopes are a way to define data and permissions on data. For example, there are scopes defined for \"Read-only access to Google Calendar\" and \"Access to Cloud Platform\". Users can consent to a scope for an application, giving it permission to access that data on their behalf. OAuth scope specifications should be fairly coarse grained; a user will need to see and understand the text description of what your scope means. In most cases: use one or at most two OAuth scopes for an entire family of products. If your product has multiple APIs, you should probably be sharing the OAuth scope across all of those APIs. When you need finer grained OAuth consent screens: talk with your product management about how developers will use them in practice. Please note that even though each of the canonical scopes is enough for a request to be accepted and passed to the backend, a request can still fail due to the backend requiring additional scopes or permissions.",
+            "id": "OAuthRequirements",
+            "properties": {
+                "canonicalScopes": {
+                    "description": "The list of publicly documented OAuth scopes that are allowed access. An OAuth token containing any of these scopes will be accepted. Example: canonical_scopes: https://www.googleapis.com/auth/calendar, https://www.googleapis.com/auth/calendar.read",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Operation": {
+            "description": "This resource represents a long-running operation that is the result of a network API call.",
+            "id": "Operation",
+            "properties": {
+                "done": {
+                    "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
+                    "type": "boolean"
+                },
+                "error": {
+                    "$ref": "Status",
+                    "description": "The error result of the operation in case of failure or cancellation."
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
+                    "type": "string"
+                },
+                "response": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "OperationMetadata": {
+            "description": "The metadata associated with a long running operation resource.",
+            "id": "OperationMetadata",
+            "properties": {
+                "progressPercentage": {
+                    "description": "Percentage of completion of this operation, ranging from 0 to 100.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "resourceNames": {
+                    "description": "The full name of the resources that this operation is directly associated with.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "startTime": {
+                    "description": "The start time of the operation.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "steps": {
+                    "description": "Detailed status information for each step. The order is undetermined.",
+                    "items": {
+                        "$ref": "Step"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Option": {
+            "description": "A protocol buffer option, which can be attached to a message, field, enumeration, etc.",
+            "id": "Option",
+            "properties": {
+                "name": {
+                    "description": "The option's name. For protobuf built-in options (options defined in descriptor.proto), this is the short name. For example, `\"map_entry\"`. For custom options, it should be the fully-qualified name. For example, `\"google.api.http\"`.",
+                    "type": "string"
+                },
+                "value": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The option's value packed in an Any message. If the value is a primitive, the corresponding wrapper type defined in google/protobuf/wrappers.proto should be used. If the value is an enum, it should be stored as an int32 value using the google.protobuf.Int32Value type.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "Page": {
+            "description": "Represents a documentation page. A page can contain subpages to represent nested documentation set structure.",
+            "id": "Page",
+            "properties": {
+                "content": {
+                    "description": "The Markdown content of the page. You can use (== include {path} ==) to include content from a Markdown file.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The name of the page. It will be used as an identity of the page to generate URI of the page, text of the link to this page in navigation, etc. The full page name (start from the root page name to this page concatenated with `.`) can be used as reference to the page in your documentation. For example: pages: - name: Tutorial content: (== include tutorial.md ==) subpages: - name: Java content: (== include tutorial_java.md ==) You can reference `Java` page using Markdown reference link syntax: `Java`.",
+                    "type": "string"
+                },
+                "subpages": {
+                    "description": "Subpages of this page. The order of subpages specified here will be honored in the generated docset.",
+                    "items": {
+                        "$ref": "Page"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Policy": {
+            "description": "An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { \"bindings\": [ { \"role\": \"roles/resourcemanager.organizationAdmin\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\" ] }, { \"role\": \"roles/resourcemanager.organizationViewer\", \"members\": [ \"user:eve@example.com\" ], \"condition\": { \"title\": \"expirable access\", \"description\": \"Does not grant access after Sep 2020\", \"expression\": \"request.time < timestamp('2020-10-01T00:00:00.000Z')\", } } ], \"etag\": \"BwWWja0YfJA=\", \"version\": 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).",
+            "id": "Policy",
+            "properties": {
+                "auditConfigs": {
+                    "description": "Specifies cloud audit logging configuration for this policy.",
+                    "items": {
+                        "$ref": "AuditConfig"
+                    },
+                    "type": "array"
+                },
+                "bindings": {
+                    "description": "Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member.",
+                    "items": {
+                        "$ref": "Binding"
+                    },
+                    "type": "array"
+                },
+                "etag": {
+                    "description": "`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "version": {
+                    "description": "Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies).",
+                    "format": "int32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "Quota": {
+            "description": "Quota configuration helps to achieve fairness and budgeting in service usage. The metric based quota configuration works this way: - The service configuration defines a set of metrics. - For API calls, the quota.metric_rules maps methods to metrics with corresponding costs. - The quota.limits defines limits on the metrics, which will be used for quota checks at runtime. An example quota configuration in yaml format: quota: limits: - name: apiWriteQpsPerProject metric: library.googleapis.com/write_calls unit: \"1/min/{project}\" # rate limit for consumer projects values: STANDARD: 10000 # The metric rules bind all methods to the read_calls metric, # except for the UpdateBook and DeleteBook methods. These two methods # are mapped to the write_calls metric, with the UpdateBook method # consuming at twice rate as the DeleteBook method. metric_rules: - selector: \"*\" metric_costs: library.googleapis.com/read_calls: 1 - selector: google.example.library.v1.LibraryService.UpdateBook metric_costs: library.googleapis.com/write_calls: 2 - selector: google.example.library.v1.LibraryService.DeleteBook metric_costs: library.googleapis.com/write_calls: 1 Corresponding Metric definition: metrics: - name: library.googleapis.com/read_calls display_name: Read requests metric_kind: DELTA value_type: INT64 - name: library.googleapis.com/write_calls display_name: Write requests metric_kind: DELTA value_type: INT64 ",
+            "id": "Quota",
+            "properties": {
+                "limits": {
+                    "description": "List of `QuotaLimit` definitions for the service.",
+                    "items": {
+                        "$ref": "QuotaLimit"
+                    },
+                    "type": "array"
+                },
+                "metricRules": {
+                    "description": "List of `MetricRule` definitions, each one mapping a selected method to one or more metrics.",
+                    "items": {
+                        "$ref": "MetricRule"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "QuotaLimit": {
+            "description": "`QuotaLimit` defines a specific limit that applies over a specified duration for a limit type. There can be at most one limit for a duration and limit type combination defined within a `QuotaGroup`.",
+            "id": "QuotaLimit",
+            "properties": {
+                "defaultLimit": {
+                    "description": "Default number of tokens that can be consumed during the specified duration. This is the number of tokens assigned when a client application developer activates the service for his/her project. Specifying a value of 0 will block all requests. This can be used if you are provisioning quota to selected consumers and blocking others. Similarly, a value of -1 will indicate an unlimited quota. No other negative values are allowed. Used by group-based quotas only.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "description": {
+                    "description": "Optional. User-visible, extended description for this quota limit. Should be used only when more context is needed to understand this limit than provided by the limit's display name (see: `display_name`).",
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "User-visible display name for this limit. Optional. If not set, the UI will provide a default display name based on the quota configuration. This field can be used to override the default display name generated from the configuration.",
+                    "type": "string"
+                },
+                "duration": {
+                    "description": "Duration of this limit in textual notation. Must be \"100s\" or \"1d\". Used by group-based quotas only.",
+                    "type": "string"
+                },
+                "freeTier": {
+                    "description": "Free tier value displayed in the Developers Console for this limit. The free tier is the number of tokens that will be subtracted from the billed amount when billing is enabled. This field can only be set on a limit with duration \"1d\", in a billable group; it is invalid on any other limit. If this field is not set, it defaults to 0, indicating that there is no free tier for this service. Used by group-based quotas only.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "maxLimit": {
+                    "description": "Maximum number of tokens that can be consumed during the specified duration. Client application developers can override the default limit up to this maximum. If specified, this value cannot be set to a value less than the default limit. If not specified, it is set to the default limit. To allow clients to apply overrides with no upper bound, set this to -1, indicating unlimited maximum quota. Used by group-based quotas only.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "metric": {
+                    "description": "The name of the metric this quota limit applies to. The quota limits with the same metric will be checked together during runtime. The metric must be defined within the service config.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Name of the quota limit. The name must be provided, and it must be unique within the service. The name can only include alphanumeric characters as well as '-'. The maximum length of the limit name is 64 characters.",
+                    "type": "string"
+                },
+                "unit": {
+                    "description": "Specify the unit of the quota limit. It uses the same syntax as Metric.unit. The supported unit kinds are determined by the quota backend system. Here are some examples: * \"1/min/{project}\" for quota per minute per project. Note: the order of unit components is insignificant. The \"1\" at the beginning is required to follow the metric unit syntax.",
+                    "type": "string"
+                },
+                "values": {
+                    "additionalProperties": {
+                        "format": "int64",
+                        "type": "string"
+                    },
+                    "description": "Tiered limit values. You must specify this as a key:value pair, with an integer value that is the maximum number of requests allowed for the specified unit. Currently only STANDARD is supported.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "ResourceReference": {
+            "description": "Defines a proto annotation that describes a string field that refers to an API resource.",
+            "id": "ResourceReference",
+            "properties": {
+                "childType": {
+                    "description": "The resource type of a child collection that the annotated field references. This is useful for annotating the `parent` field that doesn't have a fixed resource type. Example: message ListLogEntriesRequest { string parent = 1 [(google.api.resource_reference) = { child_type: \"logging.googleapis.com/LogEntry\" }; }",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "The resource type that the annotated field references. Example: message Subscription { string topic = 2 [(google.api.resource_reference) = { type: \"pubsub.googleapis.com/Topic\" }]; } Occasionally, a field may reference an arbitrary resource. In this case, APIs use the special value * in their resource reference. Example: message GetIamPolicyRequest { string resource = 2 [(google.api.resource_reference) = { type: \"*\" }]; }",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Rollout": {
+            "description": "A rollout resource that defines how service configuration versions are pushed to control plane systems. Typically, you create a new version of the service config, and then create a Rollout to push the service config.",
+            "id": "Rollout",
+            "properties": {
+                "createTime": {
+                    "description": "Creation time of the rollout. Readonly.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "createdBy": {
+                    "description": "This field is deprecated and will be deleted. Please remove usage of this field.",
+                    "type": "string"
+                },
+                "deleteServiceStrategy": {
+                    "$ref": "DeleteServiceStrategy",
+                    "description": "The strategy associated with a rollout to delete a `ManagedService`. Readonly."
+                },
+                "rolloutId": {
+                    "description": "Optional. Unique identifier of this Rollout. Must be no longer than 63 characters and only lower case letters, digits, '.', '_' and '-' are allowed. If not specified by client, the server will generate one. The generated id will have the form of , where \"date\" is the create date in ISO 8601 format. \"revision number\" is a monotonically increasing positive number that is reset every day for each service. An example of the generated rollout_id is '2016-02-16r1'",
+                    "type": "string"
+                },
+                "serviceName": {
+                    "description": "The name of the service associated with this Rollout.",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "The status of this rollout. Readonly. In case of a failed rollout, the system will automatically rollback to the current Rollout version. Readonly.",
+                    "enum": [
+                        "ROLLOUT_STATUS_UNSPECIFIED",
+                        "IN_PROGRESS",
+                        "SUCCESS",
+                        "CANCELLED",
+                        "FAILED",
+                        "PENDING",
+                        "FAILED_ROLLED_BACK"
+                    ],
+                    "enumDescriptions": [
+                        "No status specified.",
+                        "The Rollout is in progress.",
+                        "The Rollout has completed successfully.",
+                        "The Rollout has been cancelled. This can happen if you have overlapping Rollout pushes, and the previous ones will be cancelled.",
+                        "The Rollout has failed and the rollback attempt has failed too.",
+                        "The Rollout has not started yet and is pending for execution.",
+                        "The Rollout has failed and rolled back to the previous successful Rollout."
+                    ],
+                    "type": "string"
+                },
+                "trafficPercentStrategy": {
+                    "$ref": "TrafficPercentStrategy",
+                    "description": "Google Service Control selects service configurations based on traffic percentage."
+                }
+            },
+            "type": "object"
+        },
+        "Service": {
+            "description": "`Service` is the root object of Google service configuration schema. It describes basic information about a service, such as the name and the title, and delegates other aspects to sub-sections. Each sub-section is either a proto message or a repeated proto message that configures a specific aspect, such as auth. See each proto message definition for details. Example: type: google.api.Service name: calendar.googleapis.com title: Google Calendar API apis: - name: google.calendar.v3.Calendar authentication: providers: - id: google_calendar_auth jwks_uri: https://www.googleapis.com/oauth2/v1/certs issuer: https://securetoken.google.com rules: - selector: \"*\" requirements: provider_id: google_calendar_auth",
+            "id": "Service",
+            "properties": {
+                "apis": {
+                    "description": "A list of API interfaces exported by this service. Only the `name` field of the google.protobuf.Api needs to be provided by the configuration author, as the remaining fields will be derived from the IDL during the normalization process. It is an error to specify an API interface here which cannot be resolved against the associated IDL files.",
+                    "items": {
+                        "$ref": "Api"
+                    },
+                    "type": "array"
+                },
+                "authentication": {
+                    "$ref": "Authentication",
+                    "description": "Auth configuration."
+                },
+                "backend": {
+                    "$ref": "Backend",
+                    "description": "API backend configuration."
+                },
+                "billing": {
+                    "$ref": "Billing",
+                    "description": "Billing configuration."
+                },
+                "configVersion": {
+                    "description": "Deprecated. The service config compiler always sets this field to `3`.",
+                    "format": "uint32",
+                    "type": "integer"
+                },
+                "context": {
+                    "$ref": "Context",
+                    "description": "Context configuration."
+                },
+                "control": {
+                    "$ref": "Control",
+                    "description": "Configuration for the service control plane."
+                },
+                "customError": {
+                    "$ref": "CustomError",
+                    "description": "Custom error configuration."
+                },
+                "documentation": {
+                    "$ref": "Documentation",
+                    "description": "Additional API documentation."
+                },
+                "endpoints": {
+                    "description": "Configuration for network endpoints. If this is empty, then an endpoint with the same name as the service is automatically generated to service all defined APIs.",
+                    "items": {
+                        "$ref": "Endpoint"
+                    },
+                    "type": "array"
+                },
+                "enums": {
+                    "description": "A list of all enum types included in this API service. Enums referenced directly or indirectly by the `apis` are automatically included. Enums which are not referenced but shall be included should be listed here by name. Example: enums: - name: google.someapi.v1.SomeEnum",
+                    "items": {
+                        "$ref": "Enum"
+                    },
+                    "type": "array"
+                },
+                "http": {
+                    "$ref": "Http",
+                    "description": "HTTP configuration."
+                },
+                "id": {
+                    "description": "A unique ID for a specific instance of this message, typically assigned by the client for tracking purpose. Must be no longer than 63 characters and only lower case letters, digits, '.', '_' and '-' are allowed. If empty, the server may choose to generate one instead.",
+                    "type": "string"
+                },
+                "logging": {
+                    "$ref": "Logging",
+                    "description": "Logging configuration."
+                },
+                "logs": {
+                    "description": "Defines the logs used by this service.",
+                    "items": {
+                        "$ref": "LogDescriptor"
+                    },
+                    "type": "array"
+                },
+                "metrics": {
+                    "description": "Defines the metrics used by this service.",
+                    "items": {
+                        "$ref": "MetricDescriptor"
+                    },
+                    "type": "array"
+                },
+                "monitoredResources": {
+                    "description": "Defines the monitored resources used by this service. This is required by the Service.monitoring and Service.logging configurations.",
+                    "items": {
+                        "$ref": "MonitoredResourceDescriptor"
+                    },
+                    "type": "array"
+                },
+                "monitoring": {
+                    "$ref": "Monitoring",
+                    "description": "Monitoring configuration."
+                },
+                "name": {
+                    "description": "The service name, which is a DNS-like logical identifier for the service, such as `calendar.googleapis.com`. The service name typically goes through DNS verification to make sure the owner of the service also owns the DNS name.",
+                    "type": "string"
+                },
+                "producerProjectId": {
+                    "description": "The Google project that owns this service.",
+                    "type": "string"
+                },
+                "quota": {
+                    "$ref": "Quota",
+                    "description": "Quota configuration."
+                },
+                "sourceInfo": {
+                    "$ref": "SourceInfo",
+                    "description": "Output only. The source information for this configuration if available."
+                },
+                "systemParameters": {
+                    "$ref": "SystemParameters",
+                    "description": "System parameter configuration."
+                },
+                "systemTypes": {
+                    "description": "A list of all proto message types included in this API service. It serves similar purpose as [google.api.Service.types], except that these types are not needed by user-defined APIs. Therefore, they will not show up in the generated discovery doc. This field should only be used to define system APIs in ESF.",
+                    "items": {
+                        "$ref": "Type"
+                    },
+                    "type": "array"
+                },
+                "title": {
+                    "description": "The product title for this service.",
+                    "type": "string"
+                },
+                "types": {
+                    "description": "A list of all proto message types included in this API service. Types referenced directly or indirectly by the `apis` are automatically included. Messages which are not referenced but shall be included, such as types used by the `google.protobuf.Any` type, should be listed here by name. Example: types: - name: google.protobuf.Int32",
+                    "items": {
+                        "$ref": "Type"
+                    },
+                    "type": "array"
+                },
+                "usage": {
+                    "$ref": "Usage",
+                    "description": "Configuration controlling usage of this service."
+                }
+            },
+            "type": "object"
+        },
+        "SetIamPolicyRequest": {
+            "description": "Request message for `SetIamPolicy` method.",
+            "id": "SetIamPolicyRequest",
+            "properties": {
+                "policy": {
+                    "$ref": "Policy",
+                    "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them."
+                },
+                "updateMask": {
+                    "description": "OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only the fields in the mask will be modified. If no mask is provided, the following default mask is used: `paths: \"bindings, etag\"`",
+                    "format": "google-fieldmask",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SourceContext": {
+            "description": "`SourceContext` represents information about the source of a protobuf element, like the file in which it is defined.",
+            "id": "SourceContext",
+            "properties": {
+                "fileName": {
+                    "description": "The path-qualified name of the .proto file that contained the associated protobuf element. For example: `\"google/protobuf/source_context.proto\"`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SourceInfo": {
+            "description": "Source information used to create a Service Config",
+            "id": "SourceInfo",
+            "properties": {
+                "sourceFiles": {
+                    "description": "All files used during config generation.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Status": {
+            "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
+            "id": "Status",
+            "properties": {
+                "code": {
+                    "description": "The status code, which should be an enum value of google.rpc.Code.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Step": {
+            "description": "Represents the status of one operation step.",
+            "id": "Step",
+            "properties": {
+                "description": {
+                    "description": "The short description of the step.",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "The status code.",
+                    "enum": [
+                        "STATUS_UNSPECIFIED",
+                        "DONE",
+                        "NOT_STARTED",
+                        "IN_PROGRESS",
+                        "FAILED",
+                        "CANCELLED"
+                    ],
+                    "enumDescriptions": [
+                        "Unspecifed code.",
+                        "The operation or step has completed without errors.",
+                        "The operation or step has not started yet.",
+                        "The operation or step is in progress.",
+                        "The operation or step has completed with errors. If the operation is rollbackable, the rollback completed with errors too.",
+                        "The operation or step has completed with cancellation."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SubmitConfigSourceRequest": {
+            "description": "Request message for SubmitConfigSource method.",
+            "id": "SubmitConfigSourceRequest",
+            "properties": {
+                "configSource": {
+                    "$ref": "ConfigSource",
+                    "description": "Required. The source configuration for the service."
+                },
+                "validateOnly": {
+                    "description": "Optional. If set, this will result in the generation of a `google.api.Service` configuration based on the `ConfigSource` provided, but the generated config and the sources will NOT be persisted.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "SubmitConfigSourceResponse": {
+            "description": "Response message for SubmitConfigSource method.",
+            "id": "SubmitConfigSourceResponse",
+            "properties": {
+                "serviceConfig": {
+                    "$ref": "Service",
+                    "description": "The generated service configuration."
+                }
+            },
+            "type": "object"
+        },
+        "SystemParameter": {
+            "description": "Define a parameter's name and location. The parameter may be passed as either an HTTP header or a URL query parameter, and if both are passed the behavior is implementation-dependent.",
+            "id": "SystemParameter",
+            "properties": {
+                "httpHeader": {
+                    "description": "Define the HTTP header name to use for the parameter. It is case insensitive.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Define the name of the parameter, such as \"api_key\" . It is case sensitive.",
+                    "type": "string"
+                },
+                "urlQueryParameter": {
+                    "description": "Define the URL query parameter name to use for the parameter. It is case sensitive.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SystemParameterRule": {
+            "description": "Define a system parameter rule mapping system parameter definitions to methods.",
+            "id": "SystemParameterRule",
+            "properties": {
+                "parameters": {
+                    "description": "Define parameters. Multiple names may be defined for a parameter. For a given method call, only one of them should be used. If multiple names are used the behavior is implementation-dependent. If none of the specified names are present the behavior is parameter-dependent.",
+                    "items": {
+                        "$ref": "SystemParameter"
+                    },
+                    "type": "array"
+                },
+                "selector": {
+                    "description": "Selects the methods to which this rule applies. Use '*' to indicate all methods in all APIs. Refer to selector for syntax details.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SystemParameters": {
+            "description": "### System parameter configuration A system parameter is a special kind of parameter defined by the API system, not by an individual API. It is typically mapped to an HTTP header and/or a URL query parameter. This configuration specifies which methods change the names of the system parameters.",
+            "id": "SystemParameters",
+            "properties": {
+                "rules": {
+                    "description": "Define system parameters. The parameters defined here will override the default parameters implemented by the system. If this field is missing from the service config, default system parameters will be used. Default system parameters and names is implementation-dependent. Example: define api key for all methods system_parameters rules: - selector: \"*\" parameters: - name: api_key url_query_parameter: api_key Example: define 2 api key names for a specific method. system_parameters rules: - selector: \"/ListShelves\" parameters: - name: api_key http_header: Api-Key1 - name: api_key http_header: Api-Key2 **NOTE:** All service configuration rules follow \"last one wins\" order.",
+                    "items": {
+                        "$ref": "SystemParameterRule"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "TestIamPermissionsRequest": {
+            "description": "Request message for `TestIamPermissions` method.",
+            "id": "TestIamPermissionsRequest",
+            "properties": {
+                "permissions": {
+                    "description": "The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or 'storage.*') are not allowed. For more information see [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "TestIamPermissionsResponse": {
+            "description": "Response message for `TestIamPermissions` method.",
+            "id": "TestIamPermissionsResponse",
+            "properties": {
+                "permissions": {
+                    "description": "A subset of `TestPermissionsRequest.permissions` that the caller is allowed.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "TrafficPercentStrategy": {
+            "description": "Strategy that specifies how clients of Google Service Controller want to send traffic to use different config versions. This is generally used by API proxy to split traffic based on your configured percentage for each config version. One example of how to gradually rollout a new service configuration using this strategy: Day 1 Rollout { id: \"example.googleapis.com/rollout_20160206\" traffic_percent_strategy { percentages: { \"example.googleapis.com/20160201\": 70.00 \"example.googleapis.com/20160206\": 30.00 } } } Day 2 Rollout { id: \"example.googleapis.com/rollout_20160207\" traffic_percent_strategy: { percentages: { \"example.googleapis.com/20160206\": 100.00 } } }",
+            "id": "TrafficPercentStrategy",
+            "properties": {
+                "percentages": {
+                    "additionalProperties": {
+                        "format": "double",
+                        "type": "number"
+                    },
+                    "description": "Maps service configuration IDs to their corresponding traffic percentage. Key is the service configuration ID, Value is the traffic percentage which must be greater than 0.0 and the sum must equal to 100.0.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "Type": {
+            "description": "A protocol buffer message type.",
+            "id": "Type",
+            "properties": {
+                "fields": {
+                    "description": "The list of fields.",
+                    "items": {
+                        "$ref": "Field"
+                    },
+                    "type": "array"
+                },
+                "name": {
+                    "description": "The fully qualified message name.",
+                    "type": "string"
+                },
+                "oneofs": {
+                    "description": "The list of types appearing in `oneof` definitions in this type.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "options": {
+                    "description": "The protocol buffer options.",
+                    "items": {
+                        "$ref": "Option"
+                    },
+                    "type": "array"
+                },
+                "sourceContext": {
+                    "$ref": "SourceContext",
+                    "description": "The source context."
+                },
+                "syntax": {
+                    "description": "The source syntax.",
+                    "enum": [
+                        "SYNTAX_PROTO2",
+                        "SYNTAX_PROTO3"
+                    ],
+                    "enumDescriptions": [
+                        "Syntax `proto2`.",
+                        "Syntax `proto3`."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UndeleteServiceResponse": {
+            "description": "Response message for UndeleteService method.",
+            "id": "UndeleteServiceResponse",
+            "properties": {
+                "service": {
+                    "$ref": "ManagedService",
+                    "description": "Revived service resource."
+                }
+            },
+            "type": "object"
+        },
+        "Usage": {
+            "description": "Configuration controlling usage of a service.",
+            "id": "Usage",
+            "properties": {
+                "producerNotificationChannel": {
+                    "description": "The full resource name of a channel used for sending notifications to the service producer. Google Service Management currently only supports [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification channel. To use Google Cloud Pub/Sub as the channel, this must be the name of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format documented in https://cloud.google.com/pubsub/docs/overview.",
+                    "type": "string"
+                },
+                "requirements": {
+                    "description": "Requirements that must be satisfied before a consumer project can use the service. Each requirement is of the form /; for example 'serviceusage.googleapis.com/billing-enabled'. For Google APIs, a Terms of Service requirement must be included here. Google Cloud APIs must include \"serviceusage.googleapis.com/tos/cloud\". Other Google APIs should include \"serviceusage.googleapis.com/tos/universal\". Additional ToS can be included based on the business needs.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "rules": {
+                    "description": "A list of usage rules that apply to individual API methods. **NOTE:** All service configuration rules follow \"last one wins\" order.",
+                    "items": {
+                        "$ref": "UsageRule"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "UsageRule": {
+            "description": "Usage configuration rules for the service. NOTE: Under development. Use this rule to configure unregistered calls for the service. Unregistered calls are calls that do not contain consumer project identity. (Example: calls that do not contain an API key). By default, API methods do not allow unregistered calls, and each method call must be identified by a consumer project identity. Use this rule to allow/disallow unregistered calls. Example of an API that wants to allow unregistered calls for entire service. usage: rules: - selector: \"*\" allow_unregistered_calls: true Example of a method that wants to allow unregistered calls. usage: rules: - selector: \"google.example.library.v1.LibraryService.CreateBook\" allow_unregistered_calls: true",
+            "id": "UsageRule",
+            "properties": {
+                "allowUnregisteredCalls": {
+                    "description": "If true, the selected method allows unregistered calls, e.g. calls that don't identify any user or application.",
+                    "type": "boolean"
+                },
+                "selector": {
+                    "description": "Selects the methods to which this rule applies. Use '*' to indicate all methods in all APIs. Refer to selector for syntax details.",
+                    "type": "string"
+                },
+                "skipServiceControl": {
+                    "description": "If true, the selected method should skip service control and the control plane features, such as quota and billing, will not be available. This flag is used by Google Cloud Endpoints to bypass checks for internal methods, such as service health check methods.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
         }
-      },
-      "type": "object",
-      "id": "MetricDescriptorMetadata"
     },
-    "Policy": {
-      "id": "Policy",
-      "properties": {
-        "version": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Specifies the format of the policy. Valid values are `0`, `1`, and `3`. Requests that specify an invalid value are rejected. Any operation that affects conditional role bindings must specify version `3`. This requirement applies to the following operations: * Getting a policy that includes a conditional role binding * Adding a conditional role binding to a policy * Changing a conditional role binding in a policy * Removing any role binding, with or without a condition, from a policy that includes conditions **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost. If a policy does not include any conditions, operations on that policy may specify any valid version or leave the field unset. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies)."
-        },
-        "bindings": {
-          "items": {
-            "$ref": "Binding"
-          },
-          "type": "array",
-          "description": "Associates a list of `members` to a `role`. Optionally, may specify a `condition` that determines how and when the `bindings` are applied. Each of the `bindings` must contain at least one member."
-        },
-        "auditConfigs": {
-          "type": "array",
-          "items": {
-            "$ref": "AuditConfig"
-          },
-          "description": "Specifies cloud audit logging configuration for this policy."
-        },
-        "etag": {
-          "description": "`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. **Important:** If you use IAM Conditions, you must include the `etag` field whenever you call `setIamPolicy`. If you omit this field, then IAM allows you to overwrite a version `3` policy with a version `1` policy, and all of the conditions in the version `3` policy are lost.",
-          "format": "byte",
-          "type": "string"
-        }
-      },
-      "description": "An Identity and Access Management (IAM) policy, which specifies access controls for Google Cloud resources. A `Policy` is a collection of `bindings`. A `binding` binds one or more `members` to a single `role`. Members can be user accounts, service accounts, Google groups, and domains (such as G Suite). A `role` is a named list of permissions; each `role` can be an IAM predefined role or a user-created custom role. For some types of Google Cloud resources, a `binding` can also specify a `condition`, which is a logical expression that allows access to a resource only if the expression evaluates to `true`. A condition can add constraints based on attributes of the request, the resource, or both. To learn which resources support conditions in their IAM policies, see the [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-policies). **JSON example:** { \"bindings\": [ { \"role\": \"roles/resourcemanager.organizationAdmin\", \"members\": [ \"user:mike@example.com\", \"group:admins@example.com\", \"domain:google.com\", \"serviceAccount:my-project-id@appspot.gserviceaccount.com\" ] }, { \"role\": \"roles/resourcemanager.organizationViewer\", \"members\": [ \"user:eve@example.com\" ], \"condition\": { \"title\": \"expirable access\", \"description\": \"Does not grant access after Sep 2020\", \"expression\": \"request.time \u003c timestamp('2020-10-01T00:00:00.000Z')\", } } ], \"etag\": \"BwWWja0YfJA=\", \"version\": 3 } **YAML example:** bindings: - members: - user:mike@example.com - group:admins@example.com - domain:google.com - serviceAccount:my-project-id@appspot.gserviceaccount.com role: roles/resourcemanager.organizationAdmin - members: - user:eve@example.com role: roles/resourcemanager.organizationViewer condition: title: expirable access description: Does not grant access after Sep 2020 expression: request.time \u003c timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 For a description of IAM and its features, see the [IAM documentation](https://cloud.google.com/iam/docs/).",
-      "type": "object"
-    },
-    "Advice": {
-      "properties": {
-        "description": {
-          "description": "Useful description for why this advice was applied and what actions should be taken to mitigate any implied risks.",
-          "type": "string"
-        }
-      },
-      "description": "Generated advice about this change, used for providing more information about how a change will affect the existing service.",
-      "id": "Advice",
-      "type": "object"
-    },
-    "Field": {
-      "type": "object",
-      "description": "A single field of a message type.",
-      "id": "Field",
-      "properties": {
-        "options": {
-          "type": "array",
-          "items": {
-            "$ref": "Option"
-          },
-          "description": "The protocol buffer options."
-        },
-        "jsonName": {
-          "description": "The field JSON name.",
-          "type": "string"
-        },
-        "cardinality": {
-          "type": "string",
-          "description": "The field cardinality.",
-          "enumDescriptions": [
-            "For fields with unknown cardinality.",
-            "For optional fields.",
-            "For required fields. Proto2 syntax only.",
-            "For repeated fields."
-          ],
-          "enum": [
-            "CARDINALITY_UNKNOWN",
-            "CARDINALITY_OPTIONAL",
-            "CARDINALITY_REQUIRED",
-            "CARDINALITY_REPEATED"
-          ]
-        },
-        "oneofIndex": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The index of the field type in `Type.oneofs`, for message or enumeration types. The first type has index 1; zero means the type is not in the list."
-        },
-        "defaultValue": {
-          "description": "The string value of the default value of this field. Proto2 syntax only.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "The field name."
-        },
-        "packed": {
-          "type": "boolean",
-          "description": "Whether to use alternative packed wire representation."
-        },
-        "typeUrl": {
-          "type": "string",
-          "description": "The field type URL, without the scheme, for message or enumeration types. Example: `\"type.googleapis.com/google.protobuf.Timestamp\"`."
-        },
-        "number": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The field number."
-        },
-        "kind": {
-          "type": "string",
-          "enum": [
-            "TYPE_UNKNOWN",
-            "TYPE_DOUBLE",
-            "TYPE_FLOAT",
-            "TYPE_INT64",
-            "TYPE_UINT64",
-            "TYPE_INT32",
-            "TYPE_FIXED64",
-            "TYPE_FIXED32",
-            "TYPE_BOOL",
-            "TYPE_STRING",
-            "TYPE_GROUP",
-            "TYPE_MESSAGE",
-            "TYPE_BYTES",
-            "TYPE_UINT32",
-            "TYPE_ENUM",
-            "TYPE_SFIXED32",
-            "TYPE_SFIXED64",
-            "TYPE_SINT32",
-            "TYPE_SINT64"
-          ],
-          "enumDescriptions": [
-            "Field type unknown.",
-            "Field type double.",
-            "Field type float.",
-            "Field type int64.",
-            "Field type uint64.",
-            "Field type int32.",
-            "Field type fixed64.",
-            "Field type fixed32.",
-            "Field type bool.",
-            "Field type string.",
-            "Field type group. Proto2 syntax only, and deprecated.",
-            "Field type message.",
-            "Field type bytes.",
-            "Field type uint32.",
-            "Field type enum.",
-            "Field type sfixed32.",
-            "Field type sfixed64.",
-            "Field type sint32.",
-            "Field type sint64."
-          ],
-          "description": "The field type."
-        }
-      }
-    },
-    "OAuthRequirements": {
-      "properties": {
-        "canonicalScopes": {
-          "description": "The list of publicly documented OAuth scopes that are allowed access. An OAuth token containing any of these scopes will be accepted. Example: canonical_scopes: https://www.googleapis.com/auth/calendar, https://www.googleapis.com/auth/calendar.read",
-          "type": "string"
-        }
-      },
-      "description": "OAuth scopes are a way to define data and permissions on data. For example, there are scopes defined for \"Read-only access to Google Calendar\" and \"Access to Cloud Platform\". Users can consent to a scope for an application, giving it permission to access that data on their behalf. OAuth scope specifications should be fairly coarse grained; a user will need to see and understand the text description of what your scope means. In most cases: use one or at most two OAuth scopes for an entire family of products. If your product has multiple APIs, you should probably be sharing the OAuth scope across all of those APIs. When you need finer grained OAuth consent screens: talk with your product management about how developers will use them in practice. Please note that even though each of the canonical scopes is enough for a request to be accepted and passed to the backend, a request can still fail due to the backend requiring additional scopes or permissions.",
-      "id": "OAuthRequirements",
-      "type": "object"
-    }
-  },
-  "mtlsRootUrl": "https://servicemanagement.mtls.googleapis.com/",
-  "discoveryVersion": "v1",
-  "title": "Service Management API",
-  "kind": "discovery#restDescription",
-  "batchPath": "batch",
-  "documentationLink": "https://cloud.google.com/service-management/",
-  "parameters": {
-    "callback": {
-      "description": "JSONP",
-      "location": "query",
-      "type": "string"
-    },
-    "fields": {
-      "type": "string",
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response."
-    },
-    "alt": {
-      "type": "string",
-      "location": "query",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "description": "Data format for response.",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "default": "json"
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "$.xgafv": {
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format."
-    },
-    "key": {
-      "location": "query",
-      "type": "string",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token."
-    },
-    "upload_protocol": {
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "location": "query"
-    },
-    "oauth_token": {
-      "type": "string",
-      "description": "OAuth 2.0 token for the current user.",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "default": "true",
-      "type": "boolean"
-    },
-    "quotaUser": {
-      "location": "query",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "type": "string"
-    },
-    "access_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth access token."
-    }
-  },
-  "description": "Google Service Management allows service producers to publish their services on Google Cloud Platform so that they can be discovered and used by service consumers."
-}
+    "servicePath": "",
+    "title": "Service Management API",
+    "version": "v1"
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/smartdevicemanagement.v1.json b/googleapiclient/discovery_cache/documents/smartdevicemanagement.v1.json
index 06188ce..c3bd4e9 100644
--- a/googleapiclient/discovery_cache/documents/smartdevicemanagement.v1.json
+++ b/googleapiclient/discovery_cache/documents/smartdevicemanagement.v1.json
@@ -1,533 +1,533 @@
 {
-  "rootUrl": "https://smartdevicemanagement.googleapis.com/",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "discoveryVersion": "v1",
-  "resources": {
-    "enterprises": {
-      "resources": {
-        "devices": {
-          "methods": {
-            "get": {
-              "httpMethod": "GET",
-              "path": "v1/{+name}",
-              "parameterOrder": [
-                "name"
-              ],
-              "description": "Gets a device managed by the enterprise.",
-              "flatPath": "v1/enterprises/{enterprisesId}/devices/{devicesId}",
-              "response": {
-                "$ref": "GoogleHomeEnterpriseSdmV1Device"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/sdm.service"
-              ],
-              "parameters": {
-                "name": {
-                  "pattern": "^enterprises/[^/]+/devices/[^/]+$",
-                  "required": true,
-                  "description": "The name of the device requested. For example: \"enterprises/XYZ/devices/123\"",
-                  "location": "path",
-                  "type": "string"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/sdm.service": {
+                    "description": "See and/or control the devices that you selected"
                 }
-              },
-              "id": "smartdevicemanagement.enterprises.devices.get"
-            },
-            "list": {
-              "response": {
-                "$ref": "GoogleHomeEnterpriseSdmV1ListDevicesResponse"
-              },
-              "httpMethod": "GET",
-              "id": "smartdevicemanagement.enterprises.devices.list",
-              "parameters": {
-                "filter": {
-                  "type": "string",
-                  "description": "Optional filter to list devices. Filters can be done on: Device custom name (substring match): 'customName=wing'",
-                  "location": "query"
+            }
+        }
+    },
+    "basePath": "",
+    "baseUrl": "https://smartdevicemanagement.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Smart Device Management",
+    "description": "Allow select enterprise partners to access, control, and manage Google and Nest devices programmatically.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://developers.google.com/nest/device-access",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "smartdevicemanagement:v1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://smartdevicemanagement.mtls.googleapis.com/",
+    "name": "smartdevicemanagement",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        }
+    },
+    "protocol": "rest",
+    "resources": {
+        "enterprises": {
+            "resources": {
+                "devices": {
+                    "methods": {
+                        "executeCommand": {
+                            "description": "Executes a command to device managed by the enterprise.",
+                            "flatPath": "v1/enterprises/{enterprisesId}/devices/{devicesId}:executeCommand",
+                            "httpMethod": "POST",
+                            "id": "smartdevicemanagement.enterprises.devices.executeCommand",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "The name of the device requested. For example: \"enterprises/XYZ/devices/123\"",
+                                    "location": "path",
+                                    "pattern": "^enterprises/[^/]+/devices/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+name}:executeCommand",
+                            "request": {
+                                "$ref": "GoogleHomeEnterpriseSdmV1ExecuteDeviceCommandRequest"
+                            },
+                            "response": {
+                                "$ref": "GoogleHomeEnterpriseSdmV1ExecuteDeviceCommandResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/sdm.service"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets a device managed by the enterprise.",
+                            "flatPath": "v1/enterprises/{enterprisesId}/devices/{devicesId}",
+                            "httpMethod": "GET",
+                            "id": "smartdevicemanagement.enterprises.devices.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "The name of the device requested. For example: \"enterprises/XYZ/devices/123\"",
+                                    "location": "path",
+                                    "pattern": "^enterprises/[^/]+/devices/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+name}",
+                            "response": {
+                                "$ref": "GoogleHomeEnterpriseSdmV1Device"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/sdm.service"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists devices managed by the enterprise.",
+                            "flatPath": "v1/enterprises/{enterprisesId}/devices",
+                            "httpMethod": "GET",
+                            "id": "smartdevicemanagement.enterprises.devices.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "Optional filter to list devices. Filters can be done on: Device custom name (substring match): 'customName=wing'",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "Optional requested page size. Server may return fewer devices than requested. If unspecified, server will pick an appropriate default.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "Optional token of the page to retrieve.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "The parent enterprise to list devices under. E.g. \"enterprises/XYZ\".",
+                                    "location": "path",
+                                    "pattern": "^enterprises/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+parent}/devices",
+                            "response": {
+                                "$ref": "GoogleHomeEnterpriseSdmV1ListDevicesResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/sdm.service"
+                            ]
+                        }
+                    }
                 },
-                "pageToken": {
-                  "type": "string",
-                  "description": "Optional token of the page to retrieve.",
-                  "location": "query"
+                "structures": {
+                    "methods": {
+                        "get": {
+                            "description": "Gets a structure managed by the enterprise.",
+                            "flatPath": "v1/enterprises/{enterprisesId}/structures/{structuresId}",
+                            "httpMethod": "GET",
+                            "id": "smartdevicemanagement.enterprises.structures.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "The name of the structure requested. For example: \"enterprises/XYZ/structures/ABC\".",
+                                    "location": "path",
+                                    "pattern": "^enterprises/[^/]+/structures/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+name}",
+                            "response": {
+                                "$ref": "GoogleHomeEnterpriseSdmV1Structure"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/sdm.service"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists structures managed by the enterprise.",
+                            "flatPath": "v1/enterprises/{enterprisesId}/structures",
+                            "httpMethod": "GET",
+                            "id": "smartdevicemanagement.enterprises.structures.list",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "Optional filter to list structures.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "Requested page size. Server may return fewer structures than requested. If unspecified, server will pick an appropriate default.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The token of the page to retrieve.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "The parent enterprise to list structures under. E.g. \"enterprises/XYZ\".",
+                                    "location": "path",
+                                    "pattern": "^enterprises/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/{+parent}/structures",
+                            "response": {
+                                "$ref": "GoogleHomeEnterpriseSdmV1ListStructuresResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/sdm.service"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "rooms": {
+                            "methods": {
+                                "get": {
+                                    "description": "Gets a room managed by the enterprise.",
+                                    "flatPath": "v1/enterprises/{enterprisesId}/structures/{structuresId}/rooms/{roomsId}",
+                                    "httpMethod": "GET",
+                                    "id": "smartdevicemanagement.enterprises.structures.rooms.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The name of the room requested. For example: \"enterprises/XYZ/structures/ABC/rooms/123\".",
+                                            "location": "path",
+                                            "pattern": "^enterprises/[^/]+/structures/[^/]+/rooms/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+name}",
+                                    "response": {
+                                        "$ref": "GoogleHomeEnterpriseSdmV1Room"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/sdm.service"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists rooms managed by the enterprise.",
+                                    "flatPath": "v1/enterprises/{enterprisesId}/structures/{structuresId}/rooms",
+                                    "httpMethod": "GET",
+                                    "id": "smartdevicemanagement.enterprises.structures.rooms.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "pageSize": {
+                                            "description": "Requested page size. Server may return fewer rooms than requested. If unspecified, server will pick an appropriate default.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "The token of the page to retrieve.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "The parent resource name of the rooms requested. For example: \"enterprises/XYZ/structures/ABC\".",
+                                            "location": "path",
+                                            "pattern": "^enterprises/[^/]+/structures/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/{+parent}/rooms",
+                                    "response": {
+                                        "$ref": "GoogleHomeEnterpriseSdmV1ListRoomsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/sdm.service"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    },
+    "revision": "20210213",
+    "rootUrl": "https://smartdevicemanagement.googleapis.com/",
+    "schemas": {
+        "GoogleHomeEnterpriseSdmV1Device": {
+            "description": "Device resource represents an instance of enterprise managed device in the property.",
+            "id": "GoogleHomeEnterpriseSdmV1Device",
+            "properties": {
+                "name": {
+                    "description": "Required. The resource name of the device. For example: \"enterprises/XYZ/devices/123\".",
+                    "type": "string"
+                },
+                "parentRelations": {
+                    "description": "Assignee details of the device.",
+                    "items": {
+                        "$ref": "GoogleHomeEnterpriseSdmV1ParentRelation"
+                    },
+                    "type": "array"
+                },
+                "traits": {
+                    "additionalProperties": {
+                        "description": "Properties of the object.",
+                        "type": "any"
+                    },
+                    "description": "Output only. Device traits.",
+                    "readOnly": true,
+                    "type": "object"
+                },
+                "type": {
+                    "description": "Output only. Type of the device for general display purposes. For example: \"THERMOSTAT\". The device type should not be used to deduce or infer functionality of the actual device it is assigned to. Instead, use the returned traits for the device.",
+                    "readOnly": true,
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleHomeEnterpriseSdmV1ExecuteDeviceCommandRequest": {
+            "description": "Request message for SmartDeviceManagementService.ExecuteDeviceCommand",
+            "id": "GoogleHomeEnterpriseSdmV1ExecuteDeviceCommandRequest",
+            "properties": {
+                "command": {
+                    "description": "The command name to execute, represented by the fully qualified protobuf message name.",
+                    "type": "string"
+                },
+                "params": {
+                    "additionalProperties": {
+                        "description": "Properties of the object.",
+                        "type": "any"
+                    },
+                    "description": "The command message to execute, represented as a Struct.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleHomeEnterpriseSdmV1ExecuteDeviceCommandResponse": {
+            "description": "Response message for SmartDeviceManagementService.ExecuteDeviceCommand",
+            "id": "GoogleHomeEnterpriseSdmV1ExecuteDeviceCommandResponse",
+            "properties": {
+                "results": {
+                    "additionalProperties": {
+                        "description": "Properties of the object.",
+                        "type": "any"
+                    },
+                    "description": "The results of executing the command.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleHomeEnterpriseSdmV1ListDevicesResponse": {
+            "description": "Response message for SmartDeviceManagementService.ListDevices",
+            "id": "GoogleHomeEnterpriseSdmV1ListDevicesResponse",
+            "properties": {
+                "devices": {
+                    "description": "The list of devices.",
+                    "items": {
+                        "$ref": "GoogleHomeEnterpriseSdmV1Device"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "The pagination token to retrieve the next page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleHomeEnterpriseSdmV1ListRoomsResponse": {
+            "description": "Response message for SmartDeviceManagementService.ListRooms",
+            "id": "GoogleHomeEnterpriseSdmV1ListRoomsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The pagination token to retrieve the next page of results. If this field is omitted, there are no subsequent pages.",
+                    "type": "string"
+                },
+                "rooms": {
+                    "description": "The list of rooms.",
+                    "items": {
+                        "$ref": "GoogleHomeEnterpriseSdmV1Room"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleHomeEnterpriseSdmV1ListStructuresResponse": {
+            "description": "Response message for SmartDeviceManagementService.ListStructures",
+            "id": "GoogleHomeEnterpriseSdmV1ListStructuresResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The pagination token to retrieve the next page of results. If this field is omitted, there are no subsequent pages.",
+                    "type": "string"
+                },
+                "structures": {
+                    "description": "The list of structures.",
+                    "items": {
+                        "$ref": "GoogleHomeEnterpriseSdmV1Structure"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "GoogleHomeEnterpriseSdmV1ParentRelation": {
+            "description": "Represents device relationships, for instance, structure/room to which the device is assigned to.",
+            "id": "GoogleHomeEnterpriseSdmV1ParentRelation",
+            "properties": {
+                "displayName": {
+                    "description": "Output only. The custom name of the relation -- e.g., structure/room where the device is assigned to.",
+                    "readOnly": true,
+                    "type": "string"
                 },
                 "parent": {
-                  "required": true,
-                  "pattern": "^enterprises/[^/]+$",
-                  "description": "The parent enterprise to list devices under. E.g. \"enterprises/XYZ\".",
-                  "location": "path",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "description": "Optional requested page size. Server may return fewer devices than requested. If unspecified, server will pick an appropriate default.",
-                  "location": "query",
-                  "type": "integer",
-                  "format": "int32"
+                    "description": "Output only. The name of the relation -- e.g., structure/room where the device is assigned to. For example: \"enterprises/XYZ/structures/ABC\" or \"enterprises/XYZ/structures/ABC/rooms/123\"",
+                    "readOnly": true,
+                    "type": "string"
                 }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/sdm.service"
-              ],
-              "flatPath": "v1/enterprises/{enterprisesId}/devices",
-              "parameterOrder": [
-                "parent"
-              ],
-              "path": "v1/{+parent}/devices",
-              "description": "Lists devices managed by the enterprise."
             },
-            "executeCommand": {
-              "parameters": {
-                "name": {
-                  "required": true,
-                  "pattern": "^enterprises/[^/]+/devices/[^/]+$",
-                  "description": "The name of the device requested. For example: \"enterprises/XYZ/devices/123\"",
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "id": "smartdevicemanagement.enterprises.devices.executeCommand",
-              "path": "v1/{+name}:executeCommand",
-              "scopes": [
-                "https://www.googleapis.com/auth/sdm.service"
-              ],
-              "flatPath": "v1/enterprises/{enterprisesId}/devices/{devicesId}:executeCommand",
-              "description": "Executes a command to device managed by the enterprise.",
-              "httpMethod": "POST",
-              "request": {
-                "$ref": "GoogleHomeEnterpriseSdmV1ExecuteDeviceCommandRequest"
-              },
-              "response": {
-                "$ref": "GoogleHomeEnterpriseSdmV1ExecuteDeviceCommandResponse"
-              },
-              "parameterOrder": [
-                "name"
-              ]
-            }
-          }
+            "type": "object"
         },
-        "structures": {
-          "methods": {
-            "list": {
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "GoogleHomeEnterpriseSdmV1ListStructuresResponse"
-              },
-              "parameters": {
-                "filter": {
-                  "description": "Optional filter to list structures.",
-                  "type": "string",
-                  "location": "query"
+        "GoogleHomeEnterpriseSdmV1Room": {
+            "description": "Room resource represents an instance of sub-space within a structure such as rooms in a hotel suite or rental apartment.",
+            "id": "GoogleHomeEnterpriseSdmV1Room",
+            "properties": {
+                "name": {
+                    "description": "Output only. The resource name of the room. For example: \"enterprises/XYZ/structures/ABC/rooms/123\".",
+                    "readOnly": true,
+                    "type": "string"
                 },
-                "parent": {
-                  "description": "The parent enterprise to list structures under. E.g. \"enterprises/XYZ\".",
-                  "location": "path",
-                  "pattern": "^enterprises/[^/]+$",
-                  "required": true,
-                  "type": "string"
-                },
-                "pageToken": {
-                  "type": "string",
-                  "description": "The token of the page to retrieve.",
-                  "location": "query"
-                },
-                "pageSize": {
-                  "description": "Requested page size. Server may return fewer structures than requested. If unspecified, server will pick an appropriate default.",
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query"
+                "traits": {
+                    "additionalProperties": {
+                        "description": "Properties of the object.",
+                        "type": "any"
+                    },
+                    "description": "Room traits.",
+                    "type": "object"
                 }
-              },
-              "description": "Lists structures managed by the enterprise.",
-              "parameterOrder": [
-                "parent"
-              ],
-              "flatPath": "v1/enterprises/{enterprisesId}/structures",
-              "path": "v1/{+parent}/structures",
-              "id": "smartdevicemanagement.enterprises.structures.list",
-              "scopes": [
-                "https://www.googleapis.com/auth/sdm.service"
-              ]
             },
-            "get": {
-              "response": {
-                "$ref": "GoogleHomeEnterpriseSdmV1Structure"
-              },
-              "id": "smartdevicemanagement.enterprises.structures.get",
-              "scopes": [
-                "https://www.googleapis.com/auth/sdm.service"
-              ],
-              "parameters": {
+            "type": "object"
+        },
+        "GoogleHomeEnterpriseSdmV1Structure": {
+            "description": "Structure resource represents an instance of enterprise managed home or hotel room.",
+            "id": "GoogleHomeEnterpriseSdmV1Structure",
+            "properties": {
                 "name": {
-                  "required": true,
-                  "pattern": "^enterprises/[^/]+/structures/[^/]+$",
-                  "description": "The name of the structure requested. For example: \"enterprises/XYZ/structures/ABC\".",
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET",
-              "description": "Gets a structure managed by the enterprise.",
-              "flatPath": "v1/enterprises/{enterprisesId}/structures/{structuresId}",
-              "path": "v1/{+name}"
-            }
-          },
-          "resources": {
-            "rooms": {
-              "methods": {
-                "list": {
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "httpMethod": "GET",
-                  "flatPath": "v1/enterprises/{enterprisesId}/structures/{structuresId}/rooms",
-                  "id": "smartdevicemanagement.enterprises.structures.rooms.list",
-                  "description": "Lists rooms managed by the enterprise.",
-                  "path": "v1/{+parent}/rooms",
-                  "parameters": {
-                    "pageToken": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "The token of the page to retrieve."
-                    },
-                    "pageSize": {
-                      "location": "query",
-                      "format": "int32",
-                      "type": "integer",
-                      "description": "Requested page size. Server may return fewer rooms than requested. If unspecified, server will pick an appropriate default."
-                    },
-                    "parent": {
-                      "pattern": "^enterprises/[^/]+/structures/[^/]+$",
-                      "type": "string",
-                      "description": "The parent resource name of the rooms requested. For example: \"enterprises/XYZ/structures/ABC\".",
-                      "location": "path",
-                      "required": true
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/sdm.service"
-                  ],
-                  "response": {
-                    "$ref": "GoogleHomeEnterpriseSdmV1ListRoomsResponse"
-                  }
+                    "description": "Output only. The resource name of the structure. For example: \"enterprises/XYZ/structures/ABC\".",
+                    "readOnly": true,
+                    "type": "string"
                 },
-                "get": {
-                  "parameters": {
-                    "name": {
-                      "required": true,
-                      "location": "path",
-                      "pattern": "^enterprises/[^/]+/structures/[^/]+/rooms/[^/]+$",
-                      "description": "The name of the room requested. For example: \"enterprises/XYZ/structures/ABC/rooms/123\".",
-                      "type": "string"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/sdm.service"
-                  ],
-                  "flatPath": "v1/enterprises/{enterprisesId}/structures/{structuresId}/rooms/{roomsId}",
-                  "response": {
-                    "$ref": "GoogleHomeEnterpriseSdmV1Room"
-                  },
-                  "id": "smartdevicemanagement.enterprises.structures.rooms.get",
-                  "path": "v1/{+name}",
-                  "description": "Gets a room managed by the enterprise.",
-                  "httpMethod": "GET",
-                  "parameterOrder": [
-                    "name"
-                  ]
+                "traits": {
+                    "additionalProperties": {
+                        "description": "Properties of the object.",
+                        "type": "any"
+                    },
+                    "description": "Structure traits.",
+                    "type": "object"
                 }
-              }
-            }
-          }
+            },
+            "type": "object"
         }
-      }
-    }
-  },
-  "batchPath": "batch",
-  "mtlsRootUrl": "https://smartdevicemanagement.mtls.googleapis.com/",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/sdm.service": {
-          "description": "See and/or control the devices that you selected"
-        }
-      }
-    }
-  },
-  "version": "v1",
-  "documentationLink": "https://developers.google.com/nest/device-access",
-  "basePath": "",
-  "ownerDomain": "google.com",
-  "name": "smartdevicemanagement",
-  "baseUrl": "https://smartdevicemanagement.googleapis.com/",
-  "schemas": {
-    "GoogleHomeEnterpriseSdmV1ParentRelation": {
-      "description": "Represents device relationships, for instance, structure/room to which the device is assigned to. For now this is only filled in the enterprise flow.",
-      "properties": {
-        "displayName": {
-          "readOnly": true,
-          "description": "Output only. The custom name of the relation -- e.g., structure/room where the device is assigned to.",
-          "type": "string"
-        },
-        "parent": {
-          "readOnly": true,
-          "type": "string",
-          "description": "Output only. The name of the relation -- e.g., structure/room where the device is assigned to. For example: \"enterprises/XYZ/structures/ABC\" or \"enterprises/XYZ/structures/ABC/rooms/123\""
-        }
-      },
-      "type": "object",
-      "id": "GoogleHomeEnterpriseSdmV1ParentRelation"
     },
-    "GoogleHomeEnterpriseSdmV1ExecuteDeviceCommandResponse": {
-      "type": "object",
-      "id": "GoogleHomeEnterpriseSdmV1ExecuteDeviceCommandResponse",
-      "properties": {
-        "results": {
-          "additionalProperties": {
-            "description": "Properties of the object.",
-            "type": "any"
-          },
-          "type": "object",
-          "description": "The results of executing the command."
-        }
-      },
-      "description": "Response message for SmartDeviceManagementService.ExecuteDeviceCommand"
-    },
-    "GoogleHomeEnterpriseSdmV1Device": {
-      "id": "GoogleHomeEnterpriseSdmV1Device",
-      "type": "object",
-      "properties": {
-        "traits": {
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object."
-          },
-          "type": "object",
-          "description": "Output only. Device traits.",
-          "readOnly": true
-        },
-        "name": {
-          "description": "Required. The resource name of the device. For example: \"enterprises/XYZ/devices/123\".",
-          "type": "string"
-        },
-        "type": {
-          "type": "string",
-          "description": "Output only. Type of the device for general display purposes. For example: \"THERMOSTAT\". The device type should not be used to deduce or infer functionality of the actual device it is assigned to. Instead, use the returned traits for the device.",
-          "readOnly": true
-        },
-        "parentRelations": {
-          "type": "array",
-          "description": "Assignee details of the device.",
-          "items": {
-            "$ref": "GoogleHomeEnterpriseSdmV1ParentRelation"
-          }
-        }
-      },
-      "description": "Device resource represents an instance of enterprise managed device in the property."
-    },
-    "GoogleHomeEnterpriseSdmV1Structure": {
-      "id": "GoogleHomeEnterpriseSdmV1Structure",
-      "properties": {
-        "name": {
-          "readOnly": true,
-          "description": "Output only. The resource name of the structure. For example: \"enterprises/XYZ/structures/ABC\".",
-          "type": "string"
-        },
-        "traits": {
-          "type": "object",
-          "description": "Structure traits.",
-          "additionalProperties": {
-            "description": "Properties of the object.",
-            "type": "any"
-          }
-        }
-      },
-      "description": "Structure resource represents an instance of enterprise managed home or hotel room.",
-      "type": "object"
-    },
-    "GoogleHomeEnterpriseSdmV1ExecuteDeviceCommandRequest": {
-      "type": "object",
-      "id": "GoogleHomeEnterpriseSdmV1ExecuteDeviceCommandRequest",
-      "properties": {
-        "params": {
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object."
-          },
-          "description": "The command message to execute, represented as a Struct.",
-          "type": "object"
-        },
-        "command": {
-          "description": "The command name to execute, represented by the fully qualified protobuf message name.",
-          "type": "string"
-        }
-      },
-      "description": "Request message for SmartDeviceManagementService.ExecuteDeviceCommand"
-    },
-    "GoogleHomeEnterpriseSdmV1ListDevicesResponse": {
-      "id": "GoogleHomeEnterpriseSdmV1ListDevicesResponse",
-      "properties": {
-        "devices": {
-          "type": "array",
-          "description": "The list of devices.",
-          "items": {
-            "$ref": "GoogleHomeEnterpriseSdmV1Device"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "The pagination token to retrieve the next page of results."
-        }
-      },
-      "type": "object",
-      "description": "Response message for SmartDeviceManagementService.ListDevices"
-    },
-    "GoogleHomeEnterpriseSdmV1ListStructuresResponse": {
-      "properties": {
-        "structures": {
-          "description": "The list of structures.",
-          "items": {
-            "$ref": "GoogleHomeEnterpriseSdmV1Structure"
-          },
-          "type": "array"
-        },
-        "nextPageToken": {
-          "description": "The pagination token to retrieve the next page of results. If this field is omitted, there are no subsequent pages.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Response message for SmartDeviceManagementService.ListStructures",
-      "id": "GoogleHomeEnterpriseSdmV1ListStructuresResponse"
-    },
-    "GoogleHomeEnterpriseSdmV1Room": {
-      "id": "GoogleHomeEnterpriseSdmV1Room",
-      "properties": {
-        "name": {
-          "readOnly": true,
-          "description": "Output only. The resource name of the room. For example: \"enterprises/XYZ/structures/ABC/rooms/123\".",
-          "type": "string"
-        },
-        "traits": {
-          "description": "Room traits.",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object."
-          },
-          "type": "object"
-        }
-      },
-      "type": "object",
-      "description": "Room resource represents an instance of sub-space within a structure such as rooms in a hotel suite or rental apartment."
-    },
-    "GoogleHomeEnterpriseSdmV1ListRoomsResponse": {
-      "description": "Response message for SmartDeviceManagementService.ListRooms",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "The pagination token to retrieve the next page of results. If this field is omitted, there are no subsequent pages."
-        },
-        "rooms": {
-          "items": {
-            "$ref": "GoogleHomeEnterpriseSdmV1Room"
-          },
-          "type": "array",
-          "description": "The list of rooms."
-        }
-      },
-      "id": "GoogleHomeEnterpriseSdmV1ListRoomsResponse"
-    }
-  },
-  "parameters": {
-    "upload_protocol": {
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
-    },
-    "uploadType": {
-      "location": "query",
-      "type": "string",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
-    },
-    "callback": {
-      "location": "query",
-      "type": "string",
-      "description": "JSONP"
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "enum": [
-        "1",
-        "2"
-      ],
-      "location": "query",
-      "description": "V1 error format.",
-      "type": "string"
-    },
-    "quotaUser": {
-      "type": "string",
-      "location": "query",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters."
-    },
-    "access_token": {
-      "location": "query",
-      "type": "string",
-      "description": "OAuth access token."
-    },
-    "fields": {
-      "type": "string",
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response."
-    },
-    "alt": {
-      "description": "Data format for response.",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "type": "string",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "location": "query",
-      "default": "json"
-    },
-    "key": {
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "type": "boolean",
-      "default": "true",
-      "location": "query",
-      "description": "Returns response with indentations and line breaks."
-    }
-  },
-  "revision": "20201022",
-  "protocol": "rest",
-  "description": "Allow select enterprise partners to access, control, and manage Google and Nest devices programmatically.",
-  "servicePath": "",
-  "title": "Smart Device Management API",
-  "ownerName": "Google",
-  "version_module": true,
-  "id": "smartdevicemanagement:v1",
-  "canonicalName": "Smart Device Management",
-  "kind": "discovery#restDescription",
-  "fullyEncodeReservedExpansion": true
-}
+    "servicePath": "",
+    "title": "Smart Device Management API",
+    "version": "v1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/streetviewpublish.v1.json b/googleapiclient/discovery_cache/documents/streetviewpublish.v1.json
index e078c53..5699451 100644
--- a/googleapiclient/discovery_cache/documents/streetviewpublish.v1.json
+++ b/googleapiclient/discovery_cache/documents/streetviewpublish.v1.json
@@ -1,791 +1,791 @@
 {
-  "name": "streetviewpublish",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/streetviewpublish": {
-          "description": "Publish and manage your 360 photos on Google Street View"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/streetviewpublish": {
+                    "description": "Publish and manage your 360 photos on Google Street View"
+                }
+            }
         }
-      }
-    }
-  },
-  "version_module": true,
-  "canonicalName": "Street View Publish",
-  "title": "Street View Publish API",
-  "mtlsRootUrl": "https://streetviewpublish.mtls.googleapis.com/",
-  "protocol": "rest",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "revision": "20201012",
-  "ownerName": "Google",
-  "schemas": {
-    "Place": {
-      "id": "Place",
-      "properties": {
-        "placeId": {
-          "type": "string",
-          "description": "Place identifier, as described in https://developers.google.com/places/place-id."
-        },
-        "languageCode": {
-          "type": "string",
-          "description": "Output-only. The language_code that the name is localized with. This should be the language_code specified in the request, but may be a fallback."
-        },
-        "name": {
-          "type": "string",
-          "description": "Output-only. The name of the place, localized to the language_code."
-        }
-      },
-      "description": "Place metadata for an entity.",
-      "type": "object"
     },
-    "PhotoId": {
-      "type": "object",
-      "properties": {
-        "id": {
-          "type": "string",
-          "description": "Required. A unique identifier for a photo."
-        }
-      },
-      "description": "Identifier for a Photo.",
-      "id": "PhotoId"
+    "basePath": "",
+    "baseUrl": "https://streetviewpublish.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Street View Publish",
+    "description": "Publishes 360 photos to Google Maps, along with position, orientation, and connectivity metadata. Apps can offer an interface for positioning, connecting, and uploading user-generated Street View images. ",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://developers.google.com/streetview/publish/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
     },
-    "BatchUpdatePhotosRequest": {
-      "properties": {
-        "updatePhotoRequests": {
-          "items": {
-            "$ref": "UpdatePhotoRequest"
-          },
-          "type": "array",
-          "description": "Required. List of UpdatePhotoRequests."
-        }
-      },
-      "type": "object",
-      "description": "Request to update the metadata of photos. Updating the pixels of photos is not supported.",
-      "id": "BatchUpdatePhotosRequest"
-    },
-    "Level": {
-      "type": "object",
-      "id": "Level",
-      "description": "Level information containing level number and its corresponding name.",
-      "properties": {
-        "number": {
-          "format": "double",
-          "type": "number",
-          "description": "Floor number, used for ordering. 0 indicates the ground level, 1 indicates the first level above ground level, -1 indicates the first level under ground level. Non-integer values are OK."
-        },
-        "name": {
-          "type": "string",
-          "description": "Required. A name assigned to this Level, restricted to 3 characters. Consider how the elevator buttons would be labeled for this level if there was an elevator."
-        }
-      }
-    },
-    "UpdatePhotoRequest": {
-      "properties": {
-        "photo": {
-          "$ref": "Photo",
-          "description": "Required. Photo object containing the new metadata."
-        },
-        "updateMask": {
-          "type": "string",
-          "description": "Required. Mask that identifies fields on the photo metadata to update. If not present, the old Photo metadata is entirely replaced with the new Photo metadata in this request. The update fails if invalid fields are specified. Multiple fields can be specified in a comma-delimited list. The following fields are valid: * `pose.heading` * `pose.latLngPair` * `pose.pitch` * `pose.roll` * `pose.level` * `pose.altitude` * `connections` * `places` *Note:* When updateMask contains repeated fields, the entire set of repeated values get replaced with the new contents. For example, if updateMask contains `connections` and `UpdatePhotoRequest.photo.connections` is empty, all connections are removed.",
-          "format": "google-fieldmask"
-        }
-      },
-      "id": "UpdatePhotoRequest",
-      "description": "Request to update the metadata of a Photo. Updating the pixels of a photo is not supported.",
-      "type": "object"
-    },
-    "BatchDeletePhotosRequest": {
-      "description": "Request to delete multiple Photos.",
-      "type": "object",
-      "id": "BatchDeletePhotosRequest",
-      "properties": {
-        "photoIds": {
-          "items": {
+    "id": "streetviewpublish:v1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://streetviewpublish.mtls.googleapis.com/",
+    "name": "streetviewpublish",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
             "type": "string"
-          },
-          "type": "array",
-          "description": "Required. IDs of the Photos. HTTP GET requests require the following syntax for the URL query parameter: `photoIds=&photoIds=&...`."
+        },
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      }
     },
-    "Pose": {
-      "type": "object",
-      "properties": {
-        "roll": {
-          "type": "number",
-          "description": "Roll, measured in degrees. Value must be \u003e= 0 and \u003c360. A value of 0 means level with the horizon. NaN indicates an unmeasured quantity.",
-          "format": "double"
-        },
-        "latLngPair": {
-          "$ref": "LatLng",
-          "description": "Latitude and longitude pair of the pose, as explained here: https://cloud.google.com/datastore/docs/reference/rest/Shared.Types/LatLng When creating a Photo, if the latitude and longitude pair are not provided, the geolocation from the exif header is used. A latitude and longitude pair not provided in the photo or exif header causes the photo process to fail."
-        },
-        "pitch": {
-          "format": "double",
-          "type": "number",
-          "description": "Pitch, measured at the center of the photo in degrees. Value must be \u003e=-90 and \u003c= 90. A value of -90 means looking directly down, and a value of 90 means looking directly up. NaN indicates an unmeasured quantity."
-        },
-        "level": {
-          "description": "Level (the floor in a building) used to configure vertical navigation.",
-          "$ref": "Level"
-        },
-        "heading": {
-          "description": "Compass heading, measured at the center of the photo in degrees clockwise from North. Value must be \u003e=0 and \u003c360. NaN indicates an unmeasured quantity.",
-          "type": "number",
-          "format": "double"
-        },
-        "altitude": {
-          "format": "double",
-          "description": "Altitude of the pose in meters above WGS84 ellipsoid. NaN indicates an unmeasured quantity.",
-          "type": "number"
-        },
-        "accuracyMeters": {
-          "format": "float",
-          "description": "The estimated horizontal accuracy of this pose in meters with 68% confidence (one standard deviation). For example, on Android, this value is available from this method: https://developer.android.com/reference/android/location/Location#getAccuracy(). Other platforms have different methods of obtaining similar accuracy estimations.",
-          "type": "number"
-        }
-      },
-      "description": "Raw pose measurement for an entity.",
-      "id": "Pose"
-    },
-    "PhotoResponse": {
-      "type": "object",
-      "description": "Response payload for a single Photo in batch operations including BatchGetPhotos and BatchUpdatePhotos.",
-      "properties": {
-        "status": {
-          "description": "The status for the operation to get or update a single photo in the batch request.",
-          "$ref": "Status"
-        },
+    "protocol": "rest",
+    "resources": {
         "photo": {
-          "$ref": "Photo",
-          "description": "The Photo resource, if the request was successful."
-        }
-      },
-      "id": "PhotoResponse"
-    },
-    "Operation": {
-      "type": "object",
-      "id": "Operation",
-      "description": "This resource represents a long-running operation that is the result of a network API call.",
-      "properties": {
-        "done": {
-          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
-          "type": "boolean"
+            "methods": {
+                "create": {
+                    "description": "After the client finishes uploading the photo with the returned UploadRef, CreatePhoto publishes the uploaded Photo to Street View on Google Maps. Currently, the only way to set heading, pitch, and roll in CreatePhoto is through the [Photo Sphere XMP metadata](https://developers.google.com/streetview/spherical-metadata) in the photo bytes. CreatePhoto ignores the `pose.heading`, `pose.pitch`, `pose.roll`, `pose.altitude`, and `pose.level` fields in Pose. This method returns the following error codes: * google.rpc.Code.INVALID_ARGUMENT if the request is malformed or if the uploaded photo is not a 360 photo. * google.rpc.Code.NOT_FOUND if the upload reference does not exist. * google.rpc.Code.RESOURCE_EXHAUSTED if the account has reached the storage limit.",
+                    "flatPath": "v1/photo",
+                    "httpMethod": "POST",
+                    "id": "streetviewpublish.photo.create",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v1/photo",
+                    "request": {
+                        "$ref": "Photo"
+                    },
+                    "response": {
+                        "$ref": "Photo"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/streetviewpublish"
+                    ]
+                },
+                "delete": {
+                    "description": "Deletes a Photo and its metadata. This method returns the following error codes: * google.rpc.Code.PERMISSION_DENIED if the requesting user did not create the requested photo. * google.rpc.Code.NOT_FOUND if the photo ID does not exist.",
+                    "flatPath": "v1/photo/{photoId}",
+                    "httpMethod": "DELETE",
+                    "id": "streetviewpublish.photo.delete",
+                    "parameterOrder": [
+                        "photoId"
+                    ],
+                    "parameters": {
+                        "photoId": {
+                            "description": "Required. ID of the Photo.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/photo/{photoId}",
+                    "response": {
+                        "$ref": "Empty"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/streetviewpublish"
+                    ]
+                },
+                "get": {
+                    "description": "Gets the metadata of the specified Photo. This method returns the following error codes: * google.rpc.Code.PERMISSION_DENIED if the requesting user did not create the requested Photo. * google.rpc.Code.NOT_FOUND if the requested Photo does not exist. * google.rpc.Code.UNAVAILABLE if the requested Photo is still being indexed.",
+                    "flatPath": "v1/photo/{photoId}",
+                    "httpMethod": "GET",
+                    "id": "streetviewpublish.photo.get",
+                    "parameterOrder": [
+                        "photoId"
+                    ],
+                    "parameters": {
+                        "languageCode": {
+                            "description": "The BCP-47 language code, such as \"en-US\" or \"sr-Latn\". For more information, see http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. If language_code is unspecified, the user's language preference for Google services is used.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "photoId": {
+                            "description": "Required. ID of the Photo.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "view": {
+                            "description": "Required. Specifies if a download URL for the photo bytes should be returned in the Photo response.",
+                            "enum": [
+                                "BASIC",
+                                "INCLUDE_DOWNLOAD_URL"
+                            ],
+                            "enumDescriptions": [
+                                "Server reponses do not include the download URL for the photo bytes. The default value.",
+                                "Server responses include the download URL for the photo bytes."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/photo/{photoId}",
+                    "response": {
+                        "$ref": "Photo"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/streetviewpublish"
+                    ]
+                },
+                "startUpload": {
+                    "description": "Creates an upload session to start uploading photo bytes. The method uses the upload URL of the returned UploadRef to upload the bytes for the Photo. In addition to the photo requirements shown in https://support.google.com/maps/answer/7012050?ref_topic=6275604, the photo must meet the following requirements: * Photo Sphere XMP metadata must be included in the photo metadata. See https://developers.google.com/streetview/spherical-metadata for the required fields. * The pixel size of the photo must meet the size requirements listed in https://support.google.com/maps/answer/7012050?ref_topic=6275604, and the photo must be a full 360 horizontally. After the upload completes, the method uses UploadRef with CreatePhoto to create the Photo object entry.",
+                    "flatPath": "v1/photo:startUpload",
+                    "httpMethod": "POST",
+                    "id": "streetviewpublish.photo.startUpload",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v1/photo:startUpload",
+                    "request": {
+                        "$ref": "Empty"
+                    },
+                    "response": {
+                        "$ref": "UploadRef"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/streetviewpublish"
+                    ]
+                },
+                "update": {
+                    "description": "Updates the metadata of a Photo, such as pose, place association, connections, etc. Changing the pixels of a photo is not supported. Only the fields specified in the updateMask field are used. If `updateMask` is not present, the update applies to all fields. This method returns the following error codes: * google.rpc.Code.PERMISSION_DENIED if the requesting user did not create the requested photo. * google.rpc.Code.INVALID_ARGUMENT if the request is malformed. * google.rpc.Code.NOT_FOUND if the requested photo does not exist. * google.rpc.Code.UNAVAILABLE if the requested Photo is still being indexed.",
+                    "flatPath": "v1/photo/{id}",
+                    "httpMethod": "PUT",
+                    "id": "streetviewpublish.photo.update",
+                    "parameterOrder": [
+                        "id"
+                    ],
+                    "parameters": {
+                        "id": {
+                            "description": "Required. A unique identifier for a photo.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "updateMask": {
+                            "description": "Required. Mask that identifies fields on the photo metadata to update. If not present, the old Photo metadata is entirely replaced with the new Photo metadata in this request. The update fails if invalid fields are specified. Multiple fields can be specified in a comma-delimited list. The following fields are valid: * `pose.heading` * `pose.latLngPair` * `pose.pitch` * `pose.roll` * `pose.level` * `pose.altitude` * `connections` * `places` *Note:* When updateMask contains repeated fields, the entire set of repeated values get replaced with the new contents. For example, if updateMask contains `connections` and `UpdatePhotoRequest.photo.connections` is empty, all connections are removed.",
+                            "format": "google-fieldmask",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/photo/{id}",
+                    "request": {
+                        "$ref": "Photo"
+                    },
+                    "response": {
+                        "$ref": "Photo"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/streetviewpublish"
+                    ]
+                }
+            }
         },
-        "response": {
-          "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "type": "object"
-        },
-        "name": {
-          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
-          "type": "string"
-        },
-        "error": {
-          "$ref": "Status",
-          "description": "The error result of the operation in case of failure or cancellation."
-        },
-        "metadata": {
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "type": "object",
-          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any."
-        }
-      }
-    },
-    "LatLng": {
-      "id": "LatLng",
-      "type": "object",
-      "properties": {
-        "latitude": {
-          "description": "The latitude in degrees. It must be in the range [-90.0, +90.0].",
-          "format": "double",
-          "type": "number"
-        },
-        "longitude": {
-          "description": "The longitude in degrees. It must be in the range [-180.0, +180.0].",
-          "type": "number",
-          "format": "double"
-        }
-      },
-      "description": "An object that represents a latitude/longitude pair. This is expressed as a pair of doubles to represent degrees latitude and degrees longitude. Unless specified otherwise, this must conform to the WGS84 standard. Values must be within normalized ranges."
-    },
-    "UploadRef": {
-      "properties": {
-        "uploadUrl": {
-          "description": "Required. An upload reference should be unique for each user. It follows the form: \"https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}\"",
-          "type": "string"
-        }
-      },
-      "id": "UploadRef",
-      "type": "object",
-      "description": "Upload reference for media files."
-    },
-    "ListPhotosResponse": {
-      "id": "ListPhotosResponse",
-      "description": "Response to list all photos that belong to a user.",
-      "properties": {
         "photos": {
-          "type": "array",
-          "description": "List of photos. The pageSize field in the request determines the number of items returned.",
-          "items": {
-            "$ref": "Photo"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Token to retrieve the next page of results, or empty if there are no more results in the list."
+            "methods": {
+                "batchDelete": {
+                    "description": "Deletes a list of Photos and their metadata. Note that if BatchDeletePhotos fails, either critical fields are missing or there is an authentication error. Even if BatchDeletePhotos succeeds, individual photos in the batch may have failures. These failures are specified in each PhotoResponse.status in BatchDeletePhotosResponse.results. See DeletePhoto for specific failures that can occur per photo.",
+                    "flatPath": "v1/photos:batchDelete",
+                    "httpMethod": "POST",
+                    "id": "streetviewpublish.photos.batchDelete",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v1/photos:batchDelete",
+                    "request": {
+                        "$ref": "BatchDeletePhotosRequest"
+                    },
+                    "response": {
+                        "$ref": "BatchDeletePhotosResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/streetviewpublish"
+                    ]
+                },
+                "batchGet": {
+                    "description": "Gets the metadata of the specified Photo batch. Note that if BatchGetPhotos fails, either critical fields are missing or there is an authentication error. Even if BatchGetPhotos succeeds, individual photos in the batch may have failures. These failures are specified in each PhotoResponse.status in BatchGetPhotosResponse.results. See GetPhoto for specific failures that can occur per photo.",
+                    "flatPath": "v1/photos:batchGet",
+                    "httpMethod": "GET",
+                    "id": "streetviewpublish.photos.batchGet",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "languageCode": {
+                            "description": "The BCP-47 language code, such as \"en-US\" or \"sr-Latn\". For more information, see http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. If language_code is unspecified, the user's language preference for Google services is used.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "photoIds": {
+                            "description": "Required. IDs of the Photos. For HTTP GET requests, the URL query parameter should be `photoIds=&photoIds=&...`.",
+                            "location": "query",
+                            "repeated": true,
+                            "type": "string"
+                        },
+                        "view": {
+                            "description": "Required. Specifies if a download URL for the photo bytes should be returned in the Photo response.",
+                            "enum": [
+                                "BASIC",
+                                "INCLUDE_DOWNLOAD_URL"
+                            ],
+                            "enumDescriptions": [
+                                "Server reponses do not include the download URL for the photo bytes. The default value.",
+                                "Server responses include the download URL for the photo bytes."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/photos:batchGet",
+                    "response": {
+                        "$ref": "BatchGetPhotosResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/streetviewpublish"
+                    ]
+                },
+                "batchUpdate": {
+                    "description": "Updates the metadata of Photos, such as pose, place association, connections, etc. Changing the pixels of photos is not supported. Note that if BatchUpdatePhotos fails, either critical fields are missing or there is an authentication error. Even if BatchUpdatePhotos succeeds, individual photos in the batch may have failures. These failures are specified in each PhotoResponse.status in BatchUpdatePhotosResponse.results. See UpdatePhoto for specific failures that can occur per photo. Only the fields specified in updateMask field are used. If `updateMask` is not present, the update applies to all fields. The number of UpdatePhotoRequest messages in a BatchUpdatePhotosRequest must not exceed 20. *Note:* To update Pose.altitude, Pose.latLngPair has to be filled as well. Otherwise, the request will fail.",
+                    "flatPath": "v1/photos:batchUpdate",
+                    "httpMethod": "POST",
+                    "id": "streetviewpublish.photos.batchUpdate",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v1/photos:batchUpdate",
+                    "request": {
+                        "$ref": "BatchUpdatePhotosRequest"
+                    },
+                    "response": {
+                        "$ref": "BatchUpdatePhotosResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/streetviewpublish"
+                    ]
+                },
+                "list": {
+                    "description": "Lists all the Photos that belong to the user. *Note:* Recently created photos that are still being indexed are not returned in the response.",
+                    "flatPath": "v1/photos",
+                    "httpMethod": "GET",
+                    "id": "streetviewpublish.photos.list",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "filter": {
+                            "description": "Required. The filter expression. For example: `placeId=ChIJj61dQgK6j4AR4GeTYWZsKWw`. The only filter supported at the moment is `placeId`.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "languageCode": {
+                            "description": "The BCP-47 language code, such as \"en-US\" or \"sr-Latn\". For more information, see http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. If language_code is unspecified, the user's language preference for Google services is used.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "pageSize": {
+                            "description": "The maximum number of photos to return. `pageSize` must be non-negative. If `pageSize` is zero or is not provided, the default page size of 100 is used. The number of photos returned in the response may be less than `pageSize` if the number of photos that belong to the user is less than `pageSize`.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The nextPageToken value returned from a previous ListPhotos request, if any.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "view": {
+                            "description": "Required. Specifies if a download URL for the photos bytes should be returned in the Photos response.",
+                            "enum": [
+                                "BASIC",
+                                "INCLUDE_DOWNLOAD_URL"
+                            ],
+                            "enumDescriptions": [
+                                "Server reponses do not include the download URL for the photo bytes. The default value.",
+                                "Server responses include the download URL for the photo bytes."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/photos",
+                    "response": {
+                        "$ref": "ListPhotosResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/streetviewpublish"
+                    ]
+                }
+            }
         }
-      },
-      "type": "object"
     },
-    "Empty": {
-      "id": "Empty",
-      "type": "object",
-      "properties": {},
-      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`."
-    },
-    "Status": {
-      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
-      "type": "object",
-      "id": "Status",
-      "properties": {
-        "details": {
-          "items": {
-            "additionalProperties": {
-              "type": "any",
-              "description": "Properties of the object. Contains field @type with type URL."
+    "revision": "20210114",
+    "rootUrl": "https://streetviewpublish.googleapis.com/",
+    "schemas": {
+        "BatchDeletePhotosRequest": {
+            "description": "Request to delete multiple Photos.",
+            "id": "BatchDeletePhotosRequest",
+            "properties": {
+                "photoIds": {
+                    "description": "Required. IDs of the Photos. HTTP GET requests require the following syntax for the URL query parameter: `photoIds=&photoIds=&...`.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
             },
             "type": "object"
-          },
-          "type": "array",
-          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use."
         },
-        "code": {
-          "format": "int32",
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "type": "integer"
+        "BatchDeletePhotosResponse": {
+            "description": "Response to batch delete of one or more Photos.",
+            "id": "BatchDeletePhotosResponse",
+            "properties": {
+                "status": {
+                    "description": "The status for the operation to delete a single Photo in the batch request.",
+                    "items": {
+                        "$ref": "Status"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
-          "type": "string"
+        "BatchGetPhotosResponse": {
+            "description": "Response to batch get of Photos.",
+            "id": "BatchGetPhotosResponse",
+            "properties": {
+                "results": {
+                    "description": "List of results for each individual Photo requested, in the same order as the requests in BatchGetPhotos.",
+                    "items": {
+                        "$ref": "PhotoResponse"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "BatchUpdatePhotosRequest": {
+            "description": "Request to update the metadata of photos. Updating the pixels of photos is not supported.",
+            "id": "BatchUpdatePhotosRequest",
+            "properties": {
+                "updatePhotoRequests": {
+                    "description": "Required. List of UpdatePhotoRequests.",
+                    "items": {
+                        "$ref": "UpdatePhotoRequest"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "BatchUpdatePhotosResponse": {
+            "description": "Response to batch update of metadata of one or more Photos.",
+            "id": "BatchUpdatePhotosResponse",
+            "properties": {
+                "results": {
+                    "description": "List of results for each individual Photo updated, in the same order as the request.",
+                    "items": {
+                        "$ref": "PhotoResponse"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Connection": {
+            "description": "A connection is the link from a source photo to a destination photo.",
+            "id": "Connection",
+            "properties": {
+                "target": {
+                    "$ref": "PhotoId",
+                    "description": "Required. The destination of the connection from the containing photo to another photo."
+                }
+            },
+            "type": "object"
+        },
+        "Empty": {
+            "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
+            "id": "Empty",
+            "properties": {},
+            "type": "object"
+        },
+        "LatLng": {
+            "description": "An object that represents a latitude/longitude pair. This is expressed as a pair of doubles to represent degrees latitude and degrees longitude. Unless specified otherwise, this must conform to the WGS84 standard. Values must be within normalized ranges.",
+            "id": "LatLng",
+            "properties": {
+                "latitude": {
+                    "description": "The latitude in degrees. It must be in the range [-90.0, +90.0].",
+                    "format": "double",
+                    "type": "number"
+                },
+                "longitude": {
+                    "description": "The longitude in degrees. It must be in the range [-180.0, +180.0].",
+                    "format": "double",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "Level": {
+            "description": "Level information containing level number and its corresponding name.",
+            "id": "Level",
+            "properties": {
+                "name": {
+                    "description": "Required. A name assigned to this Level, restricted to 3 characters. Consider how the elevator buttons would be labeled for this level if there was an elevator.",
+                    "type": "string"
+                },
+                "number": {
+                    "description": "Floor number, used for ordering. 0 indicates the ground level, 1 indicates the first level above ground level, -1 indicates the first level under ground level. Non-integer values are OK.",
+                    "format": "double",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "ListPhotosResponse": {
+            "description": "Response to list all photos that belong to a user.",
+            "id": "ListPhotosResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "Token to retrieve the next page of results, or empty if there are no more results in the list.",
+                    "type": "string"
+                },
+                "photos": {
+                    "description": "List of photos. The pageSize field in the request determines the number of items returned.",
+                    "items": {
+                        "$ref": "Photo"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Operation": {
+            "description": "This resource represents a long-running operation that is the result of a network API call.",
+            "id": "Operation",
+            "properties": {
+                "done": {
+                    "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
+                    "type": "boolean"
+                },
+                "error": {
+                    "$ref": "Status",
+                    "description": "The error result of the operation in case of failure or cancellation."
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
+                    "type": "string"
+                },
+                "response": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "Photo": {
+            "description": "Photo is used to store 360 photos along with photo metadata.",
+            "id": "Photo",
+            "properties": {
+                "captureTime": {
+                    "description": "Absolute time when the photo was captured. When the photo has no exif timestamp, this is used to set a timestamp in the photo metadata.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "connections": {
+                    "description": "Connections to other photos. A connection represents the link from this photo to another photo.",
+                    "items": {
+                        "$ref": "Connection"
+                    },
+                    "type": "array"
+                },
+                "downloadUrl": {
+                    "description": "Output only. The download URL for the photo bytes. This field is set only when GetPhotoRequest.view is set to PhotoView.INCLUDE_DOWNLOAD_URL.",
+                    "type": "string"
+                },
+                "mapsPublishStatus": {
+                    "description": "Output only. Status in Google Maps, whether this photo was published or rejected. Not currently populated.",
+                    "enum": [
+                        "UNSPECIFIED_MAPS_PUBLISH_STATUS",
+                        "PUBLISHED",
+                        "REJECTED_UNKNOWN"
+                    ],
+                    "enumDescriptions": [
+                        "The status of the photo is unknown.",
+                        "The photo is published to the public through Google Maps.",
+                        "The photo has been rejected for an unknown reason."
+                    ],
+                    "type": "string"
+                },
+                "photoId": {
+                    "$ref": "PhotoId",
+                    "description": "Required when updating a photo. Output only when creating a photo. Identifier for the photo, which is unique among all photos in Google."
+                },
+                "places": {
+                    "description": "Places where this photo belongs.",
+                    "items": {
+                        "$ref": "Place"
+                    },
+                    "type": "array"
+                },
+                "pose": {
+                    "$ref": "Pose",
+                    "description": "Pose of the photo."
+                },
+                "shareLink": {
+                    "description": "Output only. The share link for the photo.",
+                    "type": "string"
+                },
+                "thumbnailUrl": {
+                    "description": "Output only. The thumbnail URL for showing a preview of the given photo.",
+                    "type": "string"
+                },
+                "transferStatus": {
+                    "description": "Output only. Status of rights transfer on this photo.",
+                    "enum": [
+                        "TRANSFER_STATUS_UNKNOWN",
+                        "NEVER_TRANSFERRED",
+                        "PENDING",
+                        "COMPLETED",
+                        "REJECTED",
+                        "EXPIRED",
+                        "CANCELLED",
+                        "RECEIVED_VIA_TRANSFER"
+                    ],
+                    "enumDescriptions": [
+                        "The status of this transfer is unspecified.",
+                        "This photo has never been in a transfer.",
+                        "This photo transfer has been initiated, but the receiver has not yet responded.",
+                        "The photo transfer has been completed, and this photo has been transferred to the recipient.",
+                        "The recipient rejected this photo transfer.",
+                        "The photo transfer expired before the recipient took any action.",
+                        "The sender cancelled this photo transfer.",
+                        "The recipient owns this photo due to a rights transfer."
+                    ],
+                    "type": "string"
+                },
+                "uploadReference": {
+                    "$ref": "UploadRef",
+                    "description": "Required when creating a photo. Input only. The resource URL where the photo bytes are uploaded to."
+                },
+                "viewCount": {
+                    "description": "Output only. View count of the photo.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PhotoId": {
+            "description": "Identifier for a Photo.",
+            "id": "PhotoId",
+            "properties": {
+                "id": {
+                    "description": "Required. A unique identifier for a photo.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PhotoResponse": {
+            "description": "Response payload for a single Photo in batch operations including BatchGetPhotos and BatchUpdatePhotos.",
+            "id": "PhotoResponse",
+            "properties": {
+                "photo": {
+                    "$ref": "Photo",
+                    "description": "The Photo resource, if the request was successful."
+                },
+                "status": {
+                    "$ref": "Status",
+                    "description": "The status for the operation to get or update a single photo in the batch request."
+                }
+            },
+            "type": "object"
+        },
+        "Place": {
+            "description": "Place metadata for an entity.",
+            "id": "Place",
+            "properties": {
+                "languageCode": {
+                    "description": "Output-only. The language_code that the name is localized with. This should be the language_code specified in the request, but may be a fallback.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "Output-only. The name of the place, localized to the language_code.",
+                    "type": "string"
+                },
+                "placeId": {
+                    "description": "Place identifier, as described in https://developers.google.com/places/place-id.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Pose": {
+            "description": "Raw pose measurement for an entity.",
+            "id": "Pose",
+            "properties": {
+                "accuracyMeters": {
+                    "description": "The estimated horizontal accuracy of this pose in meters with 68% confidence (one standard deviation). For example, on Android, this value is available from this method: https://developer.android.com/reference/android/location/Location#getAccuracy(). Other platforms have different methods of obtaining similar accuracy estimations.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "altitude": {
+                    "description": "Altitude of the pose in meters above WGS84 ellipsoid. NaN indicates an unmeasured quantity.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "heading": {
+                    "description": "Compass heading, measured at the center of the photo in degrees clockwise from North. Value must be >=0 and <360. NaN indicates an unmeasured quantity.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "latLngPair": {
+                    "$ref": "LatLng",
+                    "description": "Latitude and longitude pair of the pose, as explained here: https://cloud.google.com/datastore/docs/reference/rest/Shared.Types/LatLng When creating a Photo, if the latitude and longitude pair are not provided, the geolocation from the exif header is used. A latitude and longitude pair not provided in the photo or exif header causes the photo process to fail."
+                },
+                "level": {
+                    "$ref": "Level",
+                    "description": "Level (the floor in a building) used to configure vertical navigation."
+                },
+                "pitch": {
+                    "description": "Pitch, measured at the center of the photo in degrees. Value must be >=-90 and <= 90. A value of -90 means looking directly down, and a value of 90 means looking directly up. NaN indicates an unmeasured quantity.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "roll": {
+                    "description": "Roll, measured in degrees. Value must be >= 0 and <360. A value of 0 means level with the horizon. NaN indicates an unmeasured quantity.",
+                    "format": "double",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "Status": {
+            "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
+            "id": "Status",
+            "properties": {
+                "code": {
+                    "description": "The status code, which should be an enum value of google.rpc.Code.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UpdatePhotoRequest": {
+            "description": "Request to update the metadata of a Photo. Updating the pixels of a photo is not supported.",
+            "id": "UpdatePhotoRequest",
+            "properties": {
+                "photo": {
+                    "$ref": "Photo",
+                    "description": "Required. Photo object containing the new metadata."
+                },
+                "updateMask": {
+                    "description": "Required. Mask that identifies fields on the photo metadata to update. If not present, the old Photo metadata is entirely replaced with the new Photo metadata in this request. The update fails if invalid fields are specified. Multiple fields can be specified in a comma-delimited list. The following fields are valid: * `pose.heading` * `pose.latLngPair` * `pose.pitch` * `pose.roll` * `pose.level` * `pose.altitude` * `connections` * `places` *Note:* When updateMask contains repeated fields, the entire set of repeated values get replaced with the new contents. For example, if updateMask contains `connections` and `UpdatePhotoRequest.photo.connections` is empty, all connections are removed.",
+                    "format": "google-fieldmask",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "UploadRef": {
+            "description": "Upload reference for media files.",
+            "id": "UploadRef",
+            "properties": {
+                "uploadUrl": {
+                    "description": "An upload reference should be unique for each user. It follows the form: \"https://streetviewpublish.googleapis.com/media/user/{account_id}/photo/{upload_reference}\"",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         }
-      }
     },
-    "BatchDeletePhotosResponse": {
-      "type": "object",
-      "id": "BatchDeletePhotosResponse",
-      "properties": {
-        "status": {
-          "items": {
-            "$ref": "Status"
-          },
-          "description": "The status for the operation to delete a single Photo in the batch request.",
-          "type": "array"
-        }
-      },
-      "description": "Response to batch delete of one or more Photos."
-    },
-    "BatchGetPhotosResponse": {
-      "description": "Response to batch get of Photos.",
-      "type": "object",
-      "id": "BatchGetPhotosResponse",
-      "properties": {
-        "results": {
-          "type": "array",
-          "items": {
-            "$ref": "PhotoResponse"
-          },
-          "description": "List of results for each individual Photo requested, in the same order as the requests in BatchGetPhotos."
-        }
-      }
-    },
-    "Photo": {
-      "description": "Photo is used to store 360 photos along with photo metadata.",
-      "id": "Photo",
-      "properties": {
-        "mapsPublishStatus": {
-          "type": "string",
-          "description": "Output only. Status in Google Maps, whether this photo was published or rejected. Not currently populated.",
-          "enumDescriptions": [
-            "The status of the photo is unknown.",
-            "The photo is published to the public through Google Maps.",
-            "The photo has been rejected for an unknown reason."
-          ],
-          "enum": [
-            "UNSPECIFIED_MAPS_PUBLISH_STATUS",
-            "PUBLISHED",
-            "REJECTED_UNKNOWN"
-          ]
-        },
-        "downloadUrl": {
-          "type": "string",
-          "description": "Output only. The download URL for the photo bytes. This field is set only when GetPhotoRequest.view is set to PhotoView.INCLUDE_DOWNLOAD_URL."
-        },
-        "transferStatus": {
-          "enum": [
-            "TRANSFER_STATUS_UNKNOWN",
-            "NEVER_TRANSFERRED",
-            "PENDING",
-            "COMPLETED",
-            "REJECTED",
-            "EXPIRED",
-            "CANCELLED",
-            "RECEIVED_VIA_TRANSFER"
-          ],
-          "type": "string",
-          "description": "Output only. Status of rights transfer on this photo.",
-          "enumDescriptions": [
-            "The status of this transfer is unspecified.",
-            "This photo has never been in a transfer.",
-            "This photo transfer has been initiated, but the receiver has not yet responded.",
-            "The photo transfer has been completed, and this photo has been transferred to the recipient.",
-            "The recipient rejected this photo transfer.",
-            "The photo transfer expired before the recipient took any action.",
-            "The sender cancelled this photo transfer.",
-            "The recipient owns this photo due to a rights transfer."
-          ]
-        },
-        "connections": {
-          "items": {
-            "$ref": "Connection"
-          },
-          "description": "Connections to other photos. A connection represents the link from this photo to another photo.",
-          "type": "array"
-        },
-        "viewCount": {
-          "type": "string",
-          "description": "Output only. View count of the photo.",
-          "format": "int64"
-        },
-        "shareLink": {
-          "description": "Output only. The share link for the photo.",
-          "type": "string"
-        },
-        "thumbnailUrl": {
-          "description": "Output only. The thumbnail URL for showing a preview of the given photo.",
-          "type": "string"
-        },
-        "pose": {
-          "description": "Pose of the photo.",
-          "$ref": "Pose"
-        },
-        "captureTime": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "Absolute time when the photo was captured. When the photo has no exif timestamp, this is used to set a timestamp in the photo metadata."
-        },
-        "places": {
-          "description": "Places where this photo belongs.",
-          "items": {
-            "$ref": "Place"
-          },
-          "type": "array"
-        },
-        "photoId": {
-          "$ref": "PhotoId",
-          "description": "Required when updating a photo. Output only when creating a photo. Identifier for the photo, which is unique among all photos in Google."
-        },
-        "uploadReference": {
-          "description": "Required when creating a photo. Input only. The resource URL where the photo bytes are uploaded to.",
-          "$ref": "UploadRef"
-        }
-      },
-      "type": "object"
-    },
-    "BatchUpdatePhotosResponse": {
-      "properties": {
-        "results": {
-          "description": "List of results for each individual Photo updated, in the same order as the request.",
-          "items": {
-            "$ref": "PhotoResponse"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "id": "BatchUpdatePhotosResponse",
-      "description": "Response to batch update of metadata of one or more Photos."
-    },
-    "Connection": {
-      "properties": {
-        "target": {
-          "$ref": "PhotoId",
-          "description": "Required. The destination of the connection from the containing photo to another photo."
-        }
-      },
-      "type": "object",
-      "description": "A connection is the link from a source photo to a destination photo.",
-      "id": "Connection"
-    }
-  },
-  "kind": "discovery#restDescription",
-  "batchPath": "batch",
-  "id": "streetviewpublish:v1",
-  "documentationLink": "https://developers.google.com/streetview/publish/",
-  "discoveryVersion": "v1",
-  "basePath": "",
-  "description": "Publishes 360 photos to Google Maps, along with position, orientation, and connectivity metadata. Apps can offer an interface for positioning, connecting, and uploading user-generated Street View images. ",
-  "parameters": {
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "key": {
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "location": "query",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "enum": [
-        "1",
-        "2"
-      ],
-      "location": "query",
-      "type": "string",
-      "description": "V1 error format."
-    },
-    "oauth_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user."
-    },
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "location": "query",
-      "type": "string"
-    },
-    "quotaUser": {
-      "location": "query",
-      "type": "string",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters."
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "location": "query",
-      "type": "string"
-    },
-    "access_token": {
-      "type": "string",
-      "description": "OAuth access token.",
-      "location": "query"
-    },
-    "alt": {
-      "location": "query",
-      "default": "json",
-      "description": "Data format for response.",
-      "type": "string",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ]
-    }
-  },
-  "ownerDomain": "google.com",
-  "rootUrl": "https://streetviewpublish.googleapis.com/",
-  "baseUrl": "https://streetviewpublish.googleapis.com/",
-  "resources": {
-    "photo": {
-      "methods": {
-        "delete": {
-          "path": "v1/photo/{photoId}",
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameterOrder": [
-            "photoId"
-          ],
-          "httpMethod": "DELETE",
-          "id": "streetviewpublish.photo.delete",
-          "parameters": {
-            "photoId": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "Required. ID of the Photo."
-            }
-          },
-          "flatPath": "v1/photo/{photoId}",
-          "scopes": [
-            "https://www.googleapis.com/auth/streetviewpublish"
-          ],
-          "description": "Deletes a Photo and its metadata. This method returns the following error codes: * google.rpc.Code.PERMISSION_DENIED if the requesting user did not create the requested photo. * google.rpc.Code.NOT_FOUND if the photo ID does not exist."
-        },
-        "startUpload": {
-          "parameters": {},
-          "path": "v1/photo:startUpload",
-          "flatPath": "v1/photo:startUpload",
-          "parameterOrder": [],
-          "id": "streetviewpublish.photo.startUpload",
-          "response": {
-            "$ref": "UploadRef"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/streetviewpublish"
-          ],
-          "httpMethod": "POST",
-          "description": "Creates an upload session to start uploading photo bytes. The method uses the upload URL of the returned UploadRef to upload the bytes for the Photo. In addition to the photo requirements shown in https://support.google.com/maps/answer/7012050?hl=en&ref_topic=6275604, the photo must meet the following requirements: * Photo Sphere XMP metadata must be included in the photo metadata. See https://developers.google.com/streetview/spherical-metadata for the required fields. * The pixel size of the photo must meet the size requirements listed in https://support.google.com/maps/answer/7012050?hl=en&ref_topic=6275604, and the photo must be a full 360 horizontally. After the upload completes, the method uses UploadRef with CreatePhoto to create the Photo object entry.",
-          "request": {
-            "$ref": "Empty"
-          }
-        },
-        "update": {
-          "parameters": {
-            "updateMask": {
-              "format": "google-fieldmask",
-              "description": "Required. Mask that identifies fields on the photo metadata to update. If not present, the old Photo metadata is entirely replaced with the new Photo metadata in this request. The update fails if invalid fields are specified. Multiple fields can be specified in a comma-delimited list. The following fields are valid: * `pose.heading` * `pose.latLngPair` * `pose.pitch` * `pose.roll` * `pose.level` * `pose.altitude` * `connections` * `places` *Note:* When updateMask contains repeated fields, the entire set of repeated values get replaced with the new contents. For example, if updateMask contains `connections` and `UpdatePhotoRequest.photo.connections` is empty, all connections are removed.",
-              "location": "query",
-              "type": "string"
-            },
-            "id": {
-              "description": "Required. A unique identifier for a photo.",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "response": {
-            "$ref": "Photo"
-          },
-          "parameterOrder": [
-            "id"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/streetviewpublish"
-          ],
-          "flatPath": "v1/photo/{id}",
-          "httpMethod": "PUT",
-          "path": "v1/photo/{id}",
-          "description": "Updates the metadata of a Photo, such as pose, place association, connections, etc. Changing the pixels of a photo is not supported. Only the fields specified in the updateMask field are used. If `updateMask` is not present, the update applies to all fields. This method returns the following error codes: * google.rpc.Code.PERMISSION_DENIED if the requesting user did not create the requested photo. * google.rpc.Code.INVALID_ARGUMENT if the request is malformed. * google.rpc.Code.NOT_FOUND if the requested photo does not exist. * google.rpc.Code.UNAVAILABLE if the requested Photo is still being indexed.",
-          "id": "streetviewpublish.photo.update",
-          "request": {
-            "$ref": "Photo"
-          }
-        },
-        "get": {
-          "parameters": {
-            "photoId": {
-              "location": "path",
-              "description": "Required. ID of the Photo.",
-              "type": "string",
-              "required": true
-            },
-            "languageCode": {
-              "type": "string",
-              "description": "The BCP-47 language code, such as \"en-US\" or \"sr-Latn\". For more information, see http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. If language_code is unspecified, the user's language preference for Google services is used.",
-              "location": "query"
-            },
-            "view": {
-              "enum": [
-                "BASIC",
-                "INCLUDE_DOWNLOAD_URL"
-              ],
-              "enumDescriptions": [
-                "Server reponses do not include the download URL for the photo bytes. The default value.",
-                "Server responses include the download URL for the photo bytes."
-              ],
-              "type": "string",
-              "location": "query",
-              "description": "Required. Specifies if a download URL for the photo bytes should be returned in the Photo response."
-            }
-          },
-          "id": "streetviewpublish.photo.get",
-          "description": "Gets the metadata of the specified Photo. This method returns the following error codes: * google.rpc.Code.PERMISSION_DENIED if the requesting user did not create the requested Photo. * google.rpc.Code.NOT_FOUND if the requested Photo does not exist. * google.rpc.Code.UNAVAILABLE if the requested Photo is still being indexed.",
-          "flatPath": "v1/photo/{photoId}",
-          "parameterOrder": [
-            "photoId"
-          ],
-          "path": "v1/photo/{photoId}",
-          "response": {
-            "$ref": "Photo"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/streetviewpublish"
-          ],
-          "httpMethod": "GET"
-        },
-        "create": {
-          "request": {
-            "$ref": "Photo"
-          },
-          "parameters": {},
-          "path": "v1/photo",
-          "flatPath": "v1/photo",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "Photo"
-          },
-          "id": "streetviewpublish.photo.create",
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/streetviewpublish"
-          ],
-          "description": "After the client finishes uploading the photo with the returned UploadRef, CreatePhoto publishes the uploaded Photo to Street View on Google Maps. Currently, the only way to set heading, pitch, and roll in CreatePhoto is through the [Photo Sphere XMP metadata](https://developers.google.com/streetview/spherical-metadata) in the photo bytes. CreatePhoto ignores the `pose.heading`, `pose.pitch`, `pose.roll`, `pose.altitude`, and `pose.level` fields in Pose. This method returns the following error codes: * google.rpc.Code.INVALID_ARGUMENT if the request is malformed or if the uploaded photo is not a 360 photo. * google.rpc.Code.NOT_FOUND if the upload reference does not exist. * google.rpc.Code.RESOURCE_EXHAUSTED if the account has reached the storage limit."
-        }
-      }
-    },
-    "photos": {
-      "methods": {
-        "batchGet": {
-          "parameterOrder": [],
-          "httpMethod": "GET",
-          "flatPath": "v1/photos:batchGet",
-          "parameters": {
-            "photoIds": {
-              "type": "string",
-              "repeated": true,
-              "description": "Required. IDs of the Photos. For HTTP GET requests, the URL query parameter should be `photoIds=&photoIds=&...`.",
-              "location": "query"
-            },
-            "view": {
-              "enumDescriptions": [
-                "Server reponses do not include the download URL for the photo bytes. The default value.",
-                "Server responses include the download URL for the photo bytes."
-              ],
-              "type": "string",
-              "location": "query",
-              "description": "Required. Specifies if a download URL for the photo bytes should be returned in the Photo response.",
-              "enum": [
-                "BASIC",
-                "INCLUDE_DOWNLOAD_URL"
-              ]
-            },
-            "languageCode": {
-              "type": "string",
-              "description": "The BCP-47 language code, such as \"en-US\" or \"sr-Latn\". For more information, see http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. If language_code is unspecified, the user's language preference for Google services is used.",
-              "location": "query"
-            }
-          },
-          "response": {
-            "$ref": "BatchGetPhotosResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/streetviewpublish"
-          ],
-          "path": "v1/photos:batchGet",
-          "id": "streetviewpublish.photos.batchGet",
-          "description": "Gets the metadata of the specified Photo batch. Note that if BatchGetPhotos fails, either critical fields are missing or there is an authentication error. Even if BatchGetPhotos succeeds, individual photos in the batch may have failures. These failures are specified in each PhotoResponse.status in BatchGetPhotosResponse.results. See GetPhoto for specific failures that can occur per photo."
-        },
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/streetviewpublish"
-          ],
-          "id": "streetviewpublish.photos.list",
-          "flatPath": "v1/photos",
-          "description": "Lists all the Photos that belong to the user. *Note:* Recently created photos that are still being indexed are not returned in the response.",
-          "parameters": {
-            "view": {
-              "enum": [
-                "BASIC",
-                "INCLUDE_DOWNLOAD_URL"
-              ],
-              "description": "Required. Specifies if a download URL for the photos bytes should be returned in the Photos response.",
-              "enumDescriptions": [
-                "Server reponses do not include the download URL for the photo bytes. The default value.",
-                "Server responses include the download URL for the photo bytes."
-              ],
-              "type": "string",
-              "location": "query"
-            },
-            "languageCode": {
-              "description": "The BCP-47 language code, such as \"en-US\" or \"sr-Latn\". For more information, see http://www.unicode.org/reports/tr35/#Unicode_locale_identifier. If language_code is unspecified, the user's language preference for Google services is used.",
-              "type": "string",
-              "location": "query"
-            },
-            "pageSize": {
-              "type": "integer",
-              "format": "int32",
-              "description": "The maximum number of photos to return. `pageSize` must be non-negative. If `pageSize` is zero or is not provided, the default page size of 100 is used. The number of photos returned in the response may be less than `pageSize` if the number of photos that belong to the user is less than `pageSize`.",
-              "location": "query"
-            },
-            "filter": {
-              "location": "query",
-              "type": "string",
-              "description": "Required. The filter expression. For example: `placeId=ChIJj61dQgK6j4AR4GeTYWZsKWw`. The only filter supported at the moment is `placeId`."
-            },
-            "pageToken": {
-              "location": "query",
-              "description": "The nextPageToken value returned from a previous ListPhotos request, if any.",
-              "type": "string"
-            }
-          },
-          "parameterOrder": [],
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "ListPhotosResponse"
-          },
-          "path": "v1/photos"
-        },
-        "batchDelete": {
-          "id": "streetviewpublish.photos.batchDelete",
-          "scopes": [
-            "https://www.googleapis.com/auth/streetviewpublish"
-          ],
-          "parameterOrder": [],
-          "parameters": {},
-          "request": {
-            "$ref": "BatchDeletePhotosRequest"
-          },
-          "httpMethod": "POST",
-          "path": "v1/photos:batchDelete",
-          "flatPath": "v1/photos:batchDelete",
-          "description": "Deletes a list of Photos and their metadata. Note that if BatchDeletePhotos fails, either critical fields are missing or there is an authentication error. Even if BatchDeletePhotos succeeds, individual photos in the batch may have failures. These failures are specified in each PhotoResponse.status in BatchDeletePhotosResponse.results. See DeletePhoto for specific failures that can occur per photo.",
-          "response": {
-            "$ref": "BatchDeletePhotosResponse"
-          }
-        },
-        "batchUpdate": {
-          "description": "Updates the metadata of Photos, such as pose, place association, connections, etc. Changing the pixels of photos is not supported. Note that if BatchUpdatePhotos fails, either critical fields are missing or there is an authentication error. Even if BatchUpdatePhotos succeeds, individual photos in the batch may have failures. These failures are specified in each PhotoResponse.status in BatchUpdatePhotosResponse.results. See UpdatePhoto for specific failures that can occur per photo. Only the fields specified in updateMask field are used. If `updateMask` is not present, the update applies to all fields. The number of UpdatePhotoRequest messages in a BatchUpdatePhotosRequest must not exceed 20. *Note:* To update Pose.altitude, Pose.latLngPair has to be filled as well. Otherwise, the request will fail.",
-          "id": "streetviewpublish.photos.batchUpdate",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "BatchUpdatePhotosResponse"
-          },
-          "flatPath": "v1/photos:batchUpdate",
-          "httpMethod": "POST",
-          "parameters": {},
-          "request": {
-            "$ref": "BatchUpdatePhotosRequest"
-          },
-          "path": "v1/photos:batchUpdate",
-          "scopes": [
-            "https://www.googleapis.com/auth/streetviewpublish"
-          ]
-        }
-      }
-    }
-  },
-  "servicePath": "",
-  "version": "v1",
-  "fullyEncodeReservedExpansion": true
-}
+    "servicePath": "",
+    "title": "Street View Publish API",
+    "version": "v1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/tasks.v1.json b/googleapiclient/discovery_cache/documents/tasks.v1.json
index 148d07d..710e8cc 100644
--- a/googleapiclient/discovery_cache/documents/tasks.v1.json
+++ b/googleapiclient/discovery_cache/documents/tasks.v1.json
@@ -1,740 +1,739 @@
 {
-  "name": "tasks",
-  "discoveryVersion": "v1",
-  "mtlsRootUrl": "https://tasks.mtls.googleapis.com/",
-  "basePath": "",
-  "resources": {
-    "tasks": {
-      "methods": {
-        "patch": {
-          "scopes": [
-            "https://www.googleapis.com/auth/tasks"
-          ],
-          "path": "tasks/v1/lists/{tasklist}/tasks/{task}",
-          "flatPath": "tasks/v1/lists/{tasklist}/tasks/{task}",
-          "request": {
-            "$ref": "Task"
-          },
-          "parameters": {
-            "task": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "Task identifier."
-            },
-            "tasklist": {
-              "required": true,
-              "description": "Task list identifier.",
-              "location": "path",
-              "type": "string"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/tasks": {
+                    "description": "Create, edit, organize, and delete all your tasks"
+                },
+                "https://www.googleapis.com/auth/tasks.readonly": {
+                    "description": "View your tasks"
+                }
             }
-          },
-          "description": "Updates the specified task. This method supports patch semantics.",
-          "httpMethod": "PATCH",
-          "response": {
-            "$ref": "Task"
-          },
-          "parameterOrder": [
-            "tasklist",
-            "task"
-          ],
-          "id": "tasks.tasks.patch"
-        },
-        "delete": {
-          "flatPath": "tasks/v1/lists/{tasklist}/tasks/{task}",
-          "parameterOrder": [
-            "tasklist",
-            "task"
-          ],
-          "parameters": {
-            "task": {
-              "required": true,
-              "description": "Task identifier.",
-              "type": "string",
-              "location": "path"
-            },
-            "tasklist": {
-              "required": true,
-              "description": "Task list identifier.",
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/tasks"
-          ],
-          "path": "tasks/v1/lists/{tasklist}/tasks/{task}",
-          "id": "tasks.tasks.delete",
-          "httpMethod": "DELETE",
-          "description": "Deletes the specified task from the task list."
-        },
-        "insert": {
-          "httpMethod": "POST",
-          "parameters": {
-            "parent": {
-              "type": "string",
-              "location": "query",
-              "description": "Parent task identifier. If the task is created at the top level, this parameter is omitted. Optional."
-            },
-            "tasklist": {
-              "description": "Task list identifier.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            },
-            "previous": {
-              "type": "string",
-              "description": "Previous sibling task identifier. If the task is created at the first position among its siblings, this parameter is omitted. Optional.",
-              "location": "query"
-            }
-          },
-          "description": "Creates a new task on the specified task list.",
-          "scopes": [
-            "https://www.googleapis.com/auth/tasks"
-          ],
-          "id": "tasks.tasks.insert",
-          "parameterOrder": [
-            "tasklist"
-          ],
-          "response": {
-            "$ref": "Task"
-          },
-          "flatPath": "tasks/v1/lists/{tasklist}/tasks",
-          "path": "tasks/v1/lists/{tasklist}/tasks",
-          "request": {
-            "$ref": "Task"
-          }
-        },
-        "get": {
-          "description": "Returns the specified task.",
-          "flatPath": "tasks/v1/lists/{tasklist}/tasks/{task}",
-          "id": "tasks.tasks.get",
-          "parameters": {
-            "tasklist": {
-              "location": "path",
-              "description": "Task list identifier.",
-              "type": "string",
-              "required": true
-            },
-            "task": {
-              "description": "Task identifier.",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "response": {
-            "$ref": "Task"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/tasks",
-            "https://www.googleapis.com/auth/tasks.readonly"
-          ],
-          "path": "tasks/v1/lists/{tasklist}/tasks/{task}",
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "tasklist",
-            "task"
-          ]
-        },
-        "update": {
-          "httpMethod": "PUT",
-          "path": "tasks/v1/lists/{tasklist}/tasks/{task}",
-          "scopes": [
-            "https://www.googleapis.com/auth/tasks"
-          ],
-          "parameters": {
-            "tasklist": {
-              "description": "Task list identifier.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            },
-            "task": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "Task identifier."
-            }
-          },
-          "description": "Updates the specified task.",
-          "flatPath": "tasks/v1/lists/{tasklist}/tasks/{task}",
-          "request": {
-            "$ref": "Task"
-          },
-          "id": "tasks.tasks.update",
-          "response": {
-            "$ref": "Task"
-          },
-          "parameterOrder": [
-            "tasklist",
-            "task"
-          ]
-        },
-        "clear": {
-          "scopes": [
-            "https://www.googleapis.com/auth/tasks"
-          ],
-          "description": "Clears all completed tasks from the specified task list. The affected tasks will be marked as 'hidden' and no longer be returned by default when retrieving all tasks for a task list.",
-          "id": "tasks.tasks.clear",
-          "parameterOrder": [
-            "tasklist"
-          ],
-          "path": "tasks/v1/lists/{tasklist}/clear",
-          "httpMethod": "POST",
-          "parameters": {
-            "tasklist": {
-              "type": "string",
-              "description": "Task list identifier.",
-              "location": "path",
-              "required": true
-            }
-          },
-          "flatPath": "tasks/v1/lists/{tasklist}/clear"
-        },
-        "move": {
-          "id": "tasks.tasks.move",
-          "scopes": [
-            "https://www.googleapis.com/auth/tasks"
-          ],
-          "parameters": {
-            "parent": {
-              "type": "string",
-              "location": "query",
-              "description": "New parent task identifier. If the task is moved to the top level, this parameter is omitted. Optional."
-            },
-            "tasklist": {
-              "required": true,
-              "type": "string",
-              "description": "Task list identifier.",
-              "location": "path"
-            },
-            "task": {
-              "location": "path",
-              "description": "Task identifier.",
-              "type": "string",
-              "required": true
-            },
-            "previous": {
-              "description": "New previous sibling task identifier. If the task is moved to the first position among its siblings, this parameter is omitted. Optional.",
-              "type": "string",
-              "location": "query"
-            }
-          },
-          "response": {
-            "$ref": "Task"
-          },
-          "parameterOrder": [
-            "tasklist",
-            "task"
-          ],
-          "httpMethod": "POST",
-          "description": "Moves the specified task to another position in the task list. This can include putting it as a child task under a new parent and/or move it to a different position among its sibling tasks.",
-          "flatPath": "tasks/v1/lists/{tasklist}/tasks/{task}/move",
-          "path": "tasks/v1/lists/{tasklist}/tasks/{task}/move"
-        },
-        "list": {
-          "httpMethod": "GET",
-          "parameters": {
-            "tasklist": {
-              "type": "string",
-              "description": "Task list identifier.",
-              "required": true,
-              "location": "path"
-            },
-            "maxResults": {
-              "location": "query",
-              "description": "Maximum number of task lists returned on one page. Optional. The default is 20 (max allowed: 100).",
-              "format": "int32",
-              "type": "integer"
-            },
-            "completedMin": {
-              "type": "string",
-              "description": "Lower bound for a task's completion date (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by completion date.",
-              "location": "query"
-            },
-            "showDeleted": {
-              "description": "Flag indicating whether deleted tasks are returned in the result. Optional. The default is False.",
-              "location": "query",
-              "type": "boolean"
-            },
-            "pageToken": {
-              "type": "string",
-              "description": "Token specifying the result page to return. Optional.",
-              "location": "query"
-            },
-            "showHidden": {
-              "type": "boolean",
-              "location": "query",
-              "description": "Flag indicating whether hidden tasks are returned in the result. Optional. The default is False."
-            },
-            "dueMin": {
-              "location": "query",
-              "description": "Lower bound for a task's due date (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by due date.",
-              "type": "string"
-            },
-            "completedMax": {
-              "description": "Upper bound for a task's completion date (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by completion date.",
-              "location": "query",
-              "type": "string"
-            },
-            "dueMax": {
-              "description": "Upper bound for a task's due date (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by due date.",
-              "type": "string",
-              "location": "query"
-            },
-            "updatedMin": {
-              "description": "Lower bound for a task's last modification time (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by last modification time.",
-              "location": "query",
-              "type": "string"
-            },
-            "showCompleted": {
-              "type": "boolean",
-              "description": "Flag indicating whether completed tasks are returned in the result. Optional. The default is True. Note that showHidden must also be True to show tasks completed in first party clients, such as the web UI and Google's mobile apps.",
-              "location": "query"
-            }
-          },
-          "path": "tasks/v1/lists/{tasklist}/tasks",
-          "scopes": [
-            "https://www.googleapis.com/auth/tasks",
-            "https://www.googleapis.com/auth/tasks.readonly"
-          ],
-          "response": {
-            "$ref": "Tasks"
-          },
-          "parameterOrder": [
-            "tasklist"
-          ],
-          "flatPath": "tasks/v1/lists/{tasklist}/tasks",
-          "description": "Returns all tasks in the specified task list.",
-          "id": "tasks.tasks.list"
         }
-      }
     },
-    "tasklists": {
-      "methods": {
-        "insert": {
-          "request": {
-            "$ref": "TaskList"
-          },
-          "response": {
-            "$ref": "TaskList"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/tasks"
-          ],
-          "path": "tasks/v1/users/@me/lists",
-          "flatPath": "tasks/v1/users/@me/lists",
-          "parameters": {},
-          "parameterOrder": [],
-          "id": "tasks.tasklists.insert",
-          "httpMethod": "POST",
-          "description": "Creates a new task list and adds it to the authenticated user's task lists."
+    "basePath": "",
+    "baseUrl": "https://tasks.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Tasks",
+    "description": "The Google Tasks API lets you manage your tasks and task lists.",
+    "discoveryVersion": "v1",
+    "documentationLink": "",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "tasks:v1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://tasks.mtls.googleapis.com/",
+    "name": "tasks",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "update": {
-          "scopes": [
-            "https://www.googleapis.com/auth/tasks"
-          ],
-          "request": {
-            "$ref": "TaskList"
-          },
-          "parameters": {
-            "tasklist": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "Task list identifier."
-            }
-          },
-          "parameterOrder": [
-            "tasklist"
-          ],
-          "response": {
-            "$ref": "TaskList"
-          },
-          "path": "tasks/v1/users/@me/lists/{tasklist}",
-          "id": "tasks.tasklists.update",
-          "httpMethod": "PUT",
-          "flatPath": "tasks/v1/users/@me/lists/{tasklist}",
-          "description": "Updates the authenticated user's specified task list."
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
         },
-        "get": {
-          "scopes": [
-            "https://www.googleapis.com/auth/tasks",
-            "https://www.googleapis.com/auth/tasks.readonly"
-          ],
-          "flatPath": "tasks/v1/users/@me/lists/{tasklist}",
-          "id": "tasks.tasklists.get",
-          "description": "Returns the authenticated user's specified task list.",
-          "parameters": {
-            "tasklist": {
-              "description": "Task list identifier.",
-              "type": "string",
-              "location": "path",
-              "required": true
-            }
-          },
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "TaskList"
-          },
-          "path": "tasks/v1/users/@me/lists/{tasklist}",
-          "parameterOrder": [
-            "tasklist"
-          ]
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "patch": {
-          "description": "Updates the authenticated user's specified task list. This method supports patch semantics.",
-          "httpMethod": "PATCH",
-          "parameters": {
-            "tasklist": {
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "description": "Task list identifier."
-            }
-          },
-          "response": {
-            "$ref": "TaskList"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/tasks"
-          ],
-          "parameterOrder": [
-            "tasklist"
-          ],
-          "flatPath": "tasks/v1/users/@me/lists/{tasklist}",
-          "request": {
-            "$ref": "TaskList"
-          },
-          "id": "tasks.tasklists.patch",
-          "path": "tasks/v1/users/@me/lists/{tasklist}"
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
         },
-        "list": {
-          "flatPath": "tasks/v1/users/@me/lists",
-          "parameters": {
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "Token specifying the result page to return. Optional."
-            },
-            "maxResults": {
-              "type": "integer",
-              "location": "query",
-              "description": "Maximum number of task lists returned on one page. Optional. The default is 20 (max allowed: 100).",
-              "format": "int32"
-            }
-          },
-          "response": {
-            "$ref": "TaskLists"
-          },
-          "description": "Returns all the authenticated user's task lists.",
-          "path": "tasks/v1/users/@me/lists",
-          "parameterOrder": [],
-          "id": "tasks.tasklists.list",
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/tasks",
-            "https://www.googleapis.com/auth/tasks.readonly"
-          ]
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
         },
-        "delete": {
-          "path": "tasks/v1/users/@me/lists/{tasklist}",
-          "flatPath": "tasks/v1/users/@me/lists/{tasklist}",
-          "description": "Deletes the authenticated user's specified task list.",
-          "httpMethod": "DELETE",
-          "scopes": [
-            "https://www.googleapis.com/auth/tasks"
-          ],
-          "parameterOrder": [
-            "tasklist"
-          ],
-          "parameters": {
-            "tasklist": {
-              "location": "path",
-              "description": "Task list identifier.",
-              "type": "string",
-              "required": true
-            }
-          },
-          "id": "tasks.tasklists.delete"
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      }
-    }
-  },
-  "batchPath": "batch",
-  "revision": "20200905",
-  "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
-  },
-  "canonicalName": "Tasks",
-  "description": "The Google Tasks API lets you manage your tasks and task lists.",
-  "rootUrl": "https://tasks.googleapis.com/",
-  "servicePath": "",
-  "fullyEncodeReservedExpansion": true,
-  "ownerName": "Google",
-  "baseUrl": "https://tasks.googleapis.com/",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/tasks.readonly": {
-          "description": "View your tasks"
+    },
+    "protocol": "rest",
+    "resources": {
+        "tasklists": {
+            "methods": {
+                "delete": {
+                    "description": "Deletes the authenticated user's specified task list.",
+                    "flatPath": "tasks/v1/users/@me/lists/{tasklist}",
+                    "httpMethod": "DELETE",
+                    "id": "tasks.tasklists.delete",
+                    "parameterOrder": [
+                        "tasklist"
+                    ],
+                    "parameters": {
+                        "tasklist": {
+                            "description": "Task list identifier.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "tasks/v1/users/@me/lists/{tasklist}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/tasks"
+                    ]
+                },
+                "get": {
+                    "description": "Returns the authenticated user's specified task list.",
+                    "flatPath": "tasks/v1/users/@me/lists/{tasklist}",
+                    "httpMethod": "GET",
+                    "id": "tasks.tasklists.get",
+                    "parameterOrder": [
+                        "tasklist"
+                    ],
+                    "parameters": {
+                        "tasklist": {
+                            "description": "Task list identifier.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "tasks/v1/users/@me/lists/{tasklist}",
+                    "response": {
+                        "$ref": "TaskList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/tasks",
+                        "https://www.googleapis.com/auth/tasks.readonly"
+                    ]
+                },
+                "insert": {
+                    "description": "Creates a new task list and adds it to the authenticated user's task lists.",
+                    "flatPath": "tasks/v1/users/@me/lists",
+                    "httpMethod": "POST",
+                    "id": "tasks.tasklists.insert",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "tasks/v1/users/@me/lists",
+                    "request": {
+                        "$ref": "TaskList"
+                    },
+                    "response": {
+                        "$ref": "TaskList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/tasks"
+                    ]
+                },
+                "list": {
+                    "description": "Returns all the authenticated user's task lists.",
+                    "flatPath": "tasks/v1/users/@me/lists",
+                    "httpMethod": "GET",
+                    "id": "tasks.tasklists.list",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "maxResults": {
+                            "description": "Maximum number of task lists returned on one page. Optional. The default is 20 (max allowed: 100).",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Token specifying the result page to return. Optional.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "tasks/v1/users/@me/lists",
+                    "response": {
+                        "$ref": "TaskLists"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/tasks",
+                        "https://www.googleapis.com/auth/tasks.readonly"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates the authenticated user's specified task list. This method supports patch semantics.",
+                    "flatPath": "tasks/v1/users/@me/lists/{tasklist}",
+                    "httpMethod": "PATCH",
+                    "id": "tasks.tasklists.patch",
+                    "parameterOrder": [
+                        "tasklist"
+                    ],
+                    "parameters": {
+                        "tasklist": {
+                            "description": "Task list identifier.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "tasks/v1/users/@me/lists/{tasklist}",
+                    "request": {
+                        "$ref": "TaskList"
+                    },
+                    "response": {
+                        "$ref": "TaskList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/tasks"
+                    ]
+                },
+                "update": {
+                    "description": "Updates the authenticated user's specified task list.",
+                    "flatPath": "tasks/v1/users/@me/lists/{tasklist}",
+                    "httpMethod": "PUT",
+                    "id": "tasks.tasklists.update",
+                    "parameterOrder": [
+                        "tasklist"
+                    ],
+                    "parameters": {
+                        "tasklist": {
+                            "description": "Task list identifier.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "tasks/v1/users/@me/lists/{tasklist}",
+                    "request": {
+                        "$ref": "TaskList"
+                    },
+                    "response": {
+                        "$ref": "TaskList"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/tasks"
+                    ]
+                }
+            }
         },
-        "https://www.googleapis.com/auth/tasks": {
-          "description": "Create, edit, organize, and delete all your tasks"
+        "tasks": {
+            "methods": {
+                "clear": {
+                    "description": "Clears all completed tasks from the specified task list. The affected tasks will be marked as 'hidden' and no longer be returned by default when retrieving all tasks for a task list.",
+                    "flatPath": "tasks/v1/lists/{tasklist}/clear",
+                    "httpMethod": "POST",
+                    "id": "tasks.tasks.clear",
+                    "parameterOrder": [
+                        "tasklist"
+                    ],
+                    "parameters": {
+                        "tasklist": {
+                            "description": "Task list identifier.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "tasks/v1/lists/{tasklist}/clear",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/tasks"
+                    ]
+                },
+                "delete": {
+                    "description": "Deletes the specified task from the task list.",
+                    "flatPath": "tasks/v1/lists/{tasklist}/tasks/{task}",
+                    "httpMethod": "DELETE",
+                    "id": "tasks.tasks.delete",
+                    "parameterOrder": [
+                        "tasklist",
+                        "task"
+                    ],
+                    "parameters": {
+                        "task": {
+                            "description": "Task identifier.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "tasklist": {
+                            "description": "Task list identifier.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "tasks/v1/lists/{tasklist}/tasks/{task}",
+                    "scopes": [
+                        "https://www.googleapis.com/auth/tasks"
+                    ]
+                },
+                "get": {
+                    "description": "Returns the specified task.",
+                    "flatPath": "tasks/v1/lists/{tasklist}/tasks/{task}",
+                    "httpMethod": "GET",
+                    "id": "tasks.tasks.get",
+                    "parameterOrder": [
+                        "tasklist",
+                        "task"
+                    ],
+                    "parameters": {
+                        "task": {
+                            "description": "Task identifier.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "tasklist": {
+                            "description": "Task list identifier.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "tasks/v1/lists/{tasklist}/tasks/{task}",
+                    "response": {
+                        "$ref": "Task"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/tasks",
+                        "https://www.googleapis.com/auth/tasks.readonly"
+                    ]
+                },
+                "insert": {
+                    "description": "Creates a new task on the specified task list.",
+                    "flatPath": "tasks/v1/lists/{tasklist}/tasks",
+                    "httpMethod": "POST",
+                    "id": "tasks.tasks.insert",
+                    "parameterOrder": [
+                        "tasklist"
+                    ],
+                    "parameters": {
+                        "parent": {
+                            "description": "Parent task identifier. If the task is created at the top level, this parameter is omitted. Optional.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "previous": {
+                            "description": "Previous sibling task identifier. If the task is created at the first position among its siblings, this parameter is omitted. Optional.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "tasklist": {
+                            "description": "Task list identifier.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "tasks/v1/lists/{tasklist}/tasks",
+                    "request": {
+                        "$ref": "Task"
+                    },
+                    "response": {
+                        "$ref": "Task"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/tasks"
+                    ]
+                },
+                "list": {
+                    "description": "Returns all tasks in the specified task list.",
+                    "flatPath": "tasks/v1/lists/{tasklist}/tasks",
+                    "httpMethod": "GET",
+                    "id": "tasks.tasks.list",
+                    "parameterOrder": [
+                        "tasklist"
+                    ],
+                    "parameters": {
+                        "completedMax": {
+                            "description": "Upper bound for a task's completion date (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by completion date.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "completedMin": {
+                            "description": "Lower bound for a task's completion date (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by completion date.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "dueMax": {
+                            "description": "Upper bound for a task's due date (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by due date.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "dueMin": {
+                            "description": "Lower bound for a task's due date (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by due date.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "maxResults": {
+                            "description": "Maximum number of task lists returned on one page. Optional. The default is 20 (max allowed: 100).",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "Token specifying the result page to return. Optional.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "showCompleted": {
+                            "description": "Flag indicating whether completed tasks are returned in the result. Optional. The default is True. Note that showHidden must also be True to show tasks completed in first party clients, such as the web UI and Google's mobile apps.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "showDeleted": {
+                            "description": "Flag indicating whether deleted tasks are returned in the result. Optional. The default is False.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "showHidden": {
+                            "description": "Flag indicating whether hidden tasks are returned in the result. Optional. The default is False.",
+                            "location": "query",
+                            "type": "boolean"
+                        },
+                        "tasklist": {
+                            "description": "Task list identifier.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "updatedMin": {
+                            "description": "Lower bound for a task's last modification time (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by last modification time.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "tasks/v1/lists/{tasklist}/tasks",
+                    "response": {
+                        "$ref": "Tasks"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/tasks",
+                        "https://www.googleapis.com/auth/tasks.readonly"
+                    ]
+                },
+                "move": {
+                    "description": "Moves the specified task to another position in the task list. This can include putting it as a child task under a new parent and/or move it to a different position among its sibling tasks.",
+                    "flatPath": "tasks/v1/lists/{tasklist}/tasks/{task}/move",
+                    "httpMethod": "POST",
+                    "id": "tasks.tasks.move",
+                    "parameterOrder": [
+                        "tasklist",
+                        "task"
+                    ],
+                    "parameters": {
+                        "parent": {
+                            "description": "New parent task identifier. If the task is moved to the top level, this parameter is omitted. Optional.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "previous": {
+                            "description": "New previous sibling task identifier. If the task is moved to the first position among its siblings, this parameter is omitted. Optional.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "task": {
+                            "description": "Task identifier.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "tasklist": {
+                            "description": "Task list identifier.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "tasks/v1/lists/{tasklist}/tasks/{task}/move",
+                    "response": {
+                        "$ref": "Task"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/tasks"
+                    ]
+                },
+                "patch": {
+                    "description": "Updates the specified task. This method supports patch semantics.",
+                    "flatPath": "tasks/v1/lists/{tasklist}/tasks/{task}",
+                    "httpMethod": "PATCH",
+                    "id": "tasks.tasks.patch",
+                    "parameterOrder": [
+                        "tasklist",
+                        "task"
+                    ],
+                    "parameters": {
+                        "task": {
+                            "description": "Task identifier.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "tasklist": {
+                            "description": "Task list identifier.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "tasks/v1/lists/{tasklist}/tasks/{task}",
+                    "request": {
+                        "$ref": "Task"
+                    },
+                    "response": {
+                        "$ref": "Task"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/tasks"
+                    ]
+                },
+                "update": {
+                    "description": "Updates the specified task.",
+                    "flatPath": "tasks/v1/lists/{tasklist}/tasks/{task}",
+                    "httpMethod": "PUT",
+                    "id": "tasks.tasks.update",
+                    "parameterOrder": [
+                        "tasklist",
+                        "task"
+                    ],
+                    "parameters": {
+                        "task": {
+                            "description": "Task identifier.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "tasklist": {
+                            "description": "Task list identifier.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "tasks/v1/lists/{tasklist}/tasks/{task}",
+                    "request": {
+                        "$ref": "Task"
+                    },
+                    "response": {
+                        "$ref": "Task"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/tasks"
+                    ]
+                }
+            }
         }
-      }
-    }
-  },
-  "parameters": {
-    "$.xgafv": {
-      "location": "query",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "description": "V1 error format.",
-      "type": "string",
-      "enum": [
-        "1",
-        "2"
-      ]
     },
-    "quotaUser": {
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "location": "query",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "type": "boolean",
-      "default": "true",
-      "description": "Returns response with indentations and line breaks.",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "location": "query",
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
-    },
-    "alt": {
-      "description": "Data format for response.",
-      "default": "json",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "type": "string",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "location": "query"
-    },
-    "key": {
-      "location": "query",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "type": "string"
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "location": "query",
-      "type": "string"
-    },
-    "oauth_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user."
-    },
-    "callback": {
-      "location": "query",
-      "type": "string",
-      "description": "JSONP"
-    },
-    "access_token": {
-      "location": "query",
-      "description": "OAuth access token.",
-      "type": "string"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "location": "query",
-      "type": "string"
-    }
-  },
-  "documentationLink": "",
-  "protocol": "rest",
-  "schemas": {
-    "TaskList": {
-      "properties": {
-        "kind": {
-          "type": "string",
-          "description": "Type of the resource. This is always \"tasks#taskList\"."
-        },
-        "etag": {
-          "type": "string",
-          "description": "ETag of the resource."
-        },
-        "id": {
-          "description": "Task list identifier.",
-          "type": "string"
-        },
-        "selfLink": {
-          "type": "string",
-          "description": "URL pointing to this task list. Used to retrieve, update, or delete this task list."
-        },
-        "title": {
-          "description": "Title of the task list.",
-          "type": "string"
-        },
-        "updated": {
-          "type": "string",
-          "description": "Last modification time of the task list (as a RFC 3339 timestamp)."
-        }
-      },
-      "type": "object",
-      "id": "TaskList"
-    },
-    "Tasks": {
-      "type": "object",
-      "properties": {
-        "etag": {
-          "type": "string",
-          "description": "ETag of the resource."
-        },
-        "items": {
-          "type": "array",
-          "items": {
-            "$ref": "Task"
-          },
-          "description": "Collection of tasks."
-        },
-        "nextPageToken": {
-          "description": "Token used to access the next page of this result.",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Type of the resource. This is always \"tasks#tasks\"."
-        }
-      },
-      "id": "Tasks"
-    },
-    "Task": {
-      "id": "Task",
-      "type": "object",
-      "properties": {
-        "notes": {
-          "description": "Notes describing the task. Optional.",
-          "type": "string"
-        },
-        "deleted": {
-          "type": "boolean",
-          "description": "Flag indicating whether the task has been deleted. The default is False."
-        },
-        "links": {
-          "description": "Collection of links. This collection is read-only.",
-          "items": {
+    "revision": "20210109",
+    "rootUrl": "https://tasks.googleapis.com/",
+    "schemas": {
+        "Task": {
+            "id": "Task",
             "properties": {
-              "type": {
-                "description": "Type of the link, e.g. \"email\".",
-                "type": "string"
-              },
-              "link": {
-                "description": "The URL.",
-                "type": "string"
-              },
-              "description": {
-                "description": "The description. In HTML speak: Everything between \u003ca\u003e and \u003c/a\u003e.",
-                "type": "string"
-              }
+                "completed": {
+                    "description": "Completion date of the task (as a RFC 3339 timestamp). This field is omitted if the task has not been completed.",
+                    "type": "string"
+                },
+                "deleted": {
+                    "description": "Flag indicating whether the task has been deleted. The default is False.",
+                    "type": "boolean"
+                },
+                "due": {
+                    "description": "Due date of the task (as a RFC 3339 timestamp). Optional. The due date only records date information; the time portion of the timestamp is discarded when setting the due date. It isn't possible to read or write the time that a task is due via the API.",
+                    "type": "string"
+                },
+                "etag": {
+                    "description": "ETag of the resource.",
+                    "type": "string"
+                },
+                "hidden": {
+                    "description": "Flag indicating whether the task is hidden. This is the case if the task had been marked completed when the task list was last cleared. The default is False. This field is read-only.",
+                    "type": "boolean"
+                },
+                "id": {
+                    "description": "Task identifier.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Type of the resource. This is always \"tasks#task\".",
+                    "type": "string"
+                },
+                "links": {
+                    "description": "Collection of links. This collection is read-only.",
+                    "items": {
+                        "properties": {
+                            "description": {
+                                "description": "The description. In HTML speak: Everything between <a> and </a>.",
+                                "type": "string"
+                            },
+                            "link": {
+                                "description": "The URL.",
+                                "type": "string"
+                            },
+                            "type": {
+                                "description": "Type of the link, e.g. \"email\".",
+                                "type": "string"
+                            }
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "notes": {
+                    "description": "Notes describing the task. Optional.",
+                    "type": "string"
+                },
+                "parent": {
+                    "description": "Parent task identifier. This field is omitted if it is a top-level task. This field is read-only. Use the \"move\" method to move the task under a different parent or to the top level.",
+                    "type": "string"
+                },
+                "position": {
+                    "description": "String indicating the position of the task among its sibling tasks under the same parent task or at the top level. If this string is greater than another task's corresponding position string according to lexicographical ordering, the task is positioned after the other task under the same parent task (or at the top level). This field is read-only. Use the \"move\" method to move the task to another position.",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "URL pointing to this task. Used to retrieve, update, or delete this task.",
+                    "type": "string"
+                },
+                "status": {
+                    "description": "Status of the task. This is either \"needsAction\" or \"completed\".",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Title of the task.",
+                    "type": "string"
+                },
+                "updated": {
+                    "description": "Last modification time of the task (as a RFC 3339 timestamp).",
+                    "type": "string"
+                }
             },
             "type": "object"
-          },
-          "type": "array"
         },
-        "parent": {
-          "type": "string",
-          "description": "Parent task identifier. This field is omitted if it is a top-level task. This field is read-only. Use the \"move\" method to move the task under a different parent or to the top level."
+        "TaskList": {
+            "id": "TaskList",
+            "properties": {
+                "etag": {
+                    "description": "ETag of the resource.",
+                    "type": "string"
+                },
+                "id": {
+                    "description": "Task list identifier.",
+                    "type": "string"
+                },
+                "kind": {
+                    "description": "Type of the resource. This is always \"tasks#taskList\".",
+                    "type": "string"
+                },
+                "selfLink": {
+                    "description": "URL pointing to this task list. Used to retrieve, update, or delete this task list.",
+                    "type": "string"
+                },
+                "title": {
+                    "description": "Title of the task list.",
+                    "type": "string"
+                },
+                "updated": {
+                    "description": "Last modification time of the task list (as a RFC 3339 timestamp).",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "title": {
-          "description": "Title of the task.",
-          "type": "string"
+        "TaskLists": {
+            "id": "TaskLists",
+            "properties": {
+                "etag": {
+                    "description": "ETag of the resource.",
+                    "type": "string"
+                },
+                "items": {
+                    "description": "Collection of task lists.",
+                    "items": {
+                        "$ref": "TaskList"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Type of the resource. This is always \"tasks#taskLists\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Token that can be used to request the next page of this result.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "hidden": {
-          "type": "boolean",
-          "description": "Flag indicating whether the task is hidden. This is the case if the task had been marked completed when the task list was last cleared. The default is False. This field is read-only."
-        },
-        "due": {
-          "type": "string",
-          "description": "Due date of the task (as a RFC 3339 timestamp). Optional. The due date only records date information; the time portion of the timestamp is discarded when setting the due date. It isn't possible to read or write the time that a task is due via the API."
-        },
-        "position": {
-          "description": "String indicating the position of the task among its sibling tasks under the same parent task or at the top level. If this string is greater than another task's corresponding position string according to lexicographical ordering, the task is positioned after the other task under the same parent task (or at the top level). This field is read-only. Use the \"move\" method to move the task to another position.",
-          "type": "string"
-        },
-        "completed": {
-          "type": "string",
-          "description": "Completion date of the task (as a RFC 3339 timestamp). This field is omitted if the task has not been completed."
-        },
-        "etag": {
-          "description": "ETag of the resource.",
-          "type": "string"
-        },
-        "selfLink": {
-          "description": "URL pointing to this task. Used to retrieve, update, or delete this task.",
-          "type": "string"
-        },
-        "status": {
-          "description": "Status of the task. This is either \"needsAction\" or \"completed\".",
-          "type": "string"
-        },
-        "id": {
-          "description": "Task identifier.",
-          "type": "string"
-        },
-        "kind": {
-          "type": "string",
-          "description": "Type of the resource. This is always \"tasks#task\"."
-        },
-        "updated": {
-          "type": "string",
-          "description": "Last modification time of the task (as a RFC 3339 timestamp)."
+        "Tasks": {
+            "id": "Tasks",
+            "properties": {
+                "etag": {
+                    "description": "ETag of the resource.",
+                    "type": "string"
+                },
+                "items": {
+                    "description": "Collection of tasks.",
+                    "items": {
+                        "$ref": "Task"
+                    },
+                    "type": "array"
+                },
+                "kind": {
+                    "description": "Type of the resource. This is always \"tasks#tasks\".",
+                    "type": "string"
+                },
+                "nextPageToken": {
+                    "description": "Token used to access the next page of this result.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         }
-      },
-      "description": "LINT.IfChange"
     },
-    "TaskLists": {
-      "properties": {
-        "items": {
-          "items": {
-            "$ref": "TaskList"
-          },
-          "type": "array",
-          "description": "Collection of task lists."
-        },
-        "kind": {
-          "description": "Type of the resource. This is always \"tasks#taskLists\".",
-          "type": "string"
-        },
-        "nextPageToken": {
-          "description": "Token that can be used to request the next page of this result.",
-          "type": "string"
-        },
-        "etag": {
-          "type": "string",
-          "description": "ETag of the resource."
-        }
-      },
-      "id": "TaskLists",
-      "type": "object"
-    }
-  },
-  "ownerDomain": "google.com",
-  "version": "v1",
-  "kind": "discovery#restDescription",
-  "title": "Tasks API",
-  "id": "tasks:v1"
-}
+    "servicePath": "",
+    "title": "Tasks API",
+    "version": "v1"
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/texttospeech.v1.json b/googleapiclient/discovery_cache/documents/texttospeech.v1.json
index 29de22d..36a4106 100644
--- a/googleapiclient/discovery_cache/documents/texttospeech.v1.json
+++ b/googleapiclient/discovery_cache/documents/texttospeech.v1.json
@@ -1,344 +1,344 @@
 {
-  "canonicalName": "Texttospeech",
-  "kind": "discovery#restDescription",
-  "ownerDomain": "google.com",
-  "description": "Synthesizes natural-sounding speech by applying powerful neural network models.",
-  "resources": {
-    "voices": {
-      "methods": {
-        "list": {
-          "description": "Returns a list of Voice supported for synthesis.",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "id": "texttospeech.voices.list",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "ListVoicesResponse"
-          },
-          "path": "v1/voices",
-          "httpMethod": "GET",
-          "parameters": {
-            "languageCode": {
-              "type": "string",
-              "description": "Optional. Recommended. [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag. If specified, the ListVoices call will only return voices that can be used to synthesize this language_code. E.g. when specifying \"en-NZ\", you will get supported \"en-\\*\" voices; when specifying \"no\", you will get supported \"no-\\*\" (Norwegian) and \"nb-\\*\" (Norwegian Bokmal) voices; specifying \"zh\" will also get supported \"cmn-\\*\" voices; specifying \"zh-hk\" will also get supported \"yue-\\*\" voices.",
-              "location": "query"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
+                }
             }
-          },
-          "flatPath": "v1/voices"
         }
-      }
     },
-    "text": {
-      "methods": {
-        "synthesize": {
-          "parameters": {},
-          "id": "texttospeech.text.synthesize",
-          "path": "v1/text:synthesize",
-          "response": {
-            "$ref": "SynthesizeSpeechResponse"
-          },
-          "httpMethod": "POST",
-          "request": {
-            "$ref": "SynthesizeSpeechRequest"
-          },
-          "parameterOrder": [],
-          "description": "Synthesizes speech synchronously: receive results after all text input has been processed.",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1/text:synthesize"
-        }
-      }
-    }
-  },
-  "name": "texttospeech",
-  "title": "Cloud Text-to-Speech API",
-  "documentationLink": "https://cloud.google.com/text-to-speech/",
-  "parameters": {
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "location": "query",
-      "type": "string"
+    "basePath": "",
+    "baseUrl": "https://texttospeech.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Texttospeech",
+    "description": "Synthesizes natural-sounding speech by applying powerful neural network models.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/text-to-speech/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
     },
-    "key": {
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "location": "query",
-      "type": "string"
-    },
-    "quotaUser": {
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "type": "string",
-      "location": "query"
-    },
-    "fields": {
-      "type": "string",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "location": "query"
-    },
-    "callback": {
-      "type": "string",
-      "location": "query",
-      "description": "JSONP"
-    },
-    "upload_protocol": {
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "location": "query"
-    },
-    "alt": {
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "default": "json",
-      "type": "string",
-      "description": "Data format for response.",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "location": "query"
-    },
-    "$.xgafv": {
-      "type": "string",
-      "description": "V1 error format.",
-      "location": "query",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "enum": [
-        "1",
-        "2"
-      ]
-    },
-    "access_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth access token."
-    },
-    "uploadType": {
-      "location": "query",
-      "type": "string",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    }
-  },
-  "protocol": "rest",
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "batchPath": "batch",
-  "rootUrl": "https://texttospeech.googleapis.com/",
-  "schemas": {
-    "SynthesisInput": {
-      "id": "SynthesisInput",
-      "properties": {
-        "ssml": {
-          "type": "string",
-          "description": "The SSML document to be synthesized. The SSML document must be valid and well-formed. Otherwise the RPC will fail and return google.rpc.Code.INVALID_ARGUMENT. For more information, see [SSML](https://cloud.google.com/text-to-speech/docs/ssml)."
+    "id": "texttospeech:v1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://texttospeech.mtls.googleapis.com/",
+    "name": "texttospeech",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
         },
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        }
+    },
+    "protocol": "rest",
+    "resources": {
         "text": {
-          "description": "The raw text to be synthesized.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Contains text input to be synthesized. Either `text` or `ssml` must be supplied. Supplying both or neither returns google.rpc.Code.INVALID_ARGUMENT. The input size is limited to 5000 characters."
-    },
-    "SynthesizeSpeechRequest": {
-      "type": "object",
-      "properties": {
-        "voice": {
-          "description": "Required. The desired voice of the synthesized audio.",
-          "$ref": "VoiceSelectionParams"
+            "methods": {
+                "synthesize": {
+                    "description": "Synthesizes speech synchronously: receive results after all text input has been processed.",
+                    "flatPath": "v1/text:synthesize",
+                    "httpMethod": "POST",
+                    "id": "texttospeech.text.synthesize",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v1/text:synthesize",
+                    "request": {
+                        "$ref": "SynthesizeSpeechRequest"
+                    },
+                    "response": {
+                        "$ref": "SynthesizeSpeechResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                    ]
+                }
+            }
         },
-        "audioConfig": {
-          "$ref": "AudioConfig",
-          "description": "Required. The configuration of the synthesized audio."
-        },
-        "input": {
-          "$ref": "SynthesisInput",
-          "description": "Required. The Synthesizer requires either plain text or SSML as input."
-        }
-      },
-      "id": "SynthesizeSpeechRequest",
-      "description": "The top-level message sent by the client for the `SynthesizeSpeech` method."
-    },
-    "Voice": {
-      "type": "object",
-      "properties": {
-        "naturalSampleRateHertz": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The natural sample rate (in hertz) for this voice."
-        },
-        "ssmlGender": {
-          "type": "string",
-          "description": "The gender of this voice.",
-          "enumDescriptions": [
-            "An unspecified gender. In VoiceSelectionParams, this means that the client doesn't care which gender the selected voice will have. In the Voice field of ListVoicesResponse, this may mean that the voice doesn't fit any of the other categories in this enum, or that the gender of the voice isn't known.",
-            "A male voice.",
-            "A female voice.",
-            "A gender-neutral voice. This voice is not yet supported."
-          ],
-          "enum": [
-            "SSML_VOICE_GENDER_UNSPECIFIED",
-            "MALE",
-            "FEMALE",
-            "NEUTRAL"
-          ]
-        },
-        "languageCodes": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "The languages that this voice supports, expressed as [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tags (e.g. \"en-US\", \"es-419\", \"cmn-tw\")."
-        },
-        "name": {
-          "type": "string",
-          "description": "The name of this voice. Each distinct voice has a unique name."
-        }
-      },
-      "id": "Voice",
-      "description": "Description of a voice supported by the TTS service."
-    },
-    "ListVoicesResponse": {
-      "properties": {
         "voices": {
-          "items": {
-            "$ref": "Voice"
-          },
-          "description": "The list of voices.",
-          "type": "array"
+            "methods": {
+                "list": {
+                    "description": "Returns a list of Voice supported for synthesis.",
+                    "flatPath": "v1/voices",
+                    "httpMethod": "GET",
+                    "id": "texttospeech.voices.list",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "languageCode": {
+                            "description": "Optional. Recommended. [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag. If not specified, the API will return all supported voices. If specified, the ListVoices call will only return voices that can be used to synthesize this language_code. E.g. when specifying \"en-NZ\", you will get supported \"en-NZ\" voices; when specifying \"no\", you will get supported \"no-\\*\" (Norwegian) and \"nb-\\*\" (Norwegian Bokmal) voices; specifying \"zh\" will also get supported \"cmn-\\*\" voices; specifying \"zh-hk\" will also get supported \"yue-hk\" voices.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/voices",
+                    "response": {
+                        "$ref": "ListVoicesResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                    ]
+                }
+            }
         }
-      },
-      "description": "The message returned to the client by the `ListVoices` method.",
-      "type": "object",
-      "id": "ListVoicesResponse"
     },
-    "AudioConfig": {
-      "properties": {
-        "effectsProfileId": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "Optional. Input only. An identifier which selects 'audio effects' profiles that are applied on (post synthesized) text to speech. Effects are applied on top of each other in the order they are given. See [audio profiles](https://cloud.google.com/text-to-speech/docs/audio-profiles) for current supported profile ids."
+    "revision": "20210225",
+    "rootUrl": "https://texttospeech.googleapis.com/",
+    "schemas": {
+        "AudioConfig": {
+            "description": "Description of audio data to be synthesized.",
+            "id": "AudioConfig",
+            "properties": {
+                "audioEncoding": {
+                    "description": "Required. The format of the audio byte stream.",
+                    "enum": [
+                        "AUDIO_ENCODING_UNSPECIFIED",
+                        "LINEAR16",
+                        "MP3",
+                        "OGG_OPUS"
+                    ],
+                    "enumDescriptions": [
+                        "Not specified. Will return result google.rpc.Code.INVALID_ARGUMENT.",
+                        "Uncompressed 16-bit signed little-endian samples (Linear PCM). Audio content returned as LINEAR16 also contains a WAV header.",
+                        "MP3 audio at 32kbps.",
+                        "Opus encoded audio wrapped in an ogg container. The result will be a file which can be played natively on Android, and in browsers (at least Chrome and Firefox). The quality of the encoding is considerably higher than MP3 while using approximately the same bitrate."
+                    ],
+                    "type": "string"
+                },
+                "effectsProfileId": {
+                    "description": "Optional. Input only. An identifier which selects 'audio effects' profiles that are applied on (post synthesized) text to speech. Effects are applied on top of each other in the order they are given. See [audio profiles](https://cloud.google.com/text-to-speech/docs/audio-profiles) for current supported profile ids.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "pitch": {
+                    "description": "Optional. Input only. Speaking pitch, in the range [-20.0, 20.0]. 20 means increase 20 semitones from the original pitch. -20 means decrease 20 semitones from the original pitch.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "sampleRateHertz": {
+                    "description": "Optional. The synthesis sample rate (in hertz) for this audio. When this is specified in SynthesizeSpeechRequest, if this is different from the voice's natural sample rate, then the synthesizer will honor this request by converting to the desired sample rate (which might result in worse audio quality), unless the specified sample rate is not supported for the encoding chosen, in which case it will fail the request and return google.rpc.Code.INVALID_ARGUMENT.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "speakingRate": {
+                    "description": "Optional. Input only. Speaking rate/speed, in the range [0.25, 4.0]. 1.0 is the normal native speed supported by the specific voice. 2.0 is twice as fast, and 0.5 is half as fast. If unset(0.0), defaults to the native 1.0 speed. Any other values < 0.25 or > 4.0 will return an error.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "volumeGainDb": {
+                    "description": "Optional. Input only. Volume gain (in dB) of the normal native volume supported by the specific voice, in the range [-96.0, 16.0]. If unset, or set to a value of 0.0 (dB), will play at normal native signal amplitude. A value of -6.0 (dB) will play at approximately half the amplitude of the normal native signal amplitude. A value of +6.0 (dB) will play at approximately twice the amplitude of the normal native signal amplitude. Strongly recommend not to exceed +10 (dB) as there's usually no effective increase in loudness for any value greater than that.",
+                    "format": "double",
+                    "type": "number"
+                }
+            },
+            "type": "object"
         },
-        "volumeGainDb": {
-          "description": "Optional. Input only. Volume gain (in dB) of the normal native volume supported by the specific voice, in the range [-96.0, 16.0]. If unset, or set to a value of 0.0 (dB), will play at normal native signal amplitude. A value of -6.0 (dB) will play at approximately half the amplitude of the normal native signal amplitude. A value of +6.0 (dB) will play at approximately twice the amplitude of the normal native signal amplitude. Strongly recommend not to exceed +10 (dB) as there's usually no effective increase in loudness for any value greater than that.",
-          "type": "number",
-          "format": "double"
+        "ListVoicesResponse": {
+            "description": "The message returned to the client by the `ListVoices` method.",
+            "id": "ListVoicesResponse",
+            "properties": {
+                "voices": {
+                    "description": "The list of voices.",
+                    "items": {
+                        "$ref": "Voice"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         },
-        "audioEncoding": {
-          "type": "string",
-          "enumDescriptions": [
-            "Not specified. Will return result google.rpc.Code.INVALID_ARGUMENT.",
-            "Uncompressed 16-bit signed little-endian samples (Linear PCM). Audio content returned as LINEAR16 also contains a WAV header.",
-            "MP3 audio at 32kbps.",
-            "Opus encoded audio wrapped in an ogg container. The result will be a file which can be played natively on Android, and in browsers (at least Chrome and Firefox). The quality of the encoding is considerably higher than MP3 while using approximately the same bitrate."
-          ],
-          "enum": [
-            "AUDIO_ENCODING_UNSPECIFIED",
-            "LINEAR16",
-            "MP3",
-            "OGG_OPUS"
-          ],
-          "description": "Required. The format of the audio byte stream."
+        "SynthesisInput": {
+            "description": "Contains text input to be synthesized. Either `text` or `ssml` must be supplied. Supplying both or neither returns google.rpc.Code.INVALID_ARGUMENT. The input size is limited to 5000 characters.",
+            "id": "SynthesisInput",
+            "properties": {
+                "ssml": {
+                    "description": "The SSML document to be synthesized. The SSML document must be valid and well-formed. Otherwise the RPC will fail and return google.rpc.Code.INVALID_ARGUMENT. For more information, see [SSML](https://cloud.google.com/text-to-speech/docs/ssml).",
+                    "type": "string"
+                },
+                "text": {
+                    "description": "The raw text to be synthesized.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "pitch": {
-          "type": "number",
-          "description": "Optional. Input only. Speaking pitch, in the range [-20.0, 20.0]. 20 means increase 20 semitones from the original pitch. -20 means decrease 20 semitones from the original pitch.",
-          "format": "double"
+        "SynthesizeSpeechRequest": {
+            "description": "The top-level message sent by the client for the `SynthesizeSpeech` method.",
+            "id": "SynthesizeSpeechRequest",
+            "properties": {
+                "audioConfig": {
+                    "$ref": "AudioConfig",
+                    "description": "Required. The configuration of the synthesized audio."
+                },
+                "input": {
+                    "$ref": "SynthesisInput",
+                    "description": "Required. The Synthesizer requires either plain text or SSML as input."
+                },
+                "voice": {
+                    "$ref": "VoiceSelectionParams",
+                    "description": "Required. The desired voice of the synthesized audio."
+                }
+            },
+            "type": "object"
         },
-        "sampleRateHertz": {
-          "format": "int32",
-          "description": "Optional. The synthesis sample rate (in hertz) for this audio. When this is specified in SynthesizeSpeechRequest, if this is different from the voice's natural sample rate, then the synthesizer will honor this request by converting to the desired sample rate (which might result in worse audio quality), unless the specified sample rate is not supported for the encoding chosen, in which case it will fail the request and return google.rpc.Code.INVALID_ARGUMENT.",
-          "type": "integer"
+        "SynthesizeSpeechResponse": {
+            "description": "The message returned to the client by the `SynthesizeSpeech` method.",
+            "id": "SynthesizeSpeechResponse",
+            "properties": {
+                "audioContent": {
+                    "description": "The audio data bytes encoded as specified in the request, including the header for encodings that are wrapped in containers (e.g. MP3, OGG_OPUS). For LINEAR16 audio, we include the WAV header. Note: as with all bytes fields, protobuffers use a pure binary representation, whereas JSON representations use base64.",
+                    "format": "byte",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         },
-        "speakingRate": {
-          "type": "number",
-          "format": "double",
-          "description": "Optional. Input only. Speaking rate/speed, in the range [0.25, 4.0]. 1.0 is the normal native speed supported by the specific voice. 2.0 is twice as fast, and 0.5 is half as fast. If unset(0.0), defaults to the native 1.0 speed. Any other values \u003c 0.25 or \u003e 4.0 will return an error."
+        "Voice": {
+            "description": "Description of a voice supported by the TTS service.",
+            "id": "Voice",
+            "properties": {
+                "languageCodes": {
+                    "description": "The languages that this voice supports, expressed as [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tags (e.g. \"en-US\", \"es-419\", \"cmn-tw\").",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "name": {
+                    "description": "The name of this voice. Each distinct voice has a unique name.",
+                    "type": "string"
+                },
+                "naturalSampleRateHertz": {
+                    "description": "The natural sample rate (in hertz) for this voice.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "ssmlGender": {
+                    "description": "The gender of this voice.",
+                    "enum": [
+                        "SSML_VOICE_GENDER_UNSPECIFIED",
+                        "MALE",
+                        "FEMALE",
+                        "NEUTRAL"
+                    ],
+                    "enumDescriptions": [
+                        "An unspecified gender. In VoiceSelectionParams, this means that the client doesn't care which gender the selected voice will have. In the Voice field of ListVoicesResponse, this may mean that the voice doesn't fit any of the other categories in this enum, or that the gender of the voice isn't known.",
+                        "A male voice.",
+                        "A female voice.",
+                        "A gender-neutral voice. This voice is not yet supported."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "VoiceSelectionParams": {
+            "description": "Description of which voice to use for a synthesis request.",
+            "id": "VoiceSelectionParams",
+            "properties": {
+                "languageCode": {
+                    "description": "Required. The language (and potentially also the region) of the voice expressed as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag, e.g. \"en-US\". This should not include a script tag (e.g. use \"cmn-cn\" rather than \"cmn-Hant-cn\"), because the script will be inferred from the input provided in the SynthesisInput. The TTS service will use this parameter to help choose an appropriate voice. Note that the TTS service may choose a voice with a slightly different language code than the one selected; it may substitute a different region (e.g. using en-US rather than en-CA if there isn't a Canadian voice available), or even a different language, e.g. using \"nb\" (Norwegian Bokmal) instead of \"no\" (Norwegian)\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The name of the voice. If not set, the service will choose a voice based on the other parameters such as language_code and gender.",
+                    "type": "string"
+                },
+                "ssmlGender": {
+                    "description": "The preferred gender of the voice. If not set, the service will choose a voice based on the other parameters such as language_code and name. Note that this is only a preference, not requirement; if a voice of the appropriate gender is not available, the synthesizer should substitute a voice with a different gender rather than failing the request.",
+                    "enum": [
+                        "SSML_VOICE_GENDER_UNSPECIFIED",
+                        "MALE",
+                        "FEMALE",
+                        "NEUTRAL"
+                    ],
+                    "enumDescriptions": [
+                        "An unspecified gender. In VoiceSelectionParams, this means that the client doesn't care which gender the selected voice will have. In the Voice field of ListVoicesResponse, this may mean that the voice doesn't fit any of the other categories in this enum, or that the gender of the voice isn't known.",
+                        "A male voice.",
+                        "A female voice.",
+                        "A gender-neutral voice. This voice is not yet supported."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
         }
-      },
-      "type": "object",
-      "id": "AudioConfig",
-      "description": "Description of audio data to be synthesized."
     },
-    "SynthesizeSpeechResponse": {
-      "type": "object",
-      "id": "SynthesizeSpeechResponse",
-      "description": "The message returned to the client by the `SynthesizeSpeech` method.",
-      "properties": {
-        "audioContent": {
-          "type": "string",
-          "format": "byte",
-          "description": "The audio data bytes encoded as specified in the request, including the header for encodings that are wrapped in containers (e.g. MP3, OGG_OPUS). For LINEAR16 audio, we include the WAV header. Note: as with all bytes fields, protobuffers use a pure binary representation, whereas JSON representations use base64."
-        }
-      }
-    },
-    "VoiceSelectionParams": {
-      "type": "object",
-      "description": "Description of which voice to use for a synthesis request.",
-      "id": "VoiceSelectionParams",
-      "properties": {
-        "languageCode": {
-          "type": "string",
-          "description": "Required. The language (and potentially also the region) of the voice expressed as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag, e.g. \"en-US\". This should not include a script tag (e.g. use \"cmn-cn\" rather than \"cmn-Hant-cn\"), because the script will be inferred from the input provided in the SynthesisInput. The TTS service will use this parameter to help choose an appropriate voice. Note that the TTS service may choose a voice with a slightly different language code than the one selected; it may substitute a different region (e.g. using en-US rather than en-CA if there isn't a Canadian voice available), or even a different language, e.g. using \"nb\" (Norwegian Bokmal) instead of \"no\" (Norwegian)\"."
-        },
-        "name": {
-          "type": "string",
-          "description": "The name of the voice. If not set, the service will choose a voice based on the other parameters such as language_code and gender."
-        },
-        "ssmlGender": {
-          "description": "The preferred gender of the voice. If not set, the service will choose a voice based on the other parameters such as language_code and name. Note that this is only a preference, not requirement; if a voice of the appropriate gender is not available, the synthesizer should substitute a voice with a different gender rather than failing the request.",
-          "type": "string",
-          "enumDescriptions": [
-            "An unspecified gender. In VoiceSelectionParams, this means that the client doesn't care which gender the selected voice will have. In the Voice field of ListVoicesResponse, this may mean that the voice doesn't fit any of the other categories in this enum, or that the gender of the voice isn't known.",
-            "A male voice.",
-            "A female voice.",
-            "A gender-neutral voice. This voice is not yet supported."
-          ],
-          "enum": [
-            "SSML_VOICE_GENDER_UNSPECIFIED",
-            "MALE",
-            "FEMALE",
-            "NEUTRAL"
-          ]
-        }
-      }
-    }
-  },
-  "id": "texttospeech:v1",
-  "ownerName": "Google",
-  "version_module": true,
-  "discoveryVersion": "v1",
-  "mtlsRootUrl": "https://texttospeech.mtls.googleapis.com/",
-  "baseUrl": "https://texttospeech.googleapis.com/",
-  "revision": "20200814",
-  "fullyEncodeReservedExpansion": true,
-  "servicePath": "",
-  "version": "v1",
-  "basePath": "",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  }
-}
+    "servicePath": "",
+    "title": "Cloud Text-to-Speech API",
+    "version": "v1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/texttospeech.v1beta1.json b/googleapiclient/discovery_cache/documents/texttospeech.v1beta1.json
index dfa6f0d..14b3268 100644
--- a/googleapiclient/discovery_cache/documents/texttospeech.v1beta1.json
+++ b/googleapiclient/discovery_cache/documents/texttospeech.v1beta1.json
@@ -1,390 +1,390 @@
 {
-  "basePath": "",
-  "mtlsRootUrl": "https://texttospeech.mtls.googleapis.com/",
-  "documentationLink": "https://cloud.google.com/text-to-speech/",
-  "title": "Cloud Text-to-Speech API",
-  "version": "v1beta1",
-  "revision": "20200921",
-  "id": "texttospeech:v1beta1",
-  "description": "Synthesizes natural-sounding speech by applying powerful neural network models.",
-  "batchPath": "batch",
-  "baseUrl": "https://texttospeech.googleapis.com/",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
+                }
+            }
         }
-      }
-    }
-  },
-  "parameters": {
-    "alt": {
-      "type": "string",
-      "default": "json",
-      "description": "Data format for response.",
-      "location": "query",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ]
     },
-    "quotaUser": {
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "type": "string",
-      "location": "query"
+    "basePath": "",
+    "baseUrl": "https://texttospeech.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Texttospeech",
+    "description": "Synthesizes natural-sounding speech by applying powerful neural network models.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/text-to-speech/",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
     },
-    "prettyPrint": {
-      "default": "true",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "location": "query"
-    },
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "location": "query",
-      "type": "string"
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "oauth_token": {
-      "location": "query",
-      "type": "string",
-      "description": "OAuth 2.0 token for the current user."
-    },
-    "key": {
-      "type": "string",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "location": "query"
-    },
-    "access_token": {
-      "location": "query",
-      "description": "OAuth access token.",
-      "type": "string"
-    },
-    "upload_protocol": {
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "location": "query"
-    },
-    "$.xgafv": {
-      "type": "string",
-      "location": "query",
-      "description": "V1 error format.",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "enum": [
-        "1",
-        "2"
-      ]
-    }
-  },
-  "fullyEncodeReservedExpansion": true,
-  "schemas": {
-    "VoiceSelectionParams": {
-      "description": "Description of which voice to use for a synthesis request.",
-      "properties": {
-        "name": {
-          "description": "The name of the voice. If not set, the service will choose a voice based on the other parameters such as language_code and gender.",
-          "type": "string"
-        },
-        "ssmlGender": {
-          "type": "string",
-          "enum": [
-            "SSML_VOICE_GENDER_UNSPECIFIED",
-            "MALE",
-            "FEMALE",
-            "NEUTRAL"
-          ],
-          "enumDescriptions": [
-            "An unspecified gender. In VoiceSelectionParams, this means that the client doesn't care which gender the selected voice will have. In the Voice field of ListVoicesResponse, this may mean that the voice doesn't fit any of the other categories in this enum, or that the gender of the voice isn't known.",
-            "A male voice.",
-            "A female voice.",
-            "A gender-neutral voice. This voice is not yet supported."
-          ],
-          "description": "The preferred gender of the voice. If not set, the service will choose a voice based on the other parameters such as language_code and name. Note that this is only a preference, not requirement; if a voice of the appropriate gender is not available, the synthesizer should substitute a voice with a different gender rather than failing the request."
-        },
-        "languageCode": {
-          "description": "Required. The language (and potentially also the region) of the voice expressed as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag, e.g. \"en-US\". This should not include a script tag (e.g. use \"cmn-cn\" rather than \"cmn-Hant-cn\"), because the script will be inferred from the input provided in the SynthesisInput. The TTS service will use this parameter to help choose an appropriate voice. Note that the TTS service may choose a voice with a slightly different language code than the one selected; it may substitute a different region (e.g. using en-US rather than en-CA if there isn't a Canadian voice available), or even a different language, e.g. using \"nb\" (Norwegian Bokmal) instead of \"no\" (Norwegian)\".",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "VoiceSelectionParams"
-    },
-    "Voice": {
-      "type": "object",
-      "description": "Description of a voice supported by the TTS service.",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "The name of this voice. Each distinct voice has a unique name."
-        },
-        "ssmlGender": {
-          "enumDescriptions": [
-            "An unspecified gender. In VoiceSelectionParams, this means that the client doesn't care which gender the selected voice will have. In the Voice field of ListVoicesResponse, this may mean that the voice doesn't fit any of the other categories in this enum, or that the gender of the voice isn't known.",
-            "A male voice.",
-            "A female voice.",
-            "A gender-neutral voice. This voice is not yet supported."
-          ],
-          "type": "string",
-          "enum": [
-            "SSML_VOICE_GENDER_UNSPECIFIED",
-            "MALE",
-            "FEMALE",
-            "NEUTRAL"
-          ],
-          "description": "The gender of this voice."
-        },
-        "naturalSampleRateHertz": {
-          "description": "The natural sample rate (in hertz) for this voice.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "languageCodes": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "The languages that this voice supports, expressed as [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tags (e.g. \"en-US\", \"es-419\", \"cmn-tw\")."
-        }
-      },
-      "id": "Voice"
-    },
-    "SynthesisInput": {
-      "description": "Contains text input to be synthesized. Either `text` or `ssml` must be supplied. Supplying both or neither returns google.rpc.Code.INVALID_ARGUMENT. The input size is limited to 5000 characters.",
-      "properties": {
-        "text": {
-          "description": "The raw text to be synthesized.",
-          "type": "string"
-        },
-        "ssml": {
-          "description": "The SSML document to be synthesized. The SSML document must be valid and well-formed. Otherwise the RPC will fail and return google.rpc.Code.INVALID_ARGUMENT. For more information, see [SSML](https://cloud.google.com/text-to-speech/docs/ssml).",
-          "type": "string"
-        }
-      },
-      "id": "SynthesisInput",
-      "type": "object"
-    },
-    "SynthesizeSpeechResponse": {
-      "id": "SynthesizeSpeechResponse",
-      "description": "The message returned to the client by the `SynthesizeSpeech` method.",
-      "properties": {
-        "audioConfig": {
-          "description": "The audio metadata of `audio_content`.",
-          "$ref": "AudioConfig"
-        },
-        "timepoints": {
-          "type": "array",
-          "description": "A link between a position in the original request input and a corresponding time in the output audio. It's only supported via of SSML input.",
-          "items": {
-            "$ref": "Timepoint"
-          }
-        },
-        "audioContent": {
-          "format": "byte",
-          "type": "string",
-          "description": "The audio data bytes encoded as specified in the request, including the header for encodings that are wrapped in containers (e.g. MP3, OGG_OPUS). For LINEAR16 audio, we include the WAV header. Note: as with all bytes fields, protobuffers use a pure binary representation, whereas JSON representations use base64."
-        }
-      },
-      "type": "object"
-    },
-    "Timepoint": {
-      "id": "Timepoint",
-      "properties": {
-        "markName": {
-          "type": "string",
-          "description": "Timepoint name as received from the client within tag."
-        },
-        "timeSeconds": {
-          "type": "number",
-          "description": "Time offset in seconds from the start of the synthesized audio.",
-          "format": "double"
-        }
-      },
-      "description": "This contains a mapping between a certain point in the input text and a corresponding time in the output audio.",
-      "type": "object"
-    },
-    "ListVoicesResponse": {
-      "properties": {
-        "voices": {
-          "type": "array",
-          "description": "The list of voices.",
-          "items": {
-            "$ref": "Voice"
-          }
-        }
-      },
-      "description": "The message returned to the client by the `ListVoices` method.",
-      "id": "ListVoicesResponse",
-      "type": "object"
-    },
-    "AudioConfig": {
-      "type": "object",
-      "description": "Description of audio data to be synthesized.",
-      "properties": {
-        "volumeGainDb": {
-          "format": "double",
-          "type": "number",
-          "description": "Optional. Input only. Volume gain (in dB) of the normal native volume supported by the specific voice, in the range [-96.0, 16.0]. If unset, or set to a value of 0.0 (dB), will play at normal native signal amplitude. A value of -6.0 (dB) will play at approximately half the amplitude of the normal native signal amplitude. A value of +6.0 (dB) will play at approximately twice the amplitude of the normal native signal amplitude. Strongly recommend not to exceed +10 (dB) as there's usually no effective increase in loudness for any value greater than that."
-        },
-        "effectsProfileId": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "Optional. Input only. An identifier which selects 'audio effects' profiles that are applied on (post synthesized) text to speech. Effects are applied on top of each other in the order they are given. See [audio profiles](https://cloud.google.com/text-to-speech/docs/audio-profiles) for current supported profile ids."
-        },
-        "audioEncoding": {
-          "enumDescriptions": [
-            "Not specified. Will return result google.rpc.Code.INVALID_ARGUMENT.",
-            "Uncompressed 16-bit signed little-endian samples (Linear PCM). Audio content returned as LINEAR16 also contains a WAV header.",
-            "MP3 audio at 32kbps.",
-            "MP3 at 64kbps.",
-            "Opus encoded audio wrapped in an ogg container. The result will be a file which can be played natively on Android, and in browsers (at least Chrome and Firefox). The quality of the encoding is considerably higher than MP3 while using approximately the same bitrate.",
-            "8-bit samples that compand 14-bit audio samples using G.711 PCMU/mu-law. Audio content returned as MULAW also contains a WAV header."
-          ],
-          "enum": [
-            "AUDIO_ENCODING_UNSPECIFIED",
-            "LINEAR16",
-            "MP3",
-            "MP3_64_KBPS",
-            "OGG_OPUS",
-            "MULAW"
-          ],
-          "type": "string",
-          "description": "Required. The format of the audio byte stream."
-        },
-        "speakingRate": {
-          "description": "Optional. Input only. Speaking rate/speed, in the range [0.25, 4.0]. 1.0 is the normal native speed supported by the specific voice. 2.0 is twice as fast, and 0.5 is half as fast. If unset(0.0), defaults to the native 1.0 speed. Any other values \u003c 0.25 or \u003e 4.0 will return an error.",
-          "format": "double",
-          "type": "number"
-        },
-        "sampleRateHertz": {
-          "format": "int32",
-          "type": "integer",
-          "description": "Optional. The synthesis sample rate (in hertz) for this audio. When this is specified in SynthesizeSpeechRequest, if this is different from the voice's natural sample rate, then the synthesizer will honor this request by converting to the desired sample rate (which might result in worse audio quality), unless the specified sample rate is not supported for the encoding chosen, in which case it will fail the request and return google.rpc.Code.INVALID_ARGUMENT."
-        },
-        "pitch": {
-          "format": "double",
-          "description": "Optional. Input only. Speaking pitch, in the range [-20.0, 20.0]. 20 means increase 20 semitones from the original pitch. -20 means decrease 20 semitones from the original pitch.",
-          "type": "number"
-        }
-      },
-      "id": "AudioConfig"
-    },
-    "SynthesizeSpeechRequest": {
-      "properties": {
-        "input": {
-          "$ref": "SynthesisInput",
-          "description": "Required. The Synthesizer requires either plain text or SSML as input."
-        },
-        "audioConfig": {
-          "$ref": "AudioConfig",
-          "description": "Required. The configuration of the synthesized audio."
-        },
-        "enableTimePointing": {
-          "description": "Whether and what timepoints are returned in the response.",
-          "type": "array",
-          "items": {
-            "type": "string",
+    "id": "texttospeech:v1beta1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://texttospeech.mtls.googleapis.com/",
+    "name": "texttospeech",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
             "enum": [
-              "TIMEPOINT_TYPE_UNSPECIFIED",
-              "SSML_MARK"
+                "1",
+                "2"
             ],
             "enumDescriptions": [
-              "Not specified. No timepoint information will be returned.",
-              "Timepoint information of tags in SSML input will be returned."
-            ]
-          }
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "voice": {
-          "description": "Required. The desired voice of the synthesized audio.",
-          "$ref": "VoiceSelectionParams"
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      },
-      "description": "The top-level message sent by the client for the `SynthesizeSpeech` method.",
-      "id": "SynthesizeSpeechRequest",
-      "type": "object"
-    }
-  },
-  "servicePath": "",
-  "ownerName": "Google",
-  "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
-  },
-  "canonicalName": "Texttospeech",
-  "kind": "discovery#restDescription",
-  "discoveryVersion": "v1",
-  "version_module": true,
-  "resources": {
-    "text": {
-      "methods": {
-        "synthesize": {
-          "request": {
-            "$ref": "SynthesizeSpeechRequest"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "response": {
-            "$ref": "SynthesizeSpeechResponse"
-          },
-          "parameters": {},
-          "id": "texttospeech.text.synthesize",
-          "parameterOrder": [],
-          "flatPath": "v1beta1/text:synthesize",
-          "description": "Synthesizes speech synchronously: receive results after all text input has been processed.",
-          "httpMethod": "POST",
-          "path": "v1beta1/text:synthesize"
-        }
-      }
     },
-    "voices": {
-      "methods": {
-        "list": {
-          "path": "v1beta1/voices",
-          "parameters": {
-            "languageCode": {
-              "description": "Optional. Recommended. [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag. If specified, the ListVoices call will only return voices that can be used to synthesize this language_code. E.g. when specifying \"en-NZ\", you will get supported \"en-\\*\" voices; when specifying \"no\", you will get supported \"no-\\*\" (Norwegian) and \"nb-\\*\" (Norwegian Bokmal) voices; specifying \"zh\" will also get supported \"cmn-\\*\" voices; specifying \"zh-hk\" will also get supported \"yue-\\*\" voices.",
-              "type": "string",
-              "location": "query"
+    "protocol": "rest",
+    "resources": {
+        "text": {
+            "methods": {
+                "synthesize": {
+                    "description": "Synthesizes speech synchronously: receive results after all text input has been processed.",
+                    "flatPath": "v1beta1/text:synthesize",
+                    "httpMethod": "POST",
+                    "id": "texttospeech.text.synthesize",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v1beta1/text:synthesize",
+                    "request": {
+                        "$ref": "SynthesizeSpeechRequest"
+                    },
+                    "response": {
+                        "$ref": "SynthesizeSpeechResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                    ]
+                }
             }
-          },
-          "flatPath": "v1beta1/voices",
-          "response": {
-            "$ref": "ListVoicesResponse"
-          },
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameterOrder": [],
-          "description": "Returns a list of Voice supported for synthesis.",
-          "id": "texttospeech.voices.list"
+        },
+        "voices": {
+            "methods": {
+                "list": {
+                    "description": "Returns a list of Voice supported for synthesis.",
+                    "flatPath": "v1beta1/voices",
+                    "httpMethod": "GET",
+                    "id": "texttospeech.voices.list",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "languageCode": {
+                            "description": "Optional. Recommended. [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag. If not specified, the API will return all supported voices. If specified, the ListVoices call will only return voices that can be used to synthesize this language_code. E.g. when specifying \"en-NZ\", you will get supported \"en-NZ\" voices; when specifying \"no\", you will get supported \"no-\\*\" (Norwegian) and \"nb-\\*\" (Norwegian Bokmal) voices; specifying \"zh\" will also get supported \"cmn-\\*\" voices; specifying \"zh-hk\" will also get supported \"yue-hk\" voices.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1beta1/voices",
+                    "response": {
+                        "$ref": "ListVoicesResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                    ]
+                }
+            }
         }
-      }
-    }
-  },
-  "ownerDomain": "google.com",
-  "rootUrl": "https://texttospeech.googleapis.com/",
-  "name": "texttospeech",
-  "protocol": "rest"
-}
+    },
+    "revision": "20210225",
+    "rootUrl": "https://texttospeech.googleapis.com/",
+    "schemas": {
+        "AudioConfig": {
+            "description": "Description of audio data to be synthesized.",
+            "id": "AudioConfig",
+            "properties": {
+                "audioEncoding": {
+                    "description": "Required. The format of the audio byte stream.",
+                    "enum": [
+                        "AUDIO_ENCODING_UNSPECIFIED",
+                        "LINEAR16",
+                        "MP3",
+                        "MP3_64_KBPS",
+                        "OGG_OPUS",
+                        "MULAW"
+                    ],
+                    "enumDescriptions": [
+                        "Not specified. Will return result google.rpc.Code.INVALID_ARGUMENT.",
+                        "Uncompressed 16-bit signed little-endian samples (Linear PCM). Audio content returned as LINEAR16 also contains a WAV header.",
+                        "MP3 audio at 32kbps.",
+                        "MP3 at 64kbps.",
+                        "Opus encoded audio wrapped in an ogg container. The result will be a file which can be played natively on Android, and in browsers (at least Chrome and Firefox). The quality of the encoding is considerably higher than MP3 while using approximately the same bitrate.",
+                        "8-bit samples that compand 14-bit audio samples using G.711 PCMU/mu-law. Audio content returned as MULAW also contains a WAV header."
+                    ],
+                    "type": "string"
+                },
+                "effectsProfileId": {
+                    "description": "Optional. Input only. An identifier which selects 'audio effects' profiles that are applied on (post synthesized) text to speech. Effects are applied on top of each other in the order they are given. See [audio profiles](https://cloud.google.com/text-to-speech/docs/audio-profiles) for current supported profile ids.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "pitch": {
+                    "description": "Optional. Input only. Speaking pitch, in the range [-20.0, 20.0]. 20 means increase 20 semitones from the original pitch. -20 means decrease 20 semitones from the original pitch.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "sampleRateHertz": {
+                    "description": "Optional. The synthesis sample rate (in hertz) for this audio. When this is specified in SynthesizeSpeechRequest, if this is different from the voice's natural sample rate, then the synthesizer will honor this request by converting to the desired sample rate (which might result in worse audio quality), unless the specified sample rate is not supported for the encoding chosen, in which case it will fail the request and return google.rpc.Code.INVALID_ARGUMENT.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "speakingRate": {
+                    "description": "Optional. Input only. Speaking rate/speed, in the range [0.25, 4.0]. 1.0 is the normal native speed supported by the specific voice. 2.0 is twice as fast, and 0.5 is half as fast. If unset(0.0), defaults to the native 1.0 speed. Any other values < 0.25 or > 4.0 will return an error.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "volumeGainDb": {
+                    "description": "Optional. Input only. Volume gain (in dB) of the normal native volume supported by the specific voice, in the range [-96.0, 16.0]. If unset, or set to a value of 0.0 (dB), will play at normal native signal amplitude. A value of -6.0 (dB) will play at approximately half the amplitude of the normal native signal amplitude. A value of +6.0 (dB) will play at approximately twice the amplitude of the normal native signal amplitude. Strongly recommend not to exceed +10 (dB) as there's usually no effective increase in loudness for any value greater than that.",
+                    "format": "double",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "ListVoicesResponse": {
+            "description": "The message returned to the client by the `ListVoices` method.",
+            "id": "ListVoicesResponse",
+            "properties": {
+                "voices": {
+                    "description": "The list of voices.",
+                    "items": {
+                        "$ref": "Voice"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "SynthesisInput": {
+            "description": "Contains text input to be synthesized. Either `text` or `ssml` must be supplied. Supplying both or neither returns google.rpc.Code.INVALID_ARGUMENT. The input size is limited to 5000 characters.",
+            "id": "SynthesisInput",
+            "properties": {
+                "ssml": {
+                    "description": "The SSML document to be synthesized. The SSML document must be valid and well-formed. Otherwise the RPC will fail and return google.rpc.Code.INVALID_ARGUMENT. For more information, see [SSML](https://cloud.google.com/text-to-speech/docs/ssml).",
+                    "type": "string"
+                },
+                "text": {
+                    "description": "The raw text to be synthesized.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SynthesizeSpeechRequest": {
+            "description": "The top-level message sent by the client for the `SynthesizeSpeech` method.",
+            "id": "SynthesizeSpeechRequest",
+            "properties": {
+                "audioConfig": {
+                    "$ref": "AudioConfig",
+                    "description": "Required. The configuration of the synthesized audio."
+                },
+                "enableTimePointing": {
+                    "description": "Whether and what timepoints are returned in the response.",
+                    "items": {
+                        "enum": [
+                            "TIMEPOINT_TYPE_UNSPECIFIED",
+                            "SSML_MARK"
+                        ],
+                        "enumDescriptions": [
+                            "Not specified. No timepoint information will be returned.",
+                            "Timepoint information of tags in SSML input will be returned."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "input": {
+                    "$ref": "SynthesisInput",
+                    "description": "Required. The Synthesizer requires either plain text or SSML as input."
+                },
+                "voice": {
+                    "$ref": "VoiceSelectionParams",
+                    "description": "Required. The desired voice of the synthesized audio."
+                }
+            },
+            "type": "object"
+        },
+        "SynthesizeSpeechResponse": {
+            "description": "The message returned to the client by the `SynthesizeSpeech` method.",
+            "id": "SynthesizeSpeechResponse",
+            "properties": {
+                "audioConfig": {
+                    "$ref": "AudioConfig",
+                    "description": "The audio metadata of `audio_content`."
+                },
+                "audioContent": {
+                    "description": "The audio data bytes encoded as specified in the request, including the header for encodings that are wrapped in containers (e.g. MP3, OGG_OPUS). For LINEAR16 audio, we include the WAV header. Note: as with all bytes fields, protobuffers use a pure binary representation, whereas JSON representations use base64.",
+                    "format": "byte",
+                    "type": "string"
+                },
+                "timepoints": {
+                    "description": "A link between a position in the original request input and a corresponding time in the output audio. It's only supported via of SSML input.",
+                    "items": {
+                        "$ref": "Timepoint"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Timepoint": {
+            "description": "This contains a mapping between a certain point in the input text and a corresponding time in the output audio.",
+            "id": "Timepoint",
+            "properties": {
+                "markName": {
+                    "description": "Timepoint name as received from the client within tag.",
+                    "type": "string"
+                },
+                "timeSeconds": {
+                    "description": "Time offset in seconds from the start of the synthesized audio.",
+                    "format": "double",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "Voice": {
+            "description": "Description of a voice supported by the TTS service.",
+            "id": "Voice",
+            "properties": {
+                "languageCodes": {
+                    "description": "The languages that this voice supports, expressed as [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tags (e.g. \"en-US\", \"es-419\", \"cmn-tw\").",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "name": {
+                    "description": "The name of this voice. Each distinct voice has a unique name.",
+                    "type": "string"
+                },
+                "naturalSampleRateHertz": {
+                    "description": "The natural sample rate (in hertz) for this voice.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "ssmlGender": {
+                    "description": "The gender of this voice.",
+                    "enum": [
+                        "SSML_VOICE_GENDER_UNSPECIFIED",
+                        "MALE",
+                        "FEMALE",
+                        "NEUTRAL"
+                    ],
+                    "enumDescriptions": [
+                        "An unspecified gender. In VoiceSelectionParams, this means that the client doesn't care which gender the selected voice will have. In the Voice field of ListVoicesResponse, this may mean that the voice doesn't fit any of the other categories in this enum, or that the gender of the voice isn't known.",
+                        "A male voice.",
+                        "A female voice.",
+                        "A gender-neutral voice. This voice is not yet supported."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "VoiceSelectionParams": {
+            "description": "Description of which voice to use for a synthesis request.",
+            "id": "VoiceSelectionParams",
+            "properties": {
+                "languageCode": {
+                    "description": "Required. The language (and potentially also the region) of the voice expressed as a [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag, e.g. \"en-US\". This should not include a script tag (e.g. use \"cmn-cn\" rather than \"cmn-Hant-cn\"), because the script will be inferred from the input provided in the SynthesisInput. The TTS service will use this parameter to help choose an appropriate voice. Note that the TTS service may choose a voice with a slightly different language code than the one selected; it may substitute a different region (e.g. using en-US rather than en-CA if there isn't a Canadian voice available), or even a different language, e.g. using \"nb\" (Norwegian Bokmal) instead of \"no\" (Norwegian)\".",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The name of the voice. If not set, the service will choose a voice based on the other parameters such as language_code and gender.",
+                    "type": "string"
+                },
+                "ssmlGender": {
+                    "description": "The preferred gender of the voice. If not set, the service will choose a voice based on the other parameters such as language_code and name. Note that this is only a preference, not requirement; if a voice of the appropriate gender is not available, the synthesizer should substitute a voice with a different gender rather than failing the request.",
+                    "enum": [
+                        "SSML_VOICE_GENDER_UNSPECIFIED",
+                        "MALE",
+                        "FEMALE",
+                        "NEUTRAL"
+                    ],
+                    "enumDescriptions": [
+                        "An unspecified gender. In VoiceSelectionParams, this means that the client doesn't care which gender the selected voice will have. In the Voice field of ListVoicesResponse, this may mean that the voice doesn't fit any of the other categories in this enum, or that the gender of the voice isn't known.",
+                        "A male voice.",
+                        "A female voice.",
+                        "A gender-neutral voice. This voice is not yet supported."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        }
+    },
+    "servicePath": "",
+    "title": "Cloud Text-to-Speech API",
+    "version": "v1beta1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/trafficdirector.v2.json b/googleapiclient/discovery_cache/documents/trafficdirector.v2.json
index a7cb1ed..cb18846 100644
--- a/googleapiclient/discovery_cache/documents/trafficdirector.v2.json
+++ b/googleapiclient/discovery_cache/documents/trafficdirector.v2.json
@@ -1,953 +1,953 @@
 {
-  "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
-  },
-  "protocol": "rest",
-  "batchPath": "batch",
-  "version": "v2",
-  "title": "Traffic Director API",
-  "baseUrl": "https://trafficdirector.googleapis.com/",
-  "documentationLink": "https://www.envoyproxy.io/docs/envoy/latest/configuration/overview/v2_overview#management-server",
-  "mtlsRootUrl": "https://trafficdirector.mtls.googleapis.com/",
-  "schemas": {
-    "PerXdsConfig": {
-      "type": "object",
-      "id": "PerXdsConfig",
-      "description": "Detailed config (per xDS) with status. [#next-free-field: 6]",
-      "properties": {
-        "routeConfig": {
-          "$ref": "RoutesConfigDump"
-        },
-        "listenerConfig": {
-          "$ref": "ListenersConfigDump"
-        },
-        "scopedRouteConfig": {
-          "$ref": "ScopedRoutesConfigDump"
-        },
-        "clusterConfig": {
-          "$ref": "ClustersConfigDump"
-        },
-        "status": {
-          "enum": [
-            "UNKNOWN",
-            "SYNCED",
-            "NOT_SENT",
-            "STALE",
-            "ERROR"
-          ],
-          "enumDescriptions": [
-            "Status info is not available/unknown.",
-            "Management server has sent the config to client and received ACK.",
-            "Config is not sent.",
-            "Management server has sent the config to client but hasn’t received ACK/NACK.",
-            "Management server has sent the config to client but received NACK."
-          ],
-          "type": "string"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
+                }
+            }
         }
-      }
     },
-    "StaticListener": {
-      "type": "object",
-      "description": "Describes a statically loaded listener.",
-      "id": "StaticListener",
-      "properties": {
-        "listener": {
-          "description": "The listener config.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          }
-        },
-        "lastUpdated": {
-          "description": "The timestamp when the Listener was last successfully updated.",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      }
+    "basePath": "",
+    "baseUrl": "https://trafficdirector.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Traffic Director Service",
+    "description": "",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/traffic-director",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
     },
-    "NullMatch": {
-      "properties": {},
-      "type": "object",
-      "id": "NullMatch",
-      "description": "NullMatch is an empty message to specify a null value."
-    },
-    "Node": {
-      "properties": {
-        "cluster": {
-          "type": "string",
-          "description": "Defines the local service cluster name where Envoy is running. Though optional, it should be set if any of the following features are used: :ref:`statsd `, :ref:`health check cluster verification `, :ref:`runtime override directory `, :ref:`user agent addition `, :ref:`HTTP global rate limiting `, :ref:`CDS `, and :ref:`HTTP tracing `, either in this message or via :option:`--service-cluster`."
-        },
-        "extensions": {
-          "items": {
-            "$ref": "Extension"
-          },
-          "description": "List of extensions and their versions supported by the node.",
-          "type": "array"
-        },
-        "locality": {
-          "$ref": "Locality",
-          "description": "Locality specifying where the Envoy instance is running."
-        },
-        "userAgentVersion": {
-          "type": "string",
-          "description": "Free-form string that identifies the version of the entity requesting config. E.g. \"1.12.2\" or \"abcd1234\", or \"SpecialEnvoyBuild\""
-        },
-        "metadata": {
-          "description": "Opaque metadata extending the node identifier. Envoy will pass this directly to the management server.",
-          "additionalProperties": {
-            "description": "Properties of the object.",
-            "type": "any"
-          },
-          "type": "object"
-        },
-        "buildVersion": {
-          "description": "This is motivated by informing a management server during canary which version of Envoy is being tested in a heterogeneous fleet. This will be set by Envoy in management server RPCs. This field is deprecated in favor of the user_agent_name and user_agent_version values.",
-          "type": "string"
-        },
-        "listeningAddresses": {
-          "type": "array",
-          "items": {
-            "$ref": "Address"
-          },
-          "description": "Known listening ports on the node as a generic hint to the management server for filtering :ref:`listeners ` to be returned. For example, if there is a listener bound to port 80, the list can optionally contain the SocketAddress `(0.0.0.0,80)`. The field is optional and just a hint."
-        },
-        "userAgentBuildVersion": {
-          "description": "Structured version of the entity requesting config.",
-          "$ref": "BuildVersion"
-        },
-        "id": {
-          "type": "string",
-          "description": "An opaque node identifier for the Envoy node. This also provides the local service node name. It should be set if any of the following features are used: :ref:`statsd `, :ref:`CDS `, and :ref:`HTTP tracing `, either in this message or via :option:`--service-node`."
-        },
-        "userAgentName": {
-          "description": "Free-form string that identifies the entity requesting config. E.g. \"envoy\" or \"grpc\"",
-          "type": "string"
-        },
-        "clientFeatures": {
-          "type": "array",
-          "description": "Client feature support list. These are well known features described in the Envoy API repository for a given major version of an API. Client features use reverse DNS naming scheme, for example `com.acme.feature`. See :ref:`the list of features ` that xDS client may support.",
-          "items": {
+    "id": "trafficdirector:v2",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://trafficdirector.mtls.googleapis.com/",
+    "name": "trafficdirector",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
             "type": "string"
-          }
-        }
-      },
-      "type": "object",
-      "description": "Identifies a specific Envoy instance. The node identifier is presented to the management server, which may use this identifier to distinguish per Envoy configuration for serving. [#next-free-field: 12]",
-      "id": "Node"
-    },
-    "StaticRouteConfig": {
-      "id": "StaticRouteConfig",
-      "type": "object",
-      "properties": {
-        "routeConfig": {
-          "type": "object",
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "The route config."
         },
-        "lastUpdated": {
-          "description": "The timestamp when the Route was last updated.",
-          "type": "string",
-          "format": "google-datetime"
-        }
-      }
-    },
-    "ListMatcher": {
-      "id": "ListMatcher",
-      "properties": {
-        "oneOf": {
-          "$ref": "ValueMatcher",
-          "description": "If specified, at least one of the values in the list must match the value specified."
-        }
-      },
-      "type": "object",
-      "description": "Specifies the way to match a list value."
-    },
-    "DoubleRange": {
-      "id": "DoubleRange",
-      "description": "Specifies the double start and end of the range using half-open interval semantics [start, end).",
-      "type": "object",
-      "properties": {
-        "start": {
-          "format": "double",
-          "type": "number",
-          "description": "start of the range (inclusive)"
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
         },
-        "end": {
-          "type": "number",
-          "format": "double",
-          "description": "end of the range (exclusive)"
-        }
-      }
-    },
-    "ClientConfig": {
-      "description": "All xds configs for a particular client.",
-      "type": "object",
-      "id": "ClientConfig",
-      "properties": {
-        "node": {
-          "description": "Node for a particular client.",
-          "$ref": "Node"
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
         },
-        "xdsConfig": {
-          "items": {
-            "$ref": "PerXdsConfig"
-          },
-          "type": "array"
-        }
-      }
-    },
-    "DynamicScopedRouteConfigs": {
-      "id": "DynamicScopedRouteConfigs",
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "The name assigned to the scoped route configurations."
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
         },
-        "lastUpdated": {
-          "format": "google-datetime",
-          "description": "The timestamp when the scoped route config set was last updated.",
-          "type": "string"
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
         },
-        "versionInfo": {
-          "type": "string",
-          "description": "This is the per-resource version information. This version is currently taken from the :ref:`version_info ` field at the time that the scoped routes configuration was loaded."
-        },
-        "scopedRouteConfigs": {
-          "description": "The scoped route configurations.",
-          "type": "array",
-          "items": {
-            "type": "object",
-            "additionalProperties": {
-              "description": "Properties of the object. Contains field @type with type URL.",
-              "type": "any"
-            }
-          }
-        }
-      }
-    },
-    "ListenersConfigDump": {
-      "type": "object",
-      "description": "Envoy's listener manager fills this message with all currently known listeners. Listener configuration information can be used to recreate an Envoy configuration by populating all listeners as static listeners or by returning them in a LDS response.",
-      "id": "ListenersConfigDump",
-      "properties": {
-        "dynamicListeners": {
-          "description": "State for any warming, active, or draining listeners.",
-          "type": "array",
-          "items": {
-            "$ref": "DynamicListener"
-          }
-        },
-        "versionInfo": {
-          "type": "string",
-          "description": "This is the :ref:`version_info ` in the last processed LDS discovery response. If there are only static bootstrap listeners, this field will be \"\"."
-        },
-        "staticListeners": {
-          "type": "array",
-          "description": "The statically loaded listener configs.",
-          "items": {
-            "$ref": "StaticListener"
-          }
-        }
-      }
-    },
-    "Address": {
-      "properties": {
-        "pipe": {
-          "$ref": "Pipe"
-        },
-        "socketAddress": {
-          "$ref": "SocketAddress"
-        }
-      },
-      "type": "object",
-      "description": "Addresses specify either a logical or physical address and port, which are used to tell Envoy where to bind/listen, connect to upstream and find management servers.",
-      "id": "Address"
-    },
-    "RegexMatcher": {
-      "properties": {
-        "googleRe2": {
-          "$ref": "GoogleRE2",
-          "description": "Google's RE2 regex engine."
-        },
-        "regex": {
-          "description": "The regex match string. The string must be supported by the configured engine.",
-          "type": "string"
-        }
-      },
-      "id": "RegexMatcher",
-      "type": "object",
-      "description": "A regex matcher designed for safety when used with untrusted input."
-    },
-    "GoogleRE2": {
-      "description": "Google's `RE2 `_ regex engine. The regex string must adhere to the documented `syntax `_. The engine is designed to complete execution in linear time as well as limit the amount of memory used. Envoy supports program size checking via runtime. The runtime keys `re2.max_program_size.error_level` and `re2.max_program_size.warn_level` can be set to integers as the maximum program size or complexity that a compiled regex can have before an exception is thrown or a warning is logged, respectively. `re2.max_program_size.error_level` defaults to 100, and `re2.max_program_size.warn_level` has no default if unset (will not check/log a warning). Envoy emits two stats for tracking the program size of regexes: the histogram `re2.program_size`, which records the program size, and the counter `re2.exceeded_warn_level`, which is incremented each time the program size exceeds the warn level threshold.",
-      "type": "object",
-      "id": "GoogleRE2",
-      "properties": {
-        "maxProgramSize": {
-          "format": "uint32",
-          "description": "This field controls the RE2 \"program size\" which is a rough estimate of how complex a compiled regex is to evaluate. A regex that has a program size greater than the configured value will fail to compile. In this case, the configured max program size can be increased or the regex can be simplified. If not specified, the default is 100. This field is deprecated; regexp validation should be performed on the management server instead of being done by each individual client.",
-          "type": "integer"
-        }
-      }
-    },
-    "Pipe": {
-      "properties": {
-        "mode": {
-          "format": "uint32",
-          "type": "integer",
-          "description": "The mode for the Pipe. Not applicable for abstract sockets."
-        },
-        "path": {
-          "description": "Unix Domain Socket path. On Linux, paths starting with '@' will use the abstract namespace. The starting '@' is replaced by a null byte by Envoy. Paths starting with '@' will result in an error in environments other than Linux.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "Pipe"
-    },
-    "BuildVersion": {
-      "properties": {
-        "version": {
-          "$ref": "SemanticVersion",
-          "description": "SemVer version of extension."
-        },
-        "metadata": {
-          "description": "Free-form build information. Envoy defines several well known keys in the source/common/version/version.h file",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object."
-          },
-          "type": "object"
-        }
-      },
-      "description": "BuildVersion combines SemVer version of extension with free-form build information (i.e. 'alpha', 'private-build') as a set of strings.",
-      "id": "BuildVersion",
-      "type": "object"
-    },
-    "ClientStatusResponse": {
-      "id": "ClientStatusResponse",
-      "properties": {
-        "config": {
-          "description": "Client configs for the clients specified in the ClientStatusRequest.",
-          "type": "array",
-          "items": {
-            "$ref": "ClientConfig"
-          }
-        }
-      },
-      "type": "object"
-    },
-    "SemanticVersion": {
-      "id": "SemanticVersion",
-      "type": "object",
-      "properties": {
-        "patch": {
-          "format": "uint32",
-          "type": "integer"
-        },
-        "majorNumber": {
-          "type": "integer",
-          "format": "uint32"
-        },
-        "minorNumber": {
-          "type": "integer",
-          "format": "uint32"
-        }
-      },
-      "description": "Envoy uses SemVer (https://semver.org/). Major/minor versions indicate expected behaviors and APIs, the patch version field is used only for security fixes and can be generally ignored."
-    },
-    "NodeMatcher": {
-      "properties": {
-        "nodeMetadatas": {
-          "type": "array",
-          "items": {
-            "$ref": "StructMatcher"
-          },
-          "description": "Specifies match criteria on the node metadata."
-        },
-        "nodeId": {
-          "description": "Specifies match criteria on the node id.",
-          "$ref": "StringMatcher"
-        }
-      },
-      "description": "Specifies the way to match a Node. The match follows AND semantics.",
-      "id": "NodeMatcher",
-      "type": "object"
-    },
-    "ValueMatcher": {
-      "id": "ValueMatcher",
-      "type": "object",
-      "description": "Specifies the way to match a ProtobufWkt::Value. Primitive values and ListValue are supported. StructValue is not supported and is always not matched. [#next-free-field: 7]",
-      "properties": {
-        "boolMatch": {
-          "description": "If specified, a match occurs if and only if the target value is a bool value and is equal to this field.",
-          "type": "boolean"
-        },
-        "doubleMatch": {
-          "description": "If specified, a match occurs if and only if the target value is a double value and is matched to this field.",
-          "$ref": "DoubleMatcher"
-        },
-        "nullMatch": {
-          "$ref": "NullMatch",
-          "description": "If specified, a match occurs if and only if the target value is a NullValue."
-        },
-        "stringMatch": {
-          "description": "If specified, a match occurs if and only if the target value is a string value and is matched to this field.",
-          "$ref": "StringMatcher"
-        },
-        "presentMatch": {
-          "type": "boolean",
-          "description": "If specified, value match will be performed based on whether the path is referring to a valid primitive value in the metadata. If the path is referring to a non-primitive value, the result is always not matched."
-        },
-        "listMatch": {
-          "description": "If specified, a match occurs if and only if the target value is a list value and is matched to this field.",
-          "$ref": "ListMatcher"
-        }
-      }
-    },
-    "ClientStatusRequest": {
-      "properties": {
-        "nodeMatchers": {
-          "type": "array",
-          "items": {
-            "$ref": "NodeMatcher"
-          },
-          "description": "Management server can use these match criteria to identify clients. The match follows OR semantics."
-        }
-      },
-      "description": "Request for client status of clients identified by a list of NodeMatchers.",
-      "type": "object",
-      "id": "ClientStatusRequest"
-    },
-    "Extension": {
-      "id": "Extension",
-      "description": "Version and identification for an Envoy extension. [#next-free-field: 6]",
-      "properties": {
-        "disabled": {
-          "description": "Indicates that the extension is present but was disabled via dynamic configuration.",
-          "type": "boolean"
-        },
-        "name": {
-          "description": "This is the name of the Envoy filter as specified in the Envoy configuration, e.g. envoy.filters.http.router, com.acme.widget.",
-          "type": "string"
-        },
-        "version": {
-          "$ref": "BuildVersion",
-          "description": "The version is a property of the extension and maintained independently of other extensions and the Envoy API. This field is not set when extension did not provide version information."
-        },
-        "typeDescriptor": {
-          "description": "[#not-implemented-hide:] Type descriptor of extension configuration proto. [#comment:",
-          "type": "string"
-        },
-        "category": {
-          "description": "Category of the extension. Extension category names use reverse DNS notation. For instance \"envoy.filters.listener\" for Envoy's built-in listener filters or \"com.acme.filters.http\" for HTTP filters from acme.com vendor. [#comment:",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "StringMatcher": {
-      "id": "StringMatcher",
-      "description": "Specifies the way to match a string. [#next-free-field: 7]",
-      "properties": {
-        "prefix": {
-          "description": "The input string must have the prefix specified here. Note: empty prefix is not allowed, please use regex instead. Examples: * *abc* matches the value *abc.xyz*",
-          "type": "string"
-        },
-        "safeRegex": {
-          "$ref": "RegexMatcher",
-          "description": "The input string must match the regular expression specified here."
-        },
-        "suffix": {
-          "type": "string",
-          "description": "The input string must have the suffix specified here. Note: empty prefix is not allowed, please use regex instead. Examples: * *abc* matches the value *xyz.abc*"
-        },
-        "regex": {
-          "type": "string",
-          "description": "The input string must match the regular expression specified here. The regex grammar is defined `here `_. Examples: * The regex ``\\d{3}`` matches the value *123* * The regex ``\\d{3}`` does not match the value *1234* * The regex ``\\d{3}`` does not match the value *123.456* .. attention:: This field has been deprecated in favor of `safe_regex` as it is not safe for use with untrusted input in all cases."
-        },
-        "ignoreCase": {
-          "type": "boolean",
-          "description": "If true, indicates the exact/prefix/suffix matching should be case insensitive. This has no effect for the safe_regex match. For example, the matcher *data* will match both input string *Data* and *data* if set to true."
-        },
-        "exact": {
-          "description": "The input string must match exactly the string specified here. Examples: * *abc* only matches the value *abc*.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "PathSegment": {
-      "id": "PathSegment",
-      "description": "Specifies the segment in a path to retrieve value from Struct.",
-      "type": "object",
-      "properties": {
         "key": {
-          "description": "If specified, use the key to retrieve the value in a Struct.",
-          "type": "string"
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      }
     },
-    "ClustersConfigDump": {
-      "type": "object",
-      "id": "ClustersConfigDump",
-      "properties": {
-        "versionInfo": {
-          "type": "string",
-          "description": "This is the :ref:`version_info ` in the last processed CDS discovery response. If there are only static bootstrap clusters, this field will be \"\"."
-        },
-        "staticClusters": {
-          "description": "The statically loaded cluster configs.",
-          "items": {
-            "$ref": "StaticCluster"
-          },
-          "type": "array"
-        },
-        "dynamicWarmingClusters": {
-          "items": {
-            "$ref": "DynamicCluster"
-          },
-          "description": "The dynamically loaded warming clusters. These are clusters that are currently undergoing warming in preparation to service data plane traffic. Note that if attempting to recreate an Envoy configuration from a configuration dump, the warming clusters should generally be discarded.",
-          "type": "array"
-        },
-        "dynamicActiveClusters": {
-          "items": {
-            "$ref": "DynamicCluster"
-          },
-          "description": "The dynamically loaded active clusters. These are clusters that are available to service data plane traffic.",
-          "type": "array"
-        }
-      },
-      "description": "Envoy's cluster manager fills this message with all currently known clusters. Cluster configuration information can be used to recreate an Envoy configuration by populating all clusters as static clusters or by returning them in a CDS response."
-    },
-    "StructMatcher": {
-      "type": "object",
-      "id": "StructMatcher",
-      "properties": {
-        "path": {
-          "items": {
-            "$ref": "PathSegment"
-          },
-          "description": "The path to retrieve the Value from the Struct.",
-          "type": "array"
-        },
-        "value": {
-          "$ref": "ValueMatcher",
-          "description": "The StructMatcher is matched if the value retrieved by path is matched to this value."
-        }
-      },
-      "description": "StructMatcher provides a general interface to check if a given value is matched in google.protobuf.Struct. It uses `path` to retrieve the value from the struct and then check if it's matched to the specified value. For example, for the following Struct: .. code-block:: yaml fields: a: struct_value: fields: b: struct_value: fields: c: string_value: pro t: list_value: values: - string_value: m - string_value: n The following MetadataMatcher is matched as the path [a, b, c] will retrieve a string value \"pro\" from the Metadata which is matched to the specified prefix match. .. code-block:: yaml path: - key: a - key: b - key: c value: string_match: prefix: pr The following StructMatcher is matched as the code will match one of the string values in the list at the path [a, t]. .. code-block:: yaml path: - key: a - key: t value: list_match: one_of: string_match: exact: m An example use of StructMatcher is to match metadata in envoy.v*.core.Node."
-    },
-    "RoutesConfigDump": {
-      "type": "object",
-      "description": "Envoy's RDS implementation fills this message with all currently loaded routes, as described by their RouteConfiguration objects. Static routes that are either defined in the bootstrap configuration or defined inline while configuring listeners are separated from those configured dynamically via RDS. Route configuration information can be used to recreate an Envoy configuration by populating all routes as static routes or by returning them in RDS responses.",
-      "properties": {
-        "staticRouteConfigs": {
-          "description": "The statically loaded route configs.",
-          "type": "array",
-          "items": {
-            "$ref": "StaticRouteConfig"
-          }
-        },
-        "dynamicRouteConfigs": {
-          "items": {
-            "$ref": "DynamicRouteConfig"
-          },
-          "description": "The dynamically loaded route configs.",
-          "type": "array"
-        }
-      },
-      "id": "RoutesConfigDump"
-    },
-    "InlineScopedRouteConfigs": {
-      "id": "InlineScopedRouteConfigs",
-      "properties": {
-        "scopedRouteConfigs": {
-          "type": "array",
-          "description": "The scoped route configurations.",
-          "items": {
-            "type": "object",
-            "additionalProperties": {
-              "type": "any",
-              "description": "Properties of the object. Contains field @type with type URL."
+    "protocol": "rest",
+    "resources": {
+        "discovery": {
+            "methods": {
+                "client_status": {
+                    "description": "",
+                    "flatPath": "v2/discovery:client_status",
+                    "httpMethod": "POST",
+                    "id": "trafficdirector.discovery.client_status",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v2/discovery:client_status",
+                    "request": {
+                        "$ref": "ClientStatusRequest"
+                    },
+                    "response": {
+                        "$ref": "ClientStatusResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                    ]
+                }
             }
-          }
-        },
-        "name": {
-          "description": "The name assigned to the scoped route configurations.",
-          "type": "string"
-        },
-        "lastUpdated": {
-          "description": "The timestamp when the scoped route config set was last updated.",
-          "format": "google-datetime",
-          "type": "string"
         }
-      },
-      "type": "object"
     },
-    "Locality": {
-      "description": "Identifies location of where either Envoy runs or where upstream hosts run.",
-      "properties": {
-        "subZone": {
-          "type": "string",
-          "description": "When used for locality of upstream hosts, this field further splits zone into smaller chunks of sub-zones so they can be load balanced independently."
+    "revision": "20201123",
+    "rootUrl": "https://trafficdirector.googleapis.com/",
+    "schemas": {
+        "Address": {
+            "description": "Addresses specify either a logical or physical address and port, which are used to tell Envoy where to bind/listen, connect to upstream and find management servers.",
+            "id": "Address",
+            "properties": {
+                "pipe": {
+                    "$ref": "Pipe"
+                },
+                "socketAddress": {
+                    "$ref": "SocketAddress"
+                }
+            },
+            "type": "object"
         },
-        "zone": {
-          "description": "Defines the local service zone where Envoy is running. Though optional, it should be set if discovery service routing is used and the discovery service exposes :ref:`zone data `, either in this message or via :option:`--service-zone`. The meaning of zone is context dependent, e.g. `Availability Zone (AZ) `_ on AWS, `Zone `_ on GCP, etc.",
-          "type": "string"
+        "BuildVersion": {
+            "description": "BuildVersion combines SemVer version of extension with free-form build information (i.e. 'alpha', 'private-build') as a set of strings.",
+            "id": "BuildVersion",
+            "properties": {
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object.",
+                        "type": "any"
+                    },
+                    "description": "Free-form build information. Envoy defines several well known keys in the source/common/version/version.h file",
+                    "type": "object"
+                },
+                "version": {
+                    "$ref": "SemanticVersion",
+                    "description": "SemVer version of extension."
+                }
+            },
+            "type": "object"
         },
-        "region": {
-          "description": "Region this :ref:`zone ` belongs to.",
-          "type": "string"
+        "ClientConfig": {
+            "description": "All xds configs for a particular client.",
+            "id": "ClientConfig",
+            "properties": {
+                "node": {
+                    "$ref": "Node",
+                    "description": "Node for a particular client."
+                },
+                "xdsConfig": {
+                    "items": {
+                        "$ref": "PerXdsConfig"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ClientStatusRequest": {
+            "description": "Request for client status of clients identified by a list of NodeMatchers.",
+            "id": "ClientStatusRequest",
+            "properties": {
+                "nodeMatchers": {
+                    "description": "Management server can use these match criteria to identify clients. The match follows OR semantics.",
+                    "items": {
+                        "$ref": "NodeMatcher"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ClientStatusResponse": {
+            "id": "ClientStatusResponse",
+            "properties": {
+                "config": {
+                    "description": "Client configs for the clients specified in the ClientStatusRequest.",
+                    "items": {
+                        "$ref": "ClientConfig"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ClustersConfigDump": {
+            "description": "Envoy's cluster manager fills this message with all currently known clusters. Cluster configuration information can be used to recreate an Envoy configuration by populating all clusters as static clusters or by returning them in a CDS response.",
+            "id": "ClustersConfigDump",
+            "properties": {
+                "dynamicActiveClusters": {
+                    "description": "The dynamically loaded active clusters. These are clusters that are available to service data plane traffic.",
+                    "items": {
+                        "$ref": "DynamicCluster"
+                    },
+                    "type": "array"
+                },
+                "dynamicWarmingClusters": {
+                    "description": "The dynamically loaded warming clusters. These are clusters that are currently undergoing warming in preparation to service data plane traffic. Note that if attempting to recreate an Envoy configuration from a configuration dump, the warming clusters should generally be discarded.",
+                    "items": {
+                        "$ref": "DynamicCluster"
+                    },
+                    "type": "array"
+                },
+                "staticClusters": {
+                    "description": "The statically loaded cluster configs.",
+                    "items": {
+                        "$ref": "StaticCluster"
+                    },
+                    "type": "array"
+                },
+                "versionInfo": {
+                    "description": "This is the :ref:`version_info ` in the last processed CDS discovery response. If there are only static bootstrap clusters, this field will be \"\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DoubleMatcher": {
+            "description": "Specifies the way to match a double value.",
+            "id": "DoubleMatcher",
+            "properties": {
+                "exact": {
+                    "description": "If specified, the input double value must be equal to the value specified here.",
+                    "format": "double",
+                    "type": "number"
+                },
+                "range": {
+                    "$ref": "DoubleRange",
+                    "description": "If specified, the input double value must be in the range specified here. Note: The range is using half-open interval semantics [start, end)."
+                }
+            },
+            "type": "object"
+        },
+        "DoubleRange": {
+            "description": "Specifies the double start and end of the range using half-open interval semantics [start, end).",
+            "id": "DoubleRange",
+            "properties": {
+                "end": {
+                    "description": "end of the range (exclusive)",
+                    "format": "double",
+                    "type": "number"
+                },
+                "start": {
+                    "description": "start of the range (inclusive)",
+                    "format": "double",
+                    "type": "number"
+                }
+            },
+            "type": "object"
+        },
+        "DynamicCluster": {
+            "description": "Describes a dynamically loaded cluster via the CDS API.",
+            "id": "DynamicCluster",
+            "properties": {
+                "cluster": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The cluster config.",
+                    "type": "object"
+                },
+                "lastUpdated": {
+                    "description": "The timestamp when the Cluster was last updated.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "versionInfo": {
+                    "description": "This is the per-resource version information. This version is currently taken from the :ref:`version_info ` field at the time that the cluster was loaded. In the future, discrete per-cluster versions may be supported by the API.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DynamicListener": {
+            "description": "Describes a dynamically loaded listener via the LDS API. [#next-free-field: 6]",
+            "id": "DynamicListener",
+            "properties": {
+                "activeState": {
+                    "$ref": "DynamicListenerState",
+                    "description": "The listener state for any active listener by this name. These are listeners that are available to service data plane traffic."
+                },
+                "drainingState": {
+                    "$ref": "DynamicListenerState",
+                    "description": "The listener state for any draining listener by this name. These are listeners that are currently undergoing draining in preparation to stop servicing data plane traffic. Note that if attempting to recreate an Envoy configuration from a configuration dump, the draining listeners should generally be discarded."
+                },
+                "errorState": {
+                    "$ref": "UpdateFailureState",
+                    "description": "Set if the last update failed, cleared after the next successful update."
+                },
+                "name": {
+                    "description": "The name or unique id of this listener, pulled from the DynamicListenerState config.",
+                    "type": "string"
+                },
+                "warmingState": {
+                    "$ref": "DynamicListenerState",
+                    "description": "The listener state for any warming listener by this name. These are listeners that are currently undergoing warming in preparation to service data plane traffic. Note that if attempting to recreate an Envoy configuration from a configuration dump, the warming listeners should generally be discarded."
+                }
+            },
+            "type": "object"
+        },
+        "DynamicListenerState": {
+            "id": "DynamicListenerState",
+            "properties": {
+                "lastUpdated": {
+                    "description": "The timestamp when the Listener was last successfully updated.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "listener": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The listener config.",
+                    "type": "object"
+                },
+                "versionInfo": {
+                    "description": "This is the per-resource version information. This version is currently taken from the :ref:`version_info ` field at the time that the listener was loaded. In the future, discrete per-listener versions may be supported by the API.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DynamicRouteConfig": {
+            "id": "DynamicRouteConfig",
+            "properties": {
+                "lastUpdated": {
+                    "description": "The timestamp when the Route was last updated.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "routeConfig": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The route config.",
+                    "type": "object"
+                },
+                "versionInfo": {
+                    "description": "This is the per-resource version information. This version is currently taken from the :ref:`version_info ` field at the time that the route configuration was loaded.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "DynamicScopedRouteConfigs": {
+            "id": "DynamicScopedRouteConfigs",
+            "properties": {
+                "lastUpdated": {
+                    "description": "The timestamp when the scoped route config set was last updated.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The name assigned to the scoped route configurations.",
+                    "type": "string"
+                },
+                "scopedRouteConfigs": {
+                    "description": "The scoped route configurations.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "versionInfo": {
+                    "description": "This is the per-resource version information. This version is currently taken from the :ref:`version_info ` field at the time that the scoped routes configuration was loaded.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Extension": {
+            "description": "Version and identification for an Envoy extension. [#next-free-field: 6]",
+            "id": "Extension",
+            "properties": {
+                "category": {
+                    "description": "Category of the extension. Extension category names use reverse DNS notation. For instance \"envoy.filters.listener\" for Envoy's built-in listener filters or \"com.acme.filters.http\" for HTTP filters from acme.com vendor. [#comment:",
+                    "type": "string"
+                },
+                "disabled": {
+                    "description": "Indicates that the extension is present but was disabled via dynamic configuration.",
+                    "type": "boolean"
+                },
+                "name": {
+                    "description": "This is the name of the Envoy filter as specified in the Envoy configuration, e.g. envoy.filters.http.router, com.acme.widget.",
+                    "type": "string"
+                },
+                "typeDescriptor": {
+                    "description": "[#not-implemented-hide:] Type descriptor of extension configuration proto. [#comment:",
+                    "type": "string"
+                },
+                "version": {
+                    "$ref": "BuildVersion",
+                    "description": "The version is a property of the extension and maintained independently of other extensions and the Envoy API. This field is not set when extension did not provide version information."
+                }
+            },
+            "type": "object"
+        },
+        "GoogleRE2": {
+            "description": "Google's `RE2 `_ regex engine. The regex string must adhere to the documented `syntax `_. The engine is designed to complete execution in linear time as well as limit the amount of memory used. Envoy supports program size checking via runtime. The runtime keys `re2.max_program_size.error_level` and `re2.max_program_size.warn_level` can be set to integers as the maximum program size or complexity that a compiled regex can have before an exception is thrown or a warning is logged, respectively. `re2.max_program_size.error_level` defaults to 100, and `re2.max_program_size.warn_level` has no default if unset (will not check/log a warning). Envoy emits two stats for tracking the program size of regexes: the histogram `re2.program_size`, which records the program size, and the counter `re2.exceeded_warn_level`, which is incremented each time the program size exceeds the warn level threshold.",
+            "id": "GoogleRE2",
+            "properties": {
+                "maxProgramSize": {
+                    "description": "This field controls the RE2 \"program size\" which is a rough estimate of how complex a compiled regex is to evaluate. A regex that has a program size greater than the configured value will fail to compile. In this case, the configured max program size can be increased or the regex can be simplified. If not specified, the default is 100. This field is deprecated; regexp validation should be performed on the management server instead of being done by each individual client.",
+                    "format": "uint32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "InlineScopedRouteConfigs": {
+            "id": "InlineScopedRouteConfigs",
+            "properties": {
+                "lastUpdated": {
+                    "description": "The timestamp when the scoped route config set was last updated.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The name assigned to the scoped route configurations.",
+                    "type": "string"
+                },
+                "scopedRouteConfigs": {
+                    "description": "The scoped route configurations.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListMatcher": {
+            "description": "Specifies the way to match a list value.",
+            "id": "ListMatcher",
+            "properties": {
+                "oneOf": {
+                    "$ref": "ValueMatcher",
+                    "description": "If specified, at least one of the values in the list must match the value specified."
+                }
+            },
+            "type": "object"
+        },
+        "ListenersConfigDump": {
+            "description": "Envoy's listener manager fills this message with all currently known listeners. Listener configuration information can be used to recreate an Envoy configuration by populating all listeners as static listeners or by returning them in a LDS response.",
+            "id": "ListenersConfigDump",
+            "properties": {
+                "dynamicListeners": {
+                    "description": "State for any warming, active, or draining listeners.",
+                    "items": {
+                        "$ref": "DynamicListener"
+                    },
+                    "type": "array"
+                },
+                "staticListeners": {
+                    "description": "The statically loaded listener configs.",
+                    "items": {
+                        "$ref": "StaticListener"
+                    },
+                    "type": "array"
+                },
+                "versionInfo": {
+                    "description": "This is the :ref:`version_info ` in the last processed LDS discovery response. If there are only static bootstrap listeners, this field will be \"\".",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Locality": {
+            "description": "Identifies location of where either Envoy runs or where upstream hosts run.",
+            "id": "Locality",
+            "properties": {
+                "region": {
+                    "description": "Region this :ref:`zone ` belongs to.",
+                    "type": "string"
+                },
+                "subZone": {
+                    "description": "When used for locality of upstream hosts, this field further splits zone into smaller chunks of sub-zones so they can be load balanced independently.",
+                    "type": "string"
+                },
+                "zone": {
+                    "description": "Defines the local service zone where Envoy is running. Though optional, it should be set if discovery service routing is used and the discovery service exposes :ref:`zone data `, either in this message or via :option:`--service-zone`. The meaning of zone is context dependent, e.g. `Availability Zone (AZ) `_ on AWS, `Zone `_ on GCP, etc.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Node": {
+            "description": "Identifies a specific Envoy instance. The node identifier is presented to the management server, which may use this identifier to distinguish per Envoy configuration for serving. [#next-free-field: 12]",
+            "id": "Node",
+            "properties": {
+                "buildVersion": {
+                    "description": "This is motivated by informing a management server during canary which version of Envoy is being tested in a heterogeneous fleet. This will be set by Envoy in management server RPCs. This field is deprecated in favor of the user_agent_name and user_agent_version values.",
+                    "type": "string"
+                },
+                "clientFeatures": {
+                    "description": "Client feature support list. These are well known features described in the Envoy API repository for a given major version of an API. Client features use reverse DNS naming scheme, for example `com.acme.feature`. See :ref:`the list of features ` that xDS client may support.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "cluster": {
+                    "description": "Defines the local service cluster name where Envoy is running. Though optional, it should be set if any of the following features are used: :ref:`statsd `, :ref:`health check cluster verification `, :ref:`runtime override directory `, :ref:`user agent addition `, :ref:`HTTP global rate limiting `, :ref:`CDS `, and :ref:`HTTP tracing `, either in this message or via :option:`--service-cluster`.",
+                    "type": "string"
+                },
+                "extensions": {
+                    "description": "List of extensions and their versions supported by the node.",
+                    "items": {
+                        "$ref": "Extension"
+                    },
+                    "type": "array"
+                },
+                "id": {
+                    "description": "An opaque node identifier for the Envoy node. This also provides the local service node name. It should be set if any of the following features are used: :ref:`statsd `, :ref:`CDS `, and :ref:`HTTP tracing `, either in this message or via :option:`--service-node`.",
+                    "type": "string"
+                },
+                "listeningAddresses": {
+                    "description": "Known listening ports on the node as a generic hint to the management server for filtering :ref:`listeners ` to be returned. For example, if there is a listener bound to port 80, the list can optionally contain the SocketAddress `(0.0.0.0,80)`. The field is optional and just a hint.",
+                    "items": {
+                        "$ref": "Address"
+                    },
+                    "type": "array"
+                },
+                "locality": {
+                    "$ref": "Locality",
+                    "description": "Locality specifying where the Envoy instance is running."
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object.",
+                        "type": "any"
+                    },
+                    "description": "Opaque metadata extending the node identifier. Envoy will pass this directly to the management server.",
+                    "type": "object"
+                },
+                "userAgentBuildVersion": {
+                    "$ref": "BuildVersion",
+                    "description": "Structured version of the entity requesting config."
+                },
+                "userAgentName": {
+                    "description": "Free-form string that identifies the entity requesting config. E.g. \"envoy\" or \"grpc\"",
+                    "type": "string"
+                },
+                "userAgentVersion": {
+                    "description": "Free-form string that identifies the version of the entity requesting config. E.g. \"1.12.2\" or \"abcd1234\", or \"SpecialEnvoyBuild\"",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "NodeMatcher": {
+            "description": "Specifies the way to match a Node. The match follows AND semantics.",
+            "id": "NodeMatcher",
+            "properties": {
+                "nodeId": {
+                    "$ref": "StringMatcher",
+                    "description": "Specifies match criteria on the node id."
+                },
+                "nodeMetadatas": {
+                    "description": "Specifies match criteria on the node metadata.",
+                    "items": {
+                        "$ref": "StructMatcher"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "NullMatch": {
+            "description": "NullMatch is an empty message to specify a null value.",
+            "id": "NullMatch",
+            "properties": {},
+            "type": "object"
+        },
+        "PathSegment": {
+            "description": "Specifies the segment in a path to retrieve value from Struct.",
+            "id": "PathSegment",
+            "properties": {
+                "key": {
+                    "description": "If specified, use the key to retrieve the value in a Struct.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "PerXdsConfig": {
+            "description": "Detailed config (per xDS) with status. [#next-free-field: 6]",
+            "id": "PerXdsConfig",
+            "properties": {
+                "clusterConfig": {
+                    "$ref": "ClustersConfigDump"
+                },
+                "listenerConfig": {
+                    "$ref": "ListenersConfigDump"
+                },
+                "routeConfig": {
+                    "$ref": "RoutesConfigDump"
+                },
+                "scopedRouteConfig": {
+                    "$ref": "ScopedRoutesConfigDump"
+                },
+                "status": {
+                    "enum": [
+                        "UNKNOWN",
+                        "SYNCED",
+                        "NOT_SENT",
+                        "STALE",
+                        "ERROR"
+                    ],
+                    "enumDescriptions": [
+                        "Status info is not available/unknown.",
+                        "Management server has sent the config to client and received ACK.",
+                        "Config is not sent.",
+                        "Management server has sent the config to client but hasn\u2019t received ACK/NACK.",
+                        "Management server has sent the config to client but received NACK."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Pipe": {
+            "id": "Pipe",
+            "properties": {
+                "mode": {
+                    "description": "The mode for the Pipe. Not applicable for abstract sockets.",
+                    "format": "uint32",
+                    "type": "integer"
+                },
+                "path": {
+                    "description": "Unix Domain Socket path. On Linux, paths starting with '@' will use the abstract namespace. The starting '@' is replaced by a null byte by Envoy. Paths starting with '@' will result in an error in environments other than Linux.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RegexMatcher": {
+            "description": "A regex matcher designed for safety when used with untrusted input.",
+            "id": "RegexMatcher",
+            "properties": {
+                "googleRe2": {
+                    "$ref": "GoogleRE2",
+                    "description": "Google's RE2 regex engine."
+                },
+                "regex": {
+                    "description": "The regex match string. The string must be supported by the configured engine.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "RoutesConfigDump": {
+            "description": "Envoy's RDS implementation fills this message with all currently loaded routes, as described by their RouteConfiguration objects. Static routes that are either defined in the bootstrap configuration or defined inline while configuring listeners are separated from those configured dynamically via RDS. Route configuration information can be used to recreate an Envoy configuration by populating all routes as static routes or by returning them in RDS responses.",
+            "id": "RoutesConfigDump",
+            "properties": {
+                "dynamicRouteConfigs": {
+                    "description": "The dynamically loaded route configs.",
+                    "items": {
+                        "$ref": "DynamicRouteConfig"
+                    },
+                    "type": "array"
+                },
+                "staticRouteConfigs": {
+                    "description": "The statically loaded route configs.",
+                    "items": {
+                        "$ref": "StaticRouteConfig"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ScopedRoutesConfigDump": {
+            "description": "Envoy's scoped RDS implementation fills this message with all currently loaded route configuration scopes (defined via ScopedRouteConfigurationsSet protos). This message lists both the scopes defined inline with the higher order object (i.e., the HttpConnectionManager) and the dynamically obtained scopes via the SRDS API.",
+            "id": "ScopedRoutesConfigDump",
+            "properties": {
+                "dynamicScopedRouteConfigs": {
+                    "description": "The dynamically loaded scoped route configs.",
+                    "items": {
+                        "$ref": "DynamicScopedRouteConfigs"
+                    },
+                    "type": "array"
+                },
+                "inlineScopedRouteConfigs": {
+                    "description": "The statically loaded scoped route configs.",
+                    "items": {
+                        "$ref": "InlineScopedRouteConfigs"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "SemanticVersion": {
+            "description": "Envoy uses SemVer (https://semver.org/). Major/minor versions indicate expected behaviors and APIs, the patch version field is used only for security fixes and can be generally ignored.",
+            "id": "SemanticVersion",
+            "properties": {
+                "majorNumber": {
+                    "format": "uint32",
+                    "type": "integer"
+                },
+                "minorNumber": {
+                    "format": "uint32",
+                    "type": "integer"
+                },
+                "patch": {
+                    "format": "uint32",
+                    "type": "integer"
+                }
+            },
+            "type": "object"
+        },
+        "SocketAddress": {
+            "description": "[#next-free-field: 7]",
+            "id": "SocketAddress",
+            "properties": {
+                "address": {
+                    "description": "The address for this socket. :ref:`Listeners ` will bind to the address. An empty address is not allowed. Specify ``0.0.0.0`` or ``::`` to bind to any address. [#comment:TODO(zuercher) reinstate when implemented: It is possible to distinguish a Listener address via the prefix/suffix matching in :ref:`FilterChainMatch `.] When used within an upstream :ref:`BindConfig `, the address controls the source address of outbound connections. For :ref:`clusters `, the cluster type determines whether the address must be an IP (*STATIC* or *EDS* clusters) or a hostname resolved by DNS (*STRICT_DNS* or *LOGICAL_DNS* clusters). Address resolution can be customized via :ref:`resolver_name `.",
+                    "type": "string"
+                },
+                "ipv4Compat": {
+                    "description": "When binding to an IPv6 address above, this enables `IPv4 compatibility `_. Binding to ``::`` will allow both IPv4 and IPv6 connections, with peer IPv4 addresses mapped into IPv6 space as ``::FFFF:``.",
+                    "type": "boolean"
+                },
+                "namedPort": {
+                    "description": "This is only valid if :ref:`resolver_name ` is specified below and the named resolver is capable of named port resolution.",
+                    "type": "string"
+                },
+                "portValue": {
+                    "format": "uint32",
+                    "type": "integer"
+                },
+                "protocol": {
+                    "enum": [
+                        "TCP",
+                        "UDP"
+                    ],
+                    "enumDescriptions": [
+                        "",
+                        ""
+                    ],
+                    "type": "string"
+                },
+                "resolverName": {
+                    "description": "The name of the custom resolver. This must have been registered with Envoy. If this is empty, a context dependent default applies. If the address is a concrete IP address, no resolution will occur. If address is a hostname this should be set for resolution other than DNS. Specifying a custom resolver with *STRICT_DNS* or *LOGICAL_DNS* will generate an error at runtime.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "StaticCluster": {
+            "description": "Describes a statically loaded cluster.",
+            "id": "StaticCluster",
+            "properties": {
+                "cluster": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The cluster config.",
+                    "type": "object"
+                },
+                "lastUpdated": {
+                    "description": "The timestamp when the Cluster was last updated.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "StaticListener": {
+            "description": "Describes a statically loaded listener.",
+            "id": "StaticListener",
+            "properties": {
+                "lastUpdated": {
+                    "description": "The timestamp when the Listener was last successfully updated.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "listener": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The listener config.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "StaticRouteConfig": {
+            "id": "StaticRouteConfig",
+            "properties": {
+                "lastUpdated": {
+                    "description": "The timestamp when the Route was last updated.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "routeConfig": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The route config.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "StringMatcher": {
+            "description": "Specifies the way to match a string. [#next-free-field: 7]",
+            "id": "StringMatcher",
+            "properties": {
+                "exact": {
+                    "description": "The input string must match exactly the string specified here. Examples: * *abc* only matches the value *abc*.",
+                    "type": "string"
+                },
+                "ignoreCase": {
+                    "description": "If true, indicates the exact/prefix/suffix matching should be case insensitive. This has no effect for the safe_regex match. For example, the matcher *data* will match both input string *Data* and *data* if set to true.",
+                    "type": "boolean"
+                },
+                "prefix": {
+                    "description": "The input string must have the prefix specified here. Note: empty prefix is not allowed, please use regex instead. Examples: * *abc* matches the value *abc.xyz*",
+                    "type": "string"
+                },
+                "regex": {
+                    "description": "The input string must match the regular expression specified here. The regex grammar is defined `here `_. Examples: * The regex ``\\d{3}`` matches the value *123* * The regex ``\\d{3}`` does not match the value *1234* * The regex ``\\d{3}`` does not match the value *123.456* .. attention:: This field has been deprecated in favor of `safe_regex` as it is not safe for use with untrusted input in all cases.",
+                    "type": "string"
+                },
+                "safeRegex": {
+                    "$ref": "RegexMatcher",
+                    "description": "The input string must match the regular expression specified here."
+                },
+                "suffix": {
+                    "description": "The input string must have the suffix specified here. Note: empty prefix is not allowed, please use regex instead. Examples: * *abc* matches the value *xyz.abc*",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "StructMatcher": {
+            "description": "StructMatcher provides a general interface to check if a given value is matched in google.protobuf.Struct. It uses `path` to retrieve the value from the struct and then check if it's matched to the specified value. For example, for the following Struct: .. code-block:: yaml fields: a: struct_value: fields: b: struct_value: fields: c: string_value: pro t: list_value: values: - string_value: m - string_value: n The following MetadataMatcher is matched as the path [a, b, c] will retrieve a string value \"pro\" from the Metadata which is matched to the specified prefix match. .. code-block:: yaml path: - key: a - key: b - key: c value: string_match: prefix: pr The following StructMatcher is matched as the code will match one of the string values in the list at the path [a, t]. .. code-block:: yaml path: - key: a - key: t value: list_match: one_of: string_match: exact: m An example use of StructMatcher is to match metadata in envoy.v*.core.Node.",
+            "id": "StructMatcher",
+            "properties": {
+                "path": {
+                    "description": "The path to retrieve the Value from the Struct.",
+                    "items": {
+                        "$ref": "PathSegment"
+                    },
+                    "type": "array"
+                },
+                "value": {
+                    "$ref": "ValueMatcher",
+                    "description": "The StructMatcher is matched if the value retrieved by path is matched to this value."
+                }
+            },
+            "type": "object"
+        },
+        "UpdateFailureState": {
+            "id": "UpdateFailureState",
+            "properties": {
+                "details": {
+                    "description": "Details about the last failed update attempt.",
+                    "type": "string"
+                },
+                "failedConfiguration": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "What the component configuration would have been if the update had succeeded.",
+                    "type": "object"
+                },
+                "lastUpdateAttempt": {
+                    "description": "Time of the latest failed update attempt.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ValueMatcher": {
+            "description": "Specifies the way to match a ProtobufWkt::Value. Primitive values and ListValue are supported. StructValue is not supported and is always not matched. [#next-free-field: 7]",
+            "id": "ValueMatcher",
+            "properties": {
+                "boolMatch": {
+                    "description": "If specified, a match occurs if and only if the target value is a bool value and is equal to this field.",
+                    "type": "boolean"
+                },
+                "doubleMatch": {
+                    "$ref": "DoubleMatcher",
+                    "description": "If specified, a match occurs if and only if the target value is a double value and is matched to this field."
+                },
+                "listMatch": {
+                    "$ref": "ListMatcher",
+                    "description": "If specified, a match occurs if and only if the target value is a list value and is matched to this field."
+                },
+                "nullMatch": {
+                    "$ref": "NullMatch",
+                    "description": "If specified, a match occurs if and only if the target value is a NullValue."
+                },
+                "presentMatch": {
+                    "description": "If specified, value match will be performed based on whether the path is referring to a valid primitive value in the metadata. If the path is referring to a non-primitive value, the result is always not matched.",
+                    "type": "boolean"
+                },
+                "stringMatch": {
+                    "$ref": "StringMatcher",
+                    "description": "If specified, a match occurs if and only if the target value is a string value and is matched to this field."
+                }
+            },
+            "type": "object"
         }
-      },
-      "id": "Locality",
-      "type": "object"
     },
-    "DoubleMatcher": {
-      "properties": {
-        "exact": {
-          "format": "double",
-          "description": "If specified, the input double value must be equal to the value specified here.",
-          "type": "number"
-        },
-        "range": {
-          "$ref": "DoubleRange",
-          "description": "If specified, the input double value must be in the range specified here. Note: The range is using half-open interval semantics [start, end)."
-        }
-      },
-      "id": "DoubleMatcher",
-      "type": "object",
-      "description": "Specifies the way to match a double value."
-    },
-    "SocketAddress": {
-      "properties": {
-        "address": {
-          "type": "string",
-          "description": "The address for this socket. :ref:`Listeners ` will bind to the address. An empty address is not allowed. Specify ``0.0.0.0`` or ``::`` to bind to any address. [#comment:TODO(zuercher) reinstate when implemented: It is possible to distinguish a Listener address via the prefix/suffix matching in :ref:`FilterChainMatch `.] When used within an upstream :ref:`BindConfig `, the address controls the source address of outbound connections. For :ref:`clusters `, the cluster type determines whether the address must be an IP (*STATIC* or *EDS* clusters) or a hostname resolved by DNS (*STRICT_DNS* or *LOGICAL_DNS* clusters). Address resolution can be customized via :ref:`resolver_name `."
-        },
-        "protocol": {
-          "enum": [
-            "TCP",
-            "UDP"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            ""
-          ]
-        },
-        "resolverName": {
-          "type": "string",
-          "description": "The name of the custom resolver. This must have been registered with Envoy. If this is empty, a context dependent default applies. If the address is a concrete IP address, no resolution will occur. If address is a hostname this should be set for resolution other than DNS. Specifying a custom resolver with *STRICT_DNS* or *LOGICAL_DNS* will generate an error at runtime."
-        },
-        "ipv4Compat": {
-          "description": "When binding to an IPv6 address above, this enables `IPv4 compatibility `_. Binding to ``::`` will allow both IPv4 and IPv6 connections, with peer IPv4 addresses mapped into IPv6 space as ``::FFFF:``.",
-          "type": "boolean"
-        },
-        "portValue": {
-          "type": "integer",
-          "format": "uint32"
-        },
-        "namedPort": {
-          "description": "This is only valid if :ref:`resolver_name ` is specified below and the named resolver is capable of named port resolution.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "[#next-free-field: 7]",
-      "id": "SocketAddress"
-    },
-    "UpdateFailureState": {
-      "type": "object",
-      "properties": {
-        "details": {
-          "type": "string",
-          "description": "Details about the last failed update attempt."
-        },
-        "lastUpdateAttempt": {
-          "type": "string",
-          "description": "Time of the latest failed update attempt.",
-          "format": "google-datetime"
-        },
-        "failedConfiguration": {
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "description": "What the component configuration would have been if the update had succeeded.",
-          "type": "object"
-        }
-      },
-      "id": "UpdateFailureState"
-    },
-    "DynamicListenerState": {
-      "type": "object",
-      "id": "DynamicListenerState",
-      "properties": {
-        "lastUpdated": {
-          "description": "The timestamp when the Listener was last successfully updated.",
-          "type": "string",
-          "format": "google-datetime"
-        },
-        "listener": {
-          "description": "The listener config.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          }
-        },
-        "versionInfo": {
-          "type": "string",
-          "description": "This is the per-resource version information. This version is currently taken from the :ref:`version_info ` field at the time that the listener was loaded. In the future, discrete per-listener versions may be supported by the API."
-        }
-      }
-    },
-    "ScopedRoutesConfigDump": {
-      "id": "ScopedRoutesConfigDump",
-      "properties": {
-        "dynamicScopedRouteConfigs": {
-          "description": "The dynamically loaded scoped route configs.",
-          "type": "array",
-          "items": {
-            "$ref": "DynamicScopedRouteConfigs"
-          }
-        },
-        "inlineScopedRouteConfigs": {
-          "description": "The statically loaded scoped route configs.",
-          "items": {
-            "$ref": "InlineScopedRouteConfigs"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "description": "Envoy's scoped RDS implementation fills this message with all currently loaded route configuration scopes (defined via ScopedRouteConfigurationsSet protos). This message lists both the scopes defined inline with the higher order object (i.e., the HttpConnectionManager) and the dynamically obtained scopes via the SRDS API."
-    },
-    "DynamicListener": {
-      "description": "Describes a dynamically loaded listener via the LDS API. [#next-free-field: 6]",
-      "properties": {
-        "drainingState": {
-          "description": "The listener state for any draining listener by this name. These are listeners that are currently undergoing draining in preparation to stop servicing data plane traffic. Note that if attempting to recreate an Envoy configuration from a configuration dump, the draining listeners should generally be discarded.",
-          "$ref": "DynamicListenerState"
-        },
-        "activeState": {
-          "description": "The listener state for any active listener by this name. These are listeners that are available to service data plane traffic.",
-          "$ref": "DynamicListenerState"
-        },
-        "name": {
-          "type": "string",
-          "description": "The name or unique id of this listener, pulled from the DynamicListenerState config."
-        },
-        "errorState": {
-          "$ref": "UpdateFailureState",
-          "description": "Set if the last update failed, cleared after the next successful update."
-        },
-        "warmingState": {
-          "$ref": "DynamicListenerState",
-          "description": "The listener state for any warming listener by this name. These are listeners that are currently undergoing warming in preparation to service data plane traffic. Note that if attempting to recreate an Envoy configuration from a configuration dump, the warming listeners should generally be discarded."
-        }
-      },
-      "type": "object",
-      "id": "DynamicListener"
-    },
-    "StaticCluster": {
-      "type": "object",
-      "id": "StaticCluster",
-      "properties": {
-        "cluster": {
-          "description": "The cluster config.",
-          "type": "object",
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          }
-        },
-        "lastUpdated": {
-          "description": "The timestamp when the Cluster was last updated.",
-          "type": "string",
-          "format": "google-datetime"
-        }
-      },
-      "description": "Describes a statically loaded cluster."
-    },
-    "DynamicCluster": {
-      "properties": {
-        "cluster": {
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "type": "object",
-          "description": "The cluster config."
-        },
-        "lastUpdated": {
-          "format": "google-datetime",
-          "type": "string",
-          "description": "The timestamp when the Cluster was last updated."
-        },
-        "versionInfo": {
-          "type": "string",
-          "description": "This is the per-resource version information. This version is currently taken from the :ref:`version_info ` field at the time that the cluster was loaded. In the future, discrete per-cluster versions may be supported by the API."
-        }
-      },
-      "type": "object",
-      "description": "Describes a dynamically loaded cluster via the CDS API.",
-      "id": "DynamicCluster"
-    },
-    "DynamicRouteConfig": {
-      "id": "DynamicRouteConfig",
-      "type": "object",
-      "properties": {
-        "versionInfo": {
-          "description": "This is the per-resource version information. This version is currently taken from the :ref:`version_info ` field at the time that the route configuration was loaded.",
-          "type": "string"
-        },
-        "lastUpdated": {
-          "format": "google-datetime",
-          "description": "The timestamp when the Route was last updated.",
-          "type": "string"
-        },
-        "routeConfig": {
-          "description": "The route config.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          }
-        }
-      }
-    }
-  },
-  "revision": "20200816",
-  "version_module": true,
-  "rootUrl": "https://trafficdirector.googleapis.com/",
-  "fullyEncodeReservedExpansion": true,
-  "ownerDomain": "google.com",
-  "description": "",
-  "discoveryVersion": "v1",
-  "basePath": "",
-  "parameters": {
-    "fields": {
-      "type": "string",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "location": "query"
-    },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "description": "V1 error format.",
-      "location": "query",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "type": "string",
-      "enum": [
-        "1",
-        "2"
-      ]
-    },
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "oauth_token": {
-      "location": "query",
-      "type": "string",
-      "description": "OAuth 2.0 token for the current user."
-    },
-    "quotaUser": {
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "type": "string",
-      "location": "query"
-    },
-    "alt": {
-      "location": "query",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "description": "Data format for response.",
-      "default": "json",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "type": "string"
-    },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "key": {
-      "location": "query",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "type": "string"
-    },
-    "access_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth access token."
-    }
-  },
-  "resources": {
-    "discovery": {
-      "methods": {
-        "client_status": {
-          "description": "",
-          "id": "trafficdirector.discovery.client_status",
-          "parameters": {},
-          "parameterOrder": [],
-          "flatPath": "v2/discovery:client_status",
-          "response": {
-            "$ref": "ClientStatusResponse"
-          },
-          "httpMethod": "POST",
-          "path": "v2/discovery:client_status",
-          "request": {
-            "$ref": "ClientStatusRequest"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ]
-        }
-      }
-    }
-  },
-  "name": "trafficdirector",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "kind": "discovery#restDescription",
-  "canonicalName": "Traffic Director Service",
-  "id": "trafficdirector:v2",
-  "ownerName": "Google",
-  "servicePath": ""
-}
+    "servicePath": "",
+    "title": "Traffic Director API",
+    "version": "v2",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/translate.v3.json b/googleapiclient/discovery_cache/documents/translate.v3.json
index 64dba1e..87f66f4 100644
--- a/googleapiclient/discovery_cache/documents/translate.v3.json
+++ b/googleapiclient/discovery_cache/documents/translate.v3.json
@@ -1,1243 +1,1243 @@
 {
-  "mtlsRootUrl": "https://translation.mtls.googleapis.com/",
-  "rootUrl": "https://translation.googleapis.com/",
-  "protocol": "rest",
-  "name": "translate",
-  "title": "Cloud Translation API",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        },
-        "https://www.googleapis.com/auth/cloud-translation": {
-          "description": "Translate text from one language to another using Google Translate"
-        }
-      }
-    }
-  },
-  "revision": "20201106",
-  "version": "v3",
-  "kind": "discovery#restDescription",
-  "ownerDomain": "google.com",
-  "baseUrl": "https://translation.googleapis.com/",
-  "ownerName": "Google",
-  "canonicalName": "Translate",
-  "schemas": {
-    "BatchTranslateTextRequest": {
-      "type": "object",
-      "description": "The batch translation request.",
-      "id": "BatchTranslateTextRequest",
-      "properties": {
-        "models": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional. The models to use for translation. Map's key is target language code. Map's value is model name. Value can be a built-in general model, or an AutoML Translation model. The value format depends on model type: - AutoML Translation models: `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - General (built-in) models: `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, `projects/{project-number-or-id}/locations/{location-id}/models/general/base` If the map is empty or a specific model is not requested for a language pair, then default google model (nmt) is used.",
-          "type": "object"
-        },
-        "sourceLanguageCode": {
-          "description": "Required. Source language code.",
-          "type": "string"
-        },
-        "outputConfig": {
-          "$ref": "OutputConfig",
-          "description": "Required. Output configuration. If 2 input configs match to the same file (that is, same input path), we don't generate output for duplicate inputs."
-        },
-        "glossaries": {
-          "description": "Optional. Glossaries to be applied for translation. It's keyed by target language code.",
-          "additionalProperties": {
-            "$ref": "TranslateTextGlossaryConfig"
-          },
-          "type": "object"
-        },
-        "targetLanguageCodes": {
-          "description": "Required. Specify up to 10 language codes here.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "labels": {
-          "type": "object",
-          "description": "Optional. The labels with user-defined metadata for the request. Label keys and values can be no longer than 63 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. Label values are optional. Label keys must start with a letter. See https://cloud.google.com/translate/docs/advanced/labels for more information.",
-          "additionalProperties": {
-            "type": "string"
-          }
-        },
-        "inputConfigs": {
-          "items": {
-            "$ref": "InputConfig"
-          },
-          "type": "array",
-          "description": "Required. Input configurations. The total number of files matched should be \u003c= 1000. The total content size should be \u003c= 100M Unicode codepoints. The files must use UTF-8 encoding."
-        }
-      }
-    },
-    "TranslateTextResponse": {
-      "type": "object",
-      "id": "TranslateTextResponse",
-      "properties": {
-        "translations": {
-          "description": "Text translation responses with no glossary applied. This field has the same length as `contents`.",
-          "items": {
-            "$ref": "Translation"
-          },
-          "type": "array"
-        },
-        "glossaryTranslations": {
-          "type": "array",
-          "description": "Text translation responses if a glossary is provided in the request. This can be the same as `translations` if no terms apply. This field has the same length as `contents`.",
-          "items": {
-            "$ref": "Translation"
-          }
-        }
-      }
-    },
-    "LanguageCodePair": {
-      "type": "object",
-      "id": "LanguageCodePair",
-      "properties": {
-        "sourceLanguageCode": {
-          "description": "Required. The BCP-47 language code of the input text, for example, \"en-US\". Expected to be an exact match for GlossaryTerm.language_code.",
-          "type": "string"
-        },
-        "targetLanguageCode": {
-          "description": "Required. The BCP-47 language code for translation output, for example, \"zh-CN\". Expected to be an exact match for GlossaryTerm.language_code.",
-          "type": "string"
-        }
-      },
-      "description": "Used with unidirectional glossaries."
-    },
-    "ListLocationsResponse": {
-      "type": "object",
-      "properties": {
-        "locations": {
-          "items": {
-            "$ref": "Location"
-          },
-          "type": "array",
-          "description": "A list of locations that matches the specified filter in the request."
-        },
-        "nextPageToken": {
-          "description": "The standard List next-page token.",
-          "type": "string"
-        }
-      },
-      "id": "ListLocationsResponse",
-      "description": "The response message for Locations.ListLocations."
-    },
-    "GcsSource": {
-      "id": "GcsSource",
-      "description": "The Google Cloud Storage location for the input content.",
-      "type": "object",
-      "properties": {
-        "inputUri": {
-          "description": "Required. Source data URI. For example, `gs://my_bucket/my_object`.",
-          "type": "string"
-        }
-      }
-    },
-    "ListOperationsResponse": {
-      "id": "ListOperationsResponse",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "The standard List next-page token."
-        },
-        "operations": {
-          "type": "array",
-          "items": {
-            "$ref": "Operation"
-          },
-          "description": "A list of operations that matches the specified filter in the request."
-        }
-      },
-      "description": "The response message for Operations.ListOperations."
-    },
-    "LanguageCodesSet": {
-      "description": "Used with equivalent term set glossaries.",
-      "properties": {
-        "languageCodes": {
-          "description": "The BCP-47 language code(s) for terms defined in the glossary. All entries are unique. The list contains at least two entries. Expected to be an exact match for GlossaryTerm.language_code.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "id": "LanguageCodesSet"
-    },
-    "DetectLanguageResponse": {
-      "properties": {
-        "languages": {
-          "description": "The most probable language detected by the Translation API. For each request, the Translation API will always return only one result.",
-          "items": {
-            "$ref": "DetectedLanguage"
-          },
-          "type": "array"
-        }
-      },
-      "id": "DetectLanguageResponse",
-      "type": "object",
-      "description": "The response message for language detection."
-    },
-    "GcsDestination": {
-      "type": "object",
-      "description": "The Google Cloud Storage location for the output content.",
-      "properties": {
-        "outputUriPrefix": {
-          "type": "string",
-          "description": "Required. The bucket used in 'output_uri_prefix' must exist and there must be no files under 'output_uri_prefix'. 'output_uri_prefix' must end with \"/\" and start with \"gs://\". One 'output_uri_prefix' can only be used by one batch translation job at a time. Otherwise an INVALID_ARGUMENT (400) error is returned."
-        }
-      },
-      "id": "GcsDestination"
-    },
-    "Glossary": {
-      "id": "Glossary",
-      "type": "object",
-      "description": "Represents a glossary built from user provided data.",
-      "properties": {
-        "endTime": {
-          "format": "google-datetime",
-          "readOnly": true,
-          "description": "Output only. When the glossary creation was finished.",
-          "type": "string"
-        },
-        "inputConfig": {
-          "$ref": "GlossaryInputConfig",
-          "description": "Required. Provides examples to build the glossary from. Total glossary must not exceed 10M Unicode codepoints."
-        },
-        "languagePair": {
-          "description": "Used with unidirectional glossaries.",
-          "$ref": "LanguageCodePair"
-        },
-        "name": {
-          "description": "Required. The resource name of the glossary. Glossary names have the form `projects/{project-number-or-id}/locations/{location-id}/glossaries/{glossary-id}`.",
-          "type": "string"
-        },
-        "submitTime": {
-          "description": "Output only. When CreateGlossary was called.",
-          "type": "string",
-          "readOnly": true,
-          "format": "google-datetime"
-        },
-        "languageCodesSet": {
-          "description": "Used with equivalent term set glossaries.",
-          "$ref": "LanguageCodesSet"
-        },
-        "entryCount": {
-          "format": "int32",
-          "readOnly": true,
-          "type": "integer",
-          "description": "Output only. The number of entries defined in the glossary."
-        }
-      }
-    },
-    "DetectLanguageRequest": {
-      "description": "The request message for language detection.",
-      "id": "DetectLanguageRequest",
-      "type": "object",
-      "properties": {
-        "content": {
-          "type": "string",
-          "description": "The content of the input stored as a string."
-        },
-        "labels": {
-          "description": "Optional. The labels with user-defined metadata for the request. Label keys and values can be no longer than 63 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. Label values are optional. Label keys must start with a letter. See https://cloud.google.com/translate/docs/advanced/labels for more information.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          }
-        },
-        "model": {
-          "description": "Optional. The language detection model to be used. Format: `projects/{project-number-or-id}/locations/{location-id}/models/language-detection/{model-id}` Only one language detection model is currently supported: `projects/{project-number-or-id}/locations/{location-id}/models/language-detection/default`. If not specified, the default model is used.",
-          "type": "string"
-        },
-        "mimeType": {
-          "description": "Optional. The format of the source text, for example, \"text/html\", \"text/plain\". If left blank, the MIME type defaults to \"text/html\".",
-          "type": "string"
-        }
-      }
-    },
-    "Translation": {
-      "properties": {
-        "glossaryConfig": {
-          "$ref": "TranslateTextGlossaryConfig",
-          "description": "The `glossary_config` used for this translation."
-        },
-        "translatedText": {
-          "description": "Text translated into the target language.",
-          "type": "string"
-        },
-        "detectedLanguageCode": {
-          "description": "The BCP-47 language code of source text in the initial request, detected automatically, if no source language was passed within the initial request. If the source language was passed, auto-detection of the language does not occur and this field is empty.",
-          "type": "string"
-        },
-        "model": {
-          "description": "Only present when `model` is present in the request. `model` here is normalized to have project number. For example: If the `model` requested in TranslationTextRequest is `projects/{project-id}/locations/{location-id}/models/general/nmt` then `model` here would be normalized to `projects/{project-number}/locations/{location-id}/models/general/nmt`.",
-          "type": "string"
-        }
-      },
-      "description": "A single translation response.",
-      "id": "Translation",
-      "type": "object"
-    },
-    "Operation": {
-      "id": "Operation",
-      "type": "object",
-      "description": "This resource represents a long-running operation that is the result of a network API call.",
-      "properties": {
-        "response": {
-          "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
-          "type": "object",
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          }
-        },
-        "name": {
-          "type": "string",
-          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`."
-        },
-        "error": {
-          "$ref": "Status",
-          "description": "The error result of the operation in case of failure or cancellation."
-        },
-        "metadata": {
-          "type": "object",
-          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          }
-        },
-        "done": {
-          "type": "boolean",
-          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available."
-        }
-      }
-    },
-    "Location": {
-      "properties": {
-        "name": {
-          "description": "Resource name for the location, which may vary between implementations. For example: `\"projects/example-project/locations/us-east1\"`",
-          "type": "string"
-        },
-        "displayName": {
-          "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\".",
-          "type": "string"
-        },
-        "metadata": {
-          "description": "Service-specific metadata. For example the available capacity at the given location.",
-          "type": "object",
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          }
-        },
-        "locationId": {
-          "type": "string",
-          "description": "The canonical id for this location. For example: `\"us-east1\"`."
-        },
-        "labels": {
-          "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}",
-          "additionalProperties": {
-            "type": "string"
-          },
-          "type": "object"
-        }
-      },
-      "id": "Location",
-      "description": "A resource that represents Google Cloud Platform location.",
-      "type": "object"
-    },
-    "Status": {
-      "id": "Status",
-      "properties": {
-        "code": {
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "details": {
-          "type": "array",
-          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
-          "items": {
-            "type": "object",
-            "additionalProperties": {
-              "description": "Properties of the object. Contains field @type with type URL.",
-              "type": "any"
-            }
-          }
-        },
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors)."
-    },
-    "DetectedLanguage": {
-      "type": "object",
-      "description": "The response message for language detection.",
-      "properties": {
-        "languageCode": {
-          "description": "The BCP-47 language code of source content in the request, detected automatically.",
-          "type": "string"
-        },
-        "confidence": {
-          "format": "float",
-          "type": "number",
-          "description": "The confidence of the detection result for this language."
-        }
-      },
-      "id": "DetectedLanguage"
-    },
-    "GlossaryInputConfig": {
-      "description": "Input configuration for glossaries.",
-      "properties": {
-        "gcsSource": {
-          "$ref": "GcsSource",
-          "description": "Required. Google Cloud Storage location of glossary data. File format is determined based on the filename extension. API returns [google.rpc.Code.INVALID_ARGUMENT] for unsupported URI-s and file formats. Wildcards are not allowed. This must be a single file in one of the following formats: For unidirectional glossaries: - TSV/CSV (`.tsv`/`.csv`): 2 column file, tab- or comma-separated. The first column is source text. The second column is target text. The file must not contain headers. That is, the first row is data, not column names. - TMX (`.tmx`): TMX file with parallel data defining source/target term pairs. For equivalent term sets glossaries: - CSV (`.csv`): Multi-column CSV file defining equivalent glossary terms in multiple languages. See documentation for more information - [glossaries](https://cloud.google.com/translate/docs/advanced/glossary)."
-        }
-      },
-      "type": "object",
-      "id": "GlossaryInputConfig"
-    },
-    "CancelOperationRequest": {
-      "properties": {},
-      "description": "The request message for Operations.CancelOperation.",
-      "type": "object",
-      "id": "CancelOperationRequest"
-    },
-    "WaitOperationRequest": {
-      "properties": {
-        "timeout": {
-          "format": "google-duration",
-          "description": "The maximum duration to wait before timing out. If left blank, the wait will be at most the time permitted by the underlying HTTP/RPC protocol. If RPC context deadline is also specified, the shorter one will be used.",
-          "type": "string"
-        }
-      },
-      "description": "The request message for Operations.WaitOperation.",
-      "type": "object",
-      "id": "WaitOperationRequest"
-    },
-    "ListGlossariesResponse": {
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "A token to retrieve a page of results. Pass this value in the [ListGlossariesRequest.page_token] field in the subsequent call to `ListGlossaries` method to retrieve the next page of results."
-        },
-        "glossaries": {
-          "items": {
-            "$ref": "Glossary"
-          },
-          "description": "The list of glossaries for a project.",
-          "type": "array"
-        }
-      },
-      "description": "Response message for ListGlossaries.",
-      "id": "ListGlossariesResponse"
-    },
-    "OutputConfig": {
-      "description": "Output configuration for BatchTranslateText request.",
-      "id": "OutputConfig",
-      "properties": {
-        "gcsDestination": {
-          "$ref": "GcsDestination",
-          "description": "Google Cloud Storage destination for output content. For every single input file (for example, gs://a/b/c.[extension]), we generate at most 2 * n output files. (n is the # of target_language_codes in the BatchTranslateTextRequest). Output files (tsv) generated are compliant with RFC 4180 except that record delimiters are '\\n' instead of '\\r\\n'. We don't provide any way to change record delimiters. While the input files are being processed, we write/update an index file 'index.csv' under 'output_uri_prefix' (for example, gs://translation-test/index.csv) The index file is generated/updated as new files are being translated. The format is: input_file,target_language_code,translations_file,errors_file, glossary_translations_file,glossary_errors_file input_file is one file we matched using gcs_source.input_uri. target_language_code is provided in the request. translations_file contains the translations. (details provided below) errors_file contains the errors during processing of the file. (details below). Both translations_file and errors_file could be empty strings if we have no content to output. glossary_translations_file and glossary_errors_file are always empty strings if the input_file is tsv. They could also be empty if we have no content to output. Once a row is present in index.csv, the input/output matching never changes. Callers should also expect all the content in input_file are processed and ready to be consumed (that is, no partial output file is written). Since index.csv will be keeping updated during the process, please make sure there is no custom retention policy applied on the output bucket that may avoid file updating. (https://cloud.google.com/storage/docs/bucket-lock?hl=en#retention-policy) The format of translations_file (for target language code 'trg') is: gs://translation_test/a_b_c_'trg'_translations.[extension] If the input file extension is tsv, the output has the following columns: Column 1: ID of the request provided in the input, if it's not provided in the input, then the input row number is used (0-based). Column 2: source sentence. Column 3: translation without applying a glossary. Empty string if there is an error. Column 4 (only present if a glossary is provided in the request): translation after applying the glossary. Empty string if there is an error applying the glossary. Could be same string as column 3 if there is no glossary applied. If input file extension is a txt or html, the translation is directly written to the output file. If glossary is requested, a separate glossary_translations_file has format of gs://translation_test/a_b_c_'trg'_glossary_translations.[extension] The format of errors file (for target language code 'trg') is: gs://translation_test/a_b_c_'trg'_errors.[extension] If the input file extension is tsv, errors_file contains the following: Column 1: ID of the request provided in the input, if it's not provided in the input, then the input row number is used (0-based). Column 2: source sentence. Column 3: Error detail for the translation. Could be empty. Column 4 (only present if a glossary is provided in the request): Error when applying the glossary. If the input file extension is txt or html, glossary_error_file will be generated that contains error details. glossary_error_file has format of gs://translation_test/a_b_c_'trg'_glossary_errors.[extension]"
-        }
-      },
-      "type": "object"
-    },
-    "InputConfig": {
-      "type": "object",
-      "properties": {
-        "mimeType": {
-          "type": "string",
-          "description": "Optional. Can be \"text/plain\" or \"text/html\". For `.tsv`, \"text/html\" is used if mime_type is missing. For `.html`, this field must be \"text/html\" or empty. For `.txt`, this field must be \"text/plain\" or empty."
-        },
-        "gcsSource": {
-          "$ref": "GcsSource",
-          "description": "Required. Google Cloud Storage location for the source input. This can be a single file (for example, `gs://translation-test/input.tsv`) or a wildcard (for example, `gs://translation-test/*`). If a file extension is `.tsv`, it can contain either one or two columns. The first column (optional) is the id of the text request. If the first column is missing, we use the row number (0-based) from the input file as the ID in the output file. The second column is the actual text to be translated. We recommend each row be \u003c= 10K Unicode codepoints, otherwise an error might be returned. Note that the input tsv must be RFC 4180 compliant. You could use https://github.com/Clever/csvlint to check potential formatting errors in your tsv file. csvlint --delimiter='\\t' your_input_file.tsv The other supported file extensions are `.txt` or `.html`, which is treated as a single large chunk of text."
-        }
-      },
-      "id": "InputConfig",
-      "description": "Input configuration for BatchTranslateText request."
-    },
-    "TranslateTextRequest": {
-      "id": "TranslateTextRequest",
-      "properties": {
-        "mimeType": {
-          "description": "Optional. The format of the source text, for example, \"text/html\", \"text/plain\". If left blank, the MIME type defaults to \"text/html\".",
-          "type": "string"
-        },
-        "glossaryConfig": {
-          "$ref": "TranslateTextGlossaryConfig",
-          "description": "Optional. Glossary to be applied. The glossary must be within the same region (have the same location-id) as the model, otherwise an INVALID_ARGUMENT (400) error is returned."
-        },
-        "model": {
-          "type": "string",
-          "description": "Optional. The `model` type requested for this translation. The format depends on model type: - AutoML Translation models: `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - General (built-in) models: `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, `projects/{project-number-or-id}/locations/{location-id}/models/general/base` For global (non-regionalized) requests, use `location-id` `global`. For example, `projects/{project-number-or-id}/locations/global/models/general/nmt`. If missing, the system decides which google base model to use."
-        },
-        "contents": {
-          "description": "Required. The content of the input in string format. We recommend the total content be less than 30k codepoints. The max length of this field is 1024. Use BatchTranslateText for larger text.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "sourceLanguageCode": {
-          "description": "Optional. The BCP-47 language code of the input text if known, for example, \"en-US\" or \"sr-Latn\". Supported language codes are listed in Language Support. If the source language isn't specified, the API attempts to identify the source language automatically and returns the source language within the response.",
-          "type": "string"
-        },
-        "targetLanguageCode": {
-          "type": "string",
-          "description": "Required. The BCP-47 language code to use for translation of the input text, set to one of the language codes listed in Language Support."
-        },
-        "labels": {
-          "type": "object",
-          "description": "Optional. The labels with user-defined metadata for the request. Label keys and values can be no longer than 63 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. Label values are optional. Label keys must start with a letter. See https://cloud.google.com/translate/docs/advanced/labels for more information.",
-          "additionalProperties": {
-            "type": "string"
-          }
-        }
-      },
-      "type": "object",
-      "description": "The request message for synchronous translation."
-    },
-    "SupportedLanguage": {
-      "description": "A single supported language response corresponds to information related to one supported language.",
-      "id": "SupportedLanguage",
-      "type": "object",
-      "properties": {
-        "languageCode": {
-          "type": "string",
-          "description": "Supported language code, generally consisting of its ISO 639-1 identifier, for example, 'en', 'ja'. In certain cases, BCP-47 codes including language and region identifiers are returned (for example, 'zh-TW' and 'zh-CN')"
-        },
-        "displayName": {
-          "type": "string",
-          "description": "Human readable name of the language localized in the display language specified in the request."
-        },
-        "supportSource": {
-          "description": "Can be used as source language.",
-          "type": "boolean"
-        },
-        "supportTarget": {
-          "type": "boolean",
-          "description": "Can be used as target language."
-        }
-      }
-    },
-    "Empty": {
-      "type": "object",
-      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
-      "id": "Empty",
-      "properties": {}
-    },
-    "SupportedLanguages": {
-      "type": "object",
-      "id": "SupportedLanguages",
-      "properties": {
-        "languages": {
-          "description": "A list of supported language responses. This list contains an entry for each language the Translation API supports.",
-          "items": {
-            "$ref": "SupportedLanguage"
-          },
-          "type": "array"
-        }
-      },
-      "description": "The response message for discovering supported languages."
-    },
-    "TranslateTextGlossaryConfig": {
-      "description": "Configures which glossary should be used for a specific target language, and defines options for applying that glossary.",
-      "properties": {
-        "ignoreCase": {
-          "type": "boolean",
-          "description": "Optional. Indicates match is case-insensitive. Default value is false if missing."
-        },
-        "glossary": {
-          "description": "Required. The `glossary` to be applied for this translation. The format depends on glossary: - User provided custom glossary: `projects/{project-number-or-id}/locations/{location-id}/glossaries/{glossary-id}`",
-          "type": "string"
-        }
-      },
-      "id": "TranslateTextGlossaryConfig",
-      "type": "object"
-    }
-  },
-  "parameters": {
-    "key": {
-      "type": "string",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "location": "query",
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
-    },
-    "prettyPrint": {
-      "location": "query",
-      "type": "boolean",
-      "description": "Returns response with indentations and line breaks.",
-      "default": "true"
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "alt": {
-      "location": "query",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "default": "json",
-      "description": "Data format for response.",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "type": "string"
-    },
-    "$.xgafv": {
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "description": "V1 error format.",
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ]
-    },
-    "quotaUser": {
-      "location": "query",
-      "type": "string",
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters."
-    },
-    "callback": {
-      "description": "JSONP",
-      "location": "query",
-      "type": "string"
-    },
-    "access_token": {
-      "type": "string",
-      "description": "OAuth access token.",
-      "location": "query"
-    },
-    "fields": {
-      "type": "string",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "location": "query"
-    },
-    "oauth_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user."
-    }
-  },
-  "id": "translate:v3",
-  "batchPath": "batch",
-  "fullyEncodeReservedExpansion": true,
-  "documentationLink": "https://cloud.google.com/translate/docs/quickstarts",
-  "discoveryVersion": "v1",
-  "resources": {
-    "projects": {
-      "resources": {
-        "locations": {
-          "methods": {
-            "get": {
-              "description": "Gets information about a location.",
-              "path": "v3/{+name}",
-              "httpMethod": "GET",
-              "id": "translate.projects.locations.get",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-translation"
-              ],
-              "parameterOrder": [
-                "name"
-              ],
-              "flatPath": "v3/projects/{projectsId}/locations/{locationsId}",
-              "parameters": {
-                "name": {
-                  "pattern": "^projects/[^/]+/locations/[^/]+$",
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "Resource name for the location."
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
+                },
+                "https://www.googleapis.com/auth/cloud-translation": {
+                    "description": "Translate text from one language to another using Google Translate"
                 }
-              },
-              "response": {
-                "$ref": "Location"
-              }
+            }
+        }
+    },
+    "basePath": "",
+    "baseUrl": "https://translation.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Translate",
+    "description": "Integrates text translation into your website or application.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/translate/docs/quickstarts",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "translate:v3",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://translation.mtls.googleapis.com/",
+    "name": "translate",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        }
+    },
+    "protocol": "rest",
+    "resources": {
+        "projects": {
+            "methods": {
+                "detectLanguage": {
+                    "description": "Detects the language of text within a request.",
+                    "flatPath": "v3/projects/{projectsId}:detectLanguage",
+                    "httpMethod": "POST",
+                    "id": "translate.projects.detectLanguage",
+                    "parameterOrder": [
+                        "parent"
+                    ],
+                    "parameters": {
+                        "parent": {
+                            "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}/locations/{location-id}` or `projects/{project-number-or-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Only models within the same region (has same location-id) can be used. Otherwise an INVALID_ARGUMENT (400) error is returned.",
+                            "location": "path",
+                            "pattern": "^projects/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v3/{+parent}:detectLanguage",
+                    "request": {
+                        "$ref": "DetectLanguageRequest"
+                    },
+                    "response": {
+                        "$ref": "DetectLanguageResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-translation"
+                    ]
+                },
+                "getSupportedLanguages": {
+                    "description": "Returns a list of supported languages for translation.",
+                    "flatPath": "v3/projects/{projectsId}/supportedLanguages",
+                    "httpMethod": "GET",
+                    "id": "translate.projects.getSupportedLanguages",
+                    "parameterOrder": [
+                        "parent"
+                    ],
+                    "parameters": {
+                        "displayLanguageCode": {
+                            "description": "Optional. The language to use to return localized, human readable names of supported languages. If missing, then display names are not returned in a response.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "model": {
+                            "description": "Optional. Get supported languages of this model. The format depends on model type: - AutoML Translation models: `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - General (built-in) models: `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, `projects/{project-number-or-id}/locations/{location-id}/models/general/base` Returns languages supported by the specified model. If missing, we get supported languages of Google general base (PBMT) model.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "parent": {
+                            "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}` or `projects/{project-number-or-id}/locations/{location-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Non-global location is required for AutoML models. Only models within the same region (have same location-id) can be used, otherwise an INVALID_ARGUMENT (400) error is returned.",
+                            "location": "path",
+                            "pattern": "^projects/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v3/{+parent}/supportedLanguages",
+                    "response": {
+                        "$ref": "SupportedLanguages"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-translation"
+                    ]
+                },
+                "translateText": {
+                    "description": "Translates input text and returns translated text.",
+                    "flatPath": "v3/projects/{projectsId}:translateText",
+                    "httpMethod": "POST",
+                    "id": "translate.projects.translateText",
+                    "parameterOrder": [
+                        "parent"
+                    ],
+                    "parameters": {
+                        "parent": {
+                            "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}` or `projects/{project-number-or-id}/locations/{location-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Non-global location is required for requests using AutoML models or custom glossaries. Models and glossaries must be within the same region (have same location-id), otherwise an INVALID_ARGUMENT (400) error is returned.",
+                            "location": "path",
+                            "pattern": "^projects/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v3/{+parent}:translateText",
+                    "request": {
+                        "$ref": "TranslateTextRequest"
+                    },
+                    "response": {
+                        "$ref": "TranslateTextResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-translation"
+                    ]
+                }
             },
-            "getSupportedLanguages": {
-              "id": "translate.projects.locations.getSupportedLanguages",
-              "path": "v3/{+parent}/supportedLanguages",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-translation"
-              ],
-              "description": "Returns a list of supported languages for translation.",
-              "parameters": {
+            "resources": {
+                "locations": {
+                    "methods": {
+                        "batchTranslateText": {
+                            "description": "Translates a large volume of text in asynchronous batch mode. This function provides real-time output as the inputs are being processed. If caller cancels a request, the partial results (for an input file, it's all or nothing) may still be available on the specified output location. This call returns immediately and you can use google.longrunning.Operation.name to poll the status of the call.",
+                            "flatPath": "v3/projects/{projectsId}/locations/{locationsId}:batchTranslateText",
+                            "httpMethod": "POST",
+                            "id": "translate.projects.locations.batchTranslateText",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. Location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}/locations/{location-id}`. The `global` location is not supported for batch translation. Only AutoML Translation models or glossaries within the same region (have the same location-id) can be used, otherwise an INVALID_ARGUMENT (400) error is returned.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v3/{+parent}:batchTranslateText",
+                            "request": {
+                                "$ref": "BatchTranslateTextRequest"
+                            },
+                            "response": {
+                                "$ref": "Operation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "detectLanguage": {
+                            "description": "Detects the language of text within a request.",
+                            "flatPath": "v3/projects/{projectsId}/locations/{locationsId}:detectLanguage",
+                            "httpMethod": "POST",
+                            "id": "translate.projects.locations.detectLanguage",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}/locations/{location-id}` or `projects/{project-number-or-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Only models within the same region (has same location-id) can be used. Otherwise an INVALID_ARGUMENT (400) error is returned.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v3/{+parent}:detectLanguage",
+                            "request": {
+                                "$ref": "DetectLanguageRequest"
+                            },
+                            "response": {
+                                "$ref": "DetectLanguageResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-translation"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets information about a location.",
+                            "flatPath": "v3/projects/{projectsId}/locations/{locationsId}",
+                            "httpMethod": "GET",
+                            "id": "translate.projects.locations.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Resource name for the location.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v3/{+name}",
+                            "response": {
+                                "$ref": "Location"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-translation"
+                            ]
+                        },
+                        "getSupportedLanguages": {
+                            "description": "Returns a list of supported languages for translation.",
+                            "flatPath": "v3/projects/{projectsId}/locations/{locationsId}/supportedLanguages",
+                            "httpMethod": "GET",
+                            "id": "translate.projects.locations.getSupportedLanguages",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "displayLanguageCode": {
+                                    "description": "Optional. The language to use to return localized, human readable names of supported languages. If missing, then display names are not returned in a response.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "model": {
+                                    "description": "Optional. Get supported languages of this model. The format depends on model type: - AutoML Translation models: `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - General (built-in) models: `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, `projects/{project-number-or-id}/locations/{location-id}/models/general/base` Returns languages supported by the specified model. If missing, we get supported languages of Google general base (PBMT) model.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}` or `projects/{project-number-or-id}/locations/{location-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Non-global location is required for AutoML models. Only models within the same region (have same location-id) can be used, otherwise an INVALID_ARGUMENT (400) error is returned.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v3/{+parent}/supportedLanguages",
+                            "response": {
+                                "$ref": "SupportedLanguages"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-translation"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists information about the supported locations for this service.",
+                            "flatPath": "v3/projects/{projectsId}/locations",
+                            "httpMethod": "GET",
+                            "id": "translate.projects.locations.list",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "The standard list filter.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "name": {
+                                    "description": "The resource that owns the locations collection, if applicable.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "The standard list page size.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The standard list page token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v3/{+name}/locations",
+                            "response": {
+                                "$ref": "ListLocationsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-translation"
+                            ]
+                        },
+                        "translateText": {
+                            "description": "Translates input text and returns translated text.",
+                            "flatPath": "v3/projects/{projectsId}/locations/{locationsId}:translateText",
+                            "httpMethod": "POST",
+                            "id": "translate.projects.locations.translateText",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}` or `projects/{project-number-or-id}/locations/{location-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Non-global location is required for requests using AutoML models or custom glossaries. Models and glossaries must be within the same region (have same location-id), otherwise an INVALID_ARGUMENT (400) error is returned.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v3/{+parent}:translateText",
+                            "request": {
+                                "$ref": "TranslateTextRequest"
+                            },
+                            "response": {
+                                "$ref": "TranslateTextResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-translation"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "glossaries": {
+                            "methods": {
+                                "create": {
+                                    "description": "Creates a glossary and returns the long-running operation. Returns NOT_FOUND, if the project doesn't exist.",
+                                    "flatPath": "v3/projects/{projectsId}/locations/{locationsId}/glossaries",
+                                    "httpMethod": "POST",
+                                    "id": "translate.projects.locations.glossaries.create",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "parent": {
+                                            "description": "Required. The project name.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v3/{+parent}/glossaries",
+                                    "request": {
+                                        "$ref": "Glossary"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a glossary, or cancels glossary construction if the glossary isn't created yet. Returns NOT_FOUND, if the glossary doesn't exist.",
+                                    "flatPath": "v3/projects/{projectsId}/locations/{locationsId}/glossaries/{glossariesId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "translate.projects.locations.glossaries.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The name of the glossary to delete.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/glossaries/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v3/{+name}",
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-translation"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets a glossary. Returns NOT_FOUND, if the glossary doesn't exist.",
+                                    "flatPath": "v3/projects/{projectsId}/locations/{locationsId}/glossaries/{glossariesId}",
+                                    "httpMethod": "GET",
+                                    "id": "translate.projects.locations.glossaries.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The name of the glossary to retrieve.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/glossaries/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v3/{+name}",
+                                    "response": {
+                                        "$ref": "Glossary"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-translation"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists glossaries in a project. Returns NOT_FOUND, if the project doesn't exist.",
+                                    "flatPath": "v3/projects/{projectsId}/locations/{locationsId}/glossaries",
+                                    "httpMethod": "GET",
+                                    "id": "translate.projects.locations.glossaries.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "filter": {
+                                            "description": "Optional. Filter specifying constraints of a list operation. Specify the constraint by the format of \"key=value\", where key must be \"src\" or \"tgt\", and the value must be a valid language code. For multiple restrictions, concatenate them by \"AND\" (uppercase only), such as: \"src=en-US AND tgt=zh-CN\". Notice that the exact match is used here, which means using 'en-US' and 'en' can lead to different results, which depends on the language code you used when you create the glossary. For the unidirectional glossaries, the \"src\" and \"tgt\" add restrictions on the source and target language code separately. For the equivalent term set glossaries, the \"src\" and/or \"tgt\" add restrictions on the term set. For example: \"src=en-US AND tgt=zh-CN\" will only pick the unidirectional glossaries which exactly match the source language code as \"en-US\" and the target language code \"zh-CN\", but all equivalent term set glossaries which contain \"en-US\" and \"zh-CN\" in their language set will be picked. If missing, no filtering is performed.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "Optional. Requested page size. The server may return fewer glossaries than requested. If unspecified, the server picks an appropriate default.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "Optional. A token identifying a page of results the server should return. Typically, this is the value of [ListGlossariesResponse.next_page_token] returned from the previous call to `ListGlossaries` method. The first page is returned if `page_token`is empty or missing.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The name of the project from which to list all of the glossaries.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v3/{+parent}/glossaries",
+                                    "response": {
+                                        "$ref": "ListGlossariesResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-translation"
+                                    ]
+                                }
+                            }
+                        },
+                        "operations": {
+                            "methods": {
+                                "cancel": {
+                                    "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.",
+                                    "flatPath": "v3/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}:cancel",
+                                    "httpMethod": "POST",
+                                    "id": "translate.projects.locations.operations.cancel",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The name of the operation resource to be cancelled.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v3/{+name}:cancel",
+                                    "request": {
+                                        "$ref": "CancelOperationRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-translation"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.",
+                                    "flatPath": "v3/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "translate.projects.locations.operations.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The name of the operation resource to be deleted.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v3/{+name}",
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-translation"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
+                                    "flatPath": "v3/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
+                                    "httpMethod": "GET",
+                                    "id": "translate.projects.locations.operations.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The name of the operation resource.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v3/{+name}",
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-translation"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
+                                    "flatPath": "v3/projects/{projectsId}/locations/{locationsId}/operations",
+                                    "httpMethod": "GET",
+                                    "id": "translate.projects.locations.operations.list",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "filter": {
+                                            "description": "The standard list filter.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "name": {
+                                            "description": "The name of the operation's parent resource.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "The standard list page size.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "The standard list page token.",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v3/{+name}/operations",
+                                    "response": {
+                                        "$ref": "ListOperationsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-translation"
+                                    ]
+                                },
+                                "wait": {
+                                    "description": "Waits until the specified long-running operation is done or reaches at most a specified timeout, returning the latest state. If the operation is already done, the latest state is immediately returned. If the timeout specified is greater than the default HTTP/RPC timeout, the HTTP/RPC timeout is used. If the server does not support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Note that this method is on a best-effort basis. It may return the latest state before the specified timeout (including immediately), meaning even an immediate response is no guarantee that the operation is done.",
+                                    "flatPath": "v3/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}:wait",
+                                    "httpMethod": "POST",
+                                    "id": "translate.projects.locations.operations.wait",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The name of the operation resource to wait on.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v3/{+name}:wait",
+                                    "request": {
+                                        "$ref": "WaitOperationRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-translation"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    },
+    "revision": "20210219",
+    "rootUrl": "https://translation.googleapis.com/",
+    "schemas": {
+        "BatchTranslateTextRequest": {
+            "description": "The batch translation request.",
+            "id": "BatchTranslateTextRequest",
+            "properties": {
+                "glossaries": {
+                    "additionalProperties": {
+                        "$ref": "TranslateTextGlossaryConfig"
+                    },
+                    "description": "Optional. Glossaries to be applied for translation. It's keyed by target language code.",
+                    "type": "object"
+                },
+                "inputConfigs": {
+                    "description": "Required. Input configurations. The total number of files matched should be <= 100. The total content size should be <= 100M Unicode codepoints. The files must use UTF-8 encoding.",
+                    "items": {
+                        "$ref": "InputConfig"
+                    },
+                    "type": "array"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Optional. The labels with user-defined metadata for the request. Label keys and values can be no longer than 63 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. Label values are optional. Label keys must start with a letter. See https://cloud.google.com/translate/docs/advanced/labels for more information.",
+                    "type": "object"
+                },
+                "models": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Optional. The models to use for translation. Map's key is target language code. Map's value is model name. Value can be a built-in general model, or an AutoML Translation model. The value format depends on model type: - AutoML Translation models: `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - General (built-in) models: `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, `projects/{project-number-or-id}/locations/{location-id}/models/general/base` If the map is empty or a specific model is not requested for a language pair, then default google model (nmt) is used.",
+                    "type": "object"
+                },
+                "outputConfig": {
+                    "$ref": "OutputConfig",
+                    "description": "Required. Output configuration. If 2 input configs match to the same file (that is, same input path), we don't generate output for duplicate inputs."
+                },
+                "sourceLanguageCode": {
+                    "description": "Required. Source language code.",
+                    "type": "string"
+                },
+                "targetLanguageCodes": {
+                    "description": "Required. Specify up to 10 language codes here.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "CancelOperationRequest": {
+            "description": "The request message for Operations.CancelOperation.",
+            "id": "CancelOperationRequest",
+            "properties": {},
+            "type": "object"
+        },
+        "DetectLanguageRequest": {
+            "description": "The request message for language detection.",
+            "id": "DetectLanguageRequest",
+            "properties": {
+                "content": {
+                    "description": "The content of the input stored as a string.",
+                    "type": "string"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Optional. The labels with user-defined metadata for the request. Label keys and values can be no longer than 63 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. Label values are optional. Label keys must start with a letter. See https://cloud.google.com/translate/docs/advanced/labels for more information.",
+                    "type": "object"
+                },
+                "mimeType": {
+                    "description": "Optional. The format of the source text, for example, \"text/html\", \"text/plain\". If left blank, the MIME type defaults to \"text/html\".",
+                    "type": "string"
+                },
                 "model": {
-                  "description": "Optional. Get supported languages of this model. The format depends on model type: - AutoML Translation models: `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - General (built-in) models: `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, `projects/{project-number-or-id}/locations/{location-id}/models/general/base` Returns languages supported by the specified model. If missing, we get supported languages of Google general base (PBMT) model.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "displayLanguageCode": {
-                  "description": "Optional. The language to use to return localized, human readable names of supported languages. If missing, then display names are not returned in a response.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "parent": {
-                  "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}` or `projects/{project-number-or-id}/locations/{location-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Non-global location is required for AutoML models. Only models within the same region (have same location-id) can be used, otherwise an INVALID_ARGUMENT (400) error is returned.",
-                  "location": "path",
-                  "pattern": "^projects/[^/]+/locations/[^/]+$",
-                  "required": true,
-                  "type": "string"
+                    "description": "Optional. The language detection model to be used. Format: `projects/{project-number-or-id}/locations/{location-id}/models/language-detection/{model-id}` Only one language detection model is currently supported: `projects/{project-number-or-id}/locations/{location-id}/models/language-detection/default`. If not specified, the default model is used.",
+                    "type": "string"
                 }
-              },
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "SupportedLanguages"
-              },
-              "parameterOrder": [
-                "parent"
-              ],
-              "flatPath": "v3/projects/{projectsId}/locations/{locationsId}/supportedLanguages"
             },
-            "detectLanguage": {
-              "path": "v3/{+parent}:detectLanguage",
-              "flatPath": "v3/projects/{projectsId}/locations/{locationsId}:detectLanguage",
-              "response": {
-                "$ref": "DetectLanguageResponse"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-translation"
-              ],
-              "request": {
-                "$ref": "DetectLanguageRequest"
-              },
-              "parameterOrder": [
-                "parent"
-              ],
-              "httpMethod": "POST",
-              "id": "translate.projects.locations.detectLanguage",
-              "description": "Detects the language of text within a request.",
-              "parameters": {
-                "parent": {
-                  "required": true,
-                  "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}/locations/{location-id}` or `projects/{project-number-or-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Only models within the same region (has same location-id) can be used. Otherwise an INVALID_ARGUMENT (400) error is returned.",
-                  "type": "string",
-                  "location": "path",
-                  "pattern": "^projects/[^/]+/locations/[^/]+$"
+            "type": "object"
+        },
+        "DetectLanguageResponse": {
+            "description": "The response message for language detection.",
+            "id": "DetectLanguageResponse",
+            "properties": {
+                "languages": {
+                    "description": "The most probable language detected by the Translation API. For each request, the Translation API will always return only one result.",
+                    "items": {
+                        "$ref": "DetectedLanguage"
+                    },
+                    "type": "array"
                 }
-              }
             },
-            "list": {
-              "path": "v3/{+name}/locations",
-              "response": {
-                "$ref": "ListLocationsResponse"
-              },
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-translation"
-              ],
-              "parameters": {
+            "type": "object"
+        },
+        "DetectedLanguage": {
+            "description": "The response message for language detection.",
+            "id": "DetectedLanguage",
+            "properties": {
+                "confidence": {
+                    "description": "The confidence of the detection result for this language.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "languageCode": {
+                    "description": "The BCP-47 language code of source content in the request, detected automatically.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Empty": {
+            "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
+            "id": "Empty",
+            "properties": {},
+            "type": "object"
+        },
+        "GcsDestination": {
+            "description": "The Google Cloud Storage location for the output content.",
+            "id": "GcsDestination",
+            "properties": {
+                "outputUriPrefix": {
+                    "description": "Required. The bucket used in 'output_uri_prefix' must exist and there must be no files under 'output_uri_prefix'. 'output_uri_prefix' must end with \"/\" and start with \"gs://\". One 'output_uri_prefix' can only be used by one batch translation job at a time. Otherwise an INVALID_ARGUMENT (400) error is returned.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GcsSource": {
+            "description": "The Google Cloud Storage location for the input content.",
+            "id": "GcsSource",
+            "properties": {
+                "inputUri": {
+                    "description": "Required. Source data URI. For example, `gs://my_bucket/my_object`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Glossary": {
+            "description": "Represents a glossary built from user provided data.",
+            "id": "Glossary",
+            "properties": {
+                "endTime": {
+                    "description": "Output only. When the glossary creation was finished.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "entryCount": {
+                    "description": "Output only. The number of entries defined in the glossary.",
+                    "format": "int32",
+                    "readOnly": true,
+                    "type": "integer"
+                },
+                "inputConfig": {
+                    "$ref": "GlossaryInputConfig",
+                    "description": "Required. Provides examples to build the glossary from. Total glossary must not exceed 10M Unicode codepoints."
+                },
+                "languageCodesSet": {
+                    "$ref": "LanguageCodesSet",
+                    "description": "Used with equivalent term set glossaries."
+                },
+                "languagePair": {
+                    "$ref": "LanguageCodePair",
+                    "description": "Used with unidirectional glossaries."
+                },
                 "name": {
-                  "pattern": "^projects/[^/]+$",
-                  "description": "The resource that owns the locations collection, if applicable.",
-                  "type": "string",
-                  "required": true,
-                  "location": "path"
+                    "description": "Required. The resource name of the glossary. Glossary names have the form `projects/{project-number-or-id}/locations/{location-id}/glossaries/{glossary-id}`.",
+                    "type": "string"
                 },
-                "filter": {
-                  "description": "The standard list filter.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "pageSize": {
-                  "format": "int32",
-                  "type": "integer",
-                  "description": "The standard list page size.",
-                  "location": "query"
-                },
-                "pageToken": {
-                  "description": "The standard list page token.",
-                  "type": "string",
-                  "location": "query"
+                "submitTime": {
+                    "description": "Output only. When CreateGlossary was called.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
                 }
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "flatPath": "v3/projects/{projectsId}/locations",
-              "description": "Lists information about the supported locations for this service.",
-              "id": "translate.projects.locations.list"
             },
-            "batchTranslateText": {
-              "id": "translate.projects.locations.batchTranslateText",
-              "request": {
-                "$ref": "BatchTranslateTextRequest"
-              },
-              "flatPath": "v3/projects/{projectsId}/locations/{locationsId}:batchTranslateText",
-              "parameterOrder": [
-                "parent"
-              ],
-              "parameters": {
-                "parent": {
-                  "pattern": "^projects/[^/]+/locations/[^/]+$",
-                  "type": "string",
-                  "required": true,
-                  "description": "Required. Location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}/locations/{location-id}`. The `global` location is not supported for batch translation. Only AutoML Translation models or glossaries within the same region (have the same location-id) can be used, otherwise an INVALID_ARGUMENT (400) error is returned.",
-                  "location": "path"
-                }
-              },
-              "description": "Translates a large volume of text in asynchronous batch mode. This function provides real-time output as the inputs are being processed. If caller cancels a request, the partial results (for an input file, it's all or nothing) may still be available on the specified output location. This call returns immediately and you can use google.longrunning.Operation.name to poll the status of the call.",
-              "path": "v3/{+parent}:batchTranslateText",
-              "httpMethod": "POST",
-              "response": {
-                "$ref": "Operation"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ]
-            },
-            "translateText": {
-              "httpMethod": "POST",
-              "id": "translate.projects.locations.translateText",
-              "response": {
-                "$ref": "TranslateTextResponse"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-translation"
-              ],
-              "flatPath": "v3/projects/{projectsId}/locations/{locationsId}:translateText",
-              "request": {
-                "$ref": "TranslateTextRequest"
-              },
-              "description": "Translates input text and returns translated text.",
-              "parameterOrder": [
-                "parent"
-              ],
-              "parameters": {
-                "parent": {
-                  "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}` or `projects/{project-number-or-id}/locations/{location-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Non-global location is required for requests using AutoML models or custom glossaries. Models and glossaries must be within the same region (have same location-id), otherwise an INVALID_ARGUMENT (400) error is returned.",
-                  "pattern": "^projects/[^/]+/locations/[^/]+$",
-                  "location": "path",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "path": "v3/{+parent}:translateText"
-            }
-          },
-          "resources": {
-            "glossaries": {
-              "methods": {
-                "create": {
-                  "parameters": {
-                    "parent": {
-                      "description": "Required. The project name.",
-                      "type": "string",
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "required": true
-                    }
-                  },
-                  "path": "v3/{+parent}/glossaries",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "request": {
-                    "$ref": "Glossary"
-                  },
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "flatPath": "v3/projects/{projectsId}/locations/{locationsId}/glossaries",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "id": "translate.projects.locations.glossaries.create",
-                  "description": "Creates a glossary and returns the long-running operation. Returns NOT_FOUND, if the project doesn't exist.",
-                  "httpMethod": "POST"
-                },
-                "list": {
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "flatPath": "v3/projects/{projectsId}/locations/{locationsId}/glossaries",
-                  "response": {
-                    "$ref": "ListGlossariesResponse"
-                  },
-                  "path": "v3/{+parent}/glossaries",
-                  "description": "Lists glossaries in a project. Returns NOT_FOUND, if the project doesn't exist.",
-                  "httpMethod": "GET",
-                  "parameters": {
-                    "parent": {
-                      "description": "Required. The name of the project from which to list all of the glossaries.",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "type": "string",
-                      "required": true,
-                      "location": "path"
-                    },
-                    "pageToken": {
-                      "location": "query",
-                      "type": "string",
-                      "description": "Optional. A token identifying a page of results the server should return. Typically, this is the value of [ListGlossariesResponse.next_page_token] returned from the previous call to `ListGlossaries` method. The first page is returned if `page_token`is empty or missing."
-                    },
-                    "pageSize": {
-                      "description": "Optional. Requested page size. The server may return fewer glossaries than requested. If unspecified, the server picks an appropriate default.",
-                      "type": "integer",
-                      "format": "int32",
-                      "location": "query"
-                    },
-                    "filter": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "Optional. Filter specifying constraints of a list operation. Specify the constraint by the format of \"key=value\", where key must be \"src\" or \"tgt\", and the value must be a valid language code. For multiple restrictions, concatenate them by \"AND\" (uppercase only), such as: \"src=en-US AND tgt=zh-CN\". Notice that the exact match is used here, which means using 'en-US' and 'en' can lead to different results, which depends on the language code you used when you create the glossary. For the unidirectional glossaries, the \"src\" and \"tgt\" add restrictions on the source and target language code separately. For the equivalent term set glossaries, the \"src\" and/or \"tgt\" add restrictions on the term set. For example: \"src=en-US AND tgt=zh-CN\" will only pick the unidirectional glossaries which exactly match the source language code as \"en-US\" and the target language code \"zh-CN\", but all equivalent term set glossaries which contain \"en-US\" and \"zh-CN\" in their language set will be picked. If missing, no filtering is performed."
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-translation"
-                  ],
-                  "id": "translate.projects.locations.glossaries.list"
-                },
-                "get": {
-                  "id": "translate.projects.locations.glossaries.get",
-                  "response": {
-                    "$ref": "Glossary"
-                  },
-                  "httpMethod": "GET",
-                  "path": "v3/{+name}",
-                  "flatPath": "v3/projects/{projectsId}/locations/{locationsId}/glossaries/{glossariesId}",
-                  "description": "Gets a glossary. Returns NOT_FOUND, if the glossary doesn't exist.",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-translation"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "required": true,
-                      "description": "Required. The name of the glossary to retrieve.",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/glossaries/[^/]+$",
-                      "location": "path",
-                      "type": "string"
-                    }
-                  }
-                },
-                "delete": {
-                  "flatPath": "v3/projects/{projectsId}/locations/{locationsId}/glossaries/{glossariesId}",
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+/glossaries/[^/]+$",
-                      "description": "Required. The name of the glossary to delete.",
-                      "location": "path"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-translation"
-                  ],
-                  "httpMethod": "DELETE",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "id": "translate.projects.locations.glossaries.delete",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "description": "Deletes a glossary, or cancels glossary construction if the glossary isn't created yet. Returns NOT_FOUND, if the glossary doesn't exist.",
-                  "path": "v3/{+name}"
-                }
-              }
-            },
-            "operations": {
-              "methods": {
-                "cancel": {
-                  "flatPath": "v3/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}:cancel",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.",
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "httpMethod": "POST",
-                  "request": {
-                    "$ref": "CancelOperationRequest"
-                  },
-                  "id": "translate.projects.locations.operations.cancel",
-                  "parameters": {
-                    "name": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
-                      "description": "The name of the operation resource to be cancelled.",
-                      "type": "string",
-                      "location": "path",
-                      "required": true
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-translation"
-                  ],
-                  "path": "v3/{+name}:cancel"
-                },
-                "list": {
-                  "response": {
-                    "$ref": "ListOperationsResponse"
-                  },
-                  "parameters": {
-                    "pageToken": {
-                      "type": "string",
-                      "description": "The standard list page token.",
-                      "location": "query"
-                    },
-                    "name": {
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "location": "path",
-                      "type": "string",
-                      "description": "The name of the operation's parent resource."
-                    },
-                    "pageSize": {
-                      "location": "query",
-                      "format": "int32",
-                      "type": "integer",
-                      "description": "The standard list page size."
-                    },
-                    "filter": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "The standard list filter."
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-translation"
-                  ],
-                  "id": "translate.projects.locations.operations.list",
-                  "httpMethod": "GET",
-                  "path": "v3/{+name}/operations",
-                  "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "flatPath": "v3/projects/{projectsId}/locations/{locationsId}/operations"
-                },
-                "wait": {
-                  "path": "v3/{+name}:wait",
-                  "httpMethod": "POST",
-                  "description": "Waits for the specified long-running operation until it is done or reaches at most a specified timeout, returning the latest state. If the operation is already done, the latest state is immediately returned. If the timeout specified is greater than the default HTTP/RPC timeout, the HTTP/RPC timeout is used. If the server does not support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Note that this method is on a best-effort basis. It may return the latest state before the specified timeout (including immediately), meaning even an immediate response is no guarantee that the operation is done.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-translation"
-                  ],
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameters": {
-                    "name": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
-                      "required": true,
-                      "type": "string",
-                      "description": "The name of the operation resource to wait on.",
-                      "location": "path"
-                    }
-                  },
-                  "id": "translate.projects.locations.operations.wait",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "request": {
-                    "$ref": "WaitOperationRequest"
-                  },
-                  "flatPath": "v3/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}:wait"
-                },
-                "delete": {
-                  "httpMethod": "DELETE",
-                  "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "path": "v3/{+name}",
-                  "parameters": {
-                    "name": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "The name of the operation resource to be deleted.",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$"
-                    }
-                  },
-                  "id": "translate.projects.locations.operations.delete",
-                  "flatPath": "v3/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-translation"
-                  ]
-                },
-                "get": {
-                  "id": "translate.projects.locations.operations.get",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "flatPath": "v3/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
-                  "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
-                  "parameters": {
-                    "name": {
-                      "location": "path",
-                      "required": true,
-                      "description": "The name of the operation resource.",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
-                      "type": "string"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-translation"
-                  ],
-                  "httpMethod": "GET",
-                  "path": "v3/{+name}",
-                  "response": {
-                    "$ref": "Operation"
-                  }
-                }
-              }
-            }
-          }
-        }
-      },
-      "methods": {
-        "detectLanguage": {
-          "path": "v3/{+parent}:detectLanguage",
-          "parameters": {
-            "parent": {
-              "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}/locations/{location-id}` or `projects/{project-number-or-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Only models within the same region (has same location-id) can be used. Otherwise an INVALID_ARGUMENT (400) error is returned.",
-              "type": "string",
-              "location": "path",
-              "pattern": "^projects/[^/]+$",
-              "required": true
-            }
-          },
-          "response": {
-            "$ref": "DetectLanguageResponse"
-          },
-          "flatPath": "v3/projects/{projectsId}:detectLanguage",
-          "description": "Detects the language of text within a request.",
-          "request": {
-            "$ref": "DetectLanguageRequest"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-translation"
-          ],
-          "httpMethod": "POST",
-          "parameterOrder": [
-            "parent"
-          ],
-          "id": "translate.projects.detectLanguage"
+            "type": "object"
         },
-        "translateText": {
-          "description": "Translates input text and returns translated text.",
-          "parameters": {
-            "parent": {
-              "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}` or `projects/{project-number-or-id}/locations/{location-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Non-global location is required for requests using AutoML models or custom glossaries. Models and glossaries must be within the same region (have same location-id), otherwise an INVALID_ARGUMENT (400) error is returned.",
-              "type": "string",
-              "pattern": "^projects/[^/]+$",
-              "location": "path",
-              "required": true
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-translation"
-          ],
-          "response": {
-            "$ref": "TranslateTextResponse"
-          },
-          "id": "translate.projects.translateText",
-          "path": "v3/{+parent}:translateText",
-          "flatPath": "v3/projects/{projectsId}:translateText",
-          "httpMethod": "POST",
-          "request": {
-            "$ref": "TranslateTextRequest"
-          },
-          "parameterOrder": [
-            "parent"
-          ]
+        "GlossaryInputConfig": {
+            "description": "Input configuration for glossaries.",
+            "id": "GlossaryInputConfig",
+            "properties": {
+                "gcsSource": {
+                    "$ref": "GcsSource",
+                    "description": "Required. Google Cloud Storage location of glossary data. File format is determined based on the filename extension. API returns [google.rpc.Code.INVALID_ARGUMENT] for unsupported URI-s and file formats. Wildcards are not allowed. This must be a single file in one of the following formats: For unidirectional glossaries: - TSV/CSV (`.tsv`/`.csv`): 2 column file, tab- or comma-separated. The first column is source text. The second column is target text. The file must not contain headers. That is, the first row is data, not column names. - TMX (`.tmx`): TMX file with parallel data defining source/target term pairs. For equivalent term sets glossaries: - CSV (`.csv`): Multi-column CSV file defining equivalent glossary terms in multiple languages. See documentation for more information - [glossaries](https://cloud.google.com/translate/docs/advanced/glossary)."
+                }
+            },
+            "type": "object"
         },
-        "getSupportedLanguages": {
-          "description": "Returns a list of supported languages for translation.",
-          "parameterOrder": [
-            "parent"
-          ],
-          "httpMethod": "GET",
-          "id": "translate.projects.getSupportedLanguages",
-          "parameters": {
-            "parent": {
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "pattern": "^projects/[^/]+$",
-              "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}` or `projects/{project-number-or-id}/locations/{location-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Non-global location is required for AutoML models. Only models within the same region (have same location-id) can be used, otherwise an INVALID_ARGUMENT (400) error is returned."
+        "InputConfig": {
+            "description": "Input configuration for BatchTranslateText request.",
+            "id": "InputConfig",
+            "properties": {
+                "gcsSource": {
+                    "$ref": "GcsSource",
+                    "description": "Required. Google Cloud Storage location for the source input. This can be a single file (for example, `gs://translation-test/input.tsv`) or a wildcard (for example, `gs://translation-test/*`). If a file extension is `.tsv`, it can contain either one or two columns. The first column (optional) is the id of the text request. If the first column is missing, we use the row number (0-based) from the input file as the ID in the output file. The second column is the actual text to be translated. We recommend each row be <= 10K Unicode codepoints, otherwise an error might be returned. Note that the input tsv must be RFC 4180 compliant. You could use https://github.com/Clever/csvlint to check potential formatting errors in your tsv file. csvlint --delimiter='\\t' your_input_file.tsv The other supported file extensions are `.txt` or `.html`, which is treated as a single large chunk of text."
+                },
+                "mimeType": {
+                    "description": "Optional. Can be \"text/plain\" or \"text/html\". For `.tsv`, \"text/html\" is used if mime_type is missing. For `.html`, this field must be \"text/html\" or empty. For `.txt`, this field must be \"text/plain\" or empty.",
+                    "type": "string"
+                }
             },
-            "model": {
-              "location": "query",
-              "type": "string",
-              "description": "Optional. Get supported languages of this model. The format depends on model type: - AutoML Translation models: `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - General (built-in) models: `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, `projects/{project-number-or-id}/locations/{location-id}/models/general/base` Returns languages supported by the specified model. If missing, we get supported languages of Google general base (PBMT) model."
+            "type": "object"
+        },
+        "LanguageCodePair": {
+            "description": "Used with unidirectional glossaries.",
+            "id": "LanguageCodePair",
+            "properties": {
+                "sourceLanguageCode": {
+                    "description": "Required. The BCP-47 language code of the input text, for example, \"en-US\". Expected to be an exact match for GlossaryTerm.language_code.",
+                    "type": "string"
+                },
+                "targetLanguageCode": {
+                    "description": "Required. The BCP-47 language code for translation output, for example, \"zh-CN\". Expected to be an exact match for GlossaryTerm.language_code.",
+                    "type": "string"
+                }
             },
-            "displayLanguageCode": {
-              "type": "string",
-              "description": "Optional. The language to use to return localized, human readable names of supported languages. If missing, then display names are not returned in a response.",
-              "location": "query"
-            }
-          },
-          "response": {
-            "$ref": "SupportedLanguages"
-          },
-          "path": "v3/{+parent}/supportedLanguages",
-          "flatPath": "v3/projects/{projectsId}/supportedLanguages",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-translation"
-          ]
+            "type": "object"
+        },
+        "LanguageCodesSet": {
+            "description": "Used with equivalent term set glossaries.",
+            "id": "LanguageCodesSet",
+            "properties": {
+                "languageCodes": {
+                    "description": "The BCP-47 language code(s) for terms defined in the glossary. All entries are unique. The list contains at least two entries. Expected to be an exact match for GlossaryTerm.language_code.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListGlossariesResponse": {
+            "description": "Response message for ListGlossaries.",
+            "id": "ListGlossariesResponse",
+            "properties": {
+                "glossaries": {
+                    "description": "The list of glossaries for a project.",
+                    "items": {
+                        "$ref": "Glossary"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "A token to retrieve a page of results. Pass this value in the [ListGlossariesRequest.page_token] field in the subsequent call to `ListGlossaries` method to retrieve the next page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListLocationsResponse": {
+            "description": "The response message for Locations.ListLocations.",
+            "id": "ListLocationsResponse",
+            "properties": {
+                "locations": {
+                    "description": "A list of locations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Location"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListOperationsResponse": {
+            "description": "The response message for Operations.ListOperations.",
+            "id": "ListOperationsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                },
+                "operations": {
+                    "description": "A list of operations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Operation"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Location": {
+            "description": "A resource that represents Google Cloud Platform location.",
+            "id": "Location",
+            "properties": {
+                "displayName": {
+                    "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\".",
+                    "type": "string"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}",
+                    "type": "object"
+                },
+                "locationId": {
+                    "description": "The canonical id for this location. For example: `\"us-east1\"`.",
+                    "type": "string"
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata. For example the available capacity at the given location.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "Resource name for the location, which may vary between implementations. For example: `\"projects/example-project/locations/us-east1\"`",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Operation": {
+            "description": "This resource represents a long-running operation that is the result of a network API call.",
+            "id": "Operation",
+            "properties": {
+                "done": {
+                    "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
+                    "type": "boolean"
+                },
+                "error": {
+                    "$ref": "Status",
+                    "description": "The error result of the operation in case of failure or cancellation."
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
+                    "type": "string"
+                },
+                "response": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "OutputConfig": {
+            "description": "Output configuration for BatchTranslateText request.",
+            "id": "OutputConfig",
+            "properties": {
+                "gcsDestination": {
+                    "$ref": "GcsDestination",
+                    "description": "Google Cloud Storage destination for output content. For every single input file (for example, gs://a/b/c.[extension]), we generate at most 2 * n output files. (n is the # of target_language_codes in the BatchTranslateTextRequest). Output files (tsv) generated are compliant with RFC 4180 except that record delimiters are '\\n' instead of '\\r\\n'. We don't provide any way to change record delimiters. While the input files are being processed, we write/update an index file 'index.csv' under 'output_uri_prefix' (for example, gs://translation-test/index.csv) The index file is generated/updated as new files are being translated. The format is: input_file,target_language_code,translations_file,errors_file, glossary_translations_file,glossary_errors_file input_file is one file we matched using gcs_source.input_uri. target_language_code is provided in the request. translations_file contains the translations. (details provided below) errors_file contains the errors during processing of the file. (details below). Both translations_file and errors_file could be empty strings if we have no content to output. glossary_translations_file and glossary_errors_file are always empty strings if the input_file is tsv. They could also be empty if we have no content to output. Once a row is present in index.csv, the input/output matching never changes. Callers should also expect all the content in input_file are processed and ready to be consumed (that is, no partial output file is written). Since index.csv will be keeping updated during the process, please make sure there is no custom retention policy applied on the output bucket that may avoid file updating. (https://cloud.google.com/storage/docs/bucket-lock?hl=en#retention-policy) The format of translations_file (for target language code 'trg') is: gs://translation_test/a_b_c_'trg'_translations.[extension] If the input file extension is tsv, the output has the following columns: Column 1: ID of the request provided in the input, if it's not provided in the input, then the input row number is used (0-based). Column 2: source sentence. Column 3: translation without applying a glossary. Empty string if there is an error. Column 4 (only present if a glossary is provided in the request): translation after applying the glossary. Empty string if there is an error applying the glossary. Could be same string as column 3 if there is no glossary applied. If input file extension is a txt or html, the translation is directly written to the output file. If glossary is requested, a separate glossary_translations_file has format of gs://translation_test/a_b_c_'trg'_glossary_translations.[extension] The format of errors file (for target language code 'trg') is: gs://translation_test/a_b_c_'trg'_errors.[extension] If the input file extension is tsv, errors_file contains the following: Column 1: ID of the request provided in the input, if it's not provided in the input, then the input row number is used (0-based). Column 2: source sentence. Column 3: Error detail for the translation. Could be empty. Column 4 (only present if a glossary is provided in the request): Error when applying the glossary. If the input file extension is txt or html, glossary_error_file will be generated that contains error details. glossary_error_file has format of gs://translation_test/a_b_c_'trg'_glossary_errors.[extension]"
+                }
+            },
+            "type": "object"
+        },
+        "Status": {
+            "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
+            "id": "Status",
+            "properties": {
+                "code": {
+                    "description": "The status code, which should be an enum value of google.rpc.Code.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SupportedLanguage": {
+            "description": "A single supported language response corresponds to information related to one supported language.",
+            "id": "SupportedLanguage",
+            "properties": {
+                "displayName": {
+                    "description": "Human readable name of the language localized in the display language specified in the request.",
+                    "type": "string"
+                },
+                "languageCode": {
+                    "description": "Supported language code, generally consisting of its ISO 639-1 identifier, for example, 'en', 'ja'. In certain cases, BCP-47 codes including language and region identifiers are returned (for example, 'zh-TW' and 'zh-CN')",
+                    "type": "string"
+                },
+                "supportSource": {
+                    "description": "Can be used as source language.",
+                    "type": "boolean"
+                },
+                "supportTarget": {
+                    "description": "Can be used as target language.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "SupportedLanguages": {
+            "description": "The response message for discovering supported languages.",
+            "id": "SupportedLanguages",
+            "properties": {
+                "languages": {
+                    "description": "A list of supported language responses. This list contains an entry for each language the Translation API supports.",
+                    "items": {
+                        "$ref": "SupportedLanguage"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "TranslateTextGlossaryConfig": {
+            "description": "Configures which glossary should be used for a specific target language, and defines options for applying that glossary.",
+            "id": "TranslateTextGlossaryConfig",
+            "properties": {
+                "glossary": {
+                    "description": "Required. The `glossary` to be applied for this translation. The format depends on glossary: - User provided custom glossary: `projects/{project-number-or-id}/locations/{location-id}/glossaries/{glossary-id}`",
+                    "type": "string"
+                },
+                "ignoreCase": {
+                    "description": "Optional. Indicates match is case-insensitive. Default value is false if missing.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "TranslateTextRequest": {
+            "description": "The request message for synchronous translation.",
+            "id": "TranslateTextRequest",
+            "properties": {
+                "contents": {
+                    "description": "Required. The content of the input in string format. We recommend the total content be less than 30k codepoints. The max length of this field is 1024. Use BatchTranslateText for larger text.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "glossaryConfig": {
+                    "$ref": "TranslateTextGlossaryConfig",
+                    "description": "Optional. Glossary to be applied. The glossary must be within the same region (have the same location-id) as the model, otherwise an INVALID_ARGUMENT (400) error is returned."
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Optional. The labels with user-defined metadata for the request. Label keys and values can be no longer than 63 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. Label values are optional. Label keys must start with a letter. See https://cloud.google.com/translate/docs/advanced/labels for more information.",
+                    "type": "object"
+                },
+                "mimeType": {
+                    "description": "Optional. The format of the source text, for example, \"text/html\", \"text/plain\". If left blank, the MIME type defaults to \"text/html\".",
+                    "type": "string"
+                },
+                "model": {
+                    "description": "Optional. The `model` type requested for this translation. The format depends on model type: - AutoML Translation models: `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - General (built-in) models: `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, `projects/{project-number-or-id}/locations/{location-id}/models/general/base` For global (non-regionalized) requests, use `location-id` `global`. For example, `projects/{project-number-or-id}/locations/global/models/general/nmt`. If missing, the system decides which google base model to use.",
+                    "type": "string"
+                },
+                "sourceLanguageCode": {
+                    "description": "Optional. The BCP-47 language code of the input text if known, for example, \"en-US\" or \"sr-Latn\". Supported language codes are listed in Language Support. If the source language isn't specified, the API attempts to identify the source language automatically and returns the source language within the response.",
+                    "type": "string"
+                },
+                "targetLanguageCode": {
+                    "description": "Required. The BCP-47 language code to use for translation of the input text, set to one of the language codes listed in Language Support.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TranslateTextResponse": {
+            "id": "TranslateTextResponse",
+            "properties": {
+                "glossaryTranslations": {
+                    "description": "Text translation responses if a glossary is provided in the request. This can be the same as `translations` if no terms apply. This field has the same length as `contents`.",
+                    "items": {
+                        "$ref": "Translation"
+                    },
+                    "type": "array"
+                },
+                "translations": {
+                    "description": "Text translation responses with no glossary applied. This field has the same length as `contents`.",
+                    "items": {
+                        "$ref": "Translation"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Translation": {
+            "description": "A single translation response.",
+            "id": "Translation",
+            "properties": {
+                "detectedLanguageCode": {
+                    "description": "The BCP-47 language code of source text in the initial request, detected automatically, if no source language was passed within the initial request. If the source language was passed, auto-detection of the language does not occur and this field is empty.",
+                    "type": "string"
+                },
+                "glossaryConfig": {
+                    "$ref": "TranslateTextGlossaryConfig",
+                    "description": "The `glossary_config` used for this translation."
+                },
+                "model": {
+                    "description": "Only present when `model` is present in the request. `model` here is normalized to have project number. For example: If the `model` requested in TranslationTextRequest is `projects/{project-id}/locations/{location-id}/models/general/nmt` then `model` here would be normalized to `projects/{project-number}/locations/{location-id}/models/general/nmt`.",
+                    "type": "string"
+                },
+                "translatedText": {
+                    "description": "Text translated into the target language.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "WaitOperationRequest": {
+            "description": "The request message for Operations.WaitOperation.",
+            "id": "WaitOperationRequest",
+            "properties": {
+                "timeout": {
+                    "description": "The maximum duration to wait before timing out. If left blank, the wait will be at most the time permitted by the underlying HTTP/RPC protocol. If RPC context deadline is also specified, the shorter one will be used.",
+                    "format": "google-duration",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         }
-      }
-    }
-  },
-  "basePath": "",
-  "version_module": true,
-  "description": "Integrates text translation into your website or application.",
-  "servicePath": "",
-  "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
-  }
-}
+    },
+    "servicePath": "",
+    "title": "Cloud Translation API",
+    "version": "v3",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/translate.v3beta1.json b/googleapiclient/discovery_cache/documents/translate.v3beta1.json
index 8e3e033..9140bbf 100644
--- a/googleapiclient/discovery_cache/documents/translate.v3beta1.json
+++ b/googleapiclient/discovery_cache/documents/translate.v3beta1.json
@@ -1,1243 +1,1243 @@
 {
-  "kind": "discovery#restDescription",
-  "ownerName": "Google",
-  "description": "Integrates text translation into your website or application.",
-  "version": "v3beta1",
-  "title": "Cloud Translation API",
-  "schemas": {
-    "TranslateTextGlossaryConfig": {
-      "properties": {
-        "glossary": {
-          "description": "Required. Specifies the glossary used for this translation. Use this format: projects/*/locations/*/glossaries/*",
-          "type": "string"
-        },
-        "ignoreCase": {
-          "description": "Optional. Indicates match is case-insensitive. Default value is false if missing.",
-          "type": "boolean"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
+                },
+                "https://www.googleapis.com/auth/cloud-translation": {
+                    "description": "Translate text from one language to another using Google Translate"
+                }
+            }
         }
-      },
-      "type": "object",
-      "id": "TranslateTextGlossaryConfig",
-      "description": "Configures which glossary should be used for a specific target language, and defines options for applying that glossary."
     },
-    "Glossary": {
-      "properties": {
-        "languageCodesSet": {
-          "$ref": "LanguageCodesSet",
-          "description": "Used with equivalent term set glossaries."
-        },
-        "name": {
-          "description": "Required. The resource name of the glossary. Glossary names have the form `projects/{project-number-or-id}/locations/{location-id}/glossaries/{glossary-id}`.",
-          "type": "string"
-        },
-        "entryCount": {
-          "readOnly": true,
-          "format": "int32",
-          "description": "Output only. The number of entries defined in the glossary.",
-          "type": "integer"
-        },
-        "submitTime": {
-          "readOnly": true,
-          "description": "Output only. When CreateGlossary was called.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "inputConfig": {
-          "$ref": "GlossaryInputConfig",
-          "description": "Required. Provides examples to build the glossary from. Total glossary must not exceed 10M Unicode codepoints."
-        },
-        "endTime": {
-          "description": "Output only. When the glossary creation was finished.",
-          "type": "string",
-          "readOnly": true,
-          "format": "google-datetime"
-        },
-        "languagePair": {
-          "description": "Used with unidirectional glossaries.",
-          "$ref": "LanguageCodePair"
-        }
-      },
-      "id": "Glossary",
-      "description": "Represents a glossary built from user provided data.",
-      "type": "object"
+    "basePath": "",
+    "baseUrl": "https://translation.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Translate",
+    "description": "Integrates text translation into your website or application.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/translate/docs/quickstarts",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
     },
-    "Empty": {
-      "properties": {},
-      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
-      "type": "object",
-      "id": "Empty"
-    },
-    "LanguageCodePair": {
-      "description": "Used with unidirectional glossaries.",
-      "type": "object",
-      "properties": {
-        "targetLanguageCode": {
-          "description": "Required. The BCP-47 language code for translation output, for example, \"zh-CN\". Expected to be an exact match for GlossaryTerm.language_code.",
-          "type": "string"
-        },
-        "sourceLanguageCode": {
-          "type": "string",
-          "description": "Required. The BCP-47 language code of the input text, for example, \"en-US\". Expected to be an exact match for GlossaryTerm.language_code."
-        }
-      },
-      "id": "LanguageCodePair"
-    },
-    "GcsDestination": {
-      "id": "GcsDestination",
-      "properties": {
-        "outputUriPrefix": {
-          "type": "string",
-          "description": "Required. There must be no files under 'output_uri_prefix'. 'output_uri_prefix' must end with \"/\" and start with \"gs://\", otherwise an INVALID_ARGUMENT (400) error is returned."
-        }
-      },
-      "description": "The Google Cloud Storage location for the output content.",
-      "type": "object"
-    },
-    "WaitOperationRequest": {
-      "description": "The request message for Operations.WaitOperation.",
-      "properties": {
-        "timeout": {
-          "description": "The maximum duration to wait before timing out. If left blank, the wait will be at most the time permitted by the underlying HTTP/RPC protocol. If RPC context deadline is also specified, the shorter one will be used.",
-          "format": "google-duration",
-          "type": "string"
-        }
-      },
-      "id": "WaitOperationRequest",
-      "type": "object"
-    },
-    "DetectLanguageResponse": {
-      "type": "object",
-      "properties": {
-        "languages": {
-          "description": "A list of detected languages sorted by detection confidence in descending order. The most probable language first.",
-          "items": {
-            "$ref": "DetectedLanguage"
-          },
-          "type": "array"
-        }
-      },
-      "id": "DetectLanguageResponse",
-      "description": "The response message for language detection."
-    },
-    "ListGlossariesResponse": {
-      "description": "Response message for ListGlossaries.",
-      "properties": {
-        "glossaries": {
-          "type": "array",
-          "items": {
-            "$ref": "Glossary"
-          },
-          "description": "The list of glossaries for a project."
-        },
-        "nextPageToken": {
-          "description": "A token to retrieve a page of results. Pass this value in the [ListGlossariesRequest.page_token] field in the subsequent call to `ListGlossaries` method to retrieve the next page of results.",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "id": "ListGlossariesResponse"
-    },
-    "CancelOperationRequest": {
-      "id": "CancelOperationRequest",
-      "properties": {},
-      "description": "The request message for Operations.CancelOperation.",
-      "type": "object"
-    },
-    "GlossaryInputConfig": {
-      "type": "object",
-      "id": "GlossaryInputConfig",
-      "description": "Input configuration for glossaries.",
-      "properties": {
-        "gcsSource": {
-          "description": "Required. Google Cloud Storage location of glossary data. File format is determined based on the filename extension. API returns [google.rpc.Code.INVALID_ARGUMENT] for unsupported URI-s and file formats. Wildcards are not allowed. This must be a single file in one of the following formats: For unidirectional glossaries: - TSV/CSV (`.tsv`/`.csv`): 2 column file, tab- or comma-separated. The first column is source text. The second column is target text. The file must not contain headers. That is, the first row is data, not column names. - TMX (`.tmx`): TMX file with parallel data defining source/target term pairs. For equivalent term sets glossaries: - CSV (`.csv`): Multi-column CSV file defining equivalent glossary terms in multiple languages. The format is defined for Google Translation Toolkit and documented in [Use a glossary](https://support.google.com/translatortoolkit/answer/6306379?hl=en).",
-          "$ref": "GcsSource"
-        }
-      }
-    },
-    "DetectedLanguage": {
-      "type": "object",
-      "id": "DetectedLanguage",
-      "properties": {
-        "languageCode": {
-          "type": "string",
-          "description": "The BCP-47 language code of source content in the request, detected automatically."
-        },
-        "confidence": {
-          "description": "The confidence of the detection result for this language.",
-          "format": "float",
-          "type": "number"
-        }
-      },
-      "description": "The response message for language detection."
-    },
-    "LanguageCodesSet": {
-      "type": "object",
-      "id": "LanguageCodesSet",
-      "properties": {
-        "languageCodes": {
-          "items": {
+    "id": "translate:v3beta1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://translation.mtls.googleapis.com/",
+    "name": "translate",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
             "type": "string"
-          },
-          "description": "The BCP-47 language code(s) for terms defined in the glossary. All entries are unique. The list contains at least two entries. Expected to be an exact match for GlossaryTerm.language_code.",
-          "type": "array"
-        }
-      },
-      "description": "Used with equivalent term set glossaries."
-    },
-    "BatchTranslateTextRequest": {
-      "type": "object",
-      "id": "BatchTranslateTextRequest",
-      "properties": {
-        "sourceLanguageCode": {
-          "type": "string",
-          "description": "Required. Source language code."
         },
-        "targetLanguageCodes": {
-          "type": "array",
-          "description": "Required. Specify up to 10 language codes here.",
-          "items": {
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
             "type": "string"
-          }
         },
-        "labels": {
-          "additionalProperties": {
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
             "type": "string"
-          },
-          "description": "Optional. The labels with user-defined metadata for the request. Label keys and values can be no longer than 63 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. Label values are optional. Label keys must start with a letter. See https://cloud.google.com/translate/docs/labels for more information.",
-          "type": "object"
         },
-        "outputConfig": {
-          "description": "Required. Output configuration. If 2 input configs match to the same file (that is, same input path), we don't generate output for duplicate inputs.",
-          "$ref": "OutputConfig"
-        },
-        "glossaries": {
-          "additionalProperties": {
-            "$ref": "TranslateTextGlossaryConfig"
-          },
-          "type": "object",
-          "description": "Optional. Glossaries to be applied for translation. It's keyed by target language code."
-        },
-        "inputConfigs": {
-          "items": {
-            "$ref": "InputConfig"
-          },
-          "type": "array",
-          "description": "Required. Input configurations. The total number of files matched should be \u003c= 1000. The total content size should be \u003c= 100M Unicode codepoints. The files must use UTF-8 encoding."
-        },
-        "models": {
-          "type": "object",
-          "additionalProperties": {
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
             "type": "string"
-          },
-          "description": "Optional. The models to use for translation. Map's key is target language code. Map's value is model name. Value can be a built-in general model, or an AutoML Translation model. The value format depends on model type: - AutoML Translation models: `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - General (built-in) models: `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, `projects/{project-number-or-id}/locations/{location-id}/models/general/base` If the map is empty or a specific model is not requested for a language pair, then default google model (nmt) is used."
-        }
-      },
-      "description": "The batch translation request."
-    },
-    "SupportedLanguage": {
-      "properties": {
-        "supportSource": {
-          "type": "boolean",
-          "description": "Can be used as source language."
         },
-        "supportTarget": {
-          "description": "Can be used as target language.",
-          "type": "boolean"
-        },
-        "displayName": {
-          "description": "Human readable name of the language localized in the display language specified in the request.",
-          "type": "string"
-        },
-        "languageCode": {
-          "type": "string",
-          "description": "Supported language code, generally consisting of its ISO 639-1 identifier, for example, 'en', 'ja'. In certain cases, BCP-47 codes including language and region identifiers are returned (for example, 'zh-TW' and 'zh-CN')"
-        }
-      },
-      "type": "object",
-      "id": "SupportedLanguage",
-      "description": "A single supported language response corresponds to information related to one supported language."
-    },
-    "ListOperationsResponse": {
-      "description": "The response message for Operations.ListOperations.",
-      "type": "object",
-      "id": "ListOperationsResponse",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "The standard List next-page token."
-        },
-        "operations": {
-          "type": "array",
-          "items": {
-            "$ref": "Operation"
-          },
-          "description": "A list of operations that matches the specified filter in the request."
-        }
-      }
-    },
-    "InputConfig": {
-      "properties": {
-        "gcsSource": {
-          "$ref": "GcsSource",
-          "description": "Required. Google Cloud Storage location for the source input. This can be a single file (for example, `gs://translation-test/input.tsv`) or a wildcard (for example, `gs://translation-test/*`). If a file extension is `.tsv`, it can contain either one or two columns. The first column (optional) is the id of the text request. If the first column is missing, we use the row number (0-based) from the input file as the ID in the output file. The second column is the actual text to be translated. We recommend each row be \u003c= 10K Unicode codepoints, otherwise an error might be returned. Note that the input tsv must be RFC 4180 compliant. You could use https://github.com/Clever/csvlint to check potential formatting errors in your tsv file. csvlint --delimiter='\\t' your_input_file.tsv The other supported file extensions are `.txt` or `.html`, which is treated as a single large chunk of text."
-        },
-        "mimeType": {
-          "type": "string",
-          "description": "Optional. Can be \"text/plain\" or \"text/html\". For `.tsv`, \"text/html\" is used if mime_type is missing. For `.html`, this field must be \"text/html\" or empty. For `.txt`, this field must be \"text/plain\" or empty."
-        }
-      },
-      "description": "Input configuration for BatchTranslateText request.",
-      "id": "InputConfig",
-      "type": "object"
-    },
-    "ListLocationsResponse": {
-      "description": "The response message for Locations.ListLocations.",
-      "id": "ListLocationsResponse",
-      "type": "object",
-      "properties": {
-        "locations": {
-          "description": "A list of locations that matches the specified filter in the request.",
-          "type": "array",
-          "items": {
-            "$ref": "Location"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "The standard List next-page token."
-        }
-      }
-    },
-    "Translation": {
-      "description": "A single translation response.",
-      "type": "object",
-      "id": "Translation",
-      "properties": {
-        "detectedLanguageCode": {
-          "description": "The BCP-47 language code of source text in the initial request, detected automatically, if no source language was passed within the initial request. If the source language was passed, auto-detection of the language does not occur and this field is empty.",
-          "type": "string"
-        },
-        "translatedText": {
-          "type": "string",
-          "description": "Text translated into the target language."
-        },
-        "model": {
-          "type": "string",
-          "description": "Only present when `model` is present in the request. `model` here is normalized to have project number. For example: If the `model` requested in TranslationTextRequest is `projects/{project-id}/locations/{location-id}/models/general/nmt` then `model` here would be normalized to `projects/{project-number}/locations/{location-id}/models/general/nmt`."
-        },
-        "glossaryConfig": {
-          "description": "The `glossary_config` used for this translation.",
-          "$ref": "TranslateTextGlossaryConfig"
-        }
-      }
-    },
-    "SupportedLanguages": {
-      "type": "object",
-      "id": "SupportedLanguages",
-      "properties": {
-        "languages": {
-          "description": "A list of supported language responses. This list contains an entry for each language the Translation API supports.",
-          "type": "array",
-          "items": {
-            "$ref": "SupportedLanguage"
-          }
-        }
-      },
-      "description": "The response message for discovering supported languages."
-    },
-    "GcsSource": {
-      "properties": {
-        "inputUri": {
-          "description": "Required. Source data URI. For example, `gs://my_bucket/my_object`.",
-          "type": "string"
-        }
-      },
-      "id": "GcsSource",
-      "type": "object",
-      "description": "The Google Cloud Storage location for the input content."
-    },
-    "Operation": {
-      "id": "Operation",
-      "description": "This resource represents a long-running operation that is the result of a network API call.",
-      "type": "object",
-      "properties": {
-        "done": {
-          "type": "boolean",
-          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available."
-        },
-        "name": {
-          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
-          "type": "string"
-        },
-        "error": {
-          "description": "The error result of the operation in case of failure or cancellation.",
-          "$ref": "Status"
-        },
-        "response": {
-          "type": "object",
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`."
-        },
-        "metadata": {
-          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "type": "object"
-        }
-      }
-    },
-    "DetectLanguageRequest": {
-      "type": "object",
-      "description": "The request message for language detection.",
-      "properties": {
-        "content": {
-          "description": "The content of the input stored as a string.",
-          "type": "string"
-        },
-        "model": {
-          "description": "Optional. The language detection model to be used. Format: `projects/{project-number-or-id}/locations/{location-id}/models/language-detection/{model-id}` Only one language detection model is currently supported: `projects/{project-number-or-id}/locations/{location-id}/models/language-detection/default`. If not specified, the default model is used.",
-          "type": "string"
-        },
-        "mimeType": {
-          "description": "Optional. The format of the source text, for example, \"text/html\", \"text/plain\". If left blank, the MIME type defaults to \"text/html\".",
-          "type": "string"
-        },
-        "labels": {
-          "additionalProperties": {
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
             "type": "string"
-          },
-          "description": "Optional. The labels with user-defined metadata for the request. Label keys and values can be no longer than 63 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. Label values are optional. Label keys must start with a letter. See https://cloud.google.com/translate/docs/labels for more information.",
-          "type": "object"
-        }
-      },
-      "id": "DetectLanguageRequest"
-    },
-    "Location": {
-      "description": "A resource that represents Google Cloud Platform location.",
-      "properties": {
-        "name": {
-          "description": "Resource name for the location, which may vary between implementations. For example: `\"projects/example-project/locations/us-east1\"`",
-          "type": "string"
         },
-        "displayName": {
-          "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\".",
-          "type": "string"
-        },
-        "metadata": {
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "Service-specific metadata. For example the available capacity at the given location.",
-          "type": "object"
-        },
-        "labels": {
-          "additionalProperties": {
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
             "type": "string"
-          },
-          "type": "object",
-          "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}"
         },
-        "locationId": {
-          "type": "string",
-          "description": "The canonical id for this location. For example: `\"us-east1\"`."
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      },
-      "type": "object",
-      "id": "Location"
     },
-    "OutputConfig": {
-      "properties": {
-        "gcsDestination": {
-          "description": "Google Cloud Storage destination for output content. For every single input file (for example, gs://a/b/c.[extension]), we generate at most 2 * n output files. (n is the # of target_language_codes in the BatchTranslateTextRequest). Output files (tsv) generated are compliant with RFC 4180 except that record delimiters are '\\n' instead of '\\r\\n'. We don't provide any way to change record delimiters. While the input files are being processed, we write/update an index file 'index.csv' under 'output_uri_prefix' (for example, gs://translation-test/index.csv) The index file is generated/updated as new files are being translated. The format is: input_file,target_language_code,translations_file,errors_file, glossary_translations_file,glossary_errors_file input_file is one file we matched using gcs_source.input_uri. target_language_code is provided in the request. translations_file contains the translations. (details provided below) errors_file contains the errors during processing of the file. (details below). Both translations_file and errors_file could be empty strings if we have no content to output. glossary_translations_file and glossary_errors_file are always empty strings if the input_file is tsv. They could also be empty if we have no content to output. Once a row is present in index.csv, the input/output matching never changes. Callers should also expect all the content in input_file are processed and ready to be consumed (that is, no partial output file is written). Since index.csv will be keeping updated during the process, please make sure there is no custom retention policy applied on the output bucket that may avoid file updating. (https://cloud.google.com/storage/docs/bucket-lock?hl=en#retention-policy) The format of translations_file (for target language code 'trg') is: gs://translation_test/a_b_c_'trg'_translations.[extension] If the input file extension is tsv, the output has the following columns: Column 1: ID of the request provided in the input, if it's not provided in the input, then the input row number is used (0-based). Column 2: source sentence. Column 3: translation without applying a glossary. Empty string if there is an error. Column 4 (only present if a glossary is provided in the request): translation after applying the glossary. Empty string if there is an error applying the glossary. Could be same string as column 3 if there is no glossary applied. If input file extension is a txt or html, the translation is directly written to the output file. If glossary is requested, a separate glossary_translations_file has format of gs://translation_test/a_b_c_'trg'_glossary_translations.[extension] The format of errors file (for target language code 'trg') is: gs://translation_test/a_b_c_'trg'_errors.[extension] If the input file extension is tsv, errors_file contains the following: Column 1: ID of the request provided in the input, if it's not provided in the input, then the input row number is used (0-based). Column 2: source sentence. Column 3: Error detail for the translation. Could be empty. Column 4 (only present if a glossary is provided in the request): Error when applying the glossary. If the input file extension is txt or html, glossary_error_file will be generated that contains error details. glossary_error_file has format of gs://translation_test/a_b_c_'trg'_glossary_errors.[extension]",
-          "$ref": "GcsDestination"
+    "protocol": "rest",
+    "resources": {
+        "projects": {
+            "methods": {
+                "detectLanguage": {
+                    "description": "Detects the language of text within a request.",
+                    "flatPath": "v3beta1/projects/{projectsId}:detectLanguage",
+                    "httpMethod": "POST",
+                    "id": "translate.projects.detectLanguage",
+                    "parameterOrder": [
+                        "parent"
+                    ],
+                    "parameters": {
+                        "parent": {
+                            "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}/locations/{location-id}` or `projects/{project-number-or-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Only models within the same region (has same location-id) can be used. Otherwise an INVALID_ARGUMENT (400) error is returned.",
+                            "location": "path",
+                            "pattern": "^projects/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v3beta1/{+parent}:detectLanguage",
+                    "request": {
+                        "$ref": "DetectLanguageRequest"
+                    },
+                    "response": {
+                        "$ref": "DetectLanguageResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-translation"
+                    ]
+                },
+                "getSupportedLanguages": {
+                    "description": "Returns a list of supported languages for translation.",
+                    "flatPath": "v3beta1/projects/{projectsId}/supportedLanguages",
+                    "httpMethod": "GET",
+                    "id": "translate.projects.getSupportedLanguages",
+                    "parameterOrder": [
+                        "parent"
+                    ],
+                    "parameters": {
+                        "displayLanguageCode": {
+                            "description": "Optional. The language to use to return localized, human readable names of supported languages. If missing, then display names are not returned in a response.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "model": {
+                            "description": "Optional. Get supported languages of this model. The format depends on model type: - AutoML Translation models: `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - General (built-in) models: `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, `projects/{project-number-or-id}/locations/{location-id}/models/general/base` Returns languages supported by the specified model. If missing, we get supported languages of Google general base (PBMT) model.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "parent": {
+                            "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}` or `projects/{project-number-or-id}/locations/{location-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Non-global location is required for AutoML models. Only models within the same region (have same location-id) can be used, otherwise an INVALID_ARGUMENT (400) error is returned.",
+                            "location": "path",
+                            "pattern": "^projects/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v3beta1/{+parent}/supportedLanguages",
+                    "response": {
+                        "$ref": "SupportedLanguages"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-translation"
+                    ]
+                },
+                "translateText": {
+                    "description": "Translates input text and returns translated text.",
+                    "flatPath": "v3beta1/projects/{projectsId}:translateText",
+                    "httpMethod": "POST",
+                    "id": "translate.projects.translateText",
+                    "parameterOrder": [
+                        "parent"
+                    ],
+                    "parameters": {
+                        "parent": {
+                            "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}` or `projects/{project-number-or-id}/locations/{location-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Non-global location is required for requests using AutoML models or custom glossaries. Models and glossaries must be within the same region (have same location-id), otherwise an INVALID_ARGUMENT (400) error is returned.",
+                            "location": "path",
+                            "pattern": "^projects/[^/]+$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v3beta1/{+parent}:translateText",
+                    "request": {
+                        "$ref": "TranslateTextRequest"
+                    },
+                    "response": {
+                        "$ref": "TranslateTextResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-translation"
+                    ]
+                }
+            },
+            "resources": {
+                "locations": {
+                    "methods": {
+                        "batchTranslateText": {
+                            "description": "Translates a large volume of text in asynchronous batch mode. This function provides real-time output as the inputs are being processed. If caller cancels a request, the partial results (for an input file, it's all or nothing) may still be available on the specified output location. This call returns immediately and you can use google.longrunning.Operation.name to poll the status of the call.",
+                            "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}:batchTranslateText",
+                            "httpMethod": "POST",
+                            "id": "translate.projects.locations.batchTranslateText",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. Location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}/locations/{location-id}`. The `global` location is not supported for batch translation. Only AutoML Translation models or glossaries within the same region (have the same location-id) can be used, otherwise an INVALID_ARGUMENT (400) error is returned.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v3beta1/{+parent}:batchTranslateText",
+                            "request": {
+                                "$ref": "BatchTranslateTextRequest"
+                            },
+                            "response": {
+                                "$ref": "Operation"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "detectLanguage": {
+                            "description": "Detects the language of text within a request.",
+                            "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}:detectLanguage",
+                            "httpMethod": "POST",
+                            "id": "translate.projects.locations.detectLanguage",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}/locations/{location-id}` or `projects/{project-number-or-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Only models within the same region (has same location-id) can be used. Otherwise an INVALID_ARGUMENT (400) error is returned.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v3beta1/{+parent}:detectLanguage",
+                            "request": {
+                                "$ref": "DetectLanguageRequest"
+                            },
+                            "response": {
+                                "$ref": "DetectLanguageResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-translation"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets information about a location.",
+                            "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}",
+                            "httpMethod": "GET",
+                            "id": "translate.projects.locations.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Resource name for the location.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v3beta1/{+name}",
+                            "response": {
+                                "$ref": "Location"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-translation"
+                            ]
+                        },
+                        "getSupportedLanguages": {
+                            "description": "Returns a list of supported languages for translation.",
+                            "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}/supportedLanguages",
+                            "httpMethod": "GET",
+                            "id": "translate.projects.locations.getSupportedLanguages",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "displayLanguageCode": {
+                                    "description": "Optional. The language to use to return localized, human readable names of supported languages. If missing, then display names are not returned in a response.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "model": {
+                                    "description": "Optional. Get supported languages of this model. The format depends on model type: - AutoML Translation models: `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - General (built-in) models: `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, `projects/{project-number-or-id}/locations/{location-id}/models/general/base` Returns languages supported by the specified model. If missing, we get supported languages of Google general base (PBMT) model.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "parent": {
+                                    "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}` or `projects/{project-number-or-id}/locations/{location-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Non-global location is required for AutoML models. Only models within the same region (have same location-id) can be used, otherwise an INVALID_ARGUMENT (400) error is returned.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v3beta1/{+parent}/supportedLanguages",
+                            "response": {
+                                "$ref": "SupportedLanguages"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-translation"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists information about the supported locations for this service.",
+                            "flatPath": "v3beta1/projects/{projectsId}/locations",
+                            "httpMethod": "GET",
+                            "id": "translate.projects.locations.list",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "The standard list filter.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "name": {
+                                    "description": "The resource that owns the locations collection, if applicable.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "The standard list page size.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The standard list page token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v3beta1/{+name}/locations",
+                            "response": {
+                                "$ref": "ListLocationsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-translation"
+                            ]
+                        },
+                        "translateText": {
+                            "description": "Translates input text and returns translated text.",
+                            "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}:translateText",
+                            "httpMethod": "POST",
+                            "id": "translate.projects.locations.translateText",
+                            "parameterOrder": [
+                                "parent"
+                            ],
+                            "parameters": {
+                                "parent": {
+                                    "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}` or `projects/{project-number-or-id}/locations/{location-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Non-global location is required for requests using AutoML models or custom glossaries. Models and glossaries must be within the same region (have same location-id), otherwise an INVALID_ARGUMENT (400) error is returned.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v3beta1/{+parent}:translateText",
+                            "request": {
+                                "$ref": "TranslateTextRequest"
+                            },
+                            "response": {
+                                "$ref": "TranslateTextResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform",
+                                "https://www.googleapis.com/auth/cloud-translation"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "glossaries": {
+                            "methods": {
+                                "create": {
+                                    "description": "Creates a glossary and returns the long-running operation. Returns NOT_FOUND, if the project doesn't exist.",
+                                    "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}/glossaries",
+                                    "httpMethod": "POST",
+                                    "id": "translate.projects.locations.glossaries.create",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "parent": {
+                                            "description": "Required. The project name.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v3beta1/{+parent}/glossaries",
+                                    "request": {
+                                        "$ref": "Glossary"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a glossary, or cancels glossary construction if the glossary isn't created yet. Returns NOT_FOUND, if the glossary doesn't exist.",
+                                    "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}/glossaries/{glossariesId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "translate.projects.locations.glossaries.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The name of the glossary to delete.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/glossaries/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v3beta1/{+name}",
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-translation"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets a glossary. Returns NOT_FOUND, if the glossary doesn't exist.",
+                                    "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}/glossaries/{glossariesId}",
+                                    "httpMethod": "GET",
+                                    "id": "translate.projects.locations.glossaries.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. The name of the glossary to retrieve.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/glossaries/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v3beta1/{+name}",
+                                    "response": {
+                                        "$ref": "Glossary"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-translation"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists glossaries in a project. Returns NOT_FOUND, if the project doesn't exist.",
+                                    "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}/glossaries",
+                                    "httpMethod": "GET",
+                                    "id": "translate.projects.locations.glossaries.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "filter": {
+                                            "description": "Optional. Filter specifying constraints of a list operation. Specify the constraint by the format of \"key=value\", where key must be \"src\" or \"tgt\", and the value must be a valid language code. For multiple restrictions, concatenate them by \"AND\" (uppercase only), such as: \"src=en-US AND tgt=zh-CN\". Notice that the exact match is used here, which means using 'en-US' and 'en' can lead to different results, which depends on the language code you used when you create the glossary. For the unidirectional glossaries, the \"src\" and \"tgt\" add restrictions on the source and target language code separately. For the equivalent term set glossaries, the \"src\" and/or \"tgt\" add restrictions on the term set. For example: \"src=en-US AND tgt=zh-CN\" will only pick the unidirectional glossaries which exactly match the source language code as \"en-US\" and the target language code \"zh-CN\", but all equivalent term set glossaries which contain \"en-US\" and \"zh-CN\" in their language set will be picked. If missing, no filtering is performed.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "Optional. Requested page size. The server may return fewer glossaries than requested. If unspecified, the server picks an appropriate default.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "Optional. A token identifying a page of results the server should return. Typically, this is the value of [ListGlossariesResponse.next_page_token] returned from the previous call to `ListGlossaries` method. The first page is returned if `page_token`is empty or missing.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. The name of the project from which to list all of the glossaries.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v3beta1/{+parent}/glossaries",
+                                    "response": {
+                                        "$ref": "ListGlossariesResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-translation"
+                                    ]
+                                }
+                            }
+                        },
+                        "operations": {
+                            "methods": {
+                                "cancel": {
+                                    "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.",
+                                    "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}:cancel",
+                                    "httpMethod": "POST",
+                                    "id": "translate.projects.locations.operations.cancel",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The name of the operation resource to be cancelled.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v3beta1/{+name}:cancel",
+                                    "request": {
+                                        "$ref": "CancelOperationRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-translation"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.",
+                                    "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "translate.projects.locations.operations.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The name of the operation resource to be deleted.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v3beta1/{+name}",
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-translation"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
+                                    "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
+                                    "httpMethod": "GET",
+                                    "id": "translate.projects.locations.operations.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The name of the operation resource.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v3beta1/{+name}",
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-translation"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
+                                    "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}/operations",
+                                    "httpMethod": "GET",
+                                    "id": "translate.projects.locations.operations.list",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "filter": {
+                                            "description": "The standard list filter.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "name": {
+                                            "description": "The name of the operation's parent resource.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "The standard list page size.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "The standard list page token.",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v3beta1/{+name}/operations",
+                                    "response": {
+                                        "$ref": "ListOperationsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-translation"
+                                    ]
+                                },
+                                "wait": {
+                                    "description": "Waits until the specified long-running operation is done or reaches at most a specified timeout, returning the latest state. If the operation is already done, the latest state is immediately returned. If the timeout specified is greater than the default HTTP/RPC timeout, the HTTP/RPC timeout is used. If the server does not support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Note that this method is on a best-effort basis. It may return the latest state before the specified timeout (including immediately), meaning even an immediate response is no guarantee that the operation is done.",
+                                    "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}:wait",
+                                    "httpMethod": "POST",
+                                    "id": "translate.projects.locations.operations.wait",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The name of the operation resource to wait on.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v3beta1/{+name}:wait",
+                                    "request": {
+                                        "$ref": "WaitOperationRequest"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform",
+                                        "https://www.googleapis.com/auth/cloud-translation"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                }
+            }
         }
-      },
-      "description": "Output configuration for BatchTranslateText request.",
-      "type": "object",
-      "id": "OutputConfig"
     },
-    "TranslateTextResponse": {
-      "properties": {
-        "glossaryTranslations": {
-          "items": {
-            "$ref": "Translation"
-          },
-          "description": "Text translation responses if a glossary is provided in the request. This can be the same as `translations` if no terms apply. This field has the same length as `contents`.",
-          "type": "array"
-        },
-        "translations": {
-          "type": "array",
-          "description": "Text translation responses with no glossary applied. This field has the same length as `contents`.",
-          "items": {
-            "$ref": "Translation"
-          }
-        }
-      },
-      "id": "TranslateTextResponse",
-      "type": "object"
-    },
-    "Status": {
-      "properties": {
-        "code": {
-          "type": "integer",
-          "format": "int32",
-          "description": "The status code, which should be an enum value of google.rpc.Code."
-        },
-        "message": {
-          "type": "string",
-          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client."
-        },
-        "details": {
-          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
-          "type": "array",
-          "items": {
-            "additionalProperties": {
-              "description": "Properties of the object. Contains field @type with type URL.",
-              "type": "any"
+    "revision": "20210219",
+    "rootUrl": "https://translation.googleapis.com/",
+    "schemas": {
+        "BatchTranslateTextRequest": {
+            "description": "The batch translation request.",
+            "id": "BatchTranslateTextRequest",
+            "properties": {
+                "glossaries": {
+                    "additionalProperties": {
+                        "$ref": "TranslateTextGlossaryConfig"
+                    },
+                    "description": "Optional. Glossaries to be applied for translation. It's keyed by target language code.",
+                    "type": "object"
+                },
+                "inputConfigs": {
+                    "description": "Required. Input configurations. The total number of files matched should be <= 100. The total content size should be <= 100M Unicode codepoints. The files must use UTF-8 encoding.",
+                    "items": {
+                        "$ref": "InputConfig"
+                    },
+                    "type": "array"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Optional. The labels with user-defined metadata for the request. Label keys and values can be no longer than 63 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. Label values are optional. Label keys must start with a letter. See https://cloud.google.com/translate/docs/labels for more information.",
+                    "type": "object"
+                },
+                "models": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Optional. The models to use for translation. Map's key is target language code. Map's value is model name. Value can be a built-in general model, or an AutoML Translation model. The value format depends on model type: - AutoML Translation models: `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - General (built-in) models: `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, `projects/{project-number-or-id}/locations/{location-id}/models/general/base` If the map is empty or a specific model is not requested for a language pair, then default google model (nmt) is used.",
+                    "type": "object"
+                },
+                "outputConfig": {
+                    "$ref": "OutputConfig",
+                    "description": "Required. Output configuration. If 2 input configs match to the same file (that is, same input path), we don't generate output for duplicate inputs."
+                },
+                "sourceLanguageCode": {
+                    "description": "Required. Source language code.",
+                    "type": "string"
+                },
+                "targetLanguageCodes": {
+                    "description": "Required. Specify up to 10 language codes here.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
             },
             "type": "object"
-          }
-        }
-      },
-      "type": "object",
-      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
-      "id": "Status"
-    },
-    "TranslateTextRequest": {
-      "properties": {
-        "labels": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional. The labels with user-defined metadata for the request. Label keys and values can be no longer than 63 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. Label values are optional. Label keys must start with a letter. See https://cloud.google.com/translate/docs/labels for more information."
         },
-        "sourceLanguageCode": {
-          "description": "Optional. The BCP-47 language code of the input text if known, for example, \"en-US\" or \"sr-Latn\". Supported language codes are listed in Language Support. If the source language isn't specified, the API attempts to identify the source language automatically and returns the source language within the response.",
-          "type": "string"
+        "CancelOperationRequest": {
+            "description": "The request message for Operations.CancelOperation.",
+            "id": "CancelOperationRequest",
+            "properties": {},
+            "type": "object"
         },
-        "contents": {
-          "items": {
-            "type": "string"
-          },
-          "description": "Required. The content of the input in string format. We recommend the total content be less than 30k codepoints. The max length of this field is 1024. Use BatchTranslateText for larger text.",
-          "type": "array"
-        },
-        "model": {
-          "description": "Optional. The `model` type requested for this translation. The format depends on model type: - AutoML Translation models: `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - General (built-in) models: `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, `projects/{project-number-or-id}/locations/{location-id}/models/general/base` For global (non-regionalized) requests, use `location-id` `global`. For example, `projects/{project-number-or-id}/locations/global/models/general/nmt`. If missing, the system decides which google base model to use.",
-          "type": "string"
-        },
-        "glossaryConfig": {
-          "description": "Optional. Glossary to be applied. The glossary must be within the same region (have the same location-id) as the model, otherwise an INVALID_ARGUMENT (400) error is returned.",
-          "$ref": "TranslateTextGlossaryConfig"
-        },
-        "mimeType": {
-          "type": "string",
-          "description": "Optional. The format of the source text, for example, \"text/html\", \"text/plain\". If left blank, the MIME type defaults to \"text/html\"."
-        },
-        "targetLanguageCode": {
-          "type": "string",
-          "description": "Required. The BCP-47 language code to use for translation of the input text, set to one of the language codes listed in Language Support."
-        }
-      },
-      "description": "The request message for synchronous translation.",
-      "type": "object",
-      "id": "TranslateTextRequest"
-    }
-  },
-  "ownerDomain": "google.com",
-  "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
-  },
-  "baseUrl": "https://translation.googleapis.com/",
-  "basePath": "",
-  "parameters": {
-    "callback": {
-      "description": "JSONP",
-      "location": "query",
-      "type": "string"
-    },
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "location": "query",
-      "default": "true"
-    },
-    "$.xgafv": {
-      "enum": [
-        "1",
-        "2"
-      ],
-      "location": "query",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "type": "string",
-      "description": "V1 error format."
-    },
-    "quotaUser": {
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "type": "string",
-      "location": "query"
-    },
-    "key": {
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "type": "string",
-      "location": "query"
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "upload_protocol": {
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
-    },
-    "alt": {
-      "location": "query",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "description": "Data format for response.",
-      "default": "json",
-      "type": "string",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ]
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "fields": {
-      "type": "string",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "location": "query"
-    }
-  },
-  "id": "translate:v3beta1",
-  "resources": {
-    "projects": {
-      "methods": {
-        "detectLanguage": {
-          "request": {
-            "$ref": "DetectLanguageRequest"
-          },
-          "httpMethod": "POST",
-          "path": "v3beta1/{+parent}:detectLanguage",
-          "parameterOrder": [
-            "parent"
-          ],
-          "id": "translate.projects.detectLanguage",
-          "parameters": {
-            "parent": {
-              "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}/locations/{location-id}` or `projects/{project-number-or-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Only models within the same region (has same location-id) can be used. Otherwise an INVALID_ARGUMENT (400) error is returned.",
-              "pattern": "^projects/[^/]+$",
-              "location": "path",
-              "type": "string",
-              "required": true
-            }
-          },
-          "description": "Detects the language of text within a request.",
-          "flatPath": "v3beta1/projects/{projectsId}:detectLanguage",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-translation"
-          ],
-          "response": {
-            "$ref": "DetectLanguageResponse"
-          }
-        },
-        "getSupportedLanguages": {
-          "response": {
-            "$ref": "SupportedLanguages"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-translation"
-          ],
-          "httpMethod": "GET",
-          "flatPath": "v3beta1/projects/{projectsId}/supportedLanguages",
-          "description": "Returns a list of supported languages for translation.",
-          "parameters": {
-            "displayLanguageCode": {
-              "type": "string",
-              "location": "query",
-              "description": "Optional. The language to use to return localized, human readable names of supported languages. If missing, then display names are not returned in a response."
-            },
-            "parent": {
-              "pattern": "^projects/[^/]+$",
-              "type": "string",
-              "required": true,
-              "location": "path",
-              "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}` or `projects/{project-number-or-id}/locations/{location-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Non-global location is required for AutoML models. Only models within the same region (have same location-id) can be used, otherwise an INVALID_ARGUMENT (400) error is returned."
-            },
-            "model": {
-              "type": "string",
-              "location": "query",
-              "description": "Optional. Get supported languages of this model. The format depends on model type: - AutoML Translation models: `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - General (built-in) models: `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, `projects/{project-number-or-id}/locations/{location-id}/models/general/base` Returns languages supported by the specified model. If missing, we get supported languages of Google general base (PBMT) model."
-            }
-          },
-          "path": "v3beta1/{+parent}/supportedLanguages",
-          "parameterOrder": [
-            "parent"
-          ],
-          "id": "translate.projects.getSupportedLanguages"
-        },
-        "translateText": {
-          "httpMethod": "POST",
-          "path": "v3beta1/{+parent}:translateText",
-          "response": {
-            "$ref": "TranslateTextResponse"
-          },
-          "parameterOrder": [
-            "parent"
-          ],
-          "id": "translate.projects.translateText",
-          "parameters": {
-            "parent": {
-              "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}` or `projects/{project-number-or-id}/locations/{location-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Non-global location is required for requests using AutoML models or custom glossaries. Models and glossaries must be within the same region (have same location-id), otherwise an INVALID_ARGUMENT (400) error is returned.",
-              "location": "path",
-              "type": "string",
-              "pattern": "^projects/[^/]+$",
-              "required": true
-            }
-          },
-          "request": {
-            "$ref": "TranslateTextRequest"
-          },
-          "description": "Translates input text and returns translated text.",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-translation"
-          ],
-          "flatPath": "v3beta1/projects/{projectsId}:translateText"
-        }
-      },
-      "resources": {
-        "locations": {
-          "resources": {
-            "operations": {
-              "methods": {
-                "wait": {
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}:wait",
-                  "parameters": {
-                    "name": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
-                      "description": "The name of the operation resource to wait on.",
-                      "required": true,
-                      "location": "path",
-                      "type": "string"
-                    }
-                  },
-                  "request": {
-                    "$ref": "WaitOperationRequest"
-                  },
-                  "httpMethod": "POST",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-translation"
-                  ],
-                  "path": "v3beta1/{+name}:wait",
-                  "description": "Waits for the specified long-running operation until it is done or reaches at most a specified timeout, returning the latest state. If the operation is already done, the latest state is immediately returned. If the timeout specified is greater than the default HTTP/RPC timeout, the HTTP/RPC timeout is used. If the server does not support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Note that this method is on a best-effort basis. It may return the latest state before the specified timeout (including immediately), meaning even an immediate response is no guarantee that the operation is done.",
-                  "id": "translate.projects.locations.operations.wait"
+        "DetectLanguageRequest": {
+            "description": "The request message for language detection.",
+            "id": "DetectLanguageRequest",
+            "properties": {
+                "content": {
+                    "description": "The content of the input stored as a string.",
+                    "type": "string"
                 },
-                "delete": {
-                  "id": "translate.projects.locations.operations.delete",
-                  "path": "v3beta1/{+name}",
-                  "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "parameters": {
-                    "name": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "The name of the operation resource to be deleted."
-                    }
-                  },
-                  "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-translation"
-                  ],
-                  "httpMethod": "DELETE"
-                },
-                "cancel": {
-                  "parameters": {
-                    "name": {
-                      "description": "The name of the operation resource to be cancelled.",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
-                      "required": true,
-                      "location": "path",
-                      "type": "string"
-                    }
-                  },
-                  "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}:cancel",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-translation"
-                  ],
-                  "id": "translate.projects.locations.operations.cancel",
-                  "request": {
-                    "$ref": "CancelOperationRequest"
-                  },
-                  "path": "v3beta1/{+name}:cancel",
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`."
-                },
-                "list": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-translation"
-                  ],
-                  "parameters": {
-                    "pageToken": {
-                      "description": "The standard list page token.",
-                      "type": "string",
-                      "location": "query"
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
                     },
-                    "pageSize": {
-                      "location": "query",
-                      "description": "The standard list page size.",
-                      "format": "int32",
-                      "type": "integer"
-                    },
-                    "filter": {
-                      "description": "The standard list filter.",
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "name": {
-                      "description": "The name of the operation's parent resource.",
-                      "location": "path",
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "required": true
-                    }
-                  },
-                  "httpMethod": "GET",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "path": "v3beta1/{+name}/operations",
-                  "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}/operations",
-                  "response": {
-                    "$ref": "ListOperationsResponse"
-                  },
-                  "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
-                  "id": "translate.projects.locations.operations.list"
+                    "description": "Optional. The labels with user-defined metadata for the request. Label keys and values can be no longer than 63 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. Label values are optional. Label keys must start with a letter. See https://cloud.google.com/translate/docs/labels for more information.",
+                    "type": "object"
                 },
-                "get": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-translation"
-                  ],
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "httpMethod": "GET",
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "required": true,
-                      "description": "The name of the operation resource.",
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$"
-                    }
-                  },
-                  "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
-                  "id": "translate.projects.locations.operations.get",
-                  "path": "v3beta1/{+name}"
-                }
-              }
-            },
-            "glossaries": {
-              "methods": {
-                "list": {
-                  "httpMethod": "GET",
-                  "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}/glossaries",
-                  "id": "translate.projects.locations.glossaries.list",
-                  "response": {
-                    "$ref": "ListGlossariesResponse"
-                  },
-                  "description": "Lists glossaries in a project. Returns NOT_FOUND, if the project doesn't exist.",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-translation"
-                  ],
-                  "path": "v3beta1/{+parent}/glossaries",
-                  "parameters": {
-                    "parent": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "description": "Required. The name of the project from which to list all of the glossaries.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "pageToken": {
-                      "description": "Optional. A token identifying a page of results the server should return. Typically, this is the value of [ListGlossariesResponse.next_page_token] returned from the previous call to `ListGlossaries` method. The first page is returned if `page_token`is empty or missing.",
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "filter": {
-                      "type": "string",
-                      "description": "Optional. Filter specifying constraints of a list operation. Specify the constraint by the format of \"key=value\", where key must be \"src\" or \"tgt\", and the value must be a valid language code. For multiple restrictions, concatenate them by \"AND\" (uppercase only), such as: \"src=en-US AND tgt=zh-CN\". Notice that the exact match is used here, which means using 'en-US' and 'en' can lead to different results, which depends on the language code you used when you create the glossary. For the unidirectional glossaries, the \"src\" and \"tgt\" add restrictions on the source and target language code separately. For the equivalent term set glossaries, the \"src\" and/or \"tgt\" add restrictions on the term set. For example: \"src=en-US AND tgt=zh-CN\" will only pick the unidirectional glossaries which exactly match the source language code as \"en-US\" and the target language code \"zh-CN\", but all equivalent term set glossaries which contain \"en-US\" and \"zh-CN\" in their language set will be picked. If missing, no filtering is performed.",
-                      "location": "query"
-                    },
-                    "pageSize": {
-                      "type": "integer",
-                      "location": "query",
-                      "description": "Optional. Requested page size. The server may return fewer glossaries than requested. If unspecified, the server picks an appropriate default.",
-                      "format": "int32"
-                    }
-                  }
-                },
-                "get": {
-                  "path": "v3beta1/{+name}",
-                  "id": "translate.projects.locations.glossaries.get",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "response": {
-                    "$ref": "Glossary"
-                  },
-                  "description": "Gets a glossary. Returns NOT_FOUND, if the glossary doesn't exist.",
-                  "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}/glossaries/{glossariesId}",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-translation"
-                  ],
-                  "httpMethod": "GET",
-                  "parameters": {
-                    "name": {
-                      "description": "Required. The name of the glossary to retrieve.",
-                      "type": "string",
-                      "required": true,
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/glossaries/[^/]+$"
-                    }
-                  }
-                },
-                "create": {
-                  "path": "v3beta1/{+parent}/glossaries",
-                  "parameters": {
-                    "parent": {
-                      "location": "path",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "description": "Required. The project name.",
-                      "type": "string"
-                    }
-                  },
-                  "description": "Creates a glossary and returns the long-running operation. Returns NOT_FOUND, if the project doesn't exist.",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "id": "translate.projects.locations.glossaries.create",
-                  "httpMethod": "POST",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "request": {
-                    "$ref": "Glossary"
-                  },
-                  "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}/glossaries",
-                  "response": {
-                    "$ref": "Operation"
-                  }
-                },
-                "delete": {
-                  "httpMethod": "DELETE",
-                  "parameters": {
-                    "name": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+/glossaries/[^/]+$",
-                      "description": "Required. The name of the glossary to delete.",
-                      "type": "string",
-                      "location": "path",
-                      "required": true
-                    }
-                  },
-                  "description": "Deletes a glossary, or cancels glossary construction if the glossary isn't created yet. Returns NOT_FOUND, if the glossary doesn't exist.",
-                  "id": "translate.projects.locations.glossaries.delete",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-translation"
-                  ],
-                  "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}/glossaries/{glossariesId}",
-                  "path": "v3beta1/{+name}",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ]
-                }
-              }
-            }
-          },
-          "methods": {
-            "batchTranslateText": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "description": "Translates a large volume of text in asynchronous batch mode. This function provides real-time output as the inputs are being processed. If caller cancels a request, the partial results (for an input file, it's all or nothing) may still be available on the specified output location. This call returns immediately and you can use google.longrunning.Operation.name to poll the status of the call.",
-              "request": {
-                "$ref": "BatchTranslateTextRequest"
-              },
-              "id": "translate.projects.locations.batchTranslateText",
-              "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}:batchTranslateText",
-              "response": {
-                "$ref": "Operation"
-              },
-              "parameters": {
-                "parent": {
-                  "description": "Required. Location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}/locations/{location-id}`. The `global` location is not supported for batch translation. Only AutoML Translation models or glossaries within the same region (have the same location-id) can be used, otherwise an INVALID_ARGUMENT (400) error is returned.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "pattern": "^projects/[^/]+/locations/[^/]+$"
-                }
-              },
-              "path": "v3beta1/{+parent}:batchTranslateText",
-              "parameterOrder": [
-                "parent"
-              ],
-              "httpMethod": "POST"
-            },
-            "detectLanguage": {
-              "request": {
-                "$ref": "DetectLanguageRequest"
-              },
-              "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}:detectLanguage",
-              "httpMethod": "POST",
-              "description": "Detects the language of text within a request.",
-              "parameterOrder": [
-                "parent"
-              ],
-              "parameters": {
-                "parent": {
-                  "pattern": "^projects/[^/]+/locations/[^/]+$",
-                  "required": true,
-                  "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}/locations/{location-id}` or `projects/{project-number-or-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Only models within the same region (has same location-id) can be used. Otherwise an INVALID_ARGUMENT (400) error is returned.",
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "path": "v3beta1/{+parent}:detectLanguage",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-translation"
-              ],
-              "id": "translate.projects.locations.detectLanguage",
-              "response": {
-                "$ref": "DetectLanguageResponse"
-              }
-            },
-            "get": {
-              "response": {
-                "$ref": "Location"
-              },
-              "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}",
-              "parameters": {
-                "name": {
-                  "required": true,
-                  "location": "path",
-                  "description": "Resource name for the location.",
-                  "pattern": "^projects/[^/]+/locations/[^/]+$",
-                  "type": "string"
-                }
-              },
-              "description": "Gets information about a location.",
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-translation"
-              ],
-              "path": "v3beta1/{+name}",
-              "parameterOrder": [
-                "name"
-              ],
-              "id": "translate.projects.locations.get"
-            },
-            "list": {
-              "path": "v3beta1/{+name}/locations",
-              "parameters": {
-                "name": {
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "description": "The resource that owns the locations collection, if applicable."
-                },
-                "filter": {
-                  "description": "The standard list filter.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "pageSize": {
-                  "description": "The standard list page size.",
-                  "format": "int32",
-                  "location": "query",
-                  "type": "integer"
-                },
-                "pageToken": {
-                  "type": "string",
-                  "description": "The standard list page token.",
-                  "location": "query"
-                }
-              },
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "name"
-              ],
-              "id": "translate.projects.locations.list",
-              "response": {
-                "$ref": "ListLocationsResponse"
-              },
-              "description": "Lists information about the supported locations for this service.",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-translation"
-              ],
-              "flatPath": "v3beta1/projects/{projectsId}/locations"
-            },
-            "translateText": {
-              "path": "v3beta1/{+parent}:translateText",
-              "id": "translate.projects.locations.translateText",
-              "parameterOrder": [
-                "parent"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-translation"
-              ],
-              "parameters": {
-                "parent": {
-                  "location": "path",
-                  "pattern": "^projects/[^/]+/locations/[^/]+$",
-                  "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}` or `projects/{project-number-or-id}/locations/{location-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Non-global location is required for requests using AutoML models or custom glossaries. Models and glossaries must be within the same region (have same location-id), otherwise an INVALID_ARGUMENT (400) error is returned.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}:translateText",
-              "description": "Translates input text and returns translated text.",
-              "httpMethod": "POST",
-              "response": {
-                "$ref": "TranslateTextResponse"
-              },
-              "request": {
-                "$ref": "TranslateTextRequest"
-              }
-            },
-            "getSupportedLanguages": {
-              "path": "v3beta1/{+parent}/supportedLanguages",
-              "description": "Returns a list of supported languages for translation.",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-translation"
-              ],
-              "id": "translate.projects.locations.getSupportedLanguages",
-              "parameters": {
-                "parent": {
-                  "pattern": "^projects/[^/]+/locations/[^/]+$",
-                  "description": "Required. Project or location to make a call. Must refer to a caller's project. Format: `projects/{project-number-or-id}` or `projects/{project-number-or-id}/locations/{location-id}`. For global calls, use `projects/{project-number-or-id}/locations/global` or `projects/{project-number-or-id}`. Non-global location is required for AutoML models. Only models within the same region (have same location-id) can be used, otherwise an INVALID_ARGUMENT (400) error is returned.",
-                  "type": "string",
-                  "required": true,
-                  "location": "path"
+                "mimeType": {
+                    "description": "Optional. The format of the source text, for example, \"text/html\", \"text/plain\". If left blank, the MIME type defaults to \"text/html\".",
+                    "type": "string"
                 },
                 "model": {
-                  "description": "Optional. Get supported languages of this model. The format depends on model type: - AutoML Translation models: `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - General (built-in) models: `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, `projects/{project-number-or-id}/locations/{location-id}/models/general/base` Returns languages supported by the specified model. If missing, we get supported languages of Google general base (PBMT) model.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "displayLanguageCode": {
-                  "location": "query",
-                  "description": "Optional. The language to use to return localized, human readable names of supported languages. If missing, then display names are not returned in a response.",
-                  "type": "string"
+                    "description": "Optional. The language detection model to be used. Format: `projects/{project-number-or-id}/locations/{location-id}/models/language-detection/{model-id}` Only one language detection model is currently supported: `projects/{project-number-or-id}/locations/{location-id}/models/language-detection/default`. If not specified, the default model is used.",
+                    "type": "string"
                 }
-              },
-              "flatPath": "v3beta1/projects/{projectsId}/locations/{locationsId}/supportedLanguages",
-              "parameterOrder": [
-                "parent"
-              ],
-              "response": {
-                "$ref": "SupportedLanguages"
-              },
-              "httpMethod": "GET"
-            }
-          }
-        }
-      }
-    }
-  },
-  "canonicalName": "Translate",
-  "name": "translate",
-  "fullyEncodeReservedExpansion": true,
-  "mtlsRootUrl": "https://translation.mtls.googleapis.com/",
-  "version_module": true,
-  "batchPath": "batch",
-  "documentationLink": "https://cloud.google.com/translate/docs/quickstarts",
-  "discoveryVersion": "v1",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-translation": {
-          "description": "Translate text from one language to another using Google Translate"
+            },
+            "type": "object"
         },
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
+        "DetectLanguageResponse": {
+            "description": "The response message for language detection.",
+            "id": "DetectLanguageResponse",
+            "properties": {
+                "languages": {
+                    "description": "A list of detected languages sorted by detection confidence in descending order. The most probable language first.",
+                    "items": {
+                        "$ref": "DetectedLanguage"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "DetectedLanguage": {
+            "description": "The response message for language detection.",
+            "id": "DetectedLanguage",
+            "properties": {
+                "confidence": {
+                    "description": "The confidence of the detection result for this language.",
+                    "format": "float",
+                    "type": "number"
+                },
+                "languageCode": {
+                    "description": "The BCP-47 language code of source content in the request, detected automatically.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Empty": {
+            "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
+            "id": "Empty",
+            "properties": {},
+            "type": "object"
+        },
+        "GcsDestination": {
+            "description": "The Google Cloud Storage location for the output content.",
+            "id": "GcsDestination",
+            "properties": {
+                "outputUriPrefix": {
+                    "description": "Required. There must be no files under 'output_uri_prefix'. 'output_uri_prefix' must end with \"/\" and start with \"gs://\", otherwise an INVALID_ARGUMENT (400) error is returned.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GcsSource": {
+            "description": "The Google Cloud Storage location for the input content.",
+            "id": "GcsSource",
+            "properties": {
+                "inputUri": {
+                    "description": "Required. Source data URI. For example, `gs://my_bucket/my_object`.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Glossary": {
+            "description": "Represents a glossary built from user provided data.",
+            "id": "Glossary",
+            "properties": {
+                "endTime": {
+                    "description": "Output only. When the glossary creation was finished.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "entryCount": {
+                    "description": "Output only. The number of entries defined in the glossary.",
+                    "format": "int32",
+                    "readOnly": true,
+                    "type": "integer"
+                },
+                "inputConfig": {
+                    "$ref": "GlossaryInputConfig",
+                    "description": "Required. Provides examples to build the glossary from. Total glossary must not exceed 10M Unicode codepoints."
+                },
+                "languageCodesSet": {
+                    "$ref": "LanguageCodesSet",
+                    "description": "Used with equivalent term set glossaries."
+                },
+                "languagePair": {
+                    "$ref": "LanguageCodePair",
+                    "description": "Used with unidirectional glossaries."
+                },
+                "name": {
+                    "description": "Required. The resource name of the glossary. Glossary names have the form `projects/{project-number-or-id}/locations/{location-id}/glossaries/{glossary-id}`.",
+                    "type": "string"
+                },
+                "submitTime": {
+                    "description": "Output only. When CreateGlossary was called.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GlossaryInputConfig": {
+            "description": "Input configuration for glossaries.",
+            "id": "GlossaryInputConfig",
+            "properties": {
+                "gcsSource": {
+                    "$ref": "GcsSource",
+                    "description": "Required. Google Cloud Storage location of glossary data. File format is determined based on the filename extension. API returns [google.rpc.Code.INVALID_ARGUMENT] for unsupported URI-s and file formats. Wildcards are not allowed. This must be a single file in one of the following formats: For unidirectional glossaries: - TSV/CSV (`.tsv`/`.csv`): 2 column file, tab- or comma-separated. The first column is source text. The second column is target text. The file must not contain headers. That is, the first row is data, not column names. - TMX (`.tmx`): TMX file with parallel data defining source/target term pairs. For equivalent term sets glossaries: - CSV (`.csv`): Multi-column CSV file defining equivalent glossary terms in multiple languages. The format is defined for Google Translation Toolkit and documented in [Use a glossary](https://support.google.com/translatortoolkit/answer/6306379?hl=en)."
+                }
+            },
+            "type": "object"
+        },
+        "InputConfig": {
+            "description": "Input configuration for BatchTranslateText request.",
+            "id": "InputConfig",
+            "properties": {
+                "gcsSource": {
+                    "$ref": "GcsSource",
+                    "description": "Required. Google Cloud Storage location for the source input. This can be a single file (for example, `gs://translation-test/input.tsv`) or a wildcard (for example, `gs://translation-test/*`). If a file extension is `.tsv`, it can contain either one or two columns. The first column (optional) is the id of the text request. If the first column is missing, we use the row number (0-based) from the input file as the ID in the output file. The second column is the actual text to be translated. We recommend each row be <= 10K Unicode codepoints, otherwise an error might be returned. Note that the input tsv must be RFC 4180 compliant. You could use https://github.com/Clever/csvlint to check potential formatting errors in your tsv file. csvlint --delimiter='\\t' your_input_file.tsv The other supported file extensions are `.txt` or `.html`, which is treated as a single large chunk of text."
+                },
+                "mimeType": {
+                    "description": "Optional. Can be \"text/plain\" or \"text/html\". For `.tsv`, \"text/html\" is used if mime_type is missing. For `.html`, this field must be \"text/html\" or empty. For `.txt`, this field must be \"text/plain\" or empty.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LanguageCodePair": {
+            "description": "Used with unidirectional glossaries.",
+            "id": "LanguageCodePair",
+            "properties": {
+                "sourceLanguageCode": {
+                    "description": "Required. The BCP-47 language code of the input text, for example, \"en-US\". Expected to be an exact match for GlossaryTerm.language_code.",
+                    "type": "string"
+                },
+                "targetLanguageCode": {
+                    "description": "Required. The BCP-47 language code for translation output, for example, \"zh-CN\". Expected to be an exact match for GlossaryTerm.language_code.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "LanguageCodesSet": {
+            "description": "Used with equivalent term set glossaries.",
+            "id": "LanguageCodesSet",
+            "properties": {
+                "languageCodes": {
+                    "description": "The BCP-47 language code(s) for terms defined in the glossary. All entries are unique. The list contains at least two entries. Expected to be an exact match for GlossaryTerm.language_code.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListGlossariesResponse": {
+            "description": "Response message for ListGlossaries.",
+            "id": "ListGlossariesResponse",
+            "properties": {
+                "glossaries": {
+                    "description": "The list of glossaries for a project.",
+                    "items": {
+                        "$ref": "Glossary"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "A token to retrieve a page of results. Pass this value in the [ListGlossariesRequest.page_token] field in the subsequent call to `ListGlossaries` method to retrieve the next page of results.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListLocationsResponse": {
+            "description": "The response message for Locations.ListLocations.",
+            "id": "ListLocationsResponse",
+            "properties": {
+                "locations": {
+                    "description": "A list of locations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Location"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListOperationsResponse": {
+            "description": "The response message for Operations.ListOperations.",
+            "id": "ListOperationsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                },
+                "operations": {
+                    "description": "A list of operations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Operation"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Location": {
+            "description": "A resource that represents Google Cloud Platform location.",
+            "id": "Location",
+            "properties": {
+                "displayName": {
+                    "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\".",
+                    "type": "string"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}",
+                    "type": "object"
+                },
+                "locationId": {
+                    "description": "The canonical id for this location. For example: `\"us-east1\"`.",
+                    "type": "string"
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata. For example the available capacity at the given location.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "Resource name for the location, which may vary between implementations. For example: `\"projects/example-project/locations/us-east1\"`",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Operation": {
+            "description": "This resource represents a long-running operation that is the result of a network API call.",
+            "id": "Operation",
+            "properties": {
+                "done": {
+                    "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
+                    "type": "boolean"
+                },
+                "error": {
+                    "$ref": "Status",
+                    "description": "The error result of the operation in case of failure or cancellation."
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
+                    "type": "string"
+                },
+                "response": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "OutputConfig": {
+            "description": "Output configuration for BatchTranslateText request.",
+            "id": "OutputConfig",
+            "properties": {
+                "gcsDestination": {
+                    "$ref": "GcsDestination",
+                    "description": "Google Cloud Storage destination for output content. For every single input file (for example, gs://a/b/c.[extension]), we generate at most 2 * n output files. (n is the # of target_language_codes in the BatchTranslateTextRequest). Output files (tsv) generated are compliant with RFC 4180 except that record delimiters are '\\n' instead of '\\r\\n'. We don't provide any way to change record delimiters. While the input files are being processed, we write/update an index file 'index.csv' under 'output_uri_prefix' (for example, gs://translation-test/index.csv) The index file is generated/updated as new files are being translated. The format is: input_file,target_language_code,translations_file,errors_file, glossary_translations_file,glossary_errors_file input_file is one file we matched using gcs_source.input_uri. target_language_code is provided in the request. translations_file contains the translations. (details provided below) errors_file contains the errors during processing of the file. (details below). Both translations_file and errors_file could be empty strings if we have no content to output. glossary_translations_file and glossary_errors_file are always empty strings if the input_file is tsv. They could also be empty if we have no content to output. Once a row is present in index.csv, the input/output matching never changes. Callers should also expect all the content in input_file are processed and ready to be consumed (that is, no partial output file is written). Since index.csv will be keeping updated during the process, please make sure there is no custom retention policy applied on the output bucket that may avoid file updating. (https://cloud.google.com/storage/docs/bucket-lock?hl=en#retention-policy) The format of translations_file (for target language code 'trg') is: gs://translation_test/a_b_c_'trg'_translations.[extension] If the input file extension is tsv, the output has the following columns: Column 1: ID of the request provided in the input, if it's not provided in the input, then the input row number is used (0-based). Column 2: source sentence. Column 3: translation without applying a glossary. Empty string if there is an error. Column 4 (only present if a glossary is provided in the request): translation after applying the glossary. Empty string if there is an error applying the glossary. Could be same string as column 3 if there is no glossary applied. If input file extension is a txt or html, the translation is directly written to the output file. If glossary is requested, a separate glossary_translations_file has format of gs://translation_test/a_b_c_'trg'_glossary_translations.[extension] The format of errors file (for target language code 'trg') is: gs://translation_test/a_b_c_'trg'_errors.[extension] If the input file extension is tsv, errors_file contains the following: Column 1: ID of the request provided in the input, if it's not provided in the input, then the input row number is used (0-based). Column 2: source sentence. Column 3: Error detail for the translation. Could be empty. Column 4 (only present if a glossary is provided in the request): Error when applying the glossary. If the input file extension is txt or html, glossary_error_file will be generated that contains error details. glossary_error_file has format of gs://translation_test/a_b_c_'trg'_glossary_errors.[extension]"
+                }
+            },
+            "type": "object"
+        },
+        "Status": {
+            "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
+            "id": "Status",
+            "properties": {
+                "code": {
+                    "description": "The status code, which should be an enum value of google.rpc.Code.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SupportedLanguage": {
+            "description": "A single supported language response corresponds to information related to one supported language.",
+            "id": "SupportedLanguage",
+            "properties": {
+                "displayName": {
+                    "description": "Human readable name of the language localized in the display language specified in the request.",
+                    "type": "string"
+                },
+                "languageCode": {
+                    "description": "Supported language code, generally consisting of its ISO 639-1 identifier, for example, 'en', 'ja'. In certain cases, BCP-47 codes including language and region identifiers are returned (for example, 'zh-TW' and 'zh-CN')",
+                    "type": "string"
+                },
+                "supportSource": {
+                    "description": "Can be used as source language.",
+                    "type": "boolean"
+                },
+                "supportTarget": {
+                    "description": "Can be used as target language.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "SupportedLanguages": {
+            "description": "The response message for discovering supported languages.",
+            "id": "SupportedLanguages",
+            "properties": {
+                "languages": {
+                    "description": "A list of supported language responses. This list contains an entry for each language the Translation API supports.",
+                    "items": {
+                        "$ref": "SupportedLanguage"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "TranslateTextGlossaryConfig": {
+            "description": "Configures which glossary should be used for a specific target language, and defines options for applying that glossary.",
+            "id": "TranslateTextGlossaryConfig",
+            "properties": {
+                "glossary": {
+                    "description": "Required. Specifies the glossary used for this translation. Use this format: projects/*/locations/*/glossaries/*",
+                    "type": "string"
+                },
+                "ignoreCase": {
+                    "description": "Optional. Indicates match is case-insensitive. Default value is false if missing.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "TranslateTextRequest": {
+            "description": "The request message for synchronous translation.",
+            "id": "TranslateTextRequest",
+            "properties": {
+                "contents": {
+                    "description": "Required. The content of the input in string format. We recommend the total content be less than 30k codepoints. The max length of this field is 1024. Use BatchTranslateText for larger text.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "glossaryConfig": {
+                    "$ref": "TranslateTextGlossaryConfig",
+                    "description": "Optional. Glossary to be applied. The glossary must be within the same region (have the same location-id) as the model, otherwise an INVALID_ARGUMENT (400) error is returned."
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Optional. The labels with user-defined metadata for the request. Label keys and values can be no longer than 63 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. Label values are optional. Label keys must start with a letter. See https://cloud.google.com/translate/docs/labels for more information.",
+                    "type": "object"
+                },
+                "mimeType": {
+                    "description": "Optional. The format of the source text, for example, \"text/html\", \"text/plain\". If left blank, the MIME type defaults to \"text/html\".",
+                    "type": "string"
+                },
+                "model": {
+                    "description": "Optional. The `model` type requested for this translation. The format depends on model type: - AutoML Translation models: `projects/{project-number-or-id}/locations/{location-id}/models/{model-id}` - General (built-in) models: `projects/{project-number-or-id}/locations/{location-id}/models/general/nmt`, `projects/{project-number-or-id}/locations/{location-id}/models/general/base` For global (non-regionalized) requests, use `location-id` `global`. For example, `projects/{project-number-or-id}/locations/global/models/general/nmt`. If missing, the system decides which google base model to use.",
+                    "type": "string"
+                },
+                "sourceLanguageCode": {
+                    "description": "Optional. The BCP-47 language code of the input text if known, for example, \"en-US\" or \"sr-Latn\". Supported language codes are listed in Language Support. If the source language isn't specified, the API attempts to identify the source language automatically and returns the source language within the response.",
+                    "type": "string"
+                },
+                "targetLanguageCode": {
+                    "description": "Required. The BCP-47 language code to use for translation of the input text, set to one of the language codes listed in Language Support.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TranslateTextResponse": {
+            "id": "TranslateTextResponse",
+            "properties": {
+                "glossaryTranslations": {
+                    "description": "Text translation responses if a glossary is provided in the request. This can be the same as `translations` if no terms apply. This field has the same length as `contents`.",
+                    "items": {
+                        "$ref": "Translation"
+                    },
+                    "type": "array"
+                },
+                "translations": {
+                    "description": "Text translation responses with no glossary applied. This field has the same length as `contents`.",
+                    "items": {
+                        "$ref": "Translation"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Translation": {
+            "description": "A single translation response.",
+            "id": "Translation",
+            "properties": {
+                "detectedLanguageCode": {
+                    "description": "The BCP-47 language code of source text in the initial request, detected automatically, if no source language was passed within the initial request. If the source language was passed, auto-detection of the language does not occur and this field is empty.",
+                    "type": "string"
+                },
+                "glossaryConfig": {
+                    "$ref": "TranslateTextGlossaryConfig",
+                    "description": "The `glossary_config` used for this translation."
+                },
+                "model": {
+                    "description": "Only present when `model` is present in the request. `model` here is normalized to have project number. For example: If the `model` requested in TranslationTextRequest is `projects/{project-id}/locations/{location-id}/models/general/nmt` then `model` here would be normalized to `projects/{project-number}/locations/{location-id}/models/general/nmt`.",
+                    "type": "string"
+                },
+                "translatedText": {
+                    "description": "Text translated into the target language.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "WaitOperationRequest": {
+            "description": "The request message for Operations.WaitOperation.",
+            "id": "WaitOperationRequest",
+            "properties": {
+                "timeout": {
+                    "description": "The maximum duration to wait before timing out. If left blank, the wait will be at most the time permitted by the underlying HTTP/RPC protocol. If RPC context deadline is also specified, the shorter one will be used.",
+                    "format": "google-duration",
+                    "type": "string"
+                }
+            },
+            "type": "object"
         }
-      }
-    }
-  },
-  "rootUrl": "https://translation.googleapis.com/",
-  "protocol": "rest",
-  "servicePath": "",
-  "revision": "20201106"
-}
+    },
+    "servicePath": "",
+    "title": "Cloud Translation API",
+    "version": "v3beta1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/vault.v1.json b/googleapiclient/discovery_cache/documents/vault.v1.json
index 07c1192..ea03f76 100644
--- a/googleapiclient/discovery_cache/documents/vault.v1.json
+++ b/googleapiclient/discovery_cache/documents/vault.v1.json
@@ -1,2591 +1,2591 @@
 {
-  "documentationLink": "https://developers.google.com/vault",
-  "canonicalName": "Vault",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/ediscovery.readonly": {
-          "description": "View your eDiscovery data"
-        },
-        "https://www.googleapis.com/auth/ediscovery": {
-          "description": "Manage your eDiscovery data"
-        }
-      }
-    }
-  },
-  "baseUrl": "https://vault.googleapis.com/",
-  "parameters": {
-    "oauth_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user."
-    },
-    "prettyPrint": {
-      "type": "boolean",
-      "default": "true",
-      "location": "query",
-      "description": "Returns response with indentations and line breaks."
-    },
-    "alt": {
-      "type": "string",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "location": "query",
-      "description": "Data format for response.",
-      "default": "json"
-    },
-    "quotaUser": {
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "type": "string",
-      "location": "query"
-    },
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "location": "query"
-    },
-    "$.xgafv": {
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "type": "string",
-      "description": "V1 error format.",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "location": "query"
-    },
-    "upload_protocol": {
-      "location": "query",
-      "type": "string",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
-    },
-    "callback": {
-      "type": "string",
-      "description": "JSONP",
-      "location": "query"
-    },
-    "key": {
-      "location": "query",
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "type": "string"
-    },
-    "fields": {
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string"
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "location": "query",
-      "type": "string"
-    }
-  },
-  "servicePath": "",
-  "schemas": {
-    "Empty": {
-      "type": "object",
-      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
-      "id": "Empty",
-      "properties": {}
-    },
-    "ListExportsResponse": {
-      "description": "The holds for a matter.",
-      "properties": {
-        "exports": {
-          "description": "The list of exports.",
-          "type": "array",
-          "items": {
-            "$ref": "Export"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Page token to retrieve the next page of results in the list."
-        }
-      },
-      "id": "ListExportsResponse",
-      "type": "object"
-    },
-    "ListSavedQueriesResponse": {
-      "properties": {
-        "savedQueries": {
-          "description": "List of output saved queries.",
-          "type": "array",
-          "items": {
-            "$ref": "SavedQuery"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Page token to retrieve the next page of results in the list. If this is empty, then there are no more saved queries to list."
-        }
-      },
-      "id": "ListSavedQueriesResponse",
-      "description": "Definition of the response for method ListSaveQuery.",
-      "type": "object"
-    },
-    "MatterPermission": {
-      "properties": {
-        "role": {
-          "enum": [
-            "ROLE_UNSPECIFIED",
-            "COLLABORATOR",
-            "OWNER"
-          ],
-          "description": "The user's role in this matter.",
-          "type": "string",
-          "enumDescriptions": [
-            "No role assigned.",
-            "A collaborator to the matter.",
-            "The owner of the matter."
-          ]
-        },
-        "accountId": {
-          "description": "The account ID, as provided by Admin SDK.",
-          "type": "string"
-        }
-      },
-      "description": "Currently each matter only has one owner, and all others are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.",
-      "id": "MatterPermission",
-      "type": "object"
-    },
-    "CloseMatterRequest": {
-      "id": "CloseMatterRequest",
-      "description": "Close a matter by ID.",
-      "type": "object",
-      "properties": {}
-    },
-    "HeldOrgUnit": {
-      "properties": {
-        "orgUnitId": {
-          "description": "The org unit's immutable ID as provided by the Admin SDK.",
-          "type": "string"
-        },
-        "holdTime": {
-          "type": "string",
-          "format": "google-datetime",
-          "description": "When the org unit was put on hold. This property is immutable."
-        }
-      },
-      "type": "object",
-      "description": "A organizational unit being held in a particular hold. This structure is immutable.",
-      "id": "HeldOrgUnit"
-    },
-    "AccountInfo": {
-      "description": "Accounts to search",
-      "properties": {
-        "emails": {
-          "type": "array",
-          "description": "A set of accounts to search.",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "AccountInfo",
-      "type": "object"
-    },
-    "ExportOptions": {
-      "type": "object",
-      "properties": {
-        "mailOptions": {
-          "$ref": "MailExportOptions",
-          "description": "Option available for mail export."
-        },
-        "groupsOptions": {
-          "$ref": "GroupsExportOptions",
-          "description": "Option available for groups export."
-        },
-        "voiceOptions": {
-          "description": "Option available for voice export.",
-          "$ref": "VoiceExportOptions"
-        },
-        "hangoutsChatOptions": {
-          "$ref": "HangoutsChatExportOptions",
-          "description": "Option available for hangouts chat export."
-        },
-        "driveOptions": {
-          "description": "Option available for Drive export.",
-          "$ref": "DriveExportOptions"
-        },
-        "region": {
-          "description": "The requested export location.",
-          "enumDescriptions": [
-            "The region is unspecified. Will be treated the same as ANY.",
-            "Any region.",
-            "US region.",
-            "Europe region."
-          ],
-          "enum": [
-            "EXPORT_REGION_UNSPECIFIED",
-            "ANY",
-            "US",
-            "EUROPE"
-          ],
-          "type": "string"
-        }
-      },
-      "id": "ExportOptions",
-      "description": "Export advanced options"
-    },
-    "RemoveHeldAccountsRequest": {
-      "description": "Remove a list of accounts from a hold.",
-      "type": "object",
-      "id": "RemoveHeldAccountsRequest",
-      "properties": {
-        "accountIds": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "Account IDs to identify HeldAccounts to remove."
-        }
-      }
-    },
-    "MailExportOptions": {
-      "type": "object",
-      "description": "The options for mail export.",
-      "id": "MailExportOptions",
-      "properties": {
-        "showConfidentialModeContent": {
-          "type": "boolean",
-          "description": "Set to true to export confidential mode content."
-        },
-        "exportFormat": {
-          "enum": [
-            "EXPORT_FORMAT_UNSPECIFIED",
-            "MBOX",
-            "PST"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "No export format specified.",
-            "MBOX as export format.",
-            "PST as export format"
-          ],
-          "description": "The export file format."
-        }
-      }
-    },
-    "HeldAccount": {
-      "properties": {
-        "holdTime": {
-          "description": "Output only. When the account was put on hold.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "accountId": {
-          "description": "The account's ID as provided by the Admin SDK.",
-          "type": "string"
-        },
-        "firstName": {
-          "type": "string",
-          "description": "Output only. The first name of the account holder."
-        },
-        "lastName": {
-          "type": "string",
-          "description": "Output only. The last name of the account holder."
-        },
-        "email": {
-          "type": "string",
-          "description": "The primary email address of the account. If used as an input, this takes precedence over account ID."
-        }
-      },
-      "id": "HeldAccount",
-      "description": "An account being held in a particular hold. This structure is immutable. This can be either a single user or a google group, depending on the corpus.",
-      "type": "object"
-    },
-    "CloudStorageSink": {
-      "properties": {
-        "files": {
-          "description": "Output only. The exported files on cloud storage.",
-          "type": "array",
-          "items": {
-            "$ref": "CloudStorageFile"
-          }
-        }
-      },
-      "id": "CloudStorageSink",
-      "type": "object",
-      "description": "Export sink for cloud storage files."
-    },
-    "VoiceOptions": {
-      "description": "Voice search options",
-      "properties": {
-        "coveredData": {
-          "items": {
-            "enumDescriptions": [
-              "Covered data unspecified.",
-              "Voice text message will be covered.",
-              "Voicemail will be covered.",
-              "Call logs will be covered."
-            ],
-            "type": "string",
-            "enum": [
-              "COVERED_DATA_UNSPECIFIED",
-              "TEXT_MESSAGES",
-              "VOICEMAILS",
-              "CALL_LOGS"
-            ]
-          },
-          "type": "array",
-          "description": "Datatypes to search"
-        }
-      },
-      "id": "VoiceOptions",
-      "type": "object"
-    },
-    "MailCountResult": {
-      "type": "object",
-      "properties": {
-        "accountCountErrors": {
-          "description": "Error occurred when querying these accounts.",
-          "type": "array",
-          "items": {
-            "$ref": "AccountCountError"
-          }
-        },
-        "accountCounts": {
-          "description": "Subtotal count per matching account that have more than zero messages.",
-          "type": "array",
-          "items": {
-            "$ref": "AccountCount"
-          }
-        },
-        "nonQueryableAccounts": {
-          "description": "When data scope is HELD_DATA in the request Query, these accounts in the request are not queried because they are not on hold. For other data scope, this field is not set.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "matchingAccountsCount": {
-          "format": "int64",
-          "type": "string",
-          "description": "Total number of accounts that can be queried and have more than zero messages."
-        },
-        "queriedAccountsCount": {
-          "description": "Total number of accounts involved in this count operation.",
-          "type": "string",
-          "format": "int64"
-        }
-      },
-      "id": "MailCountResult",
-      "description": "Mail specific count metrics."
-    },
-    "ReopenMatterRequest": {
-      "id": "ReopenMatterRequest",
-      "description": "Reopen a matter by ID.",
-      "type": "object",
-      "properties": {}
-    },
-    "HangoutsChatInfo": {
-      "properties": {
-        "roomId": {
-          "items": {
-            "type": "string"
-          },
-          "description": "A set of rooms to search.",
-          "type": "array"
-        }
-      },
-      "type": "object",
-      "id": "HangoutsChatInfo",
-      "description": "Accounts to search"
-    },
-    "ListOperationsResponse": {
-      "id": "ListOperationsResponse",
-      "description": "The response message for Operations.ListOperations.",
-      "properties": {
-        "nextPageToken": {
-          "type": "string",
-          "description": "The standard List next-page token."
-        },
-        "operations": {
-          "type": "array",
-          "items": {
-            "$ref": "Operation"
-          },
-          "description": "A list of operations that matches the specified filter in the request."
-        }
-      },
-      "type": "object"
-    },
-    "CloudStorageFile": {
-      "type": "object",
-      "description": "An export file on cloud storage",
-      "properties": {
-        "size": {
-          "description": "The size of the export file.",
-          "format": "int64",
-          "type": "string"
-        },
-        "bucketName": {
-          "description": "The cloud storage bucket name of this export file. Can be used in cloud storage JSON/XML API, but not to list the bucket contents. Instead, you can get individual export files by object name.",
-          "type": "string"
-        },
-        "md5Hash": {
-          "description": "The md5 hash of the file.",
-          "type": "string"
-        },
-        "objectName": {
-          "type": "string",
-          "description": "The cloud storage object name of this export file. Can be used in cloud storage JSON/XML API."
-        }
-      },
-      "id": "CloudStorageFile"
-    },
-    "RemoveMatterPermissionsRequest": {
-      "type": "object",
-      "properties": {
-        "accountId": {
-          "type": "string",
-          "description": "The account ID."
-        }
-      },
-      "id": "RemoveMatterPermissionsRequest",
-      "description": "Remove an account as a matter collaborator."
-    },
-    "DriveOptions": {
-      "properties": {
-        "includeSharedDrives": {
-          "description": "Set to true to include shared drive.",
-          "type": "boolean"
-        },
-        "versionDate": {
-          "format": "google-datetime",
-          "description": "Search the versions of the Drive file as of the reference date. These timestamps are in GMT and rounded down to the given date.",
-          "type": "string"
-        },
-        "includeTeamDrives": {
-          "description": "Set to true to include Team Drive.",
-          "type": "boolean"
-        }
-      },
-      "type": "object",
-      "id": "DriveOptions",
-      "description": "Drive search advanced options"
-    },
-    "Status": {
-      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
-      "properties": {
-        "details": {
-          "type": "array",
-          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
-          "items": {
-            "type": "object",
-            "additionalProperties": {
-              "type": "any",
-              "description": "Properties of the object. Contains field @type with type URL."
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/ediscovery": {
+                    "description": "Manage your eDiscovery data"
+                },
+                "https://www.googleapis.com/auth/ediscovery.readonly": {
+                    "description": "View your eDiscovery data"
+                }
             }
-          }
-        },
-        "code": {
-          "format": "int32",
-          "type": "integer",
-          "description": "The status code, which should be an enum value of google.rpc.Code."
-        },
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
-          "type": "string"
         }
-      },
-      "id": "Status",
-      "type": "object"
     },
-    "Export": {
-      "type": "object",
-      "id": "Export",
-      "properties": {
-        "status": {
-          "type": "string",
-          "enumDescriptions": [
-            "The status is unspecified.",
-            "The export completed.",
-            "The export failed.",
-            "The export is still being executed."
-          ],
-          "description": "Output only. The export status.",
-          "enum": [
-            "EXPORT_STATUS_UNSPECIFIED",
-            "COMPLETED",
-            "FAILED",
-            "IN_PROGRESS"
-          ]
-        },
-        "createTime": {
-          "type": "string",
-          "description": "Output only. The time when the export was created.",
-          "format": "google-datetime"
-        },
-        "stats": {
-          "description": "Output only. Export statistics.",
-          "$ref": "ExportStats"
-        },
-        "id": {
-          "description": "Output only. The generated export ID.",
-          "type": "string"
-        },
-        "query": {
-          "$ref": "Query",
-          "description": "The search query being exported."
-        },
-        "exportOptions": {
-          "$ref": "ExportOptions",
-          "description": "Advanced options of the export."
-        },
-        "requester": {
-          "$ref": "UserInfo",
-          "description": "Output only. The requester of the export."
-        },
-        "name": {
-          "description": "The export name.",
-          "type": "string"
-        },
-        "matterId": {
-          "description": "Output only. The matter ID.",
-          "type": "string"
-        },
-        "cloudStorageSink": {
-          "$ref": "CloudStorageSink",
-          "description": "Output only. Export sink for cloud storage files."
-        }
-      },
-      "description": "An export"
+    "basePath": "",
+    "baseUrl": "https://vault.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Vault",
+    "description": "Archiving and eDiscovery for G Suite.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://developers.google.com/vault",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
     },
-    "DriveExportOptions": {
-      "id": "DriveExportOptions",
-      "type": "object",
-      "description": "The options for Drive export.",
-      "properties": {
-        "includeAccessInfo": {
-          "description": "Set to true to include access level information for users with indirect access to files.",
-          "type": "boolean"
-        }
-      }
-    },
-    "ListHeldAccountsResponse": {
-      "properties": {
-        "accounts": {
-          "description": "The held accounts on a hold.",
-          "type": "array",
-          "items": {
-            "$ref": "HeldAccount"
-          }
-        }
-      },
-      "id": "ListHeldAccountsResponse",
-      "type": "object",
-      "description": "Returns a list of held accounts for a hold."
-    },
-    "Matter": {
-      "properties": {
-        "matterId": {
-          "type": "string",
-          "description": "The matter ID which is generated by the server. Should be blank when creating a new matter."
-        },
-        "matterPermissions": {
-          "items": {
-            "$ref": "MatterPermission"
-          },
-          "type": "array",
-          "description": "List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have."
-        },
-        "description": {
-          "type": "string",
-          "description": "The description of the matter."
-        },
-        "name": {
-          "description": "The name of the matter.",
-          "type": "string"
-        },
-        "state": {
-          "type": "string",
-          "enum": [
-            "STATE_UNSPECIFIED",
-            "OPEN",
-            "CLOSED",
-            "DELETED"
-          ],
-          "description": "The state of the matter.",
-          "enumDescriptions": [
-            "The matter has no specified state.",
-            "This matter is open.",
-            "This matter is closed.",
-            "This matter is deleted."
-          ]
-        }
-      },
-      "id": "Matter",
-      "description": "Represents a matter.",
-      "type": "object"
-    },
-    "HangoutsChatExportOptions": {
-      "description": "The options for hangouts chat export.",
-      "type": "object",
-      "properties": {
-        "exportFormat": {
-          "description": "The export format for hangouts chat export.",
-          "enum": [
-            "EXPORT_FORMAT_UNSPECIFIED",
-            "MBOX",
-            "PST"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "No export format specified.",
-            "MBOX as export format.",
-            "PST as export format"
-          ]
-        }
-      },
-      "id": "HangoutsChatExportOptions"
-    },
-    "ExportStats": {
-      "type": "object",
-      "id": "ExportStats",
-      "description": "Stats of an export.",
-      "properties": {
-        "totalArtifactCount": {
-          "type": "string",
-          "format": "int64",
-          "description": "The number of documents to be exported."
-        },
-        "exportedArtifactCount": {
-          "format": "int64",
-          "type": "string",
-          "description": "The number of documents already processed by the export."
-        },
-        "sizeInBytes": {
-          "description": "The size of export in bytes.",
-          "type": "string",
-          "format": "int64"
-        }
-      }
-    },
-    "UserInfo": {
-      "properties": {
-        "displayName": {
-          "type": "string",
-          "description": "The displayed name of the user."
-        },
-        "email": {
-          "type": "string",
-          "description": "The email address of the user."
-        }
-      },
-      "description": "User's information.",
-      "type": "object",
-      "id": "UserInfo"
-    },
-    "HeldVoiceQuery": {
-      "type": "object",
-      "id": "HeldVoiceQuery",
-      "properties": {
-        "coveredData": {
-          "description": "Data covered by this rule. Should be non-empty. Order does not matter and duplicates will be ignored.",
-          "type": "array",
-          "items": {
-            "enumDescriptions": [
-              "Covered data unspecified.",
-              "Voice text message will be covered.",
-              "Voicemail will be covered.",
-              "Call logs will be covered."
-            ],
-            "type": "string",
+    "id": "vault:v1",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://vault.mtls.googleapis.com/",
+    "name": "vault",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
             "enum": [
-              "COVERED_DATA_UNSPECIFIED",
-              "TEXT_MESSAGES",
-              "VOICEMAILS",
-              "CALL_LOGS"
-            ]
-          }
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
+            "type": "string"
+        },
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
+            "type": "string"
+        },
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
+        },
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      },
-      "description": "Query options for Voice holds."
     },
-    "SavedQuery": {
-      "description": "Definition of the saved query.",
-      "type": "object",
-      "properties": {
-        "createTime": {
-          "type": "string",
-          "description": "Output only. The server generated timestamp at which saved query was created.",
-          "format": "google-datetime"
-        },
-        "matterId": {
-          "description": "Output only. The matter ID of the associated matter. The server does not look at this field during create and always uses matter id in the URL.",
-          "type": "string"
-        },
-        "displayName": {
-          "description": "Name of the saved query.",
-          "type": "string"
-        },
-        "savedQueryId": {
-          "description": "A unique identifier for the saved query.",
-          "type": "string"
-        },
-        "query": {
-          "$ref": "Query",
-          "description": "The underlying Query object which contains all the information of the saved query."
-        }
-      },
-      "id": "SavedQuery"
-    },
-    "HangoutsChatOptions": {
-      "description": "Hangouts chat search advanced options",
-      "properties": {
-        "includeRooms": {
-          "type": "boolean",
-          "description": "Set to true to include rooms."
-        }
-      },
-      "type": "object",
-      "id": "HangoutsChatOptions"
-    },
-    "AddMatterPermissionsRequest": {
-      "description": "Add an account with the permission specified. The role cannot be owner. If an account already has a role in the matter, it will be overwritten.",
-      "id": "AddMatterPermissionsRequest",
-      "properties": {
-        "sendEmails": {
-          "description": "True to send notification email to the added account. False to not send notification email.",
-          "type": "boolean"
-        },
-        "ccMe": {
-          "type": "boolean",
-          "description": "Only relevant if send_emails is true. True to CC requestor in the email message. False to not CC requestor."
-        },
-        "matterPermission": {
-          "$ref": "MatterPermission",
-          "description": "The MatterPermission to add."
-        }
-      },
-      "type": "object"
-    },
-    "GroupsExportOptions": {
-      "properties": {
-        "exportFormat": {
-          "enum": [
-            "EXPORT_FORMAT_UNSPECIFIED",
-            "MBOX",
-            "PST"
-          ],
-          "enumDescriptions": [
-            "No export format specified.",
-            "MBOX as export format.",
-            "PST as export format"
-          ],
-          "description": "The export format for groups export.",
-          "type": "string"
-        }
-      },
-      "description": "The options for groups export.",
-      "type": "object",
-      "id": "GroupsExportOptions"
-    },
-    "ListMattersResponse": {
-      "properties": {
+    "protocol": "rest",
+    "resources": {
         "matters": {
-          "type": "array",
-          "description": "List of matters.",
-          "items": {
-            "$ref": "Matter"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "Page token to retrieve the next page of results in the list."
-        }
-      },
-      "id": "ListMattersResponse",
-      "type": "object",
-      "description": "Provides the list of matters."
-    },
-    "CountArtifactsResponse": {
-      "properties": {
-        "groupsCountResult": {
-          "description": "Count metrics of Groups.",
-          "$ref": "GroupsCountResult"
-        },
-        "mailCountResult": {
-          "description": "Count metrics of Mail.",
-          "$ref": "MailCountResult"
-        },
-        "totalCount": {
-          "format": "int64",
-          "description": "Total count of artifacts. For mail and groups, artifacts refers to messages.",
-          "type": "string"
-        }
-      },
-      "description": "Definition of the response for method CountArtifacts.",
-      "type": "object",
-      "id": "CountArtifactsResponse"
-    },
-    "CancelOperationRequest": {
-      "properties": {},
-      "type": "object",
-      "id": "CancelOperationRequest",
-      "description": "The request message for Operations.CancelOperation."
-    },
-    "HeldMailQuery": {
-      "properties": {
-        "terms": {
-          "description": "The search terms for the hold.",
-          "type": "string"
-        },
-        "startTime": {
-          "description": "The start time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.",
-          "type": "string",
-          "format": "google-datetime"
-        },
-        "endTime": {
-          "description": "The end time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      },
-      "type": "object",
-      "description": "Query options for mail holds.",
-      "id": "HeldMailQuery"
-    },
-    "OrgUnitInfo": {
-      "id": "OrgUnitInfo",
-      "description": "Org Unit to search",
-      "properties": {
-        "orgUnitId": {
-          "type": "string",
-          "description": "Org unit to search, as provided by the Admin SDK Directory API."
-        }
-      },
-      "type": "object"
-    },
-    "RemoveHeldAccountsResponse": {
-      "type": "object",
-      "properties": {
-        "statuses": {
-          "description": "A list of statuses for deleted accounts. Results have the same order as the request.",
-          "items": {
-            "$ref": "Status"
-          },
-          "type": "array"
-        }
-      },
-      "description": "Response for batch delete held accounts.",
-      "id": "RemoveHeldAccountsResponse"
-    },
-    "ListHoldsResponse": {
-      "id": "ListHoldsResponse",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "description": "Page token to retrieve the next page of results in the list. If this is empty, then there are no more holds to list.",
-          "type": "string"
-        },
-        "holds": {
-          "items": {
-            "$ref": "Hold"
-          },
-          "type": "array",
-          "description": "The list of holds."
-        }
-      },
-      "description": "The holds for a matter."
-    },
-    "CloseMatterResponse": {
-      "properties": {
-        "matter": {
-          "description": "The updated matter, with state CLOSED.",
-          "$ref": "Matter"
-        }
-      },
-      "description": "Response to a CloseMatterRequest.",
-      "id": "CloseMatterResponse",
-      "type": "object"
-    },
-    "AddHeldAccountsResponse": {
-      "type": "object",
-      "description": "Response for batch create held accounts.",
-      "id": "AddHeldAccountsResponse",
-      "properties": {
-        "responses": {
-          "items": {
-            "$ref": "AddHeldAccountResult"
-          },
-          "type": "array",
-          "description": "The list of responses, in the same order as the batch request."
-        }
-      }
-    },
-    "Query": {
-      "description": "A query definition relevant for search & export.",
-      "type": "object",
-      "id": "Query",
-      "properties": {
-        "driveOptions": {
-          "$ref": "DriveOptions",
-          "description": "For Drive search, specify more options in this field."
-        },
-        "voiceOptions": {
-          "description": "For voice search, specify more options in this field.",
-          "$ref": "VoiceOptions"
-        },
-        "sharedDriveInfo": {
-          "$ref": "SharedDriveInfo",
-          "description": "When 'SHARED_DRIVE' is chosen as search method, shared_drive_info needs to be specified."
-        },
-        "dataScope": {
-          "type": "string",
-          "description": "The data source to search from.",
-          "enumDescriptions": [
-            "No data scope specified.",
-            "All available data.",
-            "Data on hold.",
-            "Data not processed."
-          ],
-          "enum": [
-            "DATA_SCOPE_UNSPECIFIED",
-            "ALL_DATA",
-            "HELD_DATA",
-            "UNPROCESSED_DATA"
-          ]
-        },
-        "timeZone": {
-          "description": "The time zone name. It should be an IANA TZ name, such as \"America/Los_Angeles\". For more information, see Time Zone.",
-          "type": "string"
-        },
-        "accountInfo": {
-          "$ref": "AccountInfo",
-          "description": "When 'ACCOUNT' is chosen as search method, account_info needs to be specified."
-        },
-        "mailOptions": {
-          "description": "For mail search, specify more options in this field.",
-          "$ref": "MailOptions"
-        },
-        "endTime": {
-          "description": "The end time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "method": {
-          "description": "The search method to use. This field is similar to the search_method field but is introduced to support shared drives. It supports all search method types. In case the search_method is TEAM_DRIVE the response of this field will be SHARED_DRIVE only.",
-          "enum": [
-            "SEARCH_METHOD_UNSPECIFIED",
-            "ACCOUNT",
-            "ORG_UNIT",
-            "TEAM_DRIVE",
-            "ENTIRE_ORG",
-            "ROOM",
-            "SHARED_DRIVE"
-          ],
-          "type": "string",
-          "enumDescriptions": [
-            "A search method must be specified. If a request does not specify a search method, it will be rejected.",
-            "Will search all accounts provided in account_info.",
-            "Will search all accounts in the OU specified in org_unit_info.",
-            "Will search for all accounts in the Team Drive specified in team_drive_info.",
-            "Will search for all accounts in the organization. No need to set account_info or org_unit_info.",
-            "Will search in the Room specified in hangout_chats_info. (read-only)",
-            "Will search for all accounts in the shared drive specified in shared_drive_info."
-          ]
-        },
-        "startTime": {
-          "format": "google-datetime",
-          "description": "The start time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.",
-          "type": "string"
-        },
-        "hangoutsChatOptions": {
-          "$ref": "HangoutsChatOptions",
-          "description": "For hangouts chat search, specify more options in this field. (read-only)"
-        },
-        "orgUnitInfo": {
-          "$ref": "OrgUnitInfo",
-          "description": "When 'ORG_UNIT' is chosen as as search method, org_unit_info needs to be specified."
-        },
-        "corpus": {
-          "enumDescriptions": [
-            "No corpus specified.",
-            "Drive.",
-            "Mail.",
-            "Groups.",
-            "Hangouts Chat.",
-            "Google Voice."
-          ],
-          "enum": [
-            "CORPUS_TYPE_UNSPECIFIED",
-            "DRIVE",
-            "MAIL",
-            "GROUPS",
-            "HANGOUTS_CHAT",
-            "VOICE"
-          ],
-          "description": "The corpus to search.",
-          "type": "string"
-        },
-        "teamDriveInfo": {
-          "description": "When 'TEAM_DRIVE' is chosen as search method, team_drive_info needs to be specified.",
-          "$ref": "TeamDriveInfo"
-        },
-        "hangoutsChatInfo": {
-          "$ref": "HangoutsChatInfo",
-          "description": "When 'ROOM' is chosen as search method, hangout_chats_info needs to be specified. (read-only)"
-        },
-        "terms": {
-          "description": "The corpus-specific search operators used to generate search results.",
-          "type": "string"
-        },
-        "searchMethod": {
-          "enumDescriptions": [
-            "A search method must be specified. If a request does not specify a search method, it will be rejected.",
-            "Will search all accounts provided in account_info.",
-            "Will search all accounts in the OU specified in org_unit_info.",
-            "Will search for all accounts in the Team Drive specified in team_drive_info.",
-            "Will search for all accounts in the organization. No need to set account_info or org_unit_info.",
-            "Will search in the Room specified in hangout_chats_info. (read-only)",
-            "Will search for all accounts in the shared drive specified in shared_drive_info."
-          ],
-          "type": "string",
-          "enum": [
-            "SEARCH_METHOD_UNSPECIFIED",
-            "ACCOUNT",
-            "ORG_UNIT",
-            "TEAM_DRIVE",
-            "ENTIRE_ORG",
-            "ROOM",
-            "SHARED_DRIVE"
-          ],
-          "description": "The search method to use."
-        }
-      }
-    },
-    "CountArtifactsMetadata": {
-      "description": "Long running operation metadata for CountArtifacts.",
-      "id": "CountArtifactsMetadata",
-      "properties": {
-        "query": {
-          "$ref": "Query",
-          "description": "The search query from the request."
-        },
-        "matterId": {
-          "description": "The matter ID of the associated matter.",
-          "type": "string"
-        },
-        "endTime": {
-          "type": "string",
-          "description": "End time of count operation. Available when operation is done.",
-          "format": "google-datetime"
-        },
-        "startTime": {
-          "format": "google-datetime",
-          "description": "Creation time of count operation.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "HeldHangoutsChatQuery": {
-      "description": "Query options for hangouts chat holds.",
-      "id": "HeldHangoutsChatQuery",
-      "properties": {
-        "includeRooms": {
-          "type": "boolean",
-          "description": "If true, include rooms the user has participated in."
-        }
-      },
-      "type": "object"
-    },
-    "HeldGroupsQuery": {
-      "id": "HeldGroupsQuery",
-      "description": "Query options for group holds.",
-      "type": "object",
-      "properties": {
-        "endTime": {
-          "description": "The end time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "terms": {
-          "description": "The search terms for the hold.",
-          "type": "string"
-        },
-        "startTime": {
-          "format": "google-datetime",
-          "type": "string",
-          "description": "The start time range for the search query. These timestamps are in GMT and rounded down to the start of the given date."
-        }
-      }
-    },
-    "Hold": {
-      "description": "Represents a hold within Vault. A hold restricts purging of artifacts based on the combination of the query and accounts restrictions. A hold can be configured to either apply to an explicitly configured set of accounts, or can be applied to all members of an organizational unit.",
-      "id": "Hold",
-      "type": "object",
-      "properties": {
-        "updateTime": {
-          "format": "google-datetime",
-          "type": "string",
-          "description": "The last time this hold was modified."
-        },
-        "name": {
-          "description": "The name of the hold.",
-          "type": "string"
-        },
-        "orgUnit": {
-          "description": "If set, the hold applies to all members of the organizational unit and accounts must be empty. This property is mutable. For groups holds, set the accounts field.",
-          "$ref": "HeldOrgUnit"
-        },
-        "query": {
-          "description": "The corpus-specific query. If set, the corpusQuery must match corpus type.",
-          "$ref": "CorpusQuery"
-        },
-        "accounts": {
-          "description": "If set, the hold applies to the enumerated accounts and org_unit must be empty.",
-          "type": "array",
-          "items": {
-            "$ref": "HeldAccount"
-          }
-        },
-        "holdId": {
-          "type": "string",
-          "description": "The unique immutable ID of the hold. Assigned during creation."
-        },
-        "corpus": {
-          "enumDescriptions": [
-            "No corpus specified.",
-            "Drive.",
-            "Mail.",
-            "Groups.",
-            "Hangouts Chat.",
-            "Google Voice."
-          ],
-          "enum": [
-            "CORPUS_TYPE_UNSPECIFIED",
-            "DRIVE",
-            "MAIL",
-            "GROUPS",
-            "HANGOUTS_CHAT",
-            "VOICE"
-          ],
-          "description": "The corpus to be searched.",
-          "type": "string"
-        }
-      }
-    },
-    "Operation": {
-      "properties": {
-        "metadata": {
-          "type": "object",
-          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          }
-        },
-        "response": {
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "type": "object",
-          "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`."
-        },
-        "error": {
-          "$ref": "Status",
-          "description": "The error result of the operation in case of failure or cancellation."
-        },
-        "name": {
-          "type": "string",
-          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`."
-        },
-        "done": {
-          "type": "boolean",
-          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available."
-        }
-      },
-      "type": "object",
-      "description": "This resource represents a long-running operation that is the result of a network API call.",
-      "id": "Operation"
-    },
-    "HeldDriveQuery": {
-      "description": "Query options for Drive holds.",
-      "type": "object",
-      "properties": {
-        "includeSharedDriveFiles": {
-          "type": "boolean",
-          "description": "If true, include files in shared drives in the hold."
-        },
-        "includeTeamDriveFiles": {
-          "description": "If true, include files in Team Drives in the hold.",
-          "type": "boolean"
-        }
-      },
-      "id": "HeldDriveQuery"
-    },
-    "CountArtifactsRequest": {
-      "description": "Count artifacts request.",
-      "properties": {
-        "query": {
-          "$ref": "Query",
-          "description": "The search query."
-        },
-        "view": {
-          "type": "string",
-          "description": "Specifies the granularity of the count result returned in response.",
-          "enum": [
-            "COUNT_RESULT_VIEW_UNSPECIFIED",
-            "TOTAL_COUNT",
-            "ALL"
-          ],
-          "enumDescriptions": [
-            "Default. It works the same as TOTAL_COUNT.",
-            "Response includes: total count, queried accounts count, matching accounts count, non-queryable accounts, queried account errors.",
-            "Response includes additional breakdown of account count."
-          ]
-        }
-      },
-      "id": "CountArtifactsRequest",
-      "type": "object"
-    },
-    "UndeleteMatterRequest": {
-      "properties": {},
-      "type": "object",
-      "description": "Undelete a matter by ID.",
-      "id": "UndeleteMatterRequest"
-    },
-    "TeamDriveInfo": {
-      "id": "TeamDriveInfo",
-      "description": "Team Drives to search",
-      "type": "object",
-      "properties": {
-        "teamDriveIds": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "List of Team Drive IDs, as provided by Drive API."
-        }
-      }
-    },
-    "AddHeldAccountResult": {
-      "id": "AddHeldAccountResult",
-      "description": "A status detailing the status of each account creation, and the HeldAccount, if successful.",
-      "properties": {
-        "status": {
-          "description": "This represents the success status. If failed, check message.",
-          "$ref": "Status"
-        },
-        "account": {
-          "description": "If present, this account was successfully created.",
-          "$ref": "HeldAccount"
-        }
-      },
-      "type": "object"
-    },
-    "GroupsCountResult": {
-      "description": "Groups specific count metrics.",
-      "id": "GroupsCountResult",
-      "properties": {
-        "nonQueryableAccounts": {
-          "description": "When data scope is HELD_DATA in the request Query, these accounts in the request are not queried because they are not on hold. For other data scope, this field is not set.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "accountCounts": {
-          "description": "Subtotal count per matching account that have more than zero messages.",
-          "items": {
-            "$ref": "AccountCount"
-          },
-          "type": "array"
-        },
-        "matchingAccountsCount": {
-          "format": "int64",
-          "description": "Total number of accounts that can be queried and have more than zero messages.",
-          "type": "string"
-        },
-        "accountCountErrors": {
-          "description": "Error occurred when querying these accounts.",
-          "items": {
-            "$ref": "AccountCountError"
-          },
-          "type": "array"
-        },
-        "queriedAccountsCount": {
-          "type": "string",
-          "format": "int64",
-          "description": "Total number of accounts involved in this count operation."
-        }
-      },
-      "type": "object"
-    },
-    "CorpusQuery": {
-      "description": "Corpus specific queries.",
-      "id": "CorpusQuery",
-      "type": "object",
-      "properties": {
-        "driveQuery": {
-          "description": "Details pertaining to Drive holds. If set, corpus must be Drive.",
-          "$ref": "HeldDriveQuery"
-        },
-        "hangoutsChatQuery": {
-          "$ref": "HeldHangoutsChatQuery",
-          "description": "Details pertaining to Hangouts Chat holds. If set, corpus must be Hangouts Chat."
-        },
-        "groupsQuery": {
-          "description": "Details pertaining to Groups holds. If set, corpus must be Groups.",
-          "$ref": "HeldGroupsQuery"
-        },
-        "voiceQuery": {
-          "$ref": "HeldVoiceQuery",
-          "description": "Details pertaining to Voice holds. If set, corpus must be Voice."
-        },
-        "mailQuery": {
-          "$ref": "HeldMailQuery",
-          "description": "Details pertaining to mail holds. If set, corpus must be mail."
-        }
-      }
-    },
-    "VoiceExportOptions": {
-      "description": "The options for voice export.",
-      "type": "object",
-      "id": "VoiceExportOptions",
-      "properties": {
-        "exportFormat": {
-          "enumDescriptions": [
-            "No export format specified.",
-            "MBOX as export format.",
-            "PST as export format"
-          ],
-          "description": "The export format for voice export.",
-          "type": "string",
-          "enum": [
-            "EXPORT_FORMAT_UNSPECIFIED",
-            "MBOX",
-            "PST"
-          ]
-        }
-      }
-    },
-    "SharedDriveInfo": {
-      "description": "Shared drives to search",
-      "type": "object",
-      "properties": {
-        "sharedDriveIds": {
-          "items": {
-            "type": "string"
-          },
-          "type": "array",
-          "description": "List of Shared drive IDs, as provided by Drive API."
-        }
-      },
-      "id": "SharedDriveInfo"
-    },
-    "AddHeldAccountsRequest": {
-      "properties": {
-        "emails": {
-          "description": "Emails to identify which accounts to add. Only emails or only account_ids should be specified, but not both.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "accountIds": {
-          "description": "Account IDs to identify which accounts to add. Only account_ids or only emails should be specified, but not both.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "type": "object",
-      "description": "Add a list of accounts to a hold.",
-      "id": "AddHeldAccountsRequest"
-    },
-    "ReopenMatterResponse": {
-      "properties": {
-        "matter": {
-          "description": "The updated matter, with state OPEN.",
-          "$ref": "Matter"
-        }
-      },
-      "type": "object",
-      "id": "ReopenMatterResponse",
-      "description": "Response to a ReopenMatterRequest."
-    },
-    "MailOptions": {
-      "description": "Mail search advanced options",
-      "properties": {
-        "excludeDrafts": {
-          "description": "Set to true to exclude drafts.",
-          "type": "boolean"
-        }
-      },
-      "id": "MailOptions",
-      "type": "object"
-    },
-    "AccountCount": {
-      "properties": {
-        "account": {
-          "$ref": "UserInfo",
-          "description": "Account owner."
-        },
-        "count": {
-          "description": "The number of artifacts found for this account.",
-          "type": "string",
-          "format": "int64"
-        }
-      },
-      "type": "object",
-      "description": "Count number for each account.",
-      "id": "AccountCount"
-    },
-    "AccountCountError": {
-      "description": "An error that occurred when querying a specific account",
-      "properties": {
-        "account": {
-          "$ref": "UserInfo",
-          "description": "Account owner."
-        },
-        "errorType": {
-          "enumDescriptions": [
-            "Default.",
-            "Permanent - prefix terms expanded to too many query terms.",
-            "Permanent - query contains too many terms.",
-            "Transient - data in transit between storage replicas, temporarily unavailable.",
-            "Unrecognized error.",
-            "Deadline exceeded when querying the account."
-          ],
-          "type": "string",
-          "description": "Account query error.",
-          "enum": [
-            "ERROR_TYPE_UNSPECIFIED",
-            "WILDCARD_TOO_BROAD",
-            "TOO_MANY_TERMS",
-            "LOCATION_UNAVAILABLE",
-            "UNKNOWN",
-            "DEADLINE_EXCEEDED"
-          ]
-        }
-      },
-      "type": "object",
-      "id": "AccountCountError"
-    }
-  },
-  "mtlsRootUrl": "https://vault.mtls.googleapis.com/",
-  "resources": {
-    "operations": {
-      "methods": {
-        "delete": {
-          "response": {
-            "$ref": "Empty"
-          },
-          "id": "vault.operations.delete",
-          "parameters": {
-            "name": {
-              "description": "The name of the operation resource to be deleted.",
-              "location": "path",
-              "pattern": "^operations/.*$",
-              "type": "string",
-              "required": true
-            }
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "httpMethod": "DELETE",
-          "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.",
-          "path": "v1/{+name}",
-          "flatPath": "v1/operations/{operationsId}"
-        },
-        "get": {
-          "httpMethod": "GET",
-          "flatPath": "v1/operations/{operationsId}",
-          "parameters": {
-            "name": {
-              "pattern": "^operations/.*$",
-              "description": "The name of the operation resource.",
-              "required": true,
-              "location": "path",
-              "type": "string"
-            }
-          },
-          "path": "v1/{+name}",
-          "response": {
-            "$ref": "Operation"
-          },
-          "id": "vault.operations.get",
-          "scopes": [
-            "https://www.googleapis.com/auth/ediscovery",
-            "https://www.googleapis.com/auth/ediscovery.readonly"
-          ],
-          "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
-          "parameterOrder": [
-            "name"
-          ]
-        },
-        "list": {
-          "path": "v1/{+name}",
-          "flatPath": "v1/operations",
-          "id": "vault.operations.list",
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "ListOperationsResponse"
-          },
-          "parameters": {
-            "pageToken": {
-              "location": "query",
-              "description": "The standard list page token.",
-              "type": "string"
-            },
-            "pageSize": {
-              "location": "query",
-              "description": "The standard list page size.",
-              "format": "int32",
-              "type": "integer"
-            },
-            "filter": {
-              "type": "string",
-              "description": "The standard list filter.",
-              "location": "query"
-            },
-            "name": {
-              "required": true,
-              "type": "string",
-              "description": "The name of the operation's parent resource.",
-              "location": "path",
-              "pattern": "^operations$"
-            }
-          },
-          "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
-          "parameterOrder": [
-            "name"
-          ]
-        },
-        "cancel": {
-          "response": {
-            "$ref": "Empty"
-          },
-          "path": "v1/{+name}:cancel",
-          "id": "vault.operations.cancel",
-          "httpMethod": "POST",
-          "flatPath": "v1/operations/{operationsId}:cancel",
-          "request": {
-            "$ref": "CancelOperationRequest"
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.",
-          "parameters": {
-            "name": {
-              "pattern": "^operations/.*$",
-              "required": true,
-              "location": "path",
-              "description": "The name of the operation resource to be cancelled.",
-              "type": "string"
-            }
-          }
-        }
-      }
-    },
-    "matters": {
-      "resources": {
-        "savedQueries": {
-          "methods": {
-            "delete": {
-              "httpMethod": "DELETE",
-              "path": "v1/matters/{matterId}/savedQueries/{savedQueryId}",
-              "description": "Deletes a saved query by Id.",
-              "scopes": [
-                "https://www.googleapis.com/auth/ediscovery"
-              ],
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameters": {
-                "matterId": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "description": "The matter ID of the parent matter for which the saved query is to be deleted."
-                },
-                "savedQueryId": {
-                  "required": true,
-                  "location": "path",
-                  "description": "ID of the saved query to be deleted.",
-                  "type": "string"
-                }
-              },
-              "parameterOrder": [
-                "matterId",
-                "savedQueryId"
-              ],
-              "id": "vault.matters.savedQueries.delete",
-              "flatPath": "v1/matters/{matterId}/savedQueries/{savedQueryId}"
-            },
-            "create": {
-              "parameters": {
-                "matterId": {
-                  "location": "path",
-                  "description": "The matter ID of the parent matter for which the saved query is to be created.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "response": {
-                "$ref": "SavedQuery"
-              },
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/ediscovery"
-              ],
-              "id": "vault.matters.savedQueries.create",
-              "flatPath": "v1/matters/{matterId}/savedQueries",
-              "path": "v1/matters/{matterId}/savedQueries",
-              "parameterOrder": [
-                "matterId"
-              ],
-              "request": {
-                "$ref": "SavedQuery"
-              },
-              "description": "Creates a saved query."
-            },
-            "list": {
-              "flatPath": "v1/matters/{matterId}/savedQueries",
-              "httpMethod": "GET",
-              "description": "Lists saved queries within a matter. An empty page token in ListSavedQueriesResponse denotes no more saved queries to list.",
-              "parameterOrder": [
-                "matterId"
-              ],
-              "id": "vault.matters.savedQueries.list",
-              "response": {
-                "$ref": "ListSavedQueriesResponse"
-              },
-              "path": "v1/matters/{matterId}/savedQueries",
-              "parameters": {
-                "pageToken": {
-                  "location": "query",
-                  "description": "The pagination token as returned in the previous response. An empty token means start from the beginning.",
-                  "type": "string"
-                },
-                "matterId": {
-                  "required": true,
-                  "description": "The matter ID of the parent matter for which the saved queries are to be retrieved.",
-                  "location": "path",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "location": "query",
-                  "description": "The maximum number of saved queries to return.",
-                  "type": "integer",
-                  "format": "int32"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/ediscovery",
-                "https://www.googleapis.com/auth/ediscovery.readonly"
-              ]
-            },
-            "get": {
-              "id": "vault.matters.savedQueries.get",
-              "parameterOrder": [
-                "matterId",
-                "savedQueryId"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/ediscovery",
-                "https://www.googleapis.com/auth/ediscovery.readonly"
-              ],
-              "description": "Retrieves a saved query by Id.",
-              "parameters": {
-                "savedQueryId": {
-                  "required": true,
-                  "location": "path",
-                  "type": "string",
-                  "description": "ID of the saved query to be retrieved."
-                },
-                "matterId": {
-                  "required": true,
-                  "description": "The matter ID of the parent matter for which the saved query is to be retrieved.",
-                  "location": "path",
-                  "type": "string"
-                }
-              },
-              "path": "v1/matters/{matterId}/savedQueries/{savedQueryId}",
-              "response": {
-                "$ref": "SavedQuery"
-              },
-              "flatPath": "v1/matters/{matterId}/savedQueries/{savedQueryId}",
-              "httpMethod": "GET"
-            }
-          }
-        },
-        "holds": {
-          "resources": {
-            "accounts": {
-              "methods": {
-                "delete": {
-                  "httpMethod": "DELETE",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/ediscovery"
-                  ],
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "parameterOrder": [
-                    "matterId",
-                    "holdId",
-                    "accountId"
-                  ],
-                  "description": "Removes a HeldAccount from a hold. If this request leaves the hold with no held accounts, the hold will not apply to any accounts.",
-                  "flatPath": "v1/matters/{matterId}/holds/{holdId}/accounts/{accountId}",
-                  "path": "v1/matters/{matterId}/holds/{holdId}/accounts/{accountId}",
-                  "parameters": {
-                    "holdId": {
-                      "required": true,
-                      "location": "path",
-                      "description": "The hold ID.",
-                      "type": "string"
+            "methods": {
+                "addPermissions": {
+                    "description": "Adds an account as a matter collaborator.",
+                    "flatPath": "v1/matters/{matterId}:addPermissions",
+                    "httpMethod": "POST",
+                    "id": "vault.matters.addPermissions",
+                    "parameterOrder": [
+                        "matterId"
+                    ],
+                    "parameters": {
+                        "matterId": {
+                            "description": "The matter ID.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
                     },
-                    "accountId": {
-                      "type": "string",
-                      "required": true,
-                      "location": "path",
-                      "description": "The ID of the account to remove from the hold."
+                    "path": "v1/matters/{matterId}:addPermissions",
+                    "request": {
+                        "$ref": "AddMatterPermissionsRequest"
                     },
-                    "matterId": {
-                      "description": "The matter ID.",
-                      "required": true,
-                      "location": "path",
-                      "type": "string"
-                    }
-                  },
-                  "id": "vault.matters.holds.accounts.delete"
+                    "response": {
+                        "$ref": "MatterPermission"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ediscovery"
+                    ]
+                },
+                "close": {
+                    "description": "Closes the specified matter. Returns matter with updated state.",
+                    "flatPath": "v1/matters/{matterId}:close",
+                    "httpMethod": "POST",
+                    "id": "vault.matters.close",
+                    "parameterOrder": [
+                        "matterId"
+                    ],
+                    "parameters": {
+                        "matterId": {
+                            "description": "The matter ID.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/matters/{matterId}:close",
+                    "request": {
+                        "$ref": "CloseMatterRequest"
+                    },
+                    "response": {
+                        "$ref": "CloseMatterResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ediscovery"
+                    ]
+                },
+                "count": {
+                    "description": "Counts the artifacts within the context of a matter and returns a detailed breakdown of metrics.",
+                    "flatPath": "v1/matters/{matterId}:count",
+                    "httpMethod": "POST",
+                    "id": "vault.matters.count",
+                    "parameterOrder": [
+                        "matterId"
+                    ],
+                    "parameters": {
+                        "matterId": {
+                            "description": "The matter ID.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/matters/{matterId}:count",
+                    "request": {
+                        "$ref": "CountArtifactsRequest"
+                    },
+                    "response": {
+                        "$ref": "Operation"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ediscovery"
+                    ]
                 },
                 "create": {
-                  "response": {
-                    "$ref": "HeldAccount"
-                  },
-                  "request": {
-                    "$ref": "HeldAccount"
-                  },
-                  "parameterOrder": [
-                    "matterId",
-                    "holdId"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/ediscovery"
-                  ],
-                  "description": "Adds a HeldAccount to a hold. Accounts can only be added to a hold that has no held_org_unit set. Attempting to add an account to an OU-based hold will result in an error.",
-                  "parameters": {
-                    "holdId": {
-                      "type": "string",
-                      "required": true,
-                      "description": "The hold ID.",
-                      "location": "path"
+                    "description": "Creates a new matter with the given name and description. The initial state is open, and the owner is the method caller. Returns the created matter with default view.",
+                    "flatPath": "v1/matters",
+                    "httpMethod": "POST",
+                    "id": "vault.matters.create",
+                    "parameterOrder": [],
+                    "parameters": {},
+                    "path": "v1/matters",
+                    "request": {
+                        "$ref": "Matter"
                     },
-                    "matterId": {
-                      "type": "string",
-                      "location": "path",
-                      "required": true,
-                      "description": "The matter ID."
-                    }
-                  },
-                  "path": "v1/matters/{matterId}/holds/{holdId}/accounts",
-                  "httpMethod": "POST",
-                  "id": "vault.matters.holds.accounts.create",
-                  "flatPath": "v1/matters/{matterId}/holds/{holdId}/accounts"
+                    "response": {
+                        "$ref": "Matter"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ediscovery"
+                    ]
+                },
+                "delete": {
+                    "description": "Deletes the specified matter. Returns matter with updated state.",
+                    "flatPath": "v1/matters/{matterId}",
+                    "httpMethod": "DELETE",
+                    "id": "vault.matters.delete",
+                    "parameterOrder": [
+                        "matterId"
+                    ],
+                    "parameters": {
+                        "matterId": {
+                            "description": "The matter ID",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/matters/{matterId}",
+                    "response": {
+                        "$ref": "Matter"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ediscovery"
+                    ]
+                },
+                "get": {
+                    "description": "Gets the specified matter.",
+                    "flatPath": "v1/matters/{matterId}",
+                    "httpMethod": "GET",
+                    "id": "vault.matters.get",
+                    "parameterOrder": [
+                        "matterId"
+                    ],
+                    "parameters": {
+                        "matterId": {
+                            "description": "The matter ID.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "view": {
+                            "description": "Specifies which parts of the Matter to return in the response.",
+                            "enum": [
+                                "VIEW_UNSPECIFIED",
+                                "BASIC",
+                                "FULL"
+                            ],
+                            "enumDescriptions": [
+                                "There is no specified view.",
+                                "Response includes the matter_id, name, description, and state. Default choice.",
+                                "Full representation of matter is returned. Everything above and including MatterPermissions list."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/matters/{matterId}",
+                    "response": {
+                        "$ref": "Matter"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ediscovery",
+                        "https://www.googleapis.com/auth/ediscovery.readonly"
+                    ]
                 },
                 "list": {
-                  "path": "v1/matters/{matterId}/holds/{holdId}/accounts",
-                  "httpMethod": "GET",
-                  "parameterOrder": [
-                    "matterId",
-                    "holdId"
-                  ],
-                  "parameters": {
-                    "matterId": {
-                      "location": "path",
-                      "type": "string",
-                      "description": "The matter ID.",
-                      "required": true
+                    "description": "Lists matters the user has access to.",
+                    "flatPath": "v1/matters",
+                    "httpMethod": "GET",
+                    "id": "vault.matters.list",
+                    "parameterOrder": [],
+                    "parameters": {
+                        "pageSize": {
+                            "description": "The number of matters to return in the response. Default and maximum are 100.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The pagination token as returned in the response.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "state": {
+                            "description": "If set, list only matters with that specific state. The default is listing matters of all states.",
+                            "enum": [
+                                "STATE_UNSPECIFIED",
+                                "OPEN",
+                                "CLOSED",
+                                "DELETED"
+                            ],
+                            "enumDescriptions": [
+                                "The matter has no specified state.",
+                                "This matter is open.",
+                                "This matter is closed.",
+                                "This matter is deleted."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "view": {
+                            "description": "Specifies which parts of the matter to return in response.",
+                            "enum": [
+                                "VIEW_UNSPECIFIED",
+                                "BASIC",
+                                "FULL"
+                            ],
+                            "enumDescriptions": [
+                                "There is no specified view.",
+                                "Response includes the matter_id, name, description, and state. Default choice.",
+                                "Full representation of matter is returned. Everything above and including MatterPermissions list."
+                            ],
+                            "location": "query",
+                            "type": "string"
+                        }
                     },
-                    "holdId": {
-                      "location": "path",
-                      "description": "The hold ID.",
-                      "type": "string",
-                      "required": true
+                    "path": "v1/matters",
+                    "response": {
+                        "$ref": "ListMattersResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ediscovery",
+                        "https://www.googleapis.com/auth/ediscovery.readonly"
+                    ]
+                },
+                "removePermissions": {
+                    "description": "Removes an account as a matter collaborator.",
+                    "flatPath": "v1/matters/{matterId}:removePermissions",
+                    "httpMethod": "POST",
+                    "id": "vault.matters.removePermissions",
+                    "parameterOrder": [
+                        "matterId"
+                    ],
+                    "parameters": {
+                        "matterId": {
+                            "description": "The matter ID.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/matters/{matterId}:removePermissions",
+                    "request": {
+                        "$ref": "RemoveMatterPermissionsRequest"
+                    },
+                    "response": {
+                        "$ref": "Empty"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ediscovery"
+                    ]
+                },
+                "reopen": {
+                    "description": "Reopens the specified matter. Returns matter with updated state.",
+                    "flatPath": "v1/matters/{matterId}:reopen",
+                    "httpMethod": "POST",
+                    "id": "vault.matters.reopen",
+                    "parameterOrder": [
+                        "matterId"
+                    ],
+                    "parameters": {
+                        "matterId": {
+                            "description": "The matter ID.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/matters/{matterId}:reopen",
+                    "request": {
+                        "$ref": "ReopenMatterRequest"
+                    },
+                    "response": {
+                        "$ref": "ReopenMatterResponse"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ediscovery"
+                    ]
+                },
+                "undelete": {
+                    "description": "Undeletes the specified matter. Returns matter with updated state.",
+                    "flatPath": "v1/matters/{matterId}:undelete",
+                    "httpMethod": "POST",
+                    "id": "vault.matters.undelete",
+                    "parameterOrder": [
+                        "matterId"
+                    ],
+                    "parameters": {
+                        "matterId": {
+                            "description": "The matter ID.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/matters/{matterId}:undelete",
+                    "request": {
+                        "$ref": "UndeleteMatterRequest"
+                    },
+                    "response": {
+                        "$ref": "Matter"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ediscovery"
+                    ]
+                },
+                "update": {
+                    "description": "Updates the specified matter. This updates only the name and description of the matter, identified by matter ID. Changes to any other fields are ignored. Returns the default view of the matter.",
+                    "flatPath": "v1/matters/{matterId}",
+                    "httpMethod": "PUT",
+                    "id": "vault.matters.update",
+                    "parameterOrder": [
+                        "matterId"
+                    ],
+                    "parameters": {
+                        "matterId": {
+                            "description": "The matter ID.",
+                            "location": "path",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/matters/{matterId}",
+                    "request": {
+                        "$ref": "Matter"
+                    },
+                    "response": {
+                        "$ref": "Matter"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ediscovery"
+                    ]
+                }
+            },
+            "resources": {
+                "exports": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates an Export.",
+                            "flatPath": "v1/matters/{matterId}/exports",
+                            "httpMethod": "POST",
+                            "id": "vault.matters.exports.create",
+                            "parameterOrder": [
+                                "matterId"
+                            ],
+                            "parameters": {
+                                "matterId": {
+                                    "description": "The matter ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/matters/{matterId}/exports",
+                            "request": {
+                                "$ref": "Export"
+                            },
+                            "response": {
+                                "$ref": "Export"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/ediscovery"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes an Export.",
+                            "flatPath": "v1/matters/{matterId}/exports/{exportId}",
+                            "httpMethod": "DELETE",
+                            "id": "vault.matters.exports.delete",
+                            "parameterOrder": [
+                                "matterId",
+                                "exportId"
+                            ],
+                            "parameters": {
+                                "exportId": {
+                                    "description": "The export ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "matterId": {
+                                    "description": "The matter ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/matters/{matterId}/exports/{exportId}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/ediscovery"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets an Export.",
+                            "flatPath": "v1/matters/{matterId}/exports/{exportId}",
+                            "httpMethod": "GET",
+                            "id": "vault.matters.exports.get",
+                            "parameterOrder": [
+                                "matterId",
+                                "exportId"
+                            ],
+                            "parameters": {
+                                "exportId": {
+                                    "description": "The export ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "matterId": {
+                                    "description": "The matter ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/matters/{matterId}/exports/{exportId}",
+                            "response": {
+                                "$ref": "Export"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/ediscovery",
+                                "https://www.googleapis.com/auth/ediscovery.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists Exports.",
+                            "flatPath": "v1/matters/{matterId}/exports",
+                            "httpMethod": "GET",
+                            "id": "vault.matters.exports.list",
+                            "parameterOrder": [
+                                "matterId"
+                            ],
+                            "parameters": {
+                                "matterId": {
+                                    "description": "The matter ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "The number of exports to return in the response.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The pagination token as returned in the response.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/matters/{matterId}/exports",
+                            "response": {
+                                "$ref": "ListExportsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/ediscovery",
+                                "https://www.googleapis.com/auth/ediscovery.readonly"
+                            ]
+                        }
                     }
-                  },
-                  "id": "vault.matters.holds.accounts.list",
-                  "description": "Lists HeldAccounts for a hold. This will only list individually specified held accounts. If the hold is on an OU, then use Admin SDK to enumerate its members.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/ediscovery",
-                    "https://www.googleapis.com/auth/ediscovery.readonly"
-                  ],
-                  "flatPath": "v1/matters/{matterId}/holds/{holdId}/accounts",
-                  "response": {
-                    "$ref": "ListHeldAccountsResponse"
-                  }
+                },
+                "holds": {
+                    "methods": {
+                        "addHeldAccounts": {
+                            "description": "Adds HeldAccounts to a hold. Returns a list of accounts that have been successfully added. Accounts can only be added to an existing account-based hold.",
+                            "flatPath": "v1/matters/{matterId}/holds/{holdId}:addHeldAccounts",
+                            "httpMethod": "POST",
+                            "id": "vault.matters.holds.addHeldAccounts",
+                            "parameterOrder": [
+                                "matterId",
+                                "holdId"
+                            ],
+                            "parameters": {
+                                "holdId": {
+                                    "description": "The hold ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "matterId": {
+                                    "description": "The matter ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/matters/{matterId}/holds/{holdId}:addHeldAccounts",
+                            "request": {
+                                "$ref": "AddHeldAccountsRequest"
+                            },
+                            "response": {
+                                "$ref": "AddHeldAccountsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/ediscovery"
+                            ]
+                        },
+                        "create": {
+                            "description": "Creates a hold in the given matter.",
+                            "flatPath": "v1/matters/{matterId}/holds",
+                            "httpMethod": "POST",
+                            "id": "vault.matters.holds.create",
+                            "parameterOrder": [
+                                "matterId"
+                            ],
+                            "parameters": {
+                                "matterId": {
+                                    "description": "The matter ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/matters/{matterId}/holds",
+                            "request": {
+                                "$ref": "Hold"
+                            },
+                            "response": {
+                                "$ref": "Hold"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/ediscovery"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Removes a hold by ID. This will release any HeldAccounts on this Hold.",
+                            "flatPath": "v1/matters/{matterId}/holds/{holdId}",
+                            "httpMethod": "DELETE",
+                            "id": "vault.matters.holds.delete",
+                            "parameterOrder": [
+                                "matterId",
+                                "holdId"
+                            ],
+                            "parameters": {
+                                "holdId": {
+                                    "description": "The hold ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "matterId": {
+                                    "description": "The matter ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/matters/{matterId}/holds/{holdId}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/ediscovery"
+                            ]
+                        },
+                        "get": {
+                            "description": "Gets a hold by ID.",
+                            "flatPath": "v1/matters/{matterId}/holds/{holdId}",
+                            "httpMethod": "GET",
+                            "id": "vault.matters.holds.get",
+                            "parameterOrder": [
+                                "matterId",
+                                "holdId"
+                            ],
+                            "parameters": {
+                                "holdId": {
+                                    "description": "The hold ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "matterId": {
+                                    "description": "The matter ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "view": {
+                                    "description": "Specifies which parts of the Hold to return.",
+                                    "enum": [
+                                        "HOLD_VIEW_UNSPECIFIED",
+                                        "BASIC_HOLD",
+                                        "FULL_HOLD"
+                                    ],
+                                    "enumDescriptions": [
+                                        "There is no specified view. Defaults to FULL_HOLD.",
+                                        "Response includes the id, name, update time, corpus, and query.",
+                                        "Full representation of a Hold. Response includes all fields of 'BASIC' and the entities the Hold applies to, such as accounts, or OU."
+                                    ],
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/matters/{matterId}/holds/{holdId}",
+                            "response": {
+                                "$ref": "Hold"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/ediscovery",
+                                "https://www.googleapis.com/auth/ediscovery.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists holds within a matter. An empty page token in ListHoldsResponse denotes no more holds to list.",
+                            "flatPath": "v1/matters/{matterId}/holds",
+                            "httpMethod": "GET",
+                            "id": "vault.matters.holds.list",
+                            "parameterOrder": [
+                                "matterId"
+                            ],
+                            "parameters": {
+                                "matterId": {
+                                    "description": "The matter ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "The number of holds to return in the response, between 0 and 100 inclusive. Leaving this empty, or as 0, is the same as page_size = 100.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The pagination token as returned in the response. An empty token means start from the beginning.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "view": {
+                                    "description": "Specifies which parts of the Hold to return.",
+                                    "enum": [
+                                        "HOLD_VIEW_UNSPECIFIED",
+                                        "BASIC_HOLD",
+                                        "FULL_HOLD"
+                                    ],
+                                    "enumDescriptions": [
+                                        "There is no specified view. Defaults to FULL_HOLD.",
+                                        "Response includes the id, name, update time, corpus, and query.",
+                                        "Full representation of a Hold. Response includes all fields of 'BASIC' and the entities the Hold applies to, such as accounts, or OU."
+                                    ],
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/matters/{matterId}/holds",
+                            "response": {
+                                "$ref": "ListHoldsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/ediscovery",
+                                "https://www.googleapis.com/auth/ediscovery.readonly"
+                            ]
+                        },
+                        "removeHeldAccounts": {
+                            "description": "Removes HeldAccounts from a hold. Returns a list of statuses in the same order as the request. If this request leaves the hold with no held accounts, the hold will not apply to any accounts.",
+                            "flatPath": "v1/matters/{matterId}/holds/{holdId}:removeHeldAccounts",
+                            "httpMethod": "POST",
+                            "id": "vault.matters.holds.removeHeldAccounts",
+                            "parameterOrder": [
+                                "matterId",
+                                "holdId"
+                            ],
+                            "parameters": {
+                                "holdId": {
+                                    "description": "The hold ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "matterId": {
+                                    "description": "The matter ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/matters/{matterId}/holds/{holdId}:removeHeldAccounts",
+                            "request": {
+                                "$ref": "RemoveHeldAccountsRequest"
+                            },
+                            "response": {
+                                "$ref": "RemoveHeldAccountsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/ediscovery"
+                            ]
+                        },
+                        "update": {
+                            "description": "Updates the OU and/or query parameters of a hold. You cannot add accounts to a hold that covers an OU, nor can you add OUs to a hold that covers individual accounts. Accounts listed in the hold will be ignored.",
+                            "flatPath": "v1/matters/{matterId}/holds/{holdId}",
+                            "httpMethod": "PUT",
+                            "id": "vault.matters.holds.update",
+                            "parameterOrder": [
+                                "matterId",
+                                "holdId"
+                            ],
+                            "parameters": {
+                                "holdId": {
+                                    "description": "The ID of the hold.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "matterId": {
+                                    "description": "The matter ID.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/matters/{matterId}/holds/{holdId}",
+                            "request": {
+                                "$ref": "Hold"
+                            },
+                            "response": {
+                                "$ref": "Hold"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/ediscovery"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "accounts": {
+                            "methods": {
+                                "create": {
+                                    "description": "Adds a HeldAccount to a hold. Accounts can only be added to a hold that has no held_org_unit set. Attempting to add an account to an OU-based hold will result in an error.",
+                                    "flatPath": "v1/matters/{matterId}/holds/{holdId}/accounts",
+                                    "httpMethod": "POST",
+                                    "id": "vault.matters.holds.accounts.create",
+                                    "parameterOrder": [
+                                        "matterId",
+                                        "holdId"
+                                    ],
+                                    "parameters": {
+                                        "holdId": {
+                                            "description": "The hold ID.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "matterId": {
+                                            "description": "The matter ID.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/matters/{matterId}/holds/{holdId}/accounts",
+                                    "request": {
+                                        "$ref": "HeldAccount"
+                                    },
+                                    "response": {
+                                        "$ref": "HeldAccount"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/ediscovery"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Removes a HeldAccount from a hold. If this request leaves the hold with no held accounts, the hold will not apply to any accounts.",
+                                    "flatPath": "v1/matters/{matterId}/holds/{holdId}/accounts/{accountId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "vault.matters.holds.accounts.delete",
+                                    "parameterOrder": [
+                                        "matterId",
+                                        "holdId",
+                                        "accountId"
+                                    ],
+                                    "parameters": {
+                                        "accountId": {
+                                            "description": "The ID of the account to remove from the hold.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "holdId": {
+                                            "description": "The hold ID.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "matterId": {
+                                            "description": "The matter ID.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/matters/{matterId}/holds/{holdId}/accounts/{accountId}",
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/ediscovery"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists HeldAccounts for a hold. This will only list individually specified held accounts. If the hold is on an OU, then use Admin SDK to enumerate its members.",
+                                    "flatPath": "v1/matters/{matterId}/holds/{holdId}/accounts",
+                                    "httpMethod": "GET",
+                                    "id": "vault.matters.holds.accounts.list",
+                                    "parameterOrder": [
+                                        "matterId",
+                                        "holdId"
+                                    ],
+                                    "parameters": {
+                                        "holdId": {
+                                            "description": "The hold ID.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "matterId": {
+                                            "description": "The matter ID.",
+                                            "location": "path",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1/matters/{matterId}/holds/{holdId}/accounts",
+                                    "response": {
+                                        "$ref": "ListHeldAccountsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/ediscovery",
+                                        "https://www.googleapis.com/auth/ediscovery.readonly"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                },
+                "savedQueries": {
+                    "methods": {
+                        "create": {
+                            "description": "Creates a saved query.",
+                            "flatPath": "v1/matters/{matterId}/savedQueries",
+                            "httpMethod": "POST",
+                            "id": "vault.matters.savedQueries.create",
+                            "parameterOrder": [
+                                "matterId"
+                            ],
+                            "parameters": {
+                                "matterId": {
+                                    "description": "The matter ID of the parent matter for which the saved query is to be created.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/matters/{matterId}/savedQueries",
+                            "request": {
+                                "$ref": "SavedQuery"
+                            },
+                            "response": {
+                                "$ref": "SavedQuery"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/ediscovery"
+                            ]
+                        },
+                        "delete": {
+                            "description": "Deletes a saved query by Id.",
+                            "flatPath": "v1/matters/{matterId}/savedQueries/{savedQueryId}",
+                            "httpMethod": "DELETE",
+                            "id": "vault.matters.savedQueries.delete",
+                            "parameterOrder": [
+                                "matterId",
+                                "savedQueryId"
+                            ],
+                            "parameters": {
+                                "matterId": {
+                                    "description": "The matter ID of the parent matter for which the saved query is to be deleted.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "savedQueryId": {
+                                    "description": "ID of the saved query to be deleted.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/matters/{matterId}/savedQueries/{savedQueryId}",
+                            "response": {
+                                "$ref": "Empty"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/ediscovery"
+                            ]
+                        },
+                        "get": {
+                            "description": "Retrieves a saved query by Id.",
+                            "flatPath": "v1/matters/{matterId}/savedQueries/{savedQueryId}",
+                            "httpMethod": "GET",
+                            "id": "vault.matters.savedQueries.get",
+                            "parameterOrder": [
+                                "matterId",
+                                "savedQueryId"
+                            ],
+                            "parameters": {
+                                "matterId": {
+                                    "description": "The matter ID of the parent matter for which the saved query is to be retrieved.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "savedQueryId": {
+                                    "description": "ID of the saved query to be retrieved.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/matters/{matterId}/savedQueries/{savedQueryId}",
+                            "response": {
+                                "$ref": "SavedQuery"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/ediscovery",
+                                "https://www.googleapis.com/auth/ediscovery.readonly"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists saved queries within a matter. An empty page token in ListSavedQueriesResponse denotes no more saved queries to list.",
+                            "flatPath": "v1/matters/{matterId}/savedQueries",
+                            "httpMethod": "GET",
+                            "id": "vault.matters.savedQueries.list",
+                            "parameterOrder": [
+                                "matterId"
+                            ],
+                            "parameters": {
+                                "matterId": {
+                                    "description": "The matter ID of the parent matter for which the saved queries are to be retrieved.",
+                                    "location": "path",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "The maximum number of saved queries to return.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The pagination token as returned in the previous response. An empty token means start from the beginning.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1/matters/{matterId}/savedQueries",
+                            "response": {
+                                "$ref": "ListSavedQueriesResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/ediscovery",
+                                "https://www.googleapis.com/auth/ediscovery.readonly"
+                            ]
+                        }
+                    }
                 }
-              }
             }
-          },
-          "methods": {
-            "addHeldAccounts": {
-              "scopes": [
-                "https://www.googleapis.com/auth/ediscovery"
-              ],
-              "request": {
-                "$ref": "AddHeldAccountsRequest"
-              },
-              "path": "v1/matters/{matterId}/holds/{holdId}:addHeldAccounts",
-              "description": "Adds HeldAccounts to a hold. Returns a list of accounts that have been successfully added. Accounts can only be added to an existing account-based hold.",
-              "httpMethod": "POST",
-              "parameters": {
-                "holdId": {
-                  "type": "string",
-                  "description": "The hold ID.",
-                  "required": true,
-                  "location": "path"
+        },
+        "operations": {
+            "methods": {
+                "cancel": {
+                    "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.",
+                    "flatPath": "v1/operations/{operationsId}:cancel",
+                    "httpMethod": "POST",
+                    "id": "vault.operations.cancel",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "The name of the operation resource to be cancelled.",
+                            "location": "path",
+                            "pattern": "^operations/.*$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/{+name}:cancel",
+                    "request": {
+                        "$ref": "CancelOperationRequest"
+                    },
+                    "response": {
+                        "$ref": "Empty"
+                    }
+                },
+                "delete": {
+                    "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.",
+                    "flatPath": "v1/operations/{operationsId}",
+                    "httpMethod": "DELETE",
+                    "id": "vault.operations.delete",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "The name of the operation resource to be deleted.",
+                            "location": "path",
+                            "pattern": "^operations/.*$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/{+name}",
+                    "response": {
+                        "$ref": "Empty"
+                    }
+                },
+                "get": {
+                    "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
+                    "flatPath": "v1/operations/{operationsId}",
+                    "httpMethod": "GET",
+                    "id": "vault.operations.get",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "name": {
+                            "description": "The name of the operation resource.",
+                            "location": "path",
+                            "pattern": "^operations/.*$",
+                            "required": true,
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/{+name}",
+                    "response": {
+                        "$ref": "Operation"
+                    },
+                    "scopes": [
+                        "https://www.googleapis.com/auth/ediscovery",
+                        "https://www.googleapis.com/auth/ediscovery.readonly"
+                    ]
+                },
+                "list": {
+                    "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
+                    "flatPath": "v1/operations",
+                    "httpMethod": "GET",
+                    "id": "vault.operations.list",
+                    "parameterOrder": [
+                        "name"
+                    ],
+                    "parameters": {
+                        "filter": {
+                            "description": "The standard list filter.",
+                            "location": "query",
+                            "type": "string"
+                        },
+                        "name": {
+                            "description": "The name of the operation's parent resource.",
+                            "location": "path",
+                            "pattern": "^operations$",
+                            "required": true,
+                            "type": "string"
+                        },
+                        "pageSize": {
+                            "description": "The standard list page size.",
+                            "format": "int32",
+                            "location": "query",
+                            "type": "integer"
+                        },
+                        "pageToken": {
+                            "description": "The standard list page token.",
+                            "location": "query",
+                            "type": "string"
+                        }
+                    },
+                    "path": "v1/{+name}",
+                    "response": {
+                        "$ref": "ListOperationsResponse"
+                    }
+                }
+            }
+        }
+    },
+    "revision": "20210129",
+    "rootUrl": "https://vault.googleapis.com/",
+    "schemas": {
+        "AccountCount": {
+            "description": "Count number for each account.",
+            "id": "AccountCount",
+            "properties": {
+                "account": {
+                    "$ref": "UserInfo",
+                    "description": "Account owner."
+                },
+                "count": {
+                    "description": "The number of artifacts found for this account.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AccountCountError": {
+            "description": "An error that occurred when querying a specific account",
+            "id": "AccountCountError",
+            "properties": {
+                "account": {
+                    "$ref": "UserInfo",
+                    "description": "Account owner."
+                },
+                "errorType": {
+                    "description": "Account query error.",
+                    "enum": [
+                        "ERROR_TYPE_UNSPECIFIED",
+                        "WILDCARD_TOO_BROAD",
+                        "TOO_MANY_TERMS",
+                        "LOCATION_UNAVAILABLE",
+                        "UNKNOWN",
+                        "DEADLINE_EXCEEDED"
+                    ],
+                    "enumDescriptions": [
+                        "Default.",
+                        "Permanent - prefix terms expanded to too many query terms.",
+                        "Permanent - query contains too many terms.",
+                        "Transient - data in transit between storage replicas, temporarily unavailable.",
+                        "Unrecognized error.",
+                        "Deadline exceeded when querying the account."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "AccountInfo": {
+            "description": "Accounts to search",
+            "id": "AccountInfo",
+            "properties": {
+                "emails": {
+                    "description": "A set of accounts to search.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "AddHeldAccountResult": {
+            "description": "A status detailing the status of each account creation, and the HeldAccount, if successful.",
+            "id": "AddHeldAccountResult",
+            "properties": {
+                "account": {
+                    "$ref": "HeldAccount",
+                    "description": "If present, this account was successfully created."
+                },
+                "status": {
+                    "$ref": "Status",
+                    "description": "This represents the success status. If failed, check message."
+                }
+            },
+            "type": "object"
+        },
+        "AddHeldAccountsRequest": {
+            "description": "Add a list of accounts to a hold.",
+            "id": "AddHeldAccountsRequest",
+            "properties": {
+                "accountIds": {
+                    "description": "Account IDs to identify which accounts to add. Only account_ids or only emails should be specified, but not both.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "emails": {
+                    "description": "Emails to identify which accounts to add. Only emails or only account_ids should be specified, but not both.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "AddHeldAccountsResponse": {
+            "description": "Response for batch create held accounts.",
+            "id": "AddHeldAccountsResponse",
+            "properties": {
+                "responses": {
+                    "description": "The list of responses, in the same order as the batch request.",
+                    "items": {
+                        "$ref": "AddHeldAccountResult"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "AddMatterPermissionsRequest": {
+            "description": "Add an account with the permission specified. The role cannot be owner. If an account already has a role in the matter, it will be overwritten.",
+            "id": "AddMatterPermissionsRequest",
+            "properties": {
+                "ccMe": {
+                    "description": "Only relevant if send_emails is true. True to CC requestor in the email message. False to not CC requestor.",
+                    "type": "boolean"
+                },
+                "matterPermission": {
+                    "$ref": "MatterPermission",
+                    "description": "The MatterPermission to add."
+                },
+                "sendEmails": {
+                    "description": "True to send notification email to the added account. False to not send notification email.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "CancelOperationRequest": {
+            "description": "The request message for Operations.CancelOperation.",
+            "id": "CancelOperationRequest",
+            "properties": {},
+            "type": "object"
+        },
+        "CloseMatterRequest": {
+            "description": "Close a matter by ID.",
+            "id": "CloseMatterRequest",
+            "properties": {},
+            "type": "object"
+        },
+        "CloseMatterResponse": {
+            "description": "Response to a CloseMatterRequest.",
+            "id": "CloseMatterResponse",
+            "properties": {
+                "matter": {
+                    "$ref": "Matter",
+                    "description": "The updated matter, with state CLOSED."
+                }
+            },
+            "type": "object"
+        },
+        "CloudStorageFile": {
+            "description": "An export file on cloud storage",
+            "id": "CloudStorageFile",
+            "properties": {
+                "bucketName": {
+                    "description": "The cloud storage bucket name of this export file. Can be used in cloud storage JSON/XML API, but not to list the bucket contents. Instead, you can get individual export files by object name.",
+                    "type": "string"
+                },
+                "md5Hash": {
+                    "description": "The md5 hash of the file.",
+                    "type": "string"
+                },
+                "objectName": {
+                    "description": "The cloud storage object name of this export file. Can be used in cloud storage JSON/XML API.",
+                    "type": "string"
+                },
+                "size": {
+                    "description": "The size of the export file.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "CloudStorageSink": {
+            "description": "Export sink for cloud storage files.",
+            "id": "CloudStorageSink",
+            "properties": {
+                "files": {
+                    "description": "Output only. The exported files on cloud storage.",
+                    "items": {
+                        "$ref": "CloudStorageFile"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "CorpusQuery": {
+            "description": "Corpus specific queries.",
+            "id": "CorpusQuery",
+            "properties": {
+                "driveQuery": {
+                    "$ref": "HeldDriveQuery",
+                    "description": "Details pertaining to Drive holds. If set, corpus must be Drive."
+                },
+                "groupsQuery": {
+                    "$ref": "HeldGroupsQuery",
+                    "description": "Details pertaining to Groups holds. If set, corpus must be Groups."
+                },
+                "hangoutsChatQuery": {
+                    "$ref": "HeldHangoutsChatQuery",
+                    "description": "Details pertaining to Hangouts Chat holds. If set, corpus must be Hangouts Chat."
+                },
+                "mailQuery": {
+                    "$ref": "HeldMailQuery",
+                    "description": "Details pertaining to mail holds. If set, corpus must be mail."
+                },
+                "voiceQuery": {
+                    "$ref": "HeldVoiceQuery",
+                    "description": "Details pertaining to Voice holds. If set, corpus must be Voice."
+                }
+            },
+            "type": "object"
+        },
+        "CountArtifactsMetadata": {
+            "description": "Long running operation metadata for CountArtifacts.",
+            "id": "CountArtifactsMetadata",
+            "properties": {
+                "endTime": {
+                    "description": "End time of count operation. Available when operation is done.",
+                    "format": "google-datetime",
+                    "type": "string"
                 },
                 "matterId": {
-                  "description": "The matter ID.",
-                  "location": "path",
-                  "type": "string",
-                  "required": true
-                }
-              },
-              "id": "vault.matters.holds.addHeldAccounts",
-              "flatPath": "v1/matters/{matterId}/holds/{holdId}:addHeldAccounts",
-              "parameterOrder": [
-                "matterId",
-                "holdId"
-              ],
-              "response": {
-                "$ref": "AddHeldAccountsResponse"
-              }
-            },
-            "create": {
-              "httpMethod": "POST",
-              "path": "v1/matters/{matterId}/holds",
-              "parameters": {
-                "matterId": {
-                  "required": true,
-                  "location": "path",
-                  "description": "The matter ID.",
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1/matters/{matterId}/holds",
-              "parameterOrder": [
-                "matterId"
-              ],
-              "description": "Creates a hold in the given matter.",
-              "response": {
-                "$ref": "Hold"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/ediscovery"
-              ],
-              "id": "vault.matters.holds.create",
-              "request": {
-                "$ref": "Hold"
-              }
-            },
-            "removeHeldAccounts": {
-              "parameterOrder": [
-                "matterId",
-                "holdId"
-              ],
-              "request": {
-                "$ref": "RemoveHeldAccountsRequest"
-              },
-              "parameters": {
-                "holdId": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "The hold ID."
+                    "description": "The matter ID of the associated matter.",
+                    "type": "string"
                 },
-                "matterId": {
-                  "location": "path",
-                  "required": true,
-                  "type": "string",
-                  "description": "The matter ID."
+                "query": {
+                    "$ref": "Query",
+                    "description": "The search query from the request."
+                },
+                "startTime": {
+                    "description": "Creation time of count operation.",
+                    "format": "google-datetime",
+                    "type": "string"
                 }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/ediscovery"
-              ],
-              "httpMethod": "POST",
-              "id": "vault.matters.holds.removeHeldAccounts",
-              "path": "v1/matters/{matterId}/holds/{holdId}:removeHeldAccounts",
-              "flatPath": "v1/matters/{matterId}/holds/{holdId}:removeHeldAccounts",
-              "description": "Removes HeldAccounts from a hold. Returns a list of statuses in the same order as the request. If this request leaves the hold with no held accounts, the hold will not apply to any accounts.",
-              "response": {
-                "$ref": "RemoveHeldAccountsResponse"
-              }
             },
-            "get": {
-              "description": "Gets a hold by ID.",
-              "id": "vault.matters.holds.get",
-              "path": "v1/matters/{matterId}/holds/{holdId}",
-              "parameterOrder": [
-                "matterId",
-                "holdId"
-              ],
-              "parameters": {
-                "view": {
-                  "enum": [
-                    "HOLD_VIEW_UNSPECIFIED",
-                    "BASIC_HOLD",
-                    "FULL_HOLD"
-                  ],
-                  "description": "Specifies which parts of the Hold to return.",
-                  "location": "query",
-                  "type": "string",
-                  "enumDescriptions": [
-                    "There is no specified view. Defaults to FULL_HOLD.",
-                    "Response includes the id, name, update time, corpus, and query.",
-                    "Full representation of a Hold. Response includes all fields of 'BASIC' and the entities the Hold applies to, such as accounts, or OU."
-                  ]
-                },
-                "holdId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "The hold ID."
-                },
-                "matterId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "The matter ID."
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/ediscovery",
-                "https://www.googleapis.com/auth/ediscovery.readonly"
-              ],
-              "flatPath": "v1/matters/{matterId}/holds/{holdId}",
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "Hold"
-              }
-            },
-            "update": {
-              "parameterOrder": [
-                "matterId",
-                "holdId"
-              ],
-              "request": {
-                "$ref": "Hold"
-              },
-              "description": "Updates the OU and/or query parameters of a hold. You cannot add accounts to a hold that covers an OU, nor can you add OUs to a hold that covers individual accounts. Accounts listed in the hold will be ignored.",
-              "scopes": [
-                "https://www.googleapis.com/auth/ediscovery"
-              ],
-              "path": "v1/matters/{matterId}/holds/{holdId}",
-              "flatPath": "v1/matters/{matterId}/holds/{holdId}",
-              "parameters": {
-                "holdId": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "The ID of the hold."
-                },
-                "matterId": {
-                  "type": "string",
-                  "description": "The matter ID.",
-                  "required": true,
-                  "location": "path"
-                }
-              },
-              "httpMethod": "PUT",
-              "response": {
-                "$ref": "Hold"
-              },
-              "id": "vault.matters.holds.update"
-            },
-            "delete": {
-              "parameters": {
-                "holdId": {
-                  "description": "The hold ID.",
-                  "type": "string",
-                  "required": true,
-                  "location": "path"
-                },
-                "matterId": {
-                  "description": "The matter ID.",
-                  "location": "path",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "path": "v1/matters/{matterId}/holds/{holdId}",
-              "parameterOrder": [
-                "matterId",
-                "holdId"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/ediscovery"
-              ],
-              "flatPath": "v1/matters/{matterId}/holds/{holdId}",
-              "id": "vault.matters.holds.delete",
-              "description": "Removes a hold by ID. This will release any HeldAccounts on this Hold.",
-              "httpMethod": "DELETE",
-              "response": {
-                "$ref": "Empty"
-              }
-            },
-            "list": {
-              "parameterOrder": [
-                "matterId"
-              ],
-              "parameters": {
-                "pageSize": {
-                  "location": "query",
-                  "format": "int32",
-                  "description": "The number of holds to return in the response, between 0 and 100 inclusive. Leaving this empty, or as 0, is the same as page_size = 100.",
-                  "type": "integer"
-                },
-                "pageToken": {
-                  "description": "The pagination token as returned in the response. An empty token means start from the beginning.",
-                  "type": "string",
-                  "location": "query"
+            "type": "object"
+        },
+        "CountArtifactsRequest": {
+            "description": "Count artifacts request.",
+            "id": "CountArtifactsRequest",
+            "properties": {
+                "query": {
+                    "$ref": "Query",
+                    "description": "The search query."
                 },
                 "view": {
-                  "description": "Specifies which parts of the Hold to return.",
-                  "enum": [
-                    "HOLD_VIEW_UNSPECIFIED",
-                    "BASIC_HOLD",
-                    "FULL_HOLD"
-                  ],
-                  "type": "string",
-                  "location": "query",
-                  "enumDescriptions": [
-                    "There is no specified view. Defaults to FULL_HOLD.",
-                    "Response includes the id, name, update time, corpus, and query.",
-                    "Full representation of a Hold. Response includes all fields of 'BASIC' and the entities the Hold applies to, such as accounts, or OU."
-                  ]
-                },
-                "matterId": {
-                  "location": "path",
-                  "description": "The matter ID.",
-                  "required": true,
-                  "type": "string"
+                    "description": "Specifies the granularity of the count result returned in response.",
+                    "enum": [
+                        "COUNT_RESULT_VIEW_UNSPECIFIED",
+                        "TOTAL_COUNT",
+                        "ALL"
+                    ],
+                    "enumDescriptions": [
+                        "Default. It works the same as TOTAL_COUNT.",
+                        "Response includes: total count, queried accounts count, matching accounts count, non-queryable accounts, queried account errors.",
+                        "Response includes additional breakdown of account count."
+                    ],
+                    "type": "string"
                 }
-              },
-              "path": "v1/matters/{matterId}/holds",
-              "httpMethod": "GET",
-              "id": "vault.matters.holds.list",
-              "flatPath": "v1/matters/{matterId}/holds",
-              "response": {
-                "$ref": "ListHoldsResponse"
-              },
-              "description": "Lists holds within a matter. An empty page token in ListHoldsResponse denotes no more holds to list.",
-              "scopes": [
-                "https://www.googleapis.com/auth/ediscovery",
-                "https://www.googleapis.com/auth/ediscovery.readonly"
-              ]
-            }
-          }
+            },
+            "type": "object"
         },
-        "exports": {
-          "methods": {
-            "delete": {
-              "response": {
-                "$ref": "Empty"
-              },
-              "id": "vault.matters.exports.delete",
-              "httpMethod": "DELETE",
-              "flatPath": "v1/matters/{matterId}/exports/{exportId}",
-              "parameters": {
-                "exportId": {
-                  "type": "string",
-                  "description": "The export ID.",
-                  "location": "path",
-                  "required": true
+        "CountArtifactsResponse": {
+            "description": "Definition of the response for method CountArtifacts.",
+            "id": "CountArtifactsResponse",
+            "properties": {
+                "groupsCountResult": {
+                    "$ref": "GroupsCountResult",
+                    "description": "Count metrics of Groups."
                 },
-                "matterId": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "description": "The matter ID."
+                "mailCountResult": {
+                    "$ref": "MailCountResult",
+                    "description": "Count metrics of Mail."
+                },
+                "totalCount": {
+                    "description": "Total count of artifacts. For mail and groups, artifacts refers to messages.",
+                    "format": "int64",
+                    "type": "string"
                 }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/ediscovery"
-              ],
-              "description": "Deletes an Export.",
-              "path": "v1/matters/{matterId}/exports/{exportId}",
-              "parameterOrder": [
-                "matterId",
-                "exportId"
-              ]
             },
-            "list": {
-              "id": "vault.matters.exports.list",
-              "parameters": {
-                "pageSize": {
-                  "format": "int32",
-                  "location": "query",
-                  "type": "integer",
-                  "description": "The number of exports to return in the response."
-                },
-                "pageToken": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "The pagination token as returned in the response."
-                },
-                "matterId": {
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "description": "The matter ID."
+            "type": "object"
+        },
+        "DriveExportOptions": {
+            "description": "The options for Drive export.",
+            "id": "DriveExportOptions",
+            "properties": {
+                "includeAccessInfo": {
+                    "description": "Set to true to include access level information for users with indirect access to files.",
+                    "type": "boolean"
                 }
-              },
-              "path": "v1/matters/{matterId}/exports",
-              "response": {
-                "$ref": "ListExportsResponse"
-              },
-              "description": "Lists Exports.",
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/ediscovery",
-                "https://www.googleapis.com/auth/ediscovery.readonly"
-              ],
-              "parameterOrder": [
-                "matterId"
-              ],
-              "flatPath": "v1/matters/{matterId}/exports"
             },
-            "get": {
-              "flatPath": "v1/matters/{matterId}/exports/{exportId}",
-              "parameterOrder": [
-                "matterId",
-                "exportId"
-              ],
-              "parameters": {
-                "matterId": {
-                  "location": "path",
-                  "description": "The matter ID.",
-                  "required": true,
-                  "type": "string"
+            "type": "object"
+        },
+        "DriveOptions": {
+            "description": "Drive search advanced options",
+            "id": "DriveOptions",
+            "properties": {
+                "includeSharedDrives": {
+                    "description": "Set to true to include shared drive.",
+                    "type": "boolean"
                 },
-                "exportId": {
-                  "location": "path",
-                  "type": "string",
-                  "required": true,
-                  "description": "The export ID."
+                "includeTeamDrives": {
+                    "description": "Set to true to include Team Drive.",
+                    "type": "boolean"
+                },
+                "versionDate": {
+                    "description": "Search the versions of the Drive file as of the reference date. These timestamps are in GMT and rounded down to the given date.",
+                    "format": "google-datetime",
+                    "type": "string"
                 }
-              },
-              "path": "v1/matters/{matterId}/exports/{exportId}",
-              "scopes": [
-                "https://www.googleapis.com/auth/ediscovery",
-                "https://www.googleapis.com/auth/ediscovery.readonly"
-              ],
-              "id": "vault.matters.exports.get",
-              "httpMethod": "GET",
-              "description": "Gets an Export.",
-              "response": {
-                "$ref": "Export"
-              }
             },
-            "create": {
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "matterId"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/ediscovery"
-              ],
-              "path": "v1/matters/{matterId}/exports",
-              "flatPath": "v1/matters/{matterId}/exports",
-              "request": {
-                "$ref": "Export"
-              },
-              "id": "vault.matters.exports.create",
-              "parameters": {
+            "type": "object"
+        },
+        "Empty": {
+            "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
+            "id": "Empty",
+            "properties": {},
+            "type": "object"
+        },
+        "Export": {
+            "description": "An export",
+            "id": "Export",
+            "properties": {
+                "cloudStorageSink": {
+                    "$ref": "CloudStorageSink",
+                    "description": "Output only. Export sink for cloud storage files."
+                },
+                "createTime": {
+                    "description": "Output only. The time when the export was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "exportOptions": {
+                    "$ref": "ExportOptions",
+                    "description": "Advanced options of the export."
+                },
+                "id": {
+                    "description": "Output only. The generated export ID.",
+                    "type": "string"
+                },
                 "matterId": {
-                  "location": "path",
-                  "description": "The matter ID.",
-                  "type": "string",
-                  "required": true
+                    "description": "Output only. The matter ID.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The export name.",
+                    "type": "string"
+                },
+                "query": {
+                    "$ref": "Query",
+                    "description": "The search query being exported."
+                },
+                "requester": {
+                    "$ref": "UserInfo",
+                    "description": "Output only. The requester of the export."
+                },
+                "stats": {
+                    "$ref": "ExportStats",
+                    "description": "Output only. Export statistics."
+                },
+                "status": {
+                    "description": "Output only. The export status.",
+                    "enum": [
+                        "EXPORT_STATUS_UNSPECIFIED",
+                        "COMPLETED",
+                        "FAILED",
+                        "IN_PROGRESS"
+                    ],
+                    "enumDescriptions": [
+                        "The status is unspecified.",
+                        "The export completed.",
+                        "The export failed.",
+                        "The export is still being executed."
+                    ],
+                    "type": "string"
                 }
-              },
-              "description": "Creates an Export.",
-              "response": {
-                "$ref": "Export"
-              }
-            }
-          }
+            },
+            "type": "object"
+        },
+        "ExportOptions": {
+            "description": "Export advanced options",
+            "id": "ExportOptions",
+            "properties": {
+                "driveOptions": {
+                    "$ref": "DriveExportOptions",
+                    "description": "Option available for Drive export."
+                },
+                "groupsOptions": {
+                    "$ref": "GroupsExportOptions",
+                    "description": "Option available for groups export."
+                },
+                "hangoutsChatOptions": {
+                    "$ref": "HangoutsChatExportOptions",
+                    "description": "Option available for hangouts chat export."
+                },
+                "mailOptions": {
+                    "$ref": "MailExportOptions",
+                    "description": "Option available for mail export."
+                },
+                "region": {
+                    "description": "The requested export location.",
+                    "enum": [
+                        "EXPORT_REGION_UNSPECIFIED",
+                        "ANY",
+                        "US",
+                        "EUROPE"
+                    ],
+                    "enumDescriptions": [
+                        "The region is unspecified. Will be treated the same as ANY.",
+                        "Any region.",
+                        "US region.",
+                        "Europe region."
+                    ],
+                    "type": "string"
+                },
+                "voiceOptions": {
+                    "$ref": "VoiceExportOptions",
+                    "description": "Option available for voice export."
+                }
+            },
+            "type": "object"
+        },
+        "ExportStats": {
+            "description": "Stats of an export.",
+            "id": "ExportStats",
+            "properties": {
+                "exportedArtifactCount": {
+                    "description": "The number of documents already processed by the export.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "sizeInBytes": {
+                    "description": "The size of export in bytes.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "totalArtifactCount": {
+                    "description": "The number of documents to be exported.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GroupsCountResult": {
+            "description": "Groups specific count metrics.",
+            "id": "GroupsCountResult",
+            "properties": {
+                "accountCountErrors": {
+                    "description": "Error occurred when querying these accounts.",
+                    "items": {
+                        "$ref": "AccountCountError"
+                    },
+                    "type": "array"
+                },
+                "accountCounts": {
+                    "description": "Subtotal count per matching account that have more than zero messages.",
+                    "items": {
+                        "$ref": "AccountCount"
+                    },
+                    "type": "array"
+                },
+                "matchingAccountsCount": {
+                    "description": "Total number of accounts that can be queried and have more than zero messages.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "nonQueryableAccounts": {
+                    "description": "When data scope is HELD_DATA in the request Query, these accounts in the request are not queried because they are not on hold. For other data scope, this field is not set.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "queriedAccountsCount": {
+                    "description": "Total number of accounts involved in this count operation.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "GroupsExportOptions": {
+            "description": "The options for groups export.",
+            "id": "GroupsExportOptions",
+            "properties": {
+                "exportFormat": {
+                    "description": "The export format for groups export.",
+                    "enum": [
+                        "EXPORT_FORMAT_UNSPECIFIED",
+                        "MBOX",
+                        "PST"
+                    ],
+                    "enumDescriptions": [
+                        "No export format specified.",
+                        "MBOX as export format.",
+                        "PST as export format"
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "HangoutsChatExportOptions": {
+            "description": "The options for hangouts chat export.",
+            "id": "HangoutsChatExportOptions",
+            "properties": {
+                "exportFormat": {
+                    "description": "The export format for hangouts chat export.",
+                    "enum": [
+                        "EXPORT_FORMAT_UNSPECIFIED",
+                        "MBOX",
+                        "PST"
+                    ],
+                    "enumDescriptions": [
+                        "No export format specified.",
+                        "MBOX as export format.",
+                        "PST as export format"
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "HangoutsChatInfo": {
+            "description": "Accounts to search",
+            "id": "HangoutsChatInfo",
+            "properties": {
+                "roomId": {
+                    "description": "A set of rooms to search.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "HangoutsChatOptions": {
+            "description": "Hangouts chat search advanced options",
+            "id": "HangoutsChatOptions",
+            "properties": {
+                "includeRooms": {
+                    "description": "Set to true to include rooms.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "HeldAccount": {
+            "description": "An account being held in a particular hold. This structure is immutable. This can be either a single user or a google group, depending on the corpus.",
+            "id": "HeldAccount",
+            "properties": {
+                "accountId": {
+                    "description": "The account's ID as provided by the Admin SDK.",
+                    "type": "string"
+                },
+                "email": {
+                    "description": "The primary email address of the account. If used as an input, this takes precedence over account ID.",
+                    "type": "string"
+                },
+                "firstName": {
+                    "description": "Output only. The first name of the account holder.",
+                    "type": "string"
+                },
+                "holdTime": {
+                    "description": "Output only. When the account was put on hold.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "lastName": {
+                    "description": "Output only. The last name of the account holder.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "HeldDriveQuery": {
+            "description": "Query options for Drive holds.",
+            "id": "HeldDriveQuery",
+            "properties": {
+                "includeSharedDriveFiles": {
+                    "description": "If true, include files in shared drives in the hold.",
+                    "type": "boolean"
+                },
+                "includeTeamDriveFiles": {
+                    "description": "If true, include files in Team Drives in the hold.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "HeldGroupsQuery": {
+            "description": "Query options for group holds.",
+            "id": "HeldGroupsQuery",
+            "properties": {
+                "endTime": {
+                    "description": "The end time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "startTime": {
+                    "description": "The start time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "terms": {
+                    "description": "The search terms for the hold.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "HeldHangoutsChatQuery": {
+            "description": "Query options for hangouts chat holds.",
+            "id": "HeldHangoutsChatQuery",
+            "properties": {
+                "includeRooms": {
+                    "description": "If true, include rooms the user has participated in.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "HeldMailQuery": {
+            "description": "Query options for mail holds.",
+            "id": "HeldMailQuery",
+            "properties": {
+                "endTime": {
+                    "description": "The end time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "startTime": {
+                    "description": "The start time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "terms": {
+                    "description": "The search terms for the hold.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "HeldOrgUnit": {
+            "description": "A organizational unit being held in a particular hold. This structure is immutable.",
+            "id": "HeldOrgUnit",
+            "properties": {
+                "holdTime": {
+                    "description": "When the org unit was put on hold. This property is immutable.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "orgUnitId": {
+                    "description": "The org unit's immutable ID as provided by the Admin SDK.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "HeldVoiceQuery": {
+            "description": "Query options for Voice holds.",
+            "id": "HeldVoiceQuery",
+            "properties": {
+                "coveredData": {
+                    "description": "Data covered by this rule. Should be non-empty. Order does not matter and duplicates will be ignored.",
+                    "items": {
+                        "enum": [
+                            "COVERED_DATA_UNSPECIFIED",
+                            "TEXT_MESSAGES",
+                            "VOICEMAILS",
+                            "CALL_LOGS"
+                        ],
+                        "enumDescriptions": [
+                            "Covered data unspecified.",
+                            "Voice text message will be covered.",
+                            "Voicemail will be covered.",
+                            "Call logs will be covered."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Hold": {
+            "description": "Represents a hold within Vault. A hold restricts purging of artifacts based on the combination of the query and accounts restrictions. A hold can be configured to either apply to an explicitly configured set of accounts, or can be applied to all members of an organizational unit.",
+            "id": "Hold",
+            "properties": {
+                "accounts": {
+                    "description": "If set, the hold applies to the enumerated accounts and org_unit must be empty.",
+                    "items": {
+                        "$ref": "HeldAccount"
+                    },
+                    "type": "array"
+                },
+                "corpus": {
+                    "description": "The corpus to be searched.",
+                    "enum": [
+                        "CORPUS_TYPE_UNSPECIFIED",
+                        "DRIVE",
+                        "MAIL",
+                        "GROUPS",
+                        "HANGOUTS_CHAT",
+                        "VOICE"
+                    ],
+                    "enumDescriptions": [
+                        "No corpus specified.",
+                        "Drive.",
+                        "Mail.",
+                        "Groups.",
+                        "Hangouts Chat.",
+                        "Google Voice."
+                    ],
+                    "type": "string"
+                },
+                "holdId": {
+                    "description": "The unique immutable ID of the hold. Assigned during creation.",
+                    "type": "string"
+                },
+                "name": {
+                    "description": "The name of the hold.",
+                    "type": "string"
+                },
+                "orgUnit": {
+                    "$ref": "HeldOrgUnit",
+                    "description": "If set, the hold applies to all members of the organizational unit and accounts must be empty. This property is mutable. For groups holds, set the accounts field."
+                },
+                "query": {
+                    "$ref": "CorpusQuery",
+                    "description": "The corpus-specific query. If set, the corpusQuery must match corpus type."
+                },
+                "updateTime": {
+                    "description": "The last time this hold was modified.",
+                    "format": "google-datetime",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListExportsResponse": {
+            "description": "The holds for a matter.",
+            "id": "ListExportsResponse",
+            "properties": {
+                "exports": {
+                    "description": "The list of exports.",
+                    "items": {
+                        "$ref": "Export"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Page token to retrieve the next page of results in the list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListHeldAccountsResponse": {
+            "description": "Returns a list of held accounts for a hold.",
+            "id": "ListHeldAccountsResponse",
+            "properties": {
+                "accounts": {
+                    "description": "The held accounts on a hold.",
+                    "items": {
+                        "$ref": "HeldAccount"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListHoldsResponse": {
+            "description": "The holds for a matter.",
+            "id": "ListHoldsResponse",
+            "properties": {
+                "holds": {
+                    "description": "The list of holds.",
+                    "items": {
+                        "$ref": "Hold"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Page token to retrieve the next page of results in the list. If this is empty, then there are no more holds to list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListMattersResponse": {
+            "description": "Provides the list of matters.",
+            "id": "ListMattersResponse",
+            "properties": {
+                "matters": {
+                    "description": "List of matters.",
+                    "items": {
+                        "$ref": "Matter"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "Page token to retrieve the next page of results in the list.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ListOperationsResponse": {
+            "description": "The response message for Operations.ListOperations.",
+            "id": "ListOperationsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                },
+                "operations": {
+                    "description": "A list of operations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Operation"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "ListSavedQueriesResponse": {
+            "description": "Definition of the response for method ListSaveQuery.",
+            "id": "ListSavedQueriesResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "Page token to retrieve the next page of results in the list. If this is empty, then there are no more saved queries to list.",
+                    "type": "string"
+                },
+                "savedQueries": {
+                    "description": "List of output saved queries.",
+                    "items": {
+                        "$ref": "SavedQuery"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "MailCountResult": {
+            "description": "Mail specific count metrics.",
+            "id": "MailCountResult",
+            "properties": {
+                "accountCountErrors": {
+                    "description": "Error occurred when querying these accounts.",
+                    "items": {
+                        "$ref": "AccountCountError"
+                    },
+                    "type": "array"
+                },
+                "accountCounts": {
+                    "description": "Subtotal count per matching account that have more than zero messages.",
+                    "items": {
+                        "$ref": "AccountCount"
+                    },
+                    "type": "array"
+                },
+                "matchingAccountsCount": {
+                    "description": "Total number of accounts that can be queried and have more than zero messages.",
+                    "format": "int64",
+                    "type": "string"
+                },
+                "nonQueryableAccounts": {
+                    "description": "When data scope is HELD_DATA in the request Query, these accounts in the request are not queried because they are not on hold. For other data scope, this field is not set.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                },
+                "queriedAccountsCount": {
+                    "description": "Total number of accounts involved in this count operation.",
+                    "format": "int64",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MailExportOptions": {
+            "description": "The options for mail export.",
+            "id": "MailExportOptions",
+            "properties": {
+                "exportFormat": {
+                    "description": "The export file format.",
+                    "enum": [
+                        "EXPORT_FORMAT_UNSPECIFIED",
+                        "MBOX",
+                        "PST"
+                    ],
+                    "enumDescriptions": [
+                        "No export format specified.",
+                        "MBOX as export format.",
+                        "PST as export format"
+                    ],
+                    "type": "string"
+                },
+                "showConfidentialModeContent": {
+                    "description": "Set to true to export confidential mode content.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "MailOptions": {
+            "description": "Mail search advanced options",
+            "id": "MailOptions",
+            "properties": {
+                "excludeDrafts": {
+                    "description": "Set to true to exclude drafts.",
+                    "type": "boolean"
+                }
+            },
+            "type": "object"
+        },
+        "Matter": {
+            "description": "Represents a matter.",
+            "id": "Matter",
+            "properties": {
+                "description": {
+                    "description": "The description of the matter.",
+                    "type": "string"
+                },
+                "matterId": {
+                    "description": "The matter ID which is generated by the server. Should be blank when creating a new matter.",
+                    "type": "string"
+                },
+                "matterPermissions": {
+                    "description": "List of users and access to the matter. Currently there is no programmer defined limit on the number of permissions a matter can have.",
+                    "items": {
+                        "$ref": "MatterPermission"
+                    },
+                    "type": "array"
+                },
+                "name": {
+                    "description": "The name of the matter.",
+                    "type": "string"
+                },
+                "state": {
+                    "description": "The state of the matter.",
+                    "enum": [
+                        "STATE_UNSPECIFIED",
+                        "OPEN",
+                        "CLOSED",
+                        "DELETED"
+                    ],
+                    "enumDescriptions": [
+                        "The matter has no specified state.",
+                        "This matter is open.",
+                        "This matter is closed.",
+                        "This matter is deleted."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "MatterPermission": {
+            "description": "Currently each matter only has one owner, and all others are collaborators. When an account is purged, its corresponding MatterPermission resources cease to exist.",
+            "id": "MatterPermission",
+            "properties": {
+                "accountId": {
+                    "description": "The account ID, as provided by Admin SDK.",
+                    "type": "string"
+                },
+                "role": {
+                    "description": "The user's role in this matter.",
+                    "enum": [
+                        "ROLE_UNSPECIFIED",
+                        "COLLABORATOR",
+                        "OWNER"
+                    ],
+                    "enumDescriptions": [
+                        "No role assigned.",
+                        "A collaborator to the matter.",
+                        "The owner of the matter."
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Operation": {
+            "description": "This resource represents a long-running operation that is the result of a network API call.",
+            "id": "Operation",
+            "properties": {
+                "done": {
+                    "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
+                    "type": "boolean"
+                },
+                "error": {
+                    "$ref": "Status",
+                    "description": "The error result of the operation in case of failure or cancellation."
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
+                    "type": "string"
+                },
+                "response": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
+                    "type": "object"
+                }
+            },
+            "type": "object"
+        },
+        "OrgUnitInfo": {
+            "description": "Org Unit to search",
+            "id": "OrgUnitInfo",
+            "properties": {
+                "orgUnitId": {
+                    "description": "Org unit to search, as provided by the Admin SDK Directory API.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Query": {
+            "description": "A query definition relevant for search & export.",
+            "id": "Query",
+            "properties": {
+                "accountInfo": {
+                    "$ref": "AccountInfo",
+                    "description": "When 'ACCOUNT' is chosen as search method, account_info needs to be specified."
+                },
+                "corpus": {
+                    "description": "The corpus to search.",
+                    "enum": [
+                        "CORPUS_TYPE_UNSPECIFIED",
+                        "DRIVE",
+                        "MAIL",
+                        "GROUPS",
+                        "HANGOUTS_CHAT",
+                        "VOICE"
+                    ],
+                    "enumDescriptions": [
+                        "No corpus specified.",
+                        "Drive.",
+                        "Mail.",
+                        "Groups.",
+                        "Hangouts Chat.",
+                        "Google Voice."
+                    ],
+                    "type": "string"
+                },
+                "dataScope": {
+                    "description": "The data source to search from.",
+                    "enum": [
+                        "DATA_SCOPE_UNSPECIFIED",
+                        "ALL_DATA",
+                        "HELD_DATA",
+                        "UNPROCESSED_DATA"
+                    ],
+                    "enumDescriptions": [
+                        "No data scope specified.",
+                        "All available data.",
+                        "Data on hold.",
+                        "Data not processed."
+                    ],
+                    "type": "string"
+                },
+                "driveOptions": {
+                    "$ref": "DriveOptions",
+                    "description": "For Drive search, specify more options in this field."
+                },
+                "endTime": {
+                    "description": "The end time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "hangoutsChatInfo": {
+                    "$ref": "HangoutsChatInfo",
+                    "description": "When 'ROOM' is chosen as search method, hangout_chats_info needs to be specified. (read-only)"
+                },
+                "hangoutsChatOptions": {
+                    "$ref": "HangoutsChatOptions",
+                    "description": "For hangouts chat search, specify more options in this field. (read-only)"
+                },
+                "mailOptions": {
+                    "$ref": "MailOptions",
+                    "description": "For mail search, specify more options in this field."
+                },
+                "method": {
+                    "description": "The search method to use. This field is similar to the search_method field but is introduced to support shared drives. It supports all search method types. In case the search_method is TEAM_DRIVE the response of this field will be SHARED_DRIVE only.",
+                    "enum": [
+                        "SEARCH_METHOD_UNSPECIFIED",
+                        "ACCOUNT",
+                        "ORG_UNIT",
+                        "TEAM_DRIVE",
+                        "ENTIRE_ORG",
+                        "ROOM",
+                        "SHARED_DRIVE"
+                    ],
+                    "enumDescriptions": [
+                        "A search method must be specified. If a request does not specify a search method, it will be rejected.",
+                        "Will search all accounts provided in account_info.",
+                        "Will search all accounts in the OU specified in org_unit_info.",
+                        "Will search for all accounts in the Team Drive specified in team_drive_info.",
+                        "Will search for all accounts in the organization. No need to set account_info or org_unit_info. Not all CORPUS_TYPE support this scope. Supported by MAIL.",
+                        "Will search in the Room specified in hangout_chats_info. (read-only)",
+                        "Will search for all accounts in the shared drive specified in shared_drive_info."
+                    ],
+                    "type": "string"
+                },
+                "orgUnitInfo": {
+                    "$ref": "OrgUnitInfo",
+                    "description": "When 'ORG_UNIT' is chosen as as search method, org_unit_info needs to be specified."
+                },
+                "searchMethod": {
+                    "description": "The search method to use.",
+                    "enum": [
+                        "SEARCH_METHOD_UNSPECIFIED",
+                        "ACCOUNT",
+                        "ORG_UNIT",
+                        "TEAM_DRIVE",
+                        "ENTIRE_ORG",
+                        "ROOM",
+                        "SHARED_DRIVE"
+                    ],
+                    "enumDescriptions": [
+                        "A search method must be specified. If a request does not specify a search method, it will be rejected.",
+                        "Will search all accounts provided in account_info.",
+                        "Will search all accounts in the OU specified in org_unit_info.",
+                        "Will search for all accounts in the Team Drive specified in team_drive_info.",
+                        "Will search for all accounts in the organization. No need to set account_info or org_unit_info. Not all CORPUS_TYPE support this scope. Supported by MAIL.",
+                        "Will search in the Room specified in hangout_chats_info. (read-only)",
+                        "Will search for all accounts in the shared drive specified in shared_drive_info."
+                    ],
+                    "type": "string"
+                },
+                "sharedDriveInfo": {
+                    "$ref": "SharedDriveInfo",
+                    "description": "When 'SHARED_DRIVE' is chosen as search method, shared_drive_info needs to be specified."
+                },
+                "startTime": {
+                    "description": "The start time range for the search query. These timestamps are in GMT and rounded down to the start of the given date.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "teamDriveInfo": {
+                    "$ref": "TeamDriveInfo",
+                    "description": "When 'TEAM_DRIVE' is chosen as search method, team_drive_info needs to be specified."
+                },
+                "terms": {
+                    "description": "The corpus-specific search operators used to generate search results.",
+                    "type": "string"
+                },
+                "timeZone": {
+                    "description": "The time zone name. It should be an IANA TZ name, such as \"America/Los_Angeles\". For more information, see Time Zone.",
+                    "type": "string"
+                },
+                "voiceOptions": {
+                    "$ref": "VoiceOptions",
+                    "description": "For voice search, specify more options in this field."
+                }
+            },
+            "type": "object"
+        },
+        "RemoveHeldAccountsRequest": {
+            "description": "Remove a list of accounts from a hold.",
+            "id": "RemoveHeldAccountsRequest",
+            "properties": {
+                "accountIds": {
+                    "description": "Account IDs to identify HeldAccounts to remove.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "RemoveHeldAccountsResponse": {
+            "description": "Response for batch delete held accounts.",
+            "id": "RemoveHeldAccountsResponse",
+            "properties": {
+                "statuses": {
+                    "description": "A list of statuses for deleted accounts. Results have the same order as the request.",
+                    "items": {
+                        "$ref": "Status"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "RemoveMatterPermissionsRequest": {
+            "description": "Remove an account as a matter collaborator.",
+            "id": "RemoveMatterPermissionsRequest",
+            "properties": {
+                "accountId": {
+                    "description": "The account ID.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "ReopenMatterRequest": {
+            "description": "Reopen a matter by ID.",
+            "id": "ReopenMatterRequest",
+            "properties": {},
+            "type": "object"
+        },
+        "ReopenMatterResponse": {
+            "description": "Response to a ReopenMatterRequest.",
+            "id": "ReopenMatterResponse",
+            "properties": {
+                "matter": {
+                    "$ref": "Matter",
+                    "description": "The updated matter, with state OPEN."
+                }
+            },
+            "type": "object"
+        },
+        "SavedQuery": {
+            "description": "Definition of the saved query.",
+            "id": "SavedQuery",
+            "properties": {
+                "createTime": {
+                    "description": "Output only. The server generated timestamp at which saved query was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "displayName": {
+                    "description": "Name of the saved query.",
+                    "type": "string"
+                },
+                "matterId": {
+                    "description": "Output only. The matter ID of the associated matter. The server does not look at this field during create and always uses matter id in the URL.",
+                    "type": "string"
+                },
+                "query": {
+                    "$ref": "Query",
+                    "description": "The underlying Query object which contains all the information of the saved query."
+                },
+                "savedQueryId": {
+                    "description": "A unique identifier for the saved query.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "SharedDriveInfo": {
+            "description": "Shared drives to search",
+            "id": "SharedDriveInfo",
+            "properties": {
+                "sharedDriveIds": {
+                    "description": "List of Shared drive IDs, as provided by Drive API.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "Status": {
+            "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
+            "id": "Status",
+            "properties": {
+                "code": {
+                    "description": "The status code, which should be an enum value of google.rpc.Code.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "TeamDriveInfo": {
+            "description": "Team Drives to search",
+            "id": "TeamDriveInfo",
+            "properties": {
+                "teamDriveIds": {
+                    "description": "List of Team Drive IDs, as provided by Drive API.",
+                    "items": {
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
+        },
+        "UndeleteMatterRequest": {
+            "description": "Undelete a matter by ID.",
+            "id": "UndeleteMatterRequest",
+            "properties": {},
+            "type": "object"
+        },
+        "UserInfo": {
+            "description": "User's information.",
+            "id": "UserInfo",
+            "properties": {
+                "displayName": {
+                    "description": "The displayed name of the user.",
+                    "type": "string"
+                },
+                "email": {
+                    "description": "The email address of the user.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "VoiceExportOptions": {
+            "description": "The options for voice export.",
+            "id": "VoiceExportOptions",
+            "properties": {
+                "exportFormat": {
+                    "description": "The export format for voice export.",
+                    "enum": [
+                        "EXPORT_FORMAT_UNSPECIFIED",
+                        "MBOX",
+                        "PST"
+                    ],
+                    "enumDescriptions": [
+                        "No export format specified.",
+                        "MBOX as export format.",
+                        "PST as export format"
+                    ],
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "VoiceOptions": {
+            "description": "Voice search options",
+            "id": "VoiceOptions",
+            "properties": {
+                "coveredData": {
+                    "description": "Datatypes to search",
+                    "items": {
+                        "enum": [
+                            "COVERED_DATA_UNSPECIFIED",
+                            "TEXT_MESSAGES",
+                            "VOICEMAILS",
+                            "CALL_LOGS"
+                        ],
+                        "enumDescriptions": [
+                            "Covered data unspecified.",
+                            "Voice text message will be covered.",
+                            "Voicemail will be covered.",
+                            "Call logs will be covered."
+                        ],
+                        "type": "string"
+                    },
+                    "type": "array"
+                }
+            },
+            "type": "object"
         }
-      },
-      "methods": {
-        "undelete": {
-          "parameterOrder": [
-            "matterId"
-          ],
-          "id": "vault.matters.undelete",
-          "path": "v1/matters/{matterId}:undelete",
-          "parameters": {
-            "matterId": {
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "The matter ID."
-            }
-          },
-          "description": "Undeletes the specified matter. Returns matter with updated state.",
-          "request": {
-            "$ref": "UndeleteMatterRequest"
-          },
-          "response": {
-            "$ref": "Matter"
-          },
-          "httpMethod": "POST",
-          "flatPath": "v1/matters/{matterId}:undelete",
-          "scopes": [
-            "https://www.googleapis.com/auth/ediscovery"
-          ]
-        },
-        "list": {
-          "scopes": [
-            "https://www.googleapis.com/auth/ediscovery",
-            "https://www.googleapis.com/auth/ediscovery.readonly"
-          ],
-          "httpMethod": "GET",
-          "parameterOrder": [],
-          "id": "vault.matters.list",
-          "response": {
-            "$ref": "ListMattersResponse"
-          },
-          "parameters": {
-            "state": {
-              "location": "query",
-              "type": "string",
-              "enumDescriptions": [
-                "The matter has no specified state.",
-                "This matter is open.",
-                "This matter is closed.",
-                "This matter is deleted."
-              ],
-              "enum": [
-                "STATE_UNSPECIFIED",
-                "OPEN",
-                "CLOSED",
-                "DELETED"
-              ],
-              "description": "If set, list only matters with that specific state. The default is listing matters of all states."
-            },
-            "pageToken": {
-              "type": "string",
-              "location": "query",
-              "description": "The pagination token as returned in the response."
-            },
-            "view": {
-              "type": "string",
-              "enum": [
-                "VIEW_UNSPECIFIED",
-                "BASIC",
-                "FULL"
-              ],
-              "location": "query",
-              "enumDescriptions": [
-                "There is no specified view.",
-                "Response includes the matter_id, name, description, and state. Default choice.",
-                "Full representation of matter is returned. Everything above and including MatterPermissions list."
-              ],
-              "description": "Specifies which parts of the matter to return in response."
-            },
-            "pageSize": {
-              "type": "integer",
-              "description": "The number of matters to return in the response. Default and maximum are 100.",
-              "location": "query",
-              "format": "int32"
-            }
-          },
-          "flatPath": "v1/matters",
-          "path": "v1/matters",
-          "description": "Lists matters the user has access to."
-        },
-        "close": {
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/ediscovery"
-          ],
-          "path": "v1/matters/{matterId}:close",
-          "id": "vault.matters.close",
-          "description": "Closes the specified matter. Returns matter with updated state.",
-          "response": {
-            "$ref": "CloseMatterResponse"
-          },
-          "flatPath": "v1/matters/{matterId}:close",
-          "parameterOrder": [
-            "matterId"
-          ],
-          "parameters": {
-            "matterId": {
-              "location": "path",
-              "type": "string",
-              "required": true,
-              "description": "The matter ID."
-            }
-          },
-          "request": {
-            "$ref": "CloseMatterRequest"
-          }
-        },
-        "addPermissions": {
-          "path": "v1/matters/{matterId}:addPermissions",
-          "parameters": {
-            "matterId": {
-              "description": "The matter ID.",
-              "type": "string",
-              "required": true,
-              "location": "path"
-            }
-          },
-          "response": {
-            "$ref": "MatterPermission"
-          },
-          "flatPath": "v1/matters/{matterId}:addPermissions",
-          "request": {
-            "$ref": "AddMatterPermissionsRequest"
-          },
-          "httpMethod": "POST",
-          "parameterOrder": [
-            "matterId"
-          ],
-          "id": "vault.matters.addPermissions",
-          "description": "Adds an account as a matter collaborator.",
-          "scopes": [
-            "https://www.googleapis.com/auth/ediscovery"
-          ]
-        },
-        "get": {
-          "httpMethod": "GET",
-          "parameters": {
-            "view": {
-              "description": "Specifies which parts of the Matter to return in the response.",
-              "enum": [
-                "VIEW_UNSPECIFIED",
-                "BASIC",
-                "FULL"
-              ],
-              "enumDescriptions": [
-                "There is no specified view.",
-                "Response includes the matter_id, name, description, and state. Default choice.",
-                "Full representation of matter is returned. Everything above and including MatterPermissions list."
-              ],
-              "location": "query",
-              "type": "string"
-            },
-            "matterId": {
-              "type": "string",
-              "location": "path",
-              "required": true,
-              "description": "The matter ID."
-            }
-          },
-          "path": "v1/matters/{matterId}",
-          "parameterOrder": [
-            "matterId"
-          ],
-          "flatPath": "v1/matters/{matterId}",
-          "description": "Gets the specified matter.",
-          "scopes": [
-            "https://www.googleapis.com/auth/ediscovery",
-            "https://www.googleapis.com/auth/ediscovery.readonly"
-          ],
-          "response": {
-            "$ref": "Matter"
-          },
-          "id": "vault.matters.get"
-        },
-        "removePermissions": {
-          "scopes": [
-            "https://www.googleapis.com/auth/ediscovery"
-          ],
-          "description": "Removes an account as a matter collaborator.",
-          "httpMethod": "POST",
-          "path": "v1/matters/{matterId}:removePermissions",
-          "request": {
-            "$ref": "RemoveMatterPermissionsRequest"
-          },
-          "flatPath": "v1/matters/{matterId}:removePermissions",
-          "parameters": {
-            "matterId": {
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "The matter ID."
-            }
-          },
-          "parameterOrder": [
-            "matterId"
-          ],
-          "id": "vault.matters.removePermissions",
-          "response": {
-            "$ref": "Empty"
-          }
-        },
-        "count": {
-          "id": "vault.matters.count",
-          "response": {
-            "$ref": "Operation"
-          },
-          "description": "Counts the artifacts within the context of a matter and returns a detailed breakdown of metrics.",
-          "scopes": [
-            "https://www.googleapis.com/auth/ediscovery"
-          ],
-          "request": {
-            "$ref": "CountArtifactsRequest"
-          },
-          "path": "v1/matters/{matterId}:count",
-          "parameterOrder": [
-            "matterId"
-          ],
-          "httpMethod": "POST",
-          "parameters": {
-            "matterId": {
-              "required": true,
-              "location": "path",
-              "description": "The matter ID.",
-              "type": "string"
-            }
-          },
-          "flatPath": "v1/matters/{matterId}:count"
-        },
-        "delete": {
-          "parameters": {
-            "matterId": {
-              "location": "path",
-              "required": true,
-              "type": "string",
-              "description": "The matter ID"
-            }
-          },
-          "id": "vault.matters.delete",
-          "response": {
-            "$ref": "Matter"
-          },
-          "flatPath": "v1/matters/{matterId}",
-          "path": "v1/matters/{matterId}",
-          "description": "Deletes the specified matter. Returns matter with updated state.",
-          "httpMethod": "DELETE",
-          "parameterOrder": [
-            "matterId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/ediscovery"
-          ]
-        },
-        "reopen": {
-          "path": "v1/matters/{matterId}:reopen",
-          "request": {
-            "$ref": "ReopenMatterRequest"
-          },
-          "httpMethod": "POST",
-          "description": "Reopens the specified matter. Returns matter with updated state.",
-          "response": {
-            "$ref": "ReopenMatterResponse"
-          },
-          "parameterOrder": [
-            "matterId"
-          ],
-          "id": "vault.matters.reopen",
-          "flatPath": "v1/matters/{matterId}:reopen",
-          "parameters": {
-            "matterId": {
-              "required": true,
-              "description": "The matter ID.",
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/ediscovery"
-          ]
-        },
-        "update": {
-          "id": "vault.matters.update",
-          "parameterOrder": [
-            "matterId"
-          ],
-          "parameters": {
-            "matterId": {
-              "required": true,
-              "description": "The matter ID.",
-              "location": "path",
-              "type": "string"
-            }
-          },
-          "path": "v1/matters/{matterId}",
-          "scopes": [
-            "https://www.googleapis.com/auth/ediscovery"
-          ],
-          "flatPath": "v1/matters/{matterId}",
-          "httpMethod": "PUT",
-          "response": {
-            "$ref": "Matter"
-          },
-          "description": "Updates the specified matter. This updates only the name and description of the matter, identified by matter ID. Changes to any other fields are ignored. Returns the default view of the matter.",
-          "request": {
-            "$ref": "Matter"
-          }
-        },
-        "create": {
-          "flatPath": "v1/matters",
-          "parameterOrder": [],
-          "id": "vault.matters.create",
-          "response": {
-            "$ref": "Matter"
-          },
-          "description": "Creates a new matter with the given name and description. The initial state is open, and the owner is the method caller. Returns the created matter with default view.",
-          "request": {
-            "$ref": "Matter"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/ediscovery"
-          ],
-          "httpMethod": "POST",
-          "parameters": {},
-          "path": "v1/matters"
-        }
-      }
-    }
-  },
-  "name": "vault",
-  "ownerDomain": "google.com",
-  "title": "G Suite Vault API",
-  "ownerName": "Google",
-  "version_module": true,
-  "protocol": "rest",
-  "batchPath": "batch",
-  "discoveryVersion": "v1",
-  "version": "v1",
-  "rootUrl": "https://vault.googleapis.com/",
-  "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
-  },
-  "basePath": "",
-  "kind": "discovery#restDescription",
-  "fullyEncodeReservedExpansion": true,
-  "revision": "20201117",
-  "description": "Archiving and eDiscovery for G Suite.",
-  "id": "vault:v1"
-}
+    },
+    "servicePath": "",
+    "title": "G Suite Vault API",
+    "version": "v1",
+    "version_module": true
+}
\ No newline at end of file
diff --git a/googleapiclient/discovery_cache/documents/workflows.v1.json b/googleapiclient/discovery_cache/documents/workflows.v1.json
new file mode 100644
index 0000000..abaaa54
--- /dev/null
+++ b/googleapiclient/discovery_cache/documents/workflows.v1.json
@@ -0,0 +1,713 @@
+{
+  "rootUrl": "https://workflows.googleapis.com/",
+  "fullyEncodeReservedExpansion": true,
+  "id": "workflows:v1",
+  "basePath": "",
+  "ownerDomain": "google.com",
+  "revision": "20210126",
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/cloud-platform": {
+          "description": "View and manage your data across Google Cloud Platform services"
+        }
+      }
+    }
+  },
+  "ownerName": "Google",
+  "version_module": true,
+  "batchPath": "batch",
+  "version": "v1",
+  "description": "Orchestrate Workflows consisting of Google Cloud APIs, SaaS APIs or private API endpoints.",
+  "kind": "discovery#restDescription",
+  "protocol": "rest",
+  "icons": {
+    "x32": "http://www.google.com/images/icons/product/search-32.gif",
+    "x16": "http://www.google.com/images/icons/product/search-16.gif"
+  },
+  "mtlsRootUrl": "https://workflows.mtls.googleapis.com/",
+  "schemas": {
+    "ListWorkflowsResponse": {
+      "type": "object",
+      "description": "Response for the ListWorkflows method.",
+      "id": "ListWorkflowsResponse",
+      "properties": {
+        "unreachable": {
+          "items": {
+            "type": "string"
+          },
+          "description": "Unreachable resources.",
+          "type": "array"
+        },
+        "workflows": {
+          "type": "array",
+          "description": "The workflows which match the request.",
+          "items": {
+            "$ref": "Workflow"
+          }
+        },
+        "nextPageToken": {
+          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
+          "type": "string"
+        }
+      }
+    },
+    "Workflow": {
+      "properties": {
+        "updateTime": {
+          "format": "google-datetime",
+          "type": "string",
+          "readOnly": true,
+          "description": "Output only. The last update timestamp of the workflow."
+        },
+        "state": {
+          "enumDescriptions": [
+            "Invalid state.",
+            "The workflow has been deployed successfully and is serving."
+          ],
+          "readOnly": true,
+          "enum": [
+            "STATE_UNSPECIFIED",
+            "ACTIVE"
+          ],
+          "type": "string",
+          "description": "Output only. State of the workflow deployment."
+        },
+        "revisionId": {
+          "description": "Output only. The revision of the workflow. A new revision of a workflow is created as a result of updating the following properties of a workflow: - Service account - Workflow code to be executed The format is \"000001-a4d\", where the first 6 characters define the zero-padded revision ordinal number. They are followed by a hyphen and 3 hexadecimal random characters.",
+          "readOnly": true,
+          "type": "string"
+        },
+        "sourceContents": {
+          "type": "string",
+          "description": "Workflow code to be executed. The size limit is 32KB."
+        },
+        "labels": {
+          "description": "Labels associated with this workflow. Labels can contain at most 64 entries. Keys and values can be no longer than 63 characters and can only contain lowercase letters, numeric characters, underscores and dashes. Label keys must start with a letter. International characters are allowed.",
+          "type": "object",
+          "additionalProperties": {
+            "type": "string"
+          }
+        },
+        "revisionCreateTime": {
+          "description": "Output only. The timestamp that the latest revision of the workflow was created.",
+          "format": "google-datetime",
+          "type": "string",
+          "readOnly": true
+        },
+        "description": {
+          "description": "Description of the workflow provided by the user. Must be at most 1000 unicode characters long.",
+          "type": "string"
+        },
+        "serviceAccount": {
+          "description": "Name of the service account associated with the latest workflow version. This service account represents the identity of the workflow and determines what permissions the workflow has. Format: projects/{project}/serviceAccounts/{account} Using `-` as a wildcard for the `{project}` will infer the project from the account. The `{account}` value can be the `email` address or the `unique_id` of the service account. If not provided, workflow will use the project's default service account. Modifying this field for an existing workflow results in a new workflow revision.",
+          "type": "string"
+        },
+        "createTime": {
+          "type": "string",
+          "description": "Output only. The timestamp of when the workflow was created.",
+          "format": "google-datetime",
+          "readOnly": true
+        },
+        "name": {
+          "type": "string",
+          "description": "The resource name of the workflow. Format: projects/{project}/locations/{location}/workflows/{workflow}"
+        }
+      },
+      "id": "Workflow",
+      "description": "Workflow program to be executed by Workflows.",
+      "type": "object"
+    },
+    "Status": {
+      "properties": {
+        "details": {
+          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+          "type": "array",
+          "items": {
+            "type": "object",
+            "additionalProperties": {
+              "description": "Properties of the object. Contains field @type with type URL.",
+              "type": "any"
+            }
+          }
+        },
+        "code": {
+          "type": "integer",
+          "format": "int32",
+          "description": "The status code, which should be an enum value of google.rpc.Code."
+        },
+        "message": {
+          "type": "string",
+          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client."
+        }
+      },
+      "id": "Status",
+      "type": "object",
+      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors)."
+    },
+    "Operation": {
+      "type": "object",
+      "id": "Operation",
+      "properties": {
+        "response": {
+          "type": "object",
+          "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
+          "additionalProperties": {
+            "description": "Properties of the object. Contains field @type with type URL.",
+            "type": "any"
+          }
+        },
+        "error": {
+          "description": "The error result of the operation in case of failure or cancellation.",
+          "$ref": "Status"
+        },
+        "done": {
+          "type": "boolean",
+          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available."
+        },
+        "metadata": {
+          "additionalProperties": {
+            "description": "Properties of the object. Contains field @type with type URL.",
+            "type": "any"
+          },
+          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
+          "type": "object"
+        },
+        "name": {
+          "type": "string",
+          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`."
+        }
+      },
+      "description": "This resource represents a long-running operation that is the result of a network API call."
+    },
+    "ListOperationsResponse": {
+      "id": "ListOperationsResponse",
+      "properties": {
+        "operations": {
+          "items": {
+            "$ref": "Operation"
+          },
+          "type": "array",
+          "description": "A list of operations that matches the specified filter in the request."
+        },
+        "nextPageToken": {
+          "description": "The standard List next-page token.",
+          "type": "string"
+        }
+      },
+      "description": "The response message for Operations.ListOperations.",
+      "type": "object"
+    },
+    "Empty": {
+      "type": "object",
+      "properties": {},
+      "id": "Empty",
+      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`."
+    },
+    "Location": {
+      "description": "A resource that represents Google Cloud Platform location.",
+      "type": "object",
+      "properties": {
+        "locationId": {
+          "description": "The canonical id for this location. For example: `\"us-east1\"`.",
+          "type": "string"
+        },
+        "metadata": {
+          "additionalProperties": {
+            "type": "any",
+            "description": "Properties of the object. Contains field @type with type URL."
+          },
+          "description": "Service-specific metadata. For example the available capacity at the given location.",
+          "type": "object"
+        },
+        "displayName": {
+          "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\".",
+          "type": "string"
+        },
+        "name": {
+          "type": "string",
+          "description": "Resource name for the location, which may vary between implementations. For example: `\"projects/example-project/locations/us-east1\"`"
+        },
+        "labels": {
+          "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}",
+          "additionalProperties": {
+            "type": "string"
+          },
+          "type": "object"
+        }
+      },
+      "id": "Location"
+    },
+    "ListLocationsResponse": {
+      "properties": {
+        "nextPageToken": {
+          "description": "The standard List next-page token.",
+          "type": "string"
+        },
+        "locations": {
+          "items": {
+            "$ref": "Location"
+          },
+          "type": "array",
+          "description": "A list of locations that matches the specified filter in the request."
+        }
+      },
+      "description": "The response message for Locations.ListLocations.",
+      "type": "object",
+      "id": "ListLocationsResponse"
+    },
+    "OperationMetadata": {
+      "type": "object",
+      "description": "Represents the metadata of the long-running operation.",
+      "id": "OperationMetadata",
+      "properties": {
+        "endTime": {
+          "type": "string",
+          "format": "google-datetime",
+          "description": "The time the operation finished running."
+        },
+        "createTime": {
+          "format": "google-datetime",
+          "description": "The time the operation was created.",
+          "type": "string"
+        },
+        "target": {
+          "type": "string",
+          "description": "Server-defined resource path for the target of the operation."
+        },
+        "apiVersion": {
+          "description": "API version used to start the operation.",
+          "type": "string"
+        },
+        "verb": {
+          "type": "string",
+          "description": "Name of the verb executed by the operation."
+        }
+      }
+    }
+  },
+  "baseUrl": "https://workflows.googleapis.com/",
+  "servicePath": "",
+  "canonicalName": "Workflows",
+  "title": "Workflows API",
+  "parameters": {
+    "quotaUser": {
+      "location": "query",
+      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+      "type": "string"
+    },
+    "$.xgafv": {
+      "location": "query",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "enum": [
+        "1",
+        "2"
+      ],
+      "type": "string",
+      "description": "V1 error format."
+    },
+    "callback": {
+      "location": "query",
+      "type": "string",
+      "description": "JSONP"
+    },
+    "upload_protocol": {
+      "type": "string",
+      "location": "query",
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
+    },
+    "prettyPrint": {
+      "location": "query",
+      "default": "true",
+      "type": "boolean",
+      "description": "Returns response with indentations and line breaks."
+    },
+    "access_token": {
+      "description": "OAuth access token.",
+      "location": "query",
+      "type": "string"
+    },
+    "fields": {
+      "location": "query",
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string"
+    },
+    "key": {
+      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+      "type": "string",
+      "location": "query"
+    },
+    "uploadType": {
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "type": "string"
+    },
+    "oauth_token": {
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string"
+    },
+    "alt": {
+      "location": "query",
+      "description": "Data format for response.",
+      "type": "string",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ],
+      "enumDescriptions": [
+        "Responses with Content-Type of application/json",
+        "Media download with context-dependent Content-Type",
+        "Responses with Content-Type of application/x-protobuf"
+      ],
+      "default": "json"
+    }
+  },
+  "documentationLink": "https://cloud.google.com/workflows",
+  "resources": {
+    "projects": {
+      "resources": {
+        "locations": {
+          "resources": {
+            "workflows": {
+              "methods": {
+                "delete": {
+                  "description": "Deletes a workflow with the specified name. This method also cancels and deletes all running executions of the workflow.",
+                  "id": "workflows.projects.locations.workflows.delete",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "path": "v1/{+name}",
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/workflows/{workflowsId}",
+                  "parameters": {
+                    "name": {
+                      "description": "Required. Name of the workflow to be deleted. Format: projects/{project}/locations/{location}/workflows/{workflow}",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/workflows/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "httpMethod": "DELETE"
+                },
+                "list": {
+                  "id": "workflows.projects.locations.workflows.list",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/workflows",
+                  "httpMethod": "GET",
+                  "parameters": {
+                    "pageSize": {
+                      "location": "query",
+                      "description": "Maximum number of workflows to return per call. The service may return fewer than this value. If the value is not specified, a default value of 500 will be used. The maximum permitted value is 1000 and values greater than 1000 will be coerced down to 1000.",
+                      "type": "integer",
+                      "format": "int32"
+                    },
+                    "filter": {
+                      "location": "query",
+                      "type": "string",
+                      "description": "Filter to restrict results to specific workflows."
+                    },
+                    "parent": {
+                      "required": true,
+                      "description": "Required. Project and location from which the workflows should be listed. Format: projects/{project}/locations/{location}",
+                      "location": "path",
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/locations/[^/]+$"
+                    },
+                    "pageToken": {
+                      "description": "A page token, received from a previous `ListWorkflows` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListWorkflows` must match the call that provided the page token.",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "orderBy": {
+                      "type": "string",
+                      "location": "query",
+                      "description": "Comma-separated list of fields that that specify the order of the results. Default sorting order for a field is ascending. To specify descending order for a field, append a \" desc\" suffix. If not specified, the results will be returned in an unspecified order."
+                    }
+                  },
+                  "path": "v1/{+parent}/workflows",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "response": {
+                    "$ref": "ListWorkflowsResponse"
+                  },
+                  "description": "Lists Workflows in a given project and location. The default order is not specified."
+                },
+                "create": {
+                  "description": "Creates a new workflow. If a workflow with the specified name already exists in the specified project and location, the long running operation will return ALREADY_EXISTS error.",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "httpMethod": "POST",
+                  "parameters": {
+                    "parent": {
+                      "description": "Required. Project and location in which the workflow should be created. Format: projects/{project}/locations/{location}",
+                      "location": "path",
+                      "required": true,
+                      "pattern": "^projects/[^/]+/locations/[^/]+$",
+                      "type": "string"
+                    },
+                    "workflowId": {
+                      "description": "Required. The ID of the workflow to be created. It has to fulfill the following requirements: * Must contain only letters, numbers, underscores and hyphens. * Must start with a letter. * Must be between 1-64 characters. * Must end with a number or a letter. * Must be unique within the customer project and location.",
+                      "location": "query",
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+parent}/workflows",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/workflows",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "id": "workflows.projects.locations.workflows.create",
+                  "request": {
+                    "$ref": "Workflow"
+                  }
+                },
+                "get": {
+                  "response": {
+                    "$ref": "Workflow"
+                  },
+                  "httpMethod": "GET",
+                  "description": "Gets details of a single Workflow.",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/workflows/{workflowsId}",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "path": "v1/{+name}",
+                  "id": "workflows.projects.locations.workflows.get",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "required": true,
+                      "location": "path",
+                      "type": "string",
+                      "description": "Required. Name of the workflow which information should be retrieved. Format: projects/{project}/locations/{location}/workflows/{workflow}",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/workflows/[^/]+$"
+                    }
+                  }
+                },
+                "patch": {
+                  "description": "Updates an existing workflow. Running this method has no impact on already running executions of the workflow. A new revision of the workflow may be created as a result of a successful update operation. In that case, such revision will be used in new workflow executions.",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "id": "workflows.projects.locations.workflows.patch",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/workflows/{workflowsId}",
+                  "path": "v1/{+name}",
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "parameters": {
+                    "name": {
+                      "required": true,
+                      "pattern": "^projects/[^/]+/locations/[^/]+/workflows/[^/]+$",
+                      "type": "string",
+                      "description": "The resource name of the workflow. Format: projects/{project}/locations/{location}/workflows/{workflow}",
+                      "location": "path"
+                    },
+                    "updateMask": {
+                      "type": "string",
+                      "description": "List of fields to be updated. If not present, the entire workflow will be updated.",
+                      "location": "query",
+                      "format": "google-fieldmask"
+                    }
+                  },
+                  "httpMethod": "PATCH",
+                  "request": {
+                    "$ref": "Workflow"
+                  }
+                }
+              }
+            },
+            "operations": {
+              "methods": {
+                "list": {
+                  "id": "workflows.projects.locations.operations.list",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "response": {
+                    "$ref": "ListOperationsResponse"
+                  },
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
+                  "path": "v1/{+name}/operations",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations",
+                  "parameters": {
+                    "name": {
+                      "type": "string",
+                      "required": true,
+                      "description": "The name of the operation's parent resource.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+$"
+                    },
+                    "pageToken": {
+                      "location": "query",
+                      "description": "The standard list page token.",
+                      "type": "string"
+                    },
+                    "filter": {
+                      "description": "The standard list filter.",
+                      "type": "string",
+                      "location": "query"
+                    },
+                    "pageSize": {
+                      "location": "query",
+                      "format": "int32",
+                      "description": "The standard list page size.",
+                      "type": "integer"
+                    }
+                  },
+                  "httpMethod": "GET"
+                },
+                "get": {
+                  "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "path": "v1/{+name}",
+                  "parameters": {
+                    "name": {
+                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
+                      "required": true,
+                      "type": "string",
+                      "location": "path",
+                      "description": "The name of the operation resource."
+                    }
+                  },
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "id": "workflows.projects.locations.operations.get",
+                  "httpMethod": "GET",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                },
+                "delete": {
+                  "id": "workflows.projects.locations.operations.delete",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "path": "v1/{+name}",
+                  "response": {
+                    "$ref": "Empty"
+                  },
+                  "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.",
+                  "httpMethod": "DELETE",
+                  "parameters": {
+                    "name": {
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
+                      "description": "The name of the operation resource to be deleted.",
+                      "required": true,
+                      "type": "string"
+                    }
+                  }
+                }
+              }
+            }
+          },
+          "methods": {
+            "get": {
+              "id": "workflows.projects.locations.get",
+              "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "description": "Gets information about a location.",
+              "parameters": {
+                "name": {
+                  "pattern": "^projects/[^/]+/locations/[^/]+$",
+                  "type": "string",
+                  "required": true,
+                  "description": "Resource name for the location.",
+                  "location": "path"
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/locations/{locationsId}",
+              "response": {
+                "$ref": "Location"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "path": "v1/{+name}"
+            },
+            "list": {
+              "description": "Lists information about the supported locations for this service.",
+              "flatPath": "v1/projects/{projectsId}/locations",
+              "response": {
+                "$ref": "ListLocationsResponse"
+              },
+              "path": "v1/{+name}/locations",
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "name"
+              ],
+              "id": "workflows.projects.locations.list",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "filter": {
+                  "description": "The standard list filter.",
+                  "location": "query",
+                  "type": "string"
+                },
+                "name": {
+                  "pattern": "^projects/[^/]+$",
+                  "description": "The resource that owns the locations collection, if applicable.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                },
+                "pageToken": {
+                  "description": "The standard list page token.",
+                  "location": "query",
+                  "type": "string"
+                },
+                "pageSize": {
+                  "format": "int32",
+                  "description": "The standard list page size.",
+                  "type": "integer",
+                  "location": "query"
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  },
+  "discoveryVersion": "v1",
+  "name": "workflows"
+}
diff --git a/googleapiclient/discovery_cache/documents/workflows.v1beta.json b/googleapiclient/discovery_cache/documents/workflows.v1beta.json
index 95fd584..3c70acb 100644
--- a/googleapiclient/discovery_cache/documents/workflows.v1beta.json
+++ b/googleapiclient/discovery_cache/documents/workflows.v1beta.json
@@ -1,713 +1,713 @@
 {
-  "version": "v1beta",
-  "fullyEncodeReservedExpansion": true,
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
+    "auth": {
+        "oauth2": {
+            "scopes": {
+                "https://www.googleapis.com/auth/cloud-platform": {
+                    "description": "View and manage your data across Google Cloud Platform services"
+                }
+            }
         }
-      }
-    }
-  },
-  "mtlsRootUrl": "https://workflows.mtls.googleapis.com/",
-  "basePath": "",
-  "discoveryVersion": "v1",
-  "title": "Workflows API",
-  "documentationLink": "https://cloud.google.com/workflows",
-  "version_module": true,
-  "description": "Orchestrate Workflows consisting of Google Cloud APIs, SaaS APIs or private API endpoints.",
-  "schemas": {
-    "Workflow": {
-      "properties": {
-        "description": {
-          "description": "Description of the workflow provided by the user. Must be at most 1000 unicode characters long.",
-          "type": "string"
-        },
-        "serviceAccount": {
-          "description": "Name of the service account associated with the latest workflow version. This service account represents the identity of the workflow and determines what permissions the workflow has. Format: projects/{project}/serviceAccounts/{account} Using `-` as a wildcard for the `{project}` will infer the project from the account. The `{account}` value can be the `email` address or the `unique_id` of the service account. If not provided, workflow will use the project's default service account. Modifying this field for an existing workflow results in a new workflow revision.",
-          "type": "string"
-        },
-        "labels": {
-          "type": "object",
-          "description": "Labels associated with this workflow. Labels can contain at most 64 entries. Keys and values can be no longer than 63 characters and can only contain lowercase letters, numeric characters, underscores and dashes. Label keys must start with a letter. International characters are allowed.",
-          "additionalProperties": {
+    },
+    "basePath": "",
+    "baseUrl": "https://workflows.googleapis.com/",
+    "batchPath": "batch",
+    "canonicalName": "Workflows",
+    "description": "Orchestrate Workflows consisting of Google Cloud APIs, SaaS APIs or private API endpoints.",
+    "discoveryVersion": "v1",
+    "documentationLink": "https://cloud.google.com/workflows",
+    "fullyEncodeReservedExpansion": true,
+    "icons": {
+        "x16": "http://www.google.com/images/icons/product/search-16.gif",
+        "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    },
+    "id": "workflows:v1beta",
+    "kind": "discovery#restDescription",
+    "mtlsRootUrl": "https://workflows.mtls.googleapis.com/",
+    "name": "workflows",
+    "ownerDomain": "google.com",
+    "ownerName": "Google",
+    "parameters": {
+        "$.xgafv": {
+            "description": "V1 error format.",
+            "enum": [
+                "1",
+                "2"
+            ],
+            "enumDescriptions": [
+                "v1 error format",
+                "v2 error format"
+            ],
+            "location": "query",
             "type": "string"
-          }
         },
-        "createTime": {
-          "description": "Output only. The timestamp of when the workflow was created.",
-          "type": "string",
-          "format": "google-datetime",
-          "readOnly": true
-        },
-        "sourceContents": {
-          "type": "string",
-          "description": "Workflow code to be executed. The size limit is 32KB."
-        },
-        "revisionCreateTime": {
-          "format": "google-datetime",
-          "description": "Output only. The timestamp that the latest revision of the workflow was created.",
-          "type": "string",
-          "readOnly": true
-        },
-        "revisionId": {
-          "description": "Output only. The revision of the workflow. A new revision of a workflow is created as a result of updating the following fields of a workflow: - `source_code` - `service_account` The format is \"000001-a4d\", where the first 6 characters define the zero-padded revision ordinal number. They are followed by a hyphen and 3 hexadecimal random characters.",
-          "readOnly": true,
-          "type": "string"
-        },
-        "state": {
-          "type": "string",
-          "description": "Output only. State of the workflow deployment.",
-          "readOnly": true,
-          "enum": [
-            "STATE_UNSPECIFIED",
-            "ACTIVE"
-          ],
-          "enumDescriptions": [
-            "Invalid state.",
-            "The workflow has been deployed successfully and is serving."
-          ]
-        },
-        "name": {
-          "description": "The resource name of the workflow. Format: projects/{project}/locations/{location}/workflows/{workflow}",
-          "type": "string"
-        },
-        "updateTime": {
-          "description": "Output only. The last update timestamp of the workflow.",
-          "readOnly": true,
-          "type": "string",
-          "format": "google-datetime"
-        }
-      },
-      "id": "Workflow",
-      "type": "object",
-      "description": "Workflow program to be executed by Workflows."
-    },
-    "Location": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "Resource name for the location, which may vary between implementations. For example: `\"projects/example-project/locations/us-east1\"`"
-        },
-        "displayName": {
-          "type": "string",
-          "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\"."
-        },
-        "locationId": {
-          "type": "string",
-          "description": "The canonical id for this location. For example: `\"us-east1\"`."
-        },
-        "labels": {
-          "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}",
-          "additionalProperties": {
+        "access_token": {
+            "description": "OAuth access token.",
+            "location": "query",
             "type": "string"
-          },
-          "type": "object"
         },
-        "metadata": {
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "Service-specific metadata. For example the available capacity at the given location.",
-          "type": "object"
-        }
-      },
-      "id": "Location",
-      "description": "A resource that represents Google Cloud Platform location."
-    },
-    "ListOperationsResponse": {
-      "type": "object",
-      "description": "The response message for Operations.ListOperations.",
-      "id": "ListOperationsResponse",
-      "properties": {
-        "operations": {
-          "type": "array",
-          "items": {
-            "$ref": "Operation"
-          },
-          "description": "A list of operations that matches the specified filter in the request."
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "The standard List next-page token."
-        }
-      }
-    },
-    "OperationMetadata": {
-      "id": "OperationMetadata",
-      "description": "Represents the metadata of the long-running operation.",
-      "type": "object",
-      "properties": {
-        "verb": {
-          "description": "Name of the verb executed by the operation.",
-          "type": "string"
-        },
-        "target": {
-          "description": "Server-defined resource path for the target of the operation.",
-          "type": "string"
-        },
-        "apiVersion": {
-          "description": "API version used to start the operation.",
-          "type": "string"
-        },
-        "createTime": {
-          "description": "The time the operation was created.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "endTime": {
-          "type": "string",
-          "description": "The time the operation finished running.",
-          "format": "google-datetime"
-        }
-      }
-    },
-    "ListWorkflowsResponse": {
-      "id": "ListWorkflowsResponse",
-      "properties": {
-        "workflows": {
-          "items": {
-            "$ref": "Workflow"
-          },
-          "type": "array",
-          "description": "The workflows which match the request."
-        },
-        "unreachable": {
-          "items": {
+        "alt": {
+            "default": "json",
+            "description": "Data format for response.",
+            "enum": [
+                "json",
+                "media",
+                "proto"
+            ],
+            "enumDescriptions": [
+                "Responses with Content-Type of application/json",
+                "Media download with context-dependent Content-Type",
+                "Responses with Content-Type of application/x-protobuf"
+            ],
+            "location": "query",
             "type": "string"
-          },
-          "description": "Unreachable resources.",
-          "type": "array"
         },
-        "nextPageToken": {
-          "type": "string",
-          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages."
-        }
-      },
-      "type": "object",
-      "description": "Response for the ListWorkflows method."
-    },
-    "ListLocationsResponse": {
-      "properties": {
-        "nextPageToken": {
-          "description": "The standard List next-page token.",
-          "type": "string"
+        "callback": {
+            "description": "JSONP",
+            "location": "query",
+            "type": "string"
         },
-        "locations": {
-          "description": "A list of locations that matches the specified filter in the request.",
-          "items": {
-            "$ref": "Location"
-          },
-          "type": "array"
+        "fields": {
+            "description": "Selector specifying which fields to include in a partial response.",
+            "location": "query",
+            "type": "string"
+        },
+        "key": {
+            "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+            "location": "query",
+            "type": "string"
+        },
+        "oauth_token": {
+            "description": "OAuth 2.0 token for the current user.",
+            "location": "query",
+            "type": "string"
+        },
+        "prettyPrint": {
+            "default": "true",
+            "description": "Returns response with indentations and line breaks.",
+            "location": "query",
+            "type": "boolean"
+        },
+        "quotaUser": {
+            "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+            "location": "query",
+            "type": "string"
+        },
+        "uploadType": {
+            "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+            "location": "query",
+            "type": "string"
+        },
+        "upload_protocol": {
+            "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+            "location": "query",
+            "type": "string"
         }
-      },
-      "type": "object",
-      "id": "ListLocationsResponse",
-      "description": "The response message for Locations.ListLocations."
     },
-    "Empty": {
-      "type": "object",
-      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
-      "properties": {},
-      "id": "Empty"
+    "protocol": "rest",
+    "resources": {
+        "projects": {
+            "resources": {
+                "locations": {
+                    "methods": {
+                        "get": {
+                            "description": "Gets information about a location.",
+                            "flatPath": "v1beta/projects/{projectsId}/locations/{locationsId}",
+                            "httpMethod": "GET",
+                            "id": "workflows.projects.locations.get",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "name": {
+                                    "description": "Resource name for the location.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta/{+name}",
+                            "response": {
+                                "$ref": "Location"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        },
+                        "list": {
+                            "description": "Lists information about the supported locations for this service.",
+                            "flatPath": "v1beta/projects/{projectsId}/locations",
+                            "httpMethod": "GET",
+                            "id": "workflows.projects.locations.list",
+                            "parameterOrder": [
+                                "name"
+                            ],
+                            "parameters": {
+                                "filter": {
+                                    "description": "The standard list filter.",
+                                    "location": "query",
+                                    "type": "string"
+                                },
+                                "name": {
+                                    "description": "The resource that owns the locations collection, if applicable.",
+                                    "location": "path",
+                                    "pattern": "^projects/[^/]+$",
+                                    "required": true,
+                                    "type": "string"
+                                },
+                                "pageSize": {
+                                    "description": "The standard list page size.",
+                                    "format": "int32",
+                                    "location": "query",
+                                    "type": "integer"
+                                },
+                                "pageToken": {
+                                    "description": "The standard list page token.",
+                                    "location": "query",
+                                    "type": "string"
+                                }
+                            },
+                            "path": "v1beta/{+name}/locations",
+                            "response": {
+                                "$ref": "ListLocationsResponse"
+                            },
+                            "scopes": [
+                                "https://www.googleapis.com/auth/cloud-platform"
+                            ]
+                        }
+                    },
+                    "resources": {
+                        "operations": {
+                            "methods": {
+                                "delete": {
+                                    "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.",
+                                    "flatPath": "v1beta/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "workflows.projects.locations.operations.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The name of the operation resource to be deleted.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta/{+name}",
+                                    "response": {
+                                        "$ref": "Empty"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
+                                    "flatPath": "v1beta/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
+                                    "httpMethod": "GET",
+                                    "id": "workflows.projects.locations.operations.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The name of the operation resource.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta/{+name}",
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
+                                    "flatPath": "v1beta/projects/{projectsId}/locations/{locationsId}/operations",
+                                    "httpMethod": "GET",
+                                    "id": "workflows.projects.locations.operations.list",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "filter": {
+                                            "description": "The standard list filter.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "name": {
+                                            "description": "The name of the operation's parent resource.",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "The standard list page size.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "The standard list page token.",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta/{+name}/operations",
+                                    "response": {
+                                        "$ref": "ListOperationsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
+                            }
+                        },
+                        "workflows": {
+                            "methods": {
+                                "create": {
+                                    "description": "Creates a new workflow. If a workflow with the specified name already exists in the specified project and location, the long running operation will return ALREADY_EXISTS error.",
+                                    "flatPath": "v1beta/projects/{projectsId}/locations/{locationsId}/workflows",
+                                    "httpMethod": "POST",
+                                    "id": "workflows.projects.locations.workflows.create",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "parent": {
+                                            "description": "Required. Project and location in which the workflow should be created. Format: projects/{project}/locations/{location}",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "workflowId": {
+                                            "description": "Required. The ID of the workflow to be created. It has to fulfill the following requirements: * Must contain only letters, numbers, underscores and hyphens. * Must start with a letter. * Must be between 1-64 characters. * Must end with a number or a letter. * Must be unique within the customer project and location.",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta/{+parent}/workflows",
+                                    "request": {
+                                        "$ref": "Workflow"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "delete": {
+                                    "description": "Deletes a workflow with the specified name. This method also cancels and deletes all running executions of the workflow.",
+                                    "flatPath": "v1beta/projects/{projectsId}/locations/{locationsId}/workflows/{workflowsId}",
+                                    "httpMethod": "DELETE",
+                                    "id": "workflows.projects.locations.workflows.delete",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Name of the workflow to be deleted. Format: projects/{project}/locations/{location}/workflows/{workflow}",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/workflows/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta/{+name}",
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "get": {
+                                    "description": "Gets details of a single Workflow.",
+                                    "flatPath": "v1beta/projects/{projectsId}/locations/{locationsId}/workflows/{workflowsId}",
+                                    "httpMethod": "GET",
+                                    "id": "workflows.projects.locations.workflows.get",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "Required. Name of the workflow which information should be retrieved. Format: projects/{project}/locations/{location}/workflows/{workflow}",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/workflows/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta/{+name}",
+                                    "response": {
+                                        "$ref": "Workflow"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "list": {
+                                    "description": "Lists Workflows in a given project and location. The default order is not specified.",
+                                    "flatPath": "v1beta/projects/{projectsId}/locations/{locationsId}/workflows",
+                                    "httpMethod": "GET",
+                                    "id": "workflows.projects.locations.workflows.list",
+                                    "parameterOrder": [
+                                        "parent"
+                                    ],
+                                    "parameters": {
+                                        "filter": {
+                                            "description": "Filter to restrict results to specific workflows.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "orderBy": {
+                                            "description": "Comma-separated list of fields that that specify the order of the results. Default sorting order for a field is ascending. To specify descending order for a field, append a \" desc\" suffix. If not specified, the results will be returned in an unspecified order.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "pageSize": {
+                                            "description": "Maximum number of workflows to return per call. The service may return fewer than this value. If the value is not specified, a default value of 500 will be used. The maximum permitted value is 1000 and values greater than 1000 will be coerced down to 1000.",
+                                            "format": "int32",
+                                            "location": "query",
+                                            "type": "integer"
+                                        },
+                                        "pageToken": {
+                                            "description": "A page token, received from a previous `ListWorkflows` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListWorkflows` must match the call that provided the page token.",
+                                            "location": "query",
+                                            "type": "string"
+                                        },
+                                        "parent": {
+                                            "description": "Required. Project and location from which the workflows should be listed. Format: projects/{project}/locations/{location}",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta/{+parent}/workflows",
+                                    "response": {
+                                        "$ref": "ListWorkflowsResponse"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                },
+                                "patch": {
+                                    "description": "Updates an existing workflow. Running this method has no impact on already running executions of the workflow. A new revision of the workflow may be created as a result of a successful update operation. In that case, such revision will be used in new workflow executions.",
+                                    "flatPath": "v1beta/projects/{projectsId}/locations/{locationsId}/workflows/{workflowsId}",
+                                    "httpMethod": "PATCH",
+                                    "id": "workflows.projects.locations.workflows.patch",
+                                    "parameterOrder": [
+                                        "name"
+                                    ],
+                                    "parameters": {
+                                        "name": {
+                                            "description": "The resource name of the workflow. Format: projects/{project}/locations/{location}/workflows/{workflow}",
+                                            "location": "path",
+                                            "pattern": "^projects/[^/]+/locations/[^/]+/workflows/[^/]+$",
+                                            "required": true,
+                                            "type": "string"
+                                        },
+                                        "updateMask": {
+                                            "description": "List of fields to be updated. If not present, the entire workflow will be updated.",
+                                            "format": "google-fieldmask",
+                                            "location": "query",
+                                            "type": "string"
+                                        }
+                                    },
+                                    "path": "v1beta/{+name}",
+                                    "request": {
+                                        "$ref": "Workflow"
+                                    },
+                                    "response": {
+                                        "$ref": "Operation"
+                                    },
+                                    "scopes": [
+                                        "https://www.googleapis.com/auth/cloud-platform"
+                                    ]
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
     },
-    "Status": {
-      "type": "object",
-      "id": "Status",
-      "properties": {
-        "details": {
-          "type": "array",
-          "items": {
-            "additionalProperties": {
-              "description": "Properties of the object. Contains field @type with type URL.",
-              "type": "any"
+    "revision": "20201207",
+    "rootUrl": "https://workflows.googleapis.com/",
+    "schemas": {
+        "Empty": {
+            "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
+            "id": "Empty",
+            "properties": {},
+            "type": "object"
+        },
+        "ListLocationsResponse": {
+            "description": "The response message for Locations.ListLocations.",
+            "id": "ListLocationsResponse",
+            "properties": {
+                "locations": {
+                    "description": "A list of locations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Location"
+                    },
+                    "type": "array"
+                },
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
+                }
             },
             "type": "object"
-          },
-          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use."
         },
-        "code": {
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "message": {
-          "type": "string",
-          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client."
-        }
-      },
-      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors)."
-    },
-    "Operation": {
-      "id": "Operation",
-      "description": "This resource represents a long-running operation that is the result of a network API call.",
-      "properties": {
-        "error": {
-          "description": "The error result of the operation in case of failure or cancellation.",
-          "$ref": "Status"
-        },
-        "response": {
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "type": "object",
-          "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`."
-        },
-        "name": {
-          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
-          "type": "string"
-        },
-        "metadata": {
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
-          "type": "object"
-        },
-        "done": {
-          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
-          "type": "boolean"
-        }
-      },
-      "type": "object"
-    }
-  },
-  "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
-  },
-  "baseUrl": "https://workflows.googleapis.com/",
-  "protocol": "rest",
-  "servicePath": "",
-  "parameters": {
-    "alt": {
-      "location": "query",
-      "default": "json",
-      "enumDescriptions": [
-        "Responses with Content-Type of application/json",
-        "Media download with context-dependent Content-Type",
-        "Responses with Content-Type of application/x-protobuf"
-      ],
-      "description": "Data format for response.",
-      "type": "string",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ]
-    },
-    "quotaUser": {
-      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
-      "type": "string",
-      "location": "query"
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "type": "string",
-      "description": "V1 error format.",
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ]
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
-    "key": {
-      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
-      "type": "string",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "type": "boolean",
-      "default": "true",
-      "location": "query",
-      "description": "Returns response with indentations and line breaks."
-    },
-    "access_token": {
-      "location": "query",
-      "description": "OAuth access token.",
-      "type": "string"
-    },
-    "uploadType": {
-      "location": "query",
-      "type": "string",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
-    },
-    "callback": {
-      "type": "string",
-      "description": "JSONP",
-      "location": "query"
-    }
-  },
-  "batchPath": "batch",
-  "name": "workflows",
-  "canonicalName": "Workflows",
-  "ownerName": "Google",
-  "id": "workflows:v1beta",
-  "ownerDomain": "google.com",
-  "resources": {
-    "projects": {
-      "resources": {
-        "locations": {
-          "resources": {
-            "workflows": {
-              "methods": {
-                "create": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "workflowId": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "Required. The ID of the workflow to be created. It has to fulfill the following requirements: * Must contain only letters, numbers, underscores and hyphens. * Must start with a letter. * Must be between 1-64 characters. * Must end with a number or a letter. * Must be unique within the customer project and location."
-                    },
-                    "parent": {
-                      "location": "path",
-                      "type": "string",
-                      "description": "Required. Project and location in which the workflow should be created. Format: projects/{project}/locations/{location}",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+$"
-                    }
-                  },
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "flatPath": "v1beta/projects/{projectsId}/locations/{locationsId}/workflows",
-                  "httpMethod": "POST",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "request": {
-                    "$ref": "Workflow"
-                  },
-                  "path": "v1beta/{+parent}/workflows",
-                  "id": "workflows.projects.locations.workflows.create",
-                  "description": "Creates a new workflow. If a workflow with the specified name already exists in the specified project and location, the long running operation will return ALREADY_EXISTS error."
+        "ListOperationsResponse": {
+            "description": "The response message for Operations.ListOperations.",
+            "id": "ListOperationsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "The standard List next-page token.",
+                    "type": "string"
                 },
-                "list": {
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "httpMethod": "GET",
-                  "path": "v1beta/{+parent}/workflows",
-                  "flatPath": "v1beta/projects/{projectsId}/locations/{locationsId}/workflows",
-                  "response": {
-                    "$ref": "ListWorkflowsResponse"
-                  },
-                  "description": "Lists Workflows in a given project and location. The default order is not specified.",
-                  "id": "workflows.projects.locations.workflows.list",
-                  "parameters": {
-                    "orderBy": {
-                      "description": "Comma-separated list of fields that that specify the order of the results. Default sorting order for a field is ascending. To specify descending order for a field, append a \" desc\" suffix. If not specified, the results will be returned in an unspecified order.",
-                      "location": "query",
-                      "type": "string"
+                "operations": {
+                    "description": "A list of operations that matches the specified filter in the request.",
+                    "items": {
+                        "$ref": "Operation"
                     },
-                    "pageToken": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "A page token, received from a previous `ListWorkflows` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListWorkflows` must match the call that provided the page token."
-                    },
-                    "parent": {
-                      "type": "string",
-                      "location": "path",
-                      "description": "Required. Project and location from which the workflows should be listed. Format: projects/{project}/locations/{location}",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "required": true
-                    },
-                    "pageSize": {
-                      "type": "integer",
-                      "description": "Maximum number of workflows to return per call. The service may return fewer than this value. If the value is not specified, a default value of 500 will be used. The maximum permitted value is 1000 and values greater than 1000 will be coerced down to 1000.",
-                      "format": "int32",
-                      "location": "query"
-                    },
-                    "filter": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "Filter to restrict results to specific workflows."
-                    }
-                  }
-                },
-                "delete": {
-                  "description": "Deletes a workflow with the specified name. This method also cancels and deletes all running executions of the workflow.",
-                  "httpMethod": "DELETE",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1beta/projects/{projectsId}/locations/{locationsId}/workflows/{workflowsId}",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "id": "workflows.projects.locations.workflows.delete",
-                  "path": "v1beta/{+name}",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameters": {
-                    "name": {
-                      "description": "Required. Name of the workflow to be deleted. Format: projects/{project}/locations/{location}/workflows/{workflow}",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+/workflows/[^/]+$",
-                      "location": "path",
-                      "type": "string"
-                    }
-                  }
-                },
-                "get": {
-                  "response": {
-                    "$ref": "Workflow"
-                  },
-                  "path": "v1beta/{+name}",
-                  "flatPath": "v1beta/projects/{projectsId}/locations/{locationsId}/workflows/{workflowsId}",
-                  "httpMethod": "GET",
-                  "parameters": {
-                    "name": {
-                      "description": "Required. Name of the workflow which information should be retrieved. Format: projects/{project}/locations/{location}/workflows/{workflow}",
-                      "location": "path",
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/workflows/[^/]+$",
-                      "required": true
-                    }
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "description": "Gets details of a single Workflow.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "id": "workflows.projects.locations.workflows.get"
-                },
-                "patch": {
-                  "request": {
-                    "$ref": "Workflow"
-                  },
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "id": "workflows.projects.locations.workflows.patch",
-                  "path": "v1beta/{+name}",
-                  "description": "Updates an existing workflow. Running this method has no impact on already running executions of the workflow. A new revision of the workflow may be created as a result of a successful update operation. In that case, such revision will be used in new workflow executions.",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "updateMask": {
-                      "description": "List of fields to be updated. If not present, the entire workflow will be updated.",
-                      "type": "string",
-                      "format": "google-fieldmask",
-                      "location": "query"
-                    },
-                    "name": {
-                      "description": "The resource name of the workflow. Format: projects/{project}/locations/{location}/workflows/{workflow}",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/workflows/[^/]+$",
-                      "type": "string",
-                      "location": "path",
-                      "required": true
-                    }
-                  },
-                  "flatPath": "v1beta/projects/{projectsId}/locations/{locationsId}/workflows/{workflowsId}",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "PATCH"
+                    "type": "array"
                 }
-              }
             },
-            "operations": {
-              "methods": {
-                "delete": {
-                  "id": "workflows.projects.locations.operations.delete",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`.",
-                  "parameters": {
-                    "name": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$",
-                      "type": "string",
-                      "location": "path",
-                      "required": true,
-                      "description": "The name of the operation resource to be deleted."
-                    }
-                  },
-                  "httpMethod": "DELETE",
-                  "flatPath": "v1beta/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "path": "v1beta/{+name}"
+            "type": "object"
+        },
+        "ListWorkflowsResponse": {
+            "description": "Response for the ListWorkflows method.",
+            "id": "ListWorkflowsResponse",
+            "properties": {
+                "nextPageToken": {
+                    "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
+                    "type": "string"
                 },
-                "list": {
-                  "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`. NOTE: the `name` binding allows API services to override the binding to use different resource name schemes, such as `users/*/operations`. To override the binding, API services can add a binding such as `\"/v1/{name=users/*}/operations\"` to their service configuration. For backwards compatibility, the default name includes the operations collection id, however overriding users must ensure the name binding is the parent resource, without the operations collection id.",
-                  "path": "v1beta/{+name}/operations",
-                  "httpMethod": "GET",
-                  "flatPath": "v1beta/projects/{projectsId}/locations/{locationsId}/operations",
-                  "response": {
-                    "$ref": "ListOperationsResponse"
-                  },
-                  "id": "workflows.projects.locations.operations.list",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "type": "string",
-                      "location": "path",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "description": "The name of the operation's parent resource.",
-                      "required": true
+                "unreachable": {
+                    "description": "Unreachable resources.",
+                    "items": {
+                        "type": "string"
                     },
-                    "pageToken": {
-                      "location": "query",
-                      "type": "string",
-                      "description": "The standard list page token."
-                    },
-                    "pageSize": {
-                      "format": "int32",
-                      "description": "The standard list page size.",
-                      "type": "integer",
-                      "location": "query"
-                    },
-                    "filter": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "The standard list filter."
-                    }
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ]
+                    "type": "array"
                 },
-                "get": {
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service.",
-                  "path": "v1beta/{+name}",
-                  "flatPath": "v1beta/projects/{projectsId}/locations/{locationsId}/operations/{operationsId}",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "location": "path",
-                      "description": "The name of the operation resource.",
-                      "type": "string",
-                      "required": true,
-                      "pattern": "^projects/[^/]+/locations/[^/]+/operations/[^/]+$"
-                    }
-                  },
-                  "httpMethod": "GET",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "id": "workflows.projects.locations.operations.get"
+                "workflows": {
+                    "description": "The workflows which match the request.",
+                    "items": {
+                        "$ref": "Workflow"
+                    },
+                    "type": "array"
                 }
-              }
-            }
-          },
-          "methods": {
-            "list": {
-              "parameterOrder": [
-                "name"
-              ],
-              "flatPath": "v1beta/projects/{projectsId}/locations",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "id": "workflows.projects.locations.list",
-              "httpMethod": "GET",
-              "parameters": {
-                "pageSize": {
-                  "type": "integer",
-                  "format": "int32",
-                  "description": "The standard list page size.",
-                  "location": "query"
+            },
+            "type": "object"
+        },
+        "Location": {
+            "description": "A resource that represents Google Cloud Platform location.",
+            "id": "Location",
+            "properties": {
+                "displayName": {
+                    "description": "The friendly name for this location, typically a nearby city name. For example, \"Tokyo\".",
+                    "type": "string"
                 },
-                "filter": {
-                  "description": "The standard list filter.",
-                  "location": "query",
-                  "type": "string"
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}",
+                    "type": "object"
+                },
+                "locationId": {
+                    "description": "The canonical id for this location. For example: `\"us-east1\"`.",
+                    "type": "string"
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata. For example the available capacity at the given location.",
+                    "type": "object"
                 },
                 "name": {
-                  "description": "The resource that owns the locations collection, if applicable.",
-                  "type": "string",
-                  "location": "path",
-                  "required": true,
-                  "pattern": "^projects/[^/]+$"
-                },
-                "pageToken": {
-                  "location": "query",
-                  "description": "The standard list page token.",
-                  "type": "string"
+                    "description": "Resource name for the location, which may vary between implementations. For example: `\"projects/example-project/locations/us-east1\"`",
+                    "type": "string"
                 }
-              },
-              "description": "Lists information about the supported locations for this service.",
-              "path": "v1beta/{+name}/locations",
-              "response": {
-                "$ref": "ListLocationsResponse"
-              }
             },
-            "get": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "response": {
-                "$ref": "Location"
-              },
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "name"
-              ],
-              "flatPath": "v1beta/projects/{projectsId}/locations/{locationsId}",
-              "description": "Gets information about a location.",
-              "path": "v1beta/{+name}",
-              "id": "workflows.projects.locations.get",
-              "parameters": {
+            "type": "object"
+        },
+        "Operation": {
+            "description": "This resource represents a long-running operation that is the result of a network API call.",
+            "id": "Operation",
+            "properties": {
+                "done": {
+                    "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
+                    "type": "boolean"
+                },
+                "error": {
+                    "$ref": "Status",
+                    "description": "The error result of the operation in case of failure or cancellation."
+                },
+                "metadata": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
+                    "type": "object"
+                },
                 "name": {
-                  "location": "path",
-                  "description": "Resource name for the location.",
-                  "pattern": "^projects/[^/]+/locations/[^/]+$",
-                  "required": true,
-                  "type": "string"
+                    "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
+                    "type": "string"
+                },
+                "response": {
+                    "additionalProperties": {
+                        "description": "Properties of the object. Contains field @type with type URL.",
+                        "type": "any"
+                    },
+                    "description": "The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
+                    "type": "object"
                 }
-              }
-            }
-          }
+            },
+            "type": "object"
+        },
+        "OperationMetadata": {
+            "description": "Represents the metadata of the long-running operation.",
+            "id": "OperationMetadata",
+            "properties": {
+                "apiVersion": {
+                    "description": "API version used to start the operation.",
+                    "type": "string"
+                },
+                "createTime": {
+                    "description": "The time the operation was created.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "endTime": {
+                    "description": "The time the operation finished running.",
+                    "format": "google-datetime",
+                    "type": "string"
+                },
+                "target": {
+                    "description": "Server-defined resource path for the target of the operation.",
+                    "type": "string"
+                },
+                "verb": {
+                    "description": "Name of the verb executed by the operation.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Status": {
+            "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
+            "id": "Status",
+            "properties": {
+                "code": {
+                    "description": "The status code, which should be an enum value of google.rpc.Code.",
+                    "format": "int32",
+                    "type": "integer"
+                },
+                "details": {
+                    "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
+                    "items": {
+                        "additionalProperties": {
+                            "description": "Properties of the object. Contains field @type with type URL.",
+                            "type": "any"
+                        },
+                        "type": "object"
+                    },
+                    "type": "array"
+                },
+                "message": {
+                    "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
+                    "type": "string"
+                }
+            },
+            "type": "object"
+        },
+        "Workflow": {
+            "description": "Workflow program to be executed by Workflows.",
+            "id": "Workflow",
+            "properties": {
+                "createTime": {
+                    "description": "Output only. The timestamp of when the workflow was created.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "description": {
+                    "description": "Description of the workflow provided by the user. Must be at most 1000 unicode characters long.",
+                    "type": "string"
+                },
+                "labels": {
+                    "additionalProperties": {
+                        "type": "string"
+                    },
+                    "description": "Labels associated with this workflow. Labels can contain at most 64 entries. Keys and values can be no longer than 63 characters and can only contain lowercase letters, numeric characters, underscores and dashes. Label keys must start with a letter. International characters are allowed.",
+                    "type": "object"
+                },
+                "name": {
+                    "description": "The resource name of the workflow. Format: projects/{project}/locations/{location}/workflows/{workflow}",
+                    "type": "string"
+                },
+                "revisionCreateTime": {
+                    "description": "Output only. The timestamp that the latest revision of the workflow was created.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "revisionId": {
+                    "description": "Output only. The revision of the workflow. A new revision of a workflow is created as a result of updating the following properties of a workflow: - Service account - Workflow code to be executed The format is \"000001-a4d\", where the first 6 characters define the zero-padded revision ordinal number. They are followed by a hyphen and 3 hexadecimal random characters.",
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "serviceAccount": {
+                    "description": "Name of the service account associated with the latest workflow version. This service account represents the identity of the workflow and determines what permissions the workflow has. Format: projects/{project}/serviceAccounts/{account} Using `-` as a wildcard for the `{project}` will infer the project from the account. The `{account}` value can be the `email` address or the `unique_id` of the service account. If not provided, workflow will use the project's default service account. Modifying this field for an existing workflow results in a new workflow revision.",
+                    "type": "string"
+                },
+                "sourceContents": {
+                    "description": "Workflow code to be executed. The size limit is 32KB.",
+                    "type": "string"
+                },
+                "state": {
+                    "description": "Output only. State of the workflow deployment.",
+                    "enum": [
+                        "STATE_UNSPECIFIED",
+                        "ACTIVE"
+                    ],
+                    "enumDescriptions": [
+                        "Invalid state.",
+                        "The workflow has been deployed successfully and is serving."
+                    ],
+                    "readOnly": true,
+                    "type": "string"
+                },
+                "updateTime": {
+                    "description": "Output only. The last update timestamp of the workflow.",
+                    "format": "google-datetime",
+                    "readOnly": true,
+                    "type": "string"
+                }
+            },
+            "type": "object"
         }
-      }
-    }
-  },
-  "kind": "discovery#restDescription",
-  "revision": "20201008",
-  "rootUrl": "https://workflows.googleapis.com/"
-}
+    },
+    "servicePath": "",
+    "title": "Workflows API",
+    "version": "v1beta",
+    "version_module": true
+}
\ No newline at end of file